The downlink shared channel, from the packet to the antenna
Open a web page on a phone. Somewhere a server sends an IP packet, and a few milliseconds later those bytes are in the phone's memory. In between, the packet was cut up, numbered, ciphered, headed, error-protected, encoded, punctured, scrambled, mapped to constellation points, spread across antennas, painted onto a grid of subcarriers, and radiated.
Almost all of that happened on one channel. It is called the physical downlink shared channel, PDSCH, and it is defined in TS 38.211 clause 7.3.1 — four pages, in a document of several hundred.
In one line. PDSCH is the physical realisation of one transport channel, the DL-SCH. Everything the network sends you that is not the four-symbol block you used to find the cell, and not the scheduling message that pointed at the data, arrives on PDSCH. It is not a substitute for another channel; it is what the other downlink channels of LTE were collapsed into.
How to read this note. Like its two predecessors, it is a ladder and gets harder in one direction only. Part I is plain words and needs nothing but the idea of a radio. Part VI is the reading list. Every fact carries a clause number, so you can check it, and every number that was calculated rather than quoted shows its working.
What you should already have. The frame-structure note built the resource grid — subcarriers, symbols, the block of twelve, bandwidth parts, and what an antenna port means. This note takes all of that as given and asks what actually travels on it.
Concepts this note leans on. Every term below is tracked on the folder's concept map — which says whether it has been properly explained yet, and links to the explanation where there is one. Scanned from this file at page load, so it cannot fall behind the text. A term marked not yet is a gap in the folder, not in your reading.
The ladder, and where to get off it.
Part I · The channel and its place (§1–§3) — what PDSCH is, what falls into it from above, and the question this note was written to answer: a substitute for what? No arithmetic.
Part II · The block becomes bits (§4–§5) — TS 38.212 clause 7.2: the CRC, the two LDPC codes, why a code block cannot exceed 8448 bits, and what a retransmission actually re-sends. Stop here and you understand the encoder.
Part III · Bits become a picture (§6–§7) — TS 38.211 clause 7.3.1: scrambling, modulation, layers, ports, virtual blocks. Then the reference signals that ride alongside and the holes cut out of the allocation for other people's furniture.
Part IV · Who tells it where to be (§8–§10) — the DCI, the two ways of naming frequency and of naming time, the four-step arithmetic that decides how many bits fit, and the report the scheduler based all of it on. §10 is where the loop closes.
Part V · How fast, and how soon (§11–§12) — the two numbers everyone quotes, done properly: the peak-rate formula of TS 38.306 and what its overhead constant is hiding, then the round trip and the finding this note is built on — the decoding budget stops shrinking at 178 µs.
Part VI · Where it came from, and where it is going (§13–§14) — what each release added and how
to prove it with one grep, the three walls PDSCH is up against, and — fenced off from the rest —
what is being proposed after it.
Part VII · Reference (§15–§16) — the clauses used, the books, and where this goes next.
- The channel that carries everything
- Coming from where — the fall through the stack
- A substitute for what
The channel that carries everything
Three channels down, and only one of them is yours
Count the downlink physical channels in the standard. Not the signals — the channels, the things that carry information handed down from a higher layer. TS 38.211 clause 7.3 has exactly three subclauses:
7.3.1 — Physical downlink shared channel (PDSCH). The data.
7.3.2 — Physical downlink control channel (PDCCH). The message that says who is scheduled, where in the grid, and how it was encoded. It is not the data; it is the envelope's address.
7.3.3 — Physical broadcast channel (PBCH). A few dozen bits of "here is how to join this cell" — the master information block plus eight timing bits added at layer 1 (TS 38.212 clause 7.1.1), encoded out to exactly 864 bits (clause 7.1.5) and repeated forever inside the SS/PBCH block, so a device that knows nothing can bootstrap (§9.1 of the frame-structure note).
That is the whole list. PBCH gets you into the cell, PDCCH tells you where to look, and everything else in the downlink — every web page, every video frame, every system information block after the first, every paging message, every RRC reconfiguration — is PDSCH.
What "shared" means, and why it is in the name
The word is doing real work. A shared channel is one whose resources are not owned by anybody and are reassigned from scratch on every transmission opportunity.
The alternative, for contrast. A dedicated channel gives a device a fixed slice of the radio for the duration of a call. That was how circuit-switched cellular worked, and it is efficient exactly when traffic is a constant-rate voice stream and nothing else.
Data traffic is not that. It is bursty by nature: idle for seconds, then a hundred megabits in a hurry. A fixed slice is either far too small during the burst or wasted during the silence.
So NR gives the grid to a scheduler in the base station, which reassigns it every slot — as often as every 125 µs at 120 kHz subcarrier spacing. TS 38.300 clause 6.2.1 lists what the DL-SCH transport channel supports, and the list is essentially a description of a shared resource:
"support for HARQ; support for dynamic link adaptation by varying the modulation, coding and transmit power; possibility to be broadcast in the entire cell; possibility to use beamforming; support for both dynamic and semi-static resource allocation; support for UE discontinuous reception (DRX) to enable UE power saving." — TS 38.300 clause 6.2.1, downlink transport channel types
Every one of those bullets is a knob the scheduler turns per transmission. PDSCH is the surface those knobs act on.
The whole thing on one page
Before any of the detail, here is the shape of it. A PDSCH is never alone. Four other things must happen around it, and every one of them is a separate channel or signal with its own clause:
Read the cycle once and the rest of this note has a place to live.
Everything on the left is a guess about the future. A CSI report describes the channel as it was when it was measured, and the scheduler acts on it some milliseconds later. If the guess is good, the block decodes. If it is not, §12 cleans up.
Everything in the middle is bookkeeping so that both ends agree without ever exchanging a description of what was agreed. Nothing in the DCI states the transport block size, the number of code blocks, the LDPC base graph or the scrambling sequence — all four are computed independently at both ends from the same inputs. Most of Parts II to IV is that arithmetic.
Everything on the right is an admission that it might not have worked. The design target is a link that fails one time in ten (§10.1), because a link that never failed would be running far below what the channel could carry.
Coming from where — the fall through the stack
The layers above, in the order a byte meets them
A packet does not arrive at the physical layer as a packet. It arrives as an anonymous block of bits, and by then five sublayers have had their turn.
The handover point is a transport block, and nothing else
This is the sentence to remember, and TS 38.202 clause 4.1 states it in two lines:
"The physical layer offers data transport services to higher layers. The access to these services is through the use of transport channels via the MAC sub-layer. A transport block is defined as the data delivered by MAC layer to the physical layer and vice versa." — TS 38.202 clause 4.1
A transport block is an opaque bag of bits with a length. The physical layer does not know whether it holds a video frame or a signalling message, and it does not care. Everything in Parts II and III of this note operates on that bag.
That opacity is the whole reason the design scales. Add a new service above — a new QoS class, a new type of signalling — and the physical layer needs no change at all, because it never looked inside.
Two mappings, not one
Between an application and an antenna there are two renamings, and confusing them is the usual source of muddle.
Logical channel → transport channel. What kind of information is this? becomes how shall it be carried? Done by MAC. TS 38.300 clause 6.2.3.
Transport channel → physical channel. How shall it be carried? becomes which bits of the grid? Done by the physical layer. TS 38.202 clause 5.2.
| Logical channel | What it carries | Transport channel | Physical channel |
|---|---|---|---|
| BCCH | The master information block | BCH | PBCH |
| BCCH | System information blocks (SIB1 onwards) | DL-SCH | PDSCH |
| PCCH | Paging — "wake up, there is something for you" | PCH | PDSCH |
| CCCH | Control for a device with no RRC connection yet | DL-SCH | PDSCH |
| DCCH | Dedicated control — RRC reconfiguration, measurement orders | DL-SCH | PDSCH |
| DTCH | The user's actual traffic | DL-SCH | PDSCH |
PCH is worth a second look. It is a separate transport channel with its own name, its own DRX behaviour and its own clause — and it has no physical channel of its own. TS 38.202 clause 5.2.3 disposes of it in one sentence: "The PCH is carried on PDSCH." The same is visible in the coding specification, whose clause 7.2 is titled "Downlink shared channel and paging channel" — one chain, two transport channels (TS 38.212 clause 7.2).
A substitute for what
Three different questions hide inside that one, and they have three different answers.
It is the physical realisation of DL-SCH
Within NR, PDSCH substitutes for nothing. It is not an alternative to another channel; it is what a transport channel becomes when it stops being an abstraction and starts being energy.
The relationship is worth stating precisely, because the two names are used loosely everywhere:
DL-SCH is a transport channel — a contract: blocks of this size, this often, with HARQ, with link adaptation. It describes a service, and it has no subcarriers, no symbols and no modulation.
PDSCH is a physical channel — the implementation of that contract on a particular grid at a particular moment, with a modulation order, a code rate, a set of resource blocks and a set of antenna ports.
One is the interface, the other is the mechanism. DL-SCH is what MAC believes it is talking to. PDSCH is what the antenna does about it.
What it replaced: LTE's downlink channel zoo
This is the historical answer, and it is the interesting one — because NR's downlink is radically shorter than LTE's, and PDSCH is where several of the deleted channels went.
Count the clauses. LTE's physical layer specification lists seven downlink physical channels (TS 36.211 clauses 6.4 to 6.9, including 6.8A/6.8B/6.8C). NR lists three (TS 38.211 clause 7.3).
| LTE (TS 36.211) | What it did | In NR | Where the job went |
|---|---|---|---|
| PDSCH §6.4 | User data | PDSCH | Kept, and given everything below |
| PDCCH §6.8 | Scheduling assignments | PDCCH | Kept, but confined to a configured CORESET instead of spanning the whole carrier |
| EPDCCH / MPDCCH / SPDCCH §6.8A–C | Three later patches for control capacity, coverage and latency | — | Folded into PDCCH. The CORESET is configurable in time and frequency from the start, so the patches were unnecessary |
| PBCH §6.6 | Master information | PBCH | Kept, inside the SS/PBCH block |
| PCFICH §6.7 | Announced how many symbols the control region occupied — a channel whose entire content was one number, decoded before anything else | — | Deleted. The control region is a CORESET configured by RRC, so its size is already known |
| PHICH §6.9 | Carried the uplink HARQ acknowledgement | — | Deleted. NR's HARQ is asynchronous: a retransmission is an ordinary grant on PDCCH, so no dedicated channel is needed |
| PMCH §6.5 | Multicast/broadcast (MBSFN) | — | Deleted. Multicast returned in Release 17 as ordinary PDSCH addressed to a group RNTI |
| CRS §6.10.1 | Cell-specific reference signals, transmitted always and everywhere whether or not anyone was listening | — | Deleted. Replaced by DM-RS inside the PDSCH allocation (§7.1) — sent only where there is data to demodulate |
The pattern is one idea applied seven times: stop transmitting things nobody asked for.
PCFICH, PHICH and CRS were all always-on. They cost energy and spectrum in an empty cell, they made the carrier impossible to reshape, and — the reason that eventually forced the issue — they made it impossible to turn a cell down. A base station whose CRS must be radiated across the whole band every subframe cannot sleep.
NR's rule is the opposite: nothing is transmitted unless it is for somebody, with the single unavoidable exception of the SS/PBCH block, which is what a device with no knowledge finds first. Everything else was either deleted or absorbed into a scheduled PDSCH.
So the honest answer to "a substitute for what" is: PDSCH is what four LTE downlink channels became when the design stopped reserving the radio in advance. It did not replace them one for one; it swallowed the jobs that survived, and the rest were dropped.
Its mirror: PUSCH
The uplink has the same structure, one letter different: PUSCH carries UL-SCH, defined in TS 38.211 clause 6.3.1 with almost the same processing chain, and coded by TS 38.212 clause 6.2.
The differences are all consequences of who is transmitting:
PUSCH can use a second waveform. DFT-spread OFDM is available on the uplink to cut the peak-to-average ratio, because it is the phone's power amplifier that suffers (§9.2 of the frame-structure note). PDSCH is CP-OFDM only — the base station can afford back-off.
PUSCH carries control on the data channel. Acknowledgements and channel reports get multiplexed into PUSCH when both are due, because the phone should transmit once, not twice.
PUSCH is granted, PDSCH is assigned. Both are told by a DCI on PDCCH, but the uplink message is a grant — permission to transmit — and the downlink one is an assignment: an instruction to listen. The phone has no say in either.
The coding chain, step by step
MAC hands down one transport block of $A$ bits. Six operations later it is a codeword: a flat sequence of $G$ bits sized to fit exactly the resource elements the scheduler set aside. Those six operations are TS 38.212 clauses 7.2.1 to 7.2.6, in that order, and they are the same six for DL-SCH and for PCH.
The CRC, and why there are two of them
Error detection comes first, before any correction. The entire transport block is used to compute parity bits which are appended to it (clause 7.2.1):
If $A > 3824$ — 24 parity bits, generator polynomial $g_{\text{CRC24A}}(D)$.
Otherwise — 16 parity bits, generator polynomial $g_{\text{CRC16}}(D)$.
Either way the result is $B = A + L$ bits.
The split is an overhead argument, and the numbers make it obvious. On a 100 000-bit block, 24 bits of CRC is 0.024 %. On a 200-bit block — a paging message, a small acknowledgement — 24 bits is 12 %, and 16 bits is 8 %. The standard buys back four percentage points on exactly the blocks where the percentage hurts, and accepts the weaker check because a short block is also less likely to hide an error.
This CRC is not the error correction. It is the verdict. After the LDPC decoder has done its work, the CRC is what decides whether the block is delivered upwards or a retransmission is asked for. TS 38.202 clause 4.2 lists them as separate physical-layer functions: "error detection on the transport channel and indication to higher layers" and "FEC encoding/decoding of the transport channel".
Two LDPC codes, not one
NR does not have an LDPC code. It has two base graphs, and clause 7.2.2 chooses between them with a rule that fits on one line:
Base graph 2 if $A \le 292$, or if $A \le 3824$ and $R \le 0.67$, or if $R \le 0.25$.
Base graph 1 otherwise.
(TS 38.212 clause 7.2.2, where $R$ is the target code rate from the MCS index and $A$ is the payload size.)
Read the rule as a two-dimensional selection: BG2 is for short blocks and for low rates; BG1 is for everything large and fast. The two are genuinely different codes, not one code with a parameter:
| Base graph 1 | Base graph 2 | |
|---|---|---|
| Base matrix $H_{\text{BG}}$ | 46 rows × 68 columns | 42 rows × 52 columns |
| Systematic length $K$ | $22 Z_c$ | $10 Z_c$ |
| Encoded length $N$ | $66 Z_c$ | $50 Z_c$ |
| Mother code rate | $22/68 \approx 0.32$ | $10/52 \approx 0.19$ |
| Maximum code block $K_{\text{cb}}$ | 8448 bits | 3840 bits |
| Chosen for | Large blocks at high rate — the throughput case | Short blocks, and any rate at or below 1/4 — the coverage case |
Why two codes and not one. A code has to be punctured upwards from its mother rate to reach a high rate and repeated downwards to reach a low one, and both operations cost performance the further you push them. One code covering QPSK-at-1/8 and 1024QAM-at-0.93 would be badly matched at both ends.
Splitting the range in two halves the distance any one code has to be stretched. BG2's lower mother rate ($\approx 0.19$ against $0.32$) is exactly what a coverage-limited transmission needs, and its smaller matrix is cheaper to decode — which matters because the coverage case is also the case where the device is far away and short of power.
Segmentation, and why 8448
A transport block can be three quarters of a million bits long (§9.2). No LDPC decoder is built for that. So clause 7.2.3 cuts it up:
8448 is not a round number, and that is the clue. It is $22 \times 384$, and 384 is the largest lifting size $Z_c$ in Table 5.3.2-1. So the maximum code block is not a design target picked for its own sake — it is whatever the largest permitted expansion of base graph 1 happens to hold. The same is true of BG2: $10 \times 384 = 3840$.
The lifting size is the real parameter. Segmentation picks the smallest $Z_c$ in the standard's
table such that $K_b Z_c \ge K'$, then sets $K = 22 Z_c$ (BG1) or $K = 10 Z_c$ (BG2) (clause
5.2.2). Any shortfall between the actual bits and $K$ is filled with filler bits, written
<NULL> in the specification, which are encoded as zeros and then never transmitted.
$K_b$ is 22 for BG1 always, and for BG2 it steps down with the payload — 10, 9, 8 or 6 as $B$ falls through 640, 560 and 192 bits — so that a very short block is not forced onto an unnecessarily large expansion.
The cost of segmentation is 24 bits per code block, and it is the price of parallelism. A decoder can work on all $C$ code blocks at once, and — more importantly — a code block that decodes correctly need never be sent again (§5.3). Without the per-block CRC there would be no way to know which ones those were.
Encode, rate match, concatenate
The last three steps are quick to state and are where the rate finally becomes what the scheduler asked for.
Encoding (clause 7.2.4, and 5.3.2). Each code block is encoded independently. The base matrix is expanded by replacing each 1 with a $Z_c \times Z_c$ cyclic permutation matrix and each 0 with a zero block, giving the real parity-check matrix $H$; parity is generated so that $H \cdot [\mathbf{c}\;\mathbf{w}]^{\mathsf T} = \mathbf{0}$ over GF(2). Output: $N = 66 Z_c$ or $50 Z_c$ bits.
Rate matching (clause 7.2.5, and 5.4.2). The encoded bits go into a circular buffer of length $N_{\text{cb}}$, and $E_r$ bits are read out of it starting at a position chosen by the redundancy version. This is where the code rate is actually set — the encoder always produces the same low mother rate, and rate matching punctures it up to whatever was scheduled. Then the selected bits are interleaved.
Concatenation (clause 7.2.6, and 5.5). The $C$ rate-matched blocks are laid end to end into a single sequence $g_0, \dots, g_{G-1}$. That sequence is the codeword, and it is the last object in this note that is purely a number.
The circular buffer, and what a retransmission really is
Four starting points around one buffer
The encoder's output is written into a buffer and read out from one of four positions. Those positions are the redundancy versions, and the DCI selects one with two bits.
| $rv_{\text{id}}$ | Base graph 1 — $k_0$ | Fraction | Base graph 2 — $k_0$ | Fraction |
|---|---|---|---|---|
| 0 | $0$ | 0.000 | $0$ | 0.000 |
| 1 | $\left\lfloor 17 N_{\text{cb}} / 66 Z_c \right\rfloor Z_c$ | 0.258 | $\left\lfloor 13 N_{\text{cb}} / 50 Z_c \right\rfloor Z_c$ | 0.260 |
| 2 | $\left\lfloor 33 N_{\text{cb}} / 66 Z_c \right\rfloor Z_c$ | 0.500 | $\left\lfloor 25 N_{\text{cb}} / 50 Z_c \right\rfloor Z_c$ | 0.500 |
| 3 | $\left\lfloor 56 N_{\text{cb}} / 66 Z_c \right\rfloor Z_c$ | 0.848 | $\left\lfloor 43 N_{\text{cb}} / 50 Z_c \right\rfloor Z_c$ | 0.860 |
Now the important part, and it is easy to miss. The first $2 Z_c$ systematic bits are never written to the buffer at all — clause 5.3.2 starts the output at $k = 2 Z_c$. So $rv_0$, the version that starts at position 0, does not begin at the start of the message. It begins two lifting sizes in.
A device that receives only $rv_0$ therefore has a punctured systematic block, not a clean copy of the data. The two missing columns are the most heavily connected in the base graph, and the decoder is expected to reconstruct them from parity. This is deliberate — it raises the effective rate of the first transmission at no cost in buffer — and it is the single most surprising line in the whole chain.
What the retransmission sends
Because the four versions start at four different places, a retransmission is not a repeat.
Incremental redundancy. A second transmission with a different $rv$ reads a different stretch of the circular buffer: mostly parity the receiver has never seen. The receiver combines the soft information from both, and the effective code rate of the pair is lower than either alone. This is what makes a retransmission worth more than a repetition.
Chase combining is the degenerate case, where the same $rv$ is sent again. It buys about 3 dB of energy and nothing else.
The receiver must keep the soft bits. Combining is only possible if the log-likelihood ratios from the failed attempt are still in memory — which is why HARQ soft buffer size is a device capability and not a free parameter.
Limited-buffer rate matching is the constraint made explicit. Clause 5.4.2.1 sets $N_{\text{cb}} = \min(N, N_{\text{ref}})$ with $N_{\text{ref}} = \lfloor \text{TBS}_{\text{LBRM}} / (C \cdot R_{\text{LBRM}}) \rfloor$ and $R_{\text{LBRM}} = 2/3$ — and for PDSCH it is always on ($I_{\text{LBRM}} = 1$, clause 7.2.5). The buffer is therefore sized so a receiver only ever has to store enough soft bits for an effective rate of 2/3, not for the code's full length. The circular buffer is truncated to fit the cheapest receiver the standard is willing to allow.
Code block groups — retransmitting less than everything
A 770 000-bit transport block is 92 code blocks (§9.2). If one of them fails, resending all 92 wastes the other 91.
TS 38.214 clause 5.1.7 allows the code blocks to be gathered into code block groups, with one acknowledgement bit each, so only the failed groups are retransmitted. The number of groups is configured, not derived, and the trade is plain: more groups means finer retransmission and more feedback bits on the uplink.
This is the feature LTE could not have. LTE acknowledged a whole transport block with a single bit on PHICH (§3.2) — a dedicated channel with a fixed, tiny capacity. Once the acknowledgement moved onto PUCCH as an ordinary variable-size payload, spending several bits per block became possible, and partial retransmission followed. Deleting a channel is what made the feature affordable.
From codeword to resource element
Six paragraphs of specification turn $G$ bits into complex numbers on antenna ports. They are clauses 7.3.1.1 through 7.3.1.6, and each one is short enough to quote.
Scrambling — why your neighbour's data looks like noise
Before modulation, every bit is added modulo 2 to a pseudo-random sequence (clause 7.3.1.1). The sequence generator is initialised with
This is not encryption — the sequence is public and the RNTI is sent in the clear. It does two engineering jobs:
It whitens interference. Two cells transmitting the same bit pattern on the same resource would interfere coherently. Different $n_{\text{ID}}$ means the interference looks like noise instead, which is what every receiver is designed to handle.
It makes a mis-addressed decode fail loudly. A device that descrambles with the wrong RNTI gets a random bit sequence, which fails the CRC. Combined with the CRC on the DCI itself, this is how a device is sure a transmission was meant for it.
Modulation — five constellations
| Modulation | $Q_m$ | Points | What it needs |
|---|---|---|---|
| QPSK | 2 | 4 | Almost nothing — the cell edge, broadcast, the first message |
| 16QAM | 4 | 16 | A workable signal-to-noise ratio |
| 64QAM | 6 | 64 | A good one; the ceiling of MCS table 1 |
| 256QAM | 8 | 256 | A very good one, and a well-calibrated transmitter |
| 1024QAM | 10 | 1024 | Effectively a short indoor link with excellent phase noise |
Layer mapping, and why there are two codewords
The modulation symbols are dealt out across layers — up to eight — by Table 7.3.1.3-1. The mapping itself is trivial: round-robin. The interesting part is the codeword count.
One to four layers: one codeword. All layers carry pieces of the same encoded block, with the same modulation and the same code rate.
Five to eight layers: two codewords, split 2+3, 3+3, 3+4 and 4+4 (Table 7.3.1.3-1). Each codeword has its own MCS, its own redundancy version, its own HARQ acknowledgement, and can be disabled independently — DCI format 1_1 turns one off by sending $I_{\text{MCS}} = 26$ with $rv_{\text{id}} = 1$ (TS 38.214 clause 5.1.3.2).
Two codewords exist because eight layers are not equally good. Spatial multiplexing produces streams of very different quality; forcing them all to one modulation and code rate means the good ones are wasted and the bad ones fail. Two codewords let the scheduler run the strong half hard and the weak half gently, and retransmit only the half that broke.
They stop at two because feedback is expensive. Eight codewords would mean eight acknowledgements and eight MCS fields in every DCI, for a gain that shrinks with each split.
Antenna port mapping — the clause that does nothing
Clause 7.3.1.4 is the shortest in the chain, and the most revealing. In full, the mapping from layer $x^{(\lambda)}$ to antenna port $y^{(p)}$ is:
Where is the precoding? In LTE it is right here: TS 36.211 clause 6.3.4 is a full clause with sub-clauses for transmit diversity, for large-delay cyclic delay diversity, and — clause 6.3.4.2.3 — a codebook of precoding matrices that both ends must agree on.
NR has none of it in the physical-channel specification, and the omission is the design:
NR downlink precoding is transparent. The base station applies whatever precoder it likes, and it applies the same precoder to the demodulation reference signals as to the data. The device never learns what the matrix was, does not need to, and estimates the effective channel — precoder and propagation together — from the DM-RS.
That is why the mapping clause is an identity, and why the LTE precoding clause has no NR counterpart. The codebook that survives in NR is on the reporting side only (TS 38.214 clause 5.2.2.2, the PMI), where it is a compressed hint from the device about what the base station might want to do — a suggestion, not a contract.
The practical consequence is large. The number of physical antennas at the base station is invisible to the device: it sees layers and ports. A 64-element array and a 4-element one look identical from the phone's side, which is what let massive MIMO be deployed without touching the device specification.
Virtual blocks, physical blocks, and the interleaver
The symbols are mapped, in increasing order of subcarrier and then symbol, into the virtual resource blocks assigned for transmission (clause 7.3.1.5). Virtual blocks then become physical ones (clause 7.3.1.6):
Non-interleaved — virtual block $n$ maps to physical block $n$. This is the default and applies if nothing is indicated. The one exception is a PDSCH scheduled by DCI format 1_0 in a common search space, where the mapping is offset by the lowest block of the CORESET the DCI arrived in.
Interleaved — the blocks are gathered into bundles and scattered across the bandwidth part.
The interleaver buys frequency diversity for allocations too small to have any. A four-block allocation sitting in one place is at the mercy of whatever that part of the channel is doing; the same four blocks scattered across a hundred megahertz will not all fade at once. It is worth having precisely when the scheduler cannot pick a good place — for a first transmission to a device it has no channel information about, which is why format 1_0 in a common search space is the case with its own rule.
What rides alongside, and what is carved out
An allocation of resource blocks is not all data. Some resource elements inside it carry reference signals, and some are reserved for other things entirely. Both are subtracted before the transport block size is computed (§9), so this section is a prerequisite for that one.
DM-RS — the reference signal that replaced always-on
Demodulation reference signals are known symbols placed inside the allocation so the receiver can estimate the channel it must invert. They are defined in TS 38.211 clause 7.4.1.1, and their position is the first thing to understand about a PDSCH allocation.
Two decisions define the pattern, and both are configured, not fixed.
Where the first one is. For PDSCH mapping type A the symbol index is counted from the start
of the slot, and $l_0$ is 2 or 3 depending on dmrs-TypeA-Position — early, but after the
control region. For mapping type B it is counted from the start of the allocation, and
$l_0 = 0$: the very first symbol. (Clause 7.4.1.1.2.)
How many more there are. dmrs-AdditionalPosition takes the values pos0 to pos3, and
Table 7.4.1.1.2-3 turns that plus the allocation length into a list of symbols. A 14-symbol type-A
allocation with pos1 puts them at $l_0$ and 11; with pos3, at $l_0$, 5, 8 and 11.
Additional positions are a Doppler setting wearing a different name. One reference symbol per slot is enough if the channel is the same at the end of the slot as at the beginning. At walking speed it is. At 300 km/h on a high band it is not, and the estimate from symbol 2 is stale by symbol 13. Every additional position costs a symbol's worth of payload in every resource block, and buys the ability to interpolate across the slot.
| Configuration type 1 | Configuration type 2 | |
|---|---|---|
| Subcarrier pattern | $k = 4n + 2k' + \Delta$ — every other subcarrier | $k = 6n + k' + \Delta$ — adjacent pairs |
| CDM groups | 2 ($\Delta = 0, 1$) | 3 ($\Delta = 0, 2, 4$) |
| Resource elements per group, per PRB, per symbol | 6 | 4 |
| Ports, single-symbol / double-symbol | 4 / 8 | 6 / 12 |
| The trade | Denser in frequency — better channel estimates over a long delay spread | More ports — more users or layers multiplexed on the same symbols |
This is where LTE's cell-specific reference signals went (§3.2). CRS was transmitted across the whole carrier, every subframe, forever, whether or not anybody was being scheduled, because it had to serve any device that might be listening. DM-RS is transmitted only inside an allocation, only when there is an allocation, and is precoded with the data it demodulates (§6.4).
The consequence is that an idle NR cell radiates almost nothing, and a busy one spends its reference-signal overhead only where there is something to demodulate.
The rest of the furniture
PT-RS — phase-tracking reference signals (TS 38.211 clause 7.4.1.2). A thin column of symbols in a few subcarriers, carried when the modulation is high and the band is high. Oscillator phase noise rotates the whole constellation slowly; at QPSK nobody notices, at 256QAM it closes the eye. PT-RS is the correction, and its presence is why the high-order modulations are usable in FR2 at all.
CSI-RS (clause 7.4.1.5). Not for this transmission — it is how the next one gets its channel information. Its resource elements are unavailable to PDSCH when configured as non-zero-power, and a zero-power CSI-RS is nothing but a declared hole: an instruction to stay off those elements so a neighbouring cell can measure.
The SS/PBCH block. Where a PDSCH allocation overlaps the resource blocks carrying an SSB, in the symbols where the SSB is transmitted, those blocks are not available (TS 38.214 clause 5.1.4). The bootstrap object always wins.
Explicit rate-match patterns. rateMatchPattern declares blocks and symbols as unavailable at
resource-block granularity (clause 5.1.4.1), and there are patterns specifically for LTE
cell-specific reference signals (lte-CRS-ToMatchAround) — so an NR carrier deployed on top of a
live LTE one can transmit around the CRS it inherited. The channel NR deleted still shapes NR
allocations wherever both are on the air.
All of this is subtracted, not punctured. The specification's phrase is that the elements are "not available for PDSCH": the codeword is sized to fit what is left, rather than being written over the top and damaged. That distinction is what makes the transport block size arithmetic of §9 exact rather than approximate.
The DCI that schedules it
PDSCH carries no information about itself. There is no header on it, no length field, no identifier. A device that stumbled on one would have no way to know it was there. Everything needed to receive it arrives first, on a different channel, in a message called downlink control information.
The message, and how a device knows it is theirs
A DCI is a short bit string carried on PDCCH. It is encoded with a Polar code, and its CRC is masked with the RNTI of the intended recipient (TS 38.212 clause 7.3.2). There is no address field: a device tries the RNTIs it owns, and the one that makes the CRC check out is the answer.
Format 1_0 — the fallback. Its size is fixed by rules in clause 7.3.1.0 so that it can be decoded before the device is configured for anything. Every device must be able to receive it, in a common search space, from the moment it starts looking.
Format 1_1 — the working format. Its size depends on how the device has been configured, and it carries everything 1_0 does plus the fields that only make sense once configuration exists: the bandwidth-part indicator, antenna ports, the transmission-configuration indication, a second transport block, rate-matching and zero-power-CSI-RS triggers.
Format 1_2 — a compressible variant, introduced for low latency, with several field widths configurable down to zero.
| Field | Bits | What it decides | Here |
|---|---|---|---|
| Identifier for DCI formats | 1 | Downlink or uplink; always 1 for this format | — |
| Frequency domain resource assignment | $\left\lceil \log_2 \frac{N(N+1)}{2} \right\rceil$ = 16 for $N = 273$ | Which resource blocks | §8.3 |
| Time domain resource assignment | 4 | A row index into a configured table: slot offset, start symbol, length, mapping type | §8.2 |
| VRB-to-PRB mapping | 1 | Interleaved or not | §6.5 |
| Modulation and coding scheme | 5 | $Q_m$ and $R$, via one of four tables | §9 |
| New data indicator | 1 | Is this a new block, or a retransmission of the one in this HARQ process? | §12 |
| Redundancy version | 2 | Where in the circular buffer to start reading | §5 |
| HARQ process number | 4 | Which of the 16 processes this belongs to | §12 |
| Downlink assignment index | 2 | Counter, so a missed assignment is detectable | §12 |
| TPC command for scheduled PUCCH | 2 | Power for the acknowledgement | — |
| PUCCH resource indicator | 3 | Where to send the acknowledgement | §12 |
| PDSCH-to-HARQ feedback timing indicator | 3 | $K_1$ — how many slots later to send it | §12 |
Look at what the 44 bits are spent on. Four fields describe the transmission — where, when, how big, how coded. Six are about the acknowledgement and the retransmission machinery. A downlink assignment is more than half a conversation about what happens if it fails.
Time: the slot, the start symbol, and the two mapping types
The four-bit time field is a row index into a table configured by RRC. The row supplies three things (TS 38.214 clause 5.1.2.1): the slot offset $K_0$, a combined start-and-length value, and the mapping type.
The start and length arrive as one number, packed by a rule that is worth reading because it looks arbitrary and is not:
The mapping type is the more consequential half of the row, and it is the difference between a slot-shaped world and a symbol-shaped one:
| Mapping type | Normal cyclic prefix | Extended | What it is for | ||||
|---|---|---|---|---|---|---|---|
| $S$ | $L$ | $S+L$ | $S$ | $L$ | $S+L$ | ||
| Type A slot-based | 0–3 | 3–14 | 3–14 | 0–3 | 3–12 | 3–12 | The ordinary case. Starts near the top of the slot, after the control region, and usually runs to the end of it. |
| Type B non-slot, "mini-slot" | 0–12 | 2–13 | 2–14 | 0–10 | 2, 4, 6 | 2–12 | Latency and opportunism. A two-symbol transmission can start at almost any symbol boundary and be over in tens of microseconds. |
Type B is the feature LTE did not have, and it is why NR can claim low latency at all. In LTE a downlink transmission was a subframe: one millisecond, aligned to a grid, whether you had a megabyte or a hundred bytes to send. In NR a transmission can be two symbols starting at symbol 9 — at 120 kHz subcarrier spacing that is about 18 µs, and it does not have to wait for the next slot boundary to begin.
Note that S = 3 for type A is only allowed when
dmrs-TypeA-Positionispos3(Table 5.1.2.1-1, Note 1). The allocation cannot start after its own reference signal.
Frequency: a bitmap or a range
Two schemes, and the choice is between flexibility and precision (clause 5.1.2.2).
Type 0 — a bitmap of resource block groups. The bandwidth part is divided into groups of $P$ blocks, with $P$ from Table 5.1.2.2.1-1: 2, 4, 8, 16 or 32 depending on the bandwidth part size and which of three configurations was chosen. One bit per group. Allocations may be non-contiguous, which is what lets a scheduler pick the good parts of a frequency-selective channel and skip the bad, and multiplex users into each other's gaps.
Type 1 — a contiguous range. A starting block and a length, packed into one resource indication value by the same fold-in-half trick as the SLIV: $\text{RIV} = N(L-1) + \text{RB}_{\text{start}}$ when $L-1 \le N/2$, and $N(N - L + 1) + (N - 1 - \text{RB}_{\text{start}})$ otherwise. Single-block granularity, but one run only. DCI format 1_0 always uses this.
The cost comparison is concrete. On a 273-block bandwidth part — 100 MHz at 30 kHz subcarrier spacing:
Type 0 with configuration 1 gives $P = 16$, so $\lceil 273/16 \rceil = 18$ bits. Eighteen bits buy any of $2^{18}$ patterns, but the finest cut is sixteen resource blocks — 5.76 MHz.
Type 1 costs $\lceil \log_2 (273 \cdot 274 / 2) \rceil = 16$ bits and can name any single run down to one block — 360 kHz — but only one run.
Two bits fewer, ten times the frequency resolution, and no ability to skip a hole. That is the whole
trade, and resourceAllocation set to dynamicSwitch lets the DCI choose per transmission.
How big is it? Transport block size
Everything so far has described a container. TS 38.214 clause 5.1.3.2 decides what fits in it — and it must produce the same answer in the base station and in the device, from the same inputs, every time, with no negotiation.
The four steps
Step 1 — count the resource elements. Per resource block,
$N'_{\text{RE}} = N^{\text{RB}}_{\text{sc}} \cdot N^{\text{sh}}_{\text{symb}} -
N^{\text{PRB}}_{\text{DMRS}} - N^{\text{PRB}}_{\text{oh}}$: twelve subcarriers times the number of
allocated symbols, minus the DM-RS elements (§7.1), minus a configured
overhead allowance xOverhead of 0, 6, 12 or 18. Then
$N_{\text{RE}} = \min(156,\, N'_{\text{RE}}) \cdot n_{\text{PRB}}$.
Step 2 — the unquantised size. $N_{\text{info}} = N_{\text{RE}} \cdot R \cdot Q_m \cdot \nu$ — elements, times code rate, times bits per symbol, times layers. This is the honest answer, and it is almost never the transport block size.
Step 3 — small blocks ($N_{\text{info}} \le 3824$). Round down to a power-of-two grid, then look up the nearest tabulated size that is not smaller in Table 5.1.3.2-1 — a hand-written ladder of 93 values from 24 to 3824.
Step 4 — large blocks. Round to a power-of-two grid, floor at 3840, then quantise so that the result splits evenly into code blocks: $\text{TBS} = 8 C \lfloor (N'_{\text{info}} + 24)/8C \rfloor - 24$, with $C$ chosen so no code block exceeds the limit.
The cap of 156 in step 1 is worth a sentence. A resource block has $12 \times 14 = 168$ elements in a full slot, and 156 is $12 \times 13$ — one symbol's worth held back. The count used for sizing is therefore never the whole slot, no matter how the allocation is configured.
A worked example
Take an ordinary high-end downlink: 100 MHz at 30 kHz subcarrier spacing — 273 resource blocks — four layers, twelve allocated symbols, one front-loaded DM-RS symbol with both CDM groups declared without data, no configured overhead, and MCS index 27 from table 2 (256QAM, $R = 948/1024$).
| MCS 27, table 1 64QAM, $R = 910/1024$ | MCS 27, table 2 256QAM, $R = 948/1024$ | |
|---|---|---|
| $N'_{\text{RE}} = 12 \cdot 12 - 12 - 0$ | 132 | 132 |
| $N_{\text{RE}} = \min(156, 132) \cdot 273$ | 36 036 | 36 036 |
| $N_{\text{info}} = N_{\text{RE}} R Q_m \nu$ | 768 580.3 | 1 067 566.5 |
| TBS (step 4) | 769 832 bits | 1 080 480 bits |
| After CRC, $B = A + 24$ | 769 856 | 1 080 504 |
| LDPC base graph | 1 ($A > 3824$, $R > 0.67$) | 1 |
| Code blocks $C = \lceil B / 8424 \rceil$ | 92 | 129 |
| Per-block CRC overhead | 2 208 bits — 0.29 % | 3 096 bits — 0.29 % |
| Rate over one 0.5 ms slot | 1 540 Mbit/s | 2 161 Mbit/s |
Check it yourself. The whole of clause 5.1.3.2 is about twenty lines of Python. This implements steps 1 to 4 and the segmentation rule of TS 38.212 clause 5.2.2.
from math import floor, ceil, log2 def tbs(NRE_prb, nPRB, R, Qm, v): # TS 38.214 clause 5.1.3.2 NRE = min(156, NRE_prb) * nPRB # step 1 Ninfo = NRE * R * Qm * v # step 2 if Ninfo <= 3824: # step 3 n = max(3, floor(log2(Ninfo)) - 6) Np = max(24, 2**n * floor(Ninfo / 2**n)) return next(t for t in TABLE_5_1_3_2_1 if t >= Np) n = floor(log2(Ninfo - 24)) - 5 # step 4 Np = max(3840, 2**n * round((Ninfo - 24) / 2**n)) if R <= 0.25: C = ceil((Np + 24) / 3816) elif Np > 8424: C = ceil((Np + 24) / 8424) else: return 8 * floor((Np + 24) / 8) - 24 return 8 * C * floor((Np + 24) / (8 * C)) - 24 print(tbs(12*12 - 12, 273, 948/1024, 8, 4)) # -> 1080480Ties in the
roundof step 4 are broken towards the next largest integer, which Python's banker's rounding does not do; it makes no difference to these two cases but will to others.
Why it is quantised at all
Step 2 already produced a number. Steps 3 and 4 throw precision away — 768 580 becomes 769 832 — and the reason is §12.
A retransmission need not use the same resources as the original. The scheduler may have fewer blocks free, or a different number of symbols, or a different MCS. But the transport block being retransmitted is the same block, and combining only works if both transmissions agree on its length.
Quantisation makes the size robust to exactly that. A coarse ladder means a modest change in allocation lands on the same rung, and the two transmissions agree without any signalling to say so. Nothing in the DCI carries the transport block size — both ends compute it, and the arithmetic is designed so they keep agreeing after the allocation changes.
The rest of the rounding is arithmetic hygiene. Byte alignment, and a size that divides evenly into $C$ code blocks so that no block is shorter than the others.
What the MCS index actually buys
Five bits of MCS select a row from one of four tables, and each row is a pair: modulation order and target code rate. Their product per resource element is the spectral efficiency, and it is tabulated in the specification alongside them.
The tables overlap deliberately. Table 4's index 22 and table 2's index 27 are the same point — $Q_m = 8$, $R = 948/1024$, 7.4063 bits per element. The 1024QAM table did not extend the range at the bottom; it spent codepoints at the top and gave up resolution everywhere else, which is why it is configured only when the link can actually use it.
What the scheduler is aiming at
Everything in §9 started from $Q_m$, $R$ and $\nu$ as givens. They arrive in the DCI — but the scheduler had to choose them, and it chose them from a number the device sent up some milliseconds earlier. That number is the channel quality indicator, and its definition is the reason this section belongs in a note about PDSCH rather than in one about CSI.
The definition is written in terms of PDSCH
TS 38.214 clause 5.2.2.1 does not define CQI as a signal-to-noise ratio, a received power or any other physical quantity. It defines it as a statement about a hypothetical PDSCH:
"the UE shall derive for each CQI value reported in uplink slot $n$ the highest CQI index which
satisfies the following condition: a single PDSCH transport block with a combination of
modulation scheme, target code rate and transport block size corresponding to the CQI index, and
occupying a group of downlink physical resource blocks termed the CSI reference resource, could be
received with a transport block error probability not exceeding: 0.1 … or 0.00001* if the
higher layer parameter cqi-Table configures table3."
— TS 38.214 clause 5.2.2.1, condensed
Read what the device is being asked. Not how good is the channel but "what is the largest PDSCH you could have decoded?" The answer is expressed in the same currency as the thing being scheduled, which is why the scheduler can act on it directly.
The 0.1 is the most consequential constant in the whole system, and it is easy to read past.
The device reports the highest index that decodes with at most a 10 % block error rate. So the link is deliberately operated at a point where one transmission in ten fails. That is not a tolerance; it is a target.
Why aim to fail? Because the alternative is worse. Choosing an MCS that never failed would mean choosing one far below what the channel can carry, and paying that margin on every transmission for the sake of the rare bad one. Running at 10 % and repairing the failures with incremental redundancy (§5.2) is cheaper, provided repair is cheap — and Parts II and V are, between them, the machinery that makes it cheap.
This is the sentence that explains why HARQ exists. HARQ is not a safety net bolted on in case something goes wrong. It is a load-bearing part of the rate selection, and without it the whole link would have to be run several decibels more conservatively.
Four tables, and the one that changes the target
Four bits of CQI index four rows of a table, and which table is in force is configured by
cqi-Table in CSI-ReportConfig:
Table 1 (Table 5.2.2.1-2) — QPSK to 64QAM. The original, and the one to assume.
Table 2 (5.2.2.1-3) — QPSK to 256QAM. The top four rungs are 256QAM; the price is that the whole ladder is coarser, since fifteen rungs now span a longer range.
Table 3 (5.2.2.1-4) — QPSK to 64QAM again, but the ladder is shifted downwards: its lowest rung is 30/1024 at QPSK, 0.0586 bits per resource element. And its target is $10^{-5}$, not $10^{-1}$.
Table 4 (5.2.2.1-5, table4-r17) — up to 1024QAM, back at the 0.1 target.
Table 3 is URLLC, and it is worth seeing what "ultra-reliable" costs in this currency. Moving from table 1 to table 3 at the same reported index gives up roughly a factor of four in rate at the bottom of the ladder — and buys four orders of magnitude in block error rate. The reliability is bought with spectral efficiency, in a table, in advance.
The mapping from CQI to MCS is not in the standard
Here is the gap that surprises people. 3GPP specifies the CQI tables. It specifies the MCS tables. It never specifies how to get from one to the other.
And yet the two ladders were plainly built to line up. Compare their spectral-efficiency columns:
| CQI index (table 2) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MCS index (table 2) | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | 23 | 25 | 27 |
| Relation | $I_{\text{MCS}} = 2\,\text{CQI} - 3$ exactly, for every column | |||||||||||||
The CQI ladder is the MCS ladder with every other rung removed. Fifteen CQI values sample twenty-eight MCS values, and the missing odd rungs are the finer steps the scheduler may use but the device is not asked to report.
So why leave the conversion out? Because a scheduler should not use it verbatim, and 3GPP knows it.
A CQI report is stale by the time it is acted on, it describes a reference resource rather than the actual allocation, and it is a prediction the device made about its own receiver. The universal practice is outer-loop link adaptation: take the CQI, convert it with the table correspondence above, then add an offset that is nudged down on every NACK and up on every ACK, so that the measured block error rate converges on the 10 % the CQI definition assumed.
That loop is where vendors differ, and leaving it unspecified is what lets them differ. The specification fixes the vocabulary and the target; the control law is a product decision. The outer-loop technique itself is standard engineering rather than a 3GPP requirement — see the books in §15.2.
How fast can it go
§9.2 produced 2 161 Mbit/s from one slot of one carrier. Every advertised 5G number is that calculation done again with different assumptions, and there is a specification that fixes the assumptions so the numbers can be compared: TS 38.306 clause 4.1.2, the formula a device uses to declare what it can do.
The formula everybody quotes
Every factor is something this note has already met. $Q_m$ is §6.2. $v_{\text{Layers}}$ is §6.3. $R_{\max} = 948/1024$ is the top row of the MCS tables. $N_{\text{PRB}} \cdot 12$ is subcarriers, and $T^{\mu}_s$ is the symbol duration from the frame-structure note. The only new thing is $\text{OH}$ — and it is the interesting one, because it is a constant.
What the constant 0.14 is hiding
Run the formula on exactly the configuration of §9.2 — 273 blocks, 30 kHz, four layers, 256QAM — and it returns 2 337 Mbit/s. The slot-level calculation returned 2 161. The formula is 8 % more optimistic, and the whole difference is in $\text{OH}$.
| Resource elements per PRB per slot | The example of §9.2 | What OH = 0.14 implies |
|---|---|---|
| Total, 12 subcarriers × 14 symbols | 168 | 168 |
| CORESET — PDCCH | 24 (2 symbols) | 12 (1 symbol) |
| DM-RS | 12 (1 symbol, both CDM groups) | 12 (1 symbol) |
| PDSCH payload | 132 — 78.6 % | 144 — 85.7 % |
| Implied overhead | 21.4 % = 3/14 | 14.3 % = 2/14 |
| Rate | 2 161 Mbit/s | 2 337 Mbit/s |
$2/14 = 0.1429$, and the specification prints $0.14$. The advertised peak rate assumes one symbol
of control and one symbol of reference signal, and nothing else — no additional DM-RS position, no
PT-RS, no CSI-RS, no SSB overlap, no xOverhead, and a control region one symbol deep. Each of
those is a real configuration this note has already described, and each one takes the real number
further below the quoted one.
This is not a criticism of the formula. A capability declaration has to be reproducible from a handful of numbers a device can state in advance, so the overhead must be a constant. But it means the quoted figure is a ceiling under favourable bookkeeping, and the gap between it and a measured throughput is not a fault — it is the configuration.
Reaching the target
The number 5G was asked to hit predates all of this. TR 38.913 clause 7.1 — the requirements study that framed the work — sets it:
"The target for peak data rate should be 20 Gbps for downlink and 10 Gbps for uplink." — TR 38.913 clause 7.1
"The target for peak spectral efficiency should be 30 bps/Hz for downlink and 15 bps/Hz for uplink." — clause 7.2
One PDSCH on one 100 MHz carrier delivers 2.3 Gbit/s. So the target is a factor of about nine away, and the formula shows exactly where the nine comes from:
| Configuration | Carriers | Layers | Modulation | Rate | vs 20 Gbit/s |
|---|---|---|---|---|---|
| One 100 MHz carrier — a good handset today | 1 | 4 | 256QAM | 2.34 Gbit/s | 12 % |
| Same, with 1024QAM | 1 | 4 | 1024QAM | 2.92 Gbit/s | 15 % |
| Four-carrier aggregation | 4 | 4 | 256QAM | 9.35 Gbit/s | 47 % |
| Eight-carrier aggregation | 8 | 4 | 256QAM | 18.70 Gbit/s | 94 % — just short |
| Eight carriers with 1024QAM | 8 | 4 | 1024QAM | 23.37 Gbit/s | 117 % |
| Eight carriers, eight layers | 8 | 8 | 256QAM | 37.39 Gbit/s | 187 % |
| FR2 — eight 400 MHz carriers | 8 | 2 | 256QAM | 34.48 Gbit/s | 172 % |
Look at the fourth row. Eight aggregated carriers, four layers, 256QAM — a genuinely extravagant configuration — lands at 18.7 Gbit/s, 6 % short. That near miss is the best single argument for why the later releases went where they did: 1024QAM (Release 17, MCS table 4) and eight-layer downlink reception are each, by themselves, enough to close it.
And spectral efficiency tells the same story from the other side. Four layers of 256QAM over 100 MHz is 23.4 bit/s/Hz against the 30 bit/s/Hz target of TR 38.913 clause 7.2. Eight layers gives 46.7. The target was never reachable by modulation alone — the missing factor is spatial, which is why §6.3 and the CSI machinery behind it matter more to peak rate than any constellation does.
HARQ, and the deadline the phone must meet
Every PDSCH is provisional. It is delivered upwards only if the CRC checks; otherwise the device must say so, and say so by a deadline the standard fixes in symbols. This last part is about that deadline, because converting its units turns a scheduling parameter into a statement about silicon.
Sixteen conversations at once
A single stop-and-wait exchange would idle the link for a whole round trip after every block. So the device runs many in parallel, each with its own buffer and its own state:
A maximum of 16 HARQ processes per cell, or 32 subject to device capability
(TS 38.214 clause 5.1). The number actually used is configured by
nrofHARQ-ProcessesForPDSCH; if nothing is configured, the default is 8.
The DCI carries a 4-bit HARQ process number (§8.1) — which is exactly $\log_2 16$, and is why 16 is the baseline maximum rather than a round number chosen for its own sake.
Each process holds one transport block, or two when downlink spatial multiplexing is configured (TS 38.321 clause 5.3.2.1), matching the two codewords of §6.3.
The New Data Indicator is the whole protocol. One bit: toggled means this is a new block for this process, so discard the buffer; not toggled means it is a retransmission, so combine with what is already there (§5.2).
Asynchronous, and that is the difference from LTE. A retransmission arrives whenever the scheduler chooses, identified by its process number, on an ordinary PDCCH assignment. LTE's downlink HARQ was synchronous in the uplink direction and needed PHICH to carry the acknowledgement at a fixed time (§3.2). Making it asynchronous deleted a channel and made the scheduler free.
$N_1$ — the number that looks like symbols
The device must have its acknowledgement ready by a time TS 38.214 clause 5.3 defines exactly:
Table 5.3-1 gives $N_1$ for processing capability 1. Read it as printed and it looks like the phone is being given more time as the numerology grows — 8 symbols at 15 kHz, 160 at 960 kHz. Convert the symbols to microseconds and the opposite is true, up to a point, and then something stops.
| $\mu$ | SCS | One symbol | $N_1$ pos0 | Budget | $N_1$ other | Budget |
|---|---|---|---|---|---|---|
| 0 | 15 kHz | 71.35 µs | 8 | 570.83 µs | $N_{1,0}$ | — |
| 1 | 30 kHz | 35.68 µs | 10 | 356.77 µs | 13 | 463.80 µs |
| 2 | 60 kHz | 17.84 µs | 17 | 303.26 µs | 20 | 356.77 µs |
| 3 | 120 kHz | 8.92 µs | 20 | 178.39 µs | 24 | 214.06 µs |
| 5 | 480 kHz | 2.23 µs | 80 | 178.39 µs | 96 | 214.06 µs |
| 6 | 960 kHz | 1.11 µs | 160 | 178.39 µs | 192 | 214.06 µs |
The last three rows are identical to the last decimal place, and they are not a coincidence. Past $\mu = 3$ the table has stopped being a table:
Check it yourself. Six lines, using the symbol duration from TS 38.211 clause 4.1 and $N_1$ from TS 38.214 Table 5.3-1.
from fractions import Fraction as F Tc = F(1, 480000 * 4096); k = 64 # TS 38.211 clause 4.1 N1 = {0: 8, 1: 10, 2: 17, 3: 20, 5: 80, 6: 160} # TS 38.214 Table 5.3-1 for mu, n in N1.items(): sym = float((F(2048 * k, 2**mu) + F(144 * k, 2**mu)) * Tc) * 1e6 print(mu, f"{sym:7.2f} us x {n:3d} = {sym * n:7.2f} us")It prints 570.83, 356.77, 303.26, 178.39, 178.39, 178.39.
The round trip, drawn to scale
Put the deadline back into a slot and it becomes a picture. Everything below is already established: a two-symbol CORESET, PDSCH filling the rest of the slot, the decoding budget from Table 5.3-1, and an acknowledgement that can only be sent at a slot boundary at or after the budget expires.
At 30 kHz the decoding budget is 0.71 of a slot, so it expires comfortably inside the next one. $K_1 = 1$, and grant to acknowledgement is 1 000 µs.
At 120 kHz the budget is 1.43 slots. The next slot boundary arrives while the decoder is still working, so $K_1 = 1$ is arithmetically impossible and the earliest legal value is 2. Grant to acknowledgement is 375 µs — still 2.7 times faster, despite needing an extra slot of delay.
The moral of the two lanes together: a faster numerology does not shorten the decoder; it shortens everything around the decoder. Between 30 and 120 kHz the slot shrinks by four but the round trip only shrinks by 2.7, because a fixed 178 µs of silicon is now the largest single term.
Compare that with what was asked for. TR 38.913 clause 7.5 sets the user-plane latency target at 4 ms for eMBB and 0.5 ms for URLLC, each direction. Those are end-to-end layer-2 figures and include more than one physical-layer exchange, so the comparison is indicative rather than exact — but the shape of the answer is visible in the figure:
The eMBB target is comfortable at any numerology. One 30 kHz exchange is 1 ms, so even with a retransmission there is room inside 4 ms.
The URLLC target is not, at 30 kHz. A single grant-to-acknowledgement round trip already spends a fifth of a 0.5 ms budget, and a URLLC packet that needs one retransmission would spend most of it.
So URLLC is not a feature; it is a configuration, and every part of it has appeared in this note: a high numerology to shrink the slot, mapping type B so a transmission need not wait for a slot boundary (§8.2), CQI table 3 so the first attempt is aimed at $10^{-5}$ rather than $10^{-1}$ (§10.2), and a short allocation so there is less to decode. The same PDSCH, run with different constants.
What the flat line means
Decoding is work, and work takes time. Demodulating 36 000 resource elements, descrambling, de-interleaving, running a belief-propagation decoder over 129 code blocks and checking 130 CRCs is a fixed quantity of silicon activity. It does not get faster because the subcarriers got wider.
So the standard stopped pretending. Below $\mu = 3$, a symbol is long enough that a handful of them is a reasonable budget, and the count is tuned per numerology — 8, 10, 17, which is not a smooth curve because it was negotiated case by case. From $\mu = 3$ the symbol has become so short that the count is simply scaled to keep the real time fixed, and the table degenerates into the doubling above.
The budget therefore crosses the slot. At 120 kHz a slot is 125 µs and the budget is 178 µs; at 960 kHz a slot is 15.6 µs and the budget is still 178 µs — eleven slots. The acknowledgement timing $K_1$ in the DCI (§8.1) is not a convenience; past $\mu = 3$ it is arithmetically forced to be greater than one.
And this is why 16 HARQ processes exist. If a block cannot be acknowledged for eleven slots, a single stop-and-wait exchange would leave the link idle for eleven slots. The number of parallel processes has to cover the round trip, and at high numerologies the round trip is measured in slots, not in symbols.
The method, which is worth more than the answer. This is the same move as the previous note's guard period: a requirement written in symbols that is really a requirement in microseconds. When a specification expresses a constraint in units that do not naturally fit it — a silence measured in symbols, a decoding deadline measured in symbols — the number will do something strange as the units change, and converting them finds the physical fact underneath. There, it was a switch settling. Here, it is a decoder running.
What each release added
PDSCH has been in every release since the first. Reading what was added to it is a good way to see what the design turned out to be short of — and the specifications record this themselves, in a detail that is easy to miss.
The parameter names carry their own dates
A 3GPP parameter introduced after Release 15 keeps a suffix naming the release that introduced
it. mcs-Table-r17 was added in Release 17. csi-InferencePrediction-r19 in Release 19. This is
not documentation convention; it is how the specification distinguishes a new field from the
Release 15 field of the same name, and it means the release history is greppable:
cd ~/Documents/md-engine/"Courses (RAW)/5G Topics"
pdftotext -layout ts_138214v190400p.pdf - | grep -oE '[a-zA-Z][A-Za-z0-9-]+-r1[6-9]' | sort -u
Every row of the table below was found that way, then read in context.
| Release | Evidence in the specification | What was added, and why |
|---|---|---|
| 15 2018 | no suffix — the baseline | PDSCH itself: LDPC, mapping types A and B, DM-RS types 1 and 2, up to 256QAM, eight layers, two codewords, bandwidth parts, code block groups. |
| 16 2020 | lte-CRS-PatternList1-r16, lte-CRS-PatternList2-r16 | Coexistence. Rate-match PDSCH around the cell-specific reference signals of an LTE carrier sharing the same spectrum — the channel NR deleted, still shaping NR allocations (§7.2). |
resourceAllocationDCI-1-2-r16 | Latency. DCI format 1_2, whose field widths are configurable down to zero, so a grant can be made small enough to decode faster. | |
pdsch-HARQ-ACK-Codebook-r16 | Feedback efficiency. An enhanced acknowledgement codebook — fewer wasted bits when many PDSCHs are outstanding. | |
| 17 2022 | mcs-Table-r17, mcs-TableDCI-1-2-r17 | The ceiling. 1024QAM and MCS table 4 (§9.4) — the answer to the near miss in Table 12. |
dl-OrJointTCI-StateList-r17 | Beam management. One indication of transmission configuration serving both directions, instead of separate downlink and uplink state machines. | |
pdsch-HARQ-ACK-CodebookListMulticast-r17 | Multicast returns. Group transmission on ordinary PDSCH addressed to a group RNTI — the job LTE gave to PMCH, done without a channel of its own (Table 2). | |
| 18 2024 | pdsch-ConfigMTCH-r18, lte-CRS-PatternList3-r18, lte-CRS-PatternList4-r18 | Broadcast, and more coexistence. A broadcast traffic channel on PDSCH, and two further LTE rate-match patterns. |
typeII-CJT-r18 | Several transmitters, one signal. Channel reporting for coherent joint transmission — several transmission points radiating one coherent PDSCH rather than one picked from among them. | |
typeII-Doppler-r18 | Motion. Channel reporting with a Doppler dimension, so the report describes how the channel is changing, not only what it is. | |
| 19 2026 | csi-InferencePrediction-r19, TS 38.214 clauses 5.2.2.2.10–.11 | Prediction. The device reports precoders for slots that have not happened yet — see below. |
pdsch-AggregationFactor-r19 | Coverage. Repetition of the random-access Msg4 PDSCH, for devices that cannot decode it in one go. |
Release 19 asks the device to predict
The last row deserves its own paragraph, because it changes the kind of thing a report is.
Everything in §10 rests on a measurement of the past. The device measures a reference signal, reports what it saw, and the scheduler acts on it some milliseconds later — by which time, if anything is moving, the channel has changed. That staleness is the permanent tax on the whole arrangement, and no amount of faster reporting removes it; it only makes it smaller.
Release 19 attacks it differently. TS 38.214 clause 5.2.2.2 now contains "Enhanced Type II codebook for predicted PMI" (clause 5.2.2.2.10) and its port-selection twin (5.2.2.2.11), and the procedure text says plainly:
"a UE configured with a CodebookConfig with the higher layer parameter vectorLengthDD … or a
CSI-ReportConfig with higher layer parameter csi-InferencePrediction-r19 is assumed to support
UE-side CSI prediction. The reported PMI indicates predicted precoder matrices associated
with $N$ consecutive slot intervals."
— TS 38.214 clause 5.2.1.4.2
Read that twice. The device is not reporting the channel. It is reporting a sequence of precoders for slots that have not happened yet, and the standard declines to say how it should arrive at them.
That silence is the same silence as §10.3 — 3GPP fixes the vocabulary and leaves the algorithm to the implementer. But the thing being left open is now a prediction of a time series, which is a materially different kind of gap, and the obvious way to fill it is a learned model running in the device.
This is where this note touches layer 4 of the folder. The projects tracker's AI-RAN layer asks which decision, at which timescale, on which interface. Here is one concrete answer, in a clause number: the decision is the precoder, the timescale is a few slots, and the interface is the CSI report. Not a slogan — a field in
CSI-ReportConfig.
The limits, and what comes after
Three walls
Everything this note measured runs into one of three limits, and it is worth naming them together because the next generation's proposals are aimed at exactly these.
1 · The decoding deadline does not shrink. §12.4 showed the budget flattening at 178 µs from $\mu = 3$ onwards. Numerology can shorten the slot as far as you like; it cannot shorten belief propagation over a hundred code blocks. Past 120 kHz, latency is a silicon problem, not a frame-structure problem — and every further doubling of subcarrier spacing buys less than the one before.
2 · Spectral efficiency is near its ceiling. The top MCS row is $Q_m = 10$ at $R = 948/1024$: 9.26 bits per resource element. Going further means more constellation points, and each doubling needs about 3 dB more signal-to-noise for the same error rate while demanding proportionally better phase noise, linearity and error vector magnitude from hardware that §14.3 hands to the front-end notes. The remaining growth is spatial, not modulational — which is what §11.3 showed numerically: 4 layers of 256QAM reach 23.4 bit/s/Hz against a 30 bit/s/Hz target that 8 layers clears easily.
3 · Overhead is a floor, not a tax. §11.2 put the best case at two symbols of fourteen — 14 % — and the ordinary case at 21 %. DM-RS cannot be removed, because NR deliberately abolished the always-on alternative (§7.1) and pays for it inside every allocation. The only way to spend less on reference signals is to need fewer of them, which means predicting the channel rather than measuring it — wall 3 and the Release 19 work above are the same wall seen from two sides.
What is being proposed after this
Read this section differently from the rest of the note. Everything above carries a clause number from a frozen specification. What follows does not, and cannot — the documents are framework recommendations and study items, not normative text, and some of the work has not been done. It is here because a note that stops at Release 19 leaves the reader without a horizon; it is fenced off because the honesty rule of this folder does not bend for a good story.
The framework document. The successor system is defined, so far, by ITU-R Recommendation M.2160 (November 2023), "Framework and overall objectives of the future development of IMT for 2030 and beyond" — the IMT-2030 counterpart of the IMT-2020 framework whose requirements became TR 38.913. It names six usage scenarios and a set of capabilities, of which the ones bearing on PDSCH are peak and experienced data rate, spectral efficiency, latency, reliability, and two that are new: integrated sensing and integrated AI. Not checked against a copy here — it is not in the archive.
What that implies for the three walls, stated as directions rather than as facts:
Against wall 1, the direction is not a faster decoder but fewer decisions to make late: grant-free and pre-configured transmission, so the DCI round trip is not on the critical path at all. Nothing about the LDPC decoder gets easier.
Against wall 2, the direction is unambiguously spatial and spectral: many more antenna elements, and new spectrum — the upper mid-band around 7–15 GHz is the band range most often discussed, precisely because it is the last place where bandwidth and propagation are both tolerable.
Against wall 3, the direction is the one Release 19 has already started: learned prediction replacing measurement, and reference signals sent because a model asked for them rather than on a fixed schedule.
The 3GPP study on this is TR 38.843, Study on artificial intelligence (AI)/machine learning (ML) for NR air interface. Its three studied use cases are CSI feedback compression, beam management, and positioning — and the first of those is the direct ancestor of
csi-InferencePrediction-r19. It is not in the archive (it has no ETSI-transposed copy at the path the other documents came from), so it is cited here as a pointer and nothing in this note depends on it.
Where this note stops, and the others begin
Each wall hands off to a different part of this folder, which is the argument for the folder's four-layer shape.
Wall 1 — the deadline is a layer 1 and layer 4 problem. Its physical-layer half is
scheduling and processing capability; its interesting half is whether an algorithm can decide
earlier, which is ran-ric-and-ai.md and the timescale argument there.
Wall 2 — spectral efficiency is where layer 1 meets layer 2. More layers means more antennas,
more transmit chains and more linearity; 1024QAM is a hardware requirement wearing a modulation
order's name. That is nr-mimo-csi.md on one side and fe-components.md on the other.
Wall 3 — overhead is layer 1 and layer 3. Coherent joint transmission from several
transmission points, the Release 18 addition above, only means anything once you can say which box
does what — which is the Open RAN split, ran-openran-architecture.md.
Sources, and where to read more
The clauses this note stands on
| Document | Clause | What it gives |
|---|---|---|
| TS 38.211 v19.4.0 Physical channels and modulation |
7.3.1 | Physical downlink shared channel — the whole of Part III |
| 7.3.1.1–.2 | Scrambling and its initialisation; Table 7.3.1.2-1, the five modulations | |
| 7.3.1.3–.4 | Table 7.3.1.3-1, codeword-to-layer mapping; the identity that is antenna port mapping | |
| 7.3.1.5–.6 | Mapping to virtual blocks, and virtual to physical | |
| 7.4.1.1 | PDSCH demodulation reference signals; Tables 7.4.1.1.2-1 to -4 | |
| TS 38.212 v19.4.0 Multiplexing and channel coding |
7.2 | Downlink shared channel and paging channel — the whole of Part II, six clauses |
| 5.2.2 | Code block segmentation; $K_{\text{cb}}$, $K_b$, filler bits | |
| 5.3.2 | LDPC encoding; Table 5.3.2-1, the lifting sizes; the two base graphs' dimensions | |
| 5.4.2 | Rate matching; the circular buffer, limited-buffer rate matching, Table 5.4.2.1-2 for $k_0$ | |
| 7.3.1.2.1 | DCI format 1_0 — the field list of Table 7 | |
| TS 38.214 v19.4.0 Physical layer procedures for data |
5.1 | The 16 HARQ processes; the default of 8 |
| 5.1.2.1–.2 | Time and frequency allocation; the SLIV, the RIV, Table 5.1.2.1-1 and Table 5.1.2.2.1-1 | |
| 5.1.3.1 | Tables 5.1.3.1-1 to -4, the four MCS tables | |
| 5.1.3.2 | Transport block size determination — the four steps of §9 | |
| 5.1.4 | PDSCH resource mapping — what is declared unavailable, and the LTE-CRS patterns | |
| 5.3 | UE PDSCH processing procedure time — Table 5.3-1, the finding of §12 | |
| 5.2.2.1 | Channel quality indicator — the definition of CQI in terms of a hypothetical PDSCH, the 0.1 and 0.00001 block-error targets, and Tables 5.2.2.1-2 to -5 | |
| 5.2.1.4.2, 5.2.2.2.10–.11 | Report quantity configurations, and the predicted PMI codebooks — csi-InferencePrediction-r19 and UE-side CSI prediction (§13.2) | |
| TS 38.202 v19.0.0 Services provided by the physical layer |
4.1, 4.2, 5.2 | The definition of a transport block; the list of L1 functions; the DL-SCH and PCH physical-layer models — and the sentence "The PCH is carried on PDSCH" |
| TS 38.300 v19.3.0 NR and NG-RAN overall description |
6.2.1–6.2.4 | Transport channel types and what DL-SCH supports; logical channels; the mapping of Table 1; HARQ |
| TS 38.321 v19.3.0 MAC protocol specification |
5.3.2.1 | The HARQ entity: one per serving cell, one or two transport blocks per process |
| TS 38.306 v19.3.0 UE radio access capabilities |
4.1.2 | Supported max data rate for DL/UL — the peak-rate formula of §11, and the flat overhead constants |
| TS 38.101-1 v19.4.0 UE radio transmission and reception |
5.3.2 | Table 5.3.2-1 — the maximum resource blocks per channel bandwidth, which is what makes Figure 7 a measurement rather than a straight line |
| TR 38.913 v19.0.0 Scenarios and requirements for next generation access |
7.1, 7.2, 7.5, 7.9 | The targets PDSCH was built to hit: 20 Gbit/s peak downlink, 30 bit/s/Hz, 4 ms / 0.5 ms user-plane latency, and 1 − 10−5 reliability |
| TS 36.211 v19.3.0 LTE physical channels and modulation |
6.3.4, 6.4–6.10 | The LTE side of Table 2: the precoding clause NR does not have, and the seven downlink channels NR reduced to three |
They are text PDFs, so every claim above can be checked from a terminal:
cd ~/Documents/md-engine/"Courses (RAW)/5G Topics"
pdftotext -layout ts_138212v190400p.pdf - | grep -n -A6 "LDPC base graph selection"
pdftotext -layout ts_138214v190400p.pdf - | grep -n -A4 "PDSCH processing time for PDSCH processing capability 1"
pdftotext -layout ts_138202v190000p.pdf - | grep -n "PCH is carried on"
pdftotext -layout ts_136211v190300p.pdf - | grep -n "^6\.[4-9] "
Seven documents were added to the archive for this note. TS 38.212 (v19.4.0) completes the
physical-layer snapshot and is the only one of the seven that exists at that version. The rest are
at their own latest Release 19: TS 38.202 (v19.0.0), TS 38.300 (v19.3.0), TS 38.321 (v19.3.0),
TS 38.306 (v19.3.0), TS 36.211 (v19.3.0, the LTE comparison) and the study report TR 38.913
(v19.0.0). The folder's version-alignment rule applies within the physical-layer group; nothing
in this note cross-references between groups. ETSI refuses a bare curl — the folder's
CLAUDE.md has the incantation.
Where to read around it
Dahlman, Parkvall and Sköld — 5G NR: The Next Generation Wireless Access Technology. In the
archive as 5G.pdf. The downlink transmission chapter is the standard place to go for the reason
behind a design choice, and it is the source of the argument in §3.2
about always-on signals and network energy — an argument the specifications state only by their
silence, since a deleted channel leaves no clause behind. The specifications were read; this
attribution is a pointer.
Ahmadi — 5G NR: Architecture, Technology, Implementation and Operation. In the archive as
5G NR SASSAN AHMADI.pdf. Closer to implementation, and better than Dahlman on the coding chain
and on the DCI field-by-field detail.
On the LDPC codes specifically — the design of base graphs 1 and 2 is documented by their authors in Richardson and Kudekar, Design of Low-Density Parity Check Codes for 5G New Radio (IEEE Communications Magazine, vol. 56, no. 3, March 2018). The textbook is Richardson and Urbanke, Modern Coding Theory (Cambridge, 2008), and the origin is Gallager's 1963 monograph Low-Density Parity-Check Codes. None checked against a copy here.
On incremental redundancy (§5.2), the standard citation is Hagenauer, Rate-compatible punctured convolutional codes and their applications (IEEE Transactions on Communications, vol. 36, no. 4, 1988) — the idea of one mother code punctured to many rates, which is exactly what the circular buffer implements. Not checked against a copy here.
On MIMO and layer mapping, the background for §6.3 is Tse and Viswanath, Fundamentals of Wireless Communication (Cambridge, 2005; free PDF), which is also the reference used by the SRS note for reciprocity.
On link adaptation and the outer loop (§10.3) — correcting a reported CQI with an offset driven by observed acknowledgements is standard practice rather than a 3GPP requirement, and the usual citation is Sampath, Kumar and Holtzman, On setting reverse link target SIR in a CDMA system (IEEE VTC, 1997), where the outer loop was introduced for power control and from which the link-adaptation version descends. Not checked against a copy here.
On the successor system (§14.2) — ITU-R Recommendation M.2160 (November 2023), Framework and overall objectives of the future development of IMT for 2030 and beyond, is the framework document, and 3GPP TR 38.843, Study on artificial intelligence (AI)/machine learning (ML) for NR air interface, is the study behind the prediction work of §13.2. Neither is in the archive and neither was checked against a copy here — they are named so the trail can be followed, and nothing in this note rests on them.
How to check a fact in this note
The same two-minute habit as the previous two notes:
- Find the claim and read the clause number beside it.
- Open the document and go to that clause.
- If the note and the standard disagree, the standard is right.
- If a number is calculated rather than quoted, the calculation is shown as code you can run —
§9.2 and §12.2 are both worked examples, and
§13.1 is a one-line
grep. - One section is fenced off on purpose. §14.2 is the only part of this note not backed by a frozen clause, and it says so at the top. If you are checking facts, check that one hardest — or skip it, since nothing else depends on it.
The section-number warning applies here too. This page numbers its own sections, and so does 3GPP. "§9.2" is a section of this page; a 3GPP clause is always written with its document, as "TS 38.214 clause 5.1.3.2". Never a bare clause number.
Where this goes next
§14.3 already handed each of the three walls to a layer of this folder. What follows is the same thing said as a reading order, with the specific number each next note has to explain.
nr-mimo-csi.md — the loop this note opened twice. §6.4 left
precoding transparent and §10 took the CQI report as given. Between them sits the
whole CSI framework: rank, PMI, the codebooks, and the reporting machinery. The number it has to
explain is 30 bit/s/Hz — §11.3 showed that four layers of 256QAM reach
23.4 and eight layers reach 46.7, so the target is decided entirely in the spatial domain.
nr-carrier-aggregation.md — the factor of eight. Table 12 reached
20 Gbit/s only by aggregating eight carriers, and quietly assumed a device may combine them.
The number it has to explain is which eight — band combinations, and the maximum sensitivity
degradation that decides whether a pair is allowed at all.
fe-components.md, then fe-thermal-power.md — what a constellation costs. Every point in
§6.2 must survive a power amplifier, and 1024QAM demands an error vector
magnitude most transmitters cannot deliver. The number they have to explain is the EVM budget,
in dB, per modulation order.
ran-ric-and-ai.md — the clause that has no algorithm. csi-InferencePrediction-r19
(§13.2) asks a device to report precoders for slots that have not
happened, and does not say how. The number it has to explain is the timescale: a few slots is
hundreds of microseconds, which is far below anything the RIC's xApps and rApps operate at — so the
prediction is not a RIC feature, and working out where it does live is the point of that note.
What to take away, if only one thing. PDSCH looks like a large subject and is actually a small one wrapped in a lot of configuration. Strip the options away and it is: cut the block up so a decoder can manage it, encode each piece with more parity than you need, send as much of that parity as the channel can carry, and keep the rest in a buffer in case you were wrong.
Everything else in this note — four MCS tables, four CQI tables, two base graphs, two resource allocation types, two mapping types, four redundancy versions, sixteen HARQ processes — is the machinery for being wrong cheaply. And §10.1 is the proof that this is deliberate rather than defensive: the standard asks the device to report the highest rate that fails no more than one time in ten. A shared channel is not a pipe. It is a standing bet, placed every slot, at odds the specification chose.