Scheduling (Dynamic & Semi-Persistent) in LTE 4G
Dynamic grants via PDCCH, semi-persistent scheduling for VoLTE, and the uplink SR→BSR→grant loop.
The air interface is shared, so no UE transmits whenever it likes. In every 1 ms subframe the eNB's scheduler decides who gets which resource blocks on the shared channels — either fresh each subframe (dynamic) or as a pre-arranged repeating pattern (semi-persistent). This page is grounded in TS 36.321 (MAC) and TS 36.213 (physical-layer procedures).
Introduction
Scheduling is the eNB's per-subframe decision about who transmits or receives, and on which resource blocks. It is the beating heart of the MAC layer: every byte a UE ever sends or receives on the shared channels (PUSCH uplink, PDSCH downlink) arrives because the scheduler issued a grant or an assignment, carried as Downlink Control Information (DCI) on the PDCCH. The signalling is standardised in TS 36.321 and TS 36.213; the decision policy is deliberately left to the vendor.
You see the scheduler at work continuously from the moment a UE reaches RRC_CONNECTED: it runs the uplink SR→grant→BSR→grant handshake, arms semi-persistent patterns for VoLTE, folds in channel quality (CQI) and QoS (QCI), and hands each transmission to HARQ. When throughput is poor, when a UE cannot get an uplink grant, or when latency spikes, the scheduler and its feeder signals are almost always where the answer lives.
Because scheduling is really two separable questions — how a grant is delivered (dynamic DCI vs SPS) and which UE is chosen (the algorithm) — most scheduling problems localise cleanly: a missing DCI, a mis-scrambled RNTI, an SPS activation not recognised, a BSR that never arrived, or a fairness policy starving the cell edge. This page walks each of those in order.
On this page
Why scheduling is needed
In plain words: the cell is one shared road and the eNB is the traffic controller at a single-lane bridge. Cars (UEs) with somewhere to go can't all cross at once, so the controller waves them through a few at a time — favouring the ones who can cross fastest (good channel) but not leaving the slow ones stranded forever (fairness), and letting scheduled buses (VoLTE) run on a fixed timetable instead of asking permission every trip (SPS). Without the controller, everyone floors it at once and nothing gets across.
Concretely, spectrum is scarce and shared, and the two directions have opposite information problems. On the downlink the eNB already holds the data in its own buffers, so it can decide allocations directly. On the uplink the data sits inside the UE and the eNB is blind to it — so it must first be asked (a Scheduling Request), then told how much there is (a Buffer Status Report), before it can size a grant. Per-TTI scheduling lets the eNB chase channel quality, fairness and QoS in real time; but spending a DCI on every tiny periodic packet is wasteful, so LTE also offers a grant-free pattern (SPS) for predictable traffic like voice.
What Scheduling Is
The eNB owns the LTE air interface. Its MAC scheduler maps buffered data — yours and every other UE's — onto the shared time/frequency grid, one Transmission Time Interval (TTI) at a time. In LTE a TTI is fixed at 1 ms (one subframe), and the frequency axis is divided into resource blocks of 12 subcarriers × 180 kHz. Downlink and uplink are handled separately because the constraints differ: on the downlink the eNB already holds the data in its buffers, while on the uplink the data sits in the UE and the eNB must first grant permission to send before anything can arrive.
A per-TTI resource allocator in the eNB. It issues a DL assignment (where to receive on PDSCH) or an UL grant (where to transmit on PUSCH), carried as Downlink Control Information (DCI) on the PDCCH and addressed by the UE's C-RNTI.
Spectrum is scarce and shared. Per-TTI scheduling lets the eNB chase channel quality, fairness and QoS in real time — but sending a DCI for every tiny periodic packet is wasteful, so LTE also offers a grant-free pattern for predictable traffic like voice.
Dynamic: a DCI on PDCCH every TTI. Semi-persistent: RRC pre-configures a periodic allocation, armed by a single DCI, so no per-transmission signalling is needed until it is released.
Two things sit underneath every scheduling decision. First, the eNB must know each UE's channel quality — the downlink Channel Quality Indicator (CQI) the UE reports lets the scheduler pick both who to serve and the modulation-and-coding scheme (MCS) to serve them at; this is the link between scheduling and link adaptation. Second, the eNB must respect each bearer's quality of service — the QoS Class Identifier (QCI) attached to a bearer sets its priority, delay budget and whether it is guaranteed-bit-rate. A good scheduler folds both into its per-TTI choice, which is why the later algorithm families matter so much.
Rule of thumb: bursty, unpredictable traffic → dynamic scheduling. Small, strictly periodic traffic (VoLTE voice) → Semi-Persistent Scheduling, to cut the PDCCH overhead of a fresh grant every 20 ms.
Dynamic Scheduling — a DCI every TTI
Dynamic scheduling is the default and most flexible mode. For each transmission the eNB sends a DCI on the PDCCH, whose CRC is scrambled (masked) with the UE's C-RNTI so only that UE acts on it. The UE blindly decodes candidates in its search space, finds a DCI whose CRC unmasks with its C-RNTI, and reads the allocation. There is no dedicated "here is your grant" channel — the addressing is the CRC mask, which is why RNTIs are central to everything the scheduler does.
Search spaces & which RNTI, where: the UE blind-decodes a common search space (CSS) and a UE-specific search space (USS). Broadcast/shared DCIs live in the CSS — system information addressed by SI-RNTI, paging by P-RNTI, the RAR by RA-RNTI, and TPC bundles by TPC-PUCCH-RNTI/TPC-PUSCH-RNTI. A UE's own data grants (addressed by C-RNTI or SPS-C-RNTI) are found in the UE-specific search space, with the fallback DCI 1A/DCI 0 also monitored in the CSS. The RNTI is not sent — it is the CRC scramble the UE must guess by trying its own.
Different DCI formats do the scheduling work, split by direction and by transmission mode:
| DCI format | Direction | Purpose |
|---|---|---|
DCI 0 | Uplink | An UL grant: resource blocks, MCS, and frequency hopping for the UE's PUSCH. Same payload size as DCI 1A so they share blind-decode candidates. |
DCI 4 | Uplink | UL grant for uplink spatial multiplexing (MIMO) — introduced later to carry a second codeword / precoding on PUSCH. |
DCI 1A | Downlink | Compact DL assignment for a single codeword — the fallback format, also used for RACH-order and paging. Works in any transmission mode. |
DCI 1 / DCI 1B / DCI 1D | Downlink | Single-codeword DL assignments tied to specific transmission modes (e.g. closed-loop rank-1 precoding, multi-user MIMO with power offset). |
DCI 2 / DCI 2A / DCI 2B / DCI 2C / DCI 2D | Downlink | Two-codeword DL assignments for spatial-multiplexing MIMO transmission modes (the 2x family). |
DCI 3 / DCI 3A | Power control | Not a data grant — carries a bundle of TPC (transmit-power-control) commands for many UEs at once, addressed by the TPC-PUCCH-RNTI / TPC-PUSCH-RNTI. |
A DL assignment tells the UE which resource blocks carry its PDSCH, plus the MCS, HARQ process number, redundancy version, and the PUCCH resource for its HARQ-ACK. An UL grant tells the UE where and how to send its PUSCH, including the MCS and any frequency hopping. Every scheduled transmission ties into HARQ — the DCI names the HARQ process and redundancy version so retransmissions can be soft-combined at the receiver. On the uplink LTE uses synchronous HARQ, so a retransmission lands a fixed 8 ms after the original; on the downlink HARQ is asynchronous, so the eNB retransmits whenever the scheduler finds room.
Mental model: a DL assignment says "your data is here, go receive it"; an UL grant says "you may transmit here, go for it." Both are just DCI on PDCCH addressed by C-RNTI — only the direction and format differ.
✅ Debugging steps
- Confirm the UE is actually decoding a DCI: check that its blind decode in the search space finds a candidate whose CRC unmasks with the expected
C-RNTI. - Verify the DCI format matches the configured transmission mode — a UE in a 2-codeword TM will not act on a format it is not monitoring for that RNTI.
- Check PDCCH capacity: count CCE aggregation-level usage in the control region; blocking here means grants are computed but never sent.
- Cross-check the grant's HARQ process / RV fields against the following HARQ trace so retransmissions combine into the right buffer.
⚠ Common causes of failure
- PDCCH congestion / CCE exhaustion — the scheduler has data to grant but no control-channel room, so the UE is starved despite a good channel.
- Wrong RNTI or search space: a DCI scrambled with the wrong RNTI (or placed in a space the UE is not monitoring) is never decoded.
- DCI format mismatch with the UE's transmission mode, so the payload size the UE tries does not line up.
- Weak PDCCH coverage — the control region reaches shorter than the data region, so a cell-edge UE misses the grant even when PDSCH would have decoded.
Semi-Persistent Scheduling (SPS) — periodic allocation for VoLTE
SPS is LTE's grant-free mechanism, and it works in both directions. Instead of a DCI per transmission, RRC provisions a periodic allocation via sps-Config, and a single DCI activates or releases it. The classic use case is VoLTE: an AMR speech codec emits one small packet every 20 ms, and spending a PDCCH DCI on each of those, for every voice user in the cell, would drown the control region.
A recurring PDSCH (downlink) or PUSCH (uplink) allocation that repeats every semiPersistSchedIntervalDL / semiPersistSchedIntervalUL — e.g. 20 subframes for a voice codec frame — configured by sps-Config.
VoLTE produces a small AMR speech packet on a fixed 20 ms cadence. Sending a fresh DCI on PDCCH for each one wastes control capacity and adds latency across the many simultaneous voice users in a cell. SPS pays the signalling cost once.
RRC configures sps-Config; the eNB then sends an activation DCI whose CRC is scrambled with the SPS-C-RNTI to arm the pattern (this DCI also fixes the resources and MCS), and a release DCI (also SPS-C-RNTI) to stop it. Between activation and release the UE uses the pattern with no per-occasion DCI.
The activation and release DCIs are recognised by special validation field values — for example the New Data Indicator set to 0 and certain resource/MCS fields set to defined patterns per TS 36.213 — so the UE can tell an SPS command apart from an ordinary assignment. A release is signalled the same way, with its own reserved field pattern, which is why the eNB does not need a separate message to tear the pattern down.
Downlink vs uplink SPS. The two directions share the mechanism but differ in the fine print. Downlink SPS delivers a repeating PDSCH; the UE still returns HARQ-ACK for each occasion, and the number of configured SPS HARQ processes is set by numberOfConfSPS-Processes. Uplink SPS delivers a repeating PUSCH; it adds an implicit release rule — after a configured number of consecutive empty transmissions (implicitReleaseAfter, e.g. 2, 3, 4 or 8 zero-MAC-SDU PDUs), the UE releases the pattern on its own, so an idle talk-spurt does not keep burning uplink resource. HARQ still applies to each SPS transmission, and a normal dynamic DCI addressed by C-RNTI can always override or add to an SPS occasion when extra data appears — the dynamic grant simply takes precedence for that subframe.
Two RNTIs, two jobs: the C-RNTI addresses dynamic assignments and grants; the SPS-C-RNTI (Semi-Persistent Scheduling C-RNTI) addresses SPS activation and release. Same UE, different identity for the "armed periodic pattern."
✅ Debugging steps
- Confirm the activation DCI was recognised as SPS: check it is scrambled with
SPS-C-RNTIand its validation fields (e.g.NDI=0, reserved resource/MCS patterns per TS 36.213) match, otherwise the UE treats it as a one-shot assignment. - Verify the periodicity actually in use matches
semiPersistSchedIntervalUL/DLand the codec cadence (e.g. 20 ms for AMR). - For uplink, count consecutive empty transmissions against
implicitReleaseAfter— an early implicit release will look like sudden voice-packet loss. - Check whether a dynamic
C-RNTIgrant is (correctly) overriding an SPS occasion when extra data appears.
⚠ Common causes of failure
- Activation/release DCI not recognised — wrong RNTI or validation field pattern, so the pattern never arms (or never tears down).
- Interval mismatch between
sps-Configand the actual codec rate, so voice packets miss their allocation. - Premature implicit release from silence periods (
implicitReleaseAftertoo small) dropping the periodic grant mid-call. - Fixed SPS MCS too aggressive for a fading channel — SPS does not adapt per occasion, so occasions fail without dynamic rescue.
How Uplink Data Gets Scheduled — SR → Grant → BSR → Grant
Dynamic uplink is the interesting case, because the eNB cannot see inside the UE's buffers. The UE has to ask. The sequence is a short handshake:
1. Scheduling Request (SR). Data arrives in the UE's buffer but it has no valid UL grant. It sends a 1-bit SR on its configured PUCCH resource — essentially "I have something to send." 2. Small grant. The eNB responds with a small UL grant (DCI 0 on PDCCH) just large enough to carry a report. 3. Buffer Status Report (BSR). The UE uses that grant to send a BSR MAC control element reporting how much data it has buffered, per Logical Channel Group. 4. Right-sized grant. Now the eNB knows the volume and QoS and issues an appropriately sized grant. 5. Data on PUSCH. The UE transmits the actual data, often alongside a Power Headroom Report (PHR) so the eNB learns how much transmit power the UE has left. If the UE already holds a valid grant when data arrives, it skips the SR and sends the BSR directly. If it has data but no SR resource configured, it falls back to random access on PRACH.
SPS short-circuits this loop for VoLTE: with a periodic uplink allocation already in hand, the UE transmits its speech packet immediately — no SR, no waiting for a grant. That saved round-trip is exactly why SPS lowers voice latency, not just PDCCH load.
Reading the uplink scheduling loop in the logs
The handshake is visible as a short, ordered sequence of MAC events: an SR on PUCCH, a small DCI 0 grant, a BSR MAC CE reporting per-LCG volume, then a right-sized grant and the data (often with a PHR). The fields to line up are the C-RNTI, the reported buffer size, and the grant size that answers it.
Representative eNB MAC scheduler log — illustrative, values vary by vendor/build:
| Field | Meaning | Example (from log) | Check |
|---|---|---|---|
SR / pucchRes | Scheduling Request on the UE's configured PUCCH resource. | pucchRes=7 | If the SR never appears, check the SR periodicity/resource config; if repeated, the small grant is not reaching the UE. |
crnti | The dynamic identity the grant is scrambled with. | 0x4E21 | Must match across SR/grant/BSR/PUSCH; a mismatch means the grant addressed the wrong UE. |
dci=0 / tbs | UL grant (DCI 0) and its transport-block size. | tbs=56 then 2216 | The first grant must be big enough for a BSR; the second must cover the reported volume. |
BSR / lcgN | Buffer Status Report per Logical Channel Group. | lcg1=1204B | The right-sized grant should track this figure; a persistent gap means the UE stays backlogged. |
phr | Power Headroom Report sent with the data. | +7dB | Negative/zero headroom = power-limited UE; the eNB should cap MCS/RB rather than starve it. |
crc | PUSCH decode result (ties into UL HARQ). | PASS | FAIL triggers the synchronous UL HARQ retransmission at n+8; correlate with the HARQ trace. |
✅ Debugging steps
- Confirm the SR is being sent and detected — verify the SR
PUCCHresource/periodicity and that the eNB logs a pending SR for the rightC-RNTI. - Check the small grant follows the SR promptly and is large enough to carry a
BSR— too small and the loop stalls. - Verify the
BSRreports the expected per-LCG volume, then that the right-sized grant tracks it. - Inspect the
PHR: a power-limited UE needs a lower MCS / smaller allocation, not a bigger unusable grant.
⚠ Common causes of failure
- No SR resource configured, so the UE must fall back to
PRACH— adds latency and looks like a stalled uplink. - SR sent but the small grant never arrives (PDCCH congestion), so the UE keeps re-sending SRs up to
dsr-TransMaxthen triggers RACH. - BSR under-reports or is dropped, so the eNB issues a too-small grant and the UE stays backlogged.
- Power-limited UE (poor
PHR) that cannot use a large grant — uplink throughput collapses despite grants being issued.
Dynamic vs Semi-Persistent
The two modes trade signalling overhead against flexibility. Put side by side:
| Dynamic scheduling | Semi-Persistent Scheduling (SPS) | |
|---|---|---|
| Direction | DL and UL | DL and UL |
| Per-TTI DCI? | Yes, every transmission | No — only activation and release |
| RNTI used | C-RNTI | SPS-C-RNTI (activation / release) |
| Configured by | DCI on PDCCH each time | sps-Config (RRC) + activation DCI |
| Best for | Bursty / unpredictable traffic | Small, strictly periodic traffic (VoLTE) |
| Latency | Higher (SR/grant round-trip, DCI decode) | Low (resource already in hand) |
| Overhead | One DCI per allocation | One DCI to arm, then none until release |
| Release | Not applicable (grant is one-shot) | Explicit release DCI, or implicit after N empty TX (UL) |
| HARQ | Process and RV signalled in the DCI | Still per transmission; process tied to the pattern |
Q. Which RNTI activates SPS, and why not the C-RNTI?
A. The SPS-C-RNTI. Using a distinct RNTI, together with special validation field values in the DCI (e.g. NDI = 0 and reserved fields set to defined patterns), lets the UE recognise the command as an SPS activation or release rather than a one-shot dynamic assignment addressed by C-RNTI.
Q. Why use SPS for VoLTE instead of dynamic scheduling?
A. Voice is a small AMR packet every 20 ms. Dynamic scheduling would spend a PDCCH DCI on every packet, wasting control capacity and adding decode latency across the many simultaneous voice users in a cell. SPS provisions the periodic resource once, so no per-packet DCI is needed and the SR/grant round-trip disappears.
Q. What does the BSR do in the uplink loop?
A. The eNB cannot see the UE's buffers, so after the SR wins a small grant the UE sends a BSR MAC CE reporting how much data it has per Logical Channel Group. That lets the eNB issue a right-sized grant instead of guessing.
Q. How does an uplink SPS pattern get torn down if the UE goes quiet?
A. By implicit release. After implicitReleaseAfter consecutive empty (zero-MAC-SDU) transmissions, the UE releases the uplink SPS resource itself — so a silence period in a call does not keep the periodic grant reserved.
Scheduler Algorithm Types — who gets the TTI?
Everything above answers how a grant is delivered (dynamic DCI or SPS). This section answers a different question: when several UEs all have data ready in the same subframe and there are not enough resource blocks for everyone, which UE does the scheduler pick? That decision is made by a scheduling algorithm running inside the eNB.
Not in the 3GPP spec. TS 36.321 and TS 36.213 define the signalling — DCI, RNTIs, grants, SR/BSR — but deliberately leave the decision policy to the vendor. So Round Robin, Max C/I and Proportional Fair are implementation choices, not spec-mandated behaviour. Every RAN vendor ships its own tuned scheduler, but they are all variations on the classic families below.
Each algorithm is really just a rule for computing a priority metric per UE every TTI; the scheduler serves the UE(s) with the highest metric. The three foundational families differ only in what goes into that metric:
1. Round Robin (RR) — equal turns
Serve UEs in strict rotation — UE1, UE2, UE3, UE1, … — giving each an equal share of time / opportunities, regardless of channel quality.
Simplest possible policy and perfectly fair in air-time. A good baseline, used where predictability matters more than raw capacity.
Metric = "time since this UE was last served." No CQI in the decision. A cell-edge UE gets exactly as many turns as a cell-centre one — but transmits at a low MCS during its turn, so it wastes spectrum.
Trade-off: maximum fairness in turns, but low overall cell throughput because good-channel opportunities are handed to poor-channel UEs.
2. Max C/I (Maximum Rate / CQI-based) — always the best channel
Each TTI, serve the UE with the best instantaneous channel — the highest reported CQI / achievable rate. Also called Max-Rate or "greedy."
Maximises total cell throughput — every resource block is used at the highest possible MCS. Useful as a throughput benchmark.
Metric = instantaneous achievable rate Rk(t), derived directly from the UE's CQI report. The UE nearest the eNB almost always wins.
Trade-off: highest cell throughput but starves cell-edge UEs — a UE in poor coverage may never be scheduled. Unfair and unusable on its own in a real network.
3. Proportional Fair (PF) — the practical middle ground
PF is what real LTE schedulers are built around. It balances the two extremes: chase good channel conditions relative to each UE's own average, so a cell-edge UE still gets served when its channel momentarily peaks. Each TTI it serves the UE with the highest ratio of instantaneous rate to its own recent average throughput:
Serve the UE whose channel is best relative to its own recent average. The averaging window (via α) is the fairness knob.
Captures most of Max C/I's throughput gain (multi-user diversity — riding each UE's channel peaks) while still giving every UE a reasonable share. Best overall fairness-vs-throughput compromise.
Track a running average throughput Tk per UE. Divide the instantaneous rate by it. Large window → behaves like Max C/I; small window → behaves like Round Robin. Real deployments tune this per traffic mix.
4. Delay- and QoS-aware schedulers
Pure PF is channel-fair but blind to deadlines, so production LTE schedulers extend it to protect latency-bound and guaranteed-bit-rate bearers. These fold each packet's head-of-line delay and the bearer's QCI priority into the metric, so a packet approaching its Packet Delay Budget, or a high-priority QCI bearer (e.g. QCI 1 for VoLTE), gets boosted before it is late.
Other / derived schedulers
| Scheduler | Idea | Used for |
|---|---|---|
| Blind Equal Throughput / Max-Min fairness | Prioritise the UE with the lowest average throughput so all UEs converge to an equal data rate. | When equal bit-rate (not equal air-time) is the goal; strongly favours the cell edge. |
| Delay- / QoS-aware (e.g. M-LWDF, EXP/PF) | Fold packet delay and QCI priority into the metric — a packet near its Packet Delay Budget gets boosted. | GBR / latency-bound flows: VoLTE, video streaming. |
| Weighted PF | PF metric multiplied by a per-UE / per-bearer weight (from QCI, ARP, subscription tier). | Prioritising premium subscribers or high-priority bearers within a fair framework. |
| Max C/I (recap) | Pure instantaneous rate. | Throughput benchmark only; not used alone in production. |
Side by side
| Algorithm | Uses channel quality (CQI)? | Fairness | Cell throughput | Cell-edge performance |
|---|---|---|---|---|
| Round Robin | No | High (equal air-time) | Low | Fair air-time, but low rate |
| Max C/I | Yes (greedy) | Very low | Highest | Starved |
| Proportional Fair | Yes (relative) | Balanced | High | Reasonable |
| Equal Throughput / Max-Min | Indirectly | Equal bit-rate | Lower | Strongly favoured |
| Delay / QoS-aware | Yes + delay/QoS | Per-QoS | High | Protected for GBR flows |
To see why they behave so differently, picture three UEs in one cell — UE₁ near the eNB (great channel), UE₂ mid-cell, UE₃ at the edge (poor channel) — all with data to send in the same subframe:
Q. Are scheduler types like Round Robin and Proportional Fair defined in the 3GPP specs?
A. No. 3GPP standardises the scheduling signalling (DCI formats, RNTIs, SR/BSR, grants) but leaves the actual selection algorithm to the vendor. RR / Max C/I / PF are well-known implementation strategies, not spec requirements — which is why schedulers are a key differentiator between RAN vendors.
Q. Why is Proportional Fair the default choice in real LTE networks?
A. It captures most of Max C/I's multi-user-diversity throughput gain (by riding each UE's channel peaks) while still giving cell-edge UEs a usable share — because the metric divides instantaneous rate by the UE's own recent average, not the absolute rate. Round Robin is too wasteful; Max C/I is too unfair; PF sits in between and is tunable via its averaging window.
Q. What does the CQI report have to do with scheduling?
A. The CQI the UE feeds back tells the scheduler the UE's current achievable rate. Channel-aware algorithms (Max C/I, PF, QoS-aware) use it directly in their priority metric; Round Robin ignores it. It is also what sets the MCS once a UE is picked — the link-adaptation tie-in.
Scheduling, QoS, Link Adaptation and Coverage
The scheduler does not work in isolation — three neighbouring mechanisms feed it or lean on it, and understanding scheduling means understanding those seams.
QoS (QCI priorities). Each EPS bearer carries a QCI that fixes its priority level, Packet Delay Budget and whether it is Guaranteed Bit Rate. QCI 1, for instance, is the conversational-voice bearer used by VoLTE — low delay budget, high priority. The scheduler reads these values when it weights its per-TTI metric, so a high-priority or near-deadline bearer is served ahead of best-effort traffic. This is the bridge between the abstract QoS the core network promises and the concrete resource blocks the eNB hands out.
CQI-driven link adaptation. Once the scheduler has chosen a UE, it must choose how fast to send. The UE's reported CQI maps to an MCS and therefore a transport-block size: a strong channel earns 64-QAM (or 256-QAM in later releases) at a high code rate, a weak channel drops to QPSK. Scheduling picks who; link adaptation picks how fast — and both read the same CQI, which is why channel-aware schedulers get link adaptation "for free."
TTI bundling for coverage. When a cell-edge UE cannot close the uplink budget even at the lowest MCS, a single 1 ms transmission may not carry enough energy. TTI bundling lets the UE send the same transport block across a bundle of consecutive subframes (four in LTE), HARQ-combined at the eNB, with a single grant covering the whole bundle. It trades peak rate for reliable coverage — a coverage tool the scheduler reaches for at the cell edge, and a close cousin of the delay-aware policies above.
One picture: QCI tells the scheduler how important a bearer is, CQI tells it how good the channel is, and TTI bundling is the fallback when even the lowest MCS is not enough. The scheduling algorithm is where all three meet, every millisecond.
LTE ↔ NR: the DCI/RNTI/search-space framing carries straight over, but NR generalises almost every axis. LTE's fixed 1 ms TTI becomes a numerology-dependent slot (plus sub-slot/mini-slot scheduling for low latency); LTE's DCI 0/DCI 1A family becomes NR's DCI 0_0/0_1 (UL) and DCI 1_0/1_1 (DL) in explicit common and UE-specific search spaces on CORESETs; LTE resource-block allocation gains NR bandwidth parts (BWPs). SPS survives as NR downlink SPS and is joined by uplink configured grants (Type 1 RRC-only, Type 2 DCI-activated). The scheduler algorithms (RR/Max‑C I/PF) remain vendor-proprietary in both.
Summary
Scheduling is the eNB deciding, every 1 ms TTI, who transmits or receives and on which resource blocks — delivered as a DCI on PDCCH, addressed by a CRC scramble (C-RNTI for dynamic, SPS-C-RNTI for semi-persistent, and the broadcast RNTIs SI-RNTI/P-RNTI/RA-RNTI in the common search space). Split the topic in two: how the grant is delivered (dynamic DCI vs SPS) and which UE is chosen (RR / Max C/I / PF / QoS-aware, all vendor policy).
On the uplink the eNB is blind to the UE's buffer, so the SR→grant→BSR→grant handshake exists to discover volume before sizing a grant; SPS short-circuits it for periodic VoLTE traffic. To debug, walk the delivery path first — is the DCI decoded (right RNTI, right search space, PDCCH capacity)? — then the feeder signals (SR resource, BSR volume, PHR headroom), then the policy (is the cell edge being starved?). Almost every "no throughput" or "no uplink grant" ticket resolves at one of those points.
Finally, scheduling never stands alone: QCI tells it how important a bearer is, CQI tells it how good the channel is (and sets the MCS via link adaptation), HARQ closes each transmission, and TTI bundling rescues the cell edge. The scheduling algorithm is where all of these meet, every millisecond.
Where scheduling connects
Scheduling is the meeting point of the control channel, the MAC control elements that feed it, the QoS the bearer promises, and the retransmission machinery that closes each transmission.