The downlink shared channel, from the packet to the antenna

5G Systems Notes · NR 3 · PDSCH ← Sounding · Hub

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.

65 tracked concepts appear in nr-pdsch.md — 0 not explained anywhere yet; the deepest sits at level 13. Heaviest use first, and the hierarchy says what comes before each:
Term Level State Mentions here Explained in
PDSCH 12 explained 85 term-pdsch
Modulation 4 explained 84 term-modulation
Slot 3 explained 49 term-slot
Layer 5 explained 44 term-layer
LDPC 8 explained 36 term-ldpc
Transport block 5 explained 33 term-transport-block
Transport channel 6 explained 33 term-transport-channel
DCI 9 explained 33 term-dci
MCS 10 explained 32 term-mcs
HARQ 10 explained 26 term-harq
Rate matching 9 explained 25 term-rate-matching
PDCCH 8 explained 22 term-pdcch
…and 53 more, all listed on the concept map.

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.

Contents
Part I · The channel and its place plain words
  1. The channel that carries everything
  2. Coming from where — the fall through the stack
  3. A substitute for what
Part II · The block becomes bits TS 38.212 clause 7.2
  1. The coding chain, step by step
  2. The circular buffer, and what a retransmission really is
Part III · Bits become a picture TS 38.211 clause 7.3.1
  1. From codeword to resource element
  2. What rides alongside, and what is carved out
Part IV · Who tells it where to be the scheduler
  1. The DCI that schedules it
  2. How big is it? Transport block size
  3. What the scheduler is aiming at
Part V · How fast, and how soon the big picture
  1. How fast can it go
  2. HARQ, and the deadline the phone must meet
Part VI · Where it came from, and where it is going the long view
  1. What each release added
  2. The limits, and what comes after
Part VII · Reference the reading list
  1. Sources, and where to read more
  2. Where this goes next

Part IThe channel and its place — what it is, and what it replacedno arithmetic

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:

Figure 1: One PDSCH, and the things that have to happen around it. It is really a cycle and is drawn here cut open, because the last box is the first box one round later: a measurement taken earlier decides the modulation and code rate, the assignment says where and how, the data and its reference signals arrive together, the acknowledgement settles whether it worked, and the next report begins again. The section of this note that covers each box is in its second line. Nothing here is optional - remove any one box and the transmission cannot be received.

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.

Figure 2: Where a downlink byte comes from. Each box hands the one below it a payload and takes responsibility for one problem: quality of service, ciphering and ordering, segmentation, multiplexing, and finally the radio itself. The dashed line is the layer boundary that matters for this note - above it there are packets, below it there is only a transport block. The sublayers are defined in TS 38.300 clauses 6.5, 6.4, 6.3 and 6.2 respectively; the handover point is TS 38.202 clause 4.1.

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 channelWhat it carriesTransport channelPhysical channel
BCCHThe master information blockBCHPBCH
BCCHSystem information blocks (SIB1 onwards)DL-SCHPDSCH
PCCHPaging — "wake up, there is something for you"PCHPDSCH
CCCHControl for a device with no RRC connection yetDL-SCHPDSCH
DCCHDedicated control — RRC reconfiguration, measurement ordersDL-SCHPDSCH
DTCHThe user's actual trafficDL-SCHPDSCH
Table 1: The downlink mappings of TS 38.300 clause 6.2.3 joined to the physical-channel mapping of TS 38.202 clause 5.2. Read the third column: four of the five downlink logical channels end on PDSCH, and so do two of the three transport channels. The one exception, BCCH on BCH, is the bootstrap - it is the only thing that must be readable before anything else is known.

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 didIn NRWhere the job went
PDSCH §6.4User dataPDSCHKept, and given everything below
PDCCH §6.8Scheduling assignmentsPDCCHKept, but confined to a configured CORESET instead of spanning the whole carrier
EPDCCH / MPDCCH / SPDCCH §6.8A–CThree 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.6Master informationPBCHKept, inside the SS/PBCH block
PCFICH §6.7Announced 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.9Carried 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.5Multicast/broadcast (MBSFN)—Deleted. Multicast returned in Release 17 as ordinary PDSCH addressed to a group RNTI
CRS §6.10.1Cell-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
Table 2: The downlink physical channels of LTE (TS 36.211 clause 6, at Release 19) against those of NR (TS 38.211 clause 7.3). The comparison is of the two documents' own section structures and can be checked by reading their tables of contents. Four channels were removed outright; where their job still had to be done, the right-hand column says who does it now. Cell-specific reference signals - not a channel, but the largest single overhead LTE carried - are in the last row for the same reason.

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.


Part IIThe block becomes bits — TS 38.212 clause 7.2the encoder

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.

Figure 3: The whole path from a transport block to a resource element, with the clause that defines each step. The left column is TS 38.212 - bits into bits, no notion of the radio. The right column is TS 38.211 clause 7.3.1 - bits into a picture on the grid. The boundary between them is the codeword, and it is the last point at which the data is still just a number.

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 1Base graph 2
Base matrix $H_{\text{BG}}$46 rows × 68 columns42 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 bits3840 bits
Chosen forLarge blocks at high rate — the throughput caseShort blocks, and any rate at or below 1/4 — the coverage case
Table 3: The two LDPC base graphs of TS 38.212 clause 5.3.2. The base matrix is expanded by replacing every entry with a Zc by Zc block, so the real code is Zc times larger in each dimension. The mother code rate is the systematic length over the transmitted length; both are lower than any rate actually used, which is what leaves room for rate matching to puncture upwards. The first 2Zc systematic columns are never transmitted, which is why the transmitted length is 66Zc rather than 68Zc.

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:

$$ C \;=\; \begin{cases} 1, & B \le K_{\text{cb}} \\[4pt] \left\lceil \dfrac{B}{K_{\text{cb}} - 24} \right\rceil, & B > K_{\text{cb}} \end{cases} \tag{1} $$
Equation 1: Code block segmentation, TS 38.212 clause 5.2.2. If the block with its CRC exceeds the maximum code block size, it is split into C pieces and each piece gets its own 24-bit CRC - which is why the divisor is Kcb minus 24 and not Kcb. A block that fits is left alone, with no per-block CRC at all.

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$FractionBase 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
Table 4: Starting position of each redundancy version, TS 38.212 Table 5.4.2.1-2, with the fraction of the buffer it lands at when the buffer is not limited (Ncb = N). The two base graphs use different integers and land at almost the same four places - which says the positions were chosen as fractions of the buffer, not as properties of either code.

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.


Part IIIBits become a picture — TS 38.211 clause 7.3.1the grid

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

$$ c_{\text{init}} \;=\; n_{\text{RNTI}} \cdot 2^{15} \;+\; q \cdot 2^{14} \;+\; n_{\text{ID}} \tag{2} $$
Equation 2: Scrambling sequence initialisation, TS 38.211 clause 7.3.1.1. n_RNTI is the identity of the device the transmission is addressed to, q is the codeword index, and n_ID is the cell identity unless the higher-layer parameter dataScramblingIdentityPDSCH replaces it. Every term is a different axis of separation: who, which codeword, which cell.

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$PointsWhat it needs
QPSK24Almost nothing — the cell edge, broadcast, the first message
16QAM416A workable signal-to-noise ratio
64QAM664A good one; the ceiling of MCS table 1
256QAM8256A very good one, and a well-calibrated transmitter
1024QAM101024Effectively a short indoor link with excellent phase noise
Table 5: The PDSCH modulation schemes of TS 38.211 Table 7.3.1.2-1. The modulation order Qm is the number of bits carried per resource element, and it appears directly in the transport-block-size arithmetic of section 9. 1024QAM was added in Release 17 and needs its own MCS table (TS 38.214 Table 5.1.3.1-4) because the existing five-bit index had no room left.

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:

$$ \begin{bmatrix} y^{(p_0)}(i) \\ \vdots \\ y^{(p_{\nu-1})}(i) \end{bmatrix} \;=\; \begin{bmatrix} x^{(0)}(i) \\ \vdots \\ x^{(\nu-1)}(i) \end{bmatrix} \tag{3} $$
Equation 3: Antenna port mapping, TS 38.211 clause 7.3.1.4, quoted whole. It is the identity. The clause's only other content is that the set of ports is determined by the procedure in TS 38.212 - which is to say, by what the DCI's antenna-port field selected.

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.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 OFDM symbol l within the slot k=0 k=11 one resource block — 12 subcarriers CORESET — PDCCH, not available to PDSCH DM-RS CDM group 0 (Δ=0) DM-RS CDM group 1 (Δ=1) PDSCH data
Figure 4: One resource block over one 14-symbol slot, for a PDSCH of mapping type A with dmrs-TypeA-Position = pos2 and one additional DM-RS position. Symbols 0 and 1 are a CORESET and are not available to PDSCH. Symbol 2 is the front-loaded DM-RS - configuration type 1, both CDM groups declared without data, so all twelve subcarriers of that symbol are reference signal and none of it is payload. Symbol 11 is the additional position, which exists to track a channel that changes during the slot. The remaining ten symbols are data. Positions are from TS 38.211 clause 7.4.1.1.2 and Table 7.4.1.1.2-3.

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 1Configuration type 2
Subcarrier pattern$k = 4n + 2k' + \Delta$ — every other subcarrier$k = 6n + k' + \Delta$ — adjacent pairs
CDM groups2  ($\Delta = 0, 1$)3  ($\Delta = 0, 2, 4$)
Resource elements per group, per PRB, per symbol64
Ports, single-symbol / double-symbol4 / 86 / 12
The tradeDenser in frequency — better channel estimates over a long delay spreadMore ports — more users or layers multiplexed on the same symbols
Table 6: The two DM-RS configurations of TS 38.211 clause 7.4.1.1.2 and Tables 7.4.1.1.2-1 and -2. A CDM group is a set of ports separated by orthogonal cover codes rather than by position, so all ports in a group sit on the same resource elements. The port counts in the last row are the baseline; Release 18's dmrs-TypeEnh doubles both, which is why the tables in the specification run to port 1015 and 1023 respectively.

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.


Part IVWho tells it where to be — the DCI and the sizethe scheduler

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.

FieldBitsWhat it decidesHere
Identifier for DCI formats1Downlink 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 assignment4A row index into a configured table: slot offset, start symbol, length, mapping type§8.2
VRB-to-PRB mapping1Interleaved or not§6.5
Modulation and coding scheme5$Q_m$ and $R$, via one of four tables§9
New data indicator1Is this a new block, or a retransmission of the one in this HARQ process?§12
Redundancy version2Where in the circular buffer to start reading§5
HARQ process number4Which of the 16 processes this belongs to§12
Downlink assignment index2Counter, so a missed assignment is detectable§12
TPC command for scheduled PUCCH2Power for the acknowledgement—
PUCCH resource indicator3Where to send the acknowledgement§12
PDSCH-to-HARQ feedback timing indicator3$K_1$ — how many slots later to send it§12
Table 7: DCI format 1_0 with CRC scrambled by C-RNTI, TS 38.212 clause 7.3.1.2.1, as a downlink assignment. The bit widths are quoted from the clause; the frequency field is the only variable one. The right-hand column names the section of this note where the field is spent. The total for a 273-block bandwidth part is 44 bits, which is what a whole downlink assignment costs.

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:

$$ \text{SLIV} = \begin{cases} 14\,(L-1) + S, & (L-1) \le 7 \\[4pt] 14\,(14 - L + 1) + (14 - 1 - S), & \text{otherwise} \end{cases} \tag{4} $$
Equation 4: The start and length indicator value, TS 38.214 clause 5.1.2.1, with 0 < L <= 14 - S. Two branches, because a single formula covering all pairs of S and L would need more than seven bits. The second branch reflects long allocations about the middle of the slot, so that every valid pair maps to a distinct SLIV below 128 and the field fits in the row of a table rather than in the DCI.

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 typeNormal cyclic prefixExtendedWhat it is for
$S$$L$$S+L$$S$$L$$S+L$
Type A
slot-based
0–33–143–140–33–123–12The 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–122–132–140–102, 4, 62–12Latency and opportunism. A two-symbol transmission can start at almost any symbol boundary and be over in tens of microseconds.
Table 8: Valid start symbol S and length L, TS 38.214 Table 5.1.2.1-1, for normal and extended cyclic prefix. Type A must begin in the first four symbols and last at least three; type B may begin almost anywhere and last as few as two. The DM-RS position follows from the type - counted from the slot for A, from the allocation for B (TS 38.211 clause 7.4.1.1.2).

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-Position is pos3 (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$132132
$N_{\text{RE}} = \min(156, 132) \cdot 273$36 03636 036
$N_{\text{info}} = N_{\text{RE}} R Q_m \nu$768 580.31 067 566.5
TBS (step 4)769 832 bits1 080 480 bits
After CRC, $B = A + 24$769 8561 080 504
LDPC base graph1  ($A > 3824$, $R > 0.67$)1
Code blocks $C = \lceil B / 8424 \rceil$92129
Per-block CRC overhead2 208 bits — 0.29 %3 096 bits — 0.29 %
Rate over one 0.5 ms slot1 540 Mbit/s2 161 Mbit/s
Table 9: Two transport block sizes computed from TS 38.214 clause 5.1.3.2, then segmented per TS 38.212 clauses 7.2.1 to 7.2.3. Both use 273 resource blocks, four layers, twelve symbols and one DM-RS symbol costing twelve resource elements per block. The only difference is the MCS table. The last column is the block divided by a slot of 0.5 ms, which is the instantaneous rate while the transmission lasts - not a sustained throughput, since it assumes every slot is downlink and every slot is yours.

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))    # -> 1080480

Ties in the round of 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.

Figure 5: Spectral efficiency against MCS index, plotted from the last column of TS 38.214 Tables 5.1.3.1-1, 5.1.3.1-2 and 5.1.3.1-4. Three tables covering the same five-bit field: table 1 stops at 64QAM, table 2 reaches 256QAM, table 4 reaches 1024QAM. Each table spends its 32 codepoints over a different range, so the same index means different things and the table in force must be known before the index can be read. Note the flat step in table 1 at indices 9 to 10 and 16 to 17, where the modulation order rises and the code rate falls back - the two ways of reaching one spectral efficiency, offered so the scheduler can pick the more robust one.

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:

Figure 6: Spectral efficiency against CQI index, from TS 38.214 Tables 5.2.2.1-2, 5.2.2.1-3 and 5.2.2.1-4. The same four bits, spent three different ways. Table 1 stops at 64QAM; table 2 spends the range on 256QAM at the top; table 3 spends it downwards instead, reaching 0.0586 bits per resource element - about a quarter of the lowest rate the other two can express. Table 3 is also the only one whose target block error rate is 0.00001 rather than 0.1, so its lower rungs are not merely slower, they are asked to be a ten-thousand times more reliable.

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)23456789101112131415
MCS index (table 2)13579111315171921232527
Relation$I_{\text{MCS}} = 2\,\text{CQI} - 3$   exactly, for every column
Table 10: Every CQI index of TS 38.214 Table 5.2.2.1-3 whose spectral efficiency appears exactly in MCS Table 5.1.3.1-2, with the MCS index that carries it. Fourteen of the fifteen match to four decimal places, and the correspondence is exactly linear. Only CQI 1 has no twin - its rate is below anything the MCS table can express. The correspondence is a fact about the two tables, not a clause: no part of the specification instructs a scheduler to use it.

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.


Part VHow fast, and how soon — the two numbers everyone quotesthe big picture

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

$$ \text{data rate (Mbit/s)} \;=\; 10^{-6} \cdot \sum_{j=1}^{J} \left( v^{(j)}_{\text{Layers}} \cdot Q^{(j)}_m \cdot f^{(j)} \cdot R_{\max} \cdot \frac{N^{\text{BW}(j),\mu}_{\text{PRB}} \cdot 12}{T^{\mu}_s} \cdot \bigl(1 - \text{OH}^{(j)}\bigr) \right) \tag{5} $$
Equation 5: The approximate maximum data rate of TS 38.306 clause 4.1.2. J is the number of aggregated carriers; for each one, v is the maximum layers, Qm the maximum modulation order, f a scaling factor of 1, 0.8, 0.75 or 0.4, and N-PRB the maximum resource block allocation for that bandwidth from TS 38.101-1 clause 5.3. Rmax is fixed at 948/1024 - the highest code rate in any MCS table. Ts is the average OFDM symbol duration in a subframe, 1 ms over 14 times 2 to the mu. OH is a flat overhead: 0.14 downlink in FR1, 0.18 downlink in FR2.

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.

Figure 7: Peak downlink rate against channel bandwidth, from TS 38.306 clause 4.1.2 with 30 kHz subcarrier spacing, 256QAM, a single carrier, scaling factor 1 and the FR1 downlink overhead of 0.14. The resource block counts are the real ones from TS 38.101-1 Table 5.3.2-1, which is why the lines are not perfectly straight: a 100 MHz channel holds 273 blocks, but a 5 MHz channel holds only 11, and the guard band costs proportionally more at the bottom. Four layers over 100 MHz - an ordinary flagship configuration - is the 2.3 Gbit/s that consumer coverage maps quote.

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 slotThe example of §9.2What OH = 0.14 implies
Total, 12 subcarriers × 14 symbols168168
CORESET — PDCCH24  (2 symbols)12  (1 symbol)
DM-RS12  (1 symbol, both CDM groups)12  (1 symbol)
PDSCH payload132 — 78.6 %144 — 85.7 %
Implied overhead21.4 %  = 3/1414.3 %  = 2/14
Rate2 161 Mbit/s2 337 Mbit/s
Table 11: Where a resource block's 168 elements go over one 14-symbol slot, for two configurations. The left column is the worked example of section 9.2: a two-symbol CORESET and a front-loaded DM-RS symbol with both CDM groups declared without data. The right column is what the flat 0.14 of TS 38.306 corresponds to. The last row is the reading: the constant is two symbols out of fourteen, to within the two decimal places the specification prints. The specification does not say this - it states 0.14 and no more - so treat the identification as an arithmetic observation, not a quotation.

$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:

ConfigurationCarriersLayersModulationRatevs 20 Gbit/s
One 100 MHz carrier — a good handset today14256QAM2.34 Gbit/s12 %
Same, with 1024QAM141024QAM2.92 Gbit/s15 %
Four-carrier aggregation44256QAM9.35 Gbit/s47 %
Eight-carrier aggregation84256QAM18.70 Gbit/s94 % — just short
Eight carriers with 1024QAM841024QAM23.37 Gbit/s117 %
Eight carriers, eight layers88256QAM37.39 Gbit/s187 %
FR2 — eight 400 MHz carriers82256QAM34.48 Gbit/s172 %
Table 12: Configurations evaluated with TS 38.306 clause 4.1.2 against the 20 Gbit/s downlink target of TR 38.913 clause 7.1. All FR1 rows use 30 kHz spacing, 273 resource blocks per carrier and OH = 0.14; the FR2 row uses 120 kHz, 264 blocks and OH = 0.18. The row that first clears the target is the point of the table: four layers of 256QAM over eight carriers falls short at 18.7, which is why both 1024QAM and eight-layer reception exist at all.

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:

$$ T_{\text{proc},1} \;=\; \bigl(N_1 + d_{1,1} + d_2 + d_3\bigr)\,(2048 + 144)\,\kappa\,2^{-\mu}\,T_c \;+\; T_{\text{ext}} \tag{6} $$
Equation 6: The PDSCH processing time, TS 38.214 clause 5.3. N1 is a count of OFDM symbols taken from Table 5.3-1 or 5.3-2 according to the device's declared processing capability; the d terms are adjustments for particular cases, kappa is 64 and Tc is the basic time unit of TS 38.211 clause 4.1. The bracket that matters is (2048 + 144) kappa 2^-mu Tc, which is one ordinary OFDM symbol with its normal cyclic prefix - so the whole expression is a symbol count converted to time.

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$SCSOne symbol$N_1$ pos0Budget$N_1$ otherBudget
015 kHz71.35 µs8570.83 µs$N_{1,0}$—
130 kHz35.68 µs10356.77 µs13463.80 µs
260 kHz17.84 µs17303.26 µs20356.77 µs
3120 kHz8.92 µs20178.39 µs24214.06 µs
5480 kHz2.23 µs80178.39 µs96214.06 µs
6960 kHz1.11 µs160178.39 µs192214.06 µs
Table 13: TS 38.214 Table 5.3-1, processing capability 1, converted to real time. Column 3 is one OFDM symbol including its normal cyclic prefix, computed from the constants of TS 38.211 clause 4.1. Columns 5 and 7 are the symbol count multiplied by it - the wall-clock budget the device has to demodulate, descramble, de-rate-match, LDPC-decode every code block, check every CRC and prepare the acknowledgement. Read the last two columns downwards: the budget falls by a factor of three and then stops dead. Numerology 4 is absent, as it is from the SRS guard-period table of the previous note: 240 kHz is a defined numerology (TS 38.211 Table 4.2-1) and carries the SS/PBCH block (clause 7.4.3.1, case E), but Table 5.3-1 provides no row for a PDSCH on it.

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:

$$ N_1(\mu) \;=\; N_1(3) \cdot 2^{\,\mu - 3}, \qquad \mu \ge 3 \tag{7} $$
Equation 7: What TS 38.214 Table 5.3-1 does from numerology 3 onwards. The symbol count doubles with every doubling of subcarrier spacing, which is exactly what is needed to hold the wall-clock budget constant. Both columns of the table obey it - 20, 80, 160 and 24, 96, 192 - so it is a property of the table, not of one configuration.
Figure 8: The PDSCH decoding budget against numerology, from TS 38.214 Table 5.3-1 converted to microseconds. The two solid lines are the budget for the two columns of the table. The dashed line is the duration of one slot, which halves at every step. Two things happen at numerology 3, and they are the same thing seen twice: the budget stops falling, and it crosses the slot duration. Past that point the device is given a fixed amount of real time no matter how fast the frame structure runs - and that time is longer than a slot, so an acknowledgement can never be sent in the next one.

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.

μ=1 — 30 kHz slot n n+1 n+2 PDSCH decode — 357 µs HARQ-ACK — K₁=1 1000 µs from grant to acknowledgement μ=3 — 120 kHz slot n n+1 n+2 n+3 PDSCH decode — 178 µs HARQ-ACK — K₁=2 375 µs from grant to acknowledgement CORESET / PDCCH — the DCI PDSCH decoding budget, TS 38.214 Table 5.3-1 PUCCH — HARQ-ACK
Figure 9: One PDSCH from grant to acknowledgement, at two numerologies, on one common time axis in microseconds. Both lanes assume a two-symbol CORESET, a PDSCH filling the remainder of the slot, and the earliest legal HARQ-ACK. At 30 kHz the decoding budget of 356.77 microseconds fits inside the following slot, so K1 = 1 and the whole exchange takes 1 millisecond. At 120 kHz the budget is 178.39 microseconds - larger than a 125 microsecond slot - so the acknowledgement cannot be sent in the next slot at all and K1 = 2, yet the exchange still finishes in 375 microseconds. Symbol durations from TS 38.211 clause 4.1, the budget from TS 38.214 Table 5.3-1.

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.


Part VIWhere it came from, and where it is goingthe long view

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.

ReleaseEvidence in the specificationWhat was added, and why
15
2018
no suffix — the baselinePDSCH 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-r16Coexistence. 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-r16Latency. 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-r16Feedback efficiency. An enhanced acknowledgement codebook — fewer wasted bits when many PDSCHs are outstanding.
17
2022
mcs-Table-r17, mcs-TableDCI-1-2-r17The ceiling. 1024QAM and MCS table 4 (§9.4) — the answer to the near miss in Table 12.
dl-OrJointTCI-StateList-r17Beam management. One indication of transmission configuration serving both directions, instead of separate downlink and uplink state machines.
pdsch-HARQ-ACK-CodebookListMulticast-r17Multicast 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-r18Broadcast, and more coexistence. A broadcast traffic channel on PDSCH, and two further LTE rate-match patterns.
typeII-CJT-r18Several 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-r18Motion. 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–.11Prediction. The device reports precoders for slots that have not happened yet — see below.
pdsch-AggregationFactor-r19Coverage. Repetition of the random-access Msg4 PDSCH, for devices that cannot decode it in one go.
Table 14: What each release added to PDSCH, evidenced by parameter names carrying their own release suffix. The middle column is the exact string as printed in TS 38.211, 38.212 or 38.214 v19.4.0, so every row can be confirmed with one grep. Release 15 has no suffixes because it is the baseline - everything without a suffix is original. Read the right-hand column downwards: the additions move from making PDSCH coexist, to raising its ceiling, to coordinating several transmitters, to predicting the channel before it happens.
Figure 10: The arc of the table above, as one line. Each release solves a problem the previous one exposed - and the last two change what kind of problem is being solved, from arranging resources to anticipating the channel. Dates are the release freeze years; the parameter under each box is the greppable evidence in the specification.

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.


Part VIIReference — the clauses used, and what to read nextthe reading list

Sources, and where to read more

The clauses this note stands on

DocumentClauseWhat it gives
TS 38.211 v19.4.0
Physical channels and modulation
7.3.1Physical downlink shared channel — the whole of Part III
7.3.1.1–.2Scrambling and its initialisation; Table 7.3.1.2-1, the five modulations
7.3.1.3–.4Table 7.3.1.3-1, codeword-to-layer mapping; the identity that is antenna port mapping
7.3.1.5–.6Mapping to virtual blocks, and virtual to physical
7.4.1.1PDSCH demodulation reference signals; Tables 7.4.1.1.2-1 to -4
TS 38.212 v19.4.0
Multiplexing and channel coding
7.2Downlink shared channel and paging channel — the whole of Part II, six clauses
5.2.2Code block segmentation; $K_{\text{cb}}$, $K_b$, filler bits
5.3.2LDPC encoding; Table 5.3.2-1, the lifting sizes; the two base graphs' dimensions
5.4.2Rate matching; the circular buffer, limited-buffer rate matching, Table 5.4.2.1-2 for $k_0$
7.3.1.2.1DCI format 1_0 — the field list of Table 7
TS 38.214 v19.4.0
Physical layer procedures for data
5.1The 16 HARQ processes; the default of 8
5.1.2.1–.2Time and frequency allocation; the SLIV, the RIV, Table 5.1.2.1-1 and Table 5.1.2.2.1-1
5.1.3.1Tables 5.1.3.1-1 to -4, the four MCS tables
5.1.3.2Transport block size determination — the four steps of §9
5.1.4PDSCH resource mapping — what is declared unavailable, and the LTE-CRS patterns
5.3UE PDSCH processing procedure time — Table 5.3-1, the finding of §12
5.2.2.1Channel 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–.11Report 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.2The 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.4Transport 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.1The 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.2Supported 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.2Table 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.9The 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.10The LTE side of Table 2: the precoding clause NR does not have, and the seven downlink channels NR reduced to three
Table 15: Every clause cited on this page, with what it supplies. All are in the archive folder Courses (RAW)/5G Topics. Versions are not uniform and the column says so: the four physical-layer specifications are one Release 19 v19.4.0 snapshot, while TS 38.300, 38.321, 38.202 and 36.211 are at their own latest Release 19 versions because no v19.4.0 of them exists. Nothing in this note depends on a cross-reference between the two groups.

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:

  1. Find the claim and read the clause number beside it.
  2. Open the document and go to that clause.
  3. If the note and the standard disagree, the standard is right.
  4. 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.
  5. 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.

5G Systems Notes · NR 3 · PDSCH Top · ← Sounding · Hub