Physical Channels (PDSCH/PDCCH/PUSCH/PUCCH/PRACH) in 5G NR
The downlink and uplink physical channels and what each one carries.
NR has six physical channels and nine or ten physical signals, and almost everything that makes the air interface hard to reason about comes from not keeping those two lists apart. A physical channel is defined by five choices: what it carries, how it is coded, how it is mapped to resource elements, how the receiver knows it is there, and what happens when it fails. Answer those five for a channel and you understand it; answer them for all six and you can hold the whole air interface in your head at once. This document does exactly that — the same five questions, asked in the same order, of PDSCH, PDCCH, PBCH, PUSCH, PUCCH and PRACH — and then puts the answers in one comparison table, with the coding chains in full, eight worked calculations, nine failure modes and a per-channel log checklist.
Contents
- 01Channels and Signals: the Distinction Everybody Blurs
- 02The Five Questions That Define a Physical Channel
- 03Where They All Sit: One Downlink Slot, One Uplink Slot
- 04PDSCH: What It Carries, and How It Is Coded
- 05PDSCH: Rate Matching, Scrambling and Modulation
- 06PDSCH: Resource Mapping and Frequency-Domain Allocation
- 07PDCCH: the Channel With No Feedback Loop
- 08PDCCH: Aggregation Levels and the Code Rates They Buy
- 09PBCH: the Channel Nobody Schedules
- 10PUSCH: the Same Machinery, Two Waveforms
- 11PUSCH: Precoding, Hopping, and What Else Rides On It
- 12PUCCH: Why There Have To Be Five Formats
- 13PUCCH Format 0: Saying Something Without Coding It
- 14PUCCH: Resource Sets and How the UE Picks One
- 15PRACH: the Channel With No Coding At All
- 16The Master Comparison
- 17The Shared Steps, and Why They Are Shared
- 18Parameter and Configuration Reference
- 19Failure Modes and What Each One Means
- 20Configuration Reference (ASN.1)
- 21Four More Worked Calculations
- 22Illustrative Message Traces
- 23Release Deltas: Rel-15 to Rel-18
- 24Reading Physical Channels in Logs: A Checklist
- 25Glossary
- 26References
1. Channels and Signals: the Distinction Everybody Blurs
The physical layer of NR transmits two kinds of thing, and they are not two flavours of the same thing. A physical channel carries information that originated above the physical layer — a transport block handed down by MAC, a scheduling decision made by the scheduler, a HARQ-ACK bit produced by the UE's HARQ entity. A physical signal carries nothing of the kind. It is a sequence both ends already know, transmitted so that the receiver can measure something: the channel, the timing, the phase, the cell identity.
The test is one sentence long. Can you point at a bit that came from a layer above the physical layer? If yes, it is a channel. If no, it is a signal. There is no third answer, and every apparent exception dissolves under the test. PSS carries the physical-layer cell identity — but that identity is not information from a higher layer, it is the identity of the sequence itself, which is why there are exactly three PSS sequences and no PSS encoder. CSI-RS looks like it carries channel state — it does not; the UE derives channel state by measuring it, and the derived quantity travels back on PUCCH, which is a channel.
| Physical channels | Physical signals | |
|---|---|---|
| Downlink | PDSCH, PDCCH, PBCH | PSS, SSS, PDSCH DMRS, PDCCH DMRS, PBCH DMRS, PT-RS, CSI-RS, TRS (a CSI-RS configured for tracking) |
| Uplink | PUSCH, PUCCH, PRACH | PUSCH DMRS, PUCCH DMRS, uplink PT-RS, SRS |
| Carries information from above the PHY? | Yes, by definition | No, by definition |
| Has a transport channel above it? | PDSCH (DL-SCH, PCH), PBCH (BCH), PUSCH (UL-SCH), PRACH (RACH). PDCCH and PUCCH do not — DCI and UCI are physical-layer control information with no transport channel. | Not applicable |
| Channel-coded? | Yes for five of the six — LDPC or Polar. PRACH is the exception. | Never. A signal is a sequence, not a codeword. |
| Scrambled? | Yes — with an identity derived from the RNTI and a configured scrambling ID (§17) | The sequence is initialised from an identity, which looks similar and is not the same thing |
Table 1. Channels and signals, side by side. The last row is the one that causes the most confusion in practice: a CSI-RS sequence is initialised from scramblingID, and a PDSCH is scrambled with dataScramblingIdentityPDSCH. Both use a Gold sequence and neither is the other.
The confusion is not academic. "The DMRS failed" and "the PDSCH failed" produce completely different log evidence and lead to completely different fixes, and a bad DMRS configuration presents as a PDSCH coding problem — see §19. Getting the taxonomy right is the first step in nearly every physical-layer investigation, because it tells you which of the two things in front of you has a CRC and which one does not.
One boundary worth drawing before going further. The mapping above these channels — which logical channel feeds which transport channel, the LCID values, the full catalogue of DCI and UCI formats — belongs to the companion 06 Channel Mapping and is not repeated here. The two documents are complementary: 06 answers what feeds this, and this one answers what happens once it arrives.
2. The Five Questions That Define a Physical Channel
Every physical channel in NR is completely specified, for practical purposes, by the answers to five questions. This is not a mnemonic invented for this document — it is the structure of TS 38.211 and TS 38.212 read together. The specifications separate multiplexing and channel coding (38.212, questions 1 and 2) from physical channels and modulation (38.211, questions 3 and 4), and leave question 5 to be inferred, which is why question 5 is where the field problems live.
| The question | Where it is answered | Why it matters at 2am | |
|---|---|---|---|
| 1 | What does it carry? Which transport channel, or which physical-layer control information, and how many bits of it. | TS 38.212 cl. 6 and 7; TS 38.211 cl. 6.3 and 7.3 | It tells you what is lost when the channel fails, and therefore how bad the failure is. A lost PDSCH costs a retransmission; a lost PBCH costs the whole cell. |
| 2 | How is it coded? Which code, which CRC, which rate matching, which modulation. | TS 38.212 cl. 5 (the codes), cl. 6 and 7 (the per-channel chains) | It tells you whether a decode failure is even detectable, what a retransmission can add, and the code rate — the number you actually need. |
| 3 | How is it mapped to resource elements? Which symbols, which subcarriers, in which order, around what. | TS 38.211 cl. 6.3 (uplink) and cl. 7.3, 7.4 (downlink) | It tells you where to look in a grid dump, and it tells you what collides with what. |
| 4 | How does the receiver know it is there? A grant, a blind search, a fixed position, or a configured occasion — and which reference signal it demodulates against. | TS 38.213 cl. 9, 10; TS 38.214 cl. 5, 6; TS 38.211 cl. 6.4, 7.4 | The question that separates the channels most sharply: PDSCH is told about, PDCCH is hunted for, PBCH is simply where it always is. |
| 5 | What happens when it fails? Who notices, what they do, and what the log looks like. | Nowhere, completely. Assembled from the HARQ, RLM and RRC procedures. | It is the only question a test engineer is ever actually asked, and it is the one 3GPP does not answer. |
Table 2. The frame used for every channel in §4 to §15, in that order. The right-hand column is why the frame is worth adopting: each question maps onto a different kind of diagnostic evidence.
The frame also explains why the six channels are as different from each other as they are. They are not six variations on a theme. They are six different answers to question 4, and question 4 constrains everything else:
- PDSCH and PUSCH are told about, by a DCI that arrived earlier. Because they are told about, they can be adapted freely — any size, any modulation, any code rate, anywhere in the bandwidth part.
- PDCCH cannot be told about, because it is the thing that does the telling. It has to be found, so the UE tries a fixed set of candidates and lets the CRC arbitrate — and because the search set must stay small, PDCCH's own parameters must stay few.
- PBCH, PUCCH and PRACH are not told about either, in three different ways: PBCH sits where the synchronisation raster puts it, PUCCH at a resource the UE derives from a set configured in advance, and PRACH on a configured occasion nobody expects. None of the three gets a grant, and none of the three gets meaningful rate adaptation.
If you remember one structural fact from this document, make it this one: the amount of adaptation a channel gets is inversely proportional to how hard it is to find. PDSCH is trivially findable and infinitely adaptable. PBCH is findable from nothing and adaptable in no respect whatsoever. PDCCH sits in between and pays for it with a five-value aggregation ladder that is the only rate control it has.
3. Where They All Sit: One Downlink Slot, One Uplink Slot
Before the per-channel detail, the geography. Two figures, one per direction, showing a plausible slot with everything in it. Neither is a specification requirement — the positions are all configurable — but the shape is what almost every deployed cell looks like, and knowing the shape is what lets you spot the slot that is wrong.
4. PDSCH: What It Carries, and How It Is Coded
The Physical Downlink Shared Channel carries essentially all downlink traffic. Every web page, every video frame, every RRC message, every SIB, every paging record and every MAC control element travels on it. It is shared in the sense that the resource is allocated per slot rather than dedicated, which is where the name comes from.
4.1 Question 1: what it carries
| Transport channel | What rides on it | RNTI used | Notes |
|---|---|---|---|
| DL-SCH | All dedicated user traffic (DTCH), all dedicated signalling (DCCH), and system information (BCCH beyond the MIB) | C-RNTI, CS-RNTI, MCS-C-RNTI, TC-RNTI for Msg4, SI-RNTI for SIB1 and other SI, RA-RNTI or MsgB-RNTI for the RAR | One or two transport blocks per slot per cell, two only above four spatial layers |
| PCH | Paging messages, on the PCCH logical channel | P-RNTI | Same physical channel, same processing chain; the only difference is which RNTI scrambles the scheduling DCI's CRC. See the companion 19 Paging. |
Table 3. PDSCH carries exactly two transport channels. The distinction matters less than it looks: from the physical layer's point of view a paging PDSCH and a data PDSCH differ only in the addressing.
The transport block size is not signalled. It is derived by both ends from the allocation, the MCS, the layer count and the overhead assumptions, by the procedure in TS 38.214 cl. 5.1.3.2. This is one of the most consequential design decisions in NR: it saves the DCI bits an explicit size field would cost, and it means any disagreement between the two ends about DMRS overhead, xOverhead or the layer count produces a silent, total decode failure rather than a size mismatch anybody can see. §21.1 works it through, on the same geometry as the companion 05 HARQ.
4.2 Question 2: the coding chain, step by step
Step 1: transport block CRC
A CRC is appended to the whole transport block before anything else happens TS 38.212 cl. 7.2.1. Its length depends on the payload:
| Transport block size A | CRC | Length | Generator polynomial | Why |
|---|---|---|---|---|
| A > 3824 bits | CRC24A | 24 bits | g_CRC24A(D), cl. 5.1 | Large blocks are segmented, so the transport-block CRC has to distinguish itself from the per-code-block CRC24B; and a 24-bit CRC gives an undetected-error probability around 2⁻²⁴ ≈ 6 × 10⁻⁸ per block, which at hundreds of blocks per second is an undetected error roughly once a fortnight. |
| A ≤ 3824 bits | CRC16 | 16 bits | g_CRC16(D), cl. 5.1 | Small blocks are usually control signalling or a short MAC PDU, where 24 bits of CRC on a 300-bit payload would be 8 % pure overhead. 2⁻¹⁶ is a weaker guarantee, and RLC or PDCP sits above it. |
Table 4. Transport-block CRC selection. The threshold is 3824, the same number that appears in the TBS quantisation procedure and in the base-graph selection rule — it is the boundary between "small" and "large" throughout the downlink chain.
Step 2: base graph selection
NR LDPC is not one code. It is two families of parity-check matrices, base graph 1 and base graph 2, each expandable by 51 lifting sizes. BG1 has 22 systematic columns and a mother code rate of about 1/3; BG2 has up to 10 and reaches about 1/5. The selection rule TS 38.212 cl. 7.2.2 uses the transport block size and the target code rate, and it is a rule, not a configuration — nothing in RRC chooses it:
| Condition on A and R | Base graph | Max code block K_cb | Mother rate | What it is for |
|---|---|---|---|---|
| A ≤ 292 | BG2 | 3840 | ≈ 1/5 | Very short blocks. BG2's smaller graph is better conditioned at short lengths. |
| A ≤ 3824 and R ≤ 0.67 | BG2 | 3840 | ≈ 1/5 | Small and not aggressively coded — the regime BG2 was designed for. |
| R ≤ 0.25 (any A) | BG2 | 3840 | ≈ 1/5 | Very low rate. BG1 cannot reach 1/5, so BG2 is the only option that does not need heavy repetition. |
| Otherwise | BG1 | 8448 | ≈ 1/3 | Large blocks or high rates. BG1 has materially better performance above about R = 0.7. |
Table 5. Base graph selection, identical for PDSCH cl. 7.2.2 and PUSCH cl. 6.2.2. Note that the rule depends on the target code rate from the MCS table, not on the effective rate after rate matching — so a heavily punctured retransmission still uses the base graph the first transmission chose.
Step 3: code block segmentation and the second CRC
If the transport block plus its CRC exceeds K_cb, it is split into C code blocks of equal size, and each code block gets its own 24-bit CRC24B cl. 5.2.2. When C = 1 no CRC24B is added, because the transport-block CRC already covers that single block. The per-block CRC is not there for the transport block's benefit — it is there so the receiver knows which code blocks failed, which is what makes code-block-group retransmission possible at all. See the companion 05 HARQ §10.
Where the CRC bits go, counted. Take the §21 geometry: a 31 752-bit transport block at R = 0.6016, so BG1 with K_cb = 8448.
B = A + 24 = 31 752 + 24 = 31 776 bits after CRC24A
B > 8448, so C = ⌈31 776 / (8448 − 24)⌉ = ⌈31 776 / 8424⌉ = 4 code blocks
Total bits to encode = B + 24·C = 31 776 + 96 = 31 872 bits
K′ = 31 872 / 4 = 7968 bits per code block
Z_c = 384, the smallest lifting size with 22·Z_c ≥ 7968 → K = 8448, so 480 filler bits per code block
CRC overhead = 120 bits on 31 752, or 0.38 %. Filler overhead = 1920 bits of 33 792, or 5.7 % — fifteen times the CRC cost. The filler bits are punctured before transmission so they cost nothing on the air, but they do consume encoder and decoder cycles, which is why lifting size selection matters to a chip designer and to nobody else.
Step 4: LDPC encoding
Each code block is encoded by the lifted base graph, producing 66·Z_c bits for BG1 or 50·Z_c for BG2 cl. 5.3.2. The first K bits are systematic — the payload itself — and the remainder is parity. The encoder output is always the full mother codeword regardless of what the transmission needs, which is what makes the next step possible.
The full mother codeword is also what makes incremental-redundancy HARQ possible, and it is worth seeing why. A first transmission at R = 0.6 reads about 55 % of the buffer. The other 45 % has already been computed and thrown away — so a retransmission does not need to re-encode anything, it just reads from a different offset. The companion 05 HARQ §5 covers the buffer and the redundancy versions in full; the only fact needed here is that rate matching is a read position, not a re-encoding.
5. PDSCH: Rate Matching, Scrambling and Modulation
5.1 Rate matching and the circular buffer
The encoder produced a fixed number of bits. The allocation can hold a different number. Rate matching reconciles the two TS 38.212 cl. 5.4.2 by treating the codeword as a circular buffer of N_cb bits, choosing a starting position k₀ from the redundancy version, and reading E bits — wrapping around if E exceeds what remains. If E is smaller than the buffer the codeword is punctured; if larger, bits are repeated. The four start positions — 0 %, 26 %, 50 % and 85 % of the buffer — and the reason schedulers cycle them in the order 0 → 2 → 3 → 1 rather than 0 → 1 → 2 → 3 belong to the companion 05 HARQ §5 TS 38.212 Table 5.4.2.1-2, as does the limited-buffer rate matching that compresses them.
After rate matching the bits are interleaved within each code block cl. 5.4.2.2 — written row-wise into a matrix with Q_m rows and read column-wise, so that the bits of one modulation symbol come from widely separated positions in the codeword. This matters more than it sounds: on a 256QAM symbol the eight bits have very different reliabilities, and without the interleaver a run of eight consecutive codeword bits would all land in the same symbol and share its fate. The code blocks are then concatenated into one bit stream cl. 5.5.
5.2 Scrambling
The concatenated bit stream is scrambled with a Gold sequence TS 38.211 cl. 7.3.1.1 whose initialisation carries the addressing:
c_init = n_RNTI * 2^15 + q * 2^14 + n_ID mod 2^31
n_RNTI the RNTI of the DCI that scheduled this PDSCH
q the codeword index, 0 or 1 (1 only above 4 layers)
n_ID dataScramblingIdentityPDSCH, 0..1023, if configured AND the
RNTI is C-RNTI / MCS-C-RNTI / CS-RNTI AND the PDSCH was not
scheduled by DCI format 1_0 in a common search space;
otherwise n_ID = N_ID_cellListing 1. Three inputs, three purposes. n_RNTI makes the scrambling UE-specific, so a UE that mis-decodes another UE's DCI cannot accidentally descramble its PDSCH. q decorrelates the two codewords of a high-rank transmission. n_ID decorrelates neighbouring cells — and the condition on it is the reason initial-access PDSCH always uses the cell identity.
Read the n_ID condition again, because it is a genuine trap. dataScramblingIdentityPDSCH applies only to PDSCH scheduled with a UE-specific RNTI and not by a fallback DCI in a common search space. So the same UE in the same cell uses two different scrambling identities depending on which DCI scheduled the PDSCH: the configured one for its normal DCI 1_1 grants, and N_ID_cell for anything scheduled by DCI 1_0 from the common search space. An implementation that caches the identity per UE rather than deriving it per grant works perfectly until the first fallback grant, and then fails exactly one PDSCH in a way that looks random.
5.3 Modulation
The scrambled bits are mapped to modulation symbols TS 38.211 cl. 7.3.1.2, cl. 5.1. NR downlink supports five constellations, and the highest of them arrived in Rel-17:
| Modulation | Q_m | Bits per RE | Highest efficiency in an MCS table | Introduced | Practical use |
|---|---|---|---|---|---|
| QPSK | 2 | 2 | 1.3262 bits/RE (MCS 9, table 1) | Rel-15 | Cell edge, all fallback and initial-access PDSCH, and every PDCCH and PBCH ever transmitted |
| 16QAM | 4 | 4 | 2.5703 bits/RE (MCS 16, table 1) | Rel-15 | The mid-cell workhorse |
| 64QAM | 6 | 6 | 5.5547 bits/RE (MCS 28, table 1) | Rel-15 | Good conditions; the top of the Rel-15 baseline table |
| 256QAM | 8 | 8 | 7.4063 bits/RE (MCS 27, table 2) | Rel-15 | Requires mcs-Table = qam256 and the matching UE capability; commonplace on FR1 macro cells |
| 1024QAM | 10 | 10 | 9.2578 bits/RE (table 4) | Rel-17 | FR1 only, and realistically only in small cells or fixed-wireless installations with near-line-of-sight geometry |
Table 6. Downlink modulation orders. The middle column is the ceiling; the fourth is what the tables actually reach, which is lower because no MCS entry uses code rate 1. Note that the efficiency ladder is roughly linear in modulation order while the SINR requirement grows about 6 dB per step — see the next figure.
This figure also explains why PDCCH and PBCH are QPSK and only QPSK. Both would need a channel-quality feedback loop to use anything higher, and neither has one: PDCCH is the thing that carries the feedback loop's commands, and PBCH is transmitted before the UE exists as far as the gNB is concerned. Choosing a modulation order you cannot adapt means choosing the one that works at the worst SINR you intend to serve, and that is QPSK.
5.4 Layer mapping and precoding
The modulation symbols are distributed across up to eight spatial layers cl. 7.3.1.3, round-robin symbol by symbol, so layer quality differences average out across the codeword. One codeword feeds up to four layers; five to eight use two codewords, which is the only reason two transport blocks per PDSCH exist. Precoding cl. 7.3.1.4 then maps layers to antenna ports, and the downlink precoder is never signalled — the UE does not need it, because the DMRS is precoded with the same matrix. That single fact is what makes NR downlink MIMO transparent to the UE.
6. PDSCH: Resource Mapping and Frequency-Domain Allocation
6.1 Question 3: mapping to resource elements
Mapping is frequency-first, then time TS 38.211 cl. 7.3.1.6: fill the lowest allocated subcarrier of the lowest allocated PRB in the first allocated symbol, work upwards in frequency, then move to the next symbol. Skip every resource element that is already taken. The list of things that can take one is longer than people expect:
| What is skipped | Configured by | Typical cost | Counted in the TBS formula? |
|---|---|---|---|
| PDSCH DMRS | DMRS-DownlinkConfig — type, additional positions, CDM groups without data | 12–48 RE per PRB over a 14-symbol allocation | Yes — as N_DMRS in N_RE′, and this is exact |
| PT-RS | PTRS-DownlinkConfig, with density driven by the scheduled MCS and bandwidth | 1 RE per PRB per PT-RS symbol; FR2 only in practice | No — absorbed into xOverhead if at all |
| CSI-RS | NZP-CSI-RS-Resource and CSI-IM-Resource | 1–4 RE per PRB on the CSI-RS symbols | No — this is what xOverhead is for |
| The SS/PBCH block | ssb-PositionsInBurst and the SSB frequency position | 240 subcarriers × 4 symbols, wherever the raster puts it | No |
rateMatchPatternToAddModList | An explicit bitmap of PRBs and symbols, per cell or per BWP | Whatever the operator configured — commonly LTE CRS positions in a dynamic-spectrum-sharing deployment | No |
| The CORESET the scheduling PDCCH was in | ControlResourceSet, when the PDSCH overlaps it in time | The CORESET's full footprint in those symbols | No |
Table 7. Everything a PDSCH is mapped around. The right-hand column is the operationally important one: only DMRS is counted exactly. Everything else has to be accounted for through xOverhead, and if it is not, the effective code rate is higher than the MCS table says. §21 works that arithmetic.
xOverhead in PDSCH-ServingCellConfig takes the values xOh6, xOh12, xOh18 or absent (meaning zero), and it is a single per-cell number applied to every grant. It is not measured, it is not per-slot, and it is not adjusted when the CSI-RS occasion is actually in the slot. Setting it to zero in a cell with CSI-RS and PT-RS makes every transport block slightly too large for the resources that actually carry it, which raises the effective code rate by a few percent on every single transmission. The symptom is a BLER floor a little above target that no amount of outer-loop correction removes, because the outer loop compensates by lowering MCS while the overhead error scales with the allocation.
6.2 Frequency allocation type 0: the bitmap
Type 0 allocation TS 38.214 cl. 5.1.2.2.1 hands the scheduler a bitmap, one bit per resource block group. An RBG is 2, 4, 8 or 16 consecutive PRBs, selected by rbg-Size in PDSCH-Config together with the bandwidth part size:
| BWP size (PRB) | RBG size with rbg-Size = config1 | with rbg-Size = config2 | Bitmap width at config1 |
|---|---|---|---|
| 1 – 36 | 2 | 4 | up to 18 bits |
| 37 – 72 | 4 | 8 | up to 18 bits |
| 73 – 144 | 8 | 16 | up to 18 bits |
| 145 – 275 | 16 | 16 | up to 18 bits |
Table 8. RBG size against BWP size TS 38.214 Table 5.1.2.2.1-1. The table is constructed so the bitmap never exceeds 18 bits — the granularity is sacrificed to keep the DCI small, which is why a 275-PRB BWP can only be allocated in 16-PRB lumps.
Type 0 is what makes frequency-selective scheduling possible, and it is the only allocation type that can express a non-contiguous allocation — which is why DFT-s-OFDM PUSCH cannot use it at all (§10).
6.3 Frequency allocation type 1: the RIV
Type 1 cl. 5.1.2.2.2 allocates a single contiguous run of PRBs and encodes it as one integer, the resource indication value. Two numbers — a start and a length — are packed into one field, and the packing is piecewise so that the field is exactly as wide as it needs to be:
Let N = the BWP size in PRB, L = the number of allocated PRB (1..N),
S = the starting PRB (0..N-1), with S + L <= N.
if (L - 1) <= floor(N / 2):
RIV = N * (L - 1) + S
else:
RIV = N * (N - L + 1) + (N - 1 - S)
Field width = ceil( log2( N * (N + 1) / 2 ) ) bitsListing 2. The RIV encoding for allocation type 1. The second branch reverses the start index, which is what lets the two branches share a codespace without collision — exactly the same trick the SLIV encoding uses in the time domain, and for the same reason. See the companion 32 SLIV and Time Domain Allocation §3.
RIV worked both ways, N = 106 (a 40 MHz FR1 BWP at 30 kHz).
Encode an allocation of L = 50 PRB starting at S = 20:
L − 1 = 49 ≤ ⌊106/2⌋ = 53, so the first branch applies
RIV = 106 × 49 + 20 = 5194 + 20 = 5214
Field width = ⌈log₂(106 × 107 / 2)⌉ = ⌈log₂ 5671⌉ = 13 bits
Decode RIV = 8000 in the same BWP:
⌊8000 / 106⌋ = 75, remainder 50. Try the first branch: L − 1 = 75, so L = 76, and 75 > 53 — the first branch does not apply.
Second branch: N − L + 1 = 75 → L = 106 − 75 + 1 = 32; N − 1 − S = 50 → S = 105 − 50 = 55.
Check: 32 − 1 = 31 ≤ 53? Yes — but the encoder would have used the first branch for L = 32. So RIV 8000 is not a legal codepoint for N = 106.
That last line is the useful one. The RIV space is sparse: 5671 legal values in a 13-bit field with 8192 codepoints, so 31 % of RIV values are invalid. A UE receiving one must treat the DCI as an error, and a gNB emitting one has a scheduler bug — which is exactly what a sprinkling of "invalid resource allocation" rejections in a UE-side log means.
6.4 Mapping type A and mapping type B in one paragraph
In the time domain, PDSCH is either mapping type A — the allocation starts at symbol 0, 1, 2 or 3 and the DMRS sits at a fixed symbol relative to the slot boundary — or mapping type B, where the allocation can start at almost any symbol and the DMRS sits at the first symbol of the allocation. Type A is slot-based scheduling; type B is the mini-slot mechanism behind low-latency scheduling. The start-and-length encoding, the valid combinations and the interaction with the TDD pattern belong to the companion 32 SLIV and Time Domain Allocation; the DMRS position that follows from the mapping type belongs to 33 DMRS.
7. PDCCH: the Channel With No Feedback Loop
The Physical Downlink Control Channel carries downlink control information and nothing else. No transport channel sits above it. DCI is created by the scheduler, which is part of the gNB's MAC, and handed straight to the physical layer — there is no logical channel, no RLC entity, no MAC PDU and no LCID. The companion 06 Channel Mapping catalogues the DCI formats and their fields; this section covers what happens to a DCI payload after the scheduler has assembled it.
7.1 Question 1: what it carries
| DCI carries | Payload size | Why the size matters here |
|---|---|---|
| Downlink assignments — formats 1_0, 1_1, 1_2 | ≈ 30–70 bits depending on format, BWP size and configuration | Polar's performance and the achievable code rate both depend on the payload, and the set of distinct sizes the UE must try is capped at four (§8) |
| Uplink grants — formats 0_0, 0_1, 0_2 | ≈ 30–70 bits | Same. Formats 0_x and 1_x are deliberately size-aligned where possible so they share a decode attempt. |
| Group-common information — slot format (2_0), pre-emption (2_1), TPC (2_2), SRS requests (2_3), cancellation (2_4) | 2–128 bits | All in a common search space; one decode serves every UE monitoring it |
Paging and system information scheduling — format 1_0 with P-RNTI or SI-RNTI | as format 1_0 | The RNTI is the only difference; the coding chain is identical |
Table 9. What rides on PDCCH. Every one of these goes through the same coding chain with the same code, the same CRC and the same modulation. Only the payload length and the RNTI differ.
A DCI payload is padded with zeros to its format's size before encoding, and for the fallback formats 0_0 and 1_0 there is an extra alignment step: if format 0_0 would be shorter than format 1_0, it is zero-padded up; if longer, the frequency-allocation field is truncated. This is not cosmetic — it is what lets the UE decode both formats in one blind-decode attempt per candidate, halving the search cost. The companion 31 PDCCH Blind Decoding §9 owns the size-budget arithmetic.
7.2 Question 2: the coding chain, and the CRC that addresses
Four things about this chain are worth stating carefully, because each of them is a place where PDCCH differs from everything else in the system.
The RNTI is scrambled into the CRC
A 24-bit CRC (CRC24C) is computed over the padded DCI payload, and then the last 16 bits of that CRC are XORed with the 16-bit RNTI TS 38.212 cl. 7.3.2. There is no addressee field anywhere in a DCI. The address is the CRC, and it is checked by the same operation that checks for errors:
Transmitter: p'[8..23] = p[8..23] XOR rnti[0..15]
Receiver: for each candidate decode, recompute the CRC over the
decoded payload, XOR the UE's own RNTI into the last 16
bits, and compare. A match means BOTH "no residual
errors" AND "addressed to me".Listing 3. One 24-bit check doing two jobs. The elegance is real and so is the cost: the two failure modes are indistinguishable. A CRC mismatch means either the DCI was corrupted or it was for somebody else, and the UE cannot tell which — which is precisely why a missed PDCCH is silent.
This is the mechanism behind the most useful diagnostic trick in the whole of PDCCH debugging. If you have a grid dump and you suspect a PDCCH was transmitted but not received, you can test candidate RNTIs: decode the candidate, then try masking with each RNTI you know is active in the cell. Whichever one makes the CRC pass is the addressee. The companion 31 PDCCH Blind Decoding §12 covers the false-alarm rate that this same property creates — with 2⁻²⁴ per attempt and thousands of attempts per second, spurious passes are not hypothetical.
Polar, not LDPC
The payload plus its CRC — between about 36 and 164 bits — is encoded with a Polar code TS 38.212 cl. 5.3.1. Before encoding, the bits pass through an interleaver that distributes the CRC bits rather than leaving them trailing, which is what lets a successive-cancellation list decoder use the CRC as a selection criterion rather than only as a final check. §17.3 covers why Polar and not LDPC.
Rate matching to an integer number of CCEs
The Polar codeword is rate matched to exactly E bits, where E is set by the aggregation level and nothing else. One REG is one PRB in one OFDM symbol: 12 resource elements, of which 3 are PDCCH DMRS, leaving 9 for data. One CCE is 6 REGs: 54 data resource elements. QPSK gives 2 bits per RE, so:
E = 54 REs/CCE x 2 bits/RE x AL = 108 x AL bits AL 1 -> 108 coded bits AL 8 -> 864 coded bits AL 2 -> 216 coded bits AL 16 -> 1728 coded bits AL 4 -> 432 coded bits
Listing 4. The entire rate-control mechanism of PDCCH, in five values. There is nothing between AL 4 and AL 8, and nothing above AL 16 — so the granularity of PDCCH link adaptation is a factor of two, against the roughly 0.5 dB steps a PDSCH MCS table offers.
QPSK, always
PDCCH is modulated with QPSK and only QPSK TS 38.211 cl. 7.3.2.4. The reason is structural rather than conservative: there is no channel feedback loop for control. The CSI reporting framework produces CQI describing a hypothetical PDSCH, measured on CSI-RS, at a PDSCH-like code rate; nothing in it describes what a UE can decode in a CORESET, and there is no PDCCH-ACK for an outer loop to integrate. A gNB choosing 16QAM for PDCCH would be guessing, and the penalty for guessing wrong is not a retransmission — it is a UE that never learns it was scheduled. So the modulation is fixed at the one that works worst-case, and all the adaptation there is lives in the aggregation level.
The gNB is not completely blind: reported CQI says something about the channel, and DTX says a PDCCH was probably missed, and most schedulers use both — a CQI-driven aggregation level with a DTX-driven bump upwards. But neither is a measurement of PDCCH decodability, and the second only fires after the failure. The companion 34 Link Adaptation §11 covers what happens when DTX is fed into the PDSCH outer loop instead: a PDCCH problem converted into a link-adaptation problem, which is a common misdiagnosis.
7.3 Questions 3 and 4, deferred with a summary
PDCCH's mapping and discovery own documents of their own. The summary: coded bits go to the CCEs of one CORESET — a configured set of PRBs and 1 to 3 symbols — with the CCE-to-REG mapping either non-interleaved or interleaved for frequency diversity; and the UE finds its DCI by trying candidates derived from a hashing function over those CCEs, at each configured aggregation level, in each monitoring occasion of each search space. The companion 30 CORESET and Search Space owns the structure; 31 PDCCH Blind Decoding owns the candidate arithmetic, the budgets and the overbooking rules.
8. PDCCH: Aggregation Levels and the Code Rates They Buy
Since aggregation level is the only rate control PDCCH has, it is worth seeing exactly what it buys. Take a realistic DCI format 1_1 payload of 45 bits — a 100-PRB BWP, type 1 frequency allocation, one codeword, up to 4 layers — so K = 45 + 24 = 69 bits after CRC:
| AL | CCEs | REGs | Data REs | Coded bits E | Code rate for K = 69 | Coding gain over AL 1 | What it is for |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 6 | 54 | 108 | 0.639 | — | A UE with an excellent channel, or a small DCI in a lightly loaded cell. Cheapest possible. |
| 2 | 2 | 12 | 108 | 216 | 0.319 | 3.0 dB | The commonest choice in mid-cell conditions |
| 4 | 4 | 24 | 216 | 432 | 0.160 | 6.0 dB | Cell edge, and the usual default for a UE whose channel is unknown |
| 8 | 8 | 48 | 432 | 864 | 0.080 | 9.0 dB | Deep cell edge, initial access, or after a DTX-driven escalation |
| 16 | 16 | 96 | 864 | 1728 | 0.040 | 12.0 dB | The floor of coverage. Sixteen CCEs is a large fraction of a typical CORESET — often the whole of CORESET#0. |
Table 10. What each aggregation level costs and buys, for a 45-bit DCI. The coding-gain column is the theoretical repetition gain (10·log₁₀ of the bit ratio) and is an upper bound: real Polar gain flattens at very low rates because the mother code is capped at N = 512 and everything below that rate is repetition.
Two aggregation levels, worked properly. Same 45-bit DCI, K = 69.
AL 2. E = 216. Polar mother code size from TS 38.212 cl. 5.3.1: ⌈log₂ 216⌉ = 8, and the condition E ≤ (9/8)·2⁷ = 144 fails, so n₁ = 8; n₂ = ⌈log₂(K / R_min)⌉ = ⌈log₂(69 × 8)⌉ = ⌈log₂ 552⌉ = 10; n = max(min(8, 10, 9), 5) = 8, so N = 256.
E = 216 < N = 256 → the codeword is punctured by 40 bits.
Effective code rate = 69 / 216 = 0.319.
AL 8. E = 864. ⌈log₂ 864⌉ = 10, capped by n_max = 9, so N = 512.
E = 864 > N = 512 → the codeword is repeated: 352 of the 512 bits are sent twice.
Effective code rate = 69 / 864 = 0.080.
The important consequence. From AL 8 to AL 16 the bit count doubles again — E = 1728 against the same N = 512 mother code, so every bit is sent at least three times and 192 of them four times. That is pure repetition gain, about 3 dB, with no additional coding gain at all. AL 16 is worth roughly 3 dB over AL 8, not the 3 dB of coding gain the bit ratio suggests plus a coding bonus — the Polar code has run out of mother codeword to give.
That last point is easy to miss and it has a practical edge. Escalating from AL 8 to AL 16 doubles the CCE consumption — often consuming an entire CORESET for one UE — in exchange for about 3 dB. If a UE needs more than AL 8 there is usually a better answer available: PDCCH repetition across two linked candidates (Rel-17), a beam change, or accepting that the UE is out of coverage and letting radio link monitoring handle it. The companion 16 RLM and RLF owns that last path.
9. PBCH: the Channel Nobody Schedules
The Physical Broadcast Channel carries the BCH transport channel, and BCH carries exactly one thing: the MIB. Nothing else has ever ridden on it and nothing else ever will, because PBCH's size is fixed at 32 payload bits by the specification and there is no mechanism to change it. Every other system information message travels on PDSCH.
9.1 Questions 1 and 2: 32 bits, and what happens to them
| Stage | Bits | Clause | Detail |
|---|---|---|---|
| MIB from RRC | 24 | TS 38.331 BCCH-BCH-Message | 23 bits of MIB plus the one-bit BCCH-BCH-MessageType choice. Contents — systemFrameNumber (6 of the 10 SFN bits), subCarrierSpacingCommon, ssb-SubcarrierOffset, dmrs-TypeA-Position, pdcch-ConfigSIB1, cellBarred, intraFreqReselection, spare — belong to the companion 18 MIB and SIB1 IEs. |
| PHY-generated additions | +8 | TS 38.212 cl. 7.1.1 | The 4 least significant bits of the SFN, the half-frame bit, and either the 3 most significant bits of the SSB index (when L_max = 64) or one bit of ssb-SubcarrierOffset plus 2 spare bits. These bits exist only on the air — RRC never sees them. |
| Payload interleaving and first scrambling | 32 | cl. 7.1.1, 7.1.2 | Scrambled with a sequence initialised from N_ID_cell, with a sequence offset selected by two bits of the SFN — so identical MIB content produces four different payloads across a 40 ms window. The bits the UE can already infer from the SSB it just found are left unscrambled, because scrambling them with a sequence keyed on themselves would be circular. |
| CRC24C | +24 = 56 | cl. 7.1.3 | A full 24-bit CRC on a 32-bit payload — 43 % overhead, and it is the correct choice, because a false MIB accept is catastrophic and there is no higher layer to catch it. |
| Polar encoding | 512 | cl. 7.1.4, cl. 5.3.1 | K = 56, N = 512, always. No adaptation, no format variants. |
| Rate matching | 864 | cl. 7.1.5 | E = 864, always. The codeword is repeated — 352 of the 512 bits are sent twice. |
| Second scrambling | 864 | TS 38.211 cl. 7.3.3.1 | Sequence initialised from N_ID_cell, offset selected by the 2 or 3 least significant bits of the SSB index. This is what makes each SSB in the burst distinguishable. |
| QPSK | 432 symbols | TS 38.211 cl. 7.3.3.2 | Mapped into the SSB's PBCH resource elements |
Table 11. Every step, with the bit count carried through. The effective code rate is 56 / 864 = 0.065 — fifteen times more coded bits than information bits, which is the lowest rate anything in NR is ever transmitted at, and it is fixed.
Notice that PBCH is scrambled twice, with two different keys, for two different reasons. The first scrambling is keyed on the SFN, so a UE that has combined several PBCH receptions across a 40 ms period gets a different descrambling for each and can therefore work out which 40 ms window it is in. The second is keyed on the SSB index, so a UE receiving PBCH from two different beams of the same cell can tell them apart — and, crucially, can combine repetitions of the same beam while rejecting the others. The two scramblings together are how a UE derives timing it was never explicitly told.
9.2 Question 3: mapping into the SSB
9.3 Question 4: how the receiver knows it is there — and does not
There is no grant, no search space, no monitoring occasion and no configuration. The UE finds PSS by correlating against three known sequences at every candidate position on the synchronisation raster; PSS gives it symbol timing and one third of the cell identity; SSS, at a fixed offset from PSS, gives the rest; and PBCH is then at a known position relative to PSS. The candidate SSB positions within a half-frame follow the SSB case (A to E) implied by the band and subcarrier spacing — the companion 02 Radio Frame Structure owns the raster, the cases and the burst-set structure.
PBCH demodulates against PBCH DMRS, which is one resource element in four with a frequency shift v = N_ID_cell mod 4 — so the DMRS position itself carries two bits of cell identity, and a UE that has SSS has everything it needs to generate the sequence. See the companion 33 DMRS §15.
9.4 What the absence of scheduling costs
| Adaptation mechanism | Available to PDSCH | Available to PBCH | Consequence |
|---|---|---|---|
| Modulation choice | 5 options | None — QPSK | PBCH is transmitted at the modulation for the worst UE in the cell, always, including to the UE standing under the antenna |
| Code rate choice | 29 MCS indices | None — 0.065, fixed | The 15× redundancy is paid for on every SSB in every burst, forever |
| Bandwidth choice | 1–275 PRB | None — 20 PRB | PBCH cannot be widened for coverage; the only lever is beam gain |
| HARQ | Up to 16 processes with incremental redundancy | None whatsoever | A failed PBCH is simply failed. The UE waits for the next burst — 5, 10, 20, 40, 80 or 160 ms. |
| Beamforming | Per-UE precoding | Per-SSB beam sweep | This is PBCH's only adaptation: the burst sweeps beams, and a UE in one beam's coverage gets that beam's gain |
Table 12. PBCH against PDSCH, adaptation mechanism by adaptation mechanism. The bottom row is the exception that makes the rest tolerable: an SSB burst is a beam sweep, and beam gain in FR2 is worth 15–25 dB, which is a great deal more than any coding choice would have been.
The price of PBCH's rigidity is paid in overhead on every cell in the network, forever. An 8-beam FR1 burst at 20 ms periodicity occupies 8 × 4 = 32 symbols and 20 PRB every 20 ms. Against a 100-PRB carrier at 30 kHz — 40 slots of 14 symbols and 100 PRB in 20 ms — that is 32 × 20 / (560 × 100) = 1.14 % of the entire cell's resources, carrying 24 bits of RRC content per SSB. It is the least efficient transmission in the system by four orders of magnitude, and it is correct, because it is the transmission that makes every other transmission possible.
10. PUSCH: the Same Machinery, Two Waveforms
The Physical Uplink Shared Channel carries UL-SCH, and it may also carry UCI multiplexed alongside the transport block. Its coding chain is the downlink chain of §4 and §5 with the clause numbers changed — same CRC rule, same base graph rule, same segmentation, same LDPC, same circular buffer, same interleaver, same scrambling structure TS 38.212 cl. 6.2. The differences are all downstream of the encoder, and they exist for one reason: the transmitter is battery powered and its power amplifier is small.
10.1 The one structural difference: waveform
PUSCH can be transmitted as CP-OFDM, exactly like the downlink, or as DFT-s-OFDM, in which the modulation symbols are passed through a DFT of the allocation's width before the IFFT. The second is what LTE called SC-FDMA. Selection is by transformPrecoder in PUSCH-Config (enabled / disabled, absent meaning disabled), or by msg3-transformPrecoder in RACH-ConfigCommon for the Msg3 PUSCH that precedes any dedicated configuration.
| CP-OFDM | DFT-s-OFDM (transform precoding enabled) | |
|---|---|---|
| What it is | The downlink waveform, used in reverse | One extra DFT across the allocated subcarriers before the IFFT, spreading each modulation symbol across the whole allocation |
| PAPR / cubic metric | High — 8–9 dB PAPR typical for QPSK | 2–3 dB lower, and lower still with π/2-BPSK. That is 2–3 dB of transmit power the UE gets back at the point where it is power-limited. |
| Frequency allocation | Type 0 (bitmap) or type 1 (contiguous) | Type 1 only. The DFT is over one contiguous block; a bitmap allocation is meaningless. |
| Frequency-selective scheduling within the allocation | Yes | No. Every modulation symbol is spread across every allocated subcarrier, so a deep notch in the allocation damages every symbol equally instead of a few of them. |
| Spatial layers | Up to 4 (Rel-15/16), 4 with 8 Tx in Rel-18 | One layer only. No spatial multiplexing. |
| Modulation set | QPSK, 16QAM, 64QAM, 256QAM | π/2-BPSK (if tp-pi2BPSK is configured), QPSK, 16QAM, 64QAM, 256QAM |
| DMRS | Type 1 or type 2, with the full CDM machinery | Type 1 only, and the sequences are low-PAPR sequences rather than the Gold-sequence-derived ones — see the companion 33 DMRS §14 |
| When you want it | Anywhere the UE has power headroom: mid-cell and cell-centre, and anywhere MIMO is worth having | The cell edge, and any coverage-limited deployment. Also the default for Msg3 in many configurations. |
Table 13. The waveform trade in full. Rows three, four and five are the price: DFT-s-OFDM buys 2–3 dB of link budget by giving up non-contiguous allocation, intra-allocation frequency selectivity and MIMO entirely.
The trade only makes sense where it is offered. At the cell edge the UE is power-limited, so 2–3 dB of PAPR headroom converts directly into 2–3 dB of received SINR — and a UE at the edge has rank 1 anyway and is allocated a narrow contiguous block anyway, so the three things it gave up were things it did not have. At the cell centre the UE is not power-limited, the 2–3 dB is worth nothing, and the lost MIMO is worth a factor of two or four. transformPrecoder is therefore a coverage-versus-capacity switch, and it is semi-static — it cannot be changed per grant, only by reconfiguration or a BWP switch.
A cell configured with transformPrecoder = enabled on the only uplink BWP will show a uniform, unremarkable-looking uplink: healthy PUSCH BLER, sensible MCS distribution, decent edge coverage — and uplink peak throughput capped at roughly a quarter of what the hardware can do, because no UE anywhere in the cell will ever use more than one layer. The fingerprint is a maximum observed uplink layer count of exactly 1 across every UE in the cell, including UEs reporting excellent power headroom. Check transformPrecoder before concluding that the UEs do not support uplink MIMO.
11. PUSCH: Precoding, Hopping, and What Else Rides On It
11.1 Codebook and non-codebook transmission
With CP-OFDM and more than one antenna, the UE has to know which precoder to apply. NR offers two answers, selected by txConfig in PUSCH-Config:
| codebook | nonCodebook | |
|---|---|---|
| Who chooses the precoder | The gNB | The UE, from a downlink measurement |
| What the DCI carries | An SRI selecting an SRS resource (hence a beam), plus a TPMI selecting a precoder from the configured codebook, plus a rank | An SRI selecting one or more SRS resources; each selected resource is a precoder the UE already applied when it sent that SRS |
SRS usage value | codebook — one SRS resource per antenna port | nonCodebook — up to 4 resources, each a candidate precoder |
| Codebook restriction | codebookSubset: fullyAndPartialAndNonCoherent, partialAndNonCoherent or nonCoherent, bounded by the UE's coherence capability | None |
| Requires downlink/uplink reciprocity | No | Yes — the UE derives its precoder from associatedCSI-RS, which only works if the two directions are reciprocal, so in practice TDD only |
| Where it fits | FDD, and any TDD deployment where the gNB does not trust reciprocity | TDD with a well-calibrated array; the usual choice for higher-order uplink MIMO |
Table 14. txConfig decides who owns the uplink precoder. In both cases the evidence is SRS — the difference is which end draws the conclusion from it. Note that non-codebook mode makes the uplink precoder depend on a downlink measurement, which is why a stale associatedCSI-RS shows up as an uplink problem.
11.2 Frequency hopping
PUSCH may hop in frequency, either inter-slot (each slot's allocation sits at a different offset) or intra-slot (the allocation splits in two halves at different offsets within one slot). frequencyHopping in PUSCH-Config selects the mode and frequencyHoppingOffsetLists gives one, two or four candidate offsets, of which the DCI selects one. The second hop starts at (RB_start + RB_offset) mod N_BWP.
Hopping is a diversity mechanism, and it is worth being clear about what it does and does not do. It does not improve the average SINR. What it does is guarantee that a UE with a narrow allocation and no channel knowledge is not parked in a fade for the whole transmission — which matters enormously for the one PUSCH nobody has any channel knowledge about, Msg3, and for repetition-based coverage enhancement where the whole point is to accumulate energy across independent channel realisations. On a wide allocation it is close to pointless, because the allocation already spans several coherence bandwidths.
11.3 UCI multiplexed onto PUSCH, and the beta offsets
If a UE has UCI to send in a slot where it also has a PUSCH, it normally does not send both — it multiplexes the UCI into the PUSCH TS 38.213 cl. 9.2.5. HARQ-ACK of one or two bits punctures the PUSCH: it overwrites resource elements the transport block was going to use, and the transport block is not told. Anything larger is rate-matched around: the UCI's resource elements are excluded from the PUSCH mapping, and the transport block's rate matching accounts for them.
How many resource elements the UCI takes is decided by the beta offsets, and the mechanism is worth understanding because it is the one place where a configuration value directly trades control reliability against data throughput:
For HARQ-ACK on PUSCH (TS 38.212 cl. 6.3.2.4.1.1), the number of
coded modulation symbols Q'_ACK is
(O_ACK + L_ACK) * beta_offset^HARQ-ACK * sum(M_sc)
Q'_ACK = min( ceil( --------------------------------------------- ),
R * Q_m * sum(M_sc,all)
ceil( alpha * sum(M_sc,all) ) )
O_ACK HARQ-ACK payload bits
L_ACK its CRC (0, 6 or 11 bits by payload size)
beta_offset from betaOffsetACK-Index1/2/3 in UCI-OnPUSCH
R, Q_m the PUSCH's own code rate and modulation order
alpha scaling, one of 0.5, 0.65, 0.8, 1.0 -- a hard ceiling
on the fraction of the PUSCH the UCI may consumeListing 5. Read the numerator: the UCI's resource cost scales with the PUSCH's own code rate and modulation order. A UCI carried on a 256QAM PUSCH at R = 0.8 gets fewer resource elements than the same UCI on a QPSK PUSCH at R = 0.2, because the beta offset expresses a target relative to the data — the intent being that UCI is always some fixed factor more reliable than the transport block it rides with.
| Field in UCI-OnPUSCH | What it scales | Index range | What happens if it is too small |
|---|---|---|---|
betaOffsetACK-Index1 | HARQ-ACK of up to 2 bits | 0 … 31 | The ACK is carried on too few REs and the gNB mis-decodes it. A mis-decoded ACK is worse than a missing one: it can be read as an ACK for a block that failed, which loses the block permanently and hands it to RLC. |
betaOffsetACK-Index2 / -Index3 | HARQ-ACK of 3–11 bits, and of more than 11 bits | 0 … 31 | As above. -Index2 covers the range a carrier-aggregation codebook usually lands in. |
betaOffsetCSI-Part1-Index1/2 | CSI part 1 | 0 … 31 | The CSI report is mis-decoded, and the inner link-adaptation loop runs on a corrupt CQI |
betaOffsetCSI-Part2-Index1/2 | CSI part 2 | 0 … 31 | Part 2 is the omittable part. If the resources do not stretch, the UE drops part 2 progressively TS 38.212 cl. 6.3.2.1.2 — legally, silently, and the gNB gets a subband report with subbands missing. |
scaling (α) | A ceiling on the whole UCI allocation | f0p5, f0p65, f0p8, f1 | With α = 0.5 the UCI can never take more than half the PUSCH, no matter what the beta offsets say. This is the protection against a large UCI starving the transport block entirely. |
Table 15. UCI-OnPUSCH field by field. The betaOffsets choice can be semiStatic (one set) or dynamic (four sets, with a 2-bit DCI field selecting one) — the dynamic form lets a scheduler raise UCI reliability for the grants where it matters.
The CSI part 2 omission rule in the fifth row is one of the most confusing behaviours in the uplink, because nothing fails. The UE computes how many resource elements the full report needs, finds it exceeds what the beta offset and α allow, and drops part 2 subband information one priority level at a time until it fits. The PUSCH decodes, the CRC passes, the part 1 report is perfect, and the subband CQI the scheduler was relying on for frequency-selective scheduling is simply not there. Look for CSI reports whose part 2 content varies with the PUSCH allocation size rather than with anything about the radio channel.
11.4 What else PUSCH carries
Two more things ride on PUSCH and are easy to forget. Msg3 is a PUSCH, scheduled by the RAR's uplink grant, with no CSI, no SRS, no outer loop and often a different waveform from every other PUSCH in the cell — the companion 03 Random Access owns it. And MsgA PUSCH, the Rel-16 two-step payload, is transmitted on a configured occasion with no grant at all: the only ungranted PUSCH in the system. The MAC control elements inside a normal transport block belong to the companion 10 BSR, PHR and SR.
12. PUCCH: Why There Have To Be Five Formats
The Physical Uplink Control Channel carries uplink control information and nothing else: HARQ-ACK, scheduling requests, and CSI reports. Like PDCCH it has no transport channel above it. Unlike every other physical channel, it has five mutually incompatible formats, and the reason is a two-dimensional problem that no single design covers.
Dimension one is payload. A HARQ-ACK for a single PDSCH is one bit. A Type-1 HARQ-ACK codebook across eight carriers with code-block-group feedback can exceed a hundred. A Type II CSI report with subband information can exceed four hundred. That is a range of nearly three orders of magnitude.
Dimension two is coverage. The UE sending that one bit might be under the antenna with 20 dB of power headroom, or at the cell edge transmitting at maximum power into a 130 dB path loss. A design that reaches the edge must spend many symbols accumulating energy; a design that serves the cell centre should spend as few as possible so the resource can be reused.
No one structure spans both. So NR has five, and each is the answer to one corner of the space:
| Format 0 | Format 1 | Format 2 | Format 3 | Format 4 | |
|---|---|---|---|---|---|
| Symbols | 1 or 2 | 4 to 14 | 1 or 2 | 4 to 14 | 4 to 14 |
| PRBs | 1 | 1 | 1 to 16 | 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15 or 16 | 1 |
| Payload (UCI bits) | 1 or 2 | 1 or 2 | more than 2 | more than 2, up to a few hundred | more than 2, moderate |
| Waveform | sequence only | CP-OFDM | CP-OFDM | DFT-s-OFDM | DFT-s-OFDM |
| Coding | none — sequence selection | BPSK or QPSK, then spreading, no channel code | Reed–Muller (≤ 11 bits) or Polar (> 11) | Reed–Muller or Polar | Reed–Muller or Polar |
| DMRS | none | alternate symbols — half the format | subcarriers 1, 4, 7, 10 of every PRB — a quarter of the REs | 2 or 4 dedicated symbols | 2 or 4 dedicated symbols |
| Multiplexing capacity per PRB | up to 6 UEs (12 cyclic shifts, 2 or 3 per UE) | up to 84 (12 cyclic shifts × 7 time-domain OCC at 14 symbols) | 1 | 1 | 2 or 4, by occ-Length |
| Frequency hopping | intra-slot | intra-slot or inter-slot | intra-slot | intra-slot or inter-slot | intra-slot or inter-slot |
| Use case | One ACK or an SR, cell centre, cheapest possible | One or two ACKs at the cell edge, with many UEs sharing the PRB | A CSI report or a multi-carrier ACK codebook, cell centre | A large CSI report or a large ACK codebook at the edge | A moderate payload at the edge where PRBs are scarce and UEs are many |
Table 16. The five formats, compared on every axis that matters. Read the multiplexing capacity row against the payload row and the design becomes obvious: capacity and payload are in direct opposition, and the formats are five points on that curve. Format 1 gets 84 UEs into one PRB by giving each of them two bits; format 3 gives one UE several hundred bits by giving it the whole resource.
13. PUCCH Format 0: Saying Something Without Coding It
Format 0 deserves its own section because it works in a way nothing else in NR does. There is no channel code, no CRC, no modulation of a payload, and no DMRS. The UE transmits a cyclic shift of a known base sequence, and the information is which shift it chose.
The base sequence is a length-12 low-PAPR sequence occupying the 12 subcarriers of one PRB. Applying a cyclic shift in the frequency domain is a phase ramp; twelve shifts are available and they are mutually orthogonal. The UE's starting shift comes from initialCyclicShift in its PUCCH resource, and it adds an offset determined by the payload TS 38.213 cl. 9.2.3:
| Payload | Shift offset added to initialCyclicShift | Meaning |
|---|---|---|
| 1 bit | 0 for NACK, 6 for ACK | Two shifts, maximally separated in the twelve-shift space |
| 2 bits | 0, 3, 9, 6 for (0,0), (0,1), (1,1), (1,0) | Four shifts, evenly spaced — and note the Gray ordering, so a one-shift detection error costs one bit, not two |
| Positive SR only | 0 | The presence of the sequence is the scheduling request; absence is 'no request' |
| SR multiplexed with a 1-bit ACK | 0 or 3, then 1 or 4 … | The combined table in TS 38.213 cl. 9.2.5.1 assigns a shift to each (ACK, SR) combination |
Table 17. Format 0's payload encoding, in its entirety. The Gray ordering in the second row is the only error-protection measure the format has, and it is a good one: the commonest detection error is off-by-one in shift, and Gray ordering makes that a single-bit error.
The receiver does not demodulate. It correlates the received PRB against each of the candidate shifted sequences and takes the largest peak. That is why format 0 needs no DMRS: the sequence is its own reference signal. A matched filter does not need to know the channel phase, only that the sequence arrived.
This is genuinely unlike anything else in the system and it is worth sitting with. Every other physical channel takes bits, protects them with a code, modulates them onto a carrier and asks the receiver to recover them. Format 0 takes a choice from a small set and encodes it as an identity, in exactly the way PRACH encodes a preamble index and PSS encodes a cell identity third. The result is a control channel with no coding gain, no CRC, no soft information and no way to detect an error — and it works, because with only two or four hypotheses and a matched filter over twelve subcarriers, the detection problem is easy enough that none of that machinery is needed.
| Format 0 (sequence selection) | Format 2 (coded, 2 bits of payload) | |
|---|---|---|
| Resources | 1 PRB, 1–2 symbols | 1 PRB, 1–2 symbols (but format 2 is not permitted below 3 bits) |
| Receiver operation | Correlate against 2 or 4 hypotheses, pick the peak | Estimate the channel from DMRS, equalise, demodulate, decode, check the CRC |
| Soft information available | The correlation peak ratio, which is a usable confidence metric | LLRs and a CRC |
| Error detection | None. A wrong peak is indistinguishable from a right one. | The CRC, for payloads above 11 bits |
| Failure mode | A silently wrong ACK/NACK — the worst failure in the HARQ system, because an ACK for a failed block loses it permanently | A detected decode failure, which the gNB can treat as DTX |
Table 18. Format 0 against the coded alternative. The bottom row is the cost of the trick: format 0 cannot tell you it got it wrong. This is why many schedulers set the format 0 detection threshold conservatively and treat a marginal peak as DTX rather than as a NACK.
14. PUCCH: Resource Sets and How the UE Picks One
Nobody grants a PUCCH. The UE is configured in advance with up to four PUCCH resource sets, decides which set applies from the size of the UCI payload it has to send, and then picks a resource within that set from a field in the DCI. The whole mechanism is in TS 38.213 cl. 9.2.1 and it runs in this order:
- Count the UCI bits. O_UCI is the total payload — HARQ-ACK bits from the codebook, plus a scheduling request bit if one is pending, plus CSI if it is due in this slot — before any CRC.
- Choose the resource set. Set 0 if O_UCI ≤ 2. Otherwise the first set whose
maxPayloadSizeis at least O_UCI. Set 0 may hold up to 32 resources; sets 1, 2 and 3 hold up to 8 each. - Choose the resource within the set. For sets 1–3, and for set 0 with 8 or fewer resources, the 3-bit PUCCH resource indicator in the scheduling DCI selects it directly. For set 0 with more than 8 resources, the PRI is combined with the CCE index of the PDCCH that scheduled the PDSCH in a formula that spreads UEs across the resources — so the PUCCH position depends on where the grant was found.
- Apply the resource's own configuration. Format, starting PRB, starting symbol, number of symbols,
initialCyclicShiftortimeDomainOCCorocc-Index, and whether intra-slot hopping applies. - Before dedicated configuration exists, use
pucch-ResourceCommonfromServingCellConfigCommoninstead — a 4-bit index into 16 predefined configurations of formats 0 and 1, which is what carries the HARQ-ACK for Msg4 during random access.
| Object | Field | Range | What it decides |
|---|---|---|---|
PUCCH-Config | resourceSetToAddModList | 1 to 4 sets | The payload-size ladder. Fewer sets means coarser matching of format to payload. |
PUCCH-ResourceSet | pucch-ResourceSetId | 0 … 3 | Set 0 is reserved for payloads of 1–2 bits by rule, not by configuration |
PUCCH-ResourceSet | maxPayloadSize | 4 … 256 | The upper payload bound for this set. Absent on the last set, which is then the catch-all. |
PUCCH-ResourceSet | resourceList | up to 32 (set 0) or 8 | Which resources the PRI can select. More than 8 in set 0 triggers the CCE-index formula. |
PUCCH-Resource | format CHOICE | format0 … format4 | The format and its per-format parameters — symbol count, start symbol, PRB count, cyclic shift or OCC |
PUCCH-FormatConfig | maxCodeRate | zeroDot08 … zeroDot80 | The highest code rate the UE may use for formats 2, 3 and 4 — which is what turns a PRB count into a payload capacity (§21) |
PUCCH-FormatConfig | nrofSlots | n1, n2, n4, n8 | PUCCH repetition across slots, for coverage |
PUCCH-FormatConfig | simultaneousHARQ-ACK-CSI | true / absent | Whether an ACK and a CSI report may share one format 2/3/4 resource, or whether the CSI is dropped |
Table 19. PUCCH-Config and its children. maxCodeRate is the field most often left at a vendor default and most often worth checking: it directly bounds how much UCI a given PRB count can carry, and a low value on a set with few PRBs silently forces the UE up to the next set or into dropping CSI.
The CCE-index dependency in step 3 is a real source of confusion when reading logs. With more than 8 resources in set 0, the PUCCH a UE uses for its HARQ-ACK depends on which CCE its PDCCH landed in, which depends on the blind-decode hashing function, which depends on the slot number and the RNTI. So the same UE ACKing the same PDSCH in two different slots legitimately uses two different PUCCH resources. If you are looking for a UE's ACK at a fixed PRB and not finding it, this is usually why. The companion 31 PDCCH Blind Decoding §3 has the candidate-to-CCE mapping you need to predict it.
A PUCCH-ResourceSet list whose maxPayloadSize values do not cover the largest codebook the UE can produce is a configuration that works for months and then fails on the day a second carrier is activated. The UE computes O_UCI, finds no set that accepts it, and the behaviour from there depends on the priority rules — usually CSI is dropped and the HARQ-ACK survives, but with a Type-1 codebook across many carriers the HARQ-ACK alone can exceed the largest set. Compute the worst-case codebook size for the configured carrier set and check it against the last set's maxPayloadSize — see the companions 05 HARQ §9 and 29 Carrier Aggregation.
15. PRACH: the Channel With No Coding At All
The Physical Random Access Channel is included here for one reason: without it the comparison in §16 has a hole in it. The procedure — preamble groups, RA-RNTI derivation, the four-step and two-step variants, preambleTransMax, the backoff, ra-ResponseWindow, the contention resolution — belongs entirely to the companion 03 Random Access, and is not repeated. What belongs here is the encoding and mapping, because PRACH is the one physical channel that does neither in the usual sense.
| The five questions | PRACH's answer |
|---|---|
| What does it carry? | A preamble index, 0 to 63, and nothing else. There is no transport block, no payload and no field structure. Even the index is not transmitted as a number — it selects which sequence is sent. (Two-step RACH adds a MsgA PUSCH alongside, but that is a PUSCH, not part of PRACH.) |
| How is it coded? | It is not. No CRC, no channel code, no rate matching, no scrambling, no modulation of a payload. The transmitted signal is a cyclic shift of a Zadoff–Chu sequence of length 839 (long formats) or 139 (short formats), derived from a root sequence chosen by prach-RootSequenceIndex TS 38.211 cl. 6.3.3.1. |
| How is it mapped to resource elements? | Onto a configured occasion whose time and frequency position comes from prach-ConfigurationIndex, msg1-FrequencyStart and msg1-FDM — at its own subcarrier spacing (1.25 or 5 kHz for long formats, 15 to 120 kHz for short ones), which is the only place in NR where a channel uses a numerology unrelated to the carrier's. |
| How does the receiver know it is there? | It does not. The gNB correlates every configured occasion against all 64 candidate sequences, continuously, whether or not any UE is expected. PRACH detection is the only always-on receive operation in the gNB. |
| What happens when it fails? | Nothing observable at the gNB — an undetected preamble is silence. The UE detects the failure by ra-ResponseWindow expiring, ramps its power by powerRampingStep and retries, up to preambleTransMax. |
Table 20. PRACH through the five-question frame. Every answer is the degenerate case, and that is exactly why it belongs in the comparison: it establishes the floor of what a physical channel can be and still be called one.
The reason PRACH has no coding is the same reason PUCCH format 0 has none, taken to its limit. Coding requires the receiver to know where and when the codeword is, to within a fraction of a symbol. A UE performing initial access knows the downlink timing but has no timing advance at all, so its transmission arrives with an unknown delay of up to twice the propagation time — hundreds of microseconds in a large cell. A Zadoff–Chu sequence with a long cyclic prefix and a guard period tolerates that, because a correlation peak at an unknown position is still a correlation peak, and its position is the measurement the gNB wants — it is how the timing advance in the RAR is produced. See the companion 04 Timing Advance.
16. The Master Comparison
This is the section to come back to. Everything above, condensed to one row per channel. It is split into three tables rather than one because thirteen columns do not fit on a page anybody can read — but the row order is identical in all three, so they read as one table three screens wide.
16.1 Identity: what it is and who it is for
| Channel | Direction | What it carries | Transport channel above | Addressed by |
|---|---|---|---|---|
| PDSCH | Downlink | User data, RRC signalling, system information beyond the MIB, paging records, MAC control elements | DL-SCH, PCH | The RNTI of the scheduling DCI: C-RNTI, CS-RNTI, MCS-C-RNTI, TC-RNTI, SI-RNTI, RA-RNTI, P-RNTI |
| PDCCH | Downlink | DCI only — scheduling assignments, grants, slot format, TPC, pre-emption, cancellation | None | The RNTI, XORed into the last 16 bits of the CRC. There is no addressee field. |
| PBCH | Downlink | The MIB (24 bits) plus 8 PHY-generated bits | BCH | Nobody. It is a cell-wide broadcast; the only identity in it is N_ID_cell in the scrambling. |
| PUSCH | Uplink | User data, RRC signalling, MAC control elements, and UCI when multiplexed | UL-SCH | The RNTI of the granting DCI: C-RNTI, CS-RNTI, MCS-C-RNTI, TC-RNTI, SP-CSI-RNTI for a semi-persistent CSI report |
| PUCCH | Uplink | UCI only — HARQ-ACK, scheduling request, CSI | None | Implicitly, by the resource the UE was configured with. Formats 2/3/4 scramble with C-RNTI; formats 0/1 identify the UE by cyclic shift and OCC. |
| PRACH | Uplink | A preamble index, 0–63 | RACH | Nobody yet — that is the point. The occasion and preamble index together produce the RA-RNTI the response is addressed to. |
Table 21. Identity. The two None entries in the transport-channel column are the structural fact worth memorising: PDCCH and PUCCH are the two channels whose contents were created by the physical layer's own control plane and never passed through MAC as a transport block.
16.2 Coding: how the bits are protected
| Channel | Code | CRC | Modulation set | Scrambling identity | DMRS |
|---|---|---|---|---|---|
| PDSCH | LDPC, BG1 or BG2 by size and rate | CRC24A (A > 3824) or CRC16, plus CRC24B per code block when C > 1 | QPSK, 16QAM, 64QAM, 256QAM, 1024QAM (Rel-17) | dataScramblingIdentityPDSCH (0–1023), or N_ID_cell for fallback and common-search-space grants | Configurable: type 1 or 2, 1–4 additional positions, scramblingID0/1 |
| PDCCH | Polar, N = 32 to 512 | CRC24C, RNTI-masked | QPSK only | pdcch-DMRS-ScramblingID (0–65535) or N_ID_cell | Fixed: 3 REs per REG, subcarriers 1, 5, 9, same scrambling ID |
| PBCH | Polar, K = 56, N = 512, fixed | CRC24C | QPSK only | N_ID_cell only — twice, once keyed on the SFN and once on the SSB index | Fixed: 1 RE in 4, shift v = N_ID_cell mod 4 |
| PUSCH | LDPC, BG1 or BG2 — identical rule to PDSCH | CRC24A or CRC16, plus CRC24B per code block | π/2-BPSK (DFT-s-OFDM only), QPSK, 16QAM, 64QAM, 256QAM. No 1024QAM. | dataScramblingIdentityPUSCH (0–1023) or N_ID_cell | Type 1 or 2 with CP-OFDM; type 1 with low-PAPR sequences under transform precoding |
| PUCCH | Formats 0/1: none. Formats 2/3/4: Reed–Muller (≤ 11 bits) or Polar (> 11). | None below 12 bits; 6-bit CRC for 12–19 bits; 11-bit CRC above | Formats 0/1: sequence and BPSK/QPSK spreading. Formats 2/3/4: QPSK, or π/2-BPSK on 3/4. | dataScramblingIdentityPUSCH or N_ID_cell — PUCCH borrows PUSCH's identity | Format 0: none. Format 1: alternate symbols. Format 2: subcarriers 1, 4, 7, 10. Formats 3/4: 2 or 4 symbols. |
| PRACH | None | None | None — a Zadoff–Chu sequence is transmitted, not a constellation | prach-RootSequenceIndex selects the root; there is no scrambling | None — the preamble is its own reference signal |
Table 22. Coding. Read the CRC column top to bottom and the design philosophy is visible: 24 bits where an undetected error is unrecoverable, 16 where a higher layer will catch it, 6 or 11 where the payload is tiny, and none at all where there is no payload to check.
16.3 Behaviour: footprint, protection, and how it fails
| Channel | Time-frequency footprint | HARQ? | Link-adapted? | Characteristic failure signature |
|---|---|---|---|---|
| PDSCH | 1–14 symbols × 1–275 PRB, anywhere in the DL BWP, contiguous or a resource-block-group bitmap | Yes — up to 16 processes, incremental redundancy, 4 RVs | Fully — 29 MCS indices, 1–8 layers, two closed loops | A NACK. Distinguishing a coding failure from a DMRS failure from a wrong-RV failure is §19.1. |
| PDCCH | 1–3 symbols × AL × 6 PRB, inside one CORESET, contiguous or interleaved REG bundles | No. The grant may be reissued; that is not HARQ. | Barely — 5 aggregation levels, 3 dB apart, on a proxy input | Silence. No DCI decoded, therefore no PDSCH received, therefore no HARQ-ACK sent. The gNB sees DTX and cannot tell why. |
| PBCH | 3 of the SSB's 4 symbols × 20 PRB, at a position fixed by the synchronisation raster | No | Not at all | The UE cannot use the cell. It may still measure and report it — SSS gives RSRP without PBCH — so the cell appears healthy in measurement reports and is never selected or handed over to. |
| PUSCH | 1–14 symbols × 1–275 PRB in the UL BWP; contiguous only under transform precoding | Yes — same process count, no explicit feedback channel; the grant's NDI is the feedback | Fully, on the gNB's own SRS and DMRS measurements | A CRC failure at the gNB with three indistinguishable causes: the UE never got the grant, the UE got it and could not transmit (LBT, power), or the UE transmitted and it did not decode. |
| PUCCH | 1–14 symbols × 1–16 PRB, normally at a band edge; position derived from a configured set | No | Only through nrofSlots repetition and the format choice | A format mismatch produces a decode of the wrong hypothesis. Beta-offset starvation on PUSCH-multiplexed UCI silently drops CSI part 2. |
| PRACH | 1–12 preamble repetitions on a configured occasion, 6 PRB (short formats) at its own subcarrier spacing | No | Power ramping only, which is not link adaptation | Silence at the gNB. The UE times out on ra-ResponseWindow, ramps power and retries. |
Table 23. Behaviour. The two right-hand columns are the payoff of the whole document: the amount of adaptation a channel gets and the clarity of its failure signature move together, and both are set by how the receiver finds it (§2).
Three patterns in these tables are worth naming, because once you see them the whole air interface becomes easier to reason about.
One: the two channels with no transport channel above them are the two with no HARQ. DCI and UCI are the control plane of the physical layer; they cannot be retransmitted because the thing that would schedule the retransmission is what failed.
Two: modulation richness tracks feedback availability exactly. PDSCH has five constellations and two feedback loops. PDCCH and PBCH have one constellation and no loop. PUSCH has four and one loop, on the gNB's own measurements.
Three: every silent failure is on a channel whose CRC the transmitter never sees. A PDSCH failure is announced by a NACK; a PDCCH failure, a PRACH failure and a format 0 misdetection are announced by nothing.
18. Parameter and Configuration Reference
The fields that determine what each physical channel is, as opposed to when it is scheduled. Timing fields — k0, k1, k2, the TDRA tables — belong to the companions 32 SLIV and 05 HARQ; CORESET and search-space fields belong to 30 CORESET and Search Space.
| Field | Object | Range | Typical | What it decides |
|---|---|---|---|---|
dataScramblingIdentityPDSCH | PDSCH-Config | 0 … 1023 | the PCI, or a planned value | The PDSCH scrambling identity for UE-specific grants. A mismatch is a 100 % decode failure (§19.6). |
mcs-Table | PDSCH-Config | qam256 / qam64LowSE / absent | qam256 on FR1 | Which MCS table the 5-bit DCI field indexes |
resourceAllocation | PDSCH-Config | resourceAllocationType0 / Type1 / dynamicSwitch | Type1 | Bitmap, RIV, or a 1-bit DCI field choosing between them |
xOverhead | PDSCH-ServingCellConfig | xOh6 / xOh12 / xOh18 / absent | xOh6 where CSI-RS is dense | The N_oh term in the TBS formula. Zero in a cell with real overhead inflates every effective code rate (§6.1). |
rateMatchPatternToAddModList | ServingCellConfig or PDSCH-Config | up to 4 patterns | absent, or LTE CRS under DSS | Resource elements PDSCH must skip regardless of anything else |
transformPrecoder | PUSCH-Config | enabled / absent | absent on macro FR1 | CP-OFDM or DFT-s-OFDM — the single most consequential uplink field (§10) |
txConfig | PUSCH-Config | codebook / nonCodebook | codebook on FDD | Who computes the uplink precoder (§11.1) |
maxRank | PUSCH-Config | 1 … 4 | 1 or 2 | The uplink layer ceiling. Forced to 1 under transform precoding. |
dataScramblingIdentityPUSCH | PUSCH-Config | 0 … 1023 | the PCI | PUSCH scrambling, and PUCCH format 2/3/4 scrambling |
betaOffsets / scaling | UCI-OnPUSCH | semiStatic or dynamic; α ∈ {0.5, 0.65, 0.8, 1} | semiStatic, α = 1 | How many resource elements multiplexed UCI takes (§11.3) |
resourceSetToAddModList | PUCCH-Config | 1 … 4 sets | 3 or 4 sets | The payload-size ladder that picks a format (§14) |
maxCodeRate | PUCCH-FormatConfig | zeroDot08 … zeroDot80 | zeroDot25 | The PUCCH format 2/3/4 code-rate ceiling, hence the payload a given PRB count can carry (§21.4) |
pucch-ResourceCommon | PUCCH-ConfigCommon | 0 … 15 | 0 … 3 | The pre-dedicated PUCCH configuration used for the Msg4 HARQ-ACK |
prach-RootSequenceIndex | RACH-ConfigCommon | 0 … 837 (L = 839) or 0 … 137 (L = 139) | planned per cell | Which Zadoff–Chu root the 64 preambles are cyclic shifts of |
msg3-transformPrecoder | RACH-ConfigCommon | enabled / absent | enabled in coverage-limited cells | The Msg3 waveform, decided before any dedicated configuration exists |
Table 25. The configuration surface that defines the physical channels. Four fields on this table cause a total failure when mismatched rather than a degradation: the two scrambling identities, transformPrecoder, and the DMRS configuration.
19. Failure Modes and What Each One Means
| # | Failure | Who detects it | What happens | Log signature and how to tell it apart |
|---|---|---|---|---|
| 1 | PDSCH decode failure — coding. The transport block was scheduled above what the channel supported. | The UE, by CRC | NACK on PUCCH or multiplexed in PUSCH; the gNB retransmits with the next RV; up to pdsch-AggregationFactor or the scheduler's retry limit, then RLC ARQ | CRC fail with a plausible LLR distribution and a high scheduled MCS. The distinguishing evidence: the retransmission succeeds. Rate correlates with MCS and with reported CQI. This is normal at the target BLER — roughly one block in ten. |
| 2 | PDSCH decode failure — DMRS. Wrong DMRS type, wrong additional positions, wrong CDM groups, or a scramblingID mismatch. | The UE, by CRC — and it looks identical to #1 | NACK, retransmission, another NACK, RLC recovery, eventually radio link failure | Fails at every MCS, including MCS 0, and the PDCCH that scheduled it decoded perfectly. The MCS-independence is the tell: a coding failure gets better as MCS drops and a DMRS failure does not. See the companion 33 DMRS §20. |
| 3 | PDSCH decode failure — wrong RV or wrong N_DMRS at one end. The two ends disagree about the transport block size or the buffer read position. | The UE, by CRC | NACK, and the retransmission does not help because the soft bits being combined do not correspond to the same codeword positions | Retransmissions that never converge: RV 0, 2, 3, 1 all fail on the same block, and the failure rate is independent of SINR. Compare the gNB's computed TBS against the UE's for the same grant — if they differ, the cause is xOverhead, the DMRS symbol count or the layer count, not the radio. |
| 4 | PDCCH miss. The UE did not decode the DCI. | Nobody, directly. The gNB infers it from DTX. | No PDSCH is received, so no HARQ-ACK is sent. The gNB sees no feedback in the expected PUCCH occasion. | Silence in a slot where the scheduler expected feedback. Look for scheduled PDSCH with no corresponding ACK or NACK. Cross-check against the aggregation level used and against CCE utilisation — a cell running out of CCEs drops candidates before it drops UEs. Companion 31 PDCCH Blind Decoding §10. |
| 5 | PBCH decode failure. The UE cannot recover the MIB. | The UE, by CRC — once per descrambling hypothesis | The UE cannot find SIB1, cannot read pdcch-ConfigSIB1, and therefore cannot use the cell at all | The most misleading signature in this table: the cell measures fine. RSRP and RSRQ come from SSS, which needs no PBCH, so the cell appears in measurement reports at a healthy level and is never selected, reselected or handed over to. Look for a cell with good reported RSRP and zero RACH attempts. |
| 6 | Scrambling identity mismatch on any coded channel. dataScramblingIdentityPDSCH, dataScramblingIdentityPUSCH or pdcch-DMRS-ScramblingID differs between the two ends. | The receiving end, by CRC | Every affected transmission fails. Nothing recovers, because a retransmission is scrambled the same wrong way. | 100 % failure, not a degradation — that binary quality is the diagnosis. A PDSCH identity mismatch shows as every PDSCH failing while every PDCCH decodes; a PDCCH identity mismatch shows as the UE finding nothing at all in that CORESET while another CORESET works. |
| 7 | PUSCH failure with three indistinguishable causes. The gNB's CRC failed on a PUSCH it granted. | The gNB, by CRC | The gNB schedules a retransmission by leaving the NDI untoggled — and if the UE never received the original grant, the UE reads that retransmission grant as a new transmission | Separate the three by looking for received energy and a DMRS correlation peak on the granted resource. Energy plus a DMRS peak plus a CRC fail is a genuine decode failure. No energy at all means the grant was never acted on — a PDCCH problem, or an LBT failure on shared spectrum. Feeding the second case into the uplink outer loop corrupts it; see companion 34 Link Adaptation §14. |
| 8 | PUCCH format mismatch. The gNB decodes a different format, or a different resource, from the one the UE transmitted. | Neither end cleanly — for formats 0 and 1 there is no CRC to fail | The gNB reads noise as a NACK, an ACK, or nothing. A false ACK loses the transport block permanently. | Look for HARQ-ACK statistics that do not add up: ACK plus NACK plus DTX counts that do not equal the scheduled PDSCH count. Also check the resource-set ladder — a payload that just crossed a maxPayloadSize boundary moves the UE to a different format, and if only one end recomputed O_UCI the two ends now disagree (§14). |
| 9 | UCI dropped through beta-offset starvation. Multiplexed CSI part 2 did not fit in the resources the beta offsets and α allowed. | Nobody. This is specified behaviour, not a failure. | The UE legally omits part 2 subband information, one priority level at a time, until it fits. The PUSCH decodes and the CRC passes. | CSI part 2 content that varies with the PUSCH allocation size rather than with the radio channel. Subband CQI present on large grants and absent on small ones, with no radio explanation. Check betaOffsetCSI-Part2-* and scaling (§11.3). |
Table 26. Nine failure modes across the six channels. Rows 1, 2 and 3 all present as "PDSCH CRC failure" in a counter and are three completely different faults; the fifth column exists to separate them. Rows 4, 5, 7 and 8 are the silent ones — none of them produces an error message anywhere.
The single most useful discriminator in this table, and the first thing to check on any PDSCH decode problem: does the failure rate depend on the scheduled MCS? If it does, it is a link-adaptation or coverage question and belongs to the companion 34 Link Adaptation. If it does not — if MCS 0 fails at the same rate as MCS 20 — then the transport block is not the problem and you are looking at a reference signal, a scrambling identity or a transport-block-size disagreement. That one question splits the space in half and takes about a minute.
20. Configuration Reference (ASN.1)
Abridged from TS 38.331. ... marks omitted fields and extension markers; every field shown is real and its type is as specified.
PDSCH-Config ::= SEQUENCE {
dataScramblingIdentityPDSCH INTEGER (0..1023) OPTIONAL,
dmrs-DownlinkForPDSCH-MappingTypeA
SetupRelease { DMRS-DownlinkConfig } OPTIONAL,
dmrs-DownlinkForPDSCH-MappingTypeB
SetupRelease { DMRS-DownlinkConfig } OPTIONAL,
tci-StatesToAddModList SEQUENCE (SIZE (1..maxNrofTCI-States))
OF TCI-State OPTIONAL,
vrb-ToPRB-Interleaver ENUMERATED {n2, n4} OPTIONAL,
resourceAllocation ENUMERATED { resourceAllocationType0,
resourceAllocationType1,
dynamicSwitch },
pdsch-TimeDomainAllocationList
SetupRelease { PDSCH-TimeDomainResource
AllocationList } OPTIONAL,
pdsch-AggregationFactor ENUMERATED {n2, n4, n8} OPTIONAL,
rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns))
OF RateMatchPattern OPTIONAL,
rbg-Size ENUMERATED {config1, config2},
mcs-Table ENUMERATED {qam256, qam64LowSE} OPTIONAL,
maxNrofCodeWordsScheduledByDCI
ENUMERATED {n1, n2} OPTIONAL,
prb-BundlingType CHOICE {
staticBundling SEQUENCE { ... },
dynamicBundling SEQUENCE { ... } },
...
}Listing 6. PDSCH-Config, abridged. dataScramblingIdentityPDSCH and rbg-Size are the two fields on this structure whose mismatch produces a total rather than partial failure. Note vrb-ToPRB-Interleaver, quietly present: virtual-to-physical resource-block interleaving is an extra mapping stage between the allocation and the physical PRBs, applied only to type 1 allocations.
PUSCH-Config ::= SEQUENCE {
dataScramblingIdentityPUSCH INTEGER (0..1023) OPTIONAL,
txConfig ENUMERATED {codebook, nonCodebook} OPTIONAL,
dmrs-UplinkForPUSCH-MappingTypeA
SetupRelease { DMRS-UplinkConfig } OPTIONAL,
dmrs-UplinkForPUSCH-MappingTypeB
SetupRelease { DMRS-UplinkConfig } OPTIONAL,
pusch-PowerControl PUSCH-PowerControl OPTIONAL,
frequencyHopping ENUMERATED {intraSlot, interSlot} OPTIONAL,
frequencyHoppingOffsetLists SEQUENCE (SIZE (1..4))
OF INTEGER (1..274) OPTIONAL,
resourceAllocation ENUMERATED { resourceAllocationType0,
resourceAllocationType1,
dynamicSwitch },
pusch-AggregationFactor ENUMERATED {n2, n4, n8} OPTIONAL,
mcs-Table ENUMERATED {qam256, qam64LowSE} OPTIONAL,
mcs-TableTransformPrecoder ENUMERATED {qam256, qam64LowSE} OPTIONAL,
transformPrecoder ENUMERATED {enabled, disabled} OPTIONAL,
codebookSubset ENUMERATED { fullyAndPartialAndNonCoherent,
partialAndNonCoherent,
nonCoherent } OPTIONAL,
maxRank INTEGER (1..4) OPTIONAL,
rbg-Size ENUMERATED {config2} OPTIONAL,
uci-OnPUSCH SetupRelease { UCI-OnPUSCH } OPTIONAL,
tp-pi2BPSK ENUMERATED {enabled} OPTIONAL,
...
}
UCI-OnPUSCH ::= SEQUENCE {
betaOffsets CHOICE {
dynamic SEQUENCE (SIZE (4)) OF BetaOffsets,
semiStatic BetaOffsets } OPTIONAL,
scaling ENUMERATED {f0p5, f0p65, f0p8, f1}
}Listing 7. PUSCH-Config and UCI-OnPUSCH, abridged. Read the four fields transformPrecoder, mcs-TableTransformPrecoder, tp-pi2BPSK and maxRank together: they are the DFT-s-OFDM cluster, and a configuration that enables transform precoding without revisiting the other three is almost certainly not what was intended.
PUCCH-Config ::= SEQUENCE {
resourceSetToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets))
OF PUCCH-ResourceSet OPTIONAL,
resourceToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources))
OF PUCCH-Resource OPTIONAL,
format1, format2, format3, format4
SetupRelease { PUCCH-FormatConfig } OPTIONAL,
schedulingRequestResourceToAddModList SEQUENCE OF ... OPTIONAL,
dl-DataToUL-ACK SEQUENCE (SIZE (1..8))
OF INTEGER (0..15) OPTIONAL,
...
}
PUCCH-ResourceSet ::= SEQUENCE {
pucch-ResourceSetId INTEGER (0..maxNrofPUCCH-ResourceSets-1),
resourceList SEQUENCE (SIZE (1..32))
OF PUCCH-ResourceId,
maxPayloadSize INTEGER (4..256) OPTIONAL
}
PUCCH-Resource ::= SEQUENCE {
pucch-ResourceId PUCCH-ResourceId,
startingPRB PRB-Id,
intraSlotFrequencyHopping ENUMERATED {enabled} OPTIONAL,
secondHopPRB PRB-Id OPTIONAL,
format CHOICE {
format0 PUCCH-format0,
format1 PUCCH-format1,
format2 PUCCH-format2,
format3 PUCCH-format3,
format4 PUCCH-format4 }
}
PUCCH-format0 ::= SEQUENCE {
initialCyclicShift INTEGER (0..11),
nrofSymbols INTEGER (1..2),
startingSymbolIndex INTEGER (0..13)
}
PUCCH-FormatConfig ::= SEQUENCE {
interslotFrequencyHopping ENUMERATED {enabled} OPTIONAL,
additionalDMRS ENUMERATED {true} OPTIONAL,
maxCodeRate PUCCH-MaxCodeRate OPTIONAL,
nrofSlots ENUMERATED {n2, n4, n8} OPTIONAL,
pi2BPSK ENUMERATED {enabled} OPTIONAL,
simultaneousHARQ-ACK-CSI ENUMERATED {true} OPTIONAL
}Listing 8. PUCCH-Config and its children, abridged. PUCCH-format0 is shown in full because it is the whole of a format-0 resource: a cyclic shift, a symbol count and a start symbol. Three integers, and no code, no CRC and no DMRS anywhere in the definition.
PDCCH-Config ::= SEQUENCE {
controlResourceSetToAddModList
SEQUENCE (SIZE (1..3)) OF ControlResourceSet
OPTIONAL,
searchSpacesToAddModList SEQUENCE (SIZE (1..10)) OF SearchSpace
OPTIONAL,
downlinkPreemption SetupRelease { DownlinkPreemption } OPTIONAL,
tpc-PUSCH, tpc-PUCCH, tpc-SRS SetupRelease { ... } OPTIONAL,
...
}
ControlResourceSet ::= SEQUENCE {
controlResourceSetId ControlResourceSetId,
frequencyDomainResources BIT STRING (SIZE (45)),
duration INTEGER (1..maxCoReSetDuration),
cce-REG-MappingType CHOICE {
interleaved SEQUENCE { ... },
nonInterleaved NULL },
precoderGranularity ENUMERATED { sameAsREG-bundle,
allContiguousRBs },
pdcch-DMRS-ScramblingID INTEGER (0..65535) OPTIONAL,
...
}Listing 9. PDCCH-Config and ControlResourceSet, abridged to the fields this document depends on. pdcch-DMRS-ScramblingID is the one to note: it initialises both the PDCCH DMRS sequence and the PDCCH data scrambling, so a single wrong value breaks the channel twice. The rest of this structure belongs to the companion 30 CORESET and Search Space.
21. Four More Worked Calculations
21.1 A PDSCH transport block, resource elements to bits
Given: 30 kHz SCS, 100 PRB, 1 layer, MCS 15 from MCS table 1 (Q_m = 4, R = 616/1024 = 0.6016), 12 OFDM symbols of PDSCH, one front-loaded DMRS symbol with two CDM groups without data (N_DMRS = 12 RE/PRB), xOverhead absent so N_oh = 0. This is the same geometry the companion 05 HARQ §6.3 uses, and the answer is the same number.
N_RE′ = 12 × 12 − 12 − 0 = 132 RE per PRB
N_RE = min(156, 132) × 100 = 13 200 RE
N_info = 13 200 × 0.6016 × 4 × 1 = 31 764 bits
N_info > 3824, so n = ⌊log₂(31 764 − 24)⌋ − 5 = 14 − 5 = 9, 2⁹ = 512
N_info′ = max(3840, 512 × round(31 740 / 512)) = 512 × 62 = 31 744
R = 0.6016 > 1/4 and N_info′ > 8424, so
C = ⌈(31 744 + 24) / 8424⌉ = ⌈3.77⌉ = 4 code blocks
TBS = 8 × 4 × ⌈31 768 / 32⌉ − 24 = 32 × 993 − 24 = 31 752 bits = 3969 bytes
Check the effective rate. Coded bits available = 13 200 × 4 = 52 800. Payload plus all CRCs = 31 752 + 24 + 4 × 24 = 31 872. Effective rate = 31 872 / 52 800 = 0.604 against a target of 0.602 — 0.3 % over, which is the quantisation cost of forcing TBS to a byte boundary that divides evenly by 8·C.
Rate. One such block per 0.5 ms slot on one layer is 63.5 Mbit/s.
21.2 The overhead deduction that turns raw REs into usable ones
The raw resource-element count is never the usable count, and the gap is larger than people expect. Same allocation as §21.1 — 12 symbols, 100 PRB, MCS 15 — with only the overhead assumptions varied:
| DMRS and overhead assumption | N_DMRS | N_oh | N_RE′ | N_RE | TBS | Loss against the raw count |
|---|---|---|---|---|---|---|
| The raw grid, no deduction at all (not a legal configuration — PDSCH always has DMRS) | 0 | 0 | 144 | 14 400 | 34 816 bits | — |
| Type 1, 1 symbol, one CDM group without data | 6 | 0 | 138 | 13 800 | 32 776 bits | 5.9 % |
| Type 1, 1 symbol, two CDM groups without data (§21.1) | 12 | 0 | 132 | 13 200 | 31 752 bits | 8.8 % |
As above plus xOverhead = xOh6 | 12 | 6 | 126 | 12 600 | 30 216 bits | 13.2 % |
Type 1, dmrs-AdditionalPosition = pos1 (2 DMRS symbols), two CDM groups | 24 | 0 | 120 | 12 000 | 28 680 bits | 17.6 % |
As above plus xOverhead = xOh6 | 24 | 6 | 114 | 11 400 | 27 656 bits | 20.6 % |
Table 27. Overhead against transport block size, everything else held constant. A fifth of the transport block can vanish into configuration choices that have nothing to do with the radio channel. The two levers are independent: DMRS density is a Doppler decision (companion 33 DMRS §11) and xOverhead is a bookkeeping decision, and both land in the same formula.
Why the min(156, N_RE′) cap matters, and when it bites. The cap in step two exists so that TBS does not grow without limit as the assumptions change. With 12 symbols it can never bind — the ceiling is 144. With a full 14-symbol allocation and light DMRS it can: 14 × 12 − 6 = 162 RE per PRB, capped to 156, so 6 RE per PRB per PRB are computed and then discarded. At 100 PRB that is 600 REs, or about 1440 bits at MCS 15, thrown away by the formula. A scheduler that reduces DMRS overhead on a 14-symbol allocation expecting a proportional TBS increase gets nothing back once the cap binds, and in a log this looks like TBS refusing to move while the configuration changes.
21.3 PUCCH format 3 payload capacity
Given: a format 3 resource of 6 PRB over 10 symbols, of which 2 are DMRS (the TS 38.211 Table 6.4.1.3.3-1 pattern for a 10-symbol format 3 without hopping puts DMRS at relative indices 1 and 6). QPSK, maxCodeRate = zeroDot25.
UCI-bearing symbols = 10 − 2 = 8
Resource elements = 8 × 6 PRB × 12 subcarriers = 576 RE
Coded bits at Q_m = 2 = 576 × 2 = 1152 bits
Budget at r = 0.25 → (O_UCI + L) ≤ 1152 × 0.25 = 288 bits
L = 11 for any payload of 20 bits or more, so O_UCI ≤ 277 bits
Now vary the three levers.
maxCodeRate = zeroDot08 → 92 bits → O_UCI ≤ 81
maxCodeRate = zeroDot80 → 921 bits → O_UCI ≤ 910
π/2-BPSK instead of QPSK (Q_m = 1) at r = 0.25 → 144 bits → O_UCI ≤ 133
additionalDMRS configured (4 DMRS symbols) at r = 0.25 → 6 UCI symbols → 432 RE → 864 coded bits → 216 bits → O_UCI ≤ 205
1 PRB instead of 6, r = 0.25, QPSK → 48 bits → O_UCI ≤ 37
The point. The same format 3 resource spans 37 to 910 usable UCI bits depending on four configuration fields, none of which appears in any DCI. When a UE and a gNB disagree about how much UCI fits, this is the arithmetic they are disagreeing about — and the UE's answer is the one that matters, because the UE decides what to drop.
21.4 How many resource elements a multiplexed HARQ-ACK takes
Given: a PUSCH of 20 PRB over 12 symbols with one DMRS symbol, MCS 13 from MCS table 1 (Q_m = 4, R = 490/1024 = 0.4785), single layer. A 16-bit HARQ-ACK codebook is multiplexed onto it. betaOffsetACK-Index2 selects a value that TS 38.213 Table 9.3-1 maps to β = 10.000, and scaling α = 1.
First, the PUSCH's own transport block.
N_RE′ = 11 × 12 = 132 RE/PRB; N_RE = 132 × 20 = 2640 RE
N_info = 2640 × 0.4785 × 4 = 5053 bits → n = 7, N_info′ = 128 × 39 = 4992 → C = 1, TBS = 4992 bits
Σ K_r = TBS + CRC24A = 4992 + 24 = 5016 bits
Then the UCI TS 38.212 cl. 6.3.2.4.1.1. O_ACK = 16, and L_ACK = 6 because the payload is in the 12–19 bit band:
Q′_ACK = min( ⌈(16 + 6) × 10.000 × 2640 / 5016⌉ , ⌈1.0 × 2640⌉ )
= min( ⌈220 × 0.5263⌉ , 2640 ) = min(116, 2640) = 116 modulation symbols
116 symbols at Q_m = 4 is 464 coded bits for 22 information bits — an effective UCI code rate of 0.047, twenty times more redundant than the transport block it is riding inside. That is exactly the intent: the beta offset expresses how much more reliable than the data the control has to be.
Cost to the PUSCH: 116 of 2640 REs = 4.4 %, which the transport block absorbs because a 16-bit ACK is rate-matched around rather than puncturing.
Now make the beta offset extreme. β = 126.000 gives ⌈22 × 126 × 2640 / 5016⌉ = 1459 symbols — 55 % of the PUSCH for 22 bits of ACK. With α = 1 that is allowed. With scaling = f0p5 the second term becomes ⌈0.5 × 2640⌉ = 1320 and the α cap binds. That is what α is for: it is the only thing standing between a mis-set beta offset and a transport block with almost no room left.
22. Illustrative Message Traces
Illustrative trace. Field names and encodings follow 3GPP; the values are constructed for this document and are not a capture from any deployed or lab network.
One scenario throughout: a UE with C-RNTI = 0x4C21 in a cell with physCellId = 231, a 100-PRB downlink BWP at 30 kHz, dataScramblingIdentityPDSCH = 231, MCS table 1. The geometry is the one used in §21.1, so the numbers agree.
22.1 A PDCCH decode, from candidate to DCI
12:41:07.512 PHY/PDCCH slot=407.6 ---- blind decode summary ----
CORESET id .................. 2 duration=2 sym, 24 PRB, interleaved
SearchSpace id .............. 3 type=ue-Specific, AL {2,4,8}
candidates tried ............ 11 AL2:6 AL4:3 AL8:2
DCI sizes tried ............. 2 41 bits (0_1) / 43 bits (1_1)
12:41:07.512 PHY/PDCCH slot=407.6 ---- CRC PASS on candidate 4 ----
aggregationLevel ............ 4 -> 4 CCE, 24 REG, 432 coded bits
first CCE ................... 12 from the AL4 hash for nRNTI=0x4C21
polar N ..................... 512 K = 43 + 24 = 67, E = 432
effective code rate ......... 0.155 67 / 432
crc24c (recomputed) ......... 0x3A81
crc24c (received, unmasked) . 0x3A81 -- XOR of last 16 bits with 0x4C21
addressee ................... C-RNTI 0x4C21 -- the CRC IS the address
12:41:07.512 PHY/PDCCH slot=407.6 ---- DCI format 1_1 decoded ----
identifierForDCIFormats ..... 1 -- 1 = downlink assignment
frequencyDomainAssignment ... 0x1466 -- RIV 5222, type 1, 13 bits
decoded .................. RB_start = 28, L_RBs = 50
timeDomainAssignment ........ 2 -- TDRA row 2: S=2, L=12, typeA
modulationCodingScheme ...... 15 -- Q_m = 4, R = 616/1024
newDataIndicator ............ 1 -- toggled: new transmission
redundancyVersion ........... 0
harqProcessNumber ........... 5
antennaPortsIndication ...... 2 -- 1 layer, 2 CDM groups w/o data
pdsch-toHARQ_feedbackTiming . 1 -- K1 = 2 slots
pucchResourceIndicator ...... 3Listing 10. Read the second block first: the CRC pass is simultaneously the error check and the addressing decision, and there is no addressee field in the third block anywhere. The eleven candidates are the whole cost of that design.
22.2 The PDSCH the DCI scheduled, and its derived parameters
12:41:07.512 PHY/PDSCH slot=407.6 ---- grant applied ----
PRB allocation .............. 28..77 (50 PRB, contiguous, type 1)
symbols ..................... 2..13 (S=2, L=12, mapping type A)
layers / codewords .......... 1 / 1
DMRS ........................ type 1, l = 2 and l = 11, 2 CDM groups
w/o data -> N_DMRS = 12 RE/PRB/symbol
xOverhead ................... absent -> N_oh = 0
---- transport block size derivation (TS 38.214 cl. 5.1.3.2) ----
N_RE' per PRB ............... 12 x 12 - 12 - 0 = 132
N_RE ........................ min(156,132) x 50 = 6600
N_info ...................... 6600 x 0.6016 x 4 x 1 = 15882
n ........................... floor(log2(15858)) - 5 = 13 - 5 = 8
N_info' ..................... 256 x round(15858/256) = 256 x 62 = 15872
code blocks C ............... ceil(15896 / 8424) = 2
TBS ......................... 8 x 2 x ceil(15896/16) - 24 = 15880 bits
= 1985 bytes
base graph .................. BG1; Z_c = 384, 496 filler bits/block
scrambling c_init ........... (0x4C21 << 15) + (0 << 14) + 231
= 0x26108 0E7 -- n_ID = 231 (configured)
coded bits available ........ 6600 x 4 = 26400
effective code rate ......... (15880 + 24 + 48) / 26400 = 0.604
12:41:07.513 PHY/PDSCH slot=407.6 decode OK, CRC24A pass, 2/2 CBs OK
12:41:08.013 PHY/PUCCH slot=407.8 HARQ-ACK: ACK, harqProcess=5, K1=2Listing 11. Every number below the first block is derived — none of it was signalled. That is the design, and it is why a disagreement about xOverhead or the DMRS symbol count produces a total decode failure with no error message anywhere (§19.3).
22.3 A PBCH and MIB decode from cold
12:40:59.104 PHY/SYNC ---- initial cell search, 3450.00 MHz ----
PSS correlation peak ........ N_ID_2 = 0, peak/noise = 14.2 dB
SSS correlation peak ........ N_ID_1 = 77
physCellId .................. 3 x 77 + 0 = 231
12:40:59.106 PHY/PBCH ---- descrambling hypotheses ----
DMRS shift v ................ 231 mod 4 = 3 -- confirms N_ID_cell
DMRS correlation ............ best over 8 SSB-index hypotheses
i_SSB (from 2nd scrambling) . 2
SFN 2nd/3rd LSB hypothesis .. tried 0,1,2,3 -> CRC pass on 1
12:40:59.107 PHY/PBCH ---- decode ----
E = 864 bits (432 QPSK symbols); polar N = 512, K = 56; rate 0.065
crc24c ...................... PASS
PHY-generated bits .......... sfn[3:0] = 0110, halfFrame = 0,
ssb-SubcarrierOffset MSB = 0
12:40:59.107 RRC/BCCH-BCH ---- MIB ----
systemFrameNumber ........... 0b100101 -- 6 MSB; full SFN = 598
subCarrierSpacingCommon ..... scs30or60
ssb-SubcarrierOffset ........ 0
dmrs-TypeA-Position ......... pos2
pdcch-ConfigSIB1 ............ controlResourceSetZero=6,
searchSpaceZero=0
cellBarred .................. notBarred
intraFreqReselection ........ allowedListing 12. The middle block is the interesting one: the UE does not know the SSB index or the SFN when it starts, so it tries hypotheses and lets the CRC arbitrate. Note that dmrs-TypeA-Position arrives here, in the MIB, because the UE needs it to demodulate the very first PDSCH it will ever receive.
22.4 A PUSCH grant with UCI multiplexed onto it
12:41:11.208 PHY/PDCCH slot=411.2 DCI format 0_1, CRC pass, 0x4C21
frequencyDomainAssignment ... RIV 2138 -> RB_start = 12, L_RBs = 20
timeDomainAssignment ........ 3 -> S = 0, L = 12, mapping typeA
frequencyHoppingFlag ........ 0
modulationCodingScheme ...... 13 -- Q_m = 4, R = 490/1024
newDataIndicator ............ 1
srsResourceIndicator ........ 1 -- SRI selects SRS resource 1
precodingInfoAndNrOfLayers .. 0 -- TPMI 0, 1 layer
betaOffsetIndicator ......... 2 -- dynamic: selects set 2 of 4
dai ......................... 3 -- 16 HARQ-ACK bits expected
12:41:11.212 PHY/PUSCH slot=411.2 ---- transmission built ----
transformPrecoder ........... disabled -- CP-OFDM
N_RE' per PRB ............... 11 x 12 = 132 (1 DMRS symbol)
N_RE ........................ 132 x 20 = 2640
TBS ......................... 4992 bits; sum K_r = 5016
base graph .................. BG1
---- UCI multiplexing (TS 38.212 cl. 6.3.2.4.1.1) ----
O_ACK ....................... 16 bits
L_ACK ....................... 6 bits -- 12..19 bit payload band
betaOffsetACK (set 2) ....... 10.000
scaling alpha ............... 1.0
Q'_ACK ...................... min(ceil(22 x 10 x 2640 / 5016), 2640)
= min(116, 2640) = 116 symbols
UCI coded bits .............. 116 x 4 = 464 -> UCI rate 0.047
handling .................... rate-matched around (>2 bits)
REs left for the TB ......... 2640 - 116 = 2524 (4.4 % taken)
12:41:11.712 PHY/PUSCH slot=411.2 gNB: CRC24A PASS, UCI decoded,
16/16 ACK bits recoveredListing 13. The UCI takes 4.4 % of the resource for 22 of the 5016 bits in flight — a redundancy twenty times the transport block's. That ratio is entirely set by betaOffsetACK and it is the only reliability control the multiplexed UCI has (§11.3, §21.4).
22.5 A PUCCH resource selection, step by step
12:41:07.513 PHY/PUCCH slot=407.8 ---- resource selection ---- HARQ-ACK bits (Type-1 codebook, 1 cell, 1 slot) .... 1 SR pending .. no CSI due .. no O_UCI ..... 1 O_UCI <= 2 -> resource set 0 set 0 resourceList size ............................ 4 (<= 8) -> PRI from DCI selects directly (no CCE-index formula) pucchResourceIndicator (from the 1_1) .............. 3 ---- resource 3 configuration ---- format1, startingPRB 0, secondHopPRB 99, intra-slot hopping enabled startingSymbolIndex 0, nrofSymbols 14 initialCyclicShift 4, timeDomainOCC 1 ---- what goes on the air ---- UCI symbols ........ 7 (odd) DMRS symbols ....... 7 (even) modulation ......... BPSK (1 bit) coding ............. none multiplexed with ... up to 83 other UEs on the same PRB ACK/NACK ........... ACK -> BPSK +1, spread by shift 4 and OCC 1
Listing 14. initialCyclicShift and timeDomainOCC together are what make this UE's ACK distinguishable from 83 others in the same PRB. Note also that resourceList has only four entries, so the CCE-index formula does not apply — with more than eight it would, and the PUCCH position would move with the PDCCH's CCE (§14).
22.6 A failure: the same PDSCH with a scrambling identity mismatch
12:52:44.001 PHY/PDCCH slot=891.4 DCI 1_1, CRC pass, 0x4C21, MCS 15
12:52:44.002 PHY/PDSCH slot=891.4 descramble c_init from n_ID = 0
-- UE has no dataScramblingIdentity
PDSCH, so it used N_ID_cell... 0?
12:52:44.003 PHY/PDSCH slot=891.4 CRC24A FAIL CB 0 FAIL CB 1 FAIL
post-equaliser SNR .............. 21.4 dB -- excellent
DMRS correlation ................ 0.97 -- excellent
LLR magnitude distribution ...... normal, mean |LLR| = 4.8
bit error rate before decode .... 0.4998 -- indistinguishable
from a fair coin
12:52:44.503 PHY/PUCCH slot=891.6 HARQ-ACK: NACK, harqProcess=5
12:52:44.504 PHY/PDSCH slot=891.8 retransmission RV=2, CRC24A FAIL
12:52:44.505 PHY/PDSCH slot=892.2 retransmission RV=3, CRC24A FAIL
12:52:44.506 PHY/PDSCH slot=892.6 retransmission RV=1, CRC24A FAIL
12:52:44.507 MAC/HARQ process 5 exhausted, 4/4 attempts failed
12:52:44.510 RLC/AM retransmission requested, SN 4412
---- counters over the next 10 seconds ----
PDCCH decodes ............ 1842 / 1842 100.0 % -- perfect
PDSCH CRC pass ........... 0 / 1842 0.0 % -- total
mean reported CQI ........ 13 -- excellent
mean scheduled MCS ....... 3.1 -- collapsingListing 15. Everything a coverage problem would show is absent: the SNR is excellent, the DMRS correlates perfectly, the LLRs look healthy. The two tells are the pre-decode bit error rate of exactly one half — the signature of descrambling with the wrong sequence — and 100.0 % against 0.0 % in the counters. A radio problem is never a round number. Note the last line: the link-adaptation outer loop is dutifully driving MCS to the floor in response to a fault that has nothing to do with the channel (companion 34 Link Adaptation §11.2).
23. Release Deltas: Rel-15 to Rel-18
| Release | Change | Channels affected | Why it matters |
|---|---|---|---|
| Rel-15 | The six physical channels as specified: PDSCH and PUSCH on LDPC, PDCCH and PBCH on Polar, PUCCH formats 0 to 4, PRACH long and short formats. Downlink to 256QAM, uplink to 256QAM. | All | The baseline. Everything since has been an addition at the edges rather than a change to the core chains. |
| Rel-16 | Two-step random access: MsgA adds a PUSCH transmitted on a configured occasion with no grant at all. | PUSCH, PRACH | The only ungranted PUSCH in the system, and the first time a PRACH preamble is associated with a payload |
| Rel-16 | NR-U: interlaced frequency mapping for PUCCH and PUSCH, so a transmission occupies 10 or 20 evenly spread PRBs to satisfy occupied-bandwidth regulation. | PUSCH, PUCCH | A genuinely new mapping mode. An interlaced PUCCH does not look like any of the footprints in §12. |
| Rel-16 | DCI formats 0_2 and 1_2 with configurable field widths, and the Type-3 HARQ-ACK codebook. | PDCCH, PUCCH | Compact DCI for URLLC. Adds a fifth possible DCI size, which pressures the blind-decode size budget — companion 31. |
| Rel-16 | PUSCH repetition type B with nominal and actual repetitions, and the uplink cancellation indication (DCI 2_4). | PUSCH, PDCCH | The first mechanism by which a PUSCH already granted can be pre-empted; see companion 32 SLIV §15. |
| Rel-17 | 1024QAM for PDSCH, FR1 only, with MCS table 4 and CQI table 4. | PDSCH | Raises the ceiling from 7.41 to 9.26 bits/RE, at a cost of roughly 6 dB — realistically usable only in small cells and fixed wireless |
| Rel-17 | PDCCH repetition: two linked candidates in different CORESETs carrying the same DCI, softly combined. | PDCCH | The first time PDCCH gains anything resembling diversity. It is not HARQ — the two transmissions are simultaneous, not sequential. |
| Rel-17 | Coverage enhancement: PUSCH transport-block processing over multiple slots (TBoMS), DMRS bundling across repetitions, and PUCCH repetition improvements. | PUSCH, PUCCH | Attacks the uplink link budget at the waveform and reference-signal level rather than through coding |
| Rel-17 | RedCap and NTN: reduced-capability UEs with a separate initial BWP and PRACH configuration; non-terrestrial operation with very long round trips and optionally disabled HARQ feedback. | PRACH, PDSCH, PUSCH | Disabled HARQ feedback removes the only unambiguous error signal the downlink has — companion 05 HARQ §12 |
| Rel-18 | 8 transmit antennas in the uplink, with up to 4 layers and extended SRS and codebook support. | PUSCH | The largest uplink capacity change since Rel-15, and it applies only to CP-OFDM — transform precoding remains single-layer |
| Rel-18 | LP-WUS — a low-power wake-up signal, a genuinely new physical signal added to the taxonomy in §1. | None of the six channels | The first addition to the signals list since Rel-15, and a good test of the §1 rule: it carries no higher-layer information, so it is a signal |
| Rel-18 | Network energy saving, including SSB and PDCCH transmission adaptation; study items on subband full duplex. | PBCH, PDCCH | The first mechanisms that let a cell reduce PBCH and PDCCH transmission — touching the one channel that had never been adaptable in any respect |
Table 28. Release deltas. The pattern is worth noticing: the coding chains have not changed at all since Rel-15. Every delta on this table is a new modulation order, a new mapping mode, a new repetition mechanism or a new payload — never a new code, a new CRC or a new scrambling structure. The §4 to §11 chains are stable ground.
24. Reading Physical Channels in Logs: A Checklist
Ordered by how much each step narrows the problem per minute spent. Steps 1 to 3 are direction-agnostic; the rest are per channel.
- Establish which channel failed, not which counter incremented. "PDSCH BLER" is a counter; the fault may be in the DMRS, the scrambling identity, the transport-block-size derivation or the channel. Before anything else, write down which of the six channels you believe is broken and what evidence says so.
- Check whether the failure rate depends on the scheduled MCS. This is the single highest-yield question in the whole area. If it does, it is coverage or link adaptation — hand it to the companion 34 Link Adaptation. If MCS 0 fails as often as MCS 20, the transport block is not the problem, and you are looking at a reference signal, a scrambling identity or a size disagreement (§19).
- Look for round numbers. A radio problem is statistical: 8 %, 34 %, 61 %. A configuration problem is binary: 0.0 % or 100.0 %. Any counter sitting at exactly zero or exactly everything is a mismatch, not a channel.
- PDSCH: reconcile the two ends' transport block sizes for one grant. Take a single DCI, work the TBS derivation through by hand from the allocation, the MCS, the layer count, N_DMRS and
xOverhead, and compare against what each end logged. §21.1 and §21.2 are the worked template. A mismatch here explains retransmissions that never converge. - PDSCH: check the scrambling identity path, not just its value. Confirm
dataScramblingIdentityPDSCHmatches at both ends, and confirm that both ends apply theN_ID_cellfallback for DCI 1_0 grants from a common search space. The second half of that check is the one that gets skipped (§5.2). - PDCCH: look for absences, not errors. Count scheduled PDSCH against received HARQ-ACK and NACK. The gap is missed PDCCH. Then look at the aggregation levels being used and at CCE utilisation in the CORESET — a cell that has run out of CCEs drops candidates silently, and the companion 31 PDCCH Blind Decoding §10 has the overbooking rules.
- PBCH: check the cells nobody ever selects. A PBCH failure is invisible in every radio counter because SSS gives RSRP without PBCH. Look for a cell reported at healthy RSRP in measurement reports with zero RACH attempts against it. Then check
cellBarred, thepdcch-ConfigSIB1value and whether SIB1 is actually being transmitted where the MIB says. - PUSCH: separate the three failure causes before anything else. For each failed PUSCH look for received energy and a DMRS correlation peak on the granted resource. No energy means the grant was never acted on: a PDCCH problem, or LBT on shared spectrum. Only cases with energy and a DMRS peak are genuine decode failures, and only those should be reasoned about as radio (§19.7).
- PUCCH: make the HARQ-ACK arithmetic balance. Scheduled PDSCH count should equal ACK plus NACK plus DTX. If it does not, the two ends disagree about the codebook, the resource, or the format — and the commonest cause is a payload that crossed a
maxPayloadSizeboundary and moved the UE to a different resource set (§14). - PUCCH: check whether CSI part 2 content tracks the PUSCH allocation size. Subband information present on large grants and missing on small ones, with no radio explanation, is beta-offset starvation and is specified behaviour rather than a fault (§11.3, §19.9).
- Only then look at the radio. If the sizes reconcile, the identities match, the reference signals correlate, the resource sets cover the payloads and the waveform is what you intended, then a failing channel is a genuinely poor channel — and the problem is coverage, interference or beam selection. Hand it to the companions 20 Measurements and Events and 16 RLM and RLF.
25. Glossary
| Term | Expansion | Meaning in this document |
|---|---|---|
| BG1 / BG2 | LDPC Base Graph 1 / 2 | The two families of parity-check matrices used for all transport blocks. Selected by a rule on size and target rate, never configured TS 38.212 cl. 7.2.2. |
| CCE | Control Channel Element | 6 REGs = 72 REs, of which 54 carry data. The unit of PDCCH allocation, and the unit the aggregation level counts. |
| DCI | Downlink Control Information | The payload PDCCH carries. Created by the scheduler, with no transport channel and no MAC involvement. |
| DFT-s-OFDM | DFT-spread OFDM | The optional PUSCH waveform, selected by transformPrecoder. Lower PAPR, at the cost of contiguity, intra-allocation frequency selectivity and MIMO. |
| E | — | The number of coded bits a channel's rate matching produces for one transmission. 108 × AL for PDCCH; 864 always for PBCH; whatever the allocation holds for PDSCH and PUSCH. |
| N_RE′ / N_RE | — | Resource elements per PRB after deducting DMRS and overhead, and the total across the allocation. The two quantities the TBS procedure starts from TS 38.214 cl. 5.1.3.2. |
| Physical channel | — | A transmission carrying information that originated above the physical layer. Six of them: PDSCH, PDCCH, PBCH, PUSCH, PUCCH, PRACH. |
| Physical signal | — | A known sequence transmitted so the receiver can measure something. Carries no higher-layer information, has no CRC and cannot fail to decode because there is no decode step. |
| Polar code | — | The code used for DCI, for PBCH and for UCI payloads above 11 bits. Strong at short block lengths; sequentially decoded, which is why it is not used for data. |
| REG | Resource Element Group | One PRB in one OFDM symbol: 12 REs, of which 3 are PDCCH DMRS and 9 carry data. |
| Reed–Muller | — | The block code used for UCI payloads of 3 to 11 bits, decoded exhaustively. The forgotten fourth code in NR (§17.3). |
| RIV | Resource Indication Value | The single integer encoding a contiguous frequency allocation's start and length. Piecewise, and its codespace is 31 % invalid at N = 106 (§6.3). |
| Sequence selection | — | Conveying information by which of several known sequences is transmitted rather than by coded bits. Used by PUCCH format 0, PRACH, PSS and SSS. |
| TBS | Transport Block Size | Derived, never signalled, from the allocation, the MCS, the layer count and the overhead assumptions. A disagreement about any input is a silent total failure. |
| Transform precoding | — | The DFT stage that turns CP-OFDM PUSCH into DFT-s-OFDM PUSCH. Semi-static, and the single most consequential uplink configuration field. |
| UCI | Uplink Control Information | HARQ-ACK, scheduling requests and CSI reports. Carried on PUCCH, or multiplexed onto PUSCH. No transport channel above it. |
| β_offset | Beta offset | The factor scaling how many resource elements multiplexed UCI takes on a PUSCH, expressed relative to the PUSCH's own code rate and modulation order (§11.3). |
26. References
- 3GPP TS 38.211 — Physical channels and modulation. The primary reference here. Clause 6.3 for the uplink channels: 6.3.1 PUSCH, 6.3.2 PUCCH with a subclause per format, 6.3.3 PRACH and its Zadoff–Chu sequence generation. Clause 7.3 for the downlink: 7.3.1 PDSCH, 7.3.2 PDCCH including CCE-to-REG mapping and the QPSK requirement, 7.3.3 PBCH scrambling and mapping. Clause 7.4 for the SS/PBCH block, with Table 7.4.3.1-1 giving the exact resource-element map used in §9.2. Clause 5.1 for the modulation mappings.
- 3GPP TS 38.212 — Multiplexing and channel coding. Clause 5 for the codes: 5.1 CRC polynomials, 5.2.2 code block segmentation, 5.3.1 Polar, 5.3.2 LDPC, 5.3.3 the small block codes and Reed–Muller, 5.4.1 and 5.4.2 rate matching with Table 5.4.2.1-2 for the redundancy-version start positions. Clause 6 for the uplink chains: 6.2 UL-SCH, 6.3 UCI, with 6.3.2.4 the resource determination for UCI on PUSCH. Clause 7 for the downlink: 7.1 the broadcast channel step by step, 7.2.1 and 7.2.2 the DL-SCH CRC and base graph selection, 7.3.2 the RNTI-masked DCI CRC.
- 3GPP TS 38.213 — Physical layer procedures for control. Clause 9 for UCI reporting: 9.1 the HARQ-ACK codebooks, 9.2.1 PUCCH resource selection including the CCE-index formula, 9.2.3 the format 0 and 1 payload-to-sequence mapping, 9.2.5 the UCI multiplexing rules, and Table 9.3-1 for the beta offset values. Clause 8 for the random-access physical-layer procedure and 7 for uplink power control.
- 3GPP TS 38.214 — Physical layer procedures for data. Clause 5.1.2.2 for the PDSCH frequency-domain allocation types, with Table 5.1.2.2.1-1 the RBG sizes and 5.1.2.2.2 the RIV encoding. Clause 5.1.3 for the MCS tables and 5.1.3.2 for the transport block size procedure used throughout §21. Clauses 6.1.2 and 6.1.4 for the PUSCH equivalents.
- 3GPP TS 38.331 — RRC protocol specification.
PDSCH-Config,PDSCH-ServingCellConfig,PUSCH-Config,UCI-OnPUSCH,PUCCH-Configand its children,PDCCH-Config,ControlResourceSet,RACH-ConfigCommon,RateMatchPattern,DMRS-DownlinkConfigandDMRS-UplinkConfig. - 3GPP TS 38.306 — UE radio access capabilities. Where
pdsch-256QAM-FR1, the 1024QAM capabilities, the PUCCH format capabilities and the transform-precoding capabilities live — the constraints that decide whether a configuration is legal for a given UE.
On the numbers in this document. Every bit width, CRC length, resource-element count, clause reference and field range is from the specification and can be checked. Three categories of number are not: the SINR figures in §5.3 and its figure, which come from the illustrative link model shared with the companion 34 Link Adaptation and are marked as illustrative wherever they appear; the curve shapes in the Polar-versus-LDPC figure, which are representative of published finite-blocklength results rather than measurements; and the "typical" column of §18, which reflects common practice rather than any requirement. Everything in the traces of §22 is constructed from the encoding rules — internally consistent, and not a capture from any network.
Companion documents in this set
- 02 Radio Frame Structure — the resource grid every footprint in this document is drawn on, the SSB structure and burst set that PBCH lives in, and the numerology that turns symbol counts into microseconds.
- 03 Random Access — PRACH in full: the preamble groups, the occasions, the four-step and two-step procedures, and the Msg3 PUSCH that is the one PUSCH nobody has any channel knowledge about (§15).
- 05 HARQ — the circular buffer, the four redundancy versions, code block groups, the soft buffer, and the transport block size procedure this document reuses unchanged so the two agree (§4, §5.1, §21.1).
- 06 Channel Mapping — the logical, transport and physical channel mapping in both directions, the LCID and eLCID tables, the RNTI catalogue and the full DCI and UCI format lists. This document's counterpart: 06 answers what feeds this channel, and this one answers what happens once it arrives (§1).
- 30 CORESET and Search Space — where PDCCH candidates live: the 45-bit frequency bitmap, the CCE-to-REG mapping, CORESET#0 and the search space types (§7.3).
- 31 PDCCH Blind Decoding — how the UE finds a DCI: the hashing function, the candidate arithmetic, the per-slot budgets, the DCI size budget, overbooking, and the false-alarm rate the RNTI-masked CRC creates (§7.2, §8).
- 32 SLIV and Time Domain Allocation — the start-and-length encoding, mapping types A and B, k0 and k2, slot aggregation and the two PUSCH repetition types (§6.4).
- 33 DMRS — every reference signal in the system: the two configuration types, CDM groups, additional positions, the channel-specific patterns for PDCCH, PBCH and PUCCH, PT-RS, and the low-PAPR sequences that transform precoding requires (§1, §6.1, §10.1).
- 34 Link Adaptation — the two loops that choose the MCS this document's chains then execute, the CQI and MCS tables, and what happens when a reference-signal or scrambling fault is fed into the outer loop as if it were a coverage problem (§5.3, §19).