CAFETELE
5G NR Physical Layer — A Practical Engineer's Guide
Author: Abhijeet Kumar
Publisher: CafeTele Publications
Edition: First Edition, March 2026
Based on: 3GPP Release 18 Specifications (TS 38.211 v18.7.0, TS 38.212 v18.7.0, TS 38.213 v18.7.0, TS 38.214 v18.7.0, TS 38.215 v18.3.0)
Copyright © 2026 Abhijeet Kumar / CafeTele. All rights reserved.
No part of this publication may be reproduced, distributed, or transmitted in any form or by any means, including photocopying, recording, or other electronic or mechanical methods, without the prior written permission of the author, except in the case of brief quotations embodied in critical reviews and certain other noncommercial uses permitted by copyright law.
Disclaimer: While every effort has been made to ensure accuracy, the author and publisher assume no responsibility for errors or omissions. This book is intended for educational purposes. For normative references, always consult the official 3GPP specifications.
Contact: [email protected]
Website: www.cafetele.com
Designed and typeset by Abhijeet Kumar. CafeTele is a registered trademark.
To every RF engineer who has stared at a 3GPP specification at 2 AM, trying to decode what the standard actually means in the real world.
This book is for you.
— Abhijeet Kumar
Part I
Foundations
The bedrock of 5G NR physical layer — OFDM, numerology, frame structure, and the resource grid that everything else is built upon.
Part I · Foundations — Chapter One
Introduction to 5G NR Physical Layer
Where the bits hit the air. Why 5G's physical layer looks the way it does, and how to use the rest of this book.
TS 38.300 (NR overall)
TS 38.201 (PHY general)
TS 38.202 (PHY services)
TR 38.913 (KPIs)
Rel-18 baseline
After this chapter you will
Recognise the three IMT-2020 pillars (eMBB, URLLC, mMTC) and the PHY mechanisms each one drove into the spec; locate the PHY layer in the NR protocol stack relative to MAC, RLC, PDCP, SDAP; know exactly which TS 38.21x document covers which question; map every physical channel and signal to its purpose; and read the rest of this book in the right order.
1.1 Why 5G NR Exists
Every cellular generation answers a different question. 2G asked "can we make voice digital?" — and the answer was GSM, with 200 kHz channels and a 14.4 kbps data side-pocket. 3G asked "can we add data?" — and WCDMA gave us 384 kbps, later 21 Mbps with HSPA. 4G asked "can data be the default and voice the exception?" — and LTE rebuilt the whole stack around IP with 100 Mbps cell-edge and Voice over LTE. 5G asks three questions at once. Can we move more data per second per Hz than LTE ever did? Can we drive end-to-end latency down to the millisecond? And can we serve a million devices per square kilometre without choking the air? Those three questions become the three pillars of 5G design — and every choice in the NR physical layer can be traced back to one of them.
1.2 The Three Pillars — eMBB, URLLC, mMTC
The IMT-2020 vision document (ITU-R, 2015) defines three use-case families that 5G must serve. 3GPP translated each into concrete KPIs and PHY mechanisms:
| Pillar | Acronym means | Target KPI | PHY mechanisms that enable it |
| eMBB | enhanced Mobile BroadBand | 20 Gbps peak, 100 Mbps cell-edge, 100 Mbps/m² area | 1024-QAM (Rel-17), 8 layers, FR2 mmWave, Massive MIMO Type II codebooks, BWP-based bandwidth scaling |
| URLLC | Ultra-Reliable Low-Latency Communications | 1 ms one-way, 99.999 % (5 nines, i.e. 1−10⁻⁵) reliability | Mini-slots (2/4/7 symbols), scalable numerology, PDCCH repetition, configured grants, CBG-based retransmission, K1=0 fast HARQ |
| mMTC | massive Machine-Type Comms | 1 M devices / km², 164 dB MCL, 10+ year battery | NB-IoT (LTE-era, carried into NR), RedCap (Rel-17), eDRX, π/2-BPSK with shaped spectrum, 2-step RACH, small data transmission |
Table 1.1 — The three pillars and the PHY mechanisms that realise each. Most operators run all three simultaneously on the same carrier through BWP slicing.
In plain English. Imagine the cell as a single highway. eMBB cars are wide eighteen-wheelers — they need the fastest lane and the widest shoulder. URLLC cars are ambulances — they don't need the widest lane, but every car must yield when one passes. mMTC cars are postal vans — they don't go anywhere fast, but there are millions of them and they have to share without crashing. NR's physical layer is the choreography that lets all three share the same asphalt without bumping into each other.
Expert read
- Tracing any NR feature back to its pillar is the fastest way to understand why it exists — e.g. mini-slots make no sense until you see the 1 ms URLLC budget.
- The three often conflict (Fig 1.2 triangle): high-order QAM (eMBB) needs SNR that cell-edge mMTC devices never have — so they live on different BWPs.
- BWP slicing is the unifier: one carrier hosts a μ=0 eMBB BWP, a μ=1 URLLC BWP, and a narrow RedCap BWP simultaneously.
- Gotcha: features tagged to one pillar leak — PDCCH repetition (URLLC) also helps eMBB cell-edge coverage; don't assume a mechanism is single-purpose.
1.3 Where the PHY Sits — The NR Protocol Stack
The physical layer is the bottom layer of the radio stack. Above it sit MAC, RLC, PDCP, SDAP, and then RRC for control plane and the IP-layer applications for user plane.
In plain English. Think of the stack as a kitchen line. The application is the customer placing an order. SDAP is the maître d' tagging the order with priority. PDCP is the sous-chef portioning, ciphering ingredients. RLC is the line cook plating the dish into manageable bites. MAC is the runner deciding which dish goes to which table next. PHY is the actual delivery — the act of carrying the plate across the dining room. Every layer above PHY is policy; PHY is physics.
1.4 The Five Pillars of NR PHY Specifications
The 38-series specifications describe NR. The physical layer is split across five core documents, each a deep dive into one aspect. Memorise these five — every later chapter of this book cites one or more of them:
| Spec | Subject | What you look up here | This book's chapters |
| TS 38.211 | Physical channels and modulation | RE mappings, OFDM signal generation, sequences (Gold, Zadoff-Chu), DMRS patterns | 2, 3, 6, 7, 8, 9, 10, 11, 12, 13 |
| TS 38.212 | Multiplexing and channel coding | CRC, LDPC, polar, rate matching, DCI/UCI formats, scrambling | 5, 7, 8, 11 |
| TS 38.213 | Physical-layer control procedures | PDCCH monitoring, RACH procedure, power control, beam management, slot formats | 7, 12, 14, 16, 17 |
| TS 38.214 | Physical-layer data procedures | Resource allocation, MCS/TBS, CSI configuration, DMRS configuration, MIMO codebooks | 8, 9, 10, 14, 15, 16 |
| TS 38.215 | Physical-layer measurements | RSRP, RSRQ, SINR, RSSI — exact definitions and reporting ranges | 19 |
Table 1.2 — The PHY specification family. Each spec runs ~150–400 pages and is updated quarterly across 3GPP releases.
In plain English. Think of these five as workshops in the same factory. 38.211 makes the parts and lays them on the assembly belt. 38.212 wraps them in error-correcting code so they survive shipping. 38.213 schedules when each part rides the belt. 38.214 picks which part to send and how big. 38.215 measures whether the parts arrived intact. When you have a PHY question, the answer is in one of these five — and the question's verb usually tells you which: "where" → 38.211; "encoded how" → 38.212; "when" → 38.213; "how much" → 38.214; "how good" → 38.215.
1.5 The Physical Channels and Signals — Full Map
NR defines six DL physical channels/signals, four UL channels, and a family of measurement-only references. Each chapter from 6 onward zooms into one:
| Channel / Signal | Direction | Carries | Chapter |
| PSS / SSS / PBCH | DL | Cell identity + MIB (the SSB) | 6 |
| PDCCH | DL | Scheduling DCI | 7 |
| PDSCH | DL | User data, broadcast data, paging | 8 |
| CSI-RS, TRS, PRS | DL | Measurement references | 9, 23 |
| PRACH | UL | RACH preamble | 12 |
| PUSCH | UL | User data, UCI piggyback | 10 |
| PUCCH | UL | UCI (HARQ-ACK, SR, CSI) | 11 |
| SRS | UL | Sounding reference signal | 13 |
| PSBCH, PSCCH, PSSCH, PSFCH | Sidelink | UE-to-UE direct comms (V2X) | 21 |
Table 1.3 — Every NR physical channel and reference signal. DMRSs are not separate entries; each rides with its host channel.
1.6 The Physical-Layer Processing Chain — Big Picture
Every PHY transmission, regardless of direction or channel, walks the same skeleton of stages. Knowing this skeleton makes every later chapter feel like a familiar variation:
1.7 What Makes NR Fundamentally Different from LTE
If you came from LTE, six things will surprise you in NR:
| Topic | LTE | NR | Why the change |
| Numerology | Fixed 15 kHz SCS | 15·2μ kHz, μ ∈ {0..6} | One slot length doesn't fit eMBB, URLLC, and FR2 simultaneously |
| Bandwidth | UE always on full carrier | BWPs — UE can run on a slice | Power saving + scheduling flexibility |
| Always-on signals | CRS every symbol | SSB every 20 ms (default); no CRS | CRS overhead was 14 % of every PRB |
| Beamforming | UE-transparent (cell-specific) | UE-aware via TCI states + beam mgmt | mmWave needs explicit beam pairing |
| Channel coding | Turbo for data, TBCC for control | LDPC for data, polar for control | LDPC scales to high rates; polar has no error floor at short blocks |
| Unlicensed | LAA bolt-on (Rel-13) | NR-U built-in (Rel-16) | Designed-in coexistence, not retrofitted |
Table 1.4 — The big LTE → NR shifts.
Expert read
- The common thread is per-UE / per-BWP configurability: LTE broadcast one structure to all; NR tailors numerology, bandwidth and beams per user and per slot.
- Scalable numerology is the keystone — it's what lets one carrier serve URLLC (μ=1) and eMBB (μ=0) and FR2 (μ=3) without separate air interfaces.
- LDPC+polar replaced turbo+convolutional because they hit higher rates (LDPC) and have no short-block error floor (polar) — matching NR's eMBB and control needs respectively.
- Gotcha: the flexibility costs signalling — far more RRC configuration and DCI interpretation than LTE, which is why misconfiguration (not coverage) is the dominant NR fault class.
1.8 How to Read This Book
The book is structured in seven parts. You can read it linearly (recommended for newcomers) or jump to the chapter you need (recommended for engineers debugging a specific issue):
- Part I (Ch 1–5) — Foundations. OFDM, frame structure, modulation, channel coding. Read first if any of those words feel fuzzy.
- Part II (Ch 6–9) — Downlink Channels. SSB, PDCCH, PDSCH, DL reference signals. The DL story.
- Part III (Ch 10–13) — Uplink Channels. PUSCH, PUCCH, PRACH, UL reference signals. The UL story.
- Part IV (Ch 14–15) — MIMO & CSI. Spatial multiplexing, beamforming, codebooks, CSI feedback.
- Part V (Ch 16–19) — System-level topics. Link adaptation, power, scheduling, measurements.
- Part VI (Ch 20–24) — Deep topics. Sequences, sidelink, NR-U, positioning, MBS.
- Part VII (Ch 25–27) — Operations. KPIs, optimization, troubleshooting.
Every chapter ends with a References block (the exact 3GPP citation for every claim) and a Live labs block (cross-links to the interactive labs at /labs/5g-phy-layer/ where you can play with the same concepts). Treat the labs as the second half of each chapter — formulas land in memory only after you've watched them move.
Conventions used in this book
- "Long" PUCCH = 4–14 symbols. "Short" PUCCH = 1–2 symbols.
- Math: italic Latin letters are scalars; bold are vectors/matrices.
- Spec references: TS 38.211 §7.4.1.4 always means "open that file at that section." We don't paraphrase the spec; we walk you through what it actually says.
- "In plain English" callouts repeat the technical idea in everyday language. Skip them if you're already fluent; use them if you're not.
- Worked examples use TS-compliant numbers and have been verified in Python before publication.
1.9 References
Primary 3GPP specifications
- TS 38.300 NR overall description, stage 2
- TS 38.201 NR PHY layer — general description
- TS 38.202 NR PHY services provided by the PHY layer
- TS 38.211 Physical channels and modulation
- TS 38.212 Multiplexing and channel coding
- TS 38.213 Physical-layer control procedures
- TS 38.214 Physical-layer data procedures
- TS 38.215 Physical-layer measurements
Background and study reports
- TR 38.913 NR study on scenarios and requirements (the IMT-2020 targets)
- TR 38.802 NR study on physical-layer aspects
- TR 21.917 Rel-17 summary · TR 21.918 Rel-18 summary
Part I · Foundations — Chapter Two
OFDM Fundamentals and Numerology
Every NR signal you will ever decode sits on an OFDM grid. This is the chapter where that grid is built — subcarrier by subcarrier, symbol by symbol — and where you learn to size it for any band, any cell, any service.
TS 38.211 §4.1 (time units)
TS 38.211 §4.2 (numerology)
TS 38.211 §4.3 (frame structure)
TS 38.211 §5.3 (OFDM signal gen)
TS 38.104 (BW configs)
TS 38.213 §4.1 (SSB SCS)
Rel-18 baseline
After this chapter you will be able to
Explain — from first principles — why OFDM beats single-carrier transmission in a multipath channel; size a cyclic prefix for any cell radius; read and derive the entire numerology table (μ ∈ {0…6}, SCS 15…960 kHz) from two physical constants; compute symbol durations, slot durations, slots-per-frame, FFT sizes and sample rates for any band; explain why FR2 reaches for 120 kHz while FR1 lives at 15/30 kHz; recognise FR2-2 (Rel-17) and its 480/960 kHz options; and walk a full worked example end-to-end on band n78 and again on mmWave n257.
There is one idea underneath the whole of NR's physical layer, and it is geometric, not algebraic: the air interface is a grid. One axis is time, divided into symbols; the other is frequency, divided into subcarriers. Every bit the network ever sends you is painted onto the cells of that grid. Master how the grid is dimensioned — how wide each subcarrier is, how long each symbol lasts, how much guard time protects it — and the rest of the physical layer becomes bookkeeping on top of a structure you already understand. That dimensioning is exactly what 3GPP calls numerology, and building it correctly is the entire job of this chapter.
2.1 The Multipath Problem and Why OFDM Solves It
A radio signal travelling from a gNB to a handset does not take one path. It takes dozens. There is the direct line-of-sight component, plus a reflection off the glass tower across the street, plus a bounce off the wet road, plus a scatter off a passing bus. Each path has its own length, and since radio travels at a fixed 3·10⁸ m/s, each copy of the signal arrives at the antenna at a slightly different instant. The spread between the earliest and the latest meaningful arrival is the channel's delay spread, written τ. It is the single most important number for choosing a numerology, so it is worth memorising the typical ranges.
| Environment | RMS delay spread στ | Max excess delay τmax | Coherence BW Bc ≈ 1/(5στ) |
| Indoor office / small cell | 20–50 ns | ~100–300 ns | 4–10 MHz |
| Urban micro (street canyon) | 100–300 ns | ~1 µs | 0.7–2 MHz |
| Urban / suburban macro | 0.5–2 µs | ~2–5 µs | 100–400 kHz |
| Rural / hilly macro | 1–5 µs | up to ~10 µs | 20–200 kHz |
| mmWave (FR2, beamformed) | 5–30 ns | ~50–100 ns | 5–30 MHz |
Table 2.0 — Representative delay-spread figures (3GPP TR 38.901 channel models, rounded). The coherence bandwidth Bc is the frequency span over which the channel looks roughly flat. Keep each subcarrier far narrower than Bc and the channel becomes a single complex gain per subcarrier — the property OFDM is engineered to exploit. Note how beamforming at mmWave shortens delay spread, which is one reason FR2 can afford very wide subcarriers.
Now picture a single wide-band carrier sending one symbol every 33 nanoseconds — roughly what a 30 MHz single-carrier link would do. In an urban-macro cell with a 1 µs delay spread, the tail of symbol N is still arriving when symbols N+1 through N+30 have already been transmitted. The copies pile on top of one another at the receiver. This overlap is Inter-Symbol Interference (ISI), and it corrupts demodulation thoroughly. Crucially, you cannot modulate your way out of it: the channel will have multipath, and no clever constellation removes a physical echo. A single-carrier receiver must instead fight ISI with a time-domain equaliser whose tap count grows with the delay spread — tens of taps, re-converging every time the channel shifts. That is expensive silicon, and it scales badly as bandwidth grows.
OFDM — Orthogonal Frequency-Division Multiplexing — attacks the problem from the opposite direction. Instead of one fast carrier, it splits the band into hundreds or thousands of narrow subcarriers, each carrying symbols slowly. A 100 MHz NR carrier at 30 kHz spacing holds 3,276 active subcarriers; each one sends a symbol only once every 33 microseconds — a thousand times slower than the single-carrier equivalent. Because each subcarrier is much narrower than the coherence bandwidth, it sees an essentially flat channel: one complex gain, nothing more. The echo that wrecked the wide carrier becomes, per subcarrier, a tiny rotation the receiver corrects with one complex multiply. The price is a Fast Fourier Transform at each end — and an FFT is precisely the operation modern silicon performs most efficiently.
In plain English. Imagine throwing one cannonball at a wall covered in echoes — by the time the second ball arrives, the first is still ricocheting and they collide in mid-air. Now imagine throwing 3,276 ping-pong balls instead, each on its own slow, gentle arc, each painted a different colour (its subcarrier). The echoes are still there, but every ball moves so slowly that its own echo dies away long before the next ball of the same colour is thrown. At the far end you simply sort by colour and read each stream cleanly. OFDM is that sorting-by-colour, and the FFT is the machine that does the sorting.
Expert read
- The spectral nulls sit at integer multiples of Δf = 1/Tu. That is the hard constraint behind the entire numerology table: the useful symbol length must be exactly 1/Δf (66.7 µs at 15 kHz) or the peaks stop landing on the nulls and orthogonality breaks.
- Slide the receiver's sampling grid off those nulls — by a timing error or a carrier-frequency offset (CFO) — and every subcarrier leaks into its neighbours: inter-carrier interference (ICI). OFDM buys robustness against multipath at the cost of acute sensitivity to frequency error.
- This is why a tracking loop (TRS, Ch. 9) matters so much. A residual CFO of even a few percent of Δf rotates the whole constellation and raises an ICI floor no equaliser can remove.
- Field gotcha: Doppler spreads each sinc, so the ICI floor rises with UE speed. Choosing a wider SCS (120 kHz at FR2) makes the Doppler a smaller fraction of Δf — one of the real, physical reasons mmWave reaches for large numerologies.
2.2 The Cyclic Prefix — Free Insurance
Narrow subcarriers tame ISI but do not abolish it. At the boundary between two OFDM symbols, the channel's delay-spread tail from the previous symbol still spills into the start of the next. The naïve fix — insert a few microseconds of silence as a guard — works but wastes both energy and bandwidth, and worse, it would break orthogonality by truncating the useful symbol. NR, following LTE, does something far more elegant: it copies the last NCP samples of each OFDM symbol and prepends them to the front. That copied segment is the cyclic prefix (CP), and it earns its keep twice over.
- It absorbs the multipath tail. As long as the delay spread is shorter than the CP duration, every echo of the previous symbol lands inside the CP region — which the receiver discards before the FFT. The useful part of the symbol is therefore echo-free.
- It converts linear convolution into circular convolution. Prepending the tail makes the transmitted symbol look periodic to the channel over the FFT window. The channel's linear convolution then produces the same result a circular convolution would — and circular convolution is diagonalised by the DFT. After the FFT the channel collapses to one scalar gain Hk per subcarrier, so equalisation is a single complex divide.
The CP length is not arbitrary — it is fixed by 3GPP and scales with numerology. From TS 38.211 §5.3.1, the normal CP for a symbol is NCP = 144·κ·2−µ time units Tc, except at the two symbols that align with a 0.5 ms boundary (symbol 0 and symbol 7·2µ), which carry an extra 16·κ Tc so the slots tile the radio frame perfectly. With κ = 64 and Tc ≈ 0.509 ns, this produces the familiar numbers below.
| µ | SCS | Normal CP (typ. symbol) | Long CP (sym 0 & 7·2µ) | CP overhead |
| 0 | 15 kHz | 4.69 µs | 5.21 µs | ~7.0 % |
| 1 | 30 kHz | 2.34 µs | 2.60 µs | ~7.0 % |
| 2 | 60 kHz | 1.17 µs | 1.30 µs | ~7.0 % |
| 2 (ext) | 60 kHz | 4.17 µs | 4.17 µs | ~20 % |
| 3 | 120 kHz | 0.586 µs | 0.651 µs | ~7.0 % |
| 4 | 240 kHz | 0.293 µs | 0.326 µs | ~7.0 % |
| 5 | 480 kHz | 0.146 µs | 0.163 µs | ~7.0 % |
| 6 | 960 kHz | 0.073 µs | 0.081 µs | ~7.0 % |
Table 2.1a — Cyclic-prefix durations derived from NCP = 144·κ·2−µ·Tc (normal) and +16·κ·Tc at the two slot-boundary symbols. The normal-CP overhead is a constant ≈7 % at every numerology — the CP shrinks in lock-step with the symbol. Extended CP exists only at µ=2 (60 kHz) and trades ~20 % overhead for a four-times-longer guard, used where delay spread is unusually large (e.g. some multicast/MBSFN-style or large-cell scenarios).
In plain English. The cyclic prefix is like the run-up of silence engineers leave at the start of a track so the first note is not buried under the previous song's reverb — except here the gap is not silence at all. You fill it with a copy of the song's own final few samples. If the previous track's reverb does bleed in, it overlaps only with redundant samples you were going to discard anyway. No information is lost, and not a single subcarrier of bandwidth is spent on dead air.
Expert read
- The 1-tap equaliser exists only because the CP converts linear convolution to circular. Remove the CP and the DFT no longer diagonalises the channel — the entire OFDM advantage evaporates.
- The hard requirement is CP ≥ delay spread. If even one echo exceeds the CP, the periodicity assumption breaks and ISI/ICI return. This is why µ=0 (4.7 µs CP) serves large rural cells while µ=3 (0.59 µs CP) is confined to tiny FR2 cells with short echoes.
- The same trick turns a frequency-selective channel into N independent flat sub-channels — the basis for per-subcarrier channel estimation, CQI, and bit-loading throughout the rest of this book.
- Gotcha: a timing offset that pushes the FFT window even partly outside the CP re-introduces ICI even with a long-enough CP — which is exactly why TRS-based timing tracking (Ch. 9) is non-negotiable in a real receiver.
2.3 NR Numerologies — Seven Subcarrier Spacings
NR's defining break from LTE is scalable numerology. Where LTE fixed the subcarrier spacing at 15 kHz forever, NR lets it scale as Δf = 2µ·15 kHz, with µ ∈ {0, 1, 2, 3, 4, 5, 6} (TS 38.211 §4.2; µ = 5 and 6 were added in Rel-17 for FR2-2). The choice is made per bandwidth part, not per cell — so a single carrier can run a 30 kHz eMBB BWP and a 60 kHz URLLC BWP side by side, and the UE simply re-parameterises its FFT when it switches between them.
TS 38.211 §4.1–4.3 — the two constants and what they generate
Base time unit: Tc = 1 / (Δfmax·Nf) = 1 / (480·10³ · 4096) ≈ 0.509 ns
Reference unit: Ts = 1 / (15·10³ · 2048) ≈ 32.55 ns → κ = Ts/Tc = 64
Subcarrier spacing: Δf = 2µ · 15 kHz
Useful symbol (FFT window): Tu = 1/Δf
Normal CP: NCP = 144·κ·2−µ Tc (+16·κ at symbols 0 and 7·2µ)
Subframe = 1 ms always; Slot = 1/2µ ms; Slots per subframe = 2µ; Symbols per slot = 14 (normal CP), 12 (extended).
| µ | SCS Δf | Useful Tu | Symbol Tsym | Slot | Normal CP | Where it is used |
| 0 | 15 kHz | 66.7 µs | 71.4 µs | 1 ms | 4.69 µs | FR1 default; SSB Case A; large cells |
| 1 | 30 kHz | 33.3 µs | 35.7 µs | 0.5 ms | 2.34 µs | FR1 high-band data; SSB Case B/C |
| 2 | 60 kHz | 16.7 µs | 17.9 µs | 0.25 ms | 1.17 µs (norm) / 4.17 µs (ext) | FR1 & FR2 data; only µ with extended CP |
| 3 | 120 kHz | 8.33 µs | 8.93 µs | 125 µs | 0.586 µs | FR2-1 data + SSB Case D |
| 4 | 240 kHz | 4.17 µs | 4.46 µs | 62.5 µs | 0.293 µs | FR2-1 SSB only (Case E); not for data |
| 5 | 480 kHz | 2.08 µs | 2.23 µs | 31.25 µs | 0.146 µs | FR2-2 (Rel-17) data + SSB |
| 6 | 960 kHz | 1.04 µs | 1.12 µs | 15.6 µs | 0.073 µs | FR2-2 (Rel-17) data + SSB |
Table 2.1 — Every NR numerology. A slot is always 14 OFDM symbols (normal CP) regardless of µ. Doubling the SCS halves both the symbol and the slot, quadruples the symbols-per-second rate, and halves the CP — so higher µ tolerates progressively less delay spread. Note the asymmetry of µ=4: 240 kHz exists only as an SSB numerology for fast beam-sweeping at FR2-1, never as a data SCS.
| µ | SCS | Slots / subframe (1 ms) | Slots / frame (10 ms) | Symbols / second |
| 0 | 15 kHz | 1 | 10 | 14,000 |
| 1 | 30 kHz | 2 | 20 | 28,000 |
| 2 | 60 kHz | 4 | 40 | 56,000 |
| 3 | 120 kHz | 8 | 80 | 112,000 |
| 4 | 240 kHz | 16 | 160 | 224,000 |
| 5 | 480 kHz | 32 | 320 | 448,000 |
| 6 | 960 kHz | 64 | 640 | 896,000 |
Table 2.1b — Frame timing per numerology (TS 38.211 §4.3.2). Slots-per-frame = 10·2µ. Because every scheduling, HARQ, and timing-advance timer is expressed in slots or symbols, raising µ tightens every loop in the system by 2µ — a K1=0 HARQ feedback at µ=3 is 8× faster in wall-clock than at µ=0. This is the real lever behind URLLC latency.
In plain English. Picture seven tempos of the same piece of music. At µ=0 it plays andante: one bar — one slot — fills a whole millisecond. At µ=3 it is allegrissimo: a bar finishes in 125 microseconds. A faster tempo lets the network complete a transaction sooner (gold for URLLC), but each note occupies less time, so the room's echo (delay spread) must be shorter — meaning a smaller cell or a higher band where multipath is naturally brief. A slower tempo gives the echo time to die away (gold for big rural cells on low bands) but stretches every transaction. Numerology is the dial that sets this trade.
Expert read
- The CP shrinks in lock-step with the symbol, so higher µ tolerates less delay spread. That is the physical reason µ=0 (long CP) serves big rural cells while µ=3 lives at FR2 where cells are tiny and echoes short.
- Numerology is chosen per BWP, not per cell. A µ=1 URLLC BWP and a µ=0 eMBB BWP can share one carrier; the UE re-parameterises its FFT on every BWP switch.
- Gotcha: SSB uses one of a restricted set of SCS (Case A–E in FR1/FR2-1, plus 480/960 kHz in FR2-2) — and that SSB numerology is frequently not the data numerology. Cell search and data decode can run at different µ in the same cell.
- Symbols-per-second scale as 2µ, so every slot-based timer (scheduling, HARQ K0/K1/K2, timing advance) tightens by 2µ× — the structural mechanism that makes URLLC's sub-millisecond budgets achievable.
2.4 FFT Sizes and Sample Rates
NR's physical layer is deliberately not tied to one FFT size. TS 38.211 §5.3 defines the OFDM signal in continuous time and in terms of the base unit Tc, leaving the implementer free to pick any FFT large enough to hold the active subcarriers. In practice vendors choose from the standard radix-2 set — 256, 512, 1024, 2048, 4096, 8192 — and typically over-size it so a single silicon block serves every channel bandwidth in a band. The governing relationships are simple and worth committing to memory:
TS 38.211 §5.3 — OFDM signal generation
Sample rate: fs = NFFT · Δf
Sample period: Tsample = 1 / fs
Useful-part samples = NFFT; CP samples NCP = (144·κ·2−µ) · (NFFT / 2048) for the 15 kHz-referenced FFT chain (+16·κ-equivalent at the two boundary symbols)
Constraint: NFFT ≥ Nused = 12 · NRB (active subcarriers), with the remainder as guard.
| µ | Δf | Channel BW | NRB | Active SC (12·NRB) | NFFT | Sample rate fs |
| 0 | 15 kHz | 20 MHz | 106 | 1,272 | 2048 | 30.72 MHz |
| 0 | 15 kHz | 50 MHz | 270 | 3,240 | 4096 | 61.44 MHz |
| 1 | 30 kHz | 100 MHz | 273 | 3,276 | 4096 | 122.88 MHz |
| 2 | 60 kHz | 100 MHz | 135 | 1,620 | 2048 | 122.88 MHz |
| 3 | 120 kHz | 400 MHz | 264 | 3,168 | 4096 | 491.52 MHz |
| 5 | 480 kHz | 2 GHz | — | — | 4096 | 1966.08 MHz |
Table 2.2 — Representative FFT sizes versus bandwidth. Notice the family of sample rates 30.72 / 61.44 / 122.88 / 245.76 / 491.52 MHz — all integer multiples of 30.72 MHz (the LTE 20 MHz rate), a deliberate design choice that lets one clock tree and one set of converters serve every configuration. Vendors routinely over-size the FFT (4096 for 100 MHz at 30 kHz even though the active SCs would fit a smaller transform) so a single hardware block covers an entire band.
Expert read
- The IFFT is the modulator. It places N QAM symbols onto N orthogonal subcarriers in a single transform; the receiver's FFT is its exact inverse. This is why OFDM scales so gracefully to thousands of subcarriers — the cost is one FFT, not N oscillators.
- The CP is added after the IFFT and removed before the FFT. Its real job is mathematical (Fig 2.2b): it turns the channel's linear convolution into a circular one, which the DFT diagonalises into N independent scalars Hk.
- The equaliser is therefore a single complex divide per subcarrier (Ŷk/Ĥk). A multipath channel that would need a long time-domain filter collapses to N trivial scalar corrections — the entire reason OFDM won.
- Gotcha: the trick holds only while (a) the CP outlasts the delay spread and (b) the channel is static across the symbol. Break either — long echo, or high Doppler — and the 1-tap equaliser leaves residual ISI/ICI: the textbook "fine at walking pace, falls apart on the motorway" failure.
2.5 Frequency Ranges — FR1, FR2-1, FR2-2
3GPP partitions NR's spectrum into frequency ranges, and the boundaries are not arbitrary — they fall where the underlying RF physics changes character. Below ~7 GHz (FR1) silicon is cheap, oscillators are stable, and power amplifiers are efficient. Above 24 GHz (FR2) phase noise rises steeply, PA efficiency collapses, and free-space path loss grows so severe that beamforming stops being optional. Each range therefore favours a different slice of the numerology table.
| Range | Frequency | Channel BW | Data SCS (µ) | Defining RF character |
| FR1 | 410 MHz – 7.125 GHz | 5–100 MHz | 15 / 30 / 60 kHz (µ 0,1,2) | Stable oscillators, efficient PAs; longer multipath → modest SCS. Carries the overwhelming majority of commercial NR traffic today. |
| FR2-1 | 24.25 – 52.6 GHz | 50–400 MHz | 60 / 120 kHz (µ 2,3) | High path loss, short delay spread, beamformed; phase noise demands wider SCS. mmWave hotspots, dense urban, fixed wireless access. |
FR2-2 (Rel-17) | 52.6 – 71.0 GHz | up to 2 GHz | 120 / 480 / 960 kHz (µ 3,5,6) | Severe phase noise → very wide SCS; huge contiguous spectrum. Includes the 60 GHz unlicensed band. Pilot/early-deployment stage. |
Table 2.3 — NR frequency ranges (TS 38.104; TS 38.101-1 for FR1, TS 38.101-2 for FR2). The gap between 7.125 and 24.25 GHz holds no NR allocation — it is occupied by satellite, radar, and fixed-link services. As of Rel-18, FR1 and FR2-1 are in mass production; FR2-2 silicon and amplifiers are still maturing.
2.6 Filter Shaping and the Pulse Shape
Orthogonality (Fig 2.1b) comes at a spectral price: each subcarrier is a sinc in frequency, and a sinc's side-lobes decay slowly — only as 1/f. Summed across thousands of subcarriers, that energy spills past the channel edge into the neighbour's band. Left unchecked it would violate the adjacent-channel-leakage-ratio (ACLR) and spectrum-emission-mask (SEM) limits that TS 38.104 places on every base station. NR controls this leakage with two complementary tools.
- Guard subcarriers — the first and cheapest defence. The channel bandwidth is deliberately wider than the active transmission. At 100 MHz / 30 kHz only 273 of the available RBs are used (3,276 subcarriers = 98.28 MHz), leaving ~1.7 MHz of unused spectrum at the band edges as a built-in guard. This is why NR achieves ~98–99 % spectral occupancy versus LTE's ~90 % — NR's guard bands are proportionally far smaller.
- Transmit-side shaping — applied on top of the guard. Two families dominate: windowed OFDM (W-OFDM), which multiplies the time-domain symbol edges by a raised-cosine taper to soften the spectral roll-off; and filtered OFDM (f-OFDM), which runs a band-pass FIR after the IFFT for a sharper edge at higher complexity. The 3GPP spec mandates the mask, never the method — vendors are free to choose, and may even apply different shaping per BWP.
There is a genuine engineering tension here, not a free lunch. Sharper spectral edges require longer time-domain filters, which smear the symbol slightly and raise the in-band error-vector magnitude (EVM). Over-filtering to win a few dB of ACLR can quietly cost you a constellation point at the high MCS where EVM headroom is thin. The art is to use exactly enough shaping to clear the mask and not one tap more.
Expert read
- The slow sinc roll-off is the unavoidable dual of OFDM's perfect orthogonality (Fig 2.1b): you cannot have both sharp time-domain symbols and sharp spectral edges — the uncertainty principle forbids it.
- Guard subcarriers at the band edge — the gap between channel BW and the used RBs (e.g. 273 of the possible RBs in 100 MHz at 30 kHz) — are the first, zero-complexity line of defence before any filter runs.
- W-OFDM / f-OFDM can be applied per-BWP, so one sub-band can carry sharper shaping than another — useful when a single BWP sits next to a sensitive neighbour band such as a radio-astronomy or aeronautical allocation.
- Gotcha: aggressive filtering smears the time-domain symbol and re-introduces a little inter-symbol leakage, raising EVM. There is a real filter-sharpness-versus-EVM trade — over-filtering quietly lifts your own error floor and can cost you the top MCS.
2.7 Choosing Numerology — A Decision Tree
Numerology selection is not a matter of taste — it is a short, deterministic walk through four physical constraints, taken in order. Band fixes the candidate set; latency, coverage, and Doppler narrow it; SSB is handled separately because it has its own restricted list. The flowchart below is the same logic an RF planner applies, drawn as a decision tree.
Practical numerology selection — the rules behind the tree
- Pick the frequency range first. FR1 → µ ∈ {0, 1, (2)}. FR2-1 → µ ∈ {2, 3}. FR2-2 → µ ∈ {3, 5, 6}. The band alone eliminates most of the table.
- Apply the latency constraint. URLLC at FR1 → prefer µ=1 (0.5 ms slot, half the round-trip granularity of µ=0). eMBB → either µ=0 or µ=1 works; µ=1 is the common production default on n78.
- Apply the coverage constraint. Large cells with long delay spread (rural, hilly macro) → µ=0 for its 4.7 µs CP. Dense urban → µ=1's 2.3 µs CP is ample.
- Apply the Doppler constraint. High-speed rail (up to 500 km/h) at 3.5 GHz produces ~1.6 kHz Doppler; choosing µ=1 keeps that a small fraction of the 30 kHz spacing, limiting ICI. At FR2 the same speed demands µ=3 or higher.
- Handle SSB separately. SSB always uses one of Cases A–E (15/30/120/240 kHz) in FR1/FR2-1, plus 480/960 kHz in FR2-2 (TS 38.213 §4.1). It is a deliberate, independent choice — covered in detail in Chapter 6.
2.8 Worked Examples — n78 (FR1) and n257 (FR2)
Numbers make the framework concrete. Here are two complete dimensioning walk-throughs — one on the workhorse FR1 band n78, one on mmWave n257 — taking each from band and bandwidth all the way to FFT size, sample rate, and CP length in samples.
Example A — 100 MHz on n78 at SCS 30 kHz (µ=1)
- Band & SCS. n78 = 3300–3800 MHz, TDD, FR1 high-band. Default data numerology µ=1 (30 kHz).
- Bandwidth → RBs. Channel BW = 100 MHz → 273 RBs (TS 38.101-1 Table 5.3.2-1, the FR1 maximum). Active subcarriers NSC = 273 × 12 = 3,276.
- Spectral occupancy. Used spectrum = 3,276 × 30 kHz = 98.28 MHz of 100 MHz → 98.3 %; the remaining 1.72 MHz is edge guard band.
- Symbol timing. Useful symbol Tu = 1/30 kHz = 33.33 µs. Normal CP = 2.34 µs. Total symbol Tsym ≈ 35.67 µs.
- Slot & frame. Slot = 14 symbols = 0.5 ms → 2 slots per subframe, 20 slots per 10 ms frame.
- FFT & sample rate. NFFT = 4096 (holds 3,276 active SCs plus 820 guard SCs). fs = 4096 × 30 kHz = 122.88 MHz; sample period Tsample ≈ 8.14 ns.
- CP in samples. Normal-CP symbols ≈ 288 samples; the two slot-boundary symbols ≈ 320 samples (the extra 16·κ-equivalent). (2.34 µs × 122.88 MHz ≈ 288.)
Example B — 100 MHz on n257 at SCS 120 kHz (µ=3)
- Band & SCS. n257 = 26.5–29.5 GHz, TDD, FR2-1 (mmWave). Data numerology µ=3 (120 kHz).
- Bandwidth → RBs. Channel BW = 100 MHz → 66 RBs (TS 38.101-2). Active SCs = 66 × 12 = 792.
- Symbol timing. Tu = 1/120 kHz = 8.33 µs. Normal CP = 0.586 µs. Tsym ≈ 8.93 µs — four times shorter than Example A, which is why n257 needs short-echo, small cells.
- Slot & frame. Slot = 14 symbols = 125 µs → 8 slots per subframe, 80 slots per frame. The scheduler runs 4× faster than on n78.
- FFT & sample rate. NFFT = 1024 (holds 792 active SCs + guard). fs = 1024 × 120 kHz = 122.88 MHz — the very same sample rate as Example A, reached with a quarter the FFT size and four times the spacing. That coincidence is the elegance of the 30.72 MHz-multiple design.
- Takeaway. Same 100 MHz, same fs, same hardware family — but four-times-faster slots and a four-times-shorter CP. The band changed the physics; the numerology table absorbed it with one parameter.
2.9 References
Primary 3GPP specifications
- TS 38.211 §4.1 time units (Tc, κ) · §4.2 numerology · §4.3 frame structure · §5.3 OFDM signal generation & CP lengths
- TS 38.104 Base-station radio transmission/reception — supported channel BWs per band, ACLR / SEM masks
- TS 38.101-1 UE radio (FR1) — channel bandwidth ↔ NRB tables, NR-ARFCN, SCS per band
- TS 38.101-2 UE radio (FR2) — FR2-1 & FR2-2 bandwidths, SCS, and band definitions
- TS 38.213 §4.1 — SSB subcarrier-spacing Cases A–E and the FR2-2 480/960 kHz extension
- TR 38.901 Channel models — delay-spread and Doppler figures used in Table 2.0
Where to go next in this book
- Ch. 3 Frame structure & the resource grid — how these symbols and subcarriers become resource elements, RBs, and BWPs.
- Ch. 6 SS/PBCH block — where the SSB numerology Cases A–E are applied in cell search.
- Ch. 9 Reference signals & TRS — the tracking loop that protects the orthogonality this chapter depends on.
Part I · Foundations — Chapter Three
Frame Structure and Resource Grid
Time is divided into frames, half-frames, subframes, slots and symbols. Frequency is divided into resource blocks and subcarriers. The intersection of one symbol and one subcarrier is a single resource element — the indivisible atom of NR, and the thing every channel in this book ultimately writes to.
TS 38.211 §4.3 (time)TS 38.211 §4.4 (grid, CRB/PRB/VRB)TS 38.211 §6.3.1 (antenna ports)TS 38.211 §7.3.1.6 (VRB↔PRB)TS 38.213 §11 (slot formats, SFI)TS 38.214 §5.1.2 (RBG / RIV / PRG)TS 38.331 (BWP, TDD config)
After this chapter you will be able to
Navigate the time-domain hierarchy from a 10 ms frame down to a single OFDM symbol, including the half-frame and System Frame Number; place Point A and chain every frequency offset (offsetToPointA, offsetToCarrier, k
SSB, RB
start) onto it; tell CRB from PRB from VRB and map between them, interleaved or not; configure a Bandwidth Part and reason about why one carrier can host BWPs of different numerologies at once; build a TDD pattern from
tdd-UL-DL-ConfigurationCommon and walk the four-layer rule that decides whether any symbol is DL, UL, or flexible; size a guard period from a cell radius; read Type-0 (RBG bitmap) and Type-1 (RIV) frequency allocations and PRB bundling; and tie it all together through the K0/K1/K2 scheduling offsets.
If Chapter 2 built the OFDM grid in the abstract, this chapter gives it coordinates. NR is, at heart, a two-dimensional canvas: time on one axis, frequency on the other. Everything the network does — sending a control message, carrying a megabyte, asking for an acknowledgement — is an instruction to paint specific cells of that canvas. To follow any later chapter you need fluent command of three things: how the axes are numbered, how the canvas is partitioned into the chunks the scheduler hands out, and how those chunks are timed relative to one another. We take them in that order.
3.1 The Time-Domain Hierarchy
Every NR transmission is anchored to a global clock. That clock counts radio frames of 10 ms. Each frame splits into two half-frames of 5 ms — a division that matters because the SS/PBCH burst (Chapter 6) is always confined to one half-frame. Each frame also divides, independently, into ten subframes of exactly 1 ms. The subframe is special: its duration is fixed at 1 ms regardless of numerology, which makes it the common heartbeat that keeps different-µ Bandwidth Parts on one carrier aligned in absolute time.
Inside a subframe sit one or more slots, and here numerology finally enters: there are 2µ slots per subframe — 1 at 15 kHz, 2 at 30 kHz, 4 at 60 kHz, up to 64 at 960 kHz. Every slot holds 14 OFDM symbols under normal CP (or 12 under the extended CP that exists only at µ=2). The slot is the default scheduling unit: PDCCH, PDSCH, PUSCH and PUCCH all live inside one slot unless the spec explicitly permits cross-slot or multi-slot operation. The whole structure is strictly hierarchical, and every resource element in time is addressed by the triple (SFN, slot index, symbol index).
| Unit | Size | Count / notes |
|---|
| SFN | 10-bit (0…1023) | System Frame Number; wraps every 10.24 s. Hyper-SFN extends it for eDRX paging. |
| Frame | 10 ms | Absolute time reference; 10 subframes; 2 half-frames. |
| Half-frame | 5 ms | nhf ∈ {0,1}; bounds the SSB burst set. |
| Subframe | 1 ms | 2µ slots; the µ-invariant clock. |
| Slot | 2−µ ms | 14 symbols (normal CP) / 12 (extended CP, µ=2 only). |
| OFDM symbol | ≈71/2µ µs | CP + useful part (Chapter 2). |
| Mini-slot | 2, 4 or 7 symbols | URLLC short PDSCH/PUSCH (§3.5). |
Table 3.1 — The time-domain hierarchy (TS 38.211 §4.3). Number of slots per frame = 10·2µ; per subframe = 2µ.
Expert read- The subframe (1 ms) is numerology-invariant — it is the shared clock that lets a µ=0 BWP and a µ=2 BWP on one carrier stay aligned to the same absolute time grid.
- The SFN wraps at 1024 frames (10.24 s); the hyper-SFN (H-SFN) in SIB1 extends the addressable range for long eDRX/DRX paging cycles.
- The (slot index, symbol index) pair feeds directly into the scrambling seed cinit for DMRS and CSI-RS (Chapter 20) — timing is literally part of the cryptographic-style seed, so a slot-counting error corrupts channel estimation, not just scheduling.
- Gotcha: at high µ a "slot" is tiny (125 µs at µ=3), so any timer expressed in slots means a very different wall-clock time than at µ=0 — a recurring source of cross-numerology scheduling confusion.
3.2 The Frequency-Domain Resource Grid
For each numerology and each transmission direction, NR defines a resource grid: a rectangle of 12·Nsize,µgrid subcarriers by 14·2µ symbols per subframe, replicated once per antenna port (TS 38.211 §4.4.2). The grid is sized in Resource Blocks (RBs), each a fixed 12 contiguous subcarriers — so one RB spans 12·Δf in frequency: 180 kHz at 15 kHz SCS, 360 kHz at 30 kHz, and so on. The carrier may be up to Nsizegrid = 275 RBs wide. The smallest addressable element is the resource element (RE), identified by the index pair (k, l): k the subcarrier, l the OFDM symbol.
Expert read- An RB is defined only in frequency (12 subcarriers). Its width in Hz therefore scales with numerology, so "100 MHz" means a different RB count per µ (273 RBs at 30 kHz, 135 at 60 kHz).
- Scheduling granularity is the RB in frequency and the slot (or mini-slot) in time. A DCI's frequency-domain assignment is just a bitmap or an RIV over these RBs (§3.6).
- Some REs in every scheduled RB are spent on DMRS; subtracting them is exactly how the real transport-block size is computed (Chapter 8). Counting REs is not academic — it is the throughput.
- Gotcha: the grid is per-port. "Adding a layer" means "adding an orthogonal DMRS port", and orthogonal ports are a finite, CDM-grouped resource — which is what really caps MU-MIMO pairing (§3.7).
3.2.1 Point A and the Anchoring Chain
NR places its frequency origin not on any UE and not on any BWP, but on a band-anchored reference called Point A. Point A is the lowest subcarrier of Common RB 0 (CRB 0) evaluated on the 15 kHz reference grid (60 kHz for FR2). It can be signalled absolutely via absoluteFrequencyPointA (an ARFCN) or relatively via offsetToPointA in SIB1. From Point A, a chain of offsets locates everything else: offsetToCarrier places the numerology-specific carrier; locationAndBandwidth (RBstart + length) carves a BWP from it; and kSSB reconciles the SSB raster with the CRB grid.
In plain English. Imagine a long road with kilometre markers numbered from 0 — that zero post is Point A, and it never moves. The whole carrier is a stretch of that road; a BWP is a shorter stretch inside it, say km 6 to km 9. The DCI tells the UE "drive to the 0.5 km point", meaning a PRB index inside the BWP; the UE adds the BWP's start (km 6) to get the true position (km 6.5). Misremember where the BWP starts and every instruction after it lands in the wrong place.
3.2.2 CRB, PRB, VRB — Three Rulers, One Grid
Three layers of RB numbering coexist, and confusing them is the single most common source of "off-by-N RBs" bugs in the field.
| RB type | Numbered from | Where it appears |
|---|
| CRB — Common RB | Point A (carrier-wide, on the reference grid) | Global index; same for every UE. Used to position carriers, BWPs and CORESETs. |
| PRB — Physical RB | The start of the active BWP | UE-specific. nPRB = nCRB − NstartBWP. DCI resource fields live here. |
| VRB — Virtual RB | The DCI allocation | Mapped to PRBs by the VRB-to-PRB rule (§3.2.3), interleaved or not. |
Table 3.2 — The three RB numberings (TS 38.211 §4.4.4 and §7.3.1.6). The conversion CRB→PRB is a single subtraction of the BWP start; getting that offset wrong shifts every allocation.
3.2.3 VRB-to-PRB Mapping
The DCI allocates virtual RBs; the resource grid is addressed in physical RBs. The mapping between them is either non-interleaved (VRB n → PRB n, an identity, used for localized frequency-selective scheduling where the gNB wants the UE on a known-good sub-band) or interleaved (contiguous VRB bundles of L = 2 or 4 RBs are scattered across the band by a block interleaver, buying frequency diversity when no reliable CSI is available). The choice is signalled per grant by a 1-bit field in DCI formats 1_0/1_1 (TS 38.211 §7.3.1.6).
3.2.4 The DC Subcarrier
Direct-conversion radios leak a DC offset that, after the FFT, appears as a spur on one subcarrier. NR handles this by signalling where a transmitter's DC falls rather than forbidding data there: txDirectCurrentLocation (0…3299) tells the receiver which subcarrier carries the DC component, or flags that it sits outside the carrier or on a 7.5 kHz half-subcarrier shift. The receiver can then de-weight or puncture that RE in its demodulation. Unlike LTE, NR has no mandatory empty DC subcarrier — it is a signalled location, not a reserved gap, which is part of how NR reaches ~98 % spectral occupancy.
3.3 Bandwidth Parts (BWP)
A Bandwidth Part is a contiguous subset of the carrier's RBs, with its own numerology and CORESET, on which a UE operates at a given moment. Up to four DL and four UL BWPs are configured per serving cell, but only one of each is active at a time. This is how a 100 MHz cell serves a 20-MHz-capable (or battery-conscious) UE through a 20 MHz BWP, and how one carrier can run eMBB and URLLC at different numerologies side by side.
3.3.1 Initial vs Dedicated BWPs
| Type | Active when | Configured by |
|---|
| Initial DL BWP | From cell access until reconfiguration | SIB1 initialDownlinkBWP (tied to CORESET#0) |
| Initial UL BWP | From RACH until reconfiguration | SIB1 initialUplinkBWP |
| Dedicated DL/UL BWP | After RRC (re)configuration | RRC BWP-Downlink / BWP-Uplink |
| Default DL BWP | Fallen back to on inactivity-timer expiry | RRC defaultDownlinkBWP-Id |
Table 3.3 — BWP types (TS 38.331). The initial DL BWP must be wide enough to carry SIB1/RMSI, or initial access fails even when the dedicated BWPs are perfectly fine.
3.3.2 BWP Switching
The active BWP changes through three mechanisms, spanning three orders of magnitude in speed:
- RRC reconfiguration — slow (~10 ms); used when the whole BWP set is re-planned.
- DCI BWP indicator (DCI 0_1/1_1, 2-bit) — fast; completes in one BWP-switch delay (type-1/type-2 UE capability, typically ~0.5–3 slots / a few hundred µs).
- BWP-inactivity timer — automatic fallback to the default BWP after a configurable idle interval; a pure power-saving feature.
3.4 Slot Formats — DL, UL, Flexible
In a TDD carrier, every OFDM symbol is one of three kinds: D (downlink — gNB transmits), U (uplink — UE transmits), or F (flexible — decided dynamically). TS 38.213 Table 11.1.1-1 enumerates 56 slot-format codes (0…55) for the legal symbol combinations within a slot. But the format codes are only the vocabulary; the real machinery is how a UE learns which symbols are which, and that is a strict four-layer process.
3.4.1 tdd-UL-DL-ConfigurationCommon — building the pattern
The cell's semi-static TDD pattern is not hand-written as "DDDSU"; it is parameterised in SIB1 by tdd-UL-DL-ConfigurationCommon. The key fields are a referenceSubcarrierSpacing and one or two patterns, each giving a periodicity and a count of DL/UL slots and symbols:
| Field | Meaning |
|---|
dl-UL-TransmissionPeriodicity | Period of the pattern: 0.5, 0.625, 1, 1.25, 2, 2.5, 5 or 10 ms |
nrofDownlinkSlots | Whole DL slots at the start of the period |
nrofDownlinkSymbols | Leading DL symbols in the following (special) slot |
nrofUplinkSymbols | Trailing UL symbols in that special slot |
nrofUplinkSlots | Whole UL slots at the end of the period |
pattern2 (optional) | A second concatenated pattern for asymmetric periods |
Table 3.4 — tdd-UL-DL-ConfigurationCommon fields (TS 38.331). Symbols not claimed as DL or UL in the special slot become flexible — and that flexible block is where the guard period lives (§3.4.4).
3.4.2 The Four-Layer DL/UL Determination
A UE resolves the direction of every symbol by consulting four sources in a fixed priority order. The governing rule (TS 38.213 §11.1) is that dynamic signalling may only fill in flexible symbols — it can never repurpose a symbol that the semi-static configuration already fixed as DL or UL. That one-way constraint is what keeps interference predictable across a cell.
3.4.3 The Slot Format Indicator (DCI 2_0)
Layer 3 of that stack deserves its own note. DCI format 2_0, scrambled with the SFI-RNTI and monitored by a group of UEs, carries a Slot Format Indicator: an index into a configured slotFormatCombination table that announces the format(s) of one or more upcoming slots. It lets the gNB flip flexible symbols between DL and UL on a slot-by-slot basis to chase bursty, asymmetric traffic — without an RRC reconfiguration and without per-UE signalling. It only ever touches flexible symbols, exactly as the four-layer rule demands.
3.4.4 The Guard Period and Cell Radius
When a slot turns from downlink to uplink, the gNB needs a gap: time for the last DL symbol to finish propagating out to the cell edge, for the UE to switch its transceiver from receive to transmit, and for the UE's (timing-advanced) uplink to travel back. That gap is the guard period (GP) — the flexible symbols in the special slot. Its length sets a hard ceiling on cell radius, by the same logic the cyclic prefix uses for delay spread: the GP must exceed the round-trip propagation delay.
3.4.5 Common TDD Patterns
| Pattern | Period (µ=1) | DL share | Typical use |
|---|
| DDDDU | 2.5 ms | 80 % | DL-heavy FR1 macro; simple, few UL opportunities |
| DDDSU | 2.5 ms | ~71 % | The commercial workhorse; the S slot adds a UL HARQ chance and a guard period |
| DDDDDDDSUU | 5 ms | ~70 % | eMBB-heavy with two UL slots per period for ACK + SR |
| FR2 DDDDDDDDSUU | (120 kHz) | varies | Finer DL/UL granularity for mmWave |
Table 3.5 — Common TDD periods. "S" is a special slot whose internal split is set by nrofDownlinkSymbols/nrofUplinkSymbols; the rest is the guard period.
Expert read- Neighbouring TDD cells must share the same DL/UL pattern (or coordinate via SBFD/advanced features); a mismatch causes gNB-to-gNB and UE-to-UE cross-link interference that no power control can fix.
- Carrier-aggregation component carriers should align their slot patterns, or the UE's cross-carrier HARQ timing becomes ambiguous (a Chapter-26 failure mode).
- The special slot is where latency and coverage trade off: more UL symbols → faster HARQ but a smaller guard period → smaller cell.
- Gotcha: SFI (DCI 2_0) and a scheduling DCI can disagree about a flexible symbol; the UE follows a defined precedence, and a misconfigured slotFormatCombination silently drops grants.
3.5 Mini-Slots and URLLC
For URLLC and other short-payload traffic, PDSCH/PUSCH need not wait for a slot boundary or occupy all 14 symbols. A mini-slot (PDSCH/PUSCH mapping Type B) can start on almost any symbol and run for as few as 2, 4 or 7 symbols, using the same numerology as its host slot. Latency drops on two fronts at once — shorter start delay and shorter duration — at the cost of fixed overhead (DMRS, PDCCH) becoming a larger fraction of a tiny transmission.
| Mini-slot length | Duration at µ=1 | Typical use |
|---|
| 2 symbols | ≈71 µs | Ultra-low-latency URLLC control/small data |
| 4 symbols | ≈143 µs | Moderate URLLC payloads |
| 7 symbols | ≈250 µs | Larger URLLC payloads, NR V2X sidelink |
Table 3.6 — Mini-slot lengths, configured via PDSCH-TimeDomainResourceAllocation with mapping Type B; start+length are encoded as a SLIV.
Expert read- Mini-slots cut start delay (no wait for the slot edge) and duration — both count against the 1 ms URLLC budget.
- The price is overhead: front-loaded DMRS plus the PDCCH cost a fixed number of symbols, so on a 2-symbol mini-slot the pilots can be a third of the transmission — spectral efficiency falls sharply.
- Type B (non-slot-aligned) mapping permits the arbitrary start symbol; Type A is slot-aligned. The SLIV in the time-domain resource assignment encodes start + length jointly.
- Gotcha: a URLLC mini-slot can pre-empt an ongoing eMBB PDSCH; the eMBB UE is told via a pre-emption-indication (DCI 2_1) that those REs were punctured, so it can discard them from soft-combining.
3.6 Frequency-Domain Resource Allocation — RBG, RIV, PRB Bundling
Once the grid is numbered, the scheduler must hand a UE a subset of RBs, compactly, in a DCI that has only a handful of bits to spare. NR defines two resource-allocation types for this, plus a precoding-granularity concept that rides on top. Knowing all three is what lets you read a real DCI dump.
Type 0 — RBG bitmap. The BWP's RBs are grouped into Resource Block Groups (RBGs) of size P (2, 4, 8 or 16 RBs, chosen from the BWP size by TS 38.214 Table 5.1.2.2.1-1). The DCI carries one bit per RBG, so the allocation can be non-contiguous — ideal for frequency-selective scheduling and for fitting around other users. The cost is a wider bitmap field.
Type 1 — RIV. A single contiguous block of RBs, encoded as a Resource Indicator Value that packs the start RB and the length into one compact number: RIV = NBWP·(L−1)+RBstart when L−1 ≤ NBWP/2, and a complementary form otherwise. Cheaper DCI, but contiguous only.
PRB bundling (PRG). Separately, the UE may assume the gNB used the same precoder across a Precoding Resource block Group (PRG) — 2 RBs, 4 RBs, or the whole allocation ("wideband"). A larger PRG lets the UE average its channel estimate across more pilots (better estimate, lower noise); a smaller PRG lets the gNB steer each sub-band independently (better selective gain). The trade is configured by prb-BundlingType (static or dynamic), per TS 38.214 §5.1.2.3.
Expert read- RBG size P grows with BWP size (2→4→8→16). A wide BWP with a small P would need an impractically long bitmap, so the spec coarsens the granularity as the BWP widens.
- Type 0's bitmap and Type 1's RIV have different bit-widths; the DCI size must be resolved before blind decoding (Chapter 7) — a mismatch is a classic cause of "DCI not found".
- PRG is a receiver assumption, not a transmission: it tells the UE how widely it may average DMRS. Over-large PRG on a frequency-selective channel quietly degrades the channel estimate.
- Gotcha: VRB-to-PRB interleaving (§3.2.3) interacts with PRG — interleaved distributed allocations and wideband PRG are mutually exclusive in practice, since the precoder cannot be "wideband" over scattered PRBs.
3.7 Antenna Ports — the Logical Reference Frame
An antenna port is not a physical antenna. It is a logical reference defined entirely by its DMRS pattern: "the channel over which a symbol on this port is conveyed is the one you estimate from this port's reference signal." How many physical elements sit behind a port, and what precoding mixes them, is internal to the transmitter and never signalled — which is exactly what lets a vendor change antenna hardware without any UE-side spec change.
| Port range | Signal | Direction |
|---|
| 0–11 | PUSCH DMRS | UL |
| 1000–1011 | PDSCH DMRS | DL |
| 1000–1003 | SRS | UL |
| 2000 | PDCCH DMRS | DL |
| 3000–3031 | CSI-RS | DL |
| 4000 | SS/PBCH (PBCH DMRS) | DL |
| 5000+ | DL Positioning RS (PRS) | DL |
Table 3.7 — Antenna-port numbering (TS 38.211 §6.3.1, §7.4). The number tells you which signal's reference frame you are in. (Note: in NR the SS/PBCH uses port 4000 — there is no LTE-style "port 0" for broadcast.)
Expert read- Two ports are QCL (quasi-co-located) if large-scale properties — delay spread, Doppler, average delay, or the spatial-RX beam — measured on one may be applied to receive the other. The entire TCI/beam-indication machinery (Chapter 9 / appendices) rests on this relation.
- Different signals own different port ranges, so the port number alone tells you the signal type and direction.
- More layers ⇒ more orthogonal DMRS ports, and orthogonal ports are a finite, CDM-grouped resource. Running out of them — not raw antenna count — is what caps practical MU-MIMO pairing.
- Gotcha: because a port is its DMRS, two UEs co-scheduled on overlapping REs must use DMRS ports from different CDM groups (or different scrambling) or their channel estimates collide.
3.8 Slot Timing Relationships — K0, K1, K2
The frame structure only becomes a working system once the pieces are timed relative to one another. NR ties the downlink grant, the data, the acknowledgement, and the uplink grant together with three slot offsets — K0, K1, K2 — each signalled per grant so the scheduler can adapt them to numerology and processing capability.
| Offset | From → To | Carried in / by |
|---|
| K0 | PDCCH (DL grant) → PDSCH | PDSCH-TimeDomainResourceAllocation (DCI 1_x) |
| K1 | PDSCH → HARQ-ACK on PUCCH | PDSCH-to-HARQ feedback timing (dl-DataToUL-ACK) |
| K2 | PUSCH grant (DCI 0_x) → PUSCH | PUSCH-TimeDomainResourceAllocation |
Table 3.8 — The scheduling offsets (TS 38.214 §5.1.2 / §6.1.2). All three are expressed in slots, so their wall-clock value scales with numerology — K1=2 is 1 ms at µ=0 but 250 µs at µ=2.
Expert read- The minimum legal K1/K2 is bounded by the UE's processing-time capability (N1 for PDSCH decode, N2 for PUSCH prepare, in symbols) — the scheduler cannot ask for an ACK sooner than the UE can decode.
- A K0=0 ("same-slot") grant is the low-latency case but leaves the UE almost no decode budget; cross-slot (K0≥1) trades latency for power saving and relaxed timelines.
- K1 lands the ACK in a slot whose UL symbols actually exist — so K1 and the TDD pattern (§3.4) are co-designed; a K1 pointing at an all-DL slot is a configuration error.
- Gotcha: in carrier aggregation the offsets are counted on the scheduled cell's numerology, not the scheduling cell's — a frequent cross-carrier timing bug.
3.9 Worked Example — A Slot at µ=1 on n78
Slot 13 of frame 27 on a 100 MHz n78 cell, DDDSU pattern
- Locate the slot. SFN = 27. At µ=1 there are 2 slots/subframe, so slot 13 = subframe 6, second slot (13 = 6·2 + 1).
- Resolve direction. In the 5-slot DDDSU period, 13 mod 5 = 3 → the special (S) slot. From
tdd-UL-DL-ConfigurationCommon: 10 DL symbols, 3 flexible (guard), 1 UL. - Frame the grid. 100 MHz at µ=1 → 273 CRBs. Point A anchors CRB 0; the dedicated DL BWP spans all 273 RBs (PRB 0 ↔ CRB 0 here).
- Allocate frequency. PDSCH on PRB 100–149 (50 RBs) via Type 1: RBstart=100, L=50 → one RIV. Symbols 2–9 (mapping Type A), VRB-to-PRB non-interleaved.
- Time the transaction. DL grant (PDCCH) in this slot, K0=0 → PDSCH same slot. K1=2 → HARQ-ACK on PUCCH two slots later, landing in the next period's U slot.
- Check the guard. The 3 flexible symbols (≈107 µs) give dmax ≈ 16 km — comfortable for an n78 macro cell.
3.10 Field-Engineering Notes
- BWP misalignment after handover. Source BWP 1 might be 80 MHz/30 kHz; target's 50 MHz/30 kHz. A UE that does not reconfigure promptly ends up on the wrong subset — throughput collapses until it resyncs.
- Slot-format mismatch in CA. Aggregated cells with different TDD patterns confuse cross-carrier HARQ timing. Align slot patterns within a band combination.
- Initial BWP too narrow. SIB1 mandates the initial DL BWP carry SIB1/RMSI; under-size it and SIB1 misses its BLER target — an access-only failure invisible on dedicated BWPs.
- CRB-vs-PRB confusion. RRC config uses CRB; DCI uses PRB; logs report both. Mix them and every RB index is wrong by the BWP offset — the classic off-by-N bug.
- Guard period vs cell radius. A cell engineered for 16 km that switches to a one-symbol guard period (≈5.3 km) will see uplink-into-downlink collisions from edge UEs.
- K1 pointing at a DL slot. A HARQ-ACK timing that lands on a slot with no UL symbols silently drops the ACK; co-design K1 with the TDD pattern.
3.11 References
Primary 3GPP specifications
- TS 38.211 §4.3 frame structure · §4.4 resource grid, CRB/PRB, Point A · §6.3.1 antenna ports · §7.3.1.6 VRB-to-PRB mapping
- TS 38.213 §11 slot formats · §11.1.1 SFI & DCI 2_0 · DL/UL determination
- TS 38.214 §5.1.2 PDSCH RA (Type 0 RBG, Type 1 RIV, PRG, SLIV, K0) · §6.1.2 PUSCH RA (K2)
- TS 38.331 BWP-Downlink/Uplink (Common & dedicated) · tdd-UL-DL-ConfigurationCommon/Dedicated · txDirectCurrentLocation
Where to go next
- Ch. 6 SS/PBCH — how the half-frame and kSSB anchor cell search to this grid.
- Ch. 7 PDCCH — CORESET placement on the CRB grid and blind decoding of these DCIs.
- Ch. 18 Scheduling — how the gNB chooses RBGs, K-offsets and slot formats in real time.
Live lab
Part I · Foundations — Chapter Four
Modulation Schemes
From π/2-BPSK at the cell edge to 1024-QAM at the cell centre — the six modulation orders NR uses, the exact constellations the spec mandates, the EVM each demands, and how the receiver turns a noisy I/Q sample back into soft bits.
TS 38.211 §5.1 (modulation mapper)TS 38.211 §6.3.1.1 / §7.3.1.1 (scrambling)TS 38.214 §5.1.3 (MCS)TS 38.101-1 §6.4/§6.5 (EVM)
After this chapter you will be able to
Write the exact I/Q mapping equation for every NR modulation order and explain its normalisation factor; compute spectral efficiency for any (Q
m, R) pair; explain Gray labelling, scrambling, and π/2-BPSK as concrete engineering tricks; turn a received sample into an LLR for the decoder; state the real 3GPP EVM requirement for each modulation and why 1024-QAM needs 2.5 %; list which modulation each physical channel uses; and read the four MCS tables a DCI can point into.
After channel coding and rate matching, the physical layer holds nothing but a stream of bits. Modulation is the rule that paints those bits onto the I/Q plane as complex symbols the radio can actually transmit. It is the most visual layer in the whole stack — a literal picture of dots — and yet it is governed by a handful of precise equations in TS 38.211 §5.1 that fix, to the last normalisation constant, exactly where every dot sits. This chapter takes you from that picture to those equations, then back out to the link-budget consequences that decide which constellation a UE is allowed to use at any moment.
4.1 What a Modulation Scheme Is
A modulation scheme maps bits to complex-valued symbols on the I/Q plane. The modulator groups the bit stream Qm bits at a time and maps each group to one point in a 2-D constellation of 2Qm points. The receiver does the reverse: for each received complex sample it decides which constellation point was most likely sent and recovers Qm bits. Larger Qm means more bits per symbol — and a more crowded constellation, so the receiver needs a cleaner signal to tell the points apart. Crucially, every NR constellation is power-normalised so the average symbol energy is 1; that is the job of the 1/√2, 1/√10, 1/√42 … factors in the mapping equations, and it is what lets the link budget compare modulations on equal footing.
4.2 The Six NR Modulation Orders
| Modulation | Qm | Points | SE (bits/sym) | Norm. factor | EVM req. (TS 38.101-1) | Used in |
|---|
| π/2-BPSK | 1 | 2 | 1.0 | 1/√2 | 30 % (≈ −10.5 dB) | DFT-s-OFDM PUSCH/PUCCH coverage |
| QPSK | 2 | 4 | 2.0 | 1/√2 | 17.5 % (≈ −15.1 dB) | PBCH, PDCCH, PUCCH, low-MCS data |
| 16-QAM | 4 | 16 | 4.0 | 1/√10 | 12.5 % (≈ −18.1 dB) | Mid-MCS data |
| 64-QAM | 6 | 64 | 6.0 | 1/√42 | 8 % (≈ −21.9 dB) | High-MCS data (default ceiling) |
| 256-QAM | 8 | 256 | 8.0 | 1/√170 | 3.5 % (≈ −29.1 dB) | qam256 table |
| 1024-QAM | 10 | 1024 | 10.0 | 1/√682 | 2.5 % (≈ −32 dB) | qam1024 — Rel-17 PDSCH, FR1 |
Table 4.1 — NR modulation orders (TS 38.211 §5.1; EVM from TS 38.101-1 §6.5.2, UE transmit). Each step adds 2 bits/symbol and demands roughly 6 dB more SNR. The normalisation factor sets average symbol power to 1. Spectral efficiency carried = Qm·R, not Qm alone — the code rate R matters just as much.
In plain English. Picture six grids of dots. QPSK has 4; 16-QAM packs 16 into the same square; 1024-QAM crams in 1024. The receiver guesses which dot was sent by finding the closest one to its noisy measurement. As the grid gets denser, even a tiny transmitter imperfection can nudge the measurement past the halfway line to the wrong dot — so the transmitter must be progressively cleaner, which is exactly what the tightening EVM requirement enforces.
Expert read- The ≈6 dB-per-step rule is pure geometry: doubling Qm halves the minimum Euclidean distance, and halving a distance quarters its square — the term that sets error probability — which is ≈6 dB.
- The transmitter's EVM ceiling, not raw SNR, sets the top rung: 1024-QAM needs EVM ≤ 2.5 %, achievable only by well-calibrated FR1 high-band radios.
- Spectral efficiency is Qm×R — a low-rate 64-QAM can carry fewer bits than a high-rate 16-QAM, which is exactly why the MCS tables interleave them (§4.9).
- Gotcha: the SNR thresholds above are indicative for a typical fading channel and code rate; the real operating point comes from the BLER-targeting outer loop, not a fixed table.
4.2.1 The Constellation Mapping Equations
The spec does not leave the dot positions to the implementer — TS 38.211 §5.1 fixes them exactly. Every higher-order QAM is built from pairs of bits that select an odd-integer coordinate (…,−3,−1,+1,+3,…) on each axis, then the whole grid is scaled by the normalisation factor so the average power is 1.
TS 38.211 §5.1 — modulation mapperQPSK: d = (1/√2)·[ (1−2b(2i)) + j(1−2b(2i+1)) ]
16-QAM: d = (1/√10)·[ (1−2b(4i))(2−(1−2b(4i+2))) + j(1−2b(4i+1))(2−(1−2b(4i+3))) ]
64-QAM: d = (1/√42)·[ (1−2b(6i))(4−(1−2b(6i+2))(2−(1−2b(6i+4)))) + j(1−2b(6i+1))(4−(1−2b(6i+3))(2−(1−2b(6i+5)))) ]
256-QAM: d = (1/√170)·[ (1−2b(8i))(8−(1−2b(8i+2))(4−(1−2b(8i+4))(2−(1−2b(8i+6))))) + j(1−2b(8i+1))(8−(1−2b(8i+3))(4−(1−2b(8i+5))(2−(1−2b(8i+7))))) ]
1024-QAM: d = (1/√682)·[ (1−2b(10i))(16−(1−2b(10i+2))(8−(1−2b(10i+4))(4−(1−2b(10i+6))(2−(1−2b(10i+8)))))) + j(1−2b(10i+1))(16−(1−2b(10i+3))(8−(1−2b(10i+5))(4−(1−2b(10i+7))(2−(1−2b(10i+9)))))) ]
π/2-BPSK: d(i) = (ejπ(i mod 2)/2/√2)·[ (1−2b(i)) + j(1−2b(i)) ]
The nesting deepens by one level (×2 inner factor) per +2 bits — QPSK→16→64→256→1024 — and each is Gray-labelled automatically. Exact clauses: §5.1.3 (QPSK) … §5.1.7 (1024-QAM).
Expert read- The normalisation constants are exactly √(mean squared radius): √2, √10, √42, √170, √682 for 4/16/64/256/1024-QAM. They guarantee E[|d|²]=1 so a power-control or SNR figure means the same thing across modulations.
- The nested structure ((2−(1−2b))…) is what makes the labelling Gray automatically (§4.3) — bit pairs map to adjacent odd levels in Gray order.
- π/2-BPSK is the only order whose mapping is index-dependent (the e^{jπ(i mod 2)/2} term rotates every other symbol) — the source of its low-PAPR property (§4.5).
- Gotcha: these equations assume the bits are already scrambled (§4.4); modulating un-scrambled bits is a classic test-vector bug that produces a valid-looking but undecodable signal.
4.3 Gray Mapping and Bit Labelling
NR labels the constellation points with a Gray code, so that any two physically adjacent points differ in exactly one bit. Since the overwhelmingly most likely demodulation error is mistaking a point for its nearest neighbour, Gray labelling converts each such symbol error into a single bit error rather than two or three — a free reduction in bit-error rate for the downstream decoder.
Expert read- The decoder works on bits, not symbols; Gray mapping minimises BER for a given symbol-error rate — often the difference between a clean LDPC decode and a failure near threshold.
- It enables clean soft LLRs: with Gray mapping, each bit's likelihood is computed almost independently from the I or Q coordinate (§4.6), which is exactly what the LDPC/polar soft decoders consume.
- The mapping is fixed in TS 38.211 §5.1 — never signalled or negotiated; both ends hard-code the same labelling.
- Gotcha: Gray coding only helps against nearest-neighbour errors. Strong phase noise or residual CFO causes diagonal (2-bit) jumps — another reason high-order QAM needs tight EVM and good tracking.
4.4 Scrambling Before Modulation
Just before modulation, NR XORs the coded bits with a Gold sequence seeded by the UE's RNTI and the cell ID. Two cells — or two co-scheduled UEs — carrying similar data on overlapping resources then produce uncorrelated bit patterns, so inter-cell interference looks like noise the decoder can average out rather than structured signal it might lock onto.
TS 38.211 §7.3.1.1 (DL) / §6.3.1.1 (UL)b̃(i) = ( b(i) + c(i) ) mod 2, with cinit = nRNTI·215 + q·214 + NID, where q ∈ {0,1} is the codeword index and NID is the (configured) scrambling identity, defaulting to the physical cell ID.
Expert read- Scrambling whitens interference: without it, a neighbour's identical data could correlate and create structured interference the LDPC decoder cannot average out.
- The seed includes the codeword index q, so the two codewords of a rank-5–8 transmission scramble differently.
- It is the same Gold generator as DMRS/CSI-RS (Chapter 20); only the cinit context differs — data uses the RNTI, pilots use slot/symbol indices.
- Gotcha: a wrong cinit (e.g. a stale RNTI after reconfiguration) makes descrambling fail silently — the CRC just fails, looking exactly like a coverage problem.
4.5 π/2-BPSK and Low-PAPR Transmission
Standard BPSK flips between +1 and −1 on the I axis; the transition passes straight through the origin, momentarily collapsing the envelope to zero and forcing the power amplifier to back off. π/2-BPSK rotates every other symbol by 90° (the ejπ(i mod 2)/2 term in §4.2.1), so the trajectory slides around the unit circle and never reaches the origin. Peak-to-average power ratio drops by roughly 3 dB versus QPSK, handing a power-limited cell-edge UE about 3 dB more usable transmit power — pure coverage.
4.5.1 Transform Precoding (DFT-s-OFDM) and Allowed Modulations
π/2-BPSK is not available everywhere — it is a tool of transform precoding, the DFT-s-OFDM uplink waveform. With transform precoding enabled, an extra DFT spreads each modulation symbol across the whole allocation before the IFFT, producing a near-single-carrier, low-PAPR waveform. In that mode NR permits π/2-BPSK, QPSK, 16-, 64- and 256-QAM. With transform precoding disabled (ordinary CP-OFDM, used on all downlink and on high-SINR uplink), π/2-BPSK is not used and the constellations are the standard QAM set — with 1024-QAM available on PDSCH (FR1, Rel-17) but not on PUSCH.
Expert read- PAPR sets how hard the PA must back off to stay linear; lower PAPR = higher average power for the same PA = more coverage — the whole point of π/2-BPSK on the cell edge.
- The gain is real only when the UE is power-limited (at PCMAX). A cell-centre UE with power to spare gains nothing and would just throw away spectral efficiency.
- Optional spectrum-shaping filters on top of π/2-BPSK push PAPR lower still; the spec fixes only the EVM/emission masks and lets the UE choose the filter.
- Gotcha: transform precoding is a per-BWP/per-grant choice (msg3 and configured by RRC); mixing up whether it is on changes both the allowed modulations and the DMRS structure.
4.6 Soft Demodulation — From I/Q to LLRs
The LDPC and polar decoders downstream do not want hard 0/1 decisions — they want soft information: for each coded bit, a log-likelihood ratio (LLR) whose sign is the best guess and whose magnitude is the confidence. The demodulator produces these from the equalised I/Q sample. For Gray-mapped QPSK the result is beautifully simple — each bit's LLR is just a scaled I or Q coordinate — and higher QAM uses a per-bit max-log approximation that reduces to distances to the nearest 0-subset and 1-subset of points.
Expert read- A confident bit (large |LLR|) pins a check node in the LDPC decoder; an uncertain one (|LLR|≈0) lets the code's parity structure decide. Throwing away the magnitude — hard-deciding too early — costs ≈2 dB.
- The 1/σ² scaling means accurate noise/interference estimation feeds straight into LLR quality; an over-confident LLR (σ² underestimated) can make the decoder diverge.
- Max-log LLRs (nearest-point distances) are the practical choice — near-optimal and cheap; full log-sum-exp buys a fraction of a dB.
- Gotcha: LLRs must be computed on the equalised, per-RE channel-normalised sample (Y/Ĥ); skipping the channel weighting biases every LLR by the local fading gain.
4.7 EVM — Error Vector Magnitude
Error Vector Magnitude measures how far, on average, the transmitter's actual symbols land from their ideal constellation points — the residual after the receiver has equalised the channel. It is the single number that decides whether a radio can run high-order QAM at all: an EVM floor caps the constellation no matter how strong the signal is, because it acts like a noise the receiver can never remove.
| Modulation | UE Tx EVM (TS 38.101-1) | ≈ dB | Implication |
|---|
| π/2-BPSK | 30 % | −10.5 dB | Built for coverage — very tolerant |
| QPSK | 17.5 % | −15.1 dB | Robust; control channels |
| 16-QAM | 12.5 % | −18.1 dB | Mid-rate data |
| 64-QAM | 8 % | −21.9 dB | High-rate data |
| 256-QAM | 3.5 % | −29.1 dB | Needs a clean, well-calibrated PA |
| 1024-QAM | 2.5 % | −32 dB | FR1 high-band only; tightest requirement |
Table 4.2 — UE transmit EVM requirements (TS 38.101-1 §6.5.2.2). The gNB has comparable requirements in TS 38.104 §6.5.2. EVM acts like an irreducible noise floor: even at infinite SNR, an 8 % EVM caps the effective SNR near 22 dB, which is why it — not the link budget alone — gates 256/1024-QAM.
4.8 Modulation per Physical Channel
Not every channel is free to pick a constellation. Control and broadcast channels are fixed at robust low orders; only the shared data channels walk the full MCS ladder.
| Channel / signal | Modulation | Notes |
|---|
| PBCH | QPSK | Fixed — must decode at cell edge |
| PDCCH | QPSK | Fixed — control must be robust |
| PDSCH | QPSK … 1024-QAM | Per MCS table; 1024-QAM FR1/Rel-17 |
| PUSCH | π/2-BPSK / QPSK … 256-QAM | π/2-BPSK only with transform precoding |
| PUCCH F0/F1 | sequence selection / BPSK / QPSK | 1–2 UCI bits |
| PUCCH F2/F3/F4 | QPSK (π/2-BPSK option F3/F4) | Larger UCI payloads |
| PSS / SSS | BPSK-based sequences | m-/Gold sequences, not data QAM |
| PRACH | Zadoff-Chu | Constant-amplitude, not a QAM constellation |
| DMRS / CSI-RS / PT-RS | QPSK-based (from Gold) | Reference signals, fixed |
Table 4.3 — Modulation by channel (TS 38.211). The rule of thumb: anything that must be decoded blind or at the cell edge is QPSK or lower; only the scheduled shared channels (PDSCH/PUSCH) climb to high-order QAM.
4.9 MCS-to-Modulation Mapping
For the shared data channels, the DCI carries a 5-bit MCS index into one of four tables (TS 38.214 Tables 5.1.3.1-1…-4, detailed in Chapter 8). Each row gives a (Qm, target code rate R, spectral efficiency) triple — so the MCS index implicitly selects the constellation, and the same index means different things depending on which table the UE was configured with.
- Table 1 (default): up to 64-QAM (Qm=6).
- Table 2 (qam256): up to 256-QAM (Qm=8).
- Table 3 (low spectral efficiency): up to 64-QAM, conservative R for URLLC reliability.
- Table 4 (qam1024, Rel-17): up to 1024-QAM (Qm=10).
Expert read- The table is RRC-configured and the CQI table must match; a mismatch decodes every TB at the wrong (Qm,R) and looks exactly like coverage loss.
- Table 3 trades peak rate for reliability — lower code rates at each index reach URLLC's 10−5 BLER target.
- 1024-QAM (Table 4) needs EVM ≤ 2.5 % (§4.7) — only well-calibrated FR1 high-band radios qualify.
- Gotcha: a few high MCS indices are reserved to signal "reuse the previous Qm" on a retransmission; reading them as fresh modulation is a classic trace-analysis error.
4.10 Worked Example — Bits to Symbols and Back
Mapping and spectral efficiency for one MCS
- Pick the point. 16-QAM, bits b=0110. I-pair (b0,b2)=(0,1)→(1−0)(2−(1−2·1))=1·3=3? Apply §4.2.1: I=(1−2·0)(2−(1−2·1))=(+1)(2−(−1))=+3·(1/√10).
- Normalise. The 1/√10 factor puts the outermost points at ±3/√10 ≈ ±0.95, so average power = 1.
- Spectral efficiency. Take MCS with Qm=6 (64-QAM) and R=0.85 → SE = 6×0.85 = 5.1 bits/symbol/RE.
- Per-RB rate. 156 data REs/RB-slot × 5.1 ≈ 796 information bits per RB per slot (before TBS quantisation, Chapter 8 / Appendix B).
- Decode path. Receiver equalises Y/Ĥ → computes per-bit LLRs (§4.6) → descrambles soft (sign-flips by c(i)) → LDPC decode → CRC.
4.11 References
Primary 3GPP specifications
- TS 38.211 §5.1 modulation mapper (all constellations) · §6.3.1.1 / §7.3.1.1 scrambling
- TS 38.214 §5.1.3 / §6.1.4 MCS tables and code-rate selection
- TS 38.101-1 §6.4/§6.5 UE transmit EVM & modulation accuracy · Annex F EVM measurement
- TS 38.104 §6.5 gNB transmit EVM requirements
Where to go next
- Ch. 5 Channel coding — what produces the bits this chapter modulates.
- Ch. 8 PDSCH — the full MCS/TBS chain that selects Qm and R.
- Ch. 16 Link adaptation — how the scheduler walks the modulation staircase in real time.
Live lab
Part I · Foundations — Chapter Five
Channel Coding — LDPC and Polar Codes
Two coding families do all the heavy lifting in NR: LDPC carries the data, polar carries the control. This is the chapter where you meet both end-to-end — from the transport-block CRC, through segmentation and the base-graph lift, through rate matching and the redundancy versions, to the polar reliability sequence and its list decoder — and learn exactly why 3GPP chose each.
TS 38.212 §5.1 (CRC)§5.2 / §6.2 / §7.2 (LDPC chain)§5.3 (polar)§5.4 (rate matching)§5.5 (concatenation)
After this chapter you will be able to
Walk the complete transport-block processing chain; pick BG1 or BG2 by hand for any (A, R) and state the mother code rate and the punctured systematic columns; segment a TB into code blocks with the right CRCs; trace the four redundancy versions through the circular buffer and explain bit interleaving and limited-buffer rate matching; construct a polar code from the reliability sequence; explain distributed-CRC, PC bits, and the three polar rate-matching modes; and name the CRC polynomial each channel uses and why DCI masks it with the RNTI.
Every payload bit on the NR air interface is wrapped in error-correcting code before it is ever modulated. The choice of code is a four-way trade between block length, code rate, decoding cost, and floor behaviour — and no single code wins on all four. So 3GPP split the job: a pair of LDPC base graphs for the long, high-rate data channels, and polar codes for the short, ultra-reliable control channels, with two tiny block codes for the very smallest payloads. This chapter follows a transport block all the way through that machinery and then does the same for a control message, so that by the end the words "BG2, lifted by Zc=208, RV2, E=13200" read as a sentence rather than a riddle.
5.1 Two Coding Families, Two Jobs
The right code depends on what it must protect. Long data blocks at high rate want a code that is cheap to decode in parallel and near-capacity — that is LDPC. Short control blocks want a code with no error floor and clean rate matching at tiny lengths — that is polar. Below a dozen bits even polar is overkill, so NR falls back to Reed–Muller and simplex/repetition.
| Code | Where | Block length | Why this code |
|---|
| LDPC | PDSCH, PUSCH (data) | up to 8448 info bits/CB | Near-Shannon at high rate; parallel decode; IR-HARQ by reading more parity |
| Polar | PBCH, PDCCH, UCI > 11 bits | ~12–1706 info bits | No error floor at short blocks; clean rate matching; CRC-aided list decode |
| Reed–Muller | UCI 3–11 bits | 3–11 bits | Lowest decode cost in that range |
| Simplex / repetition | UCI 1–2 bits | 1–2 bits | Trivial overhead |
Table 5.1 — NR channel-coding families (TS 38.212). The split is deliberate: LDPC and polar each occupy the regime the other handles poorly.
In plain English. LDPC and polar are opposite in spirit. LDPC is a sparse web of parity equations; the decoder passes "beliefs" back and forth along the web until every equation is satisfied. Polar takes N raw channels and, through a recursive transform, manufactures N synthetic channels — some almost perfect, some almost useless — then puts information only on the good ones and freezes the rest to zero. Both reach capacity as blocks grow; they differ at the short, high-reliability extreme that control signalling lives in.
It is worth saying what NR left behind. LTE carried data on turbo codes and control on tail-biting convolutional codes. Turbo decoding is inherently serial — its trellis must be walked forward and backward — which caps throughput and burns power at the multi-gigabit rates NR targets, and turbo codes show a stubborn error floor at the very high code rates 256/1024-QAM demand. LDPC's sparse graph decodes in parallel with no such floor, and polar's list decoder beats convolutional codes at the short control lengths while rate-matching cleanly to any size. The two new families were chosen precisely where the old ones ran out of road.
5.2 The Transport-Block Processing Chain
Before diving into either code, it helps to see the whole assembly line. A transport block (TB) handed down from the MAC layer passes through a fixed sequence of stages (TS 38.212 §7.2 for PDSCH, §6.2 for PUSCH): attach a CRC, choose the base graph, segment into code blocks with their own CRCs, LDPC-encode each block, rate-match each to its share of the granted resources, concatenate, and pass the result to scrambling and modulation (Chapter 4).
5.3 LDPC — Base Graphs and Code Blocks
LDPC — Low-Density Parity-Check — is defined by a sparse parity-check matrix: every codeword bit participates in only a handful of parity equations. That sparsity is the whole point; it makes the iterative belief-propagation decoder cheap and massively parallel, which is exactly what multi-Gbps NR data needs. NR does not invent a fresh matrix per transport block — it stores two compact base graphs, BG1 and BG2, and lifts the one it picks.
TS 38.212 §7.2.2 — base-graph selectionA ≤ 292 → BG2 · R ≤ 0.25 → BG2 · (A ≤ 3824 and R ≤ 0.67) → BG2 · otherwise → BG1.
Kcb = 8448 (BG1) / 3840 (BG2).
Expert read- "Low-density" means few messages per decode round, so LDPC is cheap and parallel — the reason it, not turbo, carries NR data.
- NR stores only the two base graphs of shift values and lifts them by Zc (§5.3.2); that structure is what makes a hardware decoder feasible.
- The decoder consumes soft LLRs from the demapper (Chapter 4); LLR quality (Gray mapping + good channel estimate) sets how few iterations are needed.
- Gotcha: LDPC has a small error floor at very low rates — exactly why NR hands short, ultra-reliable control to polar instead.
5.3.1 Mother Code Rate and the Punctured Systematic Columns
Each base graph defines a mother code rate — the lowest rate it natively produces before any rate matching. BG1's is 1/3 (22 information columns), BG2's is 1/5 (10 information columns). One subtlety trips up every newcomer: the first two systematic columns (2·Zc information bits) are always punctured — encoded into the parity but never transmitted. The receiver reconstructs them from the parity, which buys coding gain for free.
5.3.2 Lifting and Circulants
Each base graph is a small matrix of shift values — 46×68 for BG1, 42×52 for BG2. To get a concrete parity-check matrix it is lifted by a factor Zc drawn from one of eight sets (Zc up to 384): every non-zero entry expands into a Zc×Zc circulant (a cyclically shifted identity), and a blank becomes a Zc×Zc zero block. The result is a structured matrix of up to ~26,000 columns — all generated on the fly from two tiny tables.
Expert read- Circulant structure is what makes a parallel decoder feasible: Zc rows share one shift and process together.
- Zc is the smallest lift whose size covers the code block, so one base graph serves many TBS values; the base-graph choice (§5.3) is the orthogonal "which code" axis.
- The last code block is zero-padded with filler bits to reach the lifted size; the rate matcher skips them on read-out.
- Gotcha: miscounting filler bits desyncs the entire rate matcher — a classic implementation trap that fails the CRC and mimics a coverage problem.
5.3.3 Code-Block Segmentation
If the CRC-attached TB exceeds the base graph's Kcb, it is sliced into C equal code blocks, each given its own 24-bit CB-CRC (gCRC24B), and each LDPC-encoded independently.
5.4 Rate Matching, Bit Interleaving and HARQ
LDPC produces a fixed mother codeword, but the scheduler grants an arbitrary number of bits E. Rate matching bridges the two: it lays the codeword in a circular buffer, reads out exactly E bits from a redundancy-version offset, and interleaves them across the modulation. This stage is also where incremental-redundancy HARQ lives.
5.4.1 The Circular Buffer and Redundancy Versions
The systematic and parity bits are written into a circular buffer. A transmission reads E bits starting at one of four redundancy-version offsets (RV0–RV3). RV0 begins on the systematic bits and is self-decodable; later RVs deliver fresh parity the receiver soft-combines with what it kept — so the effective code rate falls with every retransmission. The practical order is RV0 → RV2 → RV3 → RV1.
5.4.2 Bit Interleaving
The selected E bits are then passed through a bit interleaver with one row per modulation bit (Qm rows): bits are written by rows and read by columns. This spreads consecutive coded bits across the Qm bit-positions of each QAM symbol, so a single deeply-faded symbol damages many codewords a little rather than one codeword a lot — the LDPC decoder copes far better with the former.
5.4.3 Limited-Buffer Rate Matching (LBRM)
A UE cannot store every LLR of an enormous TB across HARQ rounds, so NR caps the usable buffer with limited-buffer rate matching: the circular buffer length is Ncb = min(N, Nref), where Nref is derived from the UE's declared soft-buffer size. The gNB must keep the effective code rate within what that buffer supports, or retransmissions stop adding usable parity.
5.4.4 Code-Block Concatenation
Finally, the rate-matched code blocks are concatenated back into one bit stream of exactly the granted size G (TS 38.212 §5.5), ready for scrambling and modulation. The boundaries are implicit — the receiver knows C, E and the segmentation rule, so no explicit delimiters are sent.
Expert read- RV0 is self-decodable (starts on systematic bits) — first transmissions use it; later RVs are usually only worth sending after a NACK.
- IR-HARQ beats repetition because each RV adds new parity: a packet that failed at R=0.6 may decode at an effective R=0.3 after combining.
- LBRM ties the coding scheme to UE memory: exceed Nref and the highest-rate parity is simply unavailable, capping peak throughput on cheap UEs.
- Gotcha: mismatched filler-bit handling between gNB and UE shifts every bit after the last code block — a CRC failure that looks exactly like poor coverage.
5.5 Polar Codes
Polar codes were the youngest entrant in NR's coding bake-off and won the control channels outright. The construction is striking: a recursive transform turns N ordinary channels into N synthetic channels whose reliabilities polarize toward either near-perfect or near-useless. Carry the K information bits on the most reliable synthetic channels, freeze the rest to a known zero, and you have a capacity-achieving code with no error floor at the short lengths control needs.
In plain English. Imagine 512 noisy phone lines of middling quality. Polar coding lets you "trade quality between lines": through a fixed sequence of pairwise combinations, you sacrifice some lines to make others nearly perfect, until the set splits into a clean half and a hopeless half. You then speak your real words only down the clean lines and send a known silence down the hopeless ones. The receiver, knowing which lines are which and what the silence should be, can untangle the combination and recover every word — even though no single physical line was ever good enough on its own.
5.5.1 Channel Polarization and the Reliability Sequence
TS 38.212 §5.3.1.2 — universal reliability sequence Q0N−1A single length-1024 sequence (Table 5.3.1.2-1) ranks every channel index 0…1023 from least to most reliable. For an (N, K) code, take the K most-reliable indices < N; place information bits there and freeze the rest. N = 2n, with n ≤ 9 (N ≤ 512) for downlink and n ≤ 10 (N ≤ 1024) for uplink.
5.5.2 Distributed CRC and PC Bits
Raw polar is decoded by Successive Cancellation, but NR strengthens it. On the downlink (PDCCH, PBCH) the CRC is distributed — its bits are interleaved among the information bits so the list decoder can prune wrong paths early (and even terminate early), not just at the end. On the uplink, short UCI uses parity-check (PC) bits — a few extra frozen-like bits set from earlier bits — to the same end. Both turn the CRC from a final pass/fail into an active steering signal for the decoder.
5.5.3 Polar Rate Matching — Repetition, Puncturing, Shortening
The polar mother length N is a power of two, but the granted size E rarely is. After a 32-way sub-block interleaver, NR matches N to E with one of three modes, chosen by comparing E with N and the code rate (TS 38.212 §5.4.1):
5.5.4 SCL Decoding
The decoder is Successive-Cancellation List (SCL) with list size L ∈ {1, 4, 8, 16, 32}. It explores the bit-decision tree, keeps the L most-likely partial paths alive at each step, prunes the rest, and lets the distributed CRC select the survivor.
Expert read- List size L trades complexity for performance: L=1 is plain SC; larger L recovers from early wrong decisions a single-path decoder cannot.
- Distributed CRC lets SCL prune early and even terminate as soon as an interleaved CRC fails — a real latency saver on PDCCH blind decoding.
- Polar has no error floor at short block lengths — the decisive reason PBCH/PDCCH/UCI use it while data uses LDPC.
- Gotcha: L is a UE choice within limits; a cheap UE with small L underperforms the link budget the gNB assumed, showing as worse-than-expected PDCCH BLER.
5.5.5 Where Polar Is Used
- PBCH — K = 56 after CRC, N = 512, E = 864.
- PDCCH — K up to ~140 after CRC, N up to 512, E = 108·(aggregation level).
- UCI > 11 bits — K up to 1706, N up to 1024 (uplink, with PC bits).
5.6 CRC Families and Polynomials
NR uses several CRC polynomials, sized to the payload and, for control, doing double duty as an address. TS 38.212 §5.1 fixes each one exactly.
| Where | CRC | Generator polynomial g(D) |
|---|
| TB, A > 3824 | 24A | D²⁴+D²³+D¹⁸+D¹⁷+D¹⁴+D¹¹+D¹⁰+D⁷+D⁶+D⁵+D⁴+D³+D+1 |
| TB, A ≤ 3824 | 16 | D¹⁶+D¹²+D⁵+1 |
| Per code block | 24B | D²⁴+D²³+D⁶+D⁵+D+1 |
| DCI / PBCH | 24C | D²⁴+D²³+D²¹+D²⁰+D¹⁷+D¹⁵+D¹³+D¹²+D⁸+D⁴+D²+D+1 |
| UCI 12–19 bits | 6 | D⁶+D⁵+1 |
| UCI ≥ 20 bits | 11 | D¹¹+D¹⁰+D⁹+D⁵+1 |
Table 5.2 — NR CRC polynomials (TS 38.212 §5.1). DCI uses 24C with its tail XOR-masked by the RNTI, so the CRC simultaneously detects errors and confirms the message is addressed to this UE.
Expert read- RNTI-masking the DCI CRC means addressing and error-detection are one operation — no separate destination field is needed.
- CB-CRC (24B) is what enables CBG-level HARQ (§5.3.3) — without per-CB checks you could not NACK individual code blocks.
- CRC length scales with payload to keep the undetected-error rate low without wasting overhead on tiny blocks.
- Gotcha: a UE blind-decoding PDCCH tests many candidates; the RNTI-masked CRC is the only thing separating "my DCI" from noise — a rare CRC false-pass is what produces phantom grants.
5.7 Worked Example — A Transport Block Through the Chain
A = 16,000-bit TB, target rate R ≈ 0.7
- CRC. A > 3824 → attach 24A → B = 16,024 bits.
- Base graph. A > 3824 and R = 0.7 > 0.67 → BG1 (Kcb = 8448, mother rate 1/3).
- Segment. B = 16,024 > 8448 → C = 2 code blocks; each gets a 24B CB-CRC → ~8,036 bits/CB.
- Lift. Pick the smallest Zc with 22·Zc ≥ 8036 → Zc = 384 (22×384 = 8448). Each CB is LDPC-encoded; the first 2·Zc = 768 systematic bits are punctured.
- Rate match. Granted G bits split across the 2 CBs → E per CB. Read E bits from RV0, skip fillers, interleave over Qm rows.
- Concatenate. The two rate-matched blocks join into G bits → scramble (Ch.4) → QAM. A NACK later re-sends RV2: fresh parity, lower effective rate.
5.8 References
Primary 3GPP specifications
- TS 38.212 §5.1 CRC · §5.2 LDPC · §5.3 polar · §5.4 rate matching · §5.5 concatenation · §6.2/§7.2 TB processing
- TR 38.802 NR physical-layer design rationale (code selection)
Where to go next
- Ch. 4 Modulation — what consumes these coded, rate-matched bits.
- Ch. 7 PDCCH — polar coding, distributed CRC and blind decoding in action.
- Ch. 8 PDSCH — the full TBS/MCS/HARQ chain that drives this coder.
Live labs
Part II · Downlink Channels & Signals — Chapter Six
SS/PBCH Block
A four-symbol beacon that turns a phone from lost into ready in thirty milliseconds — and a friendly walk through the exact 3GPP machinery that makes it possible.
TS 38.211 §7.4
TS 38.212 §7.1
TS 38.213 §4.1, §13
TS 38.214 §5.1.6
TS 38.215 §5.1
TS 38.331 (MIB / SIB1)
Rel-18 baseline
After this chapter you will be able to
Compute PCI from any PSS/SSS pair; write the PSS m-sequence and SSS Gold-sequence recursions from memory; derive the PBCH-DMRS scrambling seed for any SSB index, half-frame and L
max; place SSB candidate symbols for Cases A through G; trace the MIB through CRC-24C, polar encoding, rate matching, scrambling, and QPSK modulation; derive Point A from SS
ref and k
SSB; decode pdcch-ConfigSIB1 to a concrete CORESET#0 layout; compute SS-RSRP/RSRQ/SINR; and explain CD-SSB, NCD-SSB, SMTC, and the Rel-17/18 multi-TRP and RedCap deltas.
6.1 What the SSB Is, and Why It Has to Be Tiny
A 5G phone wakes up in a city it has never visited. It does not know the operator, the carrier frequency it ought to land on, the cell identity, the system-frame number, the slot offset, the subcarrier-spacing of the control region — nothing. Inside thirty milliseconds it must know all of those things, decode the first broadcast message, and be on the verge of sending a random-access preamble. The signal that closes that gap is the SS/PBCH Block — the SSB — and it is one of the smallest, most carefully optimised pieces of waveform in the entire physical layer.
The SSB carries four logically distinct things, in this order of decode-time priority:
- PSS (Primary Synchronization Signal) — provides symbol-timing lock and narrows the cell identity to one of three groups1.
- SSS (Secondary Synchronization Signal) — resolves the cell identity to exactly one of 1,008 PCIs2.
- PBCH (Physical Broadcast Channel) — carries the Master Information Block (MIB), 24 bits, augmented with 8 timing/transport bits to form the 32-bit PBCH payload that together steers the UE to CORESET#03.
- PBCH-DMRS — the demodulation pilot that lets the UE estimate the channel and read three bits of SSB index for free, before PBCH is even decoded4.
SSB at a glance. 4 contiguous OFDM symbols × 240 subcarriers (= 20 PRBs) = 960 resource elements. Of those, 127+127 are PSS+SSS, 432 are PBCH data, 144 are PBCH-DMRS, and the rest are reserved (guard subcarriers around PSS/SSS). The whole block is one beam; a single gNB usually transmits Lmax ∈ {4, 8, 64} blocks back-to-back to form a burst set, repeated every 20 ms by default5.
Expert read
- The SSB carries only what's needed to bootstrap: timing, PCI, and a pointer (MIB) to where the rest of the system info lives — everything else is deferred to SIB1.
- It's repeated per sweep beam (Fig 6.9), so every extra RE is multiplied by the beam count — a hard pressure to stay tiny.
- Fixed format is essential: the UE demodulates PBCH before it knows the numerology, so the SSB uses a known SCS per band.
- Gotcha: because it's blind-detected, SSB robustness sets the true cell edge — a cell can be 'covered' for SSB yet fail PDSCH, or vice-versa; RSRP is measured on SSB for exactly this reason.
6.2 The SSB Resource Grid — Four Symbols, 240 Subcarriers, 960 REs
The SSB occupies 4 contiguous OFDM symbols in time and 240 contiguous subcarriers (20 PRBs) in frequency, regardless of numerology. Inside that grid, the four signals are packed in a fixed, beam-independent layout — the same layout on every cell, every gNB vendor, in every band:
| Symbol (l) | k = 0 – 55 | k = 56 – 182 | k = 183 – 239 | Notes |
| l0 + 0 | Reserved | PSS (127 SC) | Reserved | Reserved REs set to zero, not modulated |
| l0 + 1 | PBCH + PBCH-DMRS across all 240 SCs | DMRS every 4th SC, offset ν |
| l0 + 2 | PBCH + DMRS | SSS (127 SC) | PBCH + DMRS | SSS centred, PBCH on the edges |
| l0 + 3 | PBCH + PBCH-DMRS across all 240 SCs | Symmetric to l0+1 |
Table 6.1 — SSB RE map, per TS 38.211 §7.4.3.1, Table 7.4.3.1-1. l0 is the first SSB symbol; its value depends on the SSB-burst Case (Sec. 6.3.2). DMRS RE positions inside symbol l0+1, l0+3 (and the edge regions of l0+2) are k = 4n + ν, with ν = NIDcell mod 4.
Why the PSS/SSS sit on the middle 127 SCs and not the outermost ones: they must be cleanly observable under arbitrary frequency-domain windowing by the UE's coarse correlator, which has not yet aligned to the carrier centre. The 56-SC guard on each side keeps the correlation peak unambiguous even when the UE's frequency-offset estimate is a couple of subcarriers off.
6.2.1 PSS — the length-127 m-sequence
The PSS is a single Binary Phase-Shift Keying (BPSK) modulated m-sequence of length 127, mapped to the 127 central subcarriers of symbol l0. There are exactly three of them, indexed by NID(2) ∈ {0, 1, 2}. The recursion is the same in all three cases; only the cyclic offset changes.
TS 38.211 § 7.4.2.2.1 — PSS sequence generation
The PSS for cell index NID(2) is
$$ d_{\text{PSS}}(n) \;=\; 1 - 2\,x\!\bigl((n + 43\,N_{\text{ID}}^{(2)}) \bmod 127\bigr), \qquad n = 0,1,\ldots,126 $$
where the underlying length-127 m-sequence x(i) is generated by
$$ x(i+7) \;=\; \bigl(x(i+4) + x(i)\bigr) \bmod 2 $$
with initial condition [x(6) x(5) x(4) x(3) x(2) x(1) x(0)] = [1 1 1 0 1 1 0].
In plain English. Picture a 7-stage shift register, like a row of seven flip-flops. You start it with the bit pattern 1110110. Every clock tick, you take the contents of stage 4 and stage 0, XOR them together, and push the result back into stage 6. The bit that falls out of stage 0 becomes the next output. Do this 127 times and the register comes back to where it started — that's why it's an "m-sequence of length 127". To make three different PSS sequences, you don't build three different registers; you build one register and read its output at three different starting points, 43 steps apart from each other on the 127-step loop. That spacing is the magic ingredient: it makes the three sequences look as different as possible from each other, so the phone can tell them apart even when the signal is buried in noise.
Why only three sequences?
Initial acquisition is the
most expensive correlation the UE ever performs. Doubling the number of PSS hypotheses would double battery drain during cell search. PSS carries only two bits of cell-ID information; the rest (336×) lives on the SSS, correlated
after PSS has already locked symbol timing. Three was a deliberate floor.
6.2.2 SSS — the length-127 Gold sequence
The SSS is the product of two length-127 m-sequences with independent shifts. There are 336 distinct SSS, indexed by NID(1) ∈ [0, 335].
TS 38.211 § 7.4.2.3.1 — SSS sequence generation
$$ d_{\text{SSS}}(n) \;=\; \bigl[1 - 2\,x_0((n + m_0) \bmod 127)\bigr]\,\bigl[1 - 2\,x_1((n + m_1) \bmod 127)\bigr] $$
with
$$ m_0 \;=\; 15\,\left\lfloor \tfrac{N_{\text{ID}}^{(1)}}{112} \right\rfloor + 5\,N_{\text{ID}}^{(2)}, \qquad m_1 \;=\; N_{\text{ID}}^{(1)} \bmod 112 $$
Recursions:
$$ x_0(i+7) = (x_0(i+4) + x_0(i)) \bmod 2 \qquad \text{init } [x_0(6)\ldots x_0(0)] = [0,0,0,0,0,0,1] $$
$$ x_1(i+7) = (x_1(i+1) + x_1(i)) \bmod 2 \qquad \text{init } [x_1(6)\ldots x_1(0)] = [0,0,0,0,0,0,1] $$
In plain English. If PSS was one shift register read at three starting points, SSS is two shift registers, multiplied together. One register has different feedback taps than the other, so they generate completely different bit streams. You choose a starting point in each register — m₀ for the first, m₁ for the second — and the choice depends on which of the 336 cell identities you want to transmit. By multiplying the two streams element-by-element, you get a much larger family of 336 distinct sequences, all of which still look unique enough that the phone can tell them apart with one quick correlation. That's the trick of a Gold sequence: two cheap registers can manufacture many more good codes than one expensive register ever could.
The PCI follows immediately:
$$ N_{\text{ID}}^{\text{cell}} \;=\; 3\,N_{\text{ID}}^{(1)} \;+\; N_{\text{ID}}^{(2)} \quad \in \; \{0, 1, \ldots, 1007\} $$
Physical Cell Identity, TS 38.211 §7.4.2.1
Operator planning rules of thumb. Two neighbours sharing PSS (same PCI mod 3) create PSS collisions and degrade timing lock — avoid in tight clusters. Two cells sharing the DMRS comb offset (same PCI mod 4) cause PBCH-DMRS interference — relevant in dense small-cell deployments.
6.2.3 PBCH — payload, polar coding, scrambling, modulation
The PBCH is the only channel in the SSB that actually carries application-layer bits. Its raw Master Information Block (MIB) payload is just 24 bits (23 information bits + the BCCH-BCH-Message choice bit) — the physical layer then appends 8 timing bits to reach the 32-bit PBCH payload (Sec. 6.2.4). The MIB is defined in TS 38.331 as the IE BCCH-BCH-Message → MIB:
| Field | Width | Meaning |
| systemFrameNumber | 6 (MSBs) | SFN bits [9:4]. The 4 LSBs [3:0] are appended by the PHY as ā0–ā3 (Table 6.2); of those, the 2nd & 3rd LSB are conveyed by the PBCH scrambling phase v (TS 38.212 §7.1.2), not scrambled. |
| subCarrierSpacingCommon | 1 | SCS for SIB1/Msg.2/Msg.4: 0 → 15 kHz (FR1) or 60 kHz (FR2); 1 → 30/120 kHz. |
| ssb-SubcarrierOffset | 4 (LSBs) | kSSB bits [3:0]. MSB kSSB[4] is in the PBCH payload extension. Range 0–23 (FR1) / 0–11 (FR2). |
| dmrs-TypeA-Position | 1 | PDSCH/PUSCH DMRS Type A symbol position: 2 or 3. |
| pdcch-ConfigSIB1 | 8 | ★ controlResourceSetZero (4 b) + searchSpaceZero (4 b). Single most consequential field. |
| cellBarred | 1 | If 1, UE may not access this cell. |
| intraFreqReselection | 1 | Allow reselection to other intra-freq cells when the current is barred. |
| spare | 1 | Reserved; repurposed in Rel-18 as redCap indicator candidate. |
| = 23 bits (MIB) → 24-bit higher-layer payload (A) |
The PHY appends 8 additional bits to the 24-bit BCCH-BCH-Message — the 4 LSBs of the SFN, the half-frame indicator nhf, and 3 case-dependent bits (kSSB MSB + 2 reserved for FR1; the 3 SSB-index MSBs for Lmax=64) — yielding the 32-bit PBCH payload (Ā = 32) defined by TS 38.212 §7.1.1:
TS 38.212 § 7.1 — BCH transport processing
PBCH pipeline:
Ā = 32 payload bits (24-bit MIB + 8 PHY) → +CRC-24C (L=24) → K = 56 bits
→ payload bit interleaving (Table 7.1.1-1, SFN-aware)
→ Polar encoder (mother N = 512)
→ sub-block interleaving (32 columns, Table 5.3.1.1-1)
→ rate matching to E = 864 bits
→ scrambling with Gold seq c(i) seeded by N_ID^cell
→ QPSK → 432 modulation symbols → 432 PBCH REs
The N = 512 polar mother code and K = 56 information bits use the polar sequence Q
0N−1 of TS 38.212 §5.3.1.2 Table 5.3.1.2-1. CRC-24C is g
CRC24C(D) = D
24+D
23+D
21+D
20+D
17+D
15+D
13+D
12+D
8+D
4+D
2+D+1.
6.2.4 PBCH payload extension — the 8 PHY bits in detail
The 32-bit PBCH payload does not appear from nowhere. The PHY appends exactly 8 bits onto the 24-bit MIB before CRC-24C attachment. Their layout (TS 38.212 §7.1.1) is Lmax-dependent. Note the indexing: in TS 38.212 these are āA…āA+7 with A = 24, so ā0 below denotes āA+0:
| PHY bit | Lmax = 4 | Lmax = 8 | Lmax = 64 |
| a̅0 | SFN bit [3] | SFN bit [3] | SFN bit [3] |
| a̅1 | SFN bit [2] | SFN bit [2] | SFN bit [2] |
| a̅2 | SFN bit [1] | SFN bit [1] | SFN bit [1] |
| a̅3 | SFN bit [0] | SFN bit [0] | SFN bit [0] |
| a̅4 | nhf (half-frame) | nhf | nhf |
| a̅5 | kSSB MSB ([4]) | kSSB MSB ([4]) | SSB index bit [5] |
| a̅6 | reserved | reserved | SSB index bit [4] |
| a̅7 | reserved | reserved | SSB index bit [3] |
Table 6.2 — PBCH payload extension bits (TS 38.212 §7.1.1). The first four added bits are always the 4 LSBs of the SFN, then the half-frame bit. For Lmax=64 the three MSBs of iSSB ride in PBCH bits ā5..7 (decoded); the three LSBs are encoded by PBCH-DMRS sequence selection (detected pre-decode). For Lmax≤8 the PBCH-DMRS conveys all 2 or 3 bits of iSSB, ā5 carries kSSB's MSB, and ā6/ā7 are reserved. (In FR1 shared spectrum / NR-U the spec also defines L̄max=10 and 20, which place 1 or 2 SSB-index MSBs in ā6/ā7.)
Why kSSB is split across MIB and PHY. 4 bits in MIB + 1 bit in PHY = 5 bits total = range 0..31, enough for FR1's 0..23 SSB→Point-A subcarrier offsets. FR2 needs only 0..11, so the MIB 4 bits suffice and the PHY bit is unused.
6.2.5 PBCH-DMRS — the cleverest reference signal in 5G
PBCH-DMRS is the demodulation pilot for PBCH. It sits on every fourth subcarrier (k = 4n + ν) in symbols l0+1 and l0+3, plus the same comb on the top/bottom 57/56 subcarriers of symbol l0+2 — 144 pilot REs in total. The comb offset is just ν = NIDcell mod 4.
What makes PBCH-DMRS unusual is that its sequence selection is information-bearing. The UE doesn't have to decode PBCH to learn the SSB index; it correlates the received DMRS against 4 or 8 candidate sequences and picks the strongest. Three bits of iSSB are conveyed by the choice of DMRS sequence itself.
TS 38.211 § 7.4.1.4.1 — PBCH DMRS sequence
QPSK-mapped from a length-31 Gold sequence with Nc = 1600:
$$ r_l(m) \;=\; \tfrac{1}{\sqrt{2}}\!\bigl(1 - 2\,c(2m)\bigr) \;+\; j\,\tfrac{1}{\sqrt{2}}\!\bigl(1 - 2\,c(2m+1)\bigr) $$
initialised with
$$ c_{\text{init}} \;=\; 2^{11}\,(\bar{i}_{\text{SSB}} + 1)\Bigl(\bigl\lfloor \tfrac{N_{\text{ID}}^{\text{cell}}}{4} \bigr\rfloor + 1\Bigr) \;+\; 2^{6}\,(\bar{i}_{\text{SSB}} + 1) \;+\; (N_{\text{ID}}^{\text{cell}} \bmod 4) $$
where, for Lmax = 4, $\bar{i}_{\text{SSB}} = i_{\text{SSB}} + 4\,n_{\text{hf}}$, and for Lmax ∈ {8, 64} simply $\bar{i}_{\text{SSB}} = i_{\text{SSB}}$.
In plain English. The formula looks intimidating, but it's really just a recipe for a 31-bit serial number. You take the SSB index (which beam this is), add 1, multiply it by a number derived from the PCI. Then you sprinkle in the SSB index again at a different position, and finally tag on the PCI's bottom two bits. The result is a unique seed for every combination of cell, beam, and half-frame. Two SSBs from different beams or different cells will produce completely different DMRS sequences from the same generator. So when the phone correlates the received pilots against a candidate sequence and gets a strong match, it learns not just "this beam exists" but "this beam is from PCI X, beam index Y, half-frame Z" — all in one operation, before it even tries to decode the PBCH bits.
6.2.6 Point A and frequency-domain anchoring
Decoding the SSB locks PCI, SFN, and iSSB — but the UE still doesn't know where the cell's RB grid starts in absolute frequency. That's what Point A is for. Point A is the lowest subcarrier of the common RB grid; everything (PDCCH BWP, PDSCH BWP, RACH RO, CSI-RS, you name it) is measured from there.
TS 38.211 § 4.4.4.2, TS 38.331 ServingCellConfigCommonSIB
The relationship UE uses to derive Point A from the SSB:
$$ f_{\text{PointA}} \;=\; f_{\text{SSref}} \;-\; (10 \cdot \text{SCS}_{\text{SSB}} \cdot 12) \;-\; (k_{\text{SSB}} \cdot \text{SCS}_{\text{common}}) $$
where fSSref is the absolute frequency of SSB subcarrier 120 (the carrier centre of PSS/SSS), the 10·SCS·12 term backs off the bottom 10 RBs of the SSB block, and kSSB is in units of SCScommon for FR1 (15 kHz) and SCSSSB/2 for FR2 (120 kHz).
In plain English. Think of Point A as the cell's origin on the frequency axis — the 0 mark on the ruler. The phone just decoded the SSB and knows where the SSB sits in frequency. It also got a small offset value (kSSB) in MIB. So the calculation is: "start at the SSB centre, slide down 10 resource blocks to reach the bottom of the SSB, then slide a few more subcarriers based on what kSSB told me." That landing point is Point A. From there, every other resource the network describes — CORESET#0, the initial BWP, RACH, CSI-RS — is measured as a distance from Point A. Get this calculation off by one subcarrier and you'll decode the cell ID correctly but completely miss SIB1 — a classic field debug scenario.
Once Point A is known, the UE turns offsetToPointA and locationAndBandwidth from SIB1 into a concrete PRB index for CORESET#0, the initial DL BWP, and every other resource it will be told about. Get Point A wrong by one subcarrier and every subsequent RB index is off by one — symptom seen in the field as "UE decodes MIB fine but never decodes SIB1".
6.3 SSB Burst Sets and Beam Sweeping
NR's defining departure from LTE: the SSB is not always-on and not omnidirectional. The gNB transmits an SS-burst set — Lmax SSBs back-to-back inside a single 5 ms half-frame, each on a different beam — and goes silent for the rest of the period (default 20 ms). The next burst-set sweeps the same beam grid again. This is the entire premise of mmWave NR coverage.
6.3.1 Lmax — how many beams in one burst
| Frequency range | Carrier frequency | Lmax | SSB SCS options |
| FR1 low | f ≤ 3 GHz | 4 | 15, 30 kHz |
| FR1 high | 3 GHz < f ≤ 7.125 GHz | 8 | 15, 30 kHz |
| FR2-1 | 24.25 – 52.6 GHz | 64 | 120, 240 kHz |
| FR2-2 (Rel-17+) | 52.6 – 71.0 GHz | 64 | 120, 480, 960 kHz |
Table 6.3 — Maximum SSBs per burst set. TS 38.213 §4.1.
6.3.2 Candidate symbol positions — Case A through Case G
| Case | SCS | FR / band | First symbols of each SSB | Lmax |
| A | 15 kHz | FR1 | {2, 8} + 14·n; n = 0,1 (≤3 GHz) or 0..3 (>3 GHz) | 4 / 8 |
| B | 30 kHz | FR1 paired/SUL | {4, 8, 16, 20} + 28·n; n = 0 or 1 | 4 / 8 |
| C | 30 kHz | FR1 unpaired | {2, 8} + 14·n; n = 0..1 or 0..3 | 4 / 8 |
| D | 120 kHz | FR2-1 | {4, 8, 16, 20} + 28·n; n ∈ {0,1,2,3, 5,6,7,8, 10,11,12,13, 15,16,17,18} | 64 |
| E | 240 kHz | FR2-1 | {8, 12, 16, 20, 32, 36, 40, 44} + 56·n; n ∈ {0,1,2,3, 5,6,7,8} | 64 |
| F | 480 kHz | FR2-2 | {2, 9} + 14·n compressed pattern | 64 |
| G | 960 kHz | FR2-2 | {2, 9} + 14·n further compressed | 64 |
Table 6.4 — SSB candidate positions per TS 38.213 §4.1.1 – §4.1.5.
6.3.3 Beam-sweep timing and SSB index conveyance
| Lmax | Bits of iSSB | Carried by |
| 4 | 2 | 2 bits via PBCH-DMRS sequence selection (4 candidate DMRS), plus nhf folded into īSSB. |
| 8 | 3 | All 3 bits via PBCH-DMRS sequence selection (8 candidate DMRS); nhf in PBCH payload extension. |
| 64 | 6 | 3 LSBs via PBCH-DMRS sequence, 3 MSBs via PBCH payload extension bits a̅5..7. |
Table 6.5 — Conveyance of SSB index.
🧪
Open the interactive lab
PBCH-DMRS Studio — animated DMRS comb, cinit BigInt walkthrough, Gold-sequence generation, 8-candidate SSB-index correlator.
→
6.3.4 CD-SSB and non-CD-SSB
Not every transmitted SSB is the same kind of SSB. The spec distinguishes two roles:
- CD-SSB — Cell-Defining SSB. The "real" cell. Its
pdcch-ConfigSIB1 points to a CORESET#0 carrying SIB1 for this cell. There is exactly one CD-SSB per physical cell. Standalone UEs camp here.
- NCD-SSB — Non-Cell-Defining SSB. Additional SSBs the gNB transmits inside the carrier (typically inside other BWPs) so that a UE on a different BWP can still measure SSB-based RSRP. NCD-SSBs do not carry a valid pointer to SIB1; their
pdcch-ConfigSIB1 is set to indicate "no SIB1 for this SSB" (a specific encoding in Table 13-1.., dependent on FR/SCS).
In an SA deployment with one BWP per UE, the CD-SSB is all you have. In a CA / multi-BWP deployment, NCD-SSBs let measurement happen on every BWP without forcing the UE to retune to the BWP-with-CD-SSB just to measure. The UE knows the type from the pdcch-ConfigSIB1 byte: any encoding that points at a valid CORESET#0/SS#0 is CD; anything else is NCD.
6.3.5 SMTC — SSB Measurement Timing Configuration
For RRM measurement (RSRP/RSRQ for handover, cell reselection, conditional handover), the UE doesn't decode SSBs continuously. The network tells it when to look via the SMTC — an IE in MeasObjectNR:
TS 38.331 SSB-MTC, TS 38.331 MeasObjectNR
SSB-MTC ::= SEQUENCE {
periodicityAndOffset CHOICE { sf5, sf10, sf20, sf40, sf80, sf160 INTEGER (0..159) },
duration ENUMERATED { sf1, sf2, sf3, sf4, sf5 }
}
So SMTC says "every 20 ms, starting at offset 5, look at SSBs for 2 subframes." Outside that window, the UE doesn't even tune to that frequency. SMTC is what enables low-power inter-frequency measurements: the UE only wakes its receiver during the SMTC window.
6.4 Cell Search Procedure (UE side)
6.4.1 Synchronization raster — where to even look
The UE does not scan every 5 kHz step of the band. It scans the synchronization raster, a sparse band-specific grid expressed as a GSCN (Global Synchronization Channel Number).
TS 38.101-1 § 5.4.3.1 — GSCN ↔ frequency
For 0 – 3000 MHz: SSref = N · 1200 kHz + M · 50 kHz, M ∈ {1, 3, 5} (default 3), GSCN = 3·N + (M − 3)/2, range 2–7498
For 3000 – 24250 MHz: SSref = 3000 + N · 1.44 MHz, GSCN = 7499 + N, range 7499–22255
For 24250 – 100000 MHz: SSref = 24250.08 + N · 17.28 MHz, GSCN = 22256 + N, range 22256–26639
6.4.2 The five decode stages
Step-by-step UE cell search
- Coarse PSS correlation. Sample the RF stream at 30.72 Msps (or the bandwidth-appropriate rate), run three parallel time-domain correlators against the three PSS sequences, in a sliding 1 ms window. Pick the strongest peak above the noise floor (typically >3σ). Record the symbol-timing offset and NID(2).
- Fine timing & CFO estimation. Refine the peak to sample-level resolution. Use the PSS auto-correlation phase to estimate carrier-frequency offset (typical accuracy ±50 Hz at 0 dB SNR).
- SSS decoding. With timing locked, FFT symbol l0+2 and correlate the 127-SC SSS against 336 hypothesis sequences. Pick the strongest; output NID(1). Compute PCI = 3·NID(1) + NID(2).
- PBCH-DMRS detection. Generate Lmax∈{4,8} candidate DMRS sequences from the PCI; correlate each against the received pilot REs. Pick the strongest; output iSSB (lower 3 bits, plus nhf for Lmax=4).
- PBCH decode. Channel-estimate using PBCH-DMRS, equalise, soft-demap the 432 QPSK symbols, descramble with cinit, polar-decode (K=56, N=512), CRC-24C check. On success → SFN, kSSB[4] for FR1, SSB index MSBs for Lmax=64, plus the pdcch-ConfigSIB1 byte. The UE now knows where CORESET#0 lives and proceeds to chapter 7.
6.4.3 Receiver implementation notes
- Coherent vs non-coherent PSS. Non-coherent (magnitude-squared) PSS correlation is standard — the UE has no phase reference yet. Coherent extensions use the SSS phase from a previous SSB to lift the threshold (~3 dB win), useful in steady-state but not first acquisition.
- FFT vs time-domain. SSS is decoded in the frequency domain (after FFT) because SSS sits on 127 specific subcarriers. PSS may be detected in either domain; modern receivers run a small FFT once timing is approximately known.
- Joint vs sequential. Some receivers run PSS+SSS jointly across multiple half-frames to maximise diversity in low SNR. This costs latency but improves sensitivity by ~3 dB per added half-frame.
6.4.4 CORESET#0 — what pdcch-ConfigSIB1 actually decodes to
If you have to remember one field in the entire MIB, make it pdcch-ConfigSIB1. It is eight little bits, but those eight bits are what turn a phone that has "found a cell" into a phone that can "read the cell's settings". Splitting the byte in half: the top four bits are an index into one of TS 38.213 Tables 13-1 to 13-10 — and which table you use depends on the SSB subcarrier spacing, the PDCCH subcarrier spacing, and the minimum channel bandwidth. Each entry in those tables names a concrete CORESET#0 layout: how many resource blocks, how many symbols, and how far away from Point A it starts. The bottom four bits are an index into Tables 13-11 to 13-15, which name a concrete search-space schedule: which slots within the SSB period the UE should monitor, which symbol inside the CORESET the PDCCH starts on, and how many blind decoding candidates to try.
In plain English. The cell is telling the phone, in a code that's only one byte long, exactly two things: "the front door is here, this big" (the CORESET) and "knock at these times" (the monitoring schedule). The phone takes the byte, splits it into two halves, looks each half up in a published table — and now it knows precisely where and when to wait for the very next message, which will contain SIB1.
6.5 Worked Example — UE finds PCI 451 on n78
End-to-end with TS-compliant numbers
- UE is configured for n78. It cycles through GSCN values 7711, 7712, …, attempting PSS correlation. On GSCN 7811 (N = 7811 − 7499 = 312; SSref = 3000 + 312·1.44 = 3449.28 MHz) it finds PSS sequence #1 ⇒ NID(2) = 1.
- SSS correlation on symbol l0+2 identifies sequence #150 ⇒ NID(1) = 150 ⇒ PCI = 3·150 + 1 = 451.
- DMRS comb offset ν = 451 mod 4 = 3. UE generates 8 candidate PBCH-DMRS sequences (Lmax=8 on n78). Correlation peak picks iSSB = 3.
- cinit = 211·(3+1)·(⌊451/4⌋+1) + 26·(3+1) + (451 mod 4) = 2048·4·113 + 64·4 + 3 = 925955.
- Soft-demap, descramble with Gold sequence seeded by cinit, polar-decode. CRC-24C passes. MIB recovers:
SFN[9:4] = 0x1A (decimal 26; full SFN with PHY-bits = 27)
subCarrierSpacingCommon = 1 → 30 kHz (FR1)
ssb-SubcarrierOffset = 6 → k_SSB = 6
dmrs-TypeA-Position = 0 → symbol 2
pdcch-ConfigSIB1 = 0x9C → controlResourceSetZero = 9
searchSpaceZero = 12
cellBarred = 0 → cell accessible
intraFreqReselection = 1 → reselection allowed
spare = 0
- UE looks up TS 38.213 Table 13-4 with index 9: CORESET#0 = 24 RBs, 1 symbol, offset 12 RBs. With searchSpaceZero 12 (Table 13-11): O = 0, M = 1, first PDCCH symbol within CORESET = 3, 1 AL-4 candidate + 1 AL-8 candidate per monitoring occasion. UE starts monitoring DCI Format 1_0 scrambled by SI-RNTI in that CORESET. The next SIB1 transmission arrives in a few ms and the UE is ready to read it.
6.6 RRM Measurements on SSB — SS-RSRP, SS-RSRQ, SS-SINR
Once the UE is on the cell, it doesn't stop looking at SSBs — it measures them, continuously, for handover, beam selection, and RLM (radio-link monitoring). Three quantities are defined, all on SS reference signals (PBCH-DMRS + SSS together).
TS 38.215 §5.1.1 – §5.1.3 — SS-based measurements
SS-RSRP = linear average of power contributions (in W) of REs that carry SSS within the configured SSBs. Reported in dBm, range −156 to −31 dBm in 1-dB steps.
SS-RSRQ = (N · SS-RSRP) / SS-RSSI, where N is the number of RBs in the SSB measurement bandwidth and SS-RSSI is the total received power over those RBs across the SS-OFDM symbols. Reported in dB, range −43 to +20 dB.
SS-SINR = (signal power on SS REs) / (interference + noise power on the same REs). Reported in dB, range −23 to +40 dB.
All three are per-SSB-beam. The UE returns either the maximum across beams, or a list of the top N beams, depending on the nrofReportedRS in the reporting configuration. Beam-level RSRP is what BFR (beam failure recovery) uses to detect "current beam dead" and pick a new one.
6.7 Rel-17 and Rel-18 Deltas
- RedCap (Rel-17). Reduced-Capability UEs decode SSB normally but may use narrower CORESET#0 (12 RBs instead of 24/48/96) and a separately signalled SSB for RedCap (so legacy UEs still see the same broadcast cell). The spare MIB bit becomes a RedCap-indication candidate in Rel-18 to advertise "this cell supports RedCap UEs".
- Multi-TRP (Rel-17). Up to two SSB sets may be transmitted from two TRPs of the same cell, with TCI states distinguishing them. The UE measures both and reports per-TRP beam RSRP for joint scheduling.
- NES — Network Energy Saving (Rel-18). The SSB period can be temporarily elongated to 40, 80, or 160 ms in low-traffic hours via SIB signalling. UEs adjust their measurement period accordingly. This is the first standardised mechanism for reducing AOAOA energy on the always-on signal.
- FR2-2 (Rel-17). 480 / 960 kHz SCS introduce Cases F and G; symbol density is so high that the SSB and SIB1 both fit inside a fraction of a symbol's worth of legacy timing — receiver design changes substantially.
6.8 Field-Engineering Notes & Edge Cases
- PCI collisions in dense deployments. Two cells with the same PCI inside one neighbour relation produce SS-RS interference that no normal receiver can untangle. Symptom: UE camps fine but never decodes SIB1. Fix: PCI replan with mod 3 and mod 4 constraints.
- SSB < carrier centre offset.
ssb-SubcarrierOffset (kSSB) can be non-zero — the SSB does not have to sit on the carrier centre. UE uses kSSB + SSref to derive Point A; an off-by-one here breaks every subsequent RB index.
- FR2 missing beams. Lmax=64 is a ceiling, not a requirement. Real FR2 deployments often transmit 16 or 32. UE receives a "transmitted SSBs" bitmap in SIB1 (
ssb-PositionsInBurst) so it knows which iSSB are real.
- nhf ambiguity for Lmax=4. Because nhf is folded into īSSB, a misdetection shifts cinit and the descrambler fails. Robust receivers try both nhf = 0 and 1 in parallel.
- SSB transmit periodicity vs measurement periodicity. SIB1's
ssb-PeriodicityServingCell tells the UE the actual gNB SSB period; the UE assumes 20 ms for cell search but uses the SIB1 value for steady-state RRM measurement.
- CD-SSB silently switched to NCD-SSB. Some operators reconfigure their cells and turn an active CD-SSB into NCD without coordinating timing. UEs that hadn't refreshed SIB1 then fail with "valid MIB, no SIB1 found". Always re-read SIB1 after long sleep.
6.9 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §4.4.4 Point A · §7.3.3 PBCH scrambling · §7.4.1.4 PBCH-DMRS · §7.4.2 PSS/SSS · §7.4.3 SSB mapping
- TS 38.212 §5.3.1 polar codes · §7.1 BCH transport processing
- TS 38.213 §4.1 SSB candidate positions, Lmax · §13 Type0-PDCCH / CORESET#0 / SS#0
- TS 38.214 §5.1.6.2 PDSCH for SI-RNTI · §5.1.6.5 SSB-based RRM
- TS 38.215 §5.1.1 SS-RSRP · §5.1.2 SS-RSRQ · §5.1.3 SS-SINR
- TS 38.331 MIB · SIB1 · SSB-MTC · MeasObjectNR · ServingCellConfigCommon(SIB)
- TS 38.101-1 §5.4.3 sync raster (FR1) · §5.4.3.3 per-band GSCN ranges
- TS 38.101-2 §5.4.3 sync raster (FR2)
- TR 38.875 RedCap study · TR 38.864 NES study
Live labs that drill into this chapter
Part II · Downlink Channels & Signals — Chapter Seven
PDCCH — Physical Downlink Control Channel
Every byte your phone receives is permitted by one tiny instruction sent moments earlier. This chapter is about that instruction — where it lives, how it's encoded, and why the phone has to guess where to look for it.
TS 38.211 §7.3.2, §7.4.1.3
TS 38.212 §7.3
TS 38.213 §10
TS 38.214 §5.1
TS 38.321 §7.1 (RNTIs)
TS 38.331 (PDCCH-Config)
Rel-18 baseline
After this chapter you will be able to
Describe the REG → CCE → AL → candidate hierarchy; configure a CORESET (frequency-domain bitmap, duration, REG bundle size, CCE-to-REG mapping, TCI state); derive any interleaved CCE-to-REG mapping by hand using f(x); compute USS PDCCH candidate locations from RNTI, slot, and AL; budget blind decodes and CCE occupancy per SCS; recognise every DCI format (0_0 through 3_1) and the RNTI it pairs with; trace a DCI from payload through CRC ⊕ RNTI, polar encoding, rate matching, scrambling, and modulation; and reason about why two cells with the same RNTI configuration interfere on PDCCH but not on PDSCH.
7.1 What PDCCH Is — The Permission Slip
Every single byte your phone downloads is preceded, somewhere between fifty microseconds and a few milliseconds earlier, by a tiny instruction the gNB sent it. That instruction says which resource blocks contain the next chunk of data, how they were modulated, which redundancy version of the code it is, and a dozen other little facts. Without the instruction, the phone wouldn't know where to look. With it, the phone knows exactly where in the next slot or two to point its FFT. That instruction is called a DCI — Downlink Control Information — and the place it lives is the PDCCH, the Physical Downlink Control Channel.
PDCCH is the most-scheduled, most-monitored, most-decoded channel in the entire NR system. Every slot, on every cell, in every band, the gNB writes one or more DCIs into it, and every connected phone tries to find every DCI that might be addressed to it — without knowing in advance where the gNB wrote them. The whole chapter is, in some sense, a story about that mismatch: the gNB knows; the phone has to guess; and the spec arranges for the guessing to be cheap enough that the phone can do it 1,000 times per second on battery.
The PDCCH problem in one sentence. The base station has a few control bits to send. The phone doesn't know what those bits say, doesn't know how many bits are in the message, doesn't know which control region carries it, doesn't know which subset of that region was used, and doesn't know what aggregation level was chosen. It just has to find the message anyway, decode it, and act on it — all within a few hundred microseconds. PDCCH is the elegant system 3GPP built to make that possible.
7.2 The PDCCH Hierarchy — RE, REG, CCE, Aggregation Level, Candidate
PDCCH has five units of resource, each built from the one below it. Understanding the stack is the single most important thing in this chapter — every other PDCCH concept reduces to "how do these five things fit together?"
| Unit | Size | Built from | Purpose |
| RE | 1 SC × 1 symbol | — | The atom. PDCCH uses QPSK, so each RE carries 2 bits. |
| REG | 12 REs (1 RB × 1 symbol) | 12 REs | Resource Element Group. The smallest unit a CORESET assigns. 9 data REs + 3 DMRS REs. |
| CCE | 6 REGs (72 REs) | 6 REGs | Control Channel Element. The unit a DCI is mapped onto. 54 data REs + 18 DMRS = ~108 QPSK bits coded. |
| AL | 1, 2, 4, 8, or 16 CCEs | L · CCEs | Aggregation Level. How many CCEs a single DCI uses — chosen by the gNB based on link quality. |
| Candidate | 1 AL of CCEs | 1 AL | One specific placement of an AL within the CORESET. The unit the UE blind-decodes. |
Table 7.1 — The PDCCH unit hierarchy, per TS 38.211 §7.3.2.
In plain English. Imagine the CORESET as a small notice-board on the wall, divided into a grid of squares. The smallest single square is a RE — one resource element. Twelve squares stacked in a column make one REG. Six REGs glued together make one CCE — that's a single sticker the gNB can stamp its message on. A bigger sticker uses more CCEs in a row: 2, 4, 8, or 16 of them. The phone doesn't know which sticker has its name on it, so it has to peel back every legal sticker position and check. That's a candidate.
7.3 CORESET — The Control Resource Set
A CORESET is the time-frequency rectangle in which PDCCH lives. It is configured by RRC (ControlResourceSet IE in TS 38.331) and changes only when the network reconfigures the UE. Up to three CORESETs can be configured per BWP at any one time (each with a controlResourceSetId in 0–11, one of which may be CORESET#0); CORESET#0 is the special one decoded during cell search (Chapter 6).
7.3.1 Frequency-domain allocation — the 45-bit bitmap
The frequency layout of a CORESET is described by a 45-bit bitmap, frequencyDomainResources. Each bit covers a group of 6 contiguous resource blocks. With 45 bits × 6 RBs = 270 RB max, that covers any FR1 or FR2 channel up to ~273 RB.
TS 38.331 ControlResourceSet, TS 38.213 §10.1
frequencyDomainResources BIT STRING (SIZE (45))
Bit bi = 1 ⇔ RB group i is part of the CORESET. RB group i covers RBs [6·i, 6·i + 5] relative to the BWP starting RB, aligned to a 6-RB grid from RB 0 of the CC (not of the BWP).
Number of RBs in CORESET = popcount(bitmap) × 6.
Total REs available in the CORESET = NRB · Nsym · 12 of which 3·NRB·Nsym are DMRS and 9·NRB·Nsym are data — but only some REGs are usable as CCEs (see §7.3.3).
In plain English. The base station hands the phone a 45-bit string. Each "1" in that string means "there are 6 RBs of PDCCH here". The bitmap is aligned to the carrier, not the BWP — that's how a UE on a smaller BWP still knows where a CORESET sits inside the bigger carrier.
7.3.2 Time-domain duration — 1, 2, or 3 symbols
CORESETs are short in time. duration ∈ {1, 2, 3} OFDM symbols. CORESET#0 is special: pattern 1 (multiplexed in time with the SSB) supports 1, 2, or 3 symbols depending on the configuration table. The other two CORESETs (1, 2) are typically 1 or 2 symbols.
Why so short? Because every PDCCH symbol is a symbol the gNB cannot use for data on those RBs. PDCCH is overhead; you want to minimise it. The duration knob is a direct trade-off between PDCCH capacity and PDSCH throughput.
7.3.3 CCE-to-REG mapping — interleaved vs non-interleaved
Once you know how many REGs the CORESET has (= NRB × duration), you have to decide which REGs make up CCE 0, CCE 1, CCE 2, and so on. There are two strategies:
| Strategy | Use case | REG ordering |
| Non-interleaved | Static low-mobility, frequency-selective scheduling | CCE n uses REGs 6n..6n+5 in increasing CORESET index (frequency-first, then time). |
| Interleaved | High-mobility, diversity gain | REG bundles are scattered across the CORESET via a block interleaver f(x). One CCE's 6 REGs land in widely-separated frequency positions. |
Table 7.2 — CORESET CCE-to-REG mapping (TS 38.211 §7.3.2.2). Choice is per-CORESET via cce-REG-MappingType.
TS 38.211 § 7.3.2.2 — Interleaved CCE-to-REG mapping
Define R ∈ {2, 3, 6} (interleaverSize), L (REG bundle size, ∈ {2, 3, 6}), NREGCORESET = NRB × duration, and the number of bundles Nbundle = NREGCORESET / L. The interleaved bundle index of a CCE's i-th constituent bundle x ∈ [0, Nbundle − 1] is:
$$ f(x) \;=\; (r\,C + c + n_{\text{shift}}) \bmod \frac{N_{\text{REG}}^{\text{CORESET}}}{L} $$
where x = c·R + r, c = 0..C−1, r = 0..R−1, C = NREGCORESET/(L·R), and nshift ∈ {0..274} is the shiftIndex (≈ NIDcell mod NREG/L when not configured).
In plain English. Non-interleaved is the boring choice: CCE 0 is the first six REGs, CCE 1 is the next six, and so on. If the radio channel has a deep fade in that part of the spectrum, you're stuck. Interleaved is the diversity-aware choice: imagine you took the bundles and dealt them into stacks like a card dealer at a casino — first card to the first stack, second card to the second stack, around and around. By the time you finish dealing, each "CCE" (a CCE is a hand of 6 cards in this analogy) has cards drawn from all over the deck. A deep fade in any one part of the spectrum can only hurt a fraction of each CCE, so the polar code can still recover the message.
7.3.4 REG bundle size and precoder granularity
A REG bundle is the unit across which the gNB uses the same precoder. Within a bundle, the UE can assume channel coherence — meaning the DMRS pilots from one REG can extrapolate to estimate the channel for the data REs in the neighbour REGs of the same bundle. Bigger bundles = better channel estimate but coarser precoder granularity.
L = 6 is the "all REGs of a CCE share one precoder" choice — common in simple CORESETs. L = 2 or 3 trades better precoder agility for noisier channel estimation. precoderGranularity in ControlResourceSet can also be set to allContiguousRBs, which says "use one precoder across every contiguous RB region of the CORESET" — an even bigger granularity, very common in CORESET#0.
7.3.5 TCI states and QCL
Every CORESET has up to 64 candidate TCI states (tci-StatesPDCCH-ToAddList) and exactly one of them is active at any moment, switched by a MAC CE. A TCI state says "the channel of this CORESET's DMRS is quasi-co-located (QCL) with the channel of that other reference signal". The reference might be an SSB beam, a CSI-RS, or another PDCCH-DMRS. The QCL relationship can be of four types: Type A (Doppler, delay spread), B (Doppler shift, delay spread), C (Doppler, delay shift), D (Spatial Rx — beam direction).
For FR2 PDCCH, the TCI state's QCL-Type D is what tells the UE which receive beam to point its antenna at when listening for this CORESET. Without it, the UE has no idea which physical direction to look. That's why FR2 PDCCH always has a TCI state; FR1 typically uses TCI Type A only.
7.4 Search Spaces — Where to Look
A CORESET is just a place. A Search Space (SS) is the schedule for monitoring that place. The SS tells the UE: "in this CORESET, on these slots, with these aggregation levels, try this many candidates of each." Multiple SSs can be active simultaneously on the same CORESET; one for system info, one for paging, one for the UE's own data, and so on.
7.4.1 Common Search Space vs UE-specific Search Space
| Type | Name | RNTI | Purpose |
| CSS Type 0 | Common SS for SIB1 | SI-RNTI | Cell access. Configured by MIB pdcch-ConfigSIB1. |
| CSS Type 0A | Common SS for other SI | SI-RNTI | SIB2+ scheduling. |
| CSS Type 1 | Common SS for RACH | RA-RNTI, MsgB-RNTI, TC-RNTI | Random-access response. |
| CSS Type 2 | Common SS for paging | P-RNTI | Idle-mode paging. |
| CSS Type 3 | Common SS for group | INT-RNTI, SFI-RNTI, TPC-* RNTIs, etc. | Pre-emption indicators, slot-format updates, group power control. |
| USS | UE-specific SS | C-RNTI, MCS-C-RNTI, CS-RNTI, SP-CSI-RNTI | Per-UE scheduling. The dominant traffic. |
Table 7.3 — Search Space types per TS 38.213 §10.1. Each SS is configured by RRC (SearchSpace IE in PDCCH-Config).
7.4.2 The USS hashing function — Yp,ns
The UE-specific search space cannot place all UEs' candidates at the same CCEs every slot — that would cause collisions every slot. Instead, the spec defines a per-UE, per-slot hash that pseudo-randomly picks a different starting CCE every slot, every UE. The hash is the famous Yp recursion:
TS 38.213 § 10.1 — USS hashing function
For slot nsμ,f ≥ 0 and search-space-set index p:
$$ Y_{p,n_s} \;=\; (A_p \cdot Y_{p,n_s-1}) \bmod D $$
with initial condition $Y_{p,-1} = n_{\text{RNTI}} \ne 0$, modulus $D = 65537$, and multiplier
$$ A_p \;=\; \begin{cases} 39827 & p \bmod 3 = 0 \\ 39829 & p \bmod 3 = 1 \\ 39839 & p \bmod 3 = 2 \end{cases} $$
In plain English. You start with the UE's identifier (its C-RNTI, a 16-bit number unique to that UE in the cell), feed it into a "secret recipe" multiplier modulo a prime, and each slot you get a new pseudo-random number. That number tells the UE which CCE in the CORESET its candidates should start from. Two different UEs with different RNTIs will hit different CCEs in any given slot. Two slots for the same UE will hit different CCEs from one to the next. The hash is cheap (one multiply and one mod) but spreads candidates across the CORESET like an industrial-strength shuffle.
7.4.3 Candidate placement formula
TS 38.213 § 10.1 — PDCCH candidate CCE locations
For aggregation level L and candidate index m (m = 0..ML−1), the starting CCE of candidate m within search-space set s in slot nsμ,f:
$$ \text{CCE}_{m,s,L} \;=\; L \cdot \!\left( (Y_{p,n_s} + \left\lfloor \tfrac{m \cdot N_{\text{CCE,p}}}{L \cdot M_p^{(L)}} \right\rfloor + n_{\text{CI}}) \bmod \left\lfloor \tfrac{N_{\text{CCE,p}}}{L} \right\rfloor \right) \;+\; i $$
for i = 0..L−1 (the CCEs of one candidate). NCCE,p is the number of CCEs in CORESET p; nCI is the cross-carrier indicator (= 0 for non-CA UEs); Mp(L) is the number of configured candidates at AL L.
For CSS, Yp,ns is taken as 0 (no hashing).
7.5 Blind Decoding — Budgets and Trade-offs
The UE does not know which AL the gNB used. It tries them all — or rather, it tries as many as the spec allows. The total work is capped to keep silicon affordable.
7.5.1 BD and CCE budgets per slot
| μ | SCS | Max blind decodes / slot (MBD) | Max non-overlapped CCEs / slot (CCCE) |
| 0 | 15 kHz | 44 | 56 |
| 1 | 30 kHz | 36 | 56 |
| 2 | 60 kHz | 22 | 48 |
| 3 | 120 kHz | 20 | 32 |
Table 7.4 — Per-slot PDCCH monitoring budget per TS 38.213 §10.1 Tables 10.1-2 and 10.1-3. Higher SCS = shorter slots = less silicon time per slot = smaller budget.
Two budgets matter: the number of blind decode attempts (MBD) and the number of distinct CCEs covered by those attempts (CCCE). One blind decode of an AL16 candidate consumes 16 CCEs of the CCCE budget but just 1 of the MBD budget. So the constraint isn't "44 candidates total" — it's "44 candidates AND 56 CCEs". If the gNB tries to schedule four AL-16 candidates for one UE, that's 4 × 16 = 64 CCEs, over budget, not allowed.
7.5.2 Aggregation level adaptation
The gNB chooses the AL based on the UE's reported channel quality. A UE with strong RSRP and SINR can decode AL=1 (8 PDCCH coded bits per CCE × 1 = barely enough). A cell-edge UE needs AL=8 or 16 to gain the coding gain it requires. The gNB tracks CQI/SRS for every UE and adjusts AL slot-by-slot. The UE has no idea what AL was used — it tries them all and the one with a passing CRC wins.
In plain English. The base station thinks of AL like font size for a sign. A reader sitting close (good SNR) can read the smallest sign — AL=1. A reader far away (poor SNR) needs a bigger sign — AL=4 or 8. The same message can be written at any size; the bigger sizes just take up more space on the notice-board, so fewer messages fit per slot. The phone can't see the size from a distance, so it walks toward the board and tries every size that looks possible to be its message.
Expert read
- Two separate limits bind: blind-decode count (CPU) and CCE channel-estimation count (front-end) — a config can exhaust one while the other has room.
- Budgets scale with numerology and shrink with carrier aggregation (shared across cells) — dense CA can starve PDCCH capacity.
- This is why search-space and CORESET design is a real optimisation: over-configuring monitoring occasions blows the budget and the UE silently skips candidates.
- Gotcha: exceeding the budget isn't an error — the UE just drops lower-priority candidates per a rule, so some grants are never decoded → looks like random scheduling misses.
7.6 DCI Formats — The Two-Dozen Messages
As of Rel-18, TS 38.212 §7.3.1 defines 24 DCI formats, grouped into UL grants (0_x), DL grants (1_x), group-common DCIs (2_x), sidelink DCIs (3_x), and the multicast/broadcast (MBS) DL family (4_x). Each format has a fixed-ish field layout — variable lengths come from BWP-dependent fields like "frequency-domain resource assignment". (NR launched in Rel-15 with far fewer; the 0_3/1_3 multi-cell formats, 2_8/2_9, 3_2, and the 4_x MBS family are the newest additions.)
| Format | Direction | RNTI | Purpose | Release |
| 0_0 | UL | C-RNTI, TC-RNTI | Fallback PUSCH grant. Short, robust. | Rel-15 |
| 0_1 | UL | C-RNTI, MCS-C-RNTI, CS-RNTI, SP-CSI-RNTI | Full-feature PUSCH grant. | Rel-15 |
| 0_2 | UL | C-RNTI, MCS-C-RNTI, CS-RNTI | URLLC PUSCH grant — flexible field sizes. | Rel-16 |
| 0_3 | UL | C-RNTI, MCS-C-RNTI, CS-RNTI | Multi-cell scheduling: one PUSCH in one cell, or one PUSCH each in several cells. | Rel-18 |
| 1_0 | DL | C-RNTI, SI-RNTI, P-RNTI, RA-RNTI, TC-RNTI | Fallback PDSCH assignment. The first format every UE supports. | Rel-15 |
| 1_1 | DL | C-RNTI, MCS-C-RNTI, CS-RNTI | Full-feature PDSCH assignment. | Rel-15 |
| 1_2 | DL | C-RNTI, MCS-C-RNTI, CS-RNTI | URLLC PDSCH assignment. | Rel-16 |
| 1_3 | DL | C-RNTI, MCS-C-RNTI, CS-RNTI | Multi-cell scheduling: one PDSCH in one cell, or one PDSCH each in several cells. | Rel-18 |
| 2_0 | — | SFI-RNTI | Slot-format indication (which symbols are DL/UL/flex). | Rel-15 |
| 2_1 | — | INT-RNTI | Pre-emption indication (eMBB resources just grabbed for URLLC). | Rel-15 |
| 2_2 | — | TPC-PUSCH-RNTI, TPC-PUCCH-RNTI | UL power control commands for a group. | Rel-15 |
| 2_3 | — | TPC-SRS-RNTI | SRS power-control group commands. | Rel-15 |
| 2_4 | — | CI-RNTI | Cancellation indication (Rel-16 IIoT). | Rel-16 |
| 2_5 | — | AI-RNTI | Availability indication for IAB. | Rel-16 |
| 2_6 | — | PS-RNTI | Power-saving wake-up signal (DCP). | Rel-16 |
| 2_7 | — | PEI-RNTI | Paging early indication (Rel-17 RedCap power saving). | Rel-17 |
| 2_8 | — | (group) | Aperiodic beam indication + associated time resources. | Rel-18 |
| 2_9 | — | (group) | Activate/de-activate cell DTX/DRX for one or more serving cells. | Rel-18 |
| 3_0 | Sidelink | SL-RNTI, SL-CS-RNTI | Sidelink scheduling. | Rel-16 |
| 3_1 | Sidelink | SL-Semi-RNTI | Sidelink semi-persistent. | Rel-16 |
| 3_2 | Sidelink | SL-RNTI family | Schedules PSCCH + SL PRS for a dedicated sidelink-positioning resource pool. | Rel-18 |
| 4_0 | DL (MBS) | G-RNTI, G-CS-RNTI | Broadcast/multicast PDSCH in RRC_INACTIVE. | Rel-17 |
| 4_1 | DL (MBS) | G-RNTI, G-CS-RNTI | Multicast PDSCH (connected) — full-feature. | Rel-17 |
| 4_2 | DL (MBS) | G-RNTI, G-CS-RNTI | Multicast PDSCH (connected) — compact. | Rel-17 |
Table 7.5 — All twenty-four DCI formats with their RNTI families and release. Formats 0_3/1_3 (multi-cell scheduling), 2_8/2_9, 3_2, and the 4_x MBS family were added in Rel-17/18.
7.6.1 DCI Format 1_0 — the fallback DL grant
Format 1_0 is the format every UE must understand from the moment it powers on. It's used by SI-RNTI to schedule SIB1, by RA-RNTI to deliver Msg2, by P-RNTI for paging, by TC-RNTI during contention resolution, and by C-RNTI as a fallback when the full Format 1_1 hasn't been configured yet. Its size is small and (deliberately) stable.
| Field | Width | Value space |
| Identifier for DCI formats | 1 | 0 = UL fallback, 1 = DL fallback (1_0) |
| Frequency-domain RA | ⌈log₂(NRB(NRB+1)/2)⌉ | RIV encoding of contiguous RB allocation |
| Time-domain RA | 4 | Index into PDSCH-TimeDomainResourceAllocationList |
| VRB-to-PRB mapping | 1 | 0 = non-interleaved, 1 = interleaved |
| MCS | 5 | Index into TS 38.214 Table 5.1.3.1-1 or -2 |
| NDI (new data) | 1 | Toggles each new transport block on this HARQ process |
| RV (redundancy version) | 2 | 0, 1, 2, 3 |
| HARQ process number | 4 | 0–15 |
| DAI (downlink assignment index) | 2 | For HARQ-ACK codebook tracking |
| TPC for PUCCH | 2 | −1, 0, +1, +3 dB |
| PUCCH resource indicator | 3 | Index into pucch-ResourceList |
| PDSCH-to-HARQ feedback timing K1 | 3 | 0–7 slots |
| Total ≈ 28 + frequency RA (≈ 41 bits for a 50-RB BWP) |
Table 7.6 — DCI Format 1_0 fields (C-RNTI variant) per TS 38.212 §7.3.1.2.1.
7.7 The DCI Encoding Chain — How a DCI Becomes Air-Bits
Every DCI, whatever its format, walks the same seven-step encoding pipeline.
TS 38.212 § 7.3 — DCI processing
K_DCI bits (DCI payload, 36–80 typical)
│
▼ +CRC-24C (L = 24) → K + 24 bits
│
▼ CRC last 16 bits XOR-scrambled with the target RNTI
│
▼ Polar encoder (mother N ≥ K+L, chosen so N ≥ E and N/E < 8/7)
│ · uses polar sequence Q₀^(N−1), TS 38.212 Table 5.3.1.2-1
│
▼ sub-block interleaving (32 columns)
▼ rate matching to E coded bits (E = 108 · L_AL for AL aggregation)
▼ scrambling with Gold sequence c(i), c_init = (n_RNTI · 2^16 + n_ID) mod 2^31
▼ QPSK modulation → E/2 symbols
▼ mapped to L_AL · 6 REGs × 9 data REs = 54 · L_AL data REs in CCEs
The CRC ⊕ RNTI trick — in plain English. Every DCI ends with a 24-bit checksum (CRC). After the checksum is computed, the last 16 bits of it are XOR-scrambled with the destination UE's RNTI. So when the UE blind-decodes a candidate, it computes its own CRC on the decoded payload, XORs the same RNTI back into the result, and checks if the answer is zero. If yes, this DCI is for me. If no, this DCI is either for somebody else or this candidate is empty. One operation simultaneously authenticates the DCI and identifies its addressee — no separate "to:" field ever needed in PDCCH.
7.8 PDCCH-DMRS — The Pilot Inside the CCE
Every REG has 3 DMRS REs out of its 12, at subcarriers k = 4n + 1 within the RB (RE indices 1, 5, 9). The pilots are QPSK-mapped from a Gold sequence and used by the UE to estimate the channel for the surrounding 9 data REs.
TS 38.211 § 7.4.1.3.1 — PDCCH DMRS sequence
$$ r_l(m) \;=\; \tfrac{1}{\sqrt 2}\bigl(1 - 2\,c(2m)\bigr) + j\,\tfrac{1}{\sqrt 2}\bigl(1 - 2\,c(2m+1)\bigr) $$
with
$$ c_{\text{init}} \;=\; \Bigl( 2^{17} \cdot (N_{\text{symb}}^{\text{slot}}\,n_s^{\mu,f} + l + 1) \cdot (2\,N_{\text{ID}} + 1) + 2\,N_{\text{ID}} \Bigr) \bmod 2^{31} $$
where NID = pDCCH-DMRS-ScramblingID if configured, else NIDcell; l is the symbol index within the slot; nsμ,f is the slot number.
In plain English. Two nice properties tucked into the cinit formula: (1) it changes every symbol (the l+1 term), so a pilot in symbol 0 looks different from a pilot in symbol 1 — even at the same frequency — and the UE can use that to track Doppler. (2) It's seeded from the cell ID (or a special pDCCH scrambling ID), so two cells with different PCIs have different pilots even on the same RBs — the basis for inter-cell pilot orthogonality.
7.9 RNTI Taxonomy — Twenty-two Identifiers
RNTI = Radio Network Temporary Identifier, 16 bits long. The RNTI on a DCI tells the UE who the DCI is for and how to interpret it. There are 22 RNTI types defined (TS 38.321 §7.1, Table 7.1-1); the ones every PHY engineer must know:
| RNTI | Range (hex) | Purpose |
| SI-RNTI | 0xFFFF | System information (SIB1+). Same for every UE on every cell. |
| P-RNTI | 0xFFFE | Paging. Same for every UE. |
| RA-RNTI | 0x0001–0xFFEF | Random-access response (Msg2). Derived from PRACH RO. |
| TC-RNTI | 0x0001–0xFFEF | Temporary cell RNTI during contention resolution. |
| C-RNTI | 0x0001–0xFFEF | The UE's identity once connected. Per-cell. |
| CS-RNTI | 0x0001–0xFFEF | Configured grant / semi-persistent scheduling. |
| MCS-C-RNTI | 0x0001–0xFFEF | Higher MCS table indication (256-QAM). |
| SP-CSI-RNTI | 0x0001–0xFFEF | Semi-persistent CSI reporting. |
| INT-RNTI | 0x0001–0xFFEF | Pre-emption indication. |
| SFI-RNTI | 0x0001–0xFFEF | Slot format indication. |
| TPC-PUCCH/PUSCH/SRS-RNTI | 0x0001–0xFFEF | Group power-control commands. |
| MsgB-RNTI | 0x0001–0xFFEF | 2-step RACH MsgB. |
| PS-RNTI | 0x0001–0xFFEF | DCP wake-up for power saving. |
| SL-RNTI, SL-CS-RNTI, SL-Semi-RNTI | 0x0001–0xFFEF | Sidelink scheduling family. |
| AI-RNTI | 0x0001–0xFFEF | IAB availability indication. |
| CI-RNTI | 0x0001–0xFFEF | UL cancellation indication. |
Table 7.7 — Most-used RNTIs per TS 38.321 §7.1 Table 7.1-1.
7.10 DCI Size Alignment — Keeping Blind Decodes Bounded
If a UE was told to look for every DCI format possible, each at its own native size, blind decoding would explode — a separate polar decode per format per aggregation level per candidate. The spec keeps things sane by constraining the number of distinct DCI sizes a UE must monitor to at most 4 per serving cell, of which at most 3 may be scrambled by C-RNTI (TS 38.213 §10.1). The count spans both CSS and USS together — it is a per-serving-cell budget, not a per-search-space one.
If naturally-sized formats would produce too many distinct sizes, the spec pads the smaller ones up to match the larger ones using a deterministic alignment procedure (TS 38.212 §7.3.1.0). The alignment is computed by the UE when it processes BWP / CORESET configuration — it is the gNB's responsibility to compute the same alignment so that the bits the UE expects match the bits the gNB transmits.
Expert read
- The UE budgets by payload size, not format — two formats padded to the same size cost one blind-decode size, which is the whole point of alignment.
- Fallback formats (0_0/1_0) are sized from the initial BWP so they're decodable before dedicated config — alignment must respect that.
- Get alignment wrong (e.g. a format that pushes sizes to 5) and the UE drops a size → it can't even find certain grants.
- Gotcha: ambiguous sizes cause the UE to mis-interpret a DCI as the wrong format — a subtle scheduler bug that manifests as occasional wildly-wrong allocations.
7.11 Rel-17 / Rel-18 Deltas
- Multi-TRP PDCCH (Rel-17). Two schemes:
- sDCI (single-DCI) — one DCI from one TRP schedules data from both TRPs. Conventional.
- mDCI (multi-DCI) — two DCIs, one per TRP, scheduling independent transport blocks. Doubles peak throughput but doubles blind decodes too — supported only on capable UEs.
- PDCCH repetition (Rel-17). The same DCI can be transmitted on two PDCCH candidates in different CORESETs or different TCI states; the UE soft-combines before polar decode. Trades CCE budget for ~3 dB coding gain — useful for cell-edge URLLC.
- RedCap PDCCH (Rel-17). RedCap UEs may use a narrower CORESET#0 (12 RBs instead of 24/48/96) and a reduced blind-decode budget (~32 BD/slot at μ=1).
- Search-space switching (Rel-17). The UE can be reconfigured from one SS set to another by DCI 2_x in low-latency switching for power-save modes.
- NR-U PDCCH (Rel-16). COT (Channel Occupancy Time) acquisition uses Group-Common PDCCH with 2_0 to update slot format dynamically when LBT outcomes change.
- MBS PDCCH (Rel-17). Multicast/broadcast adds the 4_x DCI family, scrambled by G-RNTI / G-CS-RNTI, scheduling group-common PDSCH: 4_0 for broadcast/multicast in RRC_INACTIVE, 4_1/4_2 for multicast to connected UEs. A whole UE group decodes the same DCI from one transmission.
- Multi-cell scheduling (Rel-18). DCI 0_3 / 1_3 let a single PDCCH on one cell grant PUSCH/PDSCH across several cells at once, cutting PDCCH overhead for carrier-aggregation UEs.
7.12 Worked Example — UE finds its DCI in slot 7
End-to-end with TS-compliant numbers
- UE is RRC-configured with USS set p=0, monitoring CORESET#1 (24 RBs, 1 sym, non-interleaved, total N_CCE,p = 16). C-RNTI = 0x1234 = 4660.
- Search-space set p=0 says: monitor AL=4 with M=2 candidates and AL=8 with M=1 candidate.
- At slot 7, UE computes Y0,7 using the recursion. Starting from Y0,−1 = 4660 and iterating Y0,n+1 = (39827·Y0,n) mod 65537 eight times → Y0,7 = 33491.
- For AL=4, m ∈ {0,1}: CCE_m = 4·((33491 + ⌊m·16/(4·2)⌋ + 0) mod ⌊16/4⌋) + i = 4·((33491 + 2m) mod 4) + i.
- m=0: 4·(33491 mod 4) = 4·3 = CCE 12..15.
- m=1: 4·((33491+2) mod 4) = 4·1 = CCE 4..7.
- For AL=8, m=0: CCE_0 = 8·(33491 mod ⌊16/8⌋) + i = 8·(33491 mod 2) + i = 8·1 + i = CCE 8..15.
- UE polar-decodes 3 candidates. The AL=4 m=0 candidate at CCE 12..15 returns a payload whose CRC, XORed with 0x1234, equals 0 → match. The DCI is a Format 1_0 scheduling PDSCH 32 RBs starting at RB 12 of the BWP, MCS 17, HARQ process 4, NDI=1.
- UE consumes 3 of its 36 BD budget at μ=1, and 4+4+8 = 16 of its 56 CCE budget. Plenty of headroom for the next slot.
7.13 Field-Engineering Notes
- Cross-slot blind-decode overruns. When a UE is monitoring many SSs (multiple CORESETs × multiple ALs × many candidates), it can hit the BD budget cap. Symptom: random-looking missed DCIs at higher loads. Fix: reduce
nrofCandidates per AL in SearchSpace IE, or drop unused SS sets.
- USS hashing collisions. Two UEs with similar C-RNTIs occasionally produce overlapping candidate sets in a given slot. The scheduler avoids assigning them to the same CCEs simultaneously; if it doesn't, blocking probability rises.
- Interleaved-mapping debug. When PDCCH BLER is unexpectedly high on a CORESET, switch
cce-REG-MappingType from interleaved to non-interleaved as a one-shot test. If BLER improves drastically, the interleaver parameters (R, n_shift) may be misaligned with the gNB's understanding.
- DCI size alignment mismatch. A common interop bug: gNB and UE compute different padded sizes for the same DCI format because BWP-dependent fields are different. The UE blind-decodes the wrong number of bits and the CRC always fails. Diagnose with PHY-layer logs that print the expected size per format per SS.
- CORESET#0 + TCI state. CORESET#0 doesn't have explicit TCI state RRC; the active QCL is derived from the SSB index of the SSB that delivered MIB. In multi-TRP scenarios this can change post-handover and cause transient PDCCH loss.
- AL=1 cell-centre. Most operators disable AL=1 candidates entirely (set
nrofCandidates-AL1 = 0) — it's almost never a winning choice once you account for blind-decode overhead, and removing it frees BD budget for higher ALs.
7.14 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §7.3.2 PDCCH RE mapping · §7.3.3 scrambling · §7.4.1.3 PDCCH-DMRS
- TS 38.212 §5.3.1 polar codes · §7.3 DCI processing (CRC, RNTI, rate match)
- TS 38.213 §10 PDCCH monitoring (BD/CCE budgets, Yp hash) · §13 Type0-PDCCH
- TS 38.214 §5.1 PDSCH parameters set by DCI 1_x · §6.1 PUSCH set by DCI 0_x
- TS 38.321 §7.1 RNTI table (Table 7.1-1)
- TS 38.331 ControlResourceSet · SearchSpace · PDCCH-Config IEs
- TR 38.802 NR PDCCH design rationale (foundational)
Live labs that drill into this chapter
Part II · Downlink Channels & Signals — Chapter Eight
PDSCH — The Workhorse of the Downlink
Every web page, every video frame, every voice packet you receive over 5G arrives on PDSCH. This is the chapter where the bits actually move.
TS 38.211 §7.3.1, §7.4.1.1, §7.4.1.2
TS 38.212 §5.2 (LDPC), §7.2
TS 38.213 §10
TS 38.214 §5.1
TS 38.321 (HARQ)
Rel-18 baseline
After this chapter you will be able to
Trace any transport block from the MAC layer through CRC attachment, LDPC base-graph selection, code-block segmentation, encoding, rate matching, scrambling, modulation, layer mapping, antenna-port mapping, and RE placement; pick BG1 or BG2 by hand from K and R; compute TBS from N_RB, N_symb, MCS table, layers, and overhead; decode DCI 1_0/1_1 resource-allocation fields (Type 0 bitmap and Type 1 RIV) into concrete PRB lists; place DMRS Type 1 and Type 2, single- and double-symbol, on a resource grid; configure PT-RS density from CFO and MCS; and reason about HARQ RV selection, CBG-based retransmission, and the Rel-17 1024-QAM additions.
8.1 What PDSCH Carries and Where It Sits
If PDCCH is the permission slip, PDSCH is the delivery itself. Every IP packet, every TCP segment, every chunk of TLS bytes that reaches your phone over 5G arrives as PDSCH — modulated onto carefully chosen resource elements, demodulated through DMRS-estimated channel coefficients, decoded by LDPC, and handed to the MAC layer in the form of a transport block. There is no other downlink channel that carries user data. SIB, paging, RACH responses, and reconfigurations are all packaged as transport blocks and ride PDSCH too — only the addressing RNTI distinguishes them.
The story of PDSCH is the story of how 3GPP turns a stream of MAC bytes into a robust radio waveform. Eight to ten stages of processing, each making the signal a little harder for noise to corrupt and a little easier for the receiver to recover. Get any stage wrong and the receiver fails silently — no transport block, no application bytes, no retransmission unless HARQ kicks in.
8.2 Transport-Block Processing — From One TB to LDPC Bits
The MAC layer hands the PHY layer one or two transport blocks (TBs) — up to two when the UE is configured for 5- to 8-layer MIMO with two codewords. Each TB walks through the same chain, in this order:
TS 38.212 § 7.2 — DL-SCH / PCH coding chain
TB (A bits)
│
▼ +CRC: 24A if A>3824, 16 if A≤3824 → B = A + L bits
│
▼ Pick LDPC base graph (BG1 or BG2) from A and code rate R
│
▼ Code-block segmentation: split B into C code blocks of size K each
│ Kcb = 8448 for BG1, 3840 for BG2
│ If C=1: no extra CRC; if C>1: +CRC-24B per code block
│
▼ Per code block: LDPC encode (mother codeword N_LDPC)
│
▼ Per code block: rate matching + HARQ buffer (RV 0/1/2/3 selects start)
│ sub-block interleaving (Table 5.4.2.1-2)
│ bit selection → E_r bits per CB
│
▼ Code-block concatenation: E_0 || E_1 || … || E_(C−1) = G bits
│
└──▶ G bits delivered to physical-layer processing (§8.3)
In plain English. Take one big message (the transport block). Stamp a checksum on it so the receiver can detect errors. Choose between two LDPC code families — a heavy-duty one (BG1) for big messages and high code rates, and a lighter one (BG2) for small or low-rate cases. If the message is too big for one LDPC codeword, split it into chunks called code blocks, each with its own little checksum. Encode every chunk separately. Then trim or repeat the output to match the exact number of bits the air slot can carry — this is the rate matching step, and it's also where HARQ lives: when the network needs to resend a chunk, it picks a different slice of the same big mother codeword, giving the receiver new information to combine with the original.
8.2.1 LDPC base-graph selection
5G's LDPC code lives in two flavours, called Base Graph 1 and Base Graph 2. They are different parity-check matrices; BG1 is bigger and stronger, BG2 is smaller and faster. The choice is deterministic — function of the TB size A and the target code rate R:
TS 38.212 § 7.2.2 — Base graph selection
Given transport block size A and target code rate R = G·Q
m/(C·N):
if A ≤ 292 → BG2
elif R ≤ 0.25 → BG2
elif A ≤ 3824 AND R ≤ 0.67 → BG2
else → BG1
Maximum code-block size: K
cb = 8448 (BG1), K
cb = 3840 (BG2).
8.2.2 Rate matching and HARQ — circular buffer with four entry points
Rate matching takes the NLDPC-bit LDPC codeword and trims (or extends) it to exactly E bits to fit into the available REs. The trimming order is set by a circular buffer: parity bits are arranged in a specific sequence and the rate matcher reads E consecutive bits starting from one of four fixed start positions called redundancy versions (RV0, RV1, RV2, RV3).
| RV | Start position (in circular buffer) | Used in HARQ as |
| 0 | Position 0 — includes all systematic bits + first parity slice | Initial transmission (default) |
| 1 | Skip systematic, into parity | 1st retransmission (typical) |
| 2 | Further into parity | 2nd retransmission |
| 3 | Wraps back through systematic again | 3rd retransmission |
Table 8.1 — Redundancy versions per TS 38.212 §5.4.2.1. The gNB picks the RV in the DCI; the UE soft-combines the received LLRs with whatever it already has in the HARQ buffer for that process number.
8.3 Physical-Layer Processing — From Bits to Resource Elements
The G bits delivered by the coding chain now traverse the second pipeline: scrambling, modulation, layer mapping, antenna-port mapping, and finally RE allocation. This is TS 38.211 §7.3.1.
TS 38.211 § 7.3.1 — PDSCH physical-layer processing
G coded bits, codeword q ∈ {0, 1}
│
▼ Scrambling: b̃(i) = (b(i) + c(i)) mod 2
│ c_init = n_RNTI · 2^15 + q · 2^14 + n_ID
│ n_ID = dataScramblingIdentityPDSCH if cfg, else N_ID^cell
│
▼ Modulation: QPSK(2) | 16QAM(4) | 64QAM(6) | 256QAM(8) | 1024QAM(10)
│
▼ Layer mapping: M_symb → M_symb^layer · ν layers
│ 1 CW → ν ∈ {1,2,3,4}
│ 2 CWs → ν ∈ {5,6,7,8} (CW0 carries ⌈ν/2⌉ layers, CW1 the rest)
│
▼ Antenna-port mapping (precoding implicit: codebook or DMRS-based)
│ ports p ∈ {1000..1011} for DMRS Type 1/2 (Sec. 8.5)
│
▼ RE mapping: skip DMRS, PT-RS, CORESET, SSB, CSI-RS, declared ZP-RE
│ order: frequency-first within an OFDM symbol, then time
│
└──▶ M_RE complex symbols on PDSCH REs
In plain English. Once the bits leave the coder, scrambling shuffles them with a per-UE, per-cell-ID pseudo-random sequence — so two PDSCH transmissions to two UEs at the same time-frequency don't look like the same bit pattern even when the underlying messages happen to be. Then those scrambled bits are grouped 2, 4, 6, 8, or 10 at a time and turned into QAM symbols. The QAM symbols are spread across MIMO layers, mapped to antenna ports, and dropped onto the RE grid — skipping over reference signals, control regions, and anything else that's already claimed those particular REs.
Expert read
- Order matters: scrambling is per-codeword before layer mapping, so the two codewords of a rank-5+ transmission decorrelate independently.
- Precoding W (the PMI, Fig 14.2b) sits between layers and ports — it's the only spatial-mixing stage.
- DMRS isn't 'sent through' this chain — it's inserted at the RE-map stage on its own ports, which is why it defines the port rather than carrying data.
- Gotcha: the RE-map must skip DMRS/PT-RS/CSI-RS/ZP REs consistently with the TBS computation (Fig 8.5c) — any mismatch shifts every data bit and fails the CRC.
8.4 Resource Allocation — Where in Frequency and Time
8.4.1 Frequency: Type 0 (bitmap) vs Type 1 (RIV)
The DCI tells the UE which RBs of the BWP carry the PDSCH. Two encodings exist:
| Type | DCI field width | Encoding | Typical use |
| Type 0 | ⌈NRBBWP / P⌉ bits | One bit per RBG (resource block group, size P ∈ {2,4,8,16}) | Non-contiguous allocations, frequency-selective scheduling |
| Type 1 | ⌈log2(NRB(NRB+1)/2)⌉ bits | Single integer RIV (resource indication value) encoding start RB + length | Contiguous allocations; the only choice for DCI 1_0 |
Table 8.2 — PDSCH frequency-domain resource allocation types per TS 38.214 §5.1.2.2.
TS 38.214 § 5.1.2.2.1 — RIV encoding (Type 1)
For a contiguous allocation starting at RB RB_start with length LRBs ∈ [1, NRB−RBstart]:
$$ \text{RIV} \;=\; \begin{cases} N_{\text{RB}}(L_{\text{RBs}}-1) + RB_{\text{start}} & \text{if } (L_{\text{RBs}}-1) \le \lfloor N_{\text{RB}}/2 \rfloor \\ N_{\text{RB}}(N_{\text{RB}}-L_{\text{RBs}}+1) + (N_{\text{RB}}-1-RB_{\text{start}}) & \text{otherwise} \end{cases} $$
The two-case formula keeps RIV ≤ NRB(NRB+1)/2, the smallest range that uniquely encodes every legal (start, length) pair.
In plain English. Two ways to point at a slice of the spectrum: send a bitmap saying "use these chunks, not those", or send one number that secretly encodes both the start and the length. The bitmap is precise but bulky. The number is compact but only works when the slice is one contiguous run. Most schedulers use Type 1 because most allocations are contiguous; Type 0 is reserved for frequency-selective situations where allocation across non-adjacent RBGs is more efficient than wasting code rate on a wider contiguous span.
8.4.2 Time-domain: K0, S, L and mapping Type A/B
The DCI time-domain field is a 4-bit index into a PDSCH-TimeDomainResourceAllocation table (configured by RRC or default per Table 5.1.2.1.1-2 of TS 38.214). Each entry contains:
- K0 — slot offset between the DCI and the PDSCH (0 = same slot, 1 = next slot, etc.)
- S — first OFDM symbol of the PDSCH within the slot
- L — number of OFDM symbols the PDSCH occupies
- Mapping type — A or B
Mapping type A locks the front-loaded DMRS to symbol 2 or 3 (PDSCH starts at symbol 0–3, fills S..S+L−1). Mapping type B starts the front-loaded DMRS on the first PDSCH symbol (PDSCH starts anywhere). Type A is the "long-grant, slot-aligned" pattern, common for eMBB. Type B is the "short-grant" pattern, used for URLLC mini-slots.
Expert read
- SLIV packs S and L into one index (a triangular encoding) — the UE unpacks it to know exactly which symbols carry its PDSCH.
- K0=0 means same-slot scheduling (lower latency, harder on the UE's processing timeline); K0≥1 gives the UE more time — a latency/complexity dial.
- Type A's fixed DMRS position means the channel estimate is available early and consistently; Type B trades that flexibility for the ability to start mid-slot.
- Gotcha: S+L must fit in the slot and respect the CORESET/DMRS positions — an inconsistent SLIV is a common cause of a UE ignoring a grant entirely.
8.5 MCS and TBS — How Many Bits Fit in This Allocation?
Knowing NRB and Nsymb isn't enough. The UE must also know the modulation order Qm, the target code rate R, and the number of MIMO layers v. Those come from the DCI MCS field and the DMRS port/layer indication:
| MCS table | Selected by | Max MCS index | Max Qm | Spec ref |
| Table 5.1.3.1-1 | default (DCI 1_0 always) | 28 (+3 reserved) | 6 (64QAM) | TS 38.214 §5.1.3.1 |
| Table 5.1.3.1-2 | UE configured with mcs-Table=qam256 | 27 (+4 reserved) | 8 (256QAM) | same §5.1.3.1 |
| Table 5.1.3.1-3 | low spectral-efficiency (URLLC, RedCap) | 28 | 6 | same §5.1.3.1 |
| Table 5.1.3.1-4 | mcs-Table=qam1024 (Rel-17 FR1 high-band) | 27 (+4) | 10 (1024QAM) | same §5.1.3.1 |
Table 8.3 — PDSCH MCS tables. The table choice is per-BWP, configured by RRC. The reserved MCS indices (29–31 for tables 1/3, 28–31 for tables 2/4) signal retransmissions where TBS is inherited from the prior transmission.
Expert read
- The 156 RE/RB cap stops the TBS formula running away on huge allocations and keeps quantisation tables bounded.
- Quantisation aligns TBS to sizes that segment cleanly into LDPC code blocks with whole CRCs — TBS isn't arbitrary.
- MCS gives (Qm, R); the allocation gives N_RE; layers give ν — TBS is the product, which is why CQI→MCS (Fig 16.3b) and resource allocation jointly set throughput.
- Gotcha: the DMRS/overhead subtraction must match the actual DMRS config; assume the wrong DMRS symbols and the UE computes a different TBS than the gNB → guaranteed decode failure.
8.5.1 TBS calculation in five steps
TS 38.214 § 5.1.3.2 — Transport block size determination
- Per-PRB unused REs: NRE' = 12·Nsymb,sh − NDMRS,sh − NohPRB. Overhead Noh ∈ {0, 6, 12, 18}, default 0.
- Total useful REs: NRE = min(156, NRE') · nPRB.
- Intermediate info bits: Ninfo = NRE · R · Qm · v.
- If Ninfo ≤ 3824: round and look up TBS in Table 5.1.3.2-1 (smallest TBS ≥ Ninfo).
- If Ninfo > 3824: round Ninfo' = max(3840, 2n·round((Ninfo−24)/2n)) with n = ⌊log₂(Ninfo−24)⌋−5, then apply the segmentation-aware quantization to get TBS (multiple of 8, equal-CB-size friendly).
In plain English. Count how many "real" REs the gNB has to play with after subtracting DMRS and overhead — but cap that count at 156 per RB (a per-RB ceiling that keeps the math sane even on very large allocations). Multiply by code rate, modulation order, and layer count to get a rough information-bit count. Then snap it to one of the standardised TBS values so both ends agree on the exact transport-block size — no fractional bits, no rounding disputes.
8.6 PDSCH-DMRS — Channel Estimation Pilots
PDSCH-DMRS is the receiver's only window onto the radio channel for this PDSCH. The gNB picks one of two configurations:
| Configuration | Pattern | Single-sym ports | Double-sym ports | DMRS REs per RB (single-sym) |
| Type 1 | k = 4n + 2k' + Δ; CDM groups 0/1 | 4 (1000–1003) | 8 (1000–1007) | 6 per CDM group |
| Type 2 | k = 6n + 2k' + Δ; CDM groups 0/1/2 | 6 (1000–1005) | 12 (1000–1011) | 4 per CDM group |
Table 8.4 — PDSCH-DMRS configuration types per TS 38.211 §7.4.1.1.2. Type 1 has more pilots per RB; Type 2 supports more ports at the cost of fewer pilots per port.
TS 38.211 § 7.4.1.1.1 — PDSCH DMRS sequence
QPSK-mapped from a length-31 Gold sequence with Nc = 1600:
$$ r(m) \;=\; \tfrac{1}{\sqrt 2}(1 - 2c(2m)) + j\tfrac{1}{\sqrt 2}(1 - 2c(2m+1)) $$
initialised with
$$ c_{\text{init}} \;=\; \Bigl( 2^{17}(N_{\text{symb}}^{\text{slot}}\,n_s^{\mu,f} + l + 1)(2 N_{\text{ID}}^{n_{\text{SCID}}} + 1) + 2 N_{\text{ID}}^{n_{\text{SCID}}} + n_{\text{SCID}} \Bigr) \bmod 2^{31} $$
where NID0/NID1 are scramblingID0 / scramblingID1 (else NIDcell); nSCID ∈ {0, 1} comes from DCI 1_1 bit (else 0).
Expert read
- Front-loading the first DMRS lets the UE start equalising early — important for low-latency pipelining of the decode.
- Additional-position count is driven by Doppler (UE speed × carrier freq): a stationary CPE needs one, a high-speed-train UE needs the maximum.
- DMRS type (1 vs 2) × additional positions together set how many orthogonal ports exist → caps MIMO rank (Fig 3.6b).
- Gotcha: too few DMRS on a fast channel makes the late-slot estimate stale → the back of the PDSCH decodes worse than the front, a speed-dependent BLER signature.
8.7 PT-RS — Phase Tracking for FR2 and High MCS
Phase-Tracking Reference Signal exists because oscillator phase noise drifts during the symbol — and at mmWave frequencies and high-order QAM, that drift is enough to rotate the constellation between symbols and destroy demodulation. PT-RS is a single-port pilot that lets the receiver track that drift, symbol-by-symbol.
| Field | Values | Sets via |
| KPT-RS (frequency density) | 2 or 4 RBs per PT-RS RE | MCS threshold ptrs-MCS_i |
| LPT-RS (time density) | 1, 2, or 4 symbols between PT-RS | RB-count threshold ptrs-NRB_i |
| Port | first scheduled DMRS port for the codeword | implicit |
| Subcarrier offset | kRE,ref in {0, 2, 4, 6, 8, 10} | (C-RNTI mod KPT-RS) by default |
Table 8.5 — PT-RS density configuration per TS 38.214 §5.1.6.3 and TS 38.211 §7.4.1.2.
In plain English. At low MCS, you don't need PT-RS — the symbols are far enough apart in the QAM constellation that a little phase wobble doesn't matter. At MCS 22 with 64-QAM, the symbols are close together and the receiver needs help. PT-RS gives it that help by dropping one extra known-bit pilot every few subcarriers, every few symbols. The receiver estimates the phase rotation from those pilots and de-rotates everything else. Without PT-RS at FR2 with 256-QAM, demodulation BLER would be 1 even at 30 dB SNR; with it, the same constellation works cleanly.
Expert read
- PT-RS targets common phase error (a per-symbol rotation), distinct from the per-RE channel DMRS estimates — they solve different problems.
- Its time density rises with MCS (high QAM needs frequent correction) and its frequency density falls with allocation size — the spec scales overhead to need.
- It mostly matters at FR2 where phase noise is large; at FR1 low-band it's often not configured at all.
- Gotcha: PT-RS rides on a DMRS port and steals data REs — turning it on for a UE that doesn't need it just lowers throughput for no gain.
8.8 HARQ — Process Numbers, NDI, and Soft Combining
Up to 16 HARQ processes run in parallel per UE per cell (extended to up to 32 in Rel-17 — driven by NTN's long propagation RTT, and also usable for terrestrial; multi-DCI multi-TRP additionally gives each TRP its own HARQ entity). Each process has its own soft buffer; a transport block is associated with one process number, and retransmissions of that block reuse the same process number so the UE knows which buffer to combine into.
| DCI field | Width | Function |
| HARQ process number | 4 bits | Process ID 0–15 |
| NDI (New Data Indicator) | 1 bit | Toggles per new TB; same value = retransmission |
| RV (Redundancy Version) | 2 bits | {0, 1, 2, 3} circular-buffer entry |
| DAI (Downlink Assignment Index) | 2 bits | Tracks accumulated DL grants for HARQ-ACK codebook |
| PDSCH-to-HARQ feedback timing K1 | 3 bits | Slot offset to PUCCH/PUSCH carrying ACK |
Table 8.6 — HARQ-related DCI fields. UE flushes the soft buffer for a process when NDI toggles; otherwise it combines the new LLRs with the stored ones before LDPC decoding.
Expert read
- Parallel processes hide the HARQ round-trip latency: with one process the link would stall for a full RTT after every TB; with 16 it streams continuously.
- NDI (New Data Indicator) is the only flag distinguishing 'fresh TB' from 'retransmit' on a given process — a flipped NDI means new data.
- Soft-combining (chase or IR) means a retransmission doesn't start from scratch — it adds energy/parity to the failed attempt (Fig 5.2c), so effective code rate drops.
- Gotcha: the UE's soft buffer is finite (LBRM); too many simultaneous large-TBS processes overflow it, retransmissions stop combining, and BLER mysteriously plateaus.
8.9 Rel-17 and Rel-18 Deltas
- 1024-QAM PDSCH (Rel-17). mcs-Table = qam1024 unlocks Table 5.1.3.1-4 with Qm up to 10 (vs 8 in Rel-15). Limited to FR1 high-band (3.5–7.125 GHz) with a tight UE Tx EVM ≤ 2.5 % (≈ −32 dB). Peak data rate jumps by 25 % over 256-QAM under ideal conditions.
- CBG-based retransmission. When configured (
codeBlockGroupTransmission), HARQ retransmits only the code-block groups that failed, not the whole TB. CBGTI in DCI is a bitmap; CBGFI tells the UE whether to flush the soft buffer for each CBG. Saves spectrum when only a fraction of a TB fails.
- Multi-TRP PDSCH (Rel-16/17). Two schemes:
- SDM — both TRPs send the same CW on different layers, joint receive combining.
- FDM — CW split across two non-overlapping frequency portions, one per TRP.
- TDM — same CW on different slots/symbols from different TRPs.
- SFN — TRPs send identical signal, perceived as one virtual cell with combined power.
- PDSCH repetition Type B (Rel-16). A single TB is repeated on consecutive mini-slots with the same RV (vs Type A which repeats on consecutive slots). URLLC reliability mechanism.
- NCD-SSB-related rate matching (Rel-17). When NCD-SSBs share the carrier with PDSCH, the gNB declares them in
RateMatchPatternId so the PDSCH skips those REs.
8.10 Worked Example — 50 RBs · 12 symbols · MCS 17 · 64QAM · 2 layers
End-to-end TBS & pipeline
- DCI 1_1 grants: nPRB = 50, Nsymb,sh = 12, MCS index 17 (Table 5.1.3.1-1 → Qm = 6, R = 658/1024 ≈ 0.642), v = 2 layers, DMRS Type 1 single-symbol with 2 CDM groups w/o data (12 DMRS REs / RB — Type 1 gives 6 REs per CDM group, so 12 needs both groups), Noh = 0.
- NRE' = 12·12 − 12 − 0 = 132 per RB. capped to 132 (since 132 < 156). NRE = 132·50 = 6600.
- Ninfo = 6600 · (658/1024) · 6 · 2 = 50,892 bits.
- Since Ninfo > 3824: n = ⌊log₂(50,892 − 24)⌋ − 5 = ⌊log₂(50,868)⌋ − 5 = 15 − 5 = 10; Ninfo' = max(3840, 2¹⁰·round(50,868/1024)) = max(3840, 1024·50) = 51,200.
- R > 0.25 and Ninfo' > 8424 → C = ⌈(51,200+24)/8424⌉ = ⌈6.083⌉ = 7 code blocks. TBS = 8·7·⌈(51,224)/(8·7)⌉ − 24 = 56·⌈914.71⌉ − 24 = 56·915 − 24 = 51,216 bits.
- TB CRC (since A > 3824): +24A → B = 51,240. Base-graph selection: A > 3824, so the "A ≤ 3824 AND R ≤ 0.67" rule does not apply; A > 292 and R > 0.25, so the BG2 floors don't apply either → BG1, Kcb = 8448. Segmentation gives K per CB ≈ 7344 (after each CB's own 24B CRC).
- Per CB: CRC-24B (+24) → 7344 → LDPC encode → rate match to Er ≈ 6600·2·6/7 ≈ 11,314 bits per CB. Total G = 79,200 bits.
- Scramble (c_init = n_RNTI·2¹⁵ + 0·2¹⁴ + N_IDcell) → modulate 64QAM → 13,200 symbols → 2 layers (on 2 DMRS ports) → 6,600 REs per layer, 13,200 REs total.
- UE receives, demaps, descrambles, soft-combines if retransmission, LDPC-decodes each CB, checks each CB CRC, concatenates, checks TB CRC → 51,216-bit transport block delivered to MAC. ACK on PUCCH.
8.11 Field-Engineering Notes
- 156-RE cap surprise. The min(156, NRE') cap means that beyond NRE' = 156, adding more symbols to the allocation no longer increases TBS proportionally. Operators planning ultra-long PDSCH grants should compute TBS for short and long allocations and verify the spec rounding lands where they think.
- DMRS additional positions vs slot length.
dmrs-AdditionalPosition (pos0/pos1/pos2/pos3) places extra DMRS symbols at deterministic locations within the PDSCH duration. Get this wrong and the rate-matching NDMRS,sh count is off by 12·n RBs, causing TBS mismatch.
- BG flip near R = 0.67. When the gNB's link adaptation pushes A > 3824 with R hovering around 0.67, small changes in MCS can flip BG2 → BG1 (or vice versa). The Kcb doubles, so C drops, and re-encoding delay changes. Some receivers struggle with adjacent slots having different BGs.
- PT-RS KPT-RS = 2 vs 4. At MCS 18+ with 50 RBs at 30 GHz, KPT-RS = 2 (pilot every 2 RBs) is necessary for clean reception; KPT-RS = 4 is too sparse. The receiver logs "PT-RS density insufficient" message when the operator mis-configures the threshold table.
- SP-CSI-RS rate-matching collisions. When a CSI-RS occasion lands on the same RE as a planned PDSCH symbol, the PDSCH mapper skips those REs (rate-matched around CSI-RS). If the UE's CSI-RS configuration is stale, it doesn't skip and decodes garbage. Always confirm CSI-MeasConfig + RateMatchPattern alignment.
- 1024-QAM EVM headroom. 1024-QAM points are densely packed; a transmitter EVM worse than the 2.5 % (≈ −32 dB) requirement collapses BER. A field UE measuring −30 dB EVM should never be allocated MCS 27 from Table 5.1.3.1-4 — link adaptation must clamp.
8.12 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §7.3.1 PDSCH RE mapping · §7.4.1.1 PDSCH DMRS · §7.4.1.2 PT-RS
- TS 38.212 §5.2 LDPC base graphs · §5.4 rate matching · §7.2 DL-SCH coding chain
- TS 38.213 §10 PDSCH monitoring + scheduling timing
- TS 38.214 §5.1.2 PDSCH resource allocation · §5.1.3 MCS / TBS · §5.1.6.2 PDSCH parameters · §5.1.6.3 PT-RS
- TS 38.321 §5.4 HARQ procedure
- TS 38.331 PDSCH-Config · PDSCH-TimeDomainResourceAllocationList · DMRS-DownlinkConfig
- TR 38.802 LDPC + MCS design rationale
Live labs that drill into this chapter
Part II · Downlink Channels & Signals — Chapter Nine
Downlink Reference Signals
PBCH-DMRS told the phone where the cell is. PDSCH-DMRS told it how the data was modulated. This chapter is about the third family — the ones that exist purely so the receiver can measure.
TS 38.211 §7.4.1.5 (CSI-RS)
TS 38.214 §5.1.6.1 (CSI-RS)
TS 38.215 (measurements)
TS 38.331 (CSI-MeasConfig)
Rel-18 baseline
After this chapter you will be able to
Enumerate every downlink reference signal in NR and the job it does; configure NZP-CSI-RS resources with the right port count, density, CDM type, and periodicity for CQI, beam management, or tracking; build a TRS from the four-CSI-RS-resource recipe; declare ZP-CSI-RS so PDSCH skips around them; compute the CSI-RS sequence c_init for any slot; and reason about why CSI-RS overhead trades against measurement freshness.
9.1 The Whole Family — Every DL Reference Signal at a Glance
In NR, reference signals split into two camps. Demodulation RSs (DMRSs) ride alongside their host channel — PBCH-DMRS for PBCH, PDCCH-DMRS for PDCCH, PDSCH-DMRS for PDSCH — and disappear when the channel does. Measurement RSs exist on their own schedule, transmitted whether or not there's data on the air. CSI-RS, TRS, and PRS belong to this second camp. The phone uses them to estimate channel quality, beam strength, fine timing, frequency offset, and (with PRS) its physical location.
The one idea behind every reference signal. You can only measure what the channel did to a signal if you already know what the signal was. That is the whole trick. A reference signal is just a set of symbols the transmitter and receiver agree on in advance — down to the exact complex value on every resource element. When the UE receives them, it divides what it got by what it knew was sent, and what is left over is the channel itself: its gain, its phase rotation, its delay, its Doppler. Data symbols cannot do this — the receiver doesn't know them yet — which is precisely why every channel needs known pilots sprinkled through it. Everything in this chapter is a variation on two questions: where do we place the known symbols, and what do we compute from the answer?
| Signal | Carried where | Purpose | Spec |
| PBCH-DMRS | Inside SSB (Ch.6) | PBCH channel estimate · SSB-index carrier | TS 38.211 §7.4.1.4 |
| PDCCH-DMRS | Inside CCEs (Ch.7) | PDCCH channel estimate | TS 38.211 §7.4.1.3 |
| PDSCH-DMRS | Inside PDSCH allocation (Ch.8) | PDSCH channel estimate · MIMO port reference | TS 38.211 §7.4.1.1 |
| PT-RS | Inside PDSCH (Ch.8) | Phase tracking at high MCS / FR2 | TS 38.211 §7.4.1.2 |
| NZP-CSI-RS | Configured CSI-RS resources | CQI / RI / PMI measurement, beam management, tracking | TS 38.211 §7.4.1.5 |
| ZP-CSI-RS | Reserved REs | PDSCH rate-match holes (no transmission) | TS 38.214 §5.1.4.2 |
| TRS | Special CSI-RS configuration | Fine time / frequency tracking | TS 38.214 §5.1.6.1.1 |
| PRS | Positioning Reference Signal | UE location estimation (TDOA, AoA) | TS 38.211 §7.4.1.7, Ch.23 |
Table 9.1 — Every downlink reference signal. This chapter focuses on the measurement family: CSI-RS, TRS, ZP-CSI-RS. PRS gets its own chapter (Ch.23).
In plain English. Imagine two kinds of street signs. Some only appear when there's a parked car next to them — those are DMRS, attached to a channel. Others are always standing on the corner, whether or not anyone is driving past — those are CSI-RS, TRS, and PRS. The phone uses the always-there signs to measure the road conditions, decide which lane is fastest, calibrate its compass, and figure out where it is.
Expert read
- The split decides lifetime: DMRS overhead scales with traffic (no data, no DMRS); measurement-RS overhead is always-on, so it's kept sparse (Fig 9.2b).
- DMRS defines the antenna port (Fig 3.6b) — it's how the receiver even knows what channel to invert; measurement RS defines what the UE reports back (Fig 9.2c).
- TRS is technically a configuration of CSI-RS, not a separate signal — a recurring NR theme of reusing one mechanism for many jobs.
- Gotcha: confusing the two leads to wrong overhead accounting in TBS (Fig 8.5c) — only DMRS (and PT-RS) subtract from this PDSCH's data REs; CSI-RS REs are handled via rate-matching/ZP instead.
9.2 NZP-CSI-RS — The Workhorse Measurement Signal
Non-Zero-Power Channel-State-Information Reference Signal (NZP-CSI-RS) is the swiss-army knife of NR DL measurement. One CSI-RS configuration is a small, sparse pattern of REs that the gNB transmits on a defined periodicity. The UE measures the received power and channel response on those REs and feeds back CQI, PMI, RI — or, in the beam-management variant, RSRP per beam.
Here is the problem NZP-CSI-RS exists to solve. A 5G base station can drive 32 or 64 transmit antennas. To deliver you a strong, clean beam it must choose one complex weight per antenna — an amplitude and a phase — so that the wavefronts from all of them add up at your antenna and tend to cancel toward everyone else. But the gNB cannot see its own beam land: the only place the channel is actually known is at the receiver, sitting in the real multipath. So the channel must be measured at the UE and reported back, through a feedback pipe only a few dozen bits wide. CSI-RS is how the gNB poses the question; the CSI report (Ch.15) is the UE's answer. Everything in this section is the machinery that lets a sparse handful of known pilot symbols reconstruct a channel with up to 32 spatial dimensions.
The keyhole intuition. Picture the gNB's array as a room of 64 light bulbs, and the radio channel as a frosted-glass door. The gNB can dim and phase-shift each bulb but cannot see through the door. You stand on the far side with a single light meter. CSI-RS is the gNB flashing every bulb in a known, pre-agreed pattern; you measure how brightly each arrives and in what relative phase, then whisper back through the keyhole: "bulbs 12–18 reach me brightest, in this phase relationship." The gNB then drives exactly that combination for your data. The pilots are the flashes, the CSI report is your whispered answer, and the beam is the result. The rest of §9.2 explains how the flashes are packed (CDM), why so few of them are needed (coherence), and how your whisper is computed (the measurement chain).
9.2.1 Resource structure — ports, density, CDM
TS 38.211 § 7.4.1.5.3 — CSI-RS resource configuration
A CSI-RS resource is described by:
• Number of ports X ∈ {1, 2, 4, 8, 12, 16, 24, 32}
• Density ρ ∈ {1/2, 1, 3} REs per RB per port (only certain X allow ρ=3)
• CDM type ∈ {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4}
• Row index in Table 7.4.1.5.3-1 (18 rows, each fixing the time-frequency locations)
• Subcarrier offset k₀, k₁, k₂, k₃ ∈ {0..11} for the four possible base subcarriers
• OFDM symbol offsets l₀, l₁ within the slot
• Number of OFDM symbols per RB per port: 1, 2, or 4 (CDM-dependent)
Eighteen rows. Each row of TS 38.211 Table 7.4.1.5.3-1 is a fixed recipe: "if you want 4 ports with density 1 and fd-CDM2, place REs at these (k, l) locations." The gNB picks a row, the UE looks up the same row, and they agree on the pattern.
| Row | Ports X | Density ρ | cdm-Type | CDM groups | CSI-RS RE/RB (=X·ρ) |
| 1 | 1 | 3 | noCDM | — | 3 |
| 2 | 1 | 1, 1/2 | noCDM | 1 | 1 / 0.5 |
| 3 | 2 | 1, 1/2 | fd-CDM2 | 1 | 2 / 1 |
| 4 | 4 | 1 | fd-CDM2 | 2 | 4 |
| 5 | 4 | 1 | fd-CDM2 | 2 | 4 |
| 6 | 8 | 1 | fd-CDM2 | 4 | 8 |
| 7 | 8 | 1 | fd-CDM2 | 4 | 8 |
| 8 | 8 | 1 | cdm4-FD2-TD2 | 2 | 8 (×2 sym) |
| 9 | 12 | 1 | fd-CDM2 | 6 | 12 |
| 10 | 12 | 1 | cdm4-FD2-TD2 | 3 | 12 (×2 sym) |
| 11 | 16 | 1, 1/2 | fd-CDM2 | 8 | 16 / 8 |
| 12 | 16 | 1, 1/2 | cdm4-FD2-TD2 | 4 | 16 / 8 (×2 sym) |
| 13 | 24 | 1, 1/2 | fd-CDM2 | 12 | 24 / 12 |
| 14 | 24 | 1, 1/2 | cdm4-FD2-TD2 | 6 | 24 / 12 (×2 sym) |
| 15 | 24 | 1, 1/2 | cdm8-FD2-TD4 | 3 | 24 / 12 (×4 sym) |
| 16 | 32 | 1, 1/2 | fd-CDM2 | 16 | 32 / 16 |
| 17 | 32 | 1, 1/2 | cdm4-FD2-TD2 | 8 | 32 / 16 (×2 sym) |
| 18 | 32 | 1, 1/2 | cdm8-FD2-TD4 | 4 | 32 / 16 (×4 sym) |
Table 9.2 — Complete CSI-RS row catalogue (TS 38.211 Table 7.4.1.5.3-1). All 18 rows: the row index (in NZP-CSI-RS-Resource → resourceMapping) fixes the port count X∈{1,2,4,8,12,16,24,32}, the density ρ, and the CDM type. CDM groups = X ÷ CDM-size (noCDM 1, fd-CDM2 2, cdm4 4, cdm8 8). "CSI-RS RE/RB" is the total pilot REs per RB (= X·ρ), spread over 1/2/4 symbols for noCDM/cdm4/cdm8 respectively — that time spread is exactly the coherence assumption discussed in §9.2.4.
9.2.2 Periodicity, time offset, and resource sets
Each NZP-CSI-RS resource sits inside a resource set, and each set has its own periodicity and slot offset. Three temporal modes:
| Mode | Trigger | Periodicity | Use |
| Periodic (P-CSI-RS) | RRC | {4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, 640} slots | Always-on CQI tracking, beam scan |
| Semi-Persistent (SP-CSI-RS) | MAC CE activation | same set as periodic but on/off via MAC | Mobility-triggered CQI |
| Aperiodic (A-CSI-RS) | DCI 0_1/0_2 trigger | One-shot | On-demand CSI for retx decision |
Table 9.3 — CSI-RS temporal types (TS 38.214 §5.1.6.1). The mode is per-resource-set, not per-resource.
9.2.3 Sequence and c_init
TS 38.211 § 7.4.1.5.2 — CSI-RS sequence
QPSK-mapped Gold sequence with Nc = 1600:
$$ r_l(m) \;=\; \tfrac{1}{\sqrt 2}(1 - 2c(2m)) + j\tfrac{1}{\sqrt 2}(1 - 2c(2m+1)) $$
initialised with
$$ c_{\text{init}} \;=\; \bigl(2^{10}(N_{\text{symb}}^{\text{slot}}\,n_s^{\mu,f} + l + 1)(2 N_{\text{ID}} + 1) + N_{\text{ID}}\bigr) \bmod 2^{31} $$
where NID = scramblingID in NZP-CSI-RS-Resource (16 bits), l is the symbol index, nsμ,f is the slot number.
In plain English. Same pattern we've seen now four times — a Gold sequence seeded by a per-cell-or-per-config scrambling ID plus the slot and symbol numbers. The seed changes every symbol, so two CSI-RS resources from different gNBs that happen to land on the same RE pair almost never produce the same QPSK symbol — which is exactly what the receiver needs to separate them.
9.2.4 How CDM actually works — orthogonal cover codes
Look back at Table 9.2 and something should bother you. Row 6 carries 8 ports in 8 REs per RB — one RE per port, reasonable. But Row 7 also carries 8 ports while spending only 4 REs per symbol, and Row 17 crams 32 ports into 8 REs. How can two — or four, or eight — physically distinct antenna ports transmit on the same resource elements and still be separated at the receiver? The answer is Code-Division Multiplexing, and it is the single most important "how does this actually work" idea in the whole reference-signal chapter.
The trick is an orthogonal cover code. Rather than give each port its own RE, CDM gives each port its own short code word — a pattern of ±1 multipliers — and lets several ports share a small block of REs called a CDM group. The code words are rows of a Hadamard (Walsh) matrix, so they are mutually orthogonal. Every port transmits the same base pilot symbol over the whole group, each scaled by its own code; the receiver pulls the ports apart again by correlating the received block against each code.
Worked example — fd-CDM2, two ports on two adjacent subcarriers
Let the base pilot symbol be p. Two ports share the two adjacent REs k and k+1:
• Port 0 cover code w0 = [+1, +1]
• Port 1 cover code w1 = [+1, −1]
Write h0, h1 for the channels seen from the two ports. Because the two REs are adjacent, the channel is essentially constant across them, so what the UE receives on the two REs is:
$$ y_0 \;=\; p\,(h_0 + h_1), \qquad y_1 \;=\; p\,(h_0 - h_1) $$
The UE de-spreads by adding and subtracting — exactly the orthogonality of the two codes at work:
$$ \hat h_0 \;=\; \frac{y_0 + y_1}{2p} \;=\; h_0, \qquad \hat h_1 \;=\; \frac{y_0 - y_1}{2p} \;=\; h_1 $$
Two channels recovered from two REs — but with a bonus. Each port's energy was present on both REs, so the de-spread estimate collects the full pilot energy of the group: a 3 dB combining gain versus splitting the ports onto separate REs. CDM is not just compression; it is also noise averaging.
The one assumption that makes or breaks it. The despreading worked only because
h0 and
h1 were the
same on both REs. If the channel changes across the CDM group, orthogonality breaks and the ports leak into each other (residual inter-port interference). That single fact explains every CDM choice in Table 9.2:
- fd-CDM2 spreads over 2 adjacent subcarriers — the closest spacing possible, so the channel stays flat across them as long as the coherence bandwidth exceeds two subcarriers (almost always true).
- cdm4-FD2-TD2 uses a length-4 code = 2 subcarriers × 2 adjacent symbols. Now the channel must also be constant across two OFDM symbols — fine at pedestrian speeds, marginal at very high Doppler.
- cdm8-FD2-TD4 uses length-8 = 2 subcarriers × 4 symbols. Cheapest overhead (32 ports in 8 REs) but it demands a channel that is static across four symbols — which is why it is a Rel-16 option and why the field note in §9.7 warns about it at FR2/high mobility.
In one sentence:
CDM trades pilot REs for a coherence assumption. The more ports you stack on a block, the longer in time/frequency the channel must hold still.
9.2.5 Why so few pilots? — coherence, sampling, and interpolation
The second thing that should puzzle you about Table 9.2 is how sparse CSI-RS is. Row 1 sprinkles just 3 REs across a 168-RE resource block, yet the UE is expected to know the channel everywhere — on every data RE it never measured. This works for the same reason you can sketch a smooth curve through a few dots: the channel is correlated, not random, in both frequency and time. CSI-RS only has to sample it finely enough to capture how fast it actually wiggles.
The two coherence scales
The channel stays roughly constant over a frequency span called the coherence bandwidth and a time span called the coherence time:
$$ B_c \;\approx\; \frac{1}{5\,\sigma_\tau}, \qquad T_c \;\approx\; \frac{1}{2 f_d}, \qquad f_d \;=\; \frac{v\,f_c}{c} $$
where στ is the RMS delay spread (how smeared the multipath is), fd is the maximum Doppler shift, v is the UE speed, fc the carrier frequency, and c the speed of light.
Put numbers on it. In a dense-urban macro cell with delay spread στ ≈ 1 µs, the coherence bandwidth is roughly 200 kHz — under one resource block. So the channel can swing noticeably from one RB to the next, and CSI-RS must place pilots across the band (it does: the pattern repeats every RB). On the time axis, a pedestrian at 3 km/h on n78 (3.5 GHz) sees fd ≈ 10 Hz, so Tc ≈ 50 ms — the channel barely moves, and a 40 ms CSI-RS period is plenty. A car at 120 km/h pushes fd to ≈ 390 Hz and Tc down to ≈ 1.3 ms — now the channel is stale almost as soon as it is measured, which is why high-mobility configs use short periodicities (and why CDM-in-time, like cdm8, becomes risky).
It is just the sampling theorem in disguise. To reconstruct a smooth function you need samples spaced closer than its fastest variation — Nyquist. CSI-RS density ρ is the frequency-axis sampling rate; CSI-RS periodicity is the time-axis sampling rate. Choose ρ finer than the coherence bandwidth and the period shorter than the coherence time, and the UE can interpolate the channel everywhere it did not measure — typically with a least-squares fit at the pilots followed by an MMSE/Wiener interpolation that is itself tuned to the estimated delay and Doppler spreads. Pick them too coarse and the interpolation aliases: the reported CQI/PMI describes a channel that no longer exists by the time the data is scheduled. Every "density vs. battery" and "periodicity vs. mobility" trade in §9.7 is this one sampling balance.
9.2.6 From pilots to CQI/PMI/RI — the measurement signal chain
We now have, thanks to §9.2.4, a clean per-port channel estimate, and thanks to §9.2.5, an estimate that is valid across the whole band. But a channel estimate is a matrix of complex numbers — and the feedback pipe carries only a few bits. How does the UE boil a 64-dimensional channel down to the three little numbers the scheduler actually wants: RI (how many layers), PMI (which precoder), and CQI (which MCS)? This is where the measurement becomes feedback.
The measurement chain, step by step
- Estimate the channel matrix. For each measurement subband, de-spread the CSI-RS to form H — an Nrx × Nports matrix giving the gain and phase from every gNB port to every UE antenna.
- Build the spatial covariance. Average the channel's own correlation over the subband's REs:
$$ \mathbf{R} \;=\; \frac{1}{N}\sum_{n} \mathbf{H}_n^{\mathsf H}\mathbf{H}_n \;=\; \sum_i \lambda_i\, \mathbf{v}_i \mathbf{v}_i^{\mathsf H} $$
The eigen-decomposition on the right is the heart of the whole thing: each eigenvector vi is an independent spatial "pipe" through the channel, and its eigenvalue λi is how much signal power that pipe can carry.
- Read off the rank → RI. Count the eigenvalues that stand clearly above the noise floor. One dominant λ means the channel supports a single layer (rank 1); several comparable eigenvalues mean it can carry parallel streams (rank 2, 3, 4…). That count is the Rank Indicator.
- Match a precoder → PMI. Search the codebook for the precoding matrix W whose columns best align with the dominant eigenvectors — i.e. maximise |wiHvi|. A Type I codebook offers coarse, single-beam precoders; a Type II codebook (Ch.15) builds a finer beam from a weighted sum of several. The index of the winner is the PMI.
- Predict the SINR → CQI. Apply the chosen W, compute the resulting post-combining SINR per layer, and look up the highest modulation-and-coding scheme that would still keep the block-error rate at or below the 10 % target. That MCS, quantised to 4 bits, is the CQI.
In plain English. The eigen-decomposition asks "how many genuinely different ways does the radio energy reach this user, and how strong is each?" The strong directions tell the UE how many layers to ask for (RI) and which beam shapes to request (PMI); the strength of those directions, after the beam is applied, tells it how aggressive a modulation it can survive (CQI). So the journey of §9.2 is complete: known pilots (the flashes) → a de-spread channel estimate (§9.2.4) → valid across the band (§9.2.5) → squeezed through an eigen-decomposition into RI/PMI/CQI — the few whispered bits the gNB needs to aim its 64 bulbs straight at you.
9.3 TRS — Tracking Reference Signal
TRS is not a "different" reference signal — it is a special configuration of CSI-RS designed to give the UE a fine-grained handle on time and frequency drift. The gNB configures four CSI-RS resources arranged so that they form a TRS:
TRS recipe (TS 38.214 §5.1.6.1.1)
- Four CSI-RS resources, all on the same antenna port.
- Each resource: row 1 (1 port, ρ=3, noCDM).
- Two resources in one slot, two more in the next slot — so 4 in a 2-slot burst.
- Each resource occupies one OFDM symbol; the two in a slot are 4 symbols apart.
- Periodicity: 10, 20, 40, or 80 ms (configured).
- Bandwidth: at least 52 RBs (or full BWP), so a wide-band coherent estimate is possible.
The 4-symbol spacing within a slot lets the UE estimate frequency offset from the phase rotation between the two symbols. The two-slot spacing across the burst lets it estimate fine timing from the relative arrival time. Combined with the wide BW, this gives the receiver the same kind of high-precision tracking that CRS used to provide in LTE — without burning constant overhead.
9.3.1 How TRS measures frequency offset
Start with the everyday version. The gNB and your phone each run a local oscillator — a crystal humming at (nominally) the carrier frequency. They are never exactly equal; a few parts-per-million of drift is normal, and cheap crystals wander with temperature. That tiny frequency disagreement makes the whole received constellation slowly spin. TRS is how the phone measures the spin rate so it can unwind it.
How it actually works. Take the two TRS pilots inside one slot, separated by Δl = 4 OFDM symbols — a time gap Δt. They carry the same known sequence, so once the UE removes that known value, whatever phase is left is pure channel. If there is a residual frequency offset Δf, that channel phase will have advanced by a fixed amount between the two pilots:
Frequency offset from two pilots Δt apart
$$ \Delta\varphi \;=\; 2\pi\,\Delta f\,\Delta t \qquad\Longrightarrow\qquad \widehat{\Delta f} \;=\; \frac{\Delta\varphi}{2\pi\,\Delta t} $$
The UE multiplies the second pilot's channel estimate by the complex conjugate of the first, reads the angle of the product to get Δφ, and divides by 2π·Δt. With Δt ≈ 4 symbols (≈143 µs at 30 kHz SCS) the phase wraps at ±π, so a single pair resolves offsets up to |Δf| < 1/(2Δt) ≈ ±3.5 kHz — comfortably more than any real crystal error — while the long 143 µs arm makes the estimate fine enough to track drift down to tens of Hz.
Why two pilots, not one. A single pilot tells you the channel's phase at one instant — but phase alone can't separate "the channel happens to be rotated" from "the oscillators are drifting." You need the rate of change of phase, and rate of change needs two samples in time. That is the entire reason TRS places two pilots 4 symbols apart in the same slot.
9.3.2 How TRS measures fine timing
Basic version: if the UE's FFT window starts a fraction of a sample too early or too late, every subcarrier picks up a phase twist that grows linearly with frequency — like a ramp tilting across the band. A flat, known signal that comes out tilted is the fingerprint of a timing error, and the slope of that tilt is the timing offset.
Timing offset from the phase slope across subcarriers
A timing error τ rotates subcarrier k by a phase proportional to its frequency:
$$ \varphi(k) \;=\; 2\pi\,k\,\Delta f_{\text{sc}}\,\tau $$
Fit the slope of φ versus k across the wideband TRS and τ falls straight out. The wider the measurement band, the longer the lever arm and the finer the timing resolution — which is exactly why TRS insists on at least 52 RBs (or the full BWP).
The two-slot structure of the burst (Figure 9.2) then lets the UE watch how this timing estimate drifts from one slot to the next as it moves and the propagation delay changes, feeding a tracking loop that keeps the FFT window locked. TRS thus does the job CRS did in LTE — coherent time/frequency tracking — but only in short bursts, so it costs a fraction of the overhead.
9.4 ZP-CSI-RS — The Reserved-RE Trick
Zero-Power CSI-RS is a slightly strange concept: it's a CSI-RS configuration whose only job is to not be transmitted. The gNB declares a ZP-CSI-RS resource so the PDSCH mapper knows to skip those REs during rate matching, even though there's no actual CSI-RS signal landing on them.
Why? Three reasons:
- Inter-cell coordination. Cell A transmits CSI-RS on certain REs; cell B declares those same REs as ZP-CSI-RS so its PDSCH avoids them — clean inter-cell measurement.
- Future-proofing. Reserve REs now for a CSI-RS that will be activated later via MAC CE, without re-encoding any PDSCH that's already in flight.
- Multi-TRP coordination. One TRP's NZP-CSI-RS is another TRP's ZP-CSI-RS, ensuring both UEs see clean pilot REs.
In plain English — reserving an empty seat. Zero-power CSI-RS is the gNB telling the PDSCH mapper "leave these seats empty." Nothing is transmitted on those REs. The point is that something else — a neighbour cell's pilots, or a signal that will be switched on later — can occupy those exact REs without colliding with your data. It is the radio equivalent of taping off a parking space so the right car can pull in cleanly.
How the mechanism works — rate matching around the holes. When the gNB encodes your PDSCH it has a fixed pile of coded bits to map onto resource elements. Rate matching is the step that decides exactly which RE each bit lands on. A ZP-CSI-RS resource simply removes its REs from that map: the encoder skips them and packs the bits onto the surviving REs instead. The UE, configured with the identical ZP pattern, skips the very same REs when it de-maps — so transmitter and receiver agree, bit-for-bit, on which REs carry data.
Why the pattern must match exactly
Rate matching is
positional. If the UE believes an RE carries data but the gNB actually left it empty — or the reverse — then every coded bit
after that point is read from the wrong RE: the de-mapping shifts by one and the whole transport block fails its CRC. That is why ZP-CSI-RS, like every rate-matching pattern, is pinned down in RRC and must be byte-identical at both ends. A mismatched ZP config does not degrade gracefully; it destroys the entire PDSCH. This is also why §9.7 warns that a stray ZP-CSI-RS hole that no neighbour actually uses is pure wasted spectral efficiency — you punched a seat empty for a car that never comes.
Expert read
- ZP-CSI-RS carries no signal — it's purely a rate-matching instruction. Its whole value is what it lets something else do on those REs cleanly.
- In multi-TRP this is how coordinated TRPs avoid stepping on each other's measurement pilots — essential for accurate per-TRP CSI.
- It also future-proofs: reserve REs now (as ZP), activate a real CSI-RS later via MAC-CE, without re-encoding PDSCH already in flight.
- Gotcha: a ZP pattern that no neighbour actually uses is pure wasted PDSCH capacity — audit ZP configs against the real NZP positions of every co-channel cell (Ch.9 field note).
9.5 CSI-RS in the System — How Measurement Becomes Feedback
A CSI-RS configuration on its own is just a pattern of pilot REs. To become useful, it needs to be tied to a measurement and reporting chain:
NZP-CSI-RS-Resource declares one CSI-RS pattern (one row).
NZP-CSI-RS-ResourceSet groups one or more resources for a single purpose.
CSI-ResourceConfig binds resource sets to a reporting purpose: CQI, beam management, tracking, etc.
CSI-ReportConfig tells the UE what to measure (RSRP / CQI / RI / PMI) and how to report (Type I / Type II codebook, periodic / SP / aperiodic).
Chapter 15 (CSI Framework and Reporting) walks each of these IEs in detail; here we just need to know that the chain exists.
Expert read
- Aperiodic is the overhead-efficient default for reciprocity/on-demand CSI — pay for a sounding only when about to schedule.
- Periodic suits always-on tracking (TRS, beam scan); semi-persistent bridges the two — burst it on during mobility, off when idle.
- Aperiodic CSI-RS has a trigger-to-measurement latency (K0-like) of ~1 ms at 30 kHz — URLLC schedulers must budget it before a retransmission decision.
- Gotcha: the mode is set per resource set, not per resource — you can't mix periodic and aperiodic resources in one set, a common RRC-config mistake.
9.6 Worked Example — TRS on n78
A TRS configuration walked end-to-end
- gNB on n78 wants 20 ms TRS periodicity. It configures a
NZP-CSI-RS-ResourceSet with trs-Info = enabled and four resources r0–r3.
- All four use Row 1 of Table 7.4.1.5.3-1: 1 port, ρ=3, noCDM, bandwidth = 80 RBs (full initial DL BWP).
- r0: slot offset 0, symbol l = 5. r1: slot offset 0, symbol l = 9. r2: slot offset 1, symbol l = 5. r3: slot offset 1, symbol l = 9.
- scramblingID = 123 for all four resources. UE computes c_init each symbol and generates the QPSK pilot sequence.
- UE correlates received r0 against r1 in same slot → carrier-frequency offset estimate (4-symbol Δt, ~143 μs at 30 kHz SCS, enables CFO resolution down to ~50 Hz).
- UE correlates r0+r1 against r2+r3 across the slot boundary → fine timing alignment (~0.5 ms Δt, one slot at 30 kHz; enables sample-level timing refinement and drift tracking).
- Every 20 ms, the burst repeats; UE updates its timing/frequency tracking loop.
- Overhead: 4 resources × 3 REs × 80 RBs = 960 REs per 20 ms (~0.18 % of the 80-RB BWP grid over that period). Tiny price for keeping the receiver locked.
9.7 Field-Engineering Notes
- TRS bandwidth too narrow. If
freqBand in TRS is set below 52 RBs, fine timing accuracy collapses. UEs report "tracking RS not satisfactory" in 3GPP test logs.
- CSI-RS density and battery. ρ = 3 (Row 1) is six times the overhead of ρ = 0.5 (Row 2 minimum). For idle UEs in long-DRX, prefer ρ = 0.5 with longer periodicity to extend battery life.
- ZP-CSI-RS leakage. Mis-configured ZP-CSI-RS REs that aren't actually used by a neighbour cell cost PDSCH spectral efficiency. Audit ZP-CSI-RS configurations against the actual NZP-CSI-RS positions of every co-channel cell.
- Aperiodic CSI-RS trigger latency. DCI-triggered A-CSI-RS takes K0+1 slots from DCI to measurement — about 1 ms at SCS 30 kHz. URLLC schedulers must account for this when CSI is needed pre-retransmission.
- 32-port CSI-RS with cdm8. Row 17 packs 32 ports into 4 symbols × 8 REs — minimal overhead but requires UE support for cdm8 (Rel-16 feature). Older UEs fall back to Row 15 with 2× overhead.
9.8 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §7.4.1.5 CSI-RS · §7.4.1.7 PRS
- TS 38.214 §5.1.6.1 CSI-RS resource configuration · §5.1.6.1.1 TRS
- TS 38.215 CSI-RSRP, CSI-RSRQ, CSI-SINR definitions
- TS 38.331 NZP-CSI-RS-Resource · NZP-CSI-RS-ResourceSet · CSI-MeasConfig
Live labs that drill into this chapter
Part III · Uplink Channels & Signals — Chapter Ten
PUSCH — Physical Uplink Shared Channel
PDSCH from the other side — but the UE is power-limited, the antenna count is smaller, and the waveform has an option PDSCH doesn't.
TS 38.211 §6.3.1, §6.4.1
TS 38.212 §6.2 (UL-SCH)
TS 38.213 §11 (power control)
TS 38.214 §6.1
TS 38.331 (PUSCH-Config)
Rel-18 baseline
After this chapter you will be able to
Choose between CP-OFDM and DFT-s-OFDM for any UE and link condition; configure PUSCH-DMRS Type 1 / Type 2 and PT-RS for FR2 uplink; pick codebook-based vs non-codebook-based precoding; place frequency hopping correctly; multiplex HARQ-ACK, CSI part 1 and CSI part 2 onto PUSCH; configure Type 1 and Type 2 configured grants; and reason about why PUSCH's MCS ceiling sits below PDSCH's.
10.1 PUSCH and Its Two Waveforms
If PDSCH is how the network feeds the phone, PUSCH is how the phone speaks back — every browser request, every voice packet, every uploaded photo. The encoding chain is nearly identical to PDSCH: LDPC, rate matching, scrambling, modulation, layer mapping, RE placement. But there are two important differences. First, the phone's power amplifier dislikes high-peak-to-average waveforms like OFDM, so the spec offers a single-carrier-like alternative called DFT-s-OFDM. Second, the phone has fewer antennas and less power, so MIMO is more modest and link adaptation is more conservative.
| Waveform | PAPR | MCS reach | Use case |
| CP-OFDM | High (~10 dB) | Up to 256-QAM (Qm=8) — uplink ceiling. 1024-QAM is downlink/PDSCH-only. | Default. High data rate, good SNR, multi-layer MIMO. |
| DFT-s-OFDM | Low (~3 dB) | Up to 64QAM. Single layer only. Optional π/2-BPSK at low SNR. | Cell edge, coverage extension, RedCap, IoT. |
Table 10.1 — PUSCH waveform choice (TS 38.214 §6.1.4). Configured per UE via transformPrecoder in PUSCH-Config; DCI 0_0 always uses CP-OFDM, DCI 0_1/0_2 may select DFT-s-OFDM if configured.
In plain English. OFDM gives you many parallel narrow channels, which is great for capacity but bad for the phone's amplifier — the combined signal has big random peaks that force the amplifier to back off from its maximum power. DFT-s-OFDM applies a DFT before the IFFT, which spreads each modulated symbol across the entire bandwidth and smooths those peaks. Result: the same average power can be transmitted at a higher per-symbol power, which buys ~3 dB of coverage at the cell edge. The price: only one MIMO layer, lower MCS ceiling, no PT-RS in the same way.
Expert read
- The pre-DFT spreads each data symbol across all allocated subcarriers, so a deep fade on one subcarrier no longer kills one symbol — but it also means the equaliser is no longer a clean 1-tap-per-subcarrier (needs FDE + IDFT).
- It only buys ~3 dB of PAPR and that only helps a power-limited UE; cell-centre UEs use CP-OFDM to keep full scheduling flexibility and MIMO.
- DFT-s-OFDM is single-layer only in NR — you cannot spatially multiplex it. Choosing it trades rank for reach.
- Gotcha: allocation size for DFT-s-OFDM must be 2^a·3^b·5^c RBs (a 'nice' DFT length) — the scheduler can't grant arbitrary RB counts the way it can for CP-OFDM.
10.2 Transport-Block Coding — Mostly Like PDSCH
The UL-SCH coding chain (TS 38.212 §6.2) is structurally identical to DL-SCH (Ch.8): CRC, LDPC base graph selection, code-block segmentation, encoding, rate matching with HARQ RVs, concatenation. Same BG1/BG2 decision tree. Same K_cb. Same circular buffer with RV 0/1/2/3. We'll not redraw that pipeline — it's Figure 8.2 with "DL-SCH" relabelled "UL-SCH".
The differences are in the limits:
- Maximum modulation order Qm = 8 (256-QAM) with
mcs-Table = qam256 for CP-OFDM. PUSCH does not support 1024-QAM — that is a downlink/PDSCH-only Rel-17 feature; the uplink ceiling is 256-QAM. DFT-s-OFDM caps at Qm = 6 (64QAM).
- Maximum layers ν = 4 for CP-OFDM (UE-capability dependent); always 1 for DFT-s-OFDM.
- Maximum code rate R is the same as PDSCH for the equivalent MCS tables.
- TBS algorithm is identical (TS 38.214 §5.1.3.2 / §6.1.4.2).
10.3 PUSCH-DMRS — Two Types, Same Idea
PUSCH-DMRS shares its structural design with PDSCH-DMRS: Configuration Type 1 (k = 4n + 2k' + Δ, 4/8 ports) and Type 2 (k = 6n + 2k' + Δ, 6/12 ports). Time-domain positions are the same family of front-loaded + additional positions controlled by dmrs-AdditionalPosition. The differences:
- DFT-s-OFDM uses Type 1 only, single-symbol only, and the comb (Δ=0 or Δ=1) is chosen by C-RNTI mod 2 to randomise inter-cell collisions.
- c_init formula uses
scramblingID0/1 from PUSCH-Config (or N_IDcell) — same shape as PDSCH-DMRS c_init.
- Group hopping / sequence hopping (TS 38.211 §6.4.1.3): for DFT-s-OFDM, the DMRS uses Zadoff-Chu-derived low-PAPR sequences instead of QPSK Gold sequences. The 30 groups × 2 sequences = 60 base sequences hop per slot to randomise collisions.
TS 38.211 § 6.4.1.1 — PUSCH DMRS (CP-OFDM)
Same c_init as PDSCH-DMRS:
$$ c_{\text{init}} \;=\; \bigl(2^{17}(N_{\text{symb}}^{\text{slot}}\,n_s + l + 1)(2 N_{\text{ID}}^{n_{\text{SCID}}} + 1) + 2 N_{\text{ID}}^{n_{\text{SCID}}} + n_{\text{SCID}}\bigr) \bmod 2^{31} $$
For DFT-s-OFDM, the DMRS is a length-12·NRB low-PAPR sequence (Zadoff-Chu for NRB ≥ 3, table-based for shorter), with cyclic shift α and group/sequence hopping (TS 38.211 §5.2).
Expert read
- More DMRS ports = more orthogonal MIMO layers (Fig 3.6b); Type 2's extra ports are what high-rank MU-MIMO needs.
- Within a type, CDM groups (front-loaded + additional symbols) multiply the port count via time/frequency cover codes — same trick as CSI-RS CDM (Fig 9.1b).
- Additional DMRS symbols are added for high Doppler so the estimate tracks across the slot; they cost data REs.
- Gotcha: DMRS configuration must match between gNB and UE exactly; a Type-1/Type-2 or CDM-group mismatch makes the channel estimate garbage and every layer fails — not a gradual degrade.
10.4 PUSCH PT-RS
UL PT-RS comes in two flavours, matching the waveform:
| Waveform | PT-RS pattern | Density control |
| CP-OFDM PT-RS | 1 RE per KPT-RS RBs, every LPT-RS symbols, on one port | Same MCS-threshold + RB-threshold logic as PDSCH PT-RS (Sec. 8.7). |
| DFT-s-OFDM PT-RS | K' samples per group, 2/4/8 groups across the allocation | Configured via nrofPorts and sampleDensity in PTRS-UplinkConfig. |
Table 10.2 — UL PT-RS configurations per TS 38.214 §6.2.3. DFT-s-OFDM PT-RS is structurally different — it operates in the pre-DFT (time-domain-like) signal, not on individual REs.
Expert read
- PT-RS matters most for high-MCS / FR2 uplink; at low MCS the phase error is negligible and PT-RS is just wasted REs.
- In DFT-s-OFDM the pre-DFT insertion is the only way to keep PT-RS coherent through the spreading — a direct consequence of the extra DFT (Fig 10.1b).
- PT-RS density is tied to scheduled bandwidth and MCS via configured thresholds — the spec scales overhead to need, same as DL.
- Gotcha: PT-RS shares the DMRS port; misconfiguring its association with the DMRS port leaves the phase estimate referenced to the wrong channel → worse, not better, at high MCS.
10.5 Resource Allocation — Type 0, Type 1, and Hopping
UL frequency-domain RA mirrors DL: Type 0 (RBG bitmap) and Type 1 (RIV). Time-domain RA is also a 4-bit DCI index into PUSCH-TimeDomainResourceAllocationList, giving (K2, S, L, mapping type A/B). K2 is the DCI-to-PUSCH offset (typical K2 = 3 at SCS 30 kHz).
10.5.1 Frequency hopping
PUSCH may hop across two frequency regions inside the same allocation to gain frequency diversity. Hopping is enabled by the Frequency Hopping Flag bit in DCI 0_x. Two modes:
| Mode | Where hop occurs | Hop pattern |
| Intra-slot hopping | First half of the symbols use RB_start; second half uses (RB_start + RB_offset) mod N_BWP | One hop per slot. |
| Inter-slot hopping | Even slots use RB_start; odd slots use (RB_start + RB_offset) mod N_BWP | One hop per slot boundary; for K2 > 0 or repeated transmission. |
Table 10.3 — PUSCH frequency hopping per TS 38.214 §6.3. RB_offset is per frequencyHoppingOffsetLists in PUSCH-Config.
10.6 Precoding — Codebook vs Non-Codebook
For multi-antenna UEs, the gNB has to tell the UE which precoder to apply when sending PUSCH. Two flavours:
| Mode | Indicated by | UE behaviour |
| Codebook-based | TPMI (Transmitted Precoding Matrix Indicator) + SRI in DCI 0_1/0_2 | UE picks precoder W from the fixed TS 38.211 §6.3.1.5 codebook (size depends on ports, layers & codebookSubset — see below). |
| Non-codebook-based | SRI alone (no TPMI) | UE selects one of NSRS previously-trained SRS resources; the SRS itself reveals the precoder via channel reciprocity. |
Table 10.4 — PUSCH precoding modes per TS 38.214 §6.1.1. Codebook-based is closed-loop (gNB picks); non-codebook-based is open-loop (UE picks based on SRS-derived UL CSI).
The codebook itself (TS 38.211 §6.3.1.5) is a fixed list of precoding matrices W indexed by TPMI. Its size grows with antenna ports and shrinks with the configured codebookSubset — which restricts the UE to non-coherent (antenna-selection only), partial-coherent, or fully-coherent precoders to match the UE's PA-phase-coherence capability:
| Ports | Layers ν | nonCoherent | partial&NonCoherent | full&partial&NonCoherent (all) |
| 2 | 1 | 2 | — | 6 (TPMI 0–5) |
| 2 | 2 | 1 | — | 3 (TPMI 0–2) |
| 4 | 1 | 4 | 12 | 28 (TPMI 0–27) |
| 4 | 2 | 6 | 14 | 22 (TPMI 0–21) |
| 4 | 3 | 3 | 5 | 7 (TPMI 0–6) |
| 4 | 4 | 2 | 3 | 5 (TPMI 0–4) |
Table 10.4b — PUSCH codebook sizes (number of allowed TPMIs) per antenna ports, layers, and codebookSubset (TS 38.211 §6.3.1.5, Tables 6.3.1.5-1…-7). Rel-17 adds an 8-port codebook (Tables 6.3.1.5-8/-9). The number of indicated SRS resources/ports equals ν.
TS 38.211 Table 6.3.1.5-1 — the complete 2-port, single-layer codebook
W(TPMI 0) = (1/√2)[1; 0] W(1) = (1/√2)[0; 1] W(2) = (1/√2)[1; 1]
W(3) = (1/√2)[1; −1] W(4) = (1/√2)[1; j] W(5) = (1/√2)[1; −j]
TPMI 0–1 are antenna selection (non-coherent); 2–5 add a coherent phase between the two ports. The 4-port, 2-layer table extends the same idea to 22 matrices.
In plain English. Codebook mode is the gNB saying "use precoder #7 from the catalogue, layer 2 of 2". Non-codebook mode is the gNB saying "use whichever precoder gave the strongest SRS last time you transmitted — your call". Codebook is simpler for the UE; non-codebook captures finer channel structure but only works in reciprocal-channel TDD scenarios with recent SRS.
Expert read
- Non-codebook precoding is essentially reciprocity-based beamforming from the UE: it precomputes candidate beams, sounds them with SRS, and the gNB just selects — far more accurate than a coarse codebook.
- The SRI (SRS Resource Indicator) in the DCI is the selector; the number of indicated SRS resources equals the number of UL layers.
- Codebook mode is the FDD / no-reciprocity fallback — TPMI from a small codebook, like the downlink Type I.
- Gotcha: non-codebook needs accurate, recent SRS; if the UE moves or the SRS is too sparse, the precomputed beams are stale and UL throughput drops even though the codebook path would have been safer.
10.7 UCI on PUSCH — Multiplexing Control with Data
When the UE has both PUSCH and UCI (HARQ-ACK, CSI, SR) to send in the same slot, the UCI piggybacks on the PUSCH. The bit count for each UCI piece is computed from a beta-offset table (βoffsetHARQ-ACK, βoffsetCSI-1, βoffsetCSI-2) per TS 38.213 Table 9.3-1.
| UCI piece | Bit count formula (essence) | Placement |
| HARQ-ACK | Q'ACK = ⌈OACK·βoffsetHARQ-ACK·L · NRE·R / GUL-SCH⌉ | Symbols immediately after the front-loaded DMRS |
| CSI Part 1 | Q'CSI-1 with βoffsetCSI-1 | Spread across remaining PUSCH symbols |
| CSI Part 2 | Q'CSI-2 with βoffsetCSI-2 | Lowest priority; dropped if budget exceeded |
Table 10.5 — UCI multiplexing on PUSCH per TS 38.212 §6.3.2. The UE punctures (or rate-matches around) UL-SCH bits to make room.
Expert read
- ACK punctures, CSI rate-matches — the deliberate asymmetry: HARQ-ACK is tiny and timing-critical so it overwrites data (decoder tolerates the few lost coded bits); CSI is larger and less urgent so the data is simply encoded around it.
- ACK lands immediately after the first DMRS so it survives even if the UE is cut off early — placement is a reliability decision, not an arbitrary one.
- beta-offset parameters set how many REs UCI may steal; too generous starves data throughput, too stingy under-protects the ACK — a real tuning knob.
- Gotcha: if PUSCH and a PUCCH carrying UCI collide in the same slot and multiplexing timelines aren't met, the UE drops one per a strict priority rule — a frequent cause of 'phantom' missing ACKs in logs.
10.8 Configured Grants — PUSCH Without a DCI
For periodic, low-latency, or low-overhead uplink traffic (VoNR, IIoT, periodic CSI report), the network can grant PUSCH without sending a DCI each time. Two types:
| Type | Configured by | Activation | Use case |
| Type 1 | RRC fully | RRC reconfiguration | VoNR, deterministic IIoT |
| Type 2 | RRC + DCI activate | DCI 0_1 with CS-RNTI | Bursty SPS-like UL traffic |
Table 10.6 — Configured Grants per TS 38.214 §6.1.2.3.
Both types share the same periodicity / offset / RB-allocation / MCS schema in ConfiguredGrantConfig. Up to 12 configured grants can be active per BWP in Rel-16+, supporting IIoT use cases where deterministic latency outweighs spectral efficiency.
Expert read
- Configured grants are a URLLC and periodic-traffic tool: skipping the SR→grant handshake removes a full round-trip from the latency budget.
- They suit predictable flows (VoNR, sensor telemetry); the cost is wasted resources when the UE has nothing to send in a granted instant.
- Multiple configured grants can overlap to hit very tight latency (a transmission opportunity is always near) at higher overhead.
- Gotcha: contention/collision is possible if grants are shared or if the UE and a dynamic grant overlap — handling priority between configured and dynamic grants is a known scheduler edge case.
10.9 PUSCH Repetition and Coverage Enhancement
A power-limited UE at the cell edge often cannot deliver a transport block reliably in a single transmission. NR answers with repetition and related coverage tools that trade time (and therefore peak rate) for energy accumulated at the receiver. There are two repetition schemes plus two Rel-17 enhancements.
| Scheme | Release | Granularity | Idea |
|---|
| Repetition Type A | Rel-15 | Whole slot | K repetitions in K consecutive slots, same symbol allocation each slot; RV cycles 0,2,3,1. Set by numberOfRepetitions / pusch-AggregationFactor. |
| Repetition Type B | Rel-16 | Mini-slot | Back-to-back "nominal" repetitions; any that cross a slot boundary or an invalid symbol are split into shorter "actual" repetitions. Lower latency, finer coverage steps. |
| TBoMS | Rel-17 | Multi-slot | One transport block mapped over multiple slots → lower effective code rate without per-slot CRC overhead. |
| DMRS bundling | Rel-17 | Across reps | Maintain phase/power continuity across repetitions so the gNB can jointly estimate the channel over them — a real coherent-combining gain. |
Table 10.7 — PUSCH coverage tools (TS 38.214 §6.1.2.1, §6.1.2.3). Repetition lowers the effective code rate the receiver sees by accumulating energy; DMRS bundling adds coherent (not just energy) combining.
Expert read- Repetition is open-loop coverage: it does not need CSI, just more time — ideal for the cell edge and for Msg3 (Rel-17 added Msg3 repetition) where no good channel estimate exists yet.
- The minimum UL turnaround is bounded by the UE's PUSCH preparation time N2 (TS 38.214 §6.4): the scheduler cannot place a grant's PUSCH sooner than the UE can build it, which also bounds how tightly repetitions can pack.
- DMRS bundling is the key Rel-17 step: without phase continuity the gNB can only energy-combine repetitions; with it, it coherently combines them for a much larger gain — but the UE must hold power and phase steady across the bundle.
- Gotcha: Type B actual-repetition splitting interacts with the TDD pattern (§3.4) — a nominal repetition landing on DL/flexible symbols is dropped or shortened, so a mis-planned pattern silently wastes repetitions.
10.10 Worked Example — 20 RBs · 12 sym · MCS 14 · CP-OFDM · 1 layer
PUSCH TBS & pipeline
- DCI 0_1 grants: nPRB = 20, Nsymb,sh = 12, MCS 14 from Table 5.1.3.1-1 (Qm = 4 (16QAM), R = 490/1024 ≈ 0.478), v = 1, DMRS Type 1 single-symbol (12 DMRS REs/RB), Noh = 0.
- NRE' = 12·12 − 12 − 0 = 132 per RB. Capped at 132 (< 156). NRE = 132·20 = 2640.
- Ninfo = 2640 · (490/1024) · 4 · 1 = 5,053 bits.
- Ninfo > 3824: n = ⌊log₂(5,029)⌋ − 5 = 12 − 5 = 7; Ninfo' = max(3840, 128·round(5,029/128)) = max(3840, 128·39) = 4,992.
- R > 0.25 and Ninfo' ≤ 8424 → C = 1. TBS = 8·⌈(4,992+24)/8⌉ − 24 = 8·627 − 24 = 4,992 bits.
- BG selection on A = 4,992: A ≤ 292? No. R ≤ 0.25? No. (A ≤ 3824 AND R ≤ 0.67)? No (A > 3824). → BG1, Kcb = 8448. Single CB (4,992 + 24 = 5,016 ≤ 8448), no per-CB CRC needed.
- LDPC encode → rate match to G = NRE·Qm·v = 2640·4·1 = 10,560 bits → scramble → 16QAM → 2,640 symbols → 1 layer → 1 antenna port.
- PUSCH transmitted on UE's allocated PRBs; gNB demodulates using SRS-derived channel estimate + PUSCH-DMRS.
10.11 Rel-17 / Rel-18 Deltas
- Full-power uplink Tx modes (Rel-16). Full-power modes (Mode 1/2) let a multi-antenna UE reach PCMAX even with non-full-rank precoders — a real coverage gain. (Note: 1024-QAM is downlink/PDSCH-only; PUSCH stays at 256-QAM.)
- PUSCH repetition Type B (Rel-16). Configured number of mini-slot repetitions; each repetition is its own RV.
- Coverage enhancement (Rel-17). PUSCH TBoMS (Transport Block over Multiple Slots), DMRS bundling across slots for joint channel estimation, and π/2-BPSK with shaped spectrum.
- Sub-band non-overlapping FH (Rel-17). Hops to a different sub-band rather than just a frequency offset — better for full-bandwidth fading.
- Configured-grant skip Tx (Rel-15). UE can skip CG transmission when no UL data is pending; saves power.
10.12 Field-Engineering Notes
- DFT-s-OFDM forced at cell edge. Most operators set
transformPrecoder = enabled on the initial BWP for RACH and Msg3, then switch to CP-OFDM after RRC connection. Watch for UEs that stay on DFT-s-OFDM throughout — usually a config mismatch.
- UCI puncturing collisions. When HARQ-ACK + CSI Part 1 + CSI Part 2 all land on the same PUSCH, CSI Part 2 is dropped first. Diagnose with PHY logs showing "UCI multiplexing: CSI-2 dropped".
- SRS-based non-codebook fails on FDD. Non-codebook precoding assumes channel reciprocity; in FDD this is broken. Always use codebook-based precoding on FDD.
- PUSCH-DMRS group hopping for DFT-s-OFDM. When two neighbour cells share
groupHoppingEnabledTransformPrecoding with the same seed, DMRS collisions occur. Configure different seeds via sequenceHoppingEnabledTransformPrecoding.
- Configured-grant misalignment. CG periodicity must align with TDD UL slots; a 10 ms periodicity on a 4:1 DDDDU pattern means most CG opportunities are skipped. Always validate periodicity ÷ slot-pattern length.
10.13 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §6.3.1 PUSCH RE mapping · §6.4.1 PUSCH DMRS · §5.2 low-PAPR seqs
- TS 38.212 §6.2 UL-SCH coding · §6.3 UCI processing
- TS 38.213 §11 PUSCH power control · §9 UCI on PUSCH
- TS 38.214 §6.1 PUSCH resource allocation · §6.2 PUSCH PT-RS · §6.3 PUSCH frequency hopping
- TS 38.331 PUSCH-Config · ConfiguredGrantConfig
Live labs
Part III · Uplink Channels & Signals — Chapter Eleven
PUCCH — Physical Uplink Control Channel
HARQ-ACK, Scheduling Requests, and Channel-State Information — the three things the phone must tell the network before the network can do anything useful next, and the five formats plus the acknowledgement codebooks that carry them.
TS 38.211 §6.3.2TS 38.212 §6.3 (UCI)TS 38.213 §9 (PUCCH, codebooks, DAI)TS 38.331 (PUCCH-Config)
After this chapter you will be able to
Pick the right PUCCH format (0–4) for any payload and duration; configure short PUCCH for ultra-low-latency HARQ-ACK and long PUCCH for coverage; build the three HARQ-ACK codebooks (Type 1 semi-static, Type 2 dynamic with DAI, Type 3 one-shot); use PUCCH repetition and sub-slot PUCCH for coverage and URLLC; multiplex HARQ-ACK + SR + CSI; derive the implicit PUCCH resource from the scheduling PDCCH; point the PUCCH beam with a spatial-relation; and reason about why PUCCH overhead governs uplink capacity in dense scheduling.
For all the attention the data channels get, a 5G cell lives or dies on its control loop, and the uplink half of that loop is PUCCH. Every downlink transmission the gNB makes is provisional until the phone confirms it; every uplink grant the gNB issues is a response to a request the phone first had to send. PUCCH is the channel that carries those confirmations and requests — tiny in bits, enormous in consequence — and getting its formats, resources, and acknowledgement codebooks right is what keeps a loaded cell from collapsing under its own signalling.
11.1 What PUCCH Carries
The phone has three things it must tell the network. HARQ-ACK says "I received your last PDSCH" — or did not. SR (Scheduling Request) says "I have data to send, please grant me a PUSCH". CSI (Channel-State Information) says "here is how good the downlink looks: I recommend this MCS and rank." Together these are UCI — Uplink Control Information — and PUCCH is one of the two places they ride. The other is PUSCH (§10.7); when there is no PUSCH this slot, UCI rides PUCCH.
11.1.1 Scheduling Request Configuration
An SR is not free-running. Each logical channel that may trigger one is tied to a SchedulingRequestResourceConfig: a periodic Format-0/1 PUCCH resource, a periodicity and offset, and an sr-ProhibitTimer that stops the UE from flooding the network with back-to-back requests. When data arrives for a mapped logical channel and no grant is available, the UE sends a positive SR on the next configured occasion and the gNB replies with a PUSCH grant. If repeated SRs go unanswered (sr-TransMax), the UE falls back to RACH (Chapter 12) to get attention — the safety net beneath the SR loop.
11.2 The Five PUCCH Formats
| Format | Length | UCI bits | Waveform / multiplexing |
|---|
| 0 | 1–2 sym (short) | 1–2 | Cyclic-shift sequence selection — no modulation, no DMRS |
| 1 | 4–14 sym (long) | 1–2 | Long version of 0; time-domain OCC → many UEs per PRB |
| 2 | 1–2 sym (short) | ≥3 (typ. ≤11) | QPSK on PRBs; DMRS every 3rd subcarrier; no CDM |
| 3 | 4–14 sym (long) | ≥3, large CSI | DFT-s-OFDM (π/2-BPSK or QPSK); single-UE |
| 4 | 4–14 sym (long) | ≥3 | DFT-s-OFDM + pre-DFT OCC → 2 or 4 UEs share PRBs |
Table 11.1 — The five PUCCH formats (TS 38.211 §6.3.2). Formats 0/2 are short PUCCH (1–2 symbols, low latency); 1/3/4 are long PUCCH (4–14 symbols, coverage). Formats 0/1 carry ≤2 bits; 2/3/4 carry CSI-sized payloads.
In plain English. Format 0 is the shouted whisper — one or two symbols, just enough for "yes" or "no". Format 1 is that same shout repeated to be heard from further away. Format 2 jumps to "I have a short paragraph" — still brief in time, but several bits. Formats 3 and 4 are the long letters: full CSI reports and multi-bit acknowledgement codebooks, anything past a dozen bits. The choice is always (how many bits) × (how much coverage do I need).
11.3 Format Details
11.3.1 Format 0 — a bit carried by which cyclic shift you send
Format 0 transmits no modulation symbols at all. It sends one of 12 cyclic shifts of a base length-12 low-PAPR sequence, and the gNB detects which shift was used. Twelve shifts could encode ~3.5 bits, but Format 0 limits itself to 1 SR + 1 HARQ-ACK. Per TS 38.213 §9.2: ACK-only uses shift 0 (NACK) vs 6 (ACK); positive SR uses shift 3; joint 1-bit ACK + SR uses four of the shifts. Duration 1–2 symbols, 1 PRB (12 or 24 REs).
Expert read- Because the information is in the cyclic shift of a constant-amplitude sequence, Format 0 is self-referenced (no DMRS) — which is why it fits in 1–2 symbols and detects at the cell edge.
- Several UEs share one PRB via different cyclic shifts of the same base sequence (orthogonal while delay spread < shift spacing).
- For ≥3 bits the UE must move to Format 2/3/4, which actually modulate QPSK.
- Gotcha: shift orthogonality collapses under large delay spread — over-allocating shifts per PRB in a high-delay cell causes measured ACK/NACK confusion.
11.3.2 Format 1 — the long, multiplexable version
Same cyclic-shift idea as Format 0 but spread over 4–14 symbols, alternating UCI and DMRS symbols, with a time-domain OCC on top. The shift × OCC combination multiplexes up to ~14 UEs on a single PRB — a remarkable control-plane density.
11.3.3 Format 2 — short, ≥3 bits
1–2 symbols, 1–16 PRBs. UCI is Reed–Muller (≤11 bits) or polar (12+), QPSK-modulated and scrambled onto data REs, with DMRS on every third subcarrier (k mod 3 = 1, i.e. 4 of 12). So 1 PRB × 1 symbol = 8 data REs = 16 coded bits.
Format 2 is the short, medium-payload workhorse — a CSI report or a multi-bit acknowledgement that does not need a long PUCCH. Its DMRS sits on a fixed comb (subcarriers 1, 4, 7, 10 of every PRB), giving a pilot every third tone for a fast channel estimate; the other eight tones carry QPSK data. Because DMRS overhead is a flat one-third, data capacity scales linearly with PRB count, which is how a larger CSI report is fitted — grant more PRBs (up to 16), not more symbols.
11.3.4 Format 3 — long, DFT-s-OFDM
4–14 symbols, 1–16 PRBs, DFT-s-OFDM for low PAPR and coverage; π/2-BPSK or QPSK. UCI coded by Reed–Muller/polar; 1, 2, or 4 dedicated DMRS symbols set by additionalDMRS and the duration.
11.3.5 Format 4 — long, multiplexed
Like Format 3 but with a pre-DFT OCC of length 2 or 4 across the modulation symbols, so 2 or 4 UEs share the same PRBs and the gNB separates them by their orthogonal cover codes.
The dedicated DMRS symbols in a long PUCCH depend on its duration and on additionalDMRS (TS 38.211 Table 6.4.1.3.3.2-1):
| Duration L | additionalDMRS=false | additionalDMRS=true |
|---|
| 4 | sym 1 | sym 0, 2 |
| 6, 7 | sym 1, 4 | same |
| 8 | sym 1, 5 | sym 1, 4, 7 |
| 10 | sym 2, 7 | sym 1, 3, 6, 8 |
| 12 | sym 2, 8 | sym 1, 4, 7, 10 |
| 14 | sym 3, 10 | sym 1, 5, 8, 12 |
Table 11.2 — PUCCH Format 3/4 DMRS symbol positions. additionalDMRS=true doubles or quadruples pilot density — better Doppler tracking, fewer UCI REs.
11.4 HARQ-ACK Codebooks — How Many Bits, and Staying Aligned
A single PDSCH needs a single ACK bit — easy. But a UE aggregating carriers, receiving multiple PDSCH across a bundling window, and using code-block groups can owe the gNB dozens of ACK bits in one report. The HARQ-ACK codebook defines exactly how many bits the UE sends and in what order, and — critically — how the UE and gNB stay in agreement even when a scheduling DCI is missed. NR offers three.
Two refinements further change the codebook size. CBG-level feedback (Chapter 8) lets the UE ACK/NACK individual code-block groups of a transport block — more bits, but partial retransmission. Spatial bundling does the opposite, ANDing the ACKs of a high-rank PDSCH’s two transport blocks into one bit to halve feedback. Both are configured and both must match at the gNB, or the codebook length is miscomputed.
The glue for Type 2 is the Downlink Assignment Index (DAI), carried in DCI 1_1/1_2. The counter DAI (C-DAI) is a running count of {serving cell, PDCCH-monitoring occasion} pairs scheduled up to and including this one; the total DAI (T-DAI) is the total scheduled so far across all carriers in this occasion. Both are 2 bits and wrap mod 4. If the UE misses one DCI, the next DCI's DAI jump tells it exactly how many ACK bits to insert as NACK — so a single lost grant never shifts the entire codebook.
Expert read- Type 1 trades efficiency for robustness: it always sends the worst-case bit count, wasting uplink when the cell is lightly loaded, but it is immune to missed-DCI misalignment.
- Type 2 trades robustness for efficiency: the report shrinks to what was actually scheduled, but it leans entirely on the DAI to stay aligned — which is why the DAI exists at all.
- Type 3 (one-shot) is the recovery valve: after an NR-U LBT gap or a burst of errors, the gNB asks for every process's status in one report and resynchronises HARQ.
- Gotcha: a C-DAI/T-DAI mismatch from a missed last DCI in an occasion still loses the tail — which is why the gNB sizes K1 and the monitoring occasions conservatively in high-BLER conditions.
11.5 PUCCH Resources and Resource Sets
A PUCCH-Resource fixes one (format, starting PRB, starting symbol, length, initial cyclic shift, OCC index). Resources are grouped into PUCCH-ResourceSets by payload-size threshold: Set 0 (formats 0/1, ≤2 bits), Set 1 (formats 2/3/4, 3–11 bits), and further sets for larger payloads. The UE picks the set whose range contains its UCI bit count, then a resource within it indicated by the 3-bit PUCCH Resource Indicator (PRI) in the DL DCI. For the very first ACK — before dedicated config — the resource is derived implicitly from the scheduling PDCCH.
11.5.1 Spatial Relation — Pointing the PUCCH Beam
At FR2 the UE must aim its PUCCH at the gNB. PUCCH-SpatialRelationInfo ties a PUCCH resource to a reference signal — an SSB, a CSI-RS, or an SRS — whose transmit/receive beam the UE reuses for PUCCH. Up to eight spatial relations can be configured and one activated per resource by a MAC-CE, so the beam can follow the UE without RRC reconfiguration. (At FR1 with a single effective beam this is usually absent.)
11.6 PUCCH Repetition and Sub-Slot PUCCH
Two opposite pressures act on PUCCH: a cell-edge UE needs more energy to be heard, while a URLLC UE needs its ACK sooner. NR answers each with its own tool.
Expert read- Repetition is the uplink-control analogue of PUSCH repetition (§10.9): pure energy accumulation, no CSI needed, for coverage-limited UEs.
- Sub-slot PUCCH is a URLLC enabler: with two-symbol sub-slots a UE can acknowledge a mini-slot PDSCH almost immediately rather than at the next slot boundary.
- Both interact with the TDD pattern (§3.4): repetitions and sub-slots only land on symbols that are actually uplink, so the available-slot counting must respect the DL/UL configuration.
- Gotcha: repetition multiplies PUCCH overhead — on a heavily loaded cell, four-slot repetition for many edge UEs can starve PUSCH of uplink symbols.
11.7 UCI Coding on PUCCH
| UCI size | Encoding | Notes |
|---|
| 1 bit | Repetition (BPSK) / sequence | Via sequence selection in Formats 0/1 |
| 2 bits | Simplex / sequence | Also via sequence selection |
| 3–11 bits | Reed–Muller (32, O) | TS 38.212 §6.3.1.2 |
| 12+ bits | Polar (+CRC-6 for 12–19 bits / CRC-11 for ≥20) | TS 38.212 §6.3.1.2.1 — same machine as PDCCH |
Table 11.3 — UCI encoding by payload size. Reed–Muller serves the short payloads where polar's setup would dominate; polar takes over once the payload (large CSI, big codebooks) justifies it.
11.8 Worked Example — 4-bit HARQ-ACK on Format 2
Format 2 carrying a small Type-2 codebook
- The UE owes 4 HARQ-ACK bits (4 PDSCH in the window, Type 2 dynamic codebook; DAI confirmed all 4 received). Payload 4 → Set 1 (3–11 bits).
- PRI in DCI = 2 → PUCCH-Resource id 4 in Set 1: Format 2, PRB 80, 1 PRB, 1 symbol, start symbol 12.
- 4 bits → Reed–Muller (32,4) → 32 coded bits. 1 PRB × 1 symbol = 8 data REs (4 DMRS subtracted) × 2 bits/QPSK = 16 modulation bits.
- Rate-match 32 → 16, QPSK → 8 PUCCH REs; DMRS on k ∈ {1,4,7,10}.
- Scramble cinit = (nRNTI·215 + NID) mod 231; QPSK-map.
- gNB channel-estimates from DMRS, demodulates, descrambles, RM-decodes → the 4-bit codebook; each bit ACK/NACKs one prior grant.
11.9 Field-Engineering Notes
- Format 0 false-ACK. The 12-shift detector is prone to false ACK at low SNR; hold the false-ACK target ≤10−3 via the detection threshold, and prefer Format 1 below it.
- Codebook type mismatch. If gNB and UE disagree on Type 1 vs Type 2, every multi-bit ACK misaligns — a frequent cause of correlated, carrier-wide HARQ failures that look like interference.
- DAI gaps. A missed final DCI in a monitoring occasion still truncates a Type-2 codebook; size K1 and occasions conservatively in high BLER.
- SR + ACK collision. When SR and HARQ-ACK fall in the same slot on Format 0/1, the UE multiplexes — the gNB must use the joint detection table, or both fail.
- Format 4 OCC vs timing advance. Four UEs sharing length-4 OCC lose orthogonality if their timing advances differ widely; group them by TA range.
11.10 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §6.3.2 PUCCH formats 0–4 · §6.4.1.3 PUCCH DMRS
- TS 38.212 §6.3.1 UCI coding (Reed–Muller, polar)
- TS 38.213 §9 UCI on PUCCH · §9.1 HARQ-ACK codebooks & DAI · §9.2 PUCCH resources
- TS 38.331 PUCCH-Config · PUCCH-ResourceSet · PUCCH-SpatialRelationInfo
Where to go next
- Ch. 7 PDCCH — the DCI that carries the PRI and DAI.
- Ch. 17 Power control — how PUCCH reaches the gNB at the cell edge.
Live lab
Part III · Uplink Channels & Signals — Chapter Twelve
PRACH — Physical Random Access Channel
The opening handshake. The way a UE introduces itself to a cell when it hasn't been told what its uplink resources are.
TS 38.211 §6.3.3
TS 38.213 §8
TS 38.321 §5.1 (RACH procedure)
TS 38.331 (RACH-ConfigCommon)
After this chapter you will be able to
Walk a UE through the 4-step and 2-step RACH procedures; pick a long (839-sample) or short (139-sample) preamble format for any band; decode any PRACH Configuration Index (TS 38.211 Table 6.3.3.2-2/3/4) into concrete time-domain occasions; compute RA-RNTI from the occasion's (s_id, t_id, f_id, ul_carrier); place SSB-to-RO associations correctly; reason about power-ramp steps; and diagnose the three most common RACH failures in the field.
12.1 What Random Access Is For
A phone that has just decoded SIB1 knows the cell's identity and its system info, but it has not been assigned any uplink resources. PUCCH is configured. PUSCH is gated. The MAC layer can't speak. So the phone needs a way to say "hello, here I am, please give me a grant" — without any reserved channel of its own to say it on. That mechanism is RACH: Random Access Channel. It runs over the PRACH on the air, and the procedure spans four (or two) messages between the UE and the gNB.
Five situations trigger RACH:
- Initial access — first connection to a cell from IDLE.
- RRC re-establishment — after radio-link failure.
- Handover — to the target cell.
- UL data arrival in INACTIVE or with TA timer expired — to re-synchronise.
- Scheduling request when no PUCCH-SR is configured — to ask for a PUSCH grant.
12.2 4-step RACH — The Classic Handshake
TS 38.321 § 5.1 — Random access procedure
Msg1 (UE → gNB): Preamble on PRACH
"Hi, I'm preamble #X. My received RSRP suggests power class Y."
Msg2 (gNB → UE): RAR on PDSCH, scheduled by DCI 1_0 with RA-RNTI
"I saw your preamble #X. Use TC-RNTI Z, timing advance T, RB grant G."
Msg3 (UE → gNB): RRC connection request on PUSCH (scheduled by Msg2)
"Here's my UE identity and my RRC request."
Msg4 (gNB → UE): Contention resolution on PDSCH (scheduled with TC-RNTI or C-RNTI)
"Yes, you (UE identity X) are the one I'm responding to. Move to C-RNTI."
In plain English. Imagine knocking on the door of a building where lots of people are also knocking. Msg1 is the knock itself — but instead of words, you whistle one of 64 distinct tunes. The doorman (the gNB) hears the tune and looks at his roster. Msg2 is him calling back through the door: "I heard tune number 17. If that was you, here's a temporary badge and an exact seat to come sit in." Msg3 is you walking in, sitting in that seat, and saying who you actually are — because there might have been more than one person whistling tune 17. Msg4 is the doorman confirming: "Yes, the one named Alice, that's who I want; the others can leave." That fourth step is what makes RACH contention-based — multiple UEs can pick the same preamble, and only Msg4 disambiguates them.
Expert read
- Contention is the whole point: multiple UEs may pick the same preamble, so Msg4 echoing the Msg3 identity is how each UE learns if it (not a collider) was the one heard.
- Msg2's timing advance is the first time the UE learns its propagation delay — before that it transmits the preamble blind (which is why CP+guard size = cell radius, Fig 12.4b).
- The TC-RNTI in Msg2 becomes the C-RNTI once contention is resolved — the UE's identity is bootstrapped through this exchange.
- Gotcha: if two UEs collide AND have correlated Msg3, neither resolves → both back off and ramp power — repeated under load is the RACH-storm failure mode (Ch.26 Case 3).
12.3 2-step RACH — Skipping Round-Trips
4-step RACH costs 4 RTTs. For low-latency or small-packet use cases (Cell-DRX wakeups, mMTC, small data transmission), Rel-16 added 2-step RACH: merge Msg1+Msg3 into MsgA and Msg2+Msg4 into MsgB.
| Step | 2-step content | Channel |
| MsgA | Preamble + PUSCH payload (RRC request + small data) | PRACH + PUSCH back-to-back |
| MsgB | RAR with contention resolution + C-RNTI assignment | PDSCH scrambled by MsgB-RNTI |
Table 12.1 — 2-step RACH messages (TS 38.321 §5.1.4a). 2-step is allowed only when SIB1 advertises 2-step RACH support (msgA-Config).
If MsgB doesn't arrive in time, the UE falls back to 4-step RACH automatically — so 2-step is an optimisation, not a replacement.
Expert read
- 2-step shines when the UE has a recent timing advance (e.g. small cell, or coming from RRC-INACTIVE) so it can send payload before the gNB has corrected its timing.
- MsgA payload rides on a PUSCH occasion mapped to the chosen preamble; if contention can't be resolved, the UE falls back to 4-step — so 2-step is an optimistic optimisation, not a replacement.
- It's the latency tool for RACH storms and URLLC access: fewer messages per UE means the RACH channel absorbs more attempts per period (see Ch.26 Case 3).
- Gotcha: in a large cell with big unknown timing advance, MsgA PUSCH arrives misaligned and fails — 2-step is counter-productive there, which is why it's gated by cell size / configuration.
12.4 PRACH Preamble Formats — Long vs Short
Two families of preamble exist. Long preambles (length 839) inherit from LTE — they have very long cyclic prefixes, support large cells (tens of kilometres), and use 1.25 / 5 / 15 kHz subcarrier spacing. Short preambles (length 139) are NR-native — much shorter cyclic prefixes, smaller cells, but support up to 120 kHz SCS for FR2.
| Format | LRA | Sequence length | SCS | CP duration | Max cell radius |
| 0 | 839 | 1 OFDM symbol | 1.25 kHz | 103 μs | ~15 km |
| 1 | 839 | 2 symbols (rep) | 1.25 kHz | 684 μs | ~100 km |
| 2 | 839 | 4 symbols (rep) | 1.25 kHz | 153 μs | ~22 km |
| 3 | 839 | 4 symbols (rep) | 5 kHz | 103 μs | ~14.5 km (high-speed) |
| A1 – A3 | 139 | 2, 4, 6 symbols | 15/30/60/120 kHz | 2–17 μs | small/mid cell |
| B1 – B4 | 139 | 2, 4, 6 symbols | 15/30/60/120 kHz | 3–47 μs | small/mid cell, longer GP |
| C0, C2 | 139 | 1, 4 symbols | 15/30/60/120 kHz | longer | large coverage on short preambles |
Table 12.2 — PRACH preamble formats per TS 38.211 §6.3.3.1. Format 0/1/2/3 are long preambles (sequence length 839); A/B/C are short (139). The format is configured by prach-RootSequenceIndex and prach-ConfigurationIndex.
In plain English. The long preamble (839 samples) takes a long time to transmit and listens patiently through a long cyclic prefix — so it can reach across a big cell where the round-trip can be 100 microseconds. The short preamble (139 samples) is quicker but only works in cells where the round-trip is small. The choice is the operator's; FR1 macro deployments often use Format 0 or B4; FR2 small-cell deployments use A/B/C with high SCS.
Expert read
- CP + guard time = cell radius. A preamble's CP must exceed the round-trip delay to the cell edge, so large rural cells need the long formats; FR2 picocells use short ones.
- Short formats repeat the sequence within the occasion so the gNB can receive-beam-sweep across repetitions — directly tied to SSB→RO association (Fig 12.7b).
- The sequence length (839 vs 139) sets how many cyclic-shift preambles you get per root and how robust timing estimation is.
- Gotcha: picking a short format in a large cell means the round-trip exceeds the CP → the preamble smears into the next symbol and RACH fails at the edge while working near the tower.
12.5 The Sequence — Zadoff-Chu
TS 38.211 § 6.3.3.1.1 — PRACH sequence
Each PRACH preamble is a cyclic shift of a Zadoff-Chu sequence:
$$ x_{u,v}(n) \;=\; e^{-j\frac{\pi u\,(n+C_v)(n+C_v+1)}{L_{RA}}} $$
where LRA ∈ {139, 839}, u is the root sequence index (prach-RootSequenceIndex), and Cv is the cyclic shift derived from the preamble index v ∈ {0..63}.
Zadoff-Chu has two properties that make it perfect for PRACH. Constant amplitude: |x(n)| = 1 for every sample, so it has zero PAPR — the UE's amplifier can run at maximum power. Zero cross-correlation between cyclic shifts: shift A and shift B of the same root sequence are perfectly orthogonal, so 64 UEs whistling 64 different shifts on the same RO can be cleanly separated by a single correlation.
64 preambles per cell come from up to 64 cyclic shifts of one or more root sequences. If one root only generates K shifts (because zeroCorrelationZoneConfig sets the shift step), the cell uses multiple consecutive roots until 64 distinct preambles exist.
12.6 Restricted Sets and High-Speed RACH
The clean orthogonality of Zadoff-Chu cyclic shifts (§12.5) holds only when the UE is roughly stationary. At speed, a Doppler frequency offset rotates the sequence, and a curious thing happens: the receiver’s correlation against a root produces a second, spurious peak displaced from the true one. That ghost peak can land exactly where another UE’s legitimate cyclic shift would be — so the gNB either detects a preamble nobody sent (false alarm) or mistakes one UE for another. On a high-speed train at 500 km/h this is not a corner case; it is the normal condition.
NR’s answer is the restricted set: certain cyclic shifts of each root are declared off-limits so that no Doppler ghost can collide with a valid shift. The choice is signalled by restrictedSetConfig in RACH-ConfigCommon (TS 38.211 §6.3.3.1), and it applies only to the long (LRA=839) preambles — the formats used in the large, fast-mobility cells where the problem bites.
| restrictedSetConfig | Use | Effect |
|---|
| unrestricted | Static / low mobility | All cyclic shifts usable — maximum preambles per root |
| restricted Type A | High speed (≈ up to ~250–350 km/h) | Removes the shifts a moderate Doppler would alias into |
| restricted Type B | Very high speed (≈ up to 500 km/h, HST) | Removes more shifts — tolerates a larger Doppler spread |
Table 12.3 — PRACH restricted sets (TS 38.211 §6.3.3.1). Restricting shifts shrinks the number of preambles a single root yields, so a high-speed cell needs more consecutive root sequences (a larger prach-RootSequenceIndex span) to reach its 64 preambles.
Expert read- Restricted sets are a long-preamble feature (LRA=839); short 139-length formats live in small cells where the Doppler-to-SCS ratio is small enough that aliasing is not the limiting problem.
- The trade is capacity vs robustness: every forbidden shift is a preamble you cannot offer, so a high-speed-train cell may burn several roots to assemble 64 preambles — plan
prach-RootSequenceIndex accordingly. - Type B is the high-speed-train configuration; it pairs with HST-SFN deployment where several remote radio heads transmit the same SSB to keep the Doppler within one cell.
- Gotcha: configuring an unrestricted set on a genuinely high-mobility cell produces intermittent, speed-correlated false preamble detections that look random until you correlate them with train timetables — a classic field puzzle.
12.7 RACH Occasions — When and Where to Send the Preamble
A RACH Occasion (RO) is a time-frequency slot where the gNB listens for preambles. The number of ROs per system frame and their positions is dictated by the PRACH Configuration Index (a 6-bit field in RACH-ConfigCommon) which looks up one of three big tables — TS 38.211 Tables 6.3.3.2-2 (paired FR1), -3 (TDD FR1), -4 (FR2).
Each row of those tables specifies:
- Preamble format (which format above)
- x — periodicity in frames (1, 2, 4, 8, 16)
- y — subframe offset within the period
- Number of slots within a subframe that carry ROs
- Starting symbol within the slot
- Number of consecutive PRACH slots
Multiple ROs can sit in frequency too — controlled by msg1-FDM ∈ {1, 2, 4, 8} which says "place this many ROs side-by-side in the frequency domain."
Expert read
- RACH capacity = ROs × 64 preambles per period. The festival fix (Ch.26) halved the period — doubling the ROs per second.
- prach-ConfigurationIndex selects the time pattern from a big 3GPP table; msg1-FDM (1/2/4/8) sets the frequency multiplexing.
- ROs are also where SSB→RO association lives — beams are mapped onto these occasions (Fig 12.7b).
- Gotcha: more ROs cost uplink resources that could carry PUSCH — over-provisioning RACH for a rare storm permanently taxes capacity; size it for the 95th percentile, not the worst case.
12.8 SSB-to-RO Association — How a UE Picks Its Beam
In a beam-formed cell (especially FR2), the gNB needs to know which beam to receive Msg3 on. The trick: each SSB beam is associated with a subset of preambles and a subset of ROs. The UE picks the preamble corresponding to its strongest SSB, and the gNB infers "this preamble came in via SSB beam X, so I should receive Msg3 on that beam too."
TS 38.213 § 8.1 — SSB-to-RO mapping
Configured by ssb-perRACH-OccasionAndCB-PreamblesPerSSB:
• oneEighth, oneFourth, oneHalf: multiple ROs per SSB.
• one: one RO per SSB.
• two, four, eight, sixteen: multiple SSBs share one RO, each using a different preamble range.
The 64 preambles in each RO are partitioned: SSB 0 gets preambles 0..N−1, SSB 1 gets N..2N−1, etc.
Expert read
- The association is how the gNB knows the downlink Tx beam to use for Msg2/Msg4 before any CSI exists — the RO is an implicit beam report.
- ssb-perRACH-Occasion (≥1 means several SSBs share one RO via preamble partitioning; <1 means one SSB spans several ROs) is the key knob — mis-setting it is a top-3 RACH-failure root cause (Ch.25).
- Under heavy load the gNB raises preambles-per-SSB or ROs-per-period to add capacity; this is exactly the Case-3 festival fix in Ch.26.
- Gotcha: if coverage doesn't match the SSB beam plan, UEs pick an SSB whose RO the gNB isn't monitoring well → preamble heard on the wrong beam → RAR sent the wrong way → silent RACH failures.
12.9 RA-RNTI — Addressing the Msg2
The gNB doesn't know which UE sent the preamble — it only knows where the preamble was sent. So Msg2 is addressed not by C-RNTI but by an RNTI derived from the RO location: the RA-RNTI.
TS 38.321 § 5.1.3 — RA-RNTI computation
$$ \text{RA-RNTI} \;=\; 1 + s_{\text{id}} + 14\cdot t_{\text{id}} + 14\cdot 80\cdot f_{\text{id}} + 14\cdot 80\cdot 8\cdot \text{ul\_carrier\_id} $$
where sid is the first OFDM symbol of the RO (0..13), tid is the first slot of the RO within the system frame (0..79), fid is the RO frequency index (0..7), and ul_carrier_id is 0 (normal UL) or 1 (SUL).
In plain English. The address on Msg2 is derived purely from where (in time and frequency) the preamble was sent. Every UE that transmitted in that exact (symbol, slot, freq-index, carrier) sees the same RA-RNTI. They all blind-decode for it on PDCCH; if a Msg2 arrives, they all read it; only the UE whose preamble matches the one in the RAR's preamble-index field actually acts on it.
Expert read
- RA-RNTI is implicit addressing (like the PUCCH-resource mapping, Fig 11.5b): the resource you used is your temporary address — no signalling needed.
- All UEs that used the same RO share one RA-RNTI, so Msg2 can RAR-multiplex several preambles in one PDSCH — each UE finds its preamble index inside.
- This is why SSB→RO association (Fig 12.7b) matters: the RO encodes both the beam and the reply address.
- Gotcha: 2-step RACH uses a different MSGB-RNTI; mixing up RA-RNTI vs MSGB-RNTI is a real cause of a UE missing its response in mixed-mode cells.
12.10 Power Ramping — The First Preamble Often Misses
The UE doesn't know how loud to shout. It estimates an initial transmit power from the received SS-RSRP and a desired target Rx power at the gNB:
TS 38.213 § 7.4 — PRACH transmission power
$$ P_{\text{PRACH}} \;=\; \min\bigl(P_{\text{CMAX}},\;\; P_{\text{TARGET}} + PL\bigr) $$
PTARGET = preambleReceivedTargetPower (RRC). PL = path loss derived from RSRP. If no RAR within the ra-ResponseWindow (typically 10 slots), the UE bumps its preamble TX power by powerRampingStep ∈ {0, 2, 4, 6} dB and tries again, up to preambleTransMax attempts (typically 8 or 16).
12.11 Worked Example — UE finds n78, sends preamble #17, gets RAR
RACH end-to-end
- UE has decoded SIB1 on n78.
RACH-ConfigCommon says PRACH Configuration Index = 98, which (per TS 38.211 Table 6.3.3.2-3) maps to format B4, x=2 frames, y=1, slot offset 7, 1 PRACH slot, starting symbol 0. Preamble subcarrier spacing = 30 kHz. msg1-FDM = 1.
- UE has best SSB index = 3.
ssb-perRACH-OccasionAndCB-PreamblesPerSSB says one SSB per RO with 64 preambles. SSB 3 has its own RO in this RACH period.
- UE picks preamble index 17 (random in [0, 63]). Computes the Zadoff-Chu root index and cyclic shift; constructs preamble waveform; transmits at the RO time.
- RA-RNTI = 1 + s_id + 14·t_id + 14·80·f_id + 14·80·8·ul_carrier. Here s_id = 0 (RO starts at symbol 0), t_id = 7 (the RO's first slot in the frame — this is the slot index, not the preamble number 17), f_id = 0 (msg1-FDM = 1), ul_carrier = 0 → RA-RNTI = 1 + 0 + 14·7 + 0 + 0 = 99.
- UE monitors Type 1 CSS (Sec. 7.4.1) for DCI 1_0 scrambled with RA-RNTI = 99, within ra-ResponseWindow = 10 slots after the preamble.
- gNB detects preamble #17 in that RO, schedules RAR. DCI Format 1_0 with RA-RNTI 99 schedules PDSCH carrying RAR MAC subPDU with: preamble index = 17 (matches!), Timing Advance = 42, TC-RNTI = 0x4660, UL grant of 12 RBs at MCS 0.
- UE applies TA, transmits Msg3 (RRC Setup Request) on the granted PUSCH with TC-RNTI 0x4660.
- gNB responds with Msg4 (RRC Setup) on PDSCH addressed by C-RNTI promoted from TC-RNTI 0x4660. RRC-Connected. RACH complete.
12.12 Field-Engineering Notes
- Half-ack from gNB. Some gNB implementations have a bug where they detect a preamble but don't schedule RAR (timing issue in eNB-NR coexistence). UE retransmits 3 times then gives up. Diagnose with PRACH detection counters at the gNB.
- Wrong root sequence on neighbour. Two neighbour cells using the same
prach-RootSequenceIndex create false-positive detections at the cell edge. PRACH planning is the operator's responsibility; root indices should be ≥ 4 apart between neighbours.
- FR2 beam mismatch. If the UE's SSB-RSRP measurement is stale (drifted beam), it sends the preamble on a beam the gNB no longer points at. RACH fails silently. SMTC must be aggressive enough to keep beam measurements fresh.
- 2-step fallback storms. When MsgA succeeds but MsgB is delayed (network congestion), the UE falls back to 4-step at the response-window timer. Many UEs falling back at once create a Msg3 collision storm.
- preambleTransMax too low. On weak coverage cells, preambleTransMax = 4 causes random-access failure rates > 5 %. Increase to 8 or 16 for cell-edge robustness.
12.13 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §6.3.3 PRACH RE mapping & preamble formats · Tables 6.3.3.2-2/3/4
- TS 38.213 §7.4 PRACH power · §8 RACH procedure config
- TS 38.321 §5.1 RACH procedure · §5.1.3 RA-RNTI
- TS 38.331 RACH-ConfigCommon · RACH-ConfigGeneric
Live labs
Part III · Uplink Channels & Signals — Chapter Thirteen
Uplink Reference Signals — SRS and DMRS
SRS lets the gNB measure the uplink channel without the UE sending data; DMRS-UL rides with the data so the gNB can demodulate it. Together they make uplink scheduling — and, in TDD, downlink precoding — possible. This chapter also covers the two jobs SRS quietly took on: positioning and carrier sounding.
TS 38.211 §6.4.1 (DMRS) / §6.4.1.4 (SRS)TS 38.214 §6.2 (SRS config, switching)TS 38.331 (SRS-Config, SRS-PosResource)
After this chapter you will be able to
Configure SRS resources and resource sets for codebook / non-codebook precoding, beam management, and antenna switching; choose comb size and cyclic shift to maximise multiplexing; trigger SRS periodically, semi-persistently, or aperiodically; set up positioning SRS with its staggered comb for UL-TDOA / multi-RTT; use SRS carrier switching to sound a DL-only carrier; and reason about why FDD rarely uses SRS for downlink CSI.
Reference signals are the survey markers of the air interface — they carry no payload, yet nothing useful can be scheduled without them. Chapter 9 covered the downlink markers (CSI-RS, TRS, DMRS); this chapter covers the uplink ones. The headline act is SRS, the Sounding Reference Signal, which inverts the usual flow: the UE transmits, the gNB measures, and in a TDD cell that single measurement reveals both the uplink channel and — by reciprocity — the downlink. The supporting act is the uplink DMRS that lets the gNB demodulate whatever the UE actually sends.
13.1 The Uplink Measurement Picture
In Chapter 9, CSI-RS ran one way: the gNB transmits, the UE measures, the UE reports. SRS is the mirror image — the UE transmits, the gNB measures, the gNB schedules. In TDD, where uplink and downlink share a band, SRS is doubly valuable: it gives the gNB the uplink channel and, through reciprocity, a free estimate of the downlink, sidestepping the whole CSI-feedback loop. In FDD the two bands fade independently, so only the uplink estimate is meaningful and downlink CSI must still come from CSI-RS + reports.
| Signal | Carried with | Purpose |
|---|
| DMRS-UL | PUSCH (Ch. 10) and PUCCH (Ch. 11) | Demodulation pilots; vanish when the data channel does |
| SRS | Dedicated SRS resources | Stand-alone channel sounding; carries no data |
Table 13.1 — The two uplink reference signals. DMRS is bound to a transmission; SRS exists on its own to measure the channel ahead of one.
13.2 SRS Resources and Resource Sets
An SRS-Resource (TS 38.331) is the recipe for one sounding: number of ports Np ∈ {1, 2, 4} (Rel-17: up to 8); number of symbols NSRSsym ∈ {1, 2, 4, 8, 10, 12, 14} (Rel-16 extended this from the original 1–4); comb size KTC ∈ {2, 4, 8}; a cyclic shift α to separate ports/UEs on the same comb; a bandwidth set by C-SRS / B-SRS (TS 38.211 Table 6.4.1.4.3-1); an optional intra-slot/inter-slot frequency hop bhop; and a starting symbol (usually among the last symbols of the slot). Resources are grouped into SRS-ResourceSets by usage.
| Usage | Job | Triggered by |
|---|
| codebook | Codebook-based PUSCH precoder training (TPMI) | DCI 0_1 SRI |
| nonCodebook | Non-codebook PUSCH precoder (UE forms its own) | DCI 0_1 SRI |
| beamManagement | Uplink beam refinement (the UL analogue of P2/P3) | DCI / MAC-CE |
| antennaSwitching | Sweep Tx antennas so the gNB sees the full DL channel | RRC + DCI |
Table 13.2 — SRS resource-set usages (TS 38.214 §6.2.1). A separate positioning SRS exists outside this table (§13.6). One physical signal, several jobs.
In plain English. SRS is the phone telling the gNB the shape of the uplink channel without spending a PUSCH slot to do it. The gNB measures, picks a precoder — a codebook entry, or simply "use the spatial response from your last sounding" — and schedules. For TDD operators it is also the primary route to downlink channel knowledge: if the uplink looks like X, so does the downlink.
Expert read- In TDD, codebook/antennaSwitching SRS is the engine of reciprocity-based DL precoding — the gNB learns the downlink from the uplink sounding.
- antennaSwitching exists because cheap UEs have fewer Tx than Rx chains; sounding each Tx in turn recovers the missing DL channel columns (§13.5).
- beamManagement SRS is the uplink P2/P3 — the gNB sweeps receive beams against the UE's sounding.
- Gotcha: usages do not stack for free — each needs its own resources and overhead; over-configuring SRS eats uplink capacity the UE could use for PUSCH.
13.3 Comb Structure and Multiplexing
SRS uses a comb: each port occupies every KTC-th subcarrier. KTC=2 gives 6 REs/RB, KTC=4 gives 3, KTC=8 (Rel-17) gives 1.5. The combOffset ∈ {0…KTC−1} picks which subset a given SRS uses, so KTC=4 yields four frequency-interleaved soundings. Layer cyclic shifts on top — orthogonal in the code domain — and dozens of UEs sound the same band at once.
TS 38.211 §6.4.1.4.2 — SRS sequenceSRS uses a low-PAPR Zadoff-Chu-derived sequence ru,v(n) of length MSRSsc,b. Cyclic shift αp = 2π·ncs,pSRS / ncs,maxSRS. Group and sequence hopping (groupOrSequenceHopping) randomise inter-cell SRS collisions.
Expert read- Reusing the low-PAPR family matters because SRS is uplink — a cell-edge UE must sound without the PA back-off a high-PAPR signal forces.
- A larger comb packs more users but samples fewer subcarriers per UE, so the gNB interpolates more — fine for slow channels, lossy for high delay spread.
- Comb × cyclic-shift orthogonality is what lets TDD reciprocity scale to many simultaneous sounders.
- Gotcha: cyclic-shift orthogonality degrades with delay spread (as in PRACH/PUCCH) — too many shifts per comb in a dispersive cell leaks UEs into each other's channel estimates.
13.4 Triggering Modes
| Type | Trigger | Use |
|---|
| Periodic | RRC config, every period | Always-on UL CSI for TDD reciprocity |
| Semi-persistent | MAC-CE on/off | Mobility-driven UL CSI, toggled with load |
| Aperiodic | DCI 0_1/0_2 SRS request (2-bit, 4 options) | Just-in-time UL CSI before a grant |
Table 13.3 — SRS triggering (TS 38.214 §6.2.1.1). Aperiodic is the low-overhead default; periodic pays a standing cost but is always fresh.
13.5 Antenna Switching
Reciprocity needs the gNB to know the channel to every UE antenna, but a cheap UE has fewer transmit chains than receive antennas — it physically cannot sound them all at once. Antenna switching solves this: the UE sends SRS from each Tx chain / antenna in turn, across several SRS resources, and the gNB stitches the soundings into the full downlink channel matrix.
Expert read- Antenna switching is what makes reciprocity work on mass-market UEs that have, say, 1 Tx and 4 Rx — without it the gNB would only ever know one column of the DL channel.
- It spans multiple symbols/slots, so on a fast-fading channel the later soundings describe a channel that already moved — reciprocity precoding degrades with UE speed.
- The required guard symbol between soundings must be scheduled, or the switch transient corrupts the next SRS.
- Gotcha: a UE that declares a switching capability it cannot meet (slow RF switch) produces SRS with a leading transient — seen as a biased channel estimate on the first sounded antenna.
13.6 SRS for Positioning
Rel-16 gave SRS a second career: positioning. A positioning SRS (configured as SRS-PosResource, separate from the four data usages) is a sounding designed not to pick a precoder but to let one or more gNBs — TRPs — measure the UE's time of arrival and angle of arrival with high precision. It is the uplink half of NR positioning (Chapter 23), feeding UL-TDOA, UL-AoA, and multi-RTT.
The defining trick is a staggered comb. A single-symbol comb only samples every KTC-th subcarrier, which limits delay resolution. A positioning SRS instead shifts its comb offset symbol by symbol across up to 12 OFDM symbols, so the union of all symbols covers every subcarrier. The receiver combines them into a dense frequency response and recovers timing far more sharply than a single comb allows — exactly what a sub-metre position estimate needs.
Expert read- Positioning SRS is measured by multiple gNBs/TRPs, not just the serving cell — its configuration and muting are coordinated by the LMF (Location Management Function) via LPP/NRPPa (Chapter 23).
- The staggered comb trades time (more symbols) for frequency resolution (finer timing) — the more symbols, the denser the effective sampling and the sharper the ToA peak.
- Comb-8 with staggering supports many UEs and TRP pairs; muting patterns keep neighbour soundings from colliding.
- Gotcha: positioning accuracy is timing-limited, so any uncalibrated gNB Rx-chain delay biases the estimate — TRP timing calibration dominates the real-world error budget more than the SRS design itself.
13.7 SRS Carrier Switching
Carrier aggregation creates a reciprocity gap: a TDD secondary cell may be configured downlink-only (no uplink), yet the gNB would still love an uplink sounding on it to precode the downlink. SRS carrier switching closes the gap — the UE temporarily switches a transmit chain onto the DL-only carrier just long enough to send SRS, then returns. The gNB gets reciprocity-based precoding on a carrier that otherwise carries no uplink at all.
Expert read- Carrier switching is configured per
srs-SwitchFromServCellIndex (TS 38.214); the UE reports its switching capability and the interruption length it needs. - It is a reciprocity enabler for CA: without it, a DL-only TDD SCell could only use coarse codebook precoding, not reciprocity.
- The brief Tx interruption on the source carrier must be accounted for by the scheduler, or a PUSCH overlapping the switch is corrupted.
- Gotcha: not all UEs support carrier switching, and those that do impose a minimum gap — mis-scheduling across the switch is a known cause of sporadic UL errors on the source cell.
13.8 DMRS-UL Recap
PUSCH-DMRS Types 1 and 2 (§10.3) carry the bulk of uplink demodulation; PUCCH Formats 2/3/4 have their own DMRS (§11.3). The UL-specific subtlety is the DFT-s-OFDM DMRS: with transform precoding enabled it uses Zadoff-Chu-derived low-PAPR sequences rather than QPSK Gold sequences, with group hopping (fgh) and sequence hopping (v) randomising collisions slot by slot — the same low-PAPR discipline that lets a power-limited UE sound and demodulate at the cell edge.
13.9 Worked Example — SRS for Non-Codebook Precoding
A 2T2R UE configuring non-codebook SRS
- UE configured with an SRS-ResourceSet (usage = nonCodebook) of 4 SRS resources, each 1 port, KTC=4, 1 symbol, 24-RB bandwidth.
- The UE precodes each SRS resource with a different candidate precoder it derived from its CSI-RS-based DL channel estimate.
- The gNB measures all four soundings, ranks by Rx SINR, and sends DCI 0_1 with SRI = the best resource index.
- The UE reuses that resource's precoder for the next PUSCH — no codebook lookup needed.
- Periodic SRS every 80 slots (40 ms at µ=1) refreshes the precoder as the channel drifts.
13.10 Field-Engineering Notes
- SRS periodicity vs UL-slot density. Periodic SRS every 5 slots on a DDDDU pattern only lands on every 5th (UL) slot — align the periodicity to the TDD pattern or soundings fall on DL symbols and are dropped.
- Inter-cell SRS pollution. The same root sequence across neighbours causes false reciprocity; plan SRS sequence/root indices like PCIs.
- Antenna-switching guard. 1T2R/1T4R UEs need ~10 µs to switch chains — configure the guard, or the switch transient corrupts the next sounding.
- SRS-on-last-symbol vs PUSCH. When SRS sits on the slot's last symbol and a PUSCH spans it, the PUSCH ends one symbol early; a non-compliant UE that keeps transmitting causes PA spill into the SRS.
- Positioning SRS muting. Without coordinated muting, neighbour-TRP positioning soundings collide and the ToA estimate degrades — coordinate via the LMF.
13.11 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §6.4.1 PUSCH DMRS · §6.4.1.4 SRS (incl. positioning) · §5.2 low-PAPR sequences
- TS 38.214 §6.2 SRS configuration, antenna switching, carrier switching
- TS 38.331 SRS-Config · SRS-Resource(Set) · SRS-PosResource(Set)
Where to go next
- Ch. 10 PUSCH — codebook vs non-codebook precoding that SRS feeds.
- Ch. 14 MIMO — how the sounded channel becomes a precoder.
- Ch. 23 Positioning — UL-TDOA / multi-RTT built on positioning SRS.
Part IV · MIMO & Beamforming — Chapter Fourteen
MIMO and Beamforming
More antennas don't just mean more signal. They mean more spatial layers — independent data streams sent on the same time-frequency resources, separated only by direction.
TS 38.211 §6.3.1, §7.3.1.4 (layer mapping)
TS 38.213 §6.1.6 (BFR)
TS 38.214 §5.2 (CSI codebook)
TS 38.331 (TCI-State, BeamFailureRecoveryConfig)
After this chapter you will be able to
Distinguish diversity, spatial multiplexing, and beamforming; pick the right Type I or Type II PMI codebook for any antenna geometry; trace beam-management procedures P1, P2, P3 through SSB + CSI-RS resources; decode any TCI state into the four QCL types; configure beam-failure recovery; and reason about why MU-MIMO works best when UEs are spatially well-separated.
14.1 What Multiple Antennas Buy You
Three things, depending on how you use them. Diversity: transmit the same signal from Nt antennas through different fading paths and combine at the receiver — gets you reliability without rate. Spatial multiplexing: transmit different signals from each antenna and rely on the channel's spatial geometry to keep them separable at the receiver — gets you rate, multiplicatively. Beamforming: weight the antennas with a precoder that steers energy toward the receiver and away from interferers — gets you signal strength and interference suppression. NR uses all three, often in the same slot.
| Use | What changes | What you gain |
| Tx diversity | Same data, different antenna ports | ~3 dB / 6 dB SNR vs 1 antenna |
| Spatial multiplexing | NL different data streams (layers) | Up to NL× the data rate, at the cost of needing Nr ≥ NL at the receiver |
| Beamforming | Same data, weighted across antennas to form a directional beam | 10·log10(Nt) dB SNR if pointed correctly |
| MU-MIMO | Different layers go to different UEs simultaneously | Cell capacity scales with the number of co-scheduled UEs |
Table 14.1 — The four ways NR uses multiple antennas. All four can stack: a 64TR FR2 gNB might use 8 layers of MU-MIMO to 4 UEs (2 layers each), with each layer beamformed.
In plain English. Imagine the gNB as someone trying to deliver pizza to several customers in different apartments of a building. With one antenna and one beam, they can shout once and the closest customer hears clearly while everyone else hears a muffled version. With many antennas they can shape the shout: send it down hallway 3 to apartment 3B, while simultaneously sending a different shout down hallway 7 to apartment 7A — the two shouts don't interfere because they go in different physical directions. That's MU-MIMO. The "directions" are the spatial layers; the geometry of the building is the channel.
Expert read
- The three are not exclusive — a 64TR gNB beamforms each spatially-multiplexed layer, so you get reach and rate together. Diversity is mostly a fallback for control/cell-edge where rank-1 reliability matters more than throughput.
- Spatial multiplexing needs Nr ≥ NL: the receiver must have at least as many antennas as layers to invert the channel — a 2-antenna phone caps at rank 2 no matter how many ports the gNB has.
- Beamforming gain is 10·log₁₀(Nt) only when the beam points correctly — which is why beam management (P1/P2/P3) and BFR exist. A mis-pointed 64-element beam is worse than an omni antenna.
- Gotcha: rank is set by the channel's richness, not the antenna count. A pure line-of-sight channel has rank 1 — 8 antennas there give beamforming gain but no multiplexing gain.
Expert read
- MU-MIMO pairing works only when UEs are angularly separated (roughly >30° at FR1). Two UEs in the same direction can't be nulled apart — the scheduler must pick a spatially-compatible set each slot.
- It needs accurate per-RB precoders → this is the reason Type II codebooks (or TDD reciprocity from SRS) exist; coarse Type I can't form deep enough nulls for clean MU pairing.
- Residual cross-talk between paired UEs raises each other's interference floor; the gNB trades the number of paired layers against the resulting SINR — more users isn't always more cell throughput.
- Gotcha: MU-MIMO gains evaporate under mobility — the precoder is computed from CSI that is already milliseconds stale, so fast-moving UEs are usually dropped to SU-MIMO.
14.2 Layers, Ports, and the Precoder
Three terms it's easy to confuse:
- Antenna port — a logical reference; one DMRS pattern. Multiple physical antennas can be combined into one port via cellular beamforming.
- Layer — one independent data stream. Carried by one logical "layer index" in the MIMO equation.
- Codeword — a transport block after coding. NR allows 1 codeword for ν ∈ {1..4} layers and 2 codewords for ν ∈ {5..8} layers.
The processing chain after coding (TS 38.211 §6.3.1):
TS 38.211 § 7.3.1.4 — Layer mapping
Modulation symbols d
(q)(i) from codeword q are mapped to layers x
(λ)(j):
ν = 1 layer, 1 CW: x(0)(i) = d(0)(i)
ν = 2 layers, 1 CW: x(0)(i) = d(0)(2i), x(1)(i) = d(0)(2i+1)
ν = 3 layers, 1 CW: x(0)(i) = d(0)(3i), x(1)(i) = d(0)(3i+1), x(2)(i) = d(0)(3i+2)
ν = 4 layers, 1 CW: same pattern, 4 ways
ν = 5 layers, 2 CW: CW0 → 2 layers, CW1 → 3 layers
ν = 6 layers, 2 CW: 3 + 3
ν = 7 layers, 2 CW: 3 + 4
ν = 8 layers, 2 CW: 4 + 4
Then the precoder W (size Np × ν) maps layers to antenna ports:
$$ \begin{bmatrix} y^{(0)} \\ \vdots \\ y^{(N_p - 1)} \end{bmatrix} \;=\; W \begin{bmatrix} x^{(0)} \\ \vdots \\ x^{(\nu - 1)} \end{bmatrix} $$
precoding equation, TS 38.211 §6.3.1.5
Expert read
- Layer ≠ port ≠ antenna. Layers are data streams (set by RI), ports are DMRS-defined references the UE equalises, antennas are hardware. W is the only block that mixes across the spatial dimension.
- NR uses 1 codeword for ν≤4 and 2 codewords for ν=5–8 so that each codeword carries ≤4 layers — keeping a single CQI/MCS meaningful per codeword (two codewords = two independent MCS).
- In TDD the gNB can skip the codebook entirely and compute W from uplink SRS via reciprocity — finer than any PMI. FDD must rely on the UE's reported PMI.
- Gotcha: the number of orthogonal DMRS ports (CDM groups) caps simultaneous layers — running out of DMRS ports, not antennas, is what limits real MU-MIMO layer counts.
14.3 Beamforming Architectures — Analog, Digital, Hybrid
A precoder is just a set of complex weights, but where those weights are applied — in baseband, in RF, or both — defines the radio's whole capability and cost. NR deployments use three architectures, and which one a cell uses largely determines how it behaves.
Expert read- The architecture sets the simultaneous-beam count: analog = 1 per panel (time-swept), digital = one per RF chain (per-subcarrier), hybrid = a handful — which directly bounds how much MU-MIMO a cell can do.
- FR2 is hybrid by necessity: a 256-element mmWave array cannot afford 256 data converters, so analog phase shifters do the steering and a few RF chains do the precoding.
- Analog's one-beam-at-a-time limit is exactly why SSB sweeps beams (Chapter 6) and why beam management (P1/P2/P3) exists at all.
- Gotcha: a hybrid array can only point its digital precoders within the current analog beam — schedule two UEs in widely different directions and one must wait for an analog beam switch.
14.4 Type I and Type II Codebooks — Picking the Precoder
The gNB and UE agree on a codebook — a discrete set of precoder matrices. The UE measures CSI-RS, picks the codebook entry that best matches the DL channel, and reports its index (the PMI). The gNB looks up the matching matrix and uses it (or its conjugate, after channel reciprocity in TDD, or a refinement based on additional CSI feedback).
| Codebook | Antenna geometry | PMI size | Granularity |
| Type I single-panel | (N1, N2) ∈ many, Xp = N1·N2·2 ports | ~6–10 bits | Coarse beams, oversampled DFT (O1, O2) |
| Type I multi-panel | Multiple antenna panels at different positions | ~10 bits | Coarse beams + per-panel phase |
| Type II | Same as Type I | ~40–600 bits | Linear combination of L beams (L ∈ {2, 3, 4}), per-RB amplitude + phase |
| Type II PortSelection | Beamformed CSI-RS | ~20–100 bits | UE selects from a port-set, no beam DFT |
| eType II (Rel-16) | Same as Type II | Higher fidelity at lower overhead | Frequency-domain compression |
| Rel-17 enhanced | Coherent JT, mMIMO | Various | Multi-TRP precoder reporting |
Table 14.2 — PMI codebook families (TS 38.214 §5.2.2.2). Type I is universal; Type II is the high-fidelity option for MU-MIMO where the gNB needs accurate per-RB precoder information.
14.5 CSI Reporting — RI, PMI, CQI
The UE feeds back three quantities to drive scheduling:
- RI (Rank Indicator) — how many layers the channel can support cleanly: ν ∈ {1..νmax}.
- PMI (Precoding Matrix Indicator) — the codebook index picked above.
- CQI (Channel Quality Indicator) — 4-bit index into a CQI-to-MCS table, encoding the highest MCS the UE expects to decode at < 10 % BLER on the recommended layers/precoder.
All three live in CSI-ReportConfig in CSI-MeasConfig. Reporting type can be periodic (on PUCCH), semi-persistent (on PUSCH after MAC activation), or aperiodic (on PUSCH after DCI trigger). The "split" between Part 1 and Part 2 of the report controls payload size: Part 1 carries RI + wideband CQI + a hash of PMI; Part 2 carries the full sub-band PMI/CQI when scheduled.
Expert read
- The order is a dependency chain: CQI is conditional on the assumed RI and PMI, so the gNB must schedule the reported rank/precoder or the CQI's implied SINR is wrong.
- RI is reported less often than CQI (rank changes slowly); fine sub-band PMI/CQI ride in Part 2 and can be dropped (Fig 15.5b).
- These are the same RI/PMI/CQI produced by the §9.2.6 eigen-chain — this figure is the feedback end of that measurement pipeline.
- Gotcha: a UE that reports optimistic CQI gets corrected by outer-loop LA (Fig 16.2b); but optimistic RI just wastes a layer — there's no per-layer outer loop, so rank override is a scheduler heuristic.
14.6 Beam Management — P1, P2, P3
Beamforming is useful only if the gNB and UE point at each other. Three procedures keep them aligned:
| Procedure | What's swept | Reference signal | Where |
| P1 | gNB Tx beam (broad) | SSB (Ch.6) | Initial access, coarse beam picking |
| P2 | gNB Tx beam (refined) | CSI-RS resource set with repetition=off | Beam refinement after P1 |
| P3 | UE Rx beam | CSI-RS resource set with repetition=on | UE sweeps its panels with the gNB beam fixed |
Table 14.3 — Beam management procedures (TS 38.214 §5.1.6.1.5).
14.7 TCI States and QCL Types
A TCI state tells the UE which beam to assume for a given DL channel. It does so by declaring that the DMRS of channel X is quasi-co-located with the DMRS or other reference of channel Y. Four QCL types:
| QCL Type | Shared parameters | Use |
| A | Doppler shift, Doppler spread, average delay, delay spread | Full coherent channel model — fine timing/freq from TRS |
| B | Doppler shift, Doppler spread | For tracking when only Doppler is relevant |
| C | Doppler shift, average delay | Coarse, for initial acquisition |
| D | Spatial Rx — beam direction at the UE | FR2 essential — tells UE which Rx beam to point |
Table 14.4 — QCL types per TS 38.214 §5.1.5.
A TCI state may chain two QCL relationships: e.g. "channel X DMRS QCL-Type A with TRS resource R, and QCL-Type D with SSB index 3". This says "for fine timing/freq, refer to TRS R; for Rx beam direction, refer to SSB 3". The UE applies both.
Expert read
- QCL-Type D is the FR2 lifeline: it tells the UE which narrow Rx beam to point before it can even hear the channel. Without it, a mmWave UE would have to blind-sweep its panel every reception.
- TCI states are RRC-configured then activated by MAC-CE and finally pointed by a DCI field — three layers of indirection so the beam can change as fast as per-PDCCH without re-signalling the whole list.
- Type A vs C is about how much channel statistics you may borrow: A = full (post-TRS tracking), C = coarse (initial acquisition from SSB only).
- Gotcha: a stale or wrong QCL-D (UE pointing the old beam after a blockage) looks exactly like sudden deep fading — which is the very condition beam-failure recovery (next section) is built to catch.
14.8 Beam Correspondence and Unified TCI
At FR2 the UE beamforms too, and managing all those beams — one set for the downlink, another for the uplink, a different indication per channel — became an overhead problem of its own. Two features tame it.
Beam correspondence is a UE capability: if the receive beam on which the UE best hears the gNB corresponds to the transmit beam on which the gNB best hears the UE, then the UE can send PUCCH/PUSCH/SRS on the very beam it used to receive SSB or CSI-RS — no separate uplink beam training needed. It is what makes FR2 uplink practical.
Unified TCI (Rel-17) replaces the Rel-15/16 patchwork — a separate TCI state per downlink channel and a separate spatial-relation per uplink channel — with a single TCI pool shared across PDCCH, PDSCH, PUCCH and PUSCH. In joint mode one TCI points both directions; in separate mode a DL TCI and an UL TCI are indicated. A MAC-CE activates the pool and a DCI selects from it, collapsing the old per-channel beam signalling into one mechanism.
Expert read- Beam correspondence is a UE capability bit; a UE without it must run uplink beam management (SRS beamManagement) separately, doubling the beam-training cost.
- Unified TCI is the Rel-17 answer to beam-indication bloat: in a fast-moving FR2 cell, re-pointing four channels independently every time the beam changes was untenable.
- Joint vs separate TCI is configured by capability and scenario — joint suits reciprocal FR2 beams; separate suits cases where DL and UL want different beams (e.g. interference avoidance).
- Gotcha: a stale TCI after a fast beam change points the UE at the wrong direction — the dominant FR2 failure mode, which is why beam-failure recovery (next section) is mandatory.
14.9 Beam Failure Recovery
When the current serving beam dies (BLER on the BFD-RS exceeds threshold), the UE enters BFR — beam failure recovery:
- UE detects beam failure (Qout threshold on configured BFD-RS).
- UE scans candidate beams (SSBs and/or CSI-RS) from
candidateBeamRSList.
- UE picks the strongest beam > Qin threshold.
- UE sends a PRACH preamble dedicated to that candidate (PRACH-Resource configured per BFR), or uses Msg1 of normal RACH if no dedicated resource.
- gNB responds with new TCI state via DCI; UE switches.
If no candidate beam crosses Qin, BFR fails → RLF → RRC reconnection. Default timer values are tight (~10s of ms) to avoid IDLE-mode fallback for transient blockage.
Expert read
- BFR is a fast lane deliberately kept off the slow RLF/handover path: the dedicated PRACH preamble maps 1:1 to a candidate beam, so the gNB instantly knows which beam the UE chose.
- The thresholds are two different ones: Q_out (declare failure) is hysteretically below Q_in (accept a candidate), preventing ping-pong on a marginal beam.
- It's most critical at FR2, where a hand or a wall can kill a pencil beam in milliseconds — BFR recovers from transient blockage without dropping the connection.
- Gotcha: BFR depends on having configured candidate beams that are actually receivable. A candidateBeamRSList that doesn't match the real coverage means BFR always fails to RLF — a common mis-config behind 'random drops in the lobby' (see Ch.26 Case 2).
14.10 Worked Example — 4×4 MIMO scheduling
Type I 4-port, ν=2 layers
- UE measures CSI-RS resource (Row 4, 4 ports). Reports RI = 2 (channel rank 2), PMI = i1,1=3, i1,2=1, i2=0 (Type I codebook entry), CQI = 11 (64QAM, R≈0.55).
- gNB maps PMI 3-1-0 to a specific 4×2 precoder W from TS 38.214 Table 5.2.2.2.1-1.
- gNB schedules PDSCH with 2 layers, 64QAM, MCS 17, on 4 antenna ports {1000, 1001, 1002, 1003}.
- UE demodulates using 4 DMRS ports (Type 1, 2 CDM groups w/o data), applies the channel inverse + precoder reverse to recover 2 layers.
- If link quality drops (CQI from periodic CSI falls), gNB drops to RI=1 with a 1-layer precoder next slot.
Expert read
- Rank 2 on a 4-port gNB means the UE found two strong eigenvalues (§9.2.6) — the other two spatial dimensions weren't worth a layer.
- The precoder is 4×2 (4 ports, 2 layers); the UE needs ≥2 receive antennas to separate the layers — rank is capped by min(Tx ports usable, Rx antennas).
- MCS 17 is per codeword; with ≤4 layers it's a single codeword, so one CQI/MCS governs both layers.
- Gotcha: if the UE over-reports rank, both layers share the energy and BOTH degrade — the gNB's rank-override (drop to RI=1) is often what rescues throughput, not a lower MCS.
14.11 References & Where to Go Next
Primary 3GPP specifications
- TS 38.211 §6.3.1 antenna ports · §7.3.1.4 layer mapping
- TS 38.213 §6.1.6 beam failure recovery
- TS 38.214 §5.2 CSI codebooks · §5.1.5 QCL · §5.1.6.1.5 beam management
- TS 38.331 TCI-State · BeamFailureRecoveryConfig · CSI-MeasConfig
Live labs
Part IV · MIMO & Beamforming — Chapter Fifteen
CSI Framework and Reporting
The plumbing that turns CSI-RS measurements into the RI / PMI / CQI / LI / CRI bits the gNB schedules on — including the codebooks that set MU-MIMO resolution, the CQI tables that set the rate, and the processing budget that limits how much a UE can report at once.
TS 38.214 §5.2 (CSI)§5.2.2 (codebooks, CQI)§5.2.1.6 (CPU)TS 38.331 (CSI-MeasConfig)
After this chapter you will be able to
Wire NZP-CSI-RS, CSI-IM, CSI-ResourceConfig and CSI-ReportConfig into a working CSI loop; distinguish every CSI quantity (CRI/RI/PMI/CQI/LI/L1-RSRP/L1-SINR); choose Type I, Type II, or enhanced Type II PMI by the resolution-vs-overhead trade; read a CQI index against its table and target BLER; pick wideband vs sub-band granularity; pick periodic / semi-persistent / aperiodic reporting; reason about Part 1 / Part 2 dropping; and budget CSI Processing Units so reports actually get computed.
Everything the network knows about the downlink it learns from CSI. The data channels, the precoders, the modulation — all of it is chosen from a handful of numbers the UE feeds back. This chapter is the machinery that produces those numbers: the reference signals that get measured, the codebooks that quantise the channel, the tables that turn quality into a rate, and the report formats and budgets that decide how much of all that actually reaches the gNB in time to be useful.
15.1 The CSI Loop
CSI is the feedback that closes the link-adaptation loop. The gNB transmits a reference signal (CSI-RS); the UE measures it; the UE reports a small set of numbers (RI / PMI / CQI / …); and the gNB uses them to pick the next transmission's MCS, precoder, and layer count. The sequence repeats every reporting period — 4 to 320 slots — and it is what makes adaptive modulation actually adaptive.
In plain English — driving by the passenger's directions. The gNB is a driver who cannot see the road ahead; only the passenger (the UE) can. Every few milliseconds the passenger calls out: "road's clear, floor it" (high CQI), "two open lanes, use both" (rank 2), "steer slightly left" (precoder 7). The driver acts on the latest call, then asks again. Without that running stream the gNB would crawl at one safe, slow, fixed speed and never use the moments the channel opens up.
15.2 CSI Quantities
| Quantity | Bits | Meaning |
|---|
| CRI | ⌈log₂ Ks⌉ | CSI-RS Resource Indicator — which CSI-RS resource (beam) is best |
| RI | ⌈log₂ Rmax⌉ | Rank Indicator — recommended number of MIMO layers |
| LI | ⌈log₂ R⌉ | Layer Indicator — which layer carries the strongest reference |
| PMI | ~6–600 | Precoding Matrix Indicator — codebook entry (§15.5) |
| CQI | 4 / codeword | Channel Quality Indicator — best MCS at the target BLER (§15.7) |
| L1-RSRP | 7 + 4·(K−1) | Beam-level RSRP for the best K beams |
| L1-SINR | 7 | Beam-level SINR (Rel-16) |
Table 15.1 — CSI report contents (TS 38.214 §5.2.2). A whole report is 30–700 bits depending on codebook type — small payload, large leverage on downstream throughput.
15.3 Measuring Channel and Interference — CSI-RS and CSI-IM
A CQI is only meaningful as signal-to-interference-plus-noise, so the UE needs to measure both. The channel comes from NZP-CSI-RS (Chapter 9). The interference comes from a separate resource: CSI-IM, a set of REs the serving cell deliberately leaves empty so the UE measures whatever else lands there — neighbour-cell transmissions and noise. For MU-MIMO, interference can instead be measured on a second NZP-CSI-RS that emulates a co-scheduled user. The report's CQI is computed from the channel resource against the interference resource — get the pairing wrong and the CQI is optimistic, and every TB at that MCS fails.
Expert read- NZP-CSI-RS = channel, CSI-IM = interference+noise. The CQI is a ratio of the two; both must be configured and time-aligned.
- For MU-MIMO the gNB may emulate the interfering co-scheduled layer on an NZP resource so the CQI reflects the paired condition, not an interference-free one.
- Time/frequency restriction (
timeRestrictionForChannelMeasurements) limits measurement to recent samples so a fast-moving channel isn't averaged into staleness. - Gotcha: a CSI-IM that accidentally overlaps an active transmission reads inflated interference → pessimistic CQI → the scheduler under-uses a perfectly good channel.
15.4 The Configuration Chain
Five RRC information elements nest from "every report this UE owes me" down to "the exact pilot REs to measure." Break any link and the UE has no idea what to measure or where to send the answer.
15.5 PMI Codebooks — Type I, Type II, Enhanced Type II
The PMI is the UE's quantised guess at the best precoder, and how finely it is quantised is the central CSI trade: more resolution means better MU-MIMO but a much larger report. NR offers three codebook families (the beam mechanics are in §14.4; here the focus is the report).
Expert read- Type II's value is MU-MIMO: the gNB needs each UE's channel finely enough to null it at the others — Type I's single beam is too coarse for that.
- eType II exists because raw Type II reports are so large they choke the uplink; DFT frequency compression cuts the bit count dramatically for similar accuracy.
- Rel-17 added a further-enhanced Type II for higher mobility (Doppler-domain compression).
- Gotcha: a Type II report only fits on PUSCH (§15.8); configuring Type II with periodic PUCCH reporting is a config error — the bits do not fit.
15.6 Wideband vs Sub-Band Reporting
CQI and PMI can be reported once for the whole band (wideband) or once per sub-band — a group of 4, 8, 16, or 32 PRBs chosen by the BWP size. Sub-band reporting lets the scheduler place a UE on the frequencies where its channel is actually good, at the cost of a much larger report.
15.7 CQI Tables and Target BLER
A CQI is a 4-bit index (0–15) into a CQI table, each entry a (modulation, code rate, spectral efficiency) triple. The UE reports the highest index it believes it could decode at the table's target block-error rate, given the rank and precoder it also reported. The gNB then maps CQI to an MCS for the actual grant (Chapter 16).
Expert read- The CQI table must match the MCS table (§4.9): a 256-QAM MCS table needs the 256-QAM CQI table, or the gNB maps quality to the wrong rate.
- The target BLER is what the outer loop (Chapter 16) then trims — CQI gives the starting point, the BLER offset corrects the UE's optimism/pessimism.
- The low-SE table's 10⁻⁵ target is how URLLC gets its reliability at the CSI level, before any repetition.
- Gotcha: codebook subset restriction (
codebookSubsetRestriction) can forbid the very precoders that would justify a high CQI — the UE then reports a lower CQI than the raw channel supports, by design, for interference control.
15.8 Reporting Modes
| Mode | Trigger | Channel | Use |
|---|
| Periodic | RRC | PUCCH F2/F3/F4 | Always-on CQI tracking |
| Semi-persistent | MAC-CE activation | PUCCH or PUSCH | Mobility-driven CQI |
| Aperiodic | DCI 0_1/0_2 CSI request | PUSCH only | One-shot pre-grant CSI (large Type II) |
Table 15.2 — CSI reporting modes (TS 38.214 §5.2.1).
15.9 Part 1 vs Part 2 — What Gets Dropped
Large reports are split. Part 1 (RI + wideband CQI + L1-RSRP) is small and fixed-size, so it is always decodable. Part 2 (full sub-band PMI + per-sub-band CQI) is large and variable — and its size depends on Part 1. When PUSCH capacity is tight, Part 2 is dropped first; Part 1 always gets through.
Expert read- The split exists because Part 2's size depends on RI (in Part 1) — Part 1 must be protected or the report is unparseable.
- Repeated Part-2 drops are a signal to the gNB to grant larger PUSCH or fall back to a coarser codebook.
- Gotcha: sizing aperiodic-CSI PUSCH too small silently loses sub-band PMI every report, quietly degrading MU-MIMO to wideband precoding — invisible unless you watch Part-2 drop counters.
15.10 CSI Processing Units
Computing CSI costs the UE real silicon time, so 3GPP bounds it. A UE declares a number of CSI Processing Units (CPUs) it can run simultaneously; each active CSI computation occupies one or more CPUs for a defined duration. If the gNB triggers more reports than the UE has CPUs for, the lowest-priority reports are simply not updated — the UE returns stale or omitted CSI rather than missing the timeline.
Expert read- CPUs are why a gNB cannot just trigger every CSI report it wants every slot — the UE physically cannot compute them, and the spec defines which ones win by priority.
- A multi-resource beam report is CPU-expensive (one CPU per measured resource), so beam sweeps must be budgeted against ongoing CQI reports.
- Priority ordering (TS 38.214 §5.2.5) ranks aperiodic over semi-persistent over periodic, and lower report-config-id wins ties.
- Gotcha: an over-aggressive aperiodic-CSI trigger pattern starves the periodic CQI of CPUs — the gNB sees frozen CQI and mis-diagnoses it as a static channel.
15.11 References & Labs
Primary 3GPP specifications
- TS 38.214 §5.2 CSI framework · §5.2.1.6 CSI processing units · §5.2.2 codebooks & CQI · §5.2.5 priority
- TS 38.331 CSI-MeasConfig · CSI-ResourceConfig · CSI-ReportConfig · CSI-IM-Resource
Where to go next
- Ch. 14 MIMO — the beam mechanics behind the PMI codebooks.
- Ch. 16 Link adaptation — how CQI becomes the actual MCS, with the BLER outer loop.
Live labs
Part V · System-Level Topics — Chapter Sixteen
Link Adaptation — MCS, HARQ, and BLER Control
The gNB picks MCS and aggregation level slot by slot. The UE responds with HARQ-ACK. The whole loop converges on the highest MCS that still passes CRC.
TS 38.213 §10
TS 38.214 §5.1.3, §6.1.4
After this chapter you will
Tune outer-loop link adaptation; recognise the three feedback signals (CQI, HARQ-ACK history, residual BLER); pick a target BLER for eMBB (~10⁻¹) vs URLLC (~10⁻⁵); and understand why MCS oscillates around the target rather than stabilising.
16.1 The Two Loops
Link adaptation has an inner loop and an outer loop. The inner loop maps the latest CQI report directly to an MCS — coarse, fast, reactive. The outer loop measures actual BLER (HARQ-NACK rate) over a moving window and adjusts the CQI-to-MCS offset until BLER lands on its target. The inner loop reacts in slots; the outer loop in seconds. The two work together: inner reacts to channel changes, outer corrects for the UE's CQI bias (some UEs over-report, some under-report).
Why bother with two loops at all? Because a single number — the CQI the UE reports — is never quite trustworthy. CQI is computed from a reference signal the UE measured a few milliseconds ago, quantised to four bits, on an assumption about the precoder and interference that may no longer hold by the time the gNB actually transmits. Two different handsets in the identical spot can report CQI values that differ by several steps, simply because their receivers and reporting policies differ. If the gNB trusted CQI blindly it would run one UE at 30 % BLER and another at 0.1 %, wasting throughput on both. The outer loop is the gNB's way of saying: "I don't fully believe your CQI — I'll watch what actually happens to my packets and quietly correct for your bias." The ACK/NACK stream is ground truth; CQI is just a hint.
Expert read
- The outer loop exists because CQI is a hint, not ground truth — quantised, a few ms stale, biased per UE. The ACK/NACK stream is the real measurement.
- Inner-loop time constant ≈ one CSI period (ms); outer-loop ≈ seconds. The separation stops the two from fighting.
- Δ_olla is the discovered CQI bias — a +2 offset literally means 'this UE under-reports by 2 MCS steps'.
- Gotcha: a low-traffic UE gives the outer loop few ACK/NACKs, so Δ_olla drifts on stale data — bursty UEs often start at the wrong MCS until it re-converges.
16.2 CQI-to-MCS
CQI is 4 bits, MCS is 5 bits, so the gNB interpolates. The classic formula:
Outer-Loop Link Adaptation (OLLA, common implementation)
MCS = MCSbase(CQI) + ΔOLLA
On ACK: ΔOLLA += Δup
On NACK: ΔOLLA −= Δdown
Steady state: Δup·PACK = Δdown·(1−PACK) → PACK = Δdown/(Δup+Δdown)
Pick Δup=1/9, Δdown=1 → PACK=0.9 → target BLER=10 %.
Read that last line slowly, because it is the whole trick. The gNB never measures BLER directly — there is no "BLER meter" in the system. Instead it picks two step sizes whose ratio encodes the BLER it wants, and then lets the ACK/NACK feedback do the rest. A tiny up-step and a large down-step means the loop has to collect many ACKs to undo a single NACK, so it can only sit at an MCS where NACKs are rare — exactly one in ten. Change the ratio and you change the target: Δup = 1/99 with Δdown = 1 parks the loop at 1 % BLER; 1/999 gives 0.1 %. The arithmetic is the policy.
Figure 16.1 shows what that looks like over time. The MCS does not converge to a point and stay there — it can't, because the loop's only sensor is failure itself. To know it is at the ceiling, it has to occasionally bump its head on the ceiling. So the steady state is a permanent sawtooth: a slow climb on a run of ACKs, a sharp drop on each NACK, forever orbiting the target. A perfectly "stable" link-adaptation loop that never NACKed would actually be a broken one — it would mean the gNB was transmitting far below the channel's capacity and leaving throughput on the table.
Worked example — where does the loop settle?
Suppose the UE's reported CQI maps to MCS
base = 20, but the UE is an optimistic reporter and MCS 20 actually fails 35 % of the time. Walk the loop with Δ
up = 1/9, Δ
down = 1:
- At MCS 20, NACKs arrive often. Each NACK subtracts 1.0 from ΔOLLA; each ACK adds only 0.11. Because failures are frequent, the down-steps dominate and ΔOLLA falls quickly — say to −2.
- Effective MCS = 20 + (−2) = 18. At MCS 18 the true error rate has dropped to ~10 %. Now ACKs outnumber NACKs nine-to-one.
- At nine ACKs (+9 × 0.11 = +1.0) for every one NACK (−1.0), the net drift is zero. The loop has found its equilibrium: ΔOLLA ≈ −2, effective MCS ≈ 18, BLER ≈ 10 %.
- The −2 offset is precisely the "CQI bias correction" — the loop discovered, without being told, that this UE over-reports by two MCS steps, and it will keep applying that correction until the channel or the handset changes.
Tuning knob. Larger steps (e.g. Δdown = 2) make the loop react faster to a collapsing channel but ring harder around the target; smaller steps track a target more tightly but lag a fast-fading channel. Vendors schedule the step size by mobility: big steps for a UE on a train, small steps for a stationary CPE.
Expert read
- CQI and MCS tables both carry a spectral-efficiency column — that shared axis is the translation key.
- There are three CQI tables (64-QAM, 256-QAM, low-SE/URLLC) matching the MCS tables — the gNB must use the configured pair or the mapping is wrong.
- CQI 0 means 'out of range' (ask for no transmission), not MCS 0.
- Gotcha: CQI assumes the reported precoder/rank. Schedule a different precoder than the CQI assumed and the implied SINR — hence the safe MCS — no longer holds.
16.3 The MCS Tables and Choosing One
The outer loop produces an MCS index, but an index means nothing without a table to read it in. NR defines four MCS tables (the same ones Chapter 4 introduced), and which one is in force changes what every index decodes to.
Expert read- Scrambling a PDCCH with the MCS-C-RNTI instead of the C-RNTI is how the gNB says "decode this grant against the low-SE table" — per-grant reliability switching with no reconfiguration.
- The outer-loop offset ΔOLLA is table-relative: switch tables and the same offset points at a different rate, so OLLA state is kept per MCS-table.
- Table 3's low rates are how URLLC hits 10⁻⁵ before any HARQ or repetition — the BLER target lives in the table choice.
- Gotcha: a few high indices in each table are reserved to signal "reuse the previous modulation" on a retransmission — treating them as fresh MCS is a classic trace error (§4.9).
16.4 Target BLER per Service
| Service | Target BLER | Why |
| eMBB | ~10⁻¹ (10 %) | HARQ recovers; 1 retx costs less than higher MCS gain |
| VoNR | ~10⁻² | Voice doesn't tolerate retx jitter |
| URLLC | ~10⁻⁵ | 1 ms budget can't afford even one retx |
| SIB1 / broadcast | ~10⁻² | No HARQ; must work at cell edge |
Table 16.1 — Typical BLER targets per use case.
16.5 HARQ Within the Loop
The gNB doesn't wait for outer-loop convergence before retransmitting. HARQ kicks in immediately: on NACK, the gNB schedules a retransmission with a different RV on the same HARQ process number (Sec. 8.8). The UE soft-combines the new LLRs with the stored ones, polar-decodes, and either ACKs or NACKs again. Up to 4 attempts is typical; URLLC may allow only 2.
In plain English. The link-adaptation loop is like a driver adjusting cruise control. The inner loop is "the speedometer says I'm at 90; the speed limit is 100; bump up". The outer loop is "I've been getting speeding tickets — the speedometer must be reading 5 mph low; subtract 5 from future targets". HARQ is the brake: when you do go over, the loop recovers without losing the whole journey.
Expert read
- HARQ fixes this packet; LA fixes future packets — they're complementary, not redundant.
- Because HARQ already recovers ~10% first-tx failures cheaply, LA can target 10% BLER rather than near-0 — that's why eMBB runs 'hot' (Fig 16.1).
- URLLC shrinks the HARQ budget (1–2 attempts) AND lowers the BLER target (Table 3 MCS) — both loops re-tuned together.
- Gotcha: if HARQ retransmissions stop helping (soft-buffer overflow, Fig 8.8b), the outer loop sees persistent NACKs and over-corrects MCS downward — a buffer bug masquerading as bad coverage.
16.6 Uplink Link Adaptation
Everything so far assumed the downlink, where the UE measures and reports CQI. The uplink inverts the information flow: the gNB has no CQI report to lean on — it must estimate the uplink channel itself and choose the UE's MCS for it. The two-loop structure survives, but both inputs change.
The inner loop runs on the gNB's own measurements: the SINR it estimates from the UE's SRS (Chapter 13) and from the DMRS of previously received PUSCH. The outer loop is, if anything, cleaner than the downlink's — because the gNB decodes the uplink itself, it learns each PUSCH's CRC pass/fail directly, with no fed-back ACK to wait for or lose. It nudges an uplink ΔOLLA on those CRC results exactly as the downlink loop does on HARQ-ACKs.
Expert read- Uplink LA leans on SRS freshness: a stale or sparse SRS gives a stale SINR estimate, so the inner loop mis-picks the MCS until the next sounding.
- The uplink outer loop is lower-latency than the downlink's — no ACK round-trip — but it only updates when the UE actually has data to send, so a bursty uplink leaves the offset on stale data (the same drift as a low-traffic downlink UE).
- Power control (Chapter 17) and uplink LA interact: a power-limited UE at the cell edge cannot raise SINR, so the loop must drop MCS rather than chase a rate the UE can never reach.
- Gotcha: π/2-BPSK / DFT-s-OFDM (Chapter 10) caps the uplink MCS, so the uplink loop saturates lower than the downlink — expecting symmetric peak rates is a common planning error.
16.7 References
- TS 38.213 §10 PDCCH monitoring
- TS 38.214 §5.1.3 / §6.1.4 MCS tables
Part V · System-Level Topics — Chapter Seventeen
Power Control
Every uplink transmission has a transmit power, and the spec writes a closed-form expression for every one of them — open-loop to set the level, closed-loop to trim it, a hard cap to clip it, and a headroom report so the gNB knows how much room is left.
TS 38.213 §7 (UL power control)§7.5 (power scaling)TS 38.321 (PHR MAC-CE)TS 38.101-1 (P_CMAX, MPR)
After this chapter you will be able to
Compute PUSCH / PUCCH / SRS / PRACH transmit power for any scenario; separate open-loop from closed-loop terms; apply fractional (α) path-loss compensation; pick the pathloss reference RS and run multiple closed loops; read TPC commands; understand how P_CMAX is bounded by power class and MPR; interpret a Power Headroom Report (Type 1/3, virtual, multi-entry); and reason about power scaling when a UE's total demand exceeds its cap.
Uplink power control is where the link budget meets the interference budget. Turn a UE up and its own link improves but it raises the noise floor for every neighbour; turn it down and the reverse. NR resolves the tension with one elegant template applied to every uplink signal: a target receive power the UE reaches open-loop from its own measurements, a small closed-loop correction the gNB applies, and a hard ceiling the UE can never exceed. The whole of this chapter is that template, its four instances, and the report that tells the gNB when a UE has hit the ceiling.
17.1 The General Form
Every uplink transmit-power formula in NR shares one skeleton: a baseline target receive power at the gNB; plus path-loss compensation the UE estimates from its own measured RSRP; plus a delta for the current MCS or format; plus a closed-loop offset accumulated from TPC commands in DCI — all clamped to the UE's maximum power PCMAX. The same template covers every uplink channel; only the per-channel constants differ.
17.2 PUSCH Power
TS 38.213 §7.1 — PUSCH transmit powerPPUSCH(i,j,qd,l) = min{ PCMAX(i), PO,PUSCH(j) + 10·log₁₀(2µ·MRB(i)) + α(j)·PL(qd) + ΔTF(i) + f(i,l) }
PO,PUSCH = nominal + UE-specific target Rx power; the 10log(MRB) term scales with allocation size; α·PL compensates path loss (α ∈ {0, 0.4, …, 1.0}); ΔTF tracks MCS/spectral efficiency; f(i,l) is the closed-loop accumulator for loop l.
17.2.1 Pathloss Reference RS and Multiple Closed Loops
Two indices in that formula matter more than they look. qd selects the pathloss reference signal — the SSB or CSI-RS whose RSRP the UE uses to estimate PL. At FR2 this is beam-specific: each beam has its own path loss, so the UE must measure PL on the RS that corresponds to the beam it is transmitting on, or its power estimate is wrong by the beam-gain difference. l selects one of up to two independent closed-loop processes (twoPUSCH-PC-AdjustmentStates), so the gNB can run, say, separate power loops for two different beams or transmission types without their TPC accumulators interfering.
17.3 PUCCH, SRS, and PRACH
Same shape, different constants:
- PUCCH: PO,PUCCH + 10·log(NRB) + αPUCCH·PL + ΔF(format) + g(i). The format delta ΔF reflects how robust the chosen PUCCH format is.
- SRS: PO,SRS + 10·log(MSRS) + αSRS·PL + h(i). A separate accumulator h(i) so sounding power is controlled independently of data.
- PRACH: PO,PRACH + PL — no α (full compensation), no closed loop. Instead it ramps: each unanswered preamble is re-sent a step louder (§12.10), since the gNB cannot send a TPC to a UE it has not yet heard.
17.4 Fractional Path-Loss Compensation
The single most consequential knob in uplink power control is α, the fraction of path loss the UE compensates. It is the dial between cell-edge fairness and total cell capacity.
Expert read- α is an interference-vs-fairness dial. α=1 maximises edge fairness; α≈0.7–0.8 maximises sector capacity by capping how much edge UEs raise the noise floor.
- It is open-loop — set instantly from the UE's own RSRP-derived path loss, before any feedback.
- PO and α are broadcast per cell; closed-loop TPC then trims around this baseline.
- Gotcha: too-low α can break the cell-edge link budget for VoNR; α is tuned per deployment, never universal.
17.5 TPC Commands
2-bit TPC fields in DCI 0_x / 1_x / 2_2 / 2_3 step the closed-loop accumulator (TS 38.213 Table 7.1.1-1):
| TPC bits | Accumulated mode | Absolute mode |
|---|
| 00 | −1 dB | −4 dB |
| 01 | 0 dB | −1 dB |
| 10 | +1 dB | +1 dB |
| 11 | +3 dB | +4 dB |
Table 17.1 — TPC command mapping. Accumulated mode (commands sum) is the default; absolute mode (each command sets the offset outright) re-baselines fast after a DRX gap. Group-TPC in DCI 2_2/2_3 nudges many UEs at once.
Expert read- Closed-loop catches what open-loop misses — anything invisible in the path-loss estimate.
- PUSCH / PUCCH / SRS keep separate accumulators; a UE can be told down on data while held steady on control.
- Absolute mode is the re-baseline tool after DRX, when the accumulated history is stale.
- Gotcha: a UE at PCMAX cannot act on +commands — the accumulator climbs but the power does not, so the loop silently saturates at the edge (and the gNB only learns this from the PHR, §17.7).
17.6 P_CMAX and Power Scaling
The cap PCMAX is not a single constant — it is itself a computed range. The ceiling is the UE's power class (commonly 23 dBm, class 3), reduced by the back-off the waveform demands: MPR (Maximum Power Reduction, for high-PAPR modulation/allocations) and A-MPR (Additional MPR, for band-specific emission limits), and never above the cell's configured P-Max. So a UE sending 256-QAM on a wide allocation has a lower real PCMAX than the same UE sending π/2-BPSK at the edge.
Expert read- MPR is why high-order QAM costs coverage twice: it needs more SNR and it forces the PA to back off, lowering the very power that would deliver that SNR.
- π/2-BPSK / DFT-s-OFDM (Chapter 10) earn a smaller MPR — part of why they extend the cell edge.
- In CA, the power-scaling priority guarantees a HARQ-ACK is never dropped to feed a best-effort PUSCH.
- Gotcha: a UE that under-declares MPR transmits slightly over-powered and fails its spectral-emission mask — a conformance failure that shows as adjacent-channel interference, not a UE-side error.
17.7 Power Headroom Reporting
The gNB schedules the uplink, but only the UE knows how close it is to its cap. The Power Headroom Report (PHR) closes that gap: it tells the gNB the difference between PCMAX and the power the UE actually used (or would use), so the scheduler knows whether it can grant more RBs or a higher MCS — or whether the UE is already maxed out and a bigger grant would only spread the same power thinner.
Expert read- PHR is the gNB's only window into UE power limits — without it the scheduler would happily grant a power-limited UE a huge allocation it cannot fill, wasting RBs.
- A virtual PHR reports headroom even with no data to send (using a reference MCS), so the gNB keeps a current view during quiet periods.
- PHR is triggered by a path-loss change beyond
dl-PathlossChange, a periodic timer, or (re)configuration, and gated by prohibitPHR-Timer to avoid flooding. - Gotcha: a persistently negative PHR is the definitive signature of a coverage-limited UE — diagnosing it as anything else (interference, config) wastes hours; the PHR already told you.
17.8 Worked Example — PUSCH Power at the Cell Edge
A power-limited edge UE on n78
- Config: PO,PUSCH = −90 dBm, α = 0.8, µ=1, grant MRB = 50, ΔTF = +2 dB, f(i,l) = +3 dB.
- Measured PL = 120 dB (deep edge). Path-loss term = α·PL = 0.8 × 120 = 96 dB.
- Allocation term = 10·log₁₀(2¹·50) = 10·log₁₀(100) = 20 dB.
- Sum = −90 + 20 + 96 + 2 + 3 = 31 dBm.
- But PCMAX = 23 dBm (class 3, no extra MPR). So PPUSCH = min(23, 31) = 23 dBm — the UE is clipped 8 dB below what the formula wants.
- The UE reports PHR = 23 − 31 = −8 dB. The gNB reads "power-limited" and, rather than grant more RBs (which would dilute power), it reduces the allocation or MCS so the same 23 dBm achieves the target per-RB receive power.
17.9 References
Primary 3GPP specifications
- TS 38.213 §7 UL power control (PUSCH/PUCCH/SRS/PRACH) · §7.5 power scaling/prioritization
- TS 38.321 Power Headroom Report MAC-CE (Type 1/3, multi-entry)
- TS 38.101-1/-2 PCMAX, power class, MPR / A-MPR
Where to go next
- Ch. 12 PRACH — preamble power ramping, the open-loop-only case.
- Ch. 16 Link adaptation — how power limits cap the achievable uplink MCS.
Part V · System-Level Topics — Chapter Eighteen
Scheduling and Resource Allocation
Every slot, the MAC scheduler decides who gets what. Behind that one decision sit grant types, an uplink request handshake, fairness policy, MU-MIMO pairing, cross-carrier tricks, and the hard limits of the PDCCH budget.
TS 38.214 §5.1 / §6.1 (RA)TS 38.321 (MAC: BSR, SR, SPS, DRX)TS 38.213 §10 (PDCCH budget)
After this chapter you will be able to
Describe what the scheduler decides each slot; tell dynamic from semi-persistent and configured-grant scheduling; trace the uplink SR→BSR→grant handshake; compare round-robin, max-CQI, and proportional-fair; reason about MU-MIMO co-scheduling and DL pre-emption (DCI 2_1) for URLLC; use cross-carrier scheduling; and recognise the PDCCH-budget and DRX limits that bound everything the scheduler can do.
The scheduler is the single most important piece of software in a base station, and almost none of it is in the spec. 3GPP defines the mechanisms — the grant formats, the HARQ machinery, the CSI it can read — but leaves the policy to the vendor. That is why two gNBs built to the identical specification can deliver wildly different user experience: the radio is the same, the referee is not. This chapter covers the mechanisms the scheduler wields and the constraints it works within, so the policy choices that ride on top make sense.
18.1 What the Scheduler Decides Each Slot
Once per slot, every cell runs a decision loop that chooses: which UEs to grant on the downlink and accept on the uplink; which RBs of each UE's BWP to assign; what MCS and how many layers; what PDCCH aggregation level; which HARQ process (fresh data or retransmission); and what slot or mini-slot timing. This one decision is where most of a cell's real-world performance is won or lost.
Expert read- The scheduler is vendor-proprietary — the spec defines mechanisms (DCI, HARQ, CQI), not policy.
- Retransmissions usually pre-empt new data — finishing a pending HARQ is cheaper than starting fresh.
- QoS (5QI) maps to priority/latency budgets the scheduler must honour; URLLC can pre-empt eMBB mid-slot (§18.7).
- Gotcha: most "mysterious throughput" differences between vendors trace to scheduler tuning, not the radio (Ch. 25/26).
18.2 Dynamic, Semi-Persistent, and Configured-Grant Scheduling
Most traffic is scheduled dynamically — one DCI per grant, maximally flexible but costing a PDCCH every time. For predictable, periodic traffic that overhead is wasteful, so NR offers grant types that pre-arrange resources: Semi-Persistent Scheduling (SPS) on the downlink and the configured grant on the uplink (§10.8).
Expert read- SPS/CG trade flexibility for overhead and latency: no SR→grant round-trip, no per-TTI DCI — ideal for fixed-rate periodic flows.
- The activating/releasing DCI uses the CS-RNTI, so the UE distinguishes it from a normal C-RNTI grant.
- The cost is wasted resources when a periodic instant has no data — UL configured grant can skip the transmission to save power.
- Gotcha: SPS/CG periodicity must align with the TDD pattern (§3.4) or most opportunities land on the wrong link direction and are lost.
18.3 Uplink Scheduling — SR, BSR, and the Grant Handshake
The downlink scheduler knows its own buffers, but the uplink scheduler is blind: only the UE knows it has data to send. Two MAC signals bridge the gap. A Scheduling Request (SR, on PUCCH) says "I have data"; a Buffer Status Report (BSR, a MAC-CE) says "this much, of this priority." Together they form the handshake that turns a UE's pending data into a right-sized grant.
Expert read- The SR→BSR→grant round-trip is a real latency cost — which is exactly why URLLC uses configured grants (§18.2) to skip it.
- BSR groups logical channels into LCGs so the report stays compact; short BSR (one LCG) vs long BSR (several).
- If repeated SRs go unanswered (
sr-TransMax), the UE falls back to RACH (Chapter 12) — the safety net under the handshake. - Gotcha: a mis-tuned SR period adds latency to every uplink burst; too-frequent SR resources waste PUCCH — a classic latency-vs-overhead tuning fight.
18.4 Common Scheduling Policies
| Policy | Metric | Behaviour |
|---|
| Round Robin | last-scheduled time | Equal share regardless of channel quality |
| Max-CQI (max-C/I) | current CQI | Maximises cell throughput; starves the edge |
| Proportional Fair | instant rate / smoothed rate | Serves each UE near its own peak — the empirical default |
| EDF (URLLC) | deadline − now | Urgent flows pre-empt when the latency budget is critical |
| Mixed PF + EDF | combined | Modern carriers split a BWP: PF for eMBB, EDF for URLLC |
Table 18.1 — Scheduling policies common in commercial gNBs (vendor-implemented, not standardised).
In plain English. The scheduler is a referee. Round-robin treats everyone the same regardless of skill. Max-CQI lets the best players hog the ball. Proportional-fair splits time so each player gets their share of good moments — empirically closest to what users feel is fair. URLLC adds a pre-emption rule: when an ambulance arrives, everyone yields, even mid-play.
18.5 MU-MIMO Co-Scheduling
Spatial multiplexing lets the scheduler place two or more UEs on the same time-frequency resources, each with a different precoder. Two preconditions: spatial separation (the UEs' PMI/SRS responses must point in sufficiently different directions — angular separation above roughly 30° at FR1, more at FR2) and buffer state (both must have data ready). Co-scheduling halves per-UE resources but can double cell throughput when both UEs are saturated and well-separated — which is why the quality of the CSI (Chapter 15, Type II) gates how aggressively a cell can pair.
18.6 Cross-Carrier Scheduling
In carrier aggregation the PDCCH that schedules a cell need not live on that cell. Cross-carrier scheduling lets a PDCCH on a robust "scheduling cell" grant PDSCH/PUSCH on a different "scheduled cell," identified by a 3-bit Carrier Indicator Field in the DCI.
18.7 Pre-emption and URLLC Multiplexing
Expert read- Pre-emption lets one carrier serve both eMBB and URLLC without reserving idle resources — URLLC borrows only at the instant it is needed.
- DCI 2_1 is group-common: it broadcasts a pre-emption bitmap so every affected eMBB UE knows the punctured region.
- The eMBB UE treats pre-empted REs as erasures in its LLR buffer; HARQ recovers on retransmission.
- Gotcha: heavy URLLC load silently taxes eMBB via repeated puncturing and retransmission — the eMBB KPI dips with no obvious fault.
18.8 Scheduler Constraints — PDCCH Budget and DRX
The scheduler does not have infinite freedom. Two hard limits bound every slot. First, the PDCCH budget: a UE can only blind-decode so many candidates and monitor so many CCEs per slot (set by SCS, TS 38.213 §10.1), so the gNB can issue only a bounded number of grants — and a UE needing a high aggregation level (poor coverage) consumes more of that budget. Second, connected-mode DRX: a UE asleep in its DRX cycle is not even monitoring PDCCH, so it cannot be granted until its next on-duration.
Expert read- The PDCCH budget, not data capacity, is often the real bottleneck in a cell with many low-rate UEs — each still needs its own DCI.
- High aggregation levels (cell edge) consume CCEs fast, so coverage problems show up as control-channel congestion, not just low MCS.
- DRX is a scheduling constraint as much as a power feature: the scheduler must align grants to on-durations.
- Gotcha: aggressive DRX to save battery can starve a latency-sensitive flow — DRX and QoS must be co-configured.
18.9 References
Primary 3GPP specifications
- TS 38.214 §5.1 / §6.1 resource allocation
- TS 38.321 MAC — BSR, SR, SPS, configured grant, DRX
- TS 38.213 §10 PDCCH monitoring budget · §11 pre-emption (DCI 2_1)
Where to go next
- Ch. 7 PDCCH — the blind-decode budget that limits grants.
- Ch. 16 Link adaptation — the MCS the scheduler picks each slot.
- Ch. 26 Optimization cases — MU-MIMO and scheduler tuning in the field.
Part V · System-Level Topics — Chapter Nineteen
Physical-Layer Measurements
RSRP, RSRQ, SINR, RSSI — the handful of definitions that drive every handover, every beam choice, and every link-adaptation tweak in the network — plus the beam consolidation, gaps, and RRC events that turn raw samples into mobility decisions.
TS 38.215 (measurement definitions)TS 38.331 §5.5 (events, gaps, consolidation)TS 38.133 (accuracy)
After this chapter you will be able to
State the exact definition and range of SS-RSRP / CSI-RSRP, SS-RSRQ, RSSI, and SS-/CSI-SINR; consolidate per-beam L1-RSRP into a cell measurement; tell L1 from L3 and tune the L3 filter; recognise every RRC measurement event (A1–A6, B1–B2) and why each exists; configure measurement gaps for inter-frequency measurement; and explain why RSRQ falls under load and how SFTD/CGI support advanced mobility.
Every decision a network makes about where a UE should be — which cell, which beam, which carrier — is downstream of a measurement. The physical layer produces a small, precisely-defined set of numbers; higher layers filter them, compare them against thresholds, and act. This chapter covers both ends: the exact measurement definitions, and the machinery that turns a stream of noisy samples into a stable, ping-pong-free handover.
19.1 The Quantities
Each measurement has a single unambiguous definition with a reporting range, an accuracy class, and a named reference signal. The spec is deliberately strict here, because a handover decision made on a fuzzy measurement is a dropped call.
| Quantity | Definition (essence) | Range | Spec |
|---|
| SS-RSRP | Linear average of SSS RE powers within the SSB | −156…−31 dBm, 1 dB | TS 38.215 §5.1.1 |
| CSI-RSRP | Same construction on configured CSI-RS REs | same | §5.1.2 |
| RSSI | Total received power (signal + interference + noise) across the OFDM symbols of N RBs | — | (within RSRQ) |
| SS-RSRQ | N · RSRP / RSSI | −43…+20 dB, 0.5 dB | §5.1.3 |
| SS-SINR | SSS signal / (interference + noise) on SSS REs | −23…+40 dB | §5.1.5 |
| CSI-SINR | Same, CSI-RS based | same | §5.1.6 |
| L1-RSRP / L1-SINR | Per-beam, per-resource, single-shot (for CSI/beam mgmt) | L1: 7 bits + 4·(K−1) | TS 38.214 §5.2.1 |
Table 19.1 — Physical-layer measurements (TS 38.215). SSB-based quantities drive mobility and initial access; CSI-RS-based ones refine the connected-mode link.
In plain English. RSRP is the strength of the cell's own signal, measured only on reference REs so neighbour interference cannot contaminate it. RSSI is the total received power, neighbours and noise included. RSRQ = RSRP/RSSI is a quality ratio — a strong but crowded cell has high RSRP and low RSRQ. SINR is the cleanest indicator (signal over interference-plus-noise on reference REs) but the most expensive to measure. The network asks for whichever combination fits the decision at hand.
19.2 Beam-Level Measurement and Consolidation
At FR2 a "cell" is really a set of beams, and the UE measures L1-RSRP per beam (per SSB). Before a cell-level value can drive mobility, those per-beam measurements must be consolidated into one number — and how that is done changes the handover behaviour.
19.3 L1 vs L3
L1 measurements are single-shot and fast (per slot) — they feed CSI reports, beam management, and link adaptation. L3 measurements pass many L1 samples through an IIR filter (the filterCoefficient in QuantityConfig, time constants ≈200–500 ms) to produce the stable value used for handover and cell reselection, where reacting to a momentary fade would cause ping-pong.
Expert read- The split is timescale matching: link adaptation tracks fast fading (L1); handover ignores it (L3).
- NR actually filters twice — per-beam L3 filtering, then cell-level L3 filtering — before an event is evaluated.
- L1-RSRP/L1-SINR feed CSI/beam machinery; L3-RSRP/RSRQ feed the RRC measurement events.
- Gotcha: too-aggressive L3 filtering causes late-handover drops; too light causes ping-pong — the central mobility trade.
19.4 Measurement Events — A1–A6, B1–B2
A UE does not report continuously; it reports when a configured condition is met. These measurement events (TS 38.331 §5.5.4) are the triggers, each comparing L3-filtered values against thresholds with hysteresis and a time-to-trigger.
Expert read- A3 vs A5 is a deployment choice: A3 (relative) suits uniform layers; A5 (absolute thresholds) suits coverage-triggered handover to a different layer.
- Bigger offset/TTT → fewer, later handovers (late-HO risk); smaller → earlier, more (ping-pong). The core mobility trade, again.
- The UE reports a neighbour; the source gNB decides and commands the handover via RRCReconfiguration — the UE never hands itself over.
- Gotcha: on FR2 the reported "cell RSRP" is the consolidated beam value (§19.2) — a beam fade can spoof A3 even when another beam of the same cell is fine, which is why beam management and BFR sit under mobility.
19.5 Why RSRQ Falls Under Load
RSRQ = N·RSRP/RSSI. As load rises, more REs carry data instead of sitting idle, so RSSI climbs while RSRP (reference REs only) stays constant — and the ratio falls. This is intentional: RSRQ folds cell load into a quality number, helping the network steer UEs toward lightly-loaded neighbours even when raw signal strength (RSRP) would not justify a move. It is the measurement that makes load-aware mobility possible at the physical layer.
19.6 Measurement Gaps
A UE with one receiver chain cannot listen to another frequency while serving its own. To measure an inter-frequency or inter-RAT neighbour it needs a measurement gap — a scheduled window during which it leaves the serving carrier, retunes, measures, and returns. The scheduler must not grant the UE during a gap.
Expert read- Gaps are pure overhead: every gap is serving-cell capacity the UE cannot use, so they are configured only when inter-frequency measurement is actually needed (triggered by A2).
- Intra-frequency measurement usually needs no gap — unless the SSB (SMTC) sits outside the active BWP, a subtle case that surprises many planners.
- Per-FR gaps let a UE measure FR2 without disturbing FR1 service, when its hardware supports independent tuning.
- Gotcha: missing or too-sparse gaps make inter-frequency neighbours invisible — the UE clings to a dying serving cell because it was never given a chance to see the alternative.
19.7 SFTD, CGI, and Special Measurements
Two measurements support advanced mobility beyond simple signal strength. SFTD (SFN and Frame Timing Difference) reports the timing offset between the serving PCell and a neighbour or candidate PSCell — essential for setting up NR dual connectivity and for DAPS (dual-active-protocol-stack) handover, where the UE briefly talks to both cells. CGI reading has the UE decode a neighbour's SIB1 to report its Cell Global Identity, the basis of Automatic Neighbour Relations (ANR) — and because it requires decoding the neighbour's broadcast, it needs autonomous gaps. Both turn a bare RSRP measurement into actionable topology knowledge.
19.8 References
Primary 3GPP specifications
- TS 38.215 all physical-layer measurement definitions
- TS 38.331 §5.5 measurement config, events A1–A6/B1–B2, gaps, beam consolidation, SFTD/CGI
- TS 38.133 measurement accuracy & performance requirements
Where to go next
- Ch. 6 SS/PBCH — the SSB these mobility measurements are made on.
- Ch. 14 MIMO — beam management and BFR that share these measurements.
Part VI · Deep Topics — Chapter Twenty
Sequences and Signal Generation
Gold, Zadoff-Chu, m-sequences — the three sequence families that show up under every reference signal and scrambler in NR.
TS 38.211 §5.2
After this chapter you will
Generate any Gold sequence by hand for any c_init; explain Zadoff-Chu's constant-amplitude property; compute auto-correlation of an m-sequence; recognise which family is used in each NR signal; and pick the right sequence for new designs.
20.1 Gold Sequences — Used Everywhere
A Gold sequence is the XOR of two length-31 m-sequences. NR uses Gold sequences with Nc = 1600 advance: skip the first 1600 bits to let any startup transient die out, then start outputting. The seed for both m-sequences is c_init — a 31-bit value derived from PCI + slot + other context.
TS 38.211 § 5.2.1 — Pseudo-random sequence
$$ c(n) \;=\; \bigl(x_1(n + N_c) + x_2(n + N_c)\bigr) \bmod 2 $$
$$ x_1(n+31) = (x_1(n+3) + x_1(n)) \bmod 2 $$
$$ x_2(n+31) = (x_2(n+3) + x_2(n+2) + x_2(n+1) + x_2(n)) \bmod 2 $$
Init: x₁(0)=1, x₁(1..30)=0; x₂(0..30) = c_init bits LSB-first.
Gold sequences appear in: PBCH scrambling, PBCH-DMRS, PDCCH-DMRS, PDSCH-DMRS, PUSCH-DMRS (CP-OFDM), CSI-RS, data scrambling, UCI scrambling — anywhere a "pseudo-random but reproducible" sequence is needed. The seed varies by context but the recursion never does.
In plain English. Gold sequences are 5G's universal random-number generator. Two simple shift registers, each producing a pattern that looks random but is bit-exact reproducible given the starting state. XOR them together and you get a longer family of sequences with great cross-correlation properties. Every cell's scrambling is a Gold sequence with a cell-specific seed; two cells produce different scrambles even though both use the same recursion.
20.2 Zadoff-Chu Sequences — Low PAPR
Used for low-PAPR signalling: PRACH preambles, PUSCH-DMRS for DFT-s-OFDM, SRS, PUCCH formats 0/1. Properties: constant amplitude (0 dB PAPR), zero auto-correlation off-shift (within the cyclic-shift zone), low cross-correlation between distinct roots.
TS 38.211 § 5.2.2 — Zadoff-Chu sequence
$$ x_u(n) \;=\; e^{-j\frac{\pi u \cdot n(n+1)}{N_{ZC}}}, \qquad n = 0, 1, \ldots, N_{ZC} - 1 $$
NZC is the prime length (e.g. 839, 139, or 12·NRB−1 for SRS); u is the root sequence index.
Expert read
- Constant envelope is why ZC lives on the power-limited uplink: the PA runs near saturation with no back-off, maximising coverage.
- Perfect autocorrelation makes timing estimation razor-sharp — the PRACH detector correlates against the root and reads the delay straight off the peak position.
- Cyclic shifts of one root are mutually orthogonal → that's how 64 PRACH preambles come from a few roots (Fig 12.2); the prime length N_zc guarantees the shift structure.
- Gotcha: ZC needs a prime length, so it's zero-padded/truncated to fit the allocation — and high-speed cells need restricted shift sets so Doppler doesn't slide a shift into a neighbour's zone.
20.3 m-Sequences — Maximum-Length
Length 2n−1, generated by a linear feedback shift register with primitive-polynomial taps. Used standalone for PSS (length 127), and as building blocks inside Gold sequences. Auto-correlation: +1 at zero shift, −1/(2n−1) at every other shift — nearly ideal correlation properties for detection.
Expert read
- The thumbtack is what lets the UE find PSS timing by sliding a correlator and watching for the spike — the first step of cell search.
- XOR two m-sequences with good cross-correlation and you get a Gold family (Fig 20.1) — many sequences that stay nearly orthogonal, needed for per-cell scrambling.
- Generated by an LFSR with primitive-polynomial taps; 'maximum-length' = it visits all 2ⁿ−1 non-zero states before repeating.
- Gotcha: the off-peak floor is small but non-zero, so in very low SNR a strong neighbour's shifted sequence can rival a weak serving peak — the root of PCI confusion in dense clusters (Ch.26 Case 1).
20.4 Which Sequence Where — Quick Reference
| Signal | Family | Length |
| PSS | m-sequence | 127 |
| SSS | Gold (product of two m-seqs) | 127 |
| PBCH-DMRS, PDCCH-DMRS, PDSCH-DMRS (CP-OFDM), CSI-RS, scrambling | Gold | variable |
| PUSCH-DMRS (DFT-s-OFDM), PUCCH F0/F1, SRS | Zadoff-Chu derived (low-PAPR) | 12·NRB−1 |
| PRACH preamble | Zadoff-Chu | 839 or 139 |
Table 20.1 — Sequence family per NR signal.
Expert read
- The mapping is a clean decision rule: detect → m-seq (thumbtack autocorr), separate/scramble → Gold (code families), low-PAPR uplink → ZC (constant envelope).
- SSS being a product of two m-sequences is what gives 336 values → with 3 PSS = 1008 PCIs (Ch.6).
- ZC's prime-length requirement is why PRACH uses 839/139 (both prime) and why uplink DMRS lengths look odd (12·nRB−1 territory).
- Gotcha: these families all degrade under the same enemy — timing/frequency error and delay spread slide their correlation peaks; every cyclic-shift budget in the spec exists to fence that off.
20.5 Low-PAPR Base Sequences and Group Hopping
The "Zadoff-Chu-derived" uplink sequences (§20.4) hide a richer structure worth knowing, because it is what keeps neighbour cells from colliding on the same DMRS or PUCCH. NR organises the low-PAPR sequences into 30 groups (u = 0…29), each with up to 2 base sequences (v ∈ {0,1}) for the longer lengths — and which group a cell uses can hop every slot to spread interference.
Expert read- Group/sequence hopping randomises inter-cell collisions: two neighbours that happened to share a group this slot will differ the next, so a persistent DMRS clash averages out instead of locking in.
- The 30-group structure mirrors the way PCI feeds fss — sequence planning is a cousin of PCI planning, and a bad NID reuse pattern causes correlated uplink-pilot interference.
- The computer-generated short sequences exist because a 6- or 12-length prime ZC has too few usable cyclic shifts and poor cross-correlation; the tables were optimised offline for low PAPR and good separation.
- Gotcha: if two cells run group hopping with the same hopping seed (derived from NID), they hop in lockstep and never separate — configure distinct seeds, exactly as with SRS roots (§13).
20.6 References
Part VI · Deep Topics — Chapter Twenty-One
Sidelink Physical Layer (V2X)
Two UEs talking directly to each other, with or without a gNB in the middle. The sidelink physical layer is NR with a few important rewrites — its own channels, its own sync, its own two-stage control, and a way to schedule itself.
TS 38.211 §8 (SL channels)TS 38.212 §8 (SCI)TS 38.213 §16 (SL procedures)TS 38.214 §8 (SL data, CBR/CR)
After this chapter you will be able to
Name the sidelink channels (PSBCH/S-SSB, PSCCH, PSSCH, PSFCH) and their Uu counterparts; explain sidelink synchronisation and the GNSS>gNB>UE priority; read the two-stage SCI; compare Mode 1 (gNB-scheduled) and Mode 2 (sensing-based autonomous); pick unicast/groupcast/broadcast; configure sidelink HARQ on PSFCH (option 1 vs 2); and apply CBR/CR congestion control.
Sometimes the network is not there — or is too slow to matter. A car braking hard must warn the car behind it now, not after a round-trip through a base station. Sidelink is the physical-layer feature that lets two UEs talk directly over the PC5 interface, on NR spectrum, in or out of coverage. It reuses most of NR's machinery but rewrites the parts that assume a gNB is present: synchronisation, control signalling, and scheduling all gain a UE-to-UE variant.
21.1 Why Sidelink?
The driving use case is V2X — vehicle-to-everything — where latency and infrastructure-independence are safety-critical. But sidelink also serves public safety, drone-to-drone coordination, and proximity services. The common thread is a need to communicate directly, either because the round-trip through the network is too slow or because there is no network in range at all. Everything distinctive about the sidelink physical layer follows from that one requirement: it must work with no gNB.
21.2 The Sidelink Channels
| Channel | Purpose | Uu counterpart |
|---|
| PSBCH / S-SSB | Sidelink sync + broadcast (SL-MIB) | SSB/PBCH |
| PSCCH | Sidelink control — 1st-stage SCI (format 1-A) | PDCCH |
| PSSCH | Sidelink shared — transport block + 2nd-stage SCI | PDSCH |
| PSFCH | Sidelink HARQ feedback | PUCCH |
Table 21.1 — Sidelink physical channels (TS 38.211 §8). PSCCH and PSSCH are frequency-multiplexed in the same slot; PSFCH appears periodically.
21.3 Sidelink Synchronisation — S-SSB and SLSS
Two UEs cannot talk until they share a clock, and out of coverage there is no gNB to provide one. Sidelink solves this with its own sync signal — the S-SSB, carrying S-PSS, S-SSS (together the SLSS) and the PSBCH (SL-MIB) — and a strict priority order for choosing a timing reference.
21.4 Two-Stage Sidelink Control (SCI)
Sidelink splits its control information into two stages, and the split is the clever core of the whole design. The 1st-stage SCI (format 1-A on PSCCH) is public — every nearby UE decodes it, because it announces the transmitter's resource use and future reservations. The 2nd-stage SCI (format 2-A/2-B/2-C on PSSCH) is private — it carries the source/destination IDs and HARQ details only the intended receiver needs.
21.5 Mode 1 vs Mode 2 and Resource Selection
- Mode 1 — the gNB schedules sidelink resources via DCI 3_0/3_1, used when the transmitting UE is in coverage. The network keeps its global view and avoids collisions.
- Mode 2 — the UE autonomously senses a pre-configured resource pool and selects its own resources, used out of coverage. It reads neighbours' 1st-stage SCI reservations to predict near-future occupancy.
In plain English. Mode 1 is the disciplined classroom: the teacher (gNB) tells each student when to speak. Mode 2 is the open meeting: students listen, find a free slot, speak — but each must announce in advance which slot it is claiming, so the others can avoid it.
21.6 Cast Types
21.7 Sidelink HARQ and PSFCH
Unicast and groupcast can retransmit, and the acknowledgement rides the PSFCH — a sequence-based feedback channel (one PRB, a cyclic shift of a base sequence, much like PUCCH Format 0) that appears every 1, 2, or 4 slots. Groupcast poses a problem broadcast does not: how do many receivers acknowledge without drowning the channel? NR offers two options.
21.8 Congestion Control — CBR and CR
A shared, self-scheduled channel can collapse if everyone transmits at once, so Mode 2 carries its own congestion control. The Channel Busy Ratio (CBR) measures how loaded the pool is — the fraction of sub-channels whose received power exceeds a threshold over a window. From the CBR (and the message priority) each UE derives a limit on its own Channel occupancy Ratio (CR) — how much of the pool it may use. When the channel is busy, UEs voluntarily back off: fewer retransmissions, lower MCS, smaller occupancy. It is the sidelink equivalent of polite turn-taking, enforced by configuration rather than a central scheduler.
Expert read- CBR is the load sensor for a network-less channel; CR limits are the throttle, indexed by message priority so safety-critical traffic keeps more headroom.
- Congestion control is what keeps Mode 2 usable in a dense traffic jam — without it, every vehicle's reservations would collide and reliability would crater exactly when it is needed most.
- The hidden-node problem (§21.5) is the residual limit no sensing or congestion control fully removes — it bounds Mode-2 reliability.
- Gotcha: mis-set CBR thresholds either choke throughput in light load or fail to back off in heavy load — the central tuning knob for dense V2X deployments.
21.9 References
Primary 3GPP specifications
- TS 38.211 §8 sidelink physical channels & signals
- TS 38.212 §8 sidelink control information (SCI)
- TS 38.213 §16 sidelink procedures (sync, resource selection, HARQ)
- TS 38.214 §8 sidelink data, CBR/CR congestion control
- TS 23.287 architecture for NR V2X services
Where to go next
- Ch. 6 SS/PBCH — the Uu sync that S-SSB mirrors.
- Ch. 12 PRACH — Zadoff-Chu sequences also underlie PSFCH.
Part VI · Deep Topics — Chapter Twenty-Two
NR-U — NR in Unlicensed Spectrum
The 5 GHz and 6 GHz Wi-Fi bands, but with NR-style scheduling and mobility. The physical-layer add-ons — listen-before-talk, priority classes, interlaced waveforms — that make unlicensed coexistence both legal and fair.
TS 37.213 (shared-spectrum access)TS 38.211 §6.3.1 (interlaces)TS 38.213 §4 (channel access)
After this chapter you will be able to
Explain the four LBT categories and the Type 1/2 access procedures; map traffic to Channel Access Priority Classes and read their contention windows and MCOTs; acquire and share a Channel Occupancy Time; choose Frame-Based vs Load-Based equipment; configure interlaced RB allocation to meet the PSD and occupied-channel-bandwidth rules; and run wideband NR-U with per-sub-band LBT.
Licensed NR owns its spectrum; NR-U has to share it, on the same bands Wi-Fi already crowds. That single difference forces a set of physical-layer additions found nowhere else in the standard: a politeness protocol that listens before transmitting, a priority system that decides who waits how long, a beacon that must still appear despite the politeness, and a waveform shaped to satisfy the regulators who police these bands. This chapter is those additions.
22.1 LBT — The Polite Knock
Unlicensed spectrum is shared, so a device cannot simply transmit when it wants — it must first Listen Before Talk. NR-U defines four LBT categories of increasing rigour:
| Category | Procedure | Used for |
|---|
| Cat 1 | No LBT — transmit immediately (after a ≤16 µs gap) | Continuation inside an acquired COT |
| Cat 2 (Type 2A/2B/2C) | One-shot sense, no backoff (25 µs / 16 µs / none) | Bursts inside a shared COT |
| Cat 3 | Random backoff, fixed contention window | Rare |
| Cat 4 (Type 1) | Random backoff, variable contention window — the Wi-Fi-compatible full procedure | Acquiring the channel (initiating) |
Table 22.1 — LBT categories (TS 37.213). Cat 4 (Type 1) is the heavyweight that wins the channel; Cat 2 is the quick check that keeps it during a COT.
Cat 4 is the one that matters most: wait for the channel to fall idle, draw a random integer N from a contention window, count down N idle slots (re-pausing if the channel goes busy), then transmit. It is deliberately Wi-Fi-compatible so the two technologies share fairly.
22.2 Channel Access Priority Classes
Not all traffic deserves to wait the same amount. The Channel Access Priority Class (CAPC) ties the LBT backoff parameters — contention-window range and maximum channel-occupancy time — to the traffic's priority, so latency-sensitive flows grab the channel faster.
22.3 COT — Holding the Floor
Once a Cat-4 LBT succeeds, the device holds a Channel Occupancy Time up to its CAPC's MCOT (region-dependent). Inside it, further bursts need only Cat-2, and the gNB can share the COT with the UE: after a short gap the UE does a quick Cat-2 sense and transmits uplink, then the gNB resumes — saving the UE an expensive Cat-4 backoff.
Expert read- COT sharing is a big uplink-latency win: the UE skips Cat-4 backoff, which can be many slots under contention.
- The hand-back gap must stay under ~16–25 µs or another device seizes the channel — the scheme hinges on that tight timing.
- It is why NR-U uplink is bursty and tied to the gNB's COT rhythm rather than free-running.
- Gotcha: a mis-set shared-COT gap lets an interferer grab the channel mid-COT → the UL collides and the "saved" backoff was wasted.
22.4 Frame-Based vs Load-Based Equipment
The regulators recognise two access regimes, and NR-U supports both. Load-Based Equipment (LBE) uses the Cat-4 random backoff described above — dynamic, fair, and the default where Wi-Fi may be present. Frame-Based Equipment (FBE) is simpler: it operates on a fixed frame period, senses the channel just once at the start of each frame, and if idle transmits for the COT followed by a mandatory idle gap — no random backoff at all.
22.5 DRS — Discovery Reference Signal
A UE must still find the cell, so NR-U transmits a Discovery Reference Signal — SSB(s) plus minimum system information — on a roughly 20 ms grid, whenever LBT grants the channel. A flexible transmission window (the DMTC) lets the DRS slip slightly rather than vanish when contention is heavy.
22.6 Interlaced Resource Allocation
Unlicensed regulators impose two waveform rules that licensed NR ignores: a power-spectral-density cap (so much power per MHz) and an occupied-channel-bandwidth floor (the signal must fill at least 80 % of the channel). A narrow, clumped allocation fails both. NR-U's answer is interlaced RB allocation: instead of a contiguous block, a transmission uses every Mth resource block, spread across the whole channel.
22.7 Bandwidth Modes
| BW | Structure |
|---|
| 20 MHz | The default unlicensed channel (one LBT sub-band) |
| 40 / 80 / 160 MHz | Multiple 20 MHz channels, independent LBT per sub-band |
Table 22.2 — NR-U channel bandwidths. Wide channels are built from 20 MHz sub-bands, each cleared on its own.
22.8 References
Primary 3GPP specifications
- TS 37.213 physical-layer procedures for shared-spectrum channel access (LBT, CAPC, COT, FBE/LBE)
- TS 38.211 §6.3.1 interlaced PUSCH/PUCCH mapping
- TS 38.213 §4 channel-access procedures
Where to go next
- Ch. 6 SS/PBCH — the SSB the DRS carries.
- Ch. 17 Power control — the PSD cap that drives interlacing.
Part VI · Deep Topics — Chapter Twenty-Three
NR Positioning
PRS, SRS-for-positioning, DL-TDOA, UL-TDOA, multi-RTT — the physical-layer toolkit that turns a 5G network into a location service.
TS 38.211 §7.4.1.7
TS 38.214 §5.1.6.5
TS 38.305 (LPP)
After this chapter you will
Distinguish DL-TDOA, UL-TDOA, multi-RTT, DL-AoD, UL-AoA, E-CID; configure PRS resources for sub-3 m accuracy; understand the Rel-17 accuracy targets; and reason about why mmWave positioning beats sub-6 by an order of magnitude.
23.1 Six Positioning Methods
5G positions a UE by measuring some combination of (a) the time-of-arrival differences of signals from multiple gNBs, (b) the angle-of-departure or angle-of-arrival of signals at known antenna arrays, and (c) the round-trip time between UE and one or more gNBs. The six standardised methods combine those primitives differently:
| Method | Signals | Estimates | Accuracy |
| DL-TDOA | PRS from ≥ 3 gNBs | Position from time-difference hyperbolas | 3–10 m |
| UL-TDOA | SRS measured at ≥ 3 gNBs | Same idea, network side | 3–10 m |
| Multi-RTT | PRS + SRS round-trip | Range from each gNB → trilateration | 1–3 m (Rel-17 target) |
| DL-AoD | PRS beam-RSRP per Tx beam | Direction from each gNB | 5–20° (FR2: <1°) |
| UL-AoA | SRS angle-of-arrival | Network estimates direction | 5–20° (FR2: <1°) |
| E-CID | RSRP-based cell ID | Coarse, fallback | cell-radius scale |
Table 23.1 — NR positioning methods per TS 38.305. Combining multiple methods improves accuracy further.
Expert read
- TDOA needs synchronised gNBs (a common clock) because it compares arrival times across sites; multi-RTT does not — it measures each link's round-trip locally (next figure).
- Angle methods scale with array size: FR2's large arrays give sub-degree AoA/AoD, which is why mmWave positioning beats sub-6 by an order of magnitude.
- DL methods (UE measures PRS) preserve UE privacy/battery differently than UL methods (network measures SRS) — choice is deployment/regulatory driven.
- Gotcha: all timing methods are bandwidth-limited: ranging resolution ≈ c/(2·BW), so a 100 MHz PRS resolves ~1.5 m at best — you can't out-process insufficient bandwidth.
Expert read
- The c/(2B) relationship is fundamental — it's why every positioning method (Fig 23.2b) is bandwidth-limited first and SNR-limited second.
- NR PRS is configurable up to 272 RBs precisely to maximise B; comb + muting (Fig 23.2c) then protect that wideband estimate from collisions.
- FR2's GHz-class bandwidths are the reason mmWave positioning reaches cm-class — not the angles, the bandwidth.
- Gotcha: effective bandwidth, not nominal, sets resolution — a wideband PRS with poor SNR on the band edges resolves no better than a clean narrow one.
23.2 PRS — Positioning Reference Signal
PRS is a CSI-RS-like wide-band reference signal designed for high time-of-arrival resolution. Configurable: 24–272 RBs of bandwidth, comb size {2, 4, 6, 12}, transmit on multiple slots within a period (10..10240 ms). The wide BW plus sparse comb gives sample-level timing resolution; combined across multiple gNBs, this yields TDOA hyperbolas with 1–3 m accuracy at FR1 and sub-metre at FR2.
In plain English. The wider the bandwidth, the sharper the receiver can resolve when a pulse arrived. PRS is built to be as wide as the spectrum allows. Each gNB transmits a clean reference at known times; the UE measures the difference between arrival times from different gNBs; geometry does the rest. Rel-16 introduced the RTT-based method (multi-RTT) that doesn't depend on clock synchronisation between gNBs — the biggest practical accuracy improvement since LTE OTDOA — and Rel-17 then tightened the accuracy targets toward sub-metre.
Expert read
- TDOA's accuracy is capped by inter-gNB synchronisation error — 30 ns of sync slop ≈ 9 m of position error before you even start.
- Multi-RTT trades that for needing two-way exchanges (PRS down, SRS up) per gNB — more signalling, but sync-independent.
- Rel-16 added multi-RTT precisely to hit the 1–3 m industrial-IoT target that sync-limited TDOA couldn't reach.
- Gotcha: multi-RTT still needs accurate Rx-Tx timing-difference reporting at both ends; UE/gNB group-delay calibration error is the new dominant error term.
Expert read
- PRS muting is the positioning analogue of ZP-CSI-RS (Fig 9.4b): coordinate transmitters in time so weak-but-needed signals survive a strong neighbour.
- Combined with a sparse comb (size 2/4/6/12), muting also boosts effective per-occasion SNR by concentrating energy.
- The classic near-far / hearability problem is why LTE OTDOA struggled; NR's flexible PRS (wide BW + muting) is what reaches 1–3 m.
- Gotcha: muting cuts the duty cycle, so positioning latency rises — there's a fix-rate vs hearability trade the LMF must balance per UE.
23.3 References
- TS 38.211 §7.4.1.7 PRS
- TS 38.215 §5.2 positioning measurements
- TS 38.305 stage 2 (LMF, LPP)
Part VI · Deep Topics — Chapter Twenty-Four
Multicast and Broadcast (MBS)
One transmission, many receivers. The Rel-17 mechanism for delivering common content efficiently.
TS 38.211 §7.3.1
TS 38.214 §5.1.6.1.3a
TS 38.300 (MBS arch)
After this chapter you will
Distinguish PTM (Point-To-Multipoint) and PTP (Point-To-Point) MBS delivery; recognise G-RNTI scrambling on PDSCH; understand the MBS group scheduling DCI; and know when MBS beats unicast (live events, software OTA).
24.1 Two Modes — PTM and PTP
When a thousand UEs in a stadium need the same video stream, sending it a thousand times by unicast is wasteful. MBS — Multicast and Broadcast Service — lets the gNB send the stream once, addressed to a group via a shared RNTI, and every UE in the group decodes the same PDSCH.
- PTM (Point-To-Multipoint) — single transmission addressed to a group via G-RNTI. UEs in the group decode the same PDSCH. Best for dense clusters.
- PTP (Point-To-Point) — separate per-UE transmissions of the same content; allows per-UE link adaptation and HARQ. Best for spatially dispersed receivers where MU-MIMO can be exploited.
The gNB can switch between modes dynamically — PTP when receivers are spread out and PTM when they're clustered.
In plain English. Picture a concert venue. The PA system broadcasts to everyone at once — that's PTM. But sometimes the front-row audience needs subtitles in English, the middle in Spanish, the back in Mandarin — that's PTP. The same content reaches all of them, but the delivery mechanism differs. NR lets the network pick PTM or PTP per content stream, even per slot.
Expert read
- PTM wins on overhead (one transmission for N UEs) but loses on rate (worst-UE MCS); PTP is the reverse. The crossover is roughly group size × spatial spread.
- Dynamic switching means the network can start a live event in PTM and drop stragglers to PTP retransmission without re-architecting.
- PTP can exploit MU-MIMO to send different UEs' copies on the same resources — recovering some of PTM's efficiency for dispersed groups.
- Gotcha: PTM with no HARQ relies on a conservative MCS; set it for the cell-edge group member or some UEs silently miss frames — the opposite failure mode from unicast.
24.2 RNTIs and Channels
| RNTI | Use |
| G-RNTI | PTM data on PDSCH |
| G-CS-RNTI | PTM configured-grant scheduling |
Table 24.1 — MBS-specific RNTIs.
Expert read
- The RNTI is the addressing: C-RNTI = one UE, G-RNTI = a group. Same PDCCH/PDSCH machinery, different scrambling seed.
- PTM has no per-UE HARQ/link-adaptation by default — the MCS must be conservative enough for the worst UE in the group (cell-edge sets the rate).
- Rel-17 allows optional HARQ feedback for multicast so the gNB can retransmit to stragglers without dropping to unicast for everyone.
- Gotcha: PTM only wins when the group is large and co-located; for a few scattered UEs, per-UE link-adapted unicast (or MU-MIMO) often beats a worst-case-rate broadcast.
Expert read
- This breaks PTM's worst-UE-MCS ceiling: the gNB can run a higher group MCS and mop up the occasional miss via targeted retransmission.
- Two feedback modes mirror groupcast sidelink: ACK/NACK (each UE reports) or NACK-only (only failures speak up, saving PUCCH).
- The retransmission can stay multicast (if several missed) or go unicast (one straggler) — the gNB picks per situation.
- Gotcha: feedback resources cost uplink; for a huge audience, collecting N ACKs can itself congest PUCCH — NACK-only exists precisely to bound that.
24.3 References
- TS 38.300 §16A MBS
- TS 38.214 §5.1.6.1.3a
Part VII · Operations — Chapter Twenty-Five
KPIs and Physical Layer Mapping
From "DL throughput is bad" to "the third RB of the BWP has a fade and DMRS positions are wrong" — the chain of evidence from KPI back to PHY.
TS 28.554 (5G KPIs)
After this chapter you will
Translate every common cell KPI into the PHY mechanism that drives it; reason about DL/UL throughput, RACH success, handover success, accessibility, retainability, and how each is observable from PHY traces.
25.1 The Six Big KPIs and Their PHY Culprits
Operators measure cells in terms of OAM dashboards: graphs of throughput, success rates, drop rates, retransmission counts. When a graph dips, the question is always the same: which physical-layer mechanism is responsible? Knowing the KPI-to-PHY map is the difference between a five-minute fix and a five-week investigation.
| KPI | What it measures | PHY culprits when bad |
| DL Throughput | bits/s per UE | Low CQI, AL too large, MCS clamp, CORESET overhead, DMRS mis-config, BWP too narrow |
| UL Throughput | same, uplink | SRS missing, codebook precoder wrong, TPC overshoot, DFT-s-OFDM clamp on cell-centre UEs |
| RACH Success | Msg1 → Msg4 success | Preamble collisions, power-ramp mis-config, ssb-perRO mis-set, root-seq collision |
| Handover Success | HO completion rate | SMTC mis-config, beam-failure during HO, TCI mismatch on target |
| Accessibility | RRC setup success | RACH issues, beam coverage, SIB1 BLER |
| Retainability | BLER and call drops | BFR mis-config, AL too small for cell-edge, link-adaptation drift, RLF timer too short |
Table 25.1 — KPI → PHY mapping. Use as a triage table when a KPI graph dips.
In plain English. Every KPI has 2–5 typical root causes, and 90 % of investigations land on one of them. Memorise this table; when you see "RACH success rate dropped from 98 % to 92 %", the answer is almost always one of: too many UEs picking the same preamble (period too long), power ramp too small (UEs giving up before reaching gNB sensitivity), or SSB-to-RO ratio mis-set (UEs trying RACH on beams the gNB isn't expecting).
Expert read
- This lifecycle is the first triage cut: an accessibility dip is a RACH/SIB1/beam-coverage problem; a retainability dip is BLER/BFR/RLF — totally different PHY subsystems.
- Integrity (throughput) is the noisiest KPI because it folds in CQI, scheduler, MIMO, and load all at once — isolate the others first.
- Mobility KPIs (HO success, ping-pong rate) tie straight back to the A3/TTT tuning in Fig 19.3b.
- Gotcha: a single root cause can move several KPIs (e.g. bad beam coverage hurts accessibility AND retainability AND mobility) — don't chase each KPI independently.
Expert read
- Multiplicative gates mean a 95% RACH × 98% SIB1 × 97% beam ≈ 90% accessibility — small per-gate losses compound fast.
- This maps straight onto the triage table (Fig 25.1): each gate has its own PHY culprits, so identifying the failing gate localises the fix.
- Order matters: RACH is upstream of everything — fix it first, or downstream gate measurements are polluted by UEs that never got on.
- Gotcha: beam coverage failures masquerade as RACH failures (UE can't reach the gNB on any beam) — separate them by checking whether preambles are received at all vs received-but-not-answered.
25.2 References
- TS 28.554 5G NR KPI definitions
Part VII · Operations — Chapter Twenty-Six
Real-World Optimization Scenarios
Five field cases — dense PCI cluster, FR2 beam misalignment, RACH storm, slot-format mismatch, MU-MIMO collisions — diagnosed and fixed.
Real cases, real fixes
Each scenario below was extracted from production drive tests. The symptom is what the OAM dashboard showed; the diagnosis is what the PHY trace revealed; the fix is what shipped.
Case 1 — Dense PCI in a 350-cell cluster
Symptom: Drive test shows 12 % of UEs successfully decode SIB1 but never receive Msg2. Diagnosis: PCI mod-3 collisions on adjacent sectors — preamble correlation was contaminated by a neighbour cell's PSS interference. Fix: PCI replan with mod-3 + mod-4 constraints plus a 10 dB neighbour-RSRP separation rule. RACH success rose from 88 % → 99 %.
Expert read
- PSS subcarrier mapping depends only on PCI mod 3; SSS adds PCI mod 112-ish structure — so 'mod-3 collision' is specifically a PSS-domain interference, the worst kind during initial sync.
- It also breaks DMRS: PBCH-DMRS comb position is PCI mod 4, so good PCI plans constrain mod 3 and mod 4 (and often mod 30 for SSS).
- Symptom signature: UEs decode SIB1 fine on the strong cell but never get Msg2 — sync works, RACH correlation doesn't (the Ch.26 Case-1 fingerprint).
- Gotcha: automatic neighbour relation (ANR) can heal mobility but won't fix a bad PCI plan — mod-collisions must be designed out, not learned out.
Case 2 — FR2 beam dropout at the foyer
Symptom: A UE walks through a glass-walled lobby and PDSCH BLER spikes to 80 % for 200 ms before recovering. Diagnosis: BFD threshold was set too low; the UE was still being measured against SSB beam #4 even though glass refraction had steered the strongest path to SSB #5. Fix: Tightened BFD/BFR timers (reduced beamFailureInstanceMaxCount from 10 → 6) plus added SSBs at finer angular spacing. BLER spikes capped at < 30 ms.
Case 3 — RACH storm at a festival
Symptom: 50,000 UEs converge on a stadium; RACH success rate falls below 60 %. Diagnosis: 64 preambles × 8 ROs = 512 opportunities per 100 ms period → 5,120 attempts/second, but the offered load is ~8,000 attempts/second. Pure overload. Fix: Halved the PRACH period (50 ms instead of 100 ms — doubles capacity to ~10,240/s) and enabled 2-step RACH for capable UEs (cuts per-attempt overhead). Success returned to > 95 %.
Case 4 — Slot-format mismatch in CA
Symptom: Inter-band carrier aggregation breaks every third handover. Diagnosis: Source cell uses DDDDU; target cell uses DDDSU. The special-slot guard periods are different lengths; UEs that don't immediately resync the SFI lose UL timing alignment. Fix: Aligned slot formats across the band combination (both DDDSU) and increased SFI signalling rate to every 5 ms. HO success rose from 91 % → 99.5 %.
Expert read
- TDD cross-carrier conflicts are a config error, not an RF one — the patterns are individually valid but jointly impossible for a half-duplex-per-band UE.
- Most FR1 UEs can't transmit and receive simultaneously on different bands without strong filtering; the gNB must respect the UE's simultaneousRxTx capability bits.
- Symptom: sporadic UL or DL drops correlated with specific symbol positions — not coverage-correlated, which rules out the usual culprits.
- Gotcha: the conflict may only appear when both carriers are actually scheduled in the same slot, so it hides under light load and surfaces at busy hour — a nasty intermittent.
Case 5 — MU-MIMO co-scheduling collisions
Symptom: Two UEs co-scheduled in MU-MIMO show simultaneous BLER spikes — both fail at once. Diagnosis: Type I codebook picked the same beam direction for both UEs (they were geographically close); inter-layer interference was destroying both. Fix: Enabled Type II eCSI feedback so per-RB precoders could differentiate, and widened the angular-separation threshold in MU pairing from 20° → 35°. Co-scheduled BLER fell from 35 % → 9 %.
Expert read
- MU-MIMO pairing needs angular separation (Fig 14.1c); the collision here is a scheduler pairing-criterion that was too loose.
- Deeper nulls need accurate per-RB precoders — coarse Type I can't null well, so high-load MU-MIMO wants Type II or TDD reciprocity from SRS.
- Symptom signature: BLER spikes on both paired UEs simultaneously and only when co-scheduled — uncorrelated with their individual SINR.
- Gotcha: chasing it as a link-adaptation problem (lowering MCS) just wastes throughput — the real fix is the pairing decision, not the MCS.
Common Threads
- Every case was diagnosable from PHY-layer logs — no L3 RRC tracing required.
- Every fix was a configuration change, not a code change.
- The default 3GPP values are conservative; real deployments need tuning to specific load and geography.
Reference
- Vendor PHY-trace tooling. See Ch. 27 for log analysis methods.
Part VII · Operations — Chapter Twenty-Seven
Troubleshooting — Log Analysis and Tools
PHY traces, vendor logs, drive-test files. The toolbox a PHY engineer reaches for when the OAM dashboard says "throughput dropped".
After this chapter you will
Read a PHY trace efficiently; recognise the diagnostic value of each common counter; cross-reference UE-side logs with gNB-side logs; and structure a root-cause investigation that ends in a config change, not a guess.
27.1 The Three Source Streams
- UE-side — QXDM, Qualcomm Diag, MediaTek ELT, Apple sysdiagnose. Captures DCI, MIB, SIB1, PHY decode failures.
- gNB-side — vendor PHY trace (e.g. Ericsson PHY events, Nokia PHY counter), bit-exact RE-grid dumps for offline analysis.
- Drive-test — Rohde & Schwarz / Anritsu / Keysight tools recording RSRP, SINR, MCS, BLER per second per BWP per beam.
Expert read
- The discipline is time alignment: capture all three for the identical window, or you compare a fault on one side to normal operation on another.
- Each source lies in its own way — UE logs miss what the gNB chose not to send; gNB counters miss what the UE failed to hear; drive-test misses protocol state. Together they triangulate.
- Counters give the what (BLER up), traces give the where (which channel/slot), drive-test gives the why (SINR collapsed) — the three questions of the investigation loop (Fig 27.1).
- Gotcha: clock skew between UE and gNB logs is real — sync them on a known event (e.g. a specific RACH) before correlating, or you'll chase a phantom 'timing' bug that's just unsynced timestamps.
27.2 Counters That Always Matter
| Counter | Meaning | Healthy range |
| DL BLER (1st-tx) | BLER before retransmission | 5–15 % |
| UL BLER (residual) | BLER after 4 HARQ attempts | < 1 % |
| PDCCH BD success | blind-decode hit rate | > 99 % per slot |
| RACH attempts/cell/s | preamble TXs per second | load-dependent; check ramp distribution |
| HO success | handover success rate | > 98 % |
| SR pending | SRs awaiting grant | < 5 |
Table 27.1 — Counters every PHY engineer watches.
Expert read
- 0% BLER is a bug, not a win — it means the scheduler is leaving throughput on the table (Fig 16.1's sawtooth should be hugging 10%).
- Counters must be read together: high BLER + low PDCCH-BD success points at coverage; high BLER + good BD points at link adaptation or interference.
- Distinguish first-tx BLER (link-adaptation target) from residual BLER after HARQ (must be tiny) — confusing the two sends investigations the wrong way.
- Gotcha: a healthy-looking average can hide a bimodal split (half the UEs at 2%, half at 30%); always check the per-UE distribution, not just the cell mean.
27.3 An Investigation Template
- Reproduce — capture both UE and gNB log for the same 30-second window.
- Localise — which channel? DL or UL? Which slot? Which UE?
- Quantify — KPI delta vs baseline. Counters trending which way?
- Hypothesise — match against a known PHY culprit (see Sec. 25.1).
- Test the fix — config change on one cell, A/B against the rest, watch KPI.
- Promote — if KPI recovers, roll out network-wide.
Expert read
- The single-cell A/B is the crux: networks drift on their own, so without a control you can't tell your change from background variation.
- Change one parameter at a time — bundled changes make a recovering KPI uninterpretable (which knob helped?).
- Tie the hypothesis to the KPI→PHY map (Fig 25.1) so you test the likely culprit first, not a random one.
- Gotcha: some fixes help locally but hurt neighbours (e.g. raising power); always check the neighbour cells' KPIs in the A/B, not just the touched cell.
27.4 References
- Vendor-specific PHY trace guides. TS 38.215 measurement defs · TS 28.554 KPIs.
Appendices
Reference Tables & Data
MCS tables, TBS examples, PRACH configurations, DCI fields, QCL types, frequency bands, formulas — everything an engineer needs at their fingertips.
Appendix A · Reference Tables
Complete MCS Tables
The four NR MCS tables (TS 38.214 §5.1.3.1) in one place — for when you need to look up Qm and R from an MCS index at 3 AM.
TS 38.214 §5.1.3.1
TS 38.214 §6.1.4.1 (UL)
A.1 Table 1 — 64-QAM (default, MCS 0–28)
Selected by default. DCI 1_0 always uses this table. Maximum modulation order 6 (64-QAM).
| MCS | Qm | R × 1024 | Spectral efficiency |
| 0 | 2 (QPSK) | 120 | 0.234 |
| 1 | 2 | 157 | 0.306 |
| 2 | 2 | 193 | 0.377 |
| 3 | 2 | 251 | 0.490 |
| 4 | 2 | 308 | 0.602 |
| 5 | 2 | 379 | 0.740 |
| 6 | 2 | 449 | 0.877 |
| 7 | 2 | 526 | 1.027 |
| 8 | 2 | 602 | 1.176 |
| 9 | 2 | 679 | 1.326 |
| 10 | 4 (16QAM) | 340 | 1.328 |
| 11 | 4 | 378 | 1.477 |
| 12 | 4 | 434 | 1.695 |
| 13 | 4 | 490 | 1.914 |
| 14 | 4 | 553 | 2.160 |
| 15 | 4 | 616 | 2.406 |
| 16 | 4 | 658 | 2.570 |
| 17 | 6 (64QAM) | 438 | 2.566 |
| 18 | 6 | 466 | 2.730 |
| 19 | 6 | 517 | 3.029 |
| 20 | 6 | 567 | 3.322 |
| 21 | 6 | 616 | 3.609 |
| 22 | 6 | 666 | 3.902 |
| 23 | 6 | 719 | 4.213 |
| 24 | 6 | 772 | 4.523 |
| 25 | 6 | 822 | 4.816 |
| 26 | 6 | 873 | 5.115 |
| 27 | 6 | 910 | 5.332 |
| 28 | 6 | 948 | 5.555 |
| 29 | 2 | reserved | retransmission |
| 30 | 4 | reserved | retransmission |
| 31 | 6 | reserved | retransmission |
Table A.1 — TS 38.214 Table 5.1.3.1-1. MCS 29–31 indicate retransmissions (TBS inherited from prior transmission).
A.2 Table 2 — 256-QAM (MCS 0–27)
Selected with mcs-Table = qam256. Maximum Qm = 8.
| MCS | Qm | R × 1024 | SE |
| 0 | 2 | 120 | 0.234 |
| 1 | 2 | 193 | 0.377 |
| 2 | 2 | 308 | 0.602 |
| 3 | 2 | 449 | 0.877 |
| 4 | 2 | 602 | 1.176 |
| 5 | 4 | 378 | 1.477 |
| 6 | 4 | 434 | 1.695 |
| 7 | 4 | 490 | 1.914 |
| 8 | 4 | 553 | 2.160 |
| 9 | 4 | 616 | 2.406 |
| 10 | 4 | 658 | 2.570 |
| 11 | 6 | 466 | 2.730 |
| 12 | 6 | 517 | 3.029 |
| 13 | 6 | 567 | 3.322 |
| 14 | 6 | 616 | 3.609 |
| 15 | 6 | 666 | 3.902 |
| 16 | 6 | 719 | 4.213 |
| 17 | 6 | 772 | 4.523 |
| 18 | 6 | 822 | 4.816 |
| 19 | 6 | 873 | 5.115 |
| 20 | 8 (256QAM) | 682.5 | 5.332 |
| 21 | 8 | 711 | 5.555 |
| 22 | 8 | 754 | 5.891 |
| 23 | 8 | 797 | 6.227 |
| 24 | 8 | 841 | 6.570 |
| 25 | 8 | 885 | 6.914 |
| 26 | 8 | 916.5 | 7.160 |
| 27 | 8 | 948 | 7.406 |
| 28–31 | — | reserved | retransmissions |
Table A.2 — TS 38.214 Table 5.1.3.1-2.
A.3 Table 3 — Low spectral efficiency (URLLC, RedCap)
For coverage-limited or URLLC scenarios. Same Qm range as Table 1 but at lower R for higher reliability margin.
| MCS | Qm | R × 1024 | SE |
| 0 | 2 | 30 | 0.0586 |
| 1 | 2 | 40 | 0.0781 |
| 2 | 2 | 50 | 0.0977 |
| 3 | 2 | 64 | 0.1250 |
| 4 | 2 | 78 | 0.1523 |
| 5 | 2 | 99 | 0.1934 |
| 6 | 2 | 120 | 0.2344 |
| 7 | 2 | 157 | 0.3066 |
| 8 | 2 | 193 | 0.3770 |
| 9 | 2 | 251 | 0.4902 |
| 10 | 2 | 308 | 0.6016 |
| 11 | 2 | 379 | 0.7402 |
| 12 | 2 | 449 | 0.8770 |
| 13 | 2 | 526 | 1.0273 |
| 14 | 2 | 602 | 1.1758 |
| 15 | 4 | 340 | 1.3281 |
| 16 | 4 | 378 | 1.4766 |
| 17 | 4 | 434 | 1.6953 |
| 18 | 4 | 490 | 1.9141 |
| 19 | 4 | 553 | 2.1602 |
| 20 | 4 | 616 | 2.4063 |
| 21 | 6 | 438 | 2.5664 |
| 22 | 6 | 466 | 2.7305 |
| 23 | 6 | 517 | 3.0293 |
| 24 | 6 | 567 | 3.3223 |
| 25 | 6 | 616 | 3.6094 |
| 26 | 6 | 666 | 3.9023 |
| 27 | 6 | 719 | 4.2129 |
| 28 | 6 | 772 | 4.5234 |
| 29 | 2 | reserved (retransmission) |
| 30 | 4 | reserved (retransmission) |
| 31 | 6 | reserved (retransmission) |
Table A.3 — TS 38.214 Table 5.1.3.1-3 (MCS index table 3, low-spectral-efficiency / qam64LowSE), complete. Same modulation orders as Table 1 but with much lower code rates at each index, so it can reach a 10⁻⁵ BLER target for URLLC. Selected by mcs-Table = qam64LowSE or per-grant via the MCS-C-RNTI.
A.4 Table 4 — 1024-QAM (Rel-17, MCS 0–26 + reserved)
Selected with mcs-Table = qam1024. FR1 high-band only. Maximum Qm = 10 — present only at MCS 23–26.
| MCS | Qm | R × 1024 | SE |
| 0 | 2 | 120 | 0.2344 |
| 1 | 2 | 193 | 0.3770 |
| 2 | 2 | 449 | 0.8770 |
| 3 | 4 | 378 | 1.4766 |
| 4 | 4 | 490 | 1.9141 |
| 5 | 4 | 616 | 2.4063 |
| 6 | 6 | 466 | 2.7305 |
| 7 | 6 | 517 | 3.0293 |
| 8 | 6 | 567 | 3.3223 |
| 9 | 6 | 616 | 3.6094 |
| 10 | 6 | 666 | 3.9023 |
| 11 | 6 | 719 | 4.2129 |
| 12 | 6 | 772 | 4.5234 |
| 13 | 6 | 822 | 4.8164 |
| 14 | 6 | 873 | 5.1152 |
| 15 | 8 | 682.5 | 5.3320 |
| 16 | 8 | 711 | 5.5547 |
| 17 | 8 | 754 | 5.8906 |
| 18 | 8 | 797 | 6.2266 |
| 19 | 8 | 841 | 6.5703 |
| 20 | 8 | 885 | 6.9141 |
| 21 | 8 | 916.5 | 7.1602 |
| 22 | 8 | 948 | 7.4063 |
| 23 | 10 (1024QAM) | 805.5 | 7.8662 |
| 24 | 10 | 853 | 8.3301 |
| 25 | 10 | 900.5 | 8.7939 |
| 26 | 10 | 948 | 9.2578 |
| 27 | 2 | reserved (retransmission) |
| 28 | 4 | reserved |
| 29 | 6 | reserved |
| 30 | 8 | reserved |
| 31 | 10 | reserved |
Table A.4 — TS 38.214 Table 5.1.3.1-4 (MCS index table 4, qam1024), complete. Note the peak is MCS 26 (Qm=10, R=948/1024, SE = 9.2578 bits/RE — 25 % above Table 2's peak); MCS 27–31 are reserved for retransmissions. Qm=10 appears only at MCS 23–26.
A.5 Looking Up an MCS
- Pick the table (per RRC
mcs-Table): default / qam64 → Table 1; qam256 → Table 2; qam64LowSE → Table 3; qam1024 → Table 4. (A grant scrambled by the MCS-C-RNTI instead of the C-RNTI forces the low-SE Table 3 per-grant.)
- Read DCI MCS field (5 bits, 0–31). If in retransmission range, TBS comes from prior transmission.
- Look up (Qm, R). Plug into the TBS algorithm (Sec. 8.5.1) along with NRB, Nsymb, DMRS overhead.
A.6 Reference
- TS 38.214 §5.1.3.1 (DL) · §6.1.4.1 (UL)
Appendix B · Reference Tables
TBS Determination — Worked Examples
Five end-to-end TBS calculations covering the typical scenarios — small payload, medium, large, segmented, URLLC.
TS 38.214 §5.1.3.2
B.1 The Algorithm in Five Lines
TS 38.214 § 5.1.3.2
Step 1: N_RE' = 12·N_symb,sh − N_DMRS,sh − N_oh (per RB)
Step 2: N_RE = min(156, N_RE') · n_PRB
Step 3: N_info = N_RE · R · Q_m · v
Step 4: if N_info ≤ 3824 → quantize + Table 5.1.3.2-1 lookup
Step 5: else → quantize + segmentation-aware formula
TS 38.214 §5.1.3.2 — the exact quantization (Steps 4–5)
If Ninfo ≤ 3824 (small payload):
n = max(3, ⌊log₂(Ninfo)⌋ − 6); Ninfo′ = max(24, 2n·⌊Ninfo/2n⌋)
→ TBS = the smallest value in Table B.1 (Table 5.1.3.2-1) that is ≥ Ninfo′.
If Ninfo > 3824 (segmentation-aware):
n = ⌊log₂(Ninfo − 24)⌋ − 5; Ninfo′ = max(3840, 2n·round((Ninfo − 24)/2n))
if R ≤ 1/4: C = ⌈(Ninfo′ + 24)/3816⌉, TBS = 8C·⌈(Ninfo′ + 24)/(8C)⌉ − 24
else if Ninfo′ > 8424: C = ⌈(Ninfo′ + 24)/8424⌉, TBS = 8C·⌈(Ninfo′ + 24)/(8C)⌉ − 24
else: TBS = 8·⌈(Ninfo′ + 24)/8⌉ − 24
C is the resulting number of LDPC code blocks; the 3816 / 8424 thresholds keep every code block ≤ Kcb (BG2 / BG1) once the TB-CRC is added.
B.1b The TBS Lookup Table (Table 5.1.3.2-1)
This is the table Step 4 reads for any Ninfo ≤ 3824. The book referenced it everywhere; here it is in full.
| idx | TBS | idx | TBS | idx | TBS | idx | TBS |
| 1 | 24 | 25 | 240 | 49 | 808 | 73 | 1992 |
| 2 | 32 | 26 | 256 | 50 | 848 | 74 | 2088 |
| 3 | 40 | 27 | 272 | 51 | 888 | 75 | 2152 |
| 4 | 48 | 28 | 288 | 52 | 928 | 76 | 2216 |
| 5 | 56 | 29 | 304 | 53 | 984 | 77 | 2280 |
| 6 | 64 | 30 | 320 | 54 | 1032 | 78 | 2408 |
| 7 | 72 | 31 | 336 | 55 | 1064 | 79 | 2472 |
| 8 | 80 | 32 | 352 | 56 | 1128 | 80 | 2536 |
| 9 | 88 | 33 | 368 | 57 | 1160 | 81 | 2600 |
| 10 | 96 | 34 | 384 | 58 | 1192 | 82 | 2664 |
| 11 | 104 | 35 | 408 | 59 | 1224 | 83 | 2728 |
| 12 | 112 | 36 | 432 | 60 | 1256 | 84 | 2792 |
| 13 | 120 | 37 | 456 | 61 | 1288 | 85 | 2856 |
| 14 | 128 | 38 | 480 | 62 | 1320 | 86 | 2976 |
| 15 | 136 | 39 | 504 | 63 | 1352 | 87 | 3104 |
| 16 | 144 | 40 | 528 | 64 | 1416 | 88 | 3240 |
| 17 | 152 | 41 | 552 | 65 | 1480 | 89 | 3368 |
| 18 | 160 | 42 | 576 | 66 | 1544 | 90 | 3496 |
| 19 | 168 | 43 | 608 | 67 | 1608 | 91 | 3624 |
| 20 | 176 | 44 | 640 | 68 | 1672 | 92 | 3752 |
| 21 | 184 | 45 | 672 | 69 | 1736 | 93 | 3824 |
| 22 | 192 | 46 | 704 | 70 | 1800 | | |
| 23 | 208 | 47 | 736 | 71 | 1864 | | |
| 24 | 224 | 48 | 768 | 72 | 1928 | | |
Table B.1 — TS 38.214 Table 5.1.3.2-1: the 93 byte-aligned TBS values for Ninfo ≤ 3824. After computing the quantised Ninfo′ you take the smallest TBS in this table that is ≥ Ninfo′. (TBS is in bits; all values are multiples of 8.)
B.2 Example 1 — Small payload (Qm=2, 4 RBs, 7 sym)
QPSK, 4 RBs, mini-slot
- nPRB=4, Nsymb,sh=7, DMRS=12 REs/RB, oh=0 → NRE' = 7·12 − 12 = 72; capped 72; total = 288.
- Qm=2, R=0.378, v=1 → Ninfo = 288·0.378·2 = ~218 bits.
- Ninfo ≤ 3824 → n = max(3, ⌊log₂(218)⌋−6) = max(3, 1) = 3; 2³ = 8; Ninfo' = max(24, 8·27) = 216.
- Table 5.1.3.2-1 → TBS = 216 bits.
B.3 Example 2 — Medium (16-QAM, 20 RBs, 12 sym, 1 layer)
PUSCH worked example from Ch.10
Computed in Ch.10.9 → TBS = 4,992 bits, BG1, single CB.
B.4 Example 3 — Large (64-QAM, 50 RBs, 12 sym, 2 layers)
PDSCH worked example from Ch.8
Computed in Ch.8.10 → TBS = 51,216 bits, BG1, 7 code blocks.
B.5 Example 4 — Cell-edge low rate (Qm=2, R=0.10, 100 RBs)
URLLC coverage
- NRE' = 144−12 = 132 (capped); total = 132·100 = 13,200.
- Ninfo = 13,200·0.10·2·1 = 2,640 bits.
- Ninfo ≤ 3824 → quantize → look up → TBS ≈ 2,664 bits.
B.6 Example 5 — Massive (256-QAM, 273 RBs, 14 sym, 4 layers)
Peak eMBB
- NRE' = 168−12 = 156 (right at cap); total = 156·273 = 42,588.
- Qm=8, R=0.926, v=4 → Ninfo = 42,588·0.926·8·4 ≈ 1,261,000 bits.
- Quantize and segment with C ≈ 150 code blocks → TBS ≈ 1.26 Mbits per slot.
- At 1 slot = 1 ms (μ=0) → ~1.26 Gbps from this one 100 MHz carrier at 4 layers. With μ=1 (0.5 ms slot) → ~2.5 Gbps. Double it with 8-layer MIMO (~5 Gbps), then aggregate ~4 × 100 MHz carriers → ~20 Gbps — the IMT-2020 peak target. (NR caps downlink CA at 16 carriers, so this is well within reach.)
B.7 Reference
- TS 38.214 §5.1.3.2 / §6.1.4.2 TBS algorithm
Live lab
Appendix C · Reference Tables
QCL Type Reference
Quasi-Co-Location types A, B, C, D — what each one says, where each one's used.
TS 38.214 §5.1.5
C.1 The Four Types
| Type | Shared properties | Use case |
| A | Doppler shift, Doppler spread, average delay, delay spread | Full coherent — typically used to QCL PDSCH-DMRS with TRS for fine timing/freq tracking |
| B | Doppler shift, Doppler spread | When only Doppler is relevant — e.g. inter-frequency measurement |
| C | Doppler shift, average delay | Coarse, for initial acquisition (SSB) |
| D | Spatial Rx parameter (beam direction at UE) | FR2 essential — tells UE which Rx beam to point |
Table C.1 — QCL types per TS 38.214 §5.1.5.
C.2 Typical TCI-State Configurations
| Channel | Typical QCL chain |
| PDSCH (FR1) | QCL-Type A with TRS — that's it. No Type D needed at FR1. |
| PDSCH (FR2) | QCL-Type A with TRS + QCL-Type D with SSB beam |
| PDCCH (FR2) | QCL-Type A with TRS + QCL-Type D with SSB beam |
| CSI-RS (FR2) | QCL-Type A with TRS + QCL-Type D with another CSI-RS or SSB |
| SSB | (reference — no upstream QCL) |
Table C.2 — TCI-state QCL chain typical configurations.
In plain English. QCL says "channel X and channel Y come from the same direction / same Doppler / same delay profile, so what you learn from estimating Y applies to X too." Type A is "same in every channel property". Type D is the narrow but critical one — "same Rx beam direction at the UE", which is what lets the UE point its antenna correctly before trying to decode anything at FR2.
C.3 Reference
- TS 38.214 §5.1.5 QCL types and TCI states
- TS 38.331 TCI-State IE
Live lab
Appendix D · Reference Tables
NR Frequency Bands (Selected)
The bands you're most likely to meet in production NR — sub-6, mid-band, mmWave.
TS 38.101-1 (FR1)
TS 38.101-2 (FR2)
D.1 FR1 — Sub-6 GHz
| Band | UL (MHz) | DL (MHz) | Duplex | Use |
| n1 | 1920–1980 | 2110–2170 | FDD | 2.1 GHz IMT, Europe/Asia |
| n3 | 1710–1785 | 1805–1880 | FDD | 1.8 GHz, Europe/Asia |
| n5 | 824–849 | 869–894 | FDD | 850 MHz, Americas |
| n7 | 2500–2570 | 2620–2690 | FDD | 2.6 GHz IMT-E |
| n8 | 880–915 | 925–960 | FDD | 900 MHz, Europe |
| n20 | 832–862 | 791–821 | FDD | 800 MHz digital dividend |
| n28 | 703–748 | 758–803 | FDD | 700 MHz APT, Asia/EU |
| n38 | 2570–2620 | 2570–2620 | TDD | 2.6 GHz TDD |
| n41 | 2496–2690 | 2496–2690 | TDD | 2.5 GHz, Sprint/T-Mo |
| n66 | 1710–1780 | 2110–2200 | FDD | 1.7/2.1 GHz AWS-3 |
| n70 | 1695–1710 | 1995–2020 | FDD | AWS-4 |
| n71 | 663–698 | 617–652 | FDD | 600 MHz, T-Mo US |
| n77 | 3300–4200 | 3300–4200 | TDD | 3.7–4.2 GHz mid-band |
| n78 | 3300–3800 | 3300–3800 | TDD | ★ 3.5 GHz, the most common NR band globally |
| n79 | 4400–5000 | 4400–5000 | TDD | 4.5 GHz, China/Japan |
Table D.1 — Most-deployed FR1 NR bands. Full list in TS 38.101-1 §5.
D.2 FR2-1 — 24.25–52.6 GHz
| Band | Frequency (GHz) | Notes |
| n257 | 26.5–29.5 | ★ 28 GHz, mobile in Japan/US/Korea |
| n258 | 24.25–27.5 | 26 GHz, mobile in EU |
| n260 | 37–40 | 39 GHz, mobile in US (Verizon) |
| n261 | 27.5–28.35 | 28 GHz subset, FWA |
Table D.2 — FR2-1 bands.
D.3 FR2-2 — Rel-17 (52.6–71 GHz)
| Band | Frequency (GHz) | Notes |
| n262 | 47.2–48.2 | Rel-17 FR2-2 |
| n263 | 57–71 | ★ 60 GHz unlicensed (Rel-17), V/W-band candidate |
Table D.3 — FR2-2 bands.
D.4 Reference
- TS 38.101-1 §5 FR1 band table
- TS 38.101-2 §5 FR2 band table
Appendix E · Reference Tables
Formula Reference Card
The twenty formulas every PHY engineer ends up writing on a whiteboard. Tear out, laminate, keep on the desk.
E.1 Identity & Numerology
PCI = 3·NID(1) + NID(2), range [0, 1007]
Δf = 15·2μ kHz · Tsym ≈ 71/2μ μs · slot = 2−μ ms · 14 sym/slot
E.2 SSB / PBCH
PBCH-DMRS cinit = 211·(īSSB+1)·(⌊PCI/4⌋+1) + 26·(īSSB+1) + (PCI mod 4)
DMRS comb offset ν = PCI mod 4
PBCH coding: Ā = 32 bits (24-bit MIB + 8 PHY) → +CRC24C → K = 56 → polar N = 512 → E = 864 → 432 QPSK REs
E.3 PDCCH
USS hashing: Yp,ns = (Ap·Yp,ns−1) mod 65537, Ap ∈ {39827, 39829, 39839} for p mod 3 ∈ {0,1,2}
Candidate CCE = L·((Yp,ns + ⌊m·NCCE/(L·M)⌋ + nCI) mod ⌊NCCE/L⌋) + i
CCE-to-REG (interleaved): f(x) = (rC + c + nshift) mod (NREGCORESET/L)
BD budget: 44 / 36 / 22 / 20 per slot at μ = 0 / 1 / 2 / 3
CCE budget: 56 / 56 / 48 / 32
E.4 PDSCH / PUSCH TBS
NRE' = 12·Nsymb − NDMRS − Noh
NRE = min(156, NRE') · nPRB
Ninfo = NRE · R · Qm · v
BG selection: BG2 if A ≤ 292 OR R ≤ 0.25 OR (A ≤ 3824 AND R ≤ 0.67); else BG1
E.5 PRACH
PSS: d(n) = 1 − 2·x((n + 43·NID(2)) mod 127)
Zadoff-Chu: xu(n) = exp(−j·π·u·n(n+1)/NZC)
RA-RNTI = 1 + sid + 14·tid + 14·80·fid + 14·80·8·ul_carrier
E.6 Power Control
PPUSCH = min(PCMAX, PO + 10log(2μ·MRB) + α·PL + ΔTF + f(i,l))
PPRACH = min(PCMAX, PTARGET + PL) · increases by powerRampingStep on failed attempt
E.7 Measurements
SS-RSRP = average power of SSS REs (dBm)
SS-RSRQ = N · SS-RSRP / SS-RSSI
ΔOLLA steady state: PACK = Δdown/(Δup+Δdown) → tune for BLER target
E.8 GSCN ↔ Frequency
0–3000 MHz: SSref = N·1200 kHz + M·50 kHz, GSCN = 3N + (M−3)/2
3000–24250 MHz: SSref = 3000 + N·1.44 MHz, GSCN = 7499 + N
24250–100000 MHz: SSref = 24250.08 + N·17.28 MHz, GSCN = 22256 + N
E.9 Point A
fPointA = fSSref − (10·SCSSSB·12) − (kSSB·SCScommon)
About the Author
Abhijeet Kumar
Founder, CafeTele
Abhijeet Kumar is a telecommunications engineer specializing in 5G NR, RAN optimization, and physical layer technologies. With deep expertise spanning 4G LTE and 5G NR across multiple vendor platforms, he has worked on network design, optimization, and troubleshooting for operators across multiple regions.
Through CafeTele, he creates world-class educational tools and training content for telecom professionals — including interactive simulators, diagnostic tools, and comprehensive training courses that bridge the gap between 3GPP specifications and real-world engineering.
This book represents the distillation of practical experience and deep specification study into a single, accessible reference for the 5G NR physical layer.
© 2026 Abhijeet Kumar • CafeTele • All Rights Reserved • Unauthorized Reproduction Prohibited
CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE