CAFETELE
Professional Engineering Series

5G NR
Physical Layer

A Practical Engineer's Guide

TS 38.211 TS 38.212 TS 38.213 TS 38.214 TS 38.215

3GPP Release 18  •  Complete Specification Coverage  •  27 Chapters  •  46+ Diagrams

OFDM & Numerology
LDPC & Polar Codes
Massive MIMO
Beamforming
KPI Optimization

Abhijeet Kumar

CAFETELE

First Edition  •  2026

© 2026 CafeTele  •  All Rights Reserved  •  Do Not Reproduce
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

Contents

Part II — Modulation & Channel Coding
04Modulation Schemes 05Channel Coding — LDPC and Polar Codes
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.

Figure 1.1 — Five generations, one ongoing question
Each generation answered the one previous one couldn't. 2G · 1990 digital voice 3G · 2001 data side-pocket 4G LTE · 2009 IP-first LTE-A · 2012 CA, MIMO 5G NR · 2018 eMBB·URLLC·mMTC 5G-A · 2024+ Rel-18 refinements Each step roughly 10×'d throughput while adding a new dimension (data → IP → MIMO → URLLC).
Figure 1.1. Roughly a decade between each major leap. The pattern: introduce one new dimension per generation while keeping backward compatibility intact long enough for the network to migrate. NR is the first generation to add three dimensions at once, which is why its physical layer is unusually rich.

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:

PillarAcronym meansTarget KPIPHY mechanisms that enable it
eMBBenhanced Mobile BroadBand20 Gbps peak, 100 Mbps cell-edge, 100 Mbps/m² area1024-QAM (Rel-17), 8 layers, FR2 mmWave, Massive MIMO Type II codebooks, BWP-based bandwidth scaling
URLLCUltra-Reliable Low-Latency Communications1 ms one-way, 99.999 % (5 nines, i.e. 1−10⁻⁵) reliabilityMini-slots (2/4/7 symbols), scalable numerology, PDCCH repetition, configured grants, CBG-based retransmission, K1=0 fast HARQ
mMTCmassive Machine-Type Comms1 M devices / km², 164 dB MCL, 10+ year batteryNB-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.
Figure 1.2 — Three pillars, three sets of trade-offs
eMBB 20 Gbps throughput URLLC 1 ms latency mMTC 1 M devices per km² throughput ↔ latency throughput ↔ scale latency ↔ scale
Figure 1.2. The pillars sit at three corners of an irreducible trade-off triangle. You can move toward any one corner, but you sacrifice the other two. NR's flexibility comes from letting different BWPs (and different slots) sit at different points inside the triangle, dynamically.
Figure 1.2b — Each pillar drove specific PHY mechanisms into the spec
Three use-cases → three sets of physical-layer toolseMBB1024-QAM · 8 layers · mMIMO · FR2URLLCmini-slots · K1=0 HARQ · PDCCH repmMTCRedCap · eDRX · 2-step RACH · π/2-BPSKMost operators run all three on one carrier, sliced by BWP.
Figure 1.2b. The IMT-2020 pillars aren't abstractions — each forced concrete features into NR. eMBB drove high-order modulation, many layers, and massive MIMO; URLLC drove mini-slots, fast HARQ, and PDCCH repetition; mMTC drove RedCap, long-sleep DRX, and low-PAPR access. Almost every later chapter is one of these tools.
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.

Figure 1.3 — NR user-plane and control-plane stacks side by side
User plane Control plane Application (IP, TCP, video, …) SDAP — QoS flow → DRB mapping PDCP — header compression, ciphering RLC — segmentation, ARQ MAC — HARQ, scheduling, logical→transport PHY — channel coding, modulation, MIMO (this book) NAS — registration, session, mobility RRC — radio resource control PDCP — ciphering, integrity RLC — segmentation MAC — HARQ, scheduling PHY — same physical channels (SRB instead of DRB)
Figure 1.3. User plane and control plane share the same PHY. The difference is the bearer type (DRB for data, SRB for signalling) and what sits above PDCP — SDAP + application for data, RRC + NAS for control. The PHY doesn't know or care; it just transports transport blocks.
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:

SpecSubjectWhat you look up hereThis book's chapters
TS 38.211Physical channels and modulationRE mappings, OFDM signal generation, sequences (Gold, Zadoff-Chu), DMRS patterns2, 3, 6, 7, 8, 9, 10, 11, 12, 13
TS 38.212Multiplexing and channel codingCRC, LDPC, polar, rate matching, DCI/UCI formats, scrambling5, 7, 8, 11
TS 38.213Physical-layer control proceduresPDCCH monitoring, RACH procedure, power control, beam management, slot formats7, 12, 14, 16, 17
TS 38.214Physical-layer data proceduresResource allocation, MCS/TBS, CSI configuration, DMRS configuration, MIMO codebooks8, 9, 10, 14, 15, 16
TS 38.215Physical-layer measurementsRSRP, RSRQ, SINR, RSSI — exact definitions and reporting ranges19
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 / SignalDirectionCarriesChapter
PSS / SSS / PBCHDLCell identity + MIB (the SSB)6
PDCCHDLScheduling DCI7
PDSCHDLUser data, broadcast data, paging8
CSI-RS, TRS, PRSDLMeasurement references9, 23
PRACHULRACH preamble12
PUSCHULUser data, UCI piggyback10
PUCCHULUCI (HARQ-ACK, SR, CSI)11
SRSULSounding reference signal13
PSBCH, PSCCH, PSSCH, PSFCHSidelinkUE-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.
Figure 1.4 — Where each channel lives in one TDD slot
A typical TDD slot · DDDDU pattern · time L→R, frequency ↑ freq time (14 symbols) PDCCH (CORESET) PDSCH + DMRS + PT-RS GP PUCCH / SRS / PUSCH
Figure 1.4. A typical FR1 30-kHz TDD slot: 3 DL control symbols (PDCCH inside CORESET), 7 DL data symbols (PDSCH + DMRS), a 2-symbol guard period, then 2 UL symbols (PUCCH or SRS). The SSB (PSS/SSS/PBCH) is not shown — it lives in a separate slot every 20 ms.

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:

Figure 1.5 — The universal PHY processing chain (DL example)
Bits → REs · the same 7 stages for PDSCH, PDCCH, PBCH (with parameter swaps) Transport block + CRC 24A/24C/16 Channel code (LDPC/polar) Rate match + HARQ RV Scramble Gold seq Modulate QPSK..1024QAM Layer + RE map to grid MAC PDU TS 38.212 §5.1 §5.2, §5.3 §5.4 TS 38.211 §5.1 §7.3.1.4 / §6.3.1.4 Receive side runs this in reverse: RE de-map → demodulate → descramble → LLR demap → rate de-match → decode → CRC check → MAC.
Figure 1.5. The seven canonical PHY stages. Different channels pick different stages — PBCH skips rate matching's HARQ aspect; PDCCH uses polar instead of LDPC; SRS does only scramble + modulate + map — but the skeleton is universal. Chapters 6–13 walk this same flow with each channel's specifics.

1.7 What Makes NR Fundamentally Different from LTE

If you came from LTE, six things will surprise you in NR:

TopicLTENRWhy the change
NumerologyFixed 15 kHz SCS15·2μ kHz, μ ∈ {0..6}One slot length doesn't fit eMBB, URLLC, and FR2 simultaneously
BandwidthUE always on full carrierBWPs — UE can run on a slicePower saving + scheduling flexibility
Always-on signalsCRS every symbolSSB every 20 ms (default); no CRSCRS overhead was 14 % of every PRB
BeamformingUE-transparent (cell-specific)UE-aware via TCI states + beam mgmtmmWave needs explicit beam pairing
Channel codingTurbo for data, TBCC for controlLDPC for data, polar for controlLDPC scales to high rates; polar has no error floor at short blocks
UnlicensedLAA bolt-on (Rel-13)NR-U built-in (Rel-16)Designed-in coexistence, not retrofitted
Table 1.4 — The big LTE → NR shifts.
Figure 1.7b — What NR changed from LTE at the physical layer
LTENRNumerologyfixed 15 kHz15·2^μ (7 options)Beamforminglimitedmassive MIMO, FR2 pencil beamsBandwidthfixed per carrierBWPs — UE sees a sliceLatency1 ms TTImini-slots, scalable slotChannel codesturbo + conv.LDPC (data) + polar (control)
Figure 1.7b. NR's physical layer is LTE rebuilt around flexibility. Where LTE fixed the numerology, bandwidth, and codes, NR makes each one scalable: choosable subcarrier spacing, UE-specific bandwidth parts, mini-slots for latency, massive-MIMO beamforming, and modern LDPC/polar codes. Every later chapter is one of these axes in detail.
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):

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.

EnvironmentRMS delay spread στMax excess delay τmaxCoherence BW Bc ≈ 1/(5στ)
Indoor office / small cell20–50 ns~100–300 ns4–10 MHz
Urban micro (street canyon)100–300 ns~1 µs0.7–2 MHz
Urban / suburban macro0.5–2 µs~2–5 µs100–400 kHz
Rural / hilly macro1–5 µsup to ~10 µs20–200 kHz
mmWave (FR2, beamformed)5–30 ns~50–100 ns5–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.

Figure 2.1 — One fast carrier drowns in its own echo; OFDM spreads the load across many slow carriers
Single wide carrier · symbol < delay spread sym N N+1 N+2 each symbol's echo bleeds into the next → ISI Time-domain equaliser • N-tap filter; taps ∝ delay spread • every output sample touches many symbols • re-converges whenever the channel moves OFDM · many narrow carriers, each slow SC 0SC 1SC 2 SC 3SC 4SC 5 each symbol is so long the echo is a tiny fraction of it Frequency-domain equaliser • one complex multiply per subcarrier • fully parallel — runs at line rate • cost independent of delay spread Same channel, opposite strategy: trade one impossible-to-equalise fast carrier for thousands of trivially-equalised slow ones.
Figure 2.1. When the symbol period is shorter than the delay spread, a single wide carrier suffers ISI that demands an expensive multi-tap time-domain equaliser. OFDM trades that one fast carrier for many slow ones; each slow carrier's symbol is far longer than the channel echo, so the channel looks flat per subcarrier and equalisation collapses to a single complex multiply. The only new cost is an FFT — exactly the operation silicon does best.
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.
Figure 2.1b — Why overlapping subcarriers don't interfere: orthogonality
Each subcarrier's peak lands exactly on every neighbour's zero frequency (in units of Δf = subcarrier spacing) → sample at any peak and only ONE subcarrier is non-zero — the others contribute exactly 0.
Figure 2.1b. Each subcarrier has a sinc-shaped spectrum. They overlap heavily — yet at the exact frequency where one subcarrier peaks, all the others pass through zero. So when the receiver's FFT samples at those peak frequencies, it reads each subcarrier cleanly, with zero leakage from its neighbours. That mutual-zero condition is precisely what "orthogonal" in OFDM means, and it holds only when the useful symbol length equals exactly 1/Δf.
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.

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.

µSCSNormal CP (typ. symbol)Long CP (sym 0 & 7·2µ)CP overhead
015 kHz4.69 µs5.21 µs~7.0 %
130 kHz2.34 µs2.60 µs~7.0 %
260 kHz1.17 µs1.30 µs~7.0 %
2 (ext)60 kHz4.17 µs4.17 µs~20 %
3120 kHz0.586 µs0.651 µs~7.0 %
4240 kHz0.293 µs0.326 µs~7.0 %
5480 kHz0.146 µs0.163 µs~7.0 %
6960 kHz0.073 µs0.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).
Figure 2.2 — Anatomy of one OFDM symbol: a copied tail buys collision-free multipath absorption
One OFDM symbol = CP + useful part. The CP catches the echo, then is thrown away. useful OFDM symbol → FFT input CP copy of tail the last NCP samples are copied to the front TCP Tu = 1/Δf total symbol Tsym = TCP + Tu design rule TCP > τmax CP > worst echo delay
Figure 2.2. The CP is a verbatim copy of the symbol's tail prepended to its start. The receiver frames its FFT on the useful part and discards the CP. The cost is NCP/N more samples per symbol — a constant ≈7 % at normal CP. The benefit is collision-free multipath absorption and the circular-convolution trick of Figure 2.2b. The governing design rule is simply TCP > τmax: the CP must outlast the channel's worst echo.
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.
Figure 2.2c — Each multipath copy is delayed; as long as the latest lands inside the CP, the FFT window stays clean
FFT window (useful part) — must be echo-free CP LOS (τ=0) echo τ₁ echo τ₂ CP ends → FFT starts τ₂ < TCPThe transients from every echo finish before the green line — so the samples the FFT reads contain only steady-state, fully-overlapped signal.
Figure 2.2c. The line-of-sight path and its echoes all carry the same symbol but arrive staggered by their path delays. The CP region (amber) absorbs the start-up transient of every path. Provided the latest echo τ₂ is shorter than the CP, the FFT window (green) contains only the steady, fully-settled superposition — which is exactly the periodic signal the DFT needs to diagonalise the channel. If any echo overruns the CP, that protection is lost and ISI/ICI return: this is the single condition behind every CP-length decision in the network.
Figure 2.2b — Why the CP works mathematically: linear convolution becomes circular
channel = linear convolutiontails bleed between symbols (ISI)+CP→ circular convolutiondiagonalised by the DFTYk = Hk·Xk1-tap EQThe CP's real job is mathematical, not just a guard gapCopying the tail makes the symbol look periodic to the channel — so the DFT turns convolution into multiplication.
Figure 2.2b. The cyclic prefix is not merely a silence-filler. By prepending a copy of the symbol's tail, the channel's linear convolution (which causes ISI) is made to look like a circular convolution over the useful symbol. Circular convolution is diagonalised by the DFT — so after the FFT the channel becomes a per-subcarrier multiply Yk = Hk·Xk, and equalisation is one complex divide. This single property is the deepest reason OFDM displaced single-carrier systems.
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 ΔfUseful TuSymbol TsymSlotNormal CPWhere it is used
015 kHz66.7 µs71.4 µs1 ms4.69 µsFR1 default; SSB Case A; large cells
130 kHz33.3 µs35.7 µs0.5 ms2.34 µsFR1 high-band data; SSB Case B/C
260 kHz16.7 µs17.9 µs0.25 ms1.17 µs (norm) / 4.17 µs (ext)FR1 & FR2 data; only µ with extended CP
3120 kHz8.33 µs8.93 µs125 µs0.586 µsFR2-1 data + SSB Case D
4240 kHz4.17 µs4.46 µs62.5 µs0.293 µsFR2-1 SSB only (Case E); not for data
5480 kHz2.08 µs2.23 µs31.25 µs0.146 µsFR2-2 (Rel-17) data + SSB
6960 kHz1.04 µs1.12 µs15.6 µs0.073 µsFR2-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.
µSCSSlots / subframe (1 ms)Slots / frame (10 ms)Symbols / second
015 kHz11014,000
130 kHz22028,000
260 kHz44056,000
3120 kHz880112,000
4240 kHz16160224,000
5480 kHz32320448,000
6960 kHz64640896,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.
Figure 2.3b — The numerology ladder: double the SCS, halve the slot — drawn to scale
Every slot is always 14 symbols — only its duration changes µ=0 · 15 kHz14 symbols = 1 msµ=1 · 30 kHz14 symbols = 0.5 msµ=2 · 60 kHz14 symbols = 0.25 msµ=3 · 120 kHz14 symbols = 125 µs Each step down doubles Δf, halves the symbol and the slot, and quadruples symbols-per-second.
Figure 2.3b. NR's scalable numerology drawn to scale. A slot is always 14 OFDM symbols; raising µ by one doubles the subcarrier spacing and halves both the symbol and the slot. Higher µ finishes a transaction faster (low latency) — but each symbol, and its cyclic prefix, is shorter, so it tolerates less delay spread and demands a smaller cell or a higher band.
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.
µΔfChannel BWNRBActive SC (12·NRB)NFFTSample rate fs
015 kHz20 MHz1061,272204830.72 MHz
015 kHz50 MHz2703,240409661.44 MHz
130 kHz100 MHz2733,2764096122.88 MHz
260 kHz100 MHz1351,6202048122.88 MHz
3120 kHz400 MHz2643,1684096491.52 MHz
5480 kHz2 GHz40961966.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.
Figure 2.4b — The OFDM transmit/receive chain: where the IFFT, CP and 1-tap equaliser sit
TRANSMITTER (gNB downlink) bits QAM map→ symbols IFFTOFDM mod add CP ⇑ RF / DAC RECEIVER (UE downlink) ⇓ RF / ADC remove CP FFTOFDM demod 1-tap EQĤ⁻¹ per SC QAM⁻¹ → bits multipath channel (linear convolution h * x) CP is added after the IFFT and stripped before the FFT — that is what makes the equaliser one complex multiply per subcarrier.
Figure 2.4b. The full OFDM pipeline. Bits are mapped to QAM symbols; an IFFT loads them onto orthogonal subcarriers in one operation; a cyclic prefix is prepended; the signal is up-converted and sent. The receiver strips the CP, runs an FFT, corrects each subcarrier with a single complex multiply (Ĥ⁻¹), and demaps back to bits. The IFFT/FFT pair is the modulator/demodulator — no per-subcarrier oscillators are ever instantiated.
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 (Ŷkk). 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.

RangeFrequencyChannel BWData SCS (µ)Defining RF character
FR1410 MHz – 7.125 GHz5–100 MHz15 / 30 / 60 kHz
(µ 0,1,2)
Stable oscillators, efficient PAs; longer multipath → modest SCS. Carries the overwhelming majority of commercial NR traffic today.
FR2-124.25 – 52.6 GHz50–400 MHz60 / 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 GHzup to 2 GHz120 / 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.
Figure 2.3 — The NR spectrum map: one PHY spec spans a ~173× frequency ratio
0.41 GHz7.125 GHz24.25 GHz52.6 GHz71 GHz FR1 — sub-7 GHzµ 0/1/2 · 15–60 kHz FR2-1 — mmWaveµ 2/3 · 60–120 kHz FR2-2 (Rel-17)µ 3/5/6 · up to 960 kHz no NR allocation(satellite / radar / fixed links) 71 GHz ÷ 0.41 GHz ≈ 173× — yet one TS 38.211 physical-layer spec, scaled only by µ, covers all of it.
Figure 2.3. Three frequency ranges. Most production traffic today sits in FR1 between 600 MHz and 4 GHz. FR2-1 is commercially deployed in dense US / Japan / Korea cities and fixed-wireless markets. FR2-2 — including the 60 GHz band — is at the trial stage as of Rel-18 while silicon and amplifiers mature. The remarkable fact is that a single PHY specification, re-parameterised only through µ, stretches across a 173× span of carrier frequencies.

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.

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.

Figure 2.6b — OFDM's sinc side-lobes, and why the gNB shapes them
channel edge (ACLR / SEM mask)leakageleakageEach subcarrier is a sinc — its tails spill into the neighbour channelGuard subcarriers + windowed-OFDM or f-OFDM smooth the roll-off to fit the out-of-band emission mask.
Figure 2.6b. OFDM subcarriers have sinc-shaped spectra whose side-lobes decay slowly, leaking power past the channel edge. NR meets the ACLR / SEM masks first with guard subcarriers (unused spectrum at the band edge) and then with transmit-side windowing or band-pass filtering (f-OFDM) to sharpen the roll-off. As always, the spec mandates the mask, not the method.
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.

Figure 2.7 — Numerology decision tree: band first, then latency, coverage, Doppler
1 · Which range? FR1 / FR2-1 / FR2-2 FR1 → µ ∈ {0,1,(2)}15 / 30 / 60 kHz FR2-1 → µ ∈ {2,3}60 / 120 kHz FR2-2 → µ ∈ {3,5,6}120 / 480 / 960 kHz 2 · Latency / coverage / Doppler • URLLC → µ=1 (0.5 ms slot) • Big rural cell → µ=0 (long CP) • High-speed (500 km/h) → µ=1 2 · Capacity vs reach • Wide BW / capacity → µ=3 • Better link budget → µ=2 • Short echo allows either 2 · Phase noise budget • 60 GHz, huge BW → µ=5/6 • Wider SCS fights phase noise • µ=3 for narrower channels 3 · SSB is chosen separately — Case A–E (15/30/120/240 kHz) + 480/960 kHz in FR2-2 (TS 38.213 §4.1) the cell-search numerology need not equal the data numerology
Figure 2.7. The numerology decision tree an RF planner actually walks. Step 1 (band) fixes the candidate µ set. Step 2 applies the binding physical constraint — latency and CP-length at FR1, capacity-versus-reach at FR2-1, phase-noise at FR2-2. Step 3 reminds you that SSB always picks from its own restricted SCS list and can differ from the data numerology in the same cell.
Practical numerology selection — the rules behind the tree
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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)
  1. Band & SCS. n78 = 3300–3800 MHz, TDD, FR1 high-band. Default data numerology µ=1 (30 kHz).
  2. 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.
  3. 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.
  4. Symbol timing. Useful symbol Tu = 1/30 kHz = 33.33 µs. Normal CP = 2.34 µs. Total symbol Tsym ≈ 35.67 µs.
  5. Slot & frame. Slot = 14 symbols = 0.5 ms → 2 slots per subframe, 20 slots per 10 ms frame.
  6. 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.
  7. 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)
  1. Band & SCS. n257 = 26.5–29.5 GHz, TDD, FR2-1 (mmWave). Data numerology µ=3 (120 kHz).
  2. Bandwidth → RBs. Channel BW = 100 MHz → 66 RBs (TS 38.101-2). Active SCs = 66 × 12 = 792.
  3. 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.
  4. Slot & frame. Slot = 14 symbols = 125 µs → 8 slots per subframe, 80 slots per frame. The scheduler runs 4× faster than on n78.
  5. 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.
  6. 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, kSSB, RBstart) 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).

Figure 3.1 — The full time-domain hierarchy at µ=1 (30 kHz)
Frame → half-frame → subframe → slot → symbol  ·  each level a fixed zoomFrame10 ms  ·  SFN 0–1023 (wraps every 10.24 s)2 half-frameshalf-frame 0 · 5 ms (n_hf=0) — SSB lives herehalf-frame 1 · 5 ms (n_hf=1)10 subframessf0sf1sf2sf3sf4sf5sf6sf7sf8sf91 ms each2 slots / sf (µ=1)slot 0 · 0.5 msslot 1 · 0.5 ms14 symbols / slot012345678910111213each symbol = CP + useful part = 35.7 µs at 30 kHz · the subframe (1 ms) is the µ-invariant anchor
Figure 3.1. A 10 ms frame contains two 5 ms half-frames and, independently, ten 1 ms subframes. At µ=1 each subframe holds 2 slots; at µ=3 it would hold 8. Every slot is 14 OFDM symbols (normal CP). The subframe is the numerology-invariant 1 ms anchor — everything finer scales underneath it, everything coarser is built on top of it.
UnitSizeCount / notes
SFN10-bit (0…1023)System Frame Number; wraps every 10.24 s. Hyper-SFN extends it for eDRX paging.
Frame10 msAbsolute time reference; 10 subframes; 2 half-frames.
Half-frame5 msnhf ∈ {0,1}; bounds the SSB burst set.
Subframe1 ms2µ slots; the µ-invariant clock.
Slot2−µ ms14 symbols (normal CP) / 12 (extended CP, µ=2 only).
OFDM symbol≈71/2µ µsCP + useful part (Chapter 2).
Mini-slot2, 4 or 7 symbolsURLLC 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.

Figure 3.2b — One resource block, zoomed: 12 subcarriers × 14 symbols = 168 REs
one slot — 14 OFDM symbols →12 subcarriers (1 RB)1 Resource Element (k, l)1 subcarrier × 1 symbolteal column = DMRSpilots — no data, enable channel est.1 RB-slot = 12 × 14 = 168 resource elements
Figure 3.2b. The grid is a 2-D mesh whose atom is the resource element — one subcarrier during one symbol. A resource block is 12 subcarriers wide; one slot is 14 symbols long; so a single RB-slot holds 168 REs. Every channel and signal in NR is, in the end, an assignment of modulation symbols (or pilots) to specific REs in this mesh. The teal column marks one DMRS position — pilots that carry no data but make the channel estimate possible.
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.

Figure 3.2 — Point A and the chain of frequency offsets
Point A is the single origin every frequency offset chains fromPoint ACRB 0 · 15 kHz ref gridabsoluteFrequencyPointAoffsetToCarrierSCS-specific carrier — CRB grid (carrierBandwidth RBs)BWP RBstart (locationAndBandwidth)active BWP (PRB 0…)k_SSB + offsetToPointAreconcile SSB raster ↔ CRB gridEvery CORESET, BWP and PDSCH RB position is ultimately "so many RBs above Point A".
Figure 3.2. Point A anchors CRB 0 on the 15 kHz reference grid. offsetToCarrier positions the SCS-specific carrier above it; the BWP starts at some RB offset inside that carrier; kSSB and offsetToPointA reconcile the SSB raster the UE found during cell search with the CRB grid it must now schedule on. Get any link in this chain wrong and every downstream RB position is wrong by the same amount.
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 typeNumbered fromWhere it appears
CRB — Common RBPoint A (carrier-wide, on the reference grid)Global index; same for every UE. Used to position carriers, BWPs and CORESETs.
PRB — Physical RBThe start of the active BWPUE-specific. nPRB = nCRB − NstartBWP. DCI resource fields live here.
VRB — Virtual RBThe DCI allocationMapped 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).

Figure 3.2d — Non-interleaved vs interleaved VRB-to-PRB mapping
VRB-to-PRB mapping — the DCI allocates VRBs; the grid uses PRBsnon-interleavedV0P0V1P1V2P2V3P3V4P4V5P5V6P6V7P7VRBPRBVRB n → PRB n (identity) — used for localized, frequency-selective schedulinginterleaved (L=2)V0V1V2V3V4V5V6V7P0P4P1P5P2P6P3P7contiguous VRB bundles are scattered across the band → frequency diversity (distributed allocation)
Figure 3.2d. Non-interleaved mapping is the identity: VRB n lands on PRB n, keeping the allocation contiguous so the scheduler can place it on a frequency-selective sweet spot. Interleaved mapping takes contiguous VRB bundles (here L=2) and spreads them across the band through a block interleaver, so a single deep fade can never wipe out the whole allocation — frequency diversity in exchange for losing selective gain.

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.

Figure 3.3 — One carrier, several BWPs, several numerologies
One carrier can host BWPs of different SCS, size and rolefull carrier · 100 MHz · 273 RBsBWP 0 · µ=0SSB+RMSI · 20 MHzinitial DL BWPBWP 1 · µ=1eMBB · 80 MHzdedicated DL BWPBWP 2 · µ=2URLLC · 40 MHzlow-latency BWPDCI 1_1's 2-bit BWP indicator switches the active BWP in a few slots.
Figure 3.3. A 100 MHz carrier hosting three BWPs, each tuned to its role: a narrow 15 kHz initial BWP for cell access, a wide 30 kHz eMBB BWP, and a 60 kHz URLLC BWP whose shorter slots cut latency. The same UE is reconfigured between them in milliseconds.

3.3.1 Initial vs Dedicated BWPs

TypeActive whenConfigured by
Initial DL BWPFrom cell access until reconfigurationSIB1 initialDownlinkBWP (tied to CORESET#0)
Initial UL BWPFrom RACH until reconfigurationSIB1 initialUplinkBWP
Dedicated DL/UL BWPAfter RRC (re)configurationRRC BWP-Downlink / BWP-Uplink
Default DL BWPFallen back to on inactivity-timer expiryRRC 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:

Figure 3.3b — Up to four BWPs configured, exactly one active; switch by DCI or timer
A narrowband UE works on a wideband cell — neither side sees the restfull carrier (100 MHz · 273 RBs)BWP 0 (active)narrow · low powerBWP 1 (wide · inactive)switchSit on a narrow BWP when idle-ish; jump to a wide BWP when a big transfer begins — saving battery and FFT cost.
Figure 3.3b. Up to four DL and four UL BWPs are configured but only one of each is active. A narrow active BWP means a smaller FFT and less RF-on time; a DCI or an inactivity-timer event hops the UE to a wider BWP when demand rises. Mis-sizing the initial BWP breaks access even though dedicated BWPs work — a subtle initial-access-only failure.

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:

FieldMeaning
dl-UL-TransmissionPeriodicityPeriod of the pattern: 0.5, 0.625, 1, 1.25, 2, 2.5, 5 or 10 ms
nrofDownlinkSlotsWhole DL slots at the start of the period
nrofDownlinkSymbolsLeading DL symbols in the following (special) slot
nrofUplinkSymbolsTrailing UL symbols in that special slot
nrofUplinkSlotsWhole 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).
Figure 3.4 — A DDDSU period assembled from the config, with the special slot expanded
tdd-UL-DL-ConfigurationCommon builds the period from D / flexible / U symbolsslotsDslot 0Dslot 1Dslot 2Sslot 3Uslot 4dl-UL-TransmissionPeriodicity = 2.5 ms (µ=1) · 3 DL + 1 special + 1 ULspecial slot → 14 symbolsDDDDDDDDDDFFFUguard period (flexible)D · downlinkF · flexible (GP / dynamic)U · uplink
Figure 3.4. A 2.5 ms (µ=1) period of 3 downlink slots, one special slot, and one uplink slot. The special slot is itself a mix: 10 DL symbols, then 3 flexible symbols that serve as the guard period, then 1 UL symbol for HARQ-ACK. The counts come straight from nrofDownlinkSlots/Symbols and nrofUplinkSlots/Symbols — "DDDSU" is just shorthand for that parameterisation.

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.

Figure 3.4b — The four-layer rule for deciding a symbol's direction
How a UE decides if a symbol is DL, UL, or flexible — four layers, in order1 · Cell-common (semi-static)tdd-UL-DL-ConfigurationCommon — SIB1sets D / U / flexible for all UEs2 · UE-dedicated (semi-static)tdd-UL-DL-ConfigurationDedicatedmay fix flexible→D or flexible→U only3 · Dynamic SFIDCI 2_0 (SFI-RNTI)overrides flexible symbols for a slot set4 · Scheduling DCI / RRCDCI 0_x / 1_x, CSI-RS, etc.uses remaining flexible symbolsRule: dynamic layers can only touch flexible symbols — they can never repurpose a semi-static D or U.
Figure 3.4b. Direction is resolved top-down: the cell-common TDD config sets the baseline for all UEs; the UE-dedicated config may harden some flexible symbols to DL or UL; a dynamic Slot Format Indicator (DCI 2_0) may set remaining flexible symbols for a group of UEs; and finally a scheduling DCI uses whatever flexible symbols are left. No dynamic layer may ever override a semi-static D or U.

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.

Figure 3.4c — The guard period must cover the round-trip — so it caps cell radius
The guard period must outlast the round-trip propagation — it sets the max cell radiusgNBUEDL reaches UE after d/cUL arrives back after another d/c (timing advance)GP ≥ 2·d / c → d_max = GP · c / 2e.g. GP = 3 symbols at 30 kHz ≈ 107 µs → d_max ≈ 16 km · (1 symbol ≈ 35.7 µs → ≈ 5.3 km)
Figure 3.4c. The downlink takes d/c to reach the cell edge; the timing-advanced uplink takes another d/c to return. The guard period must cover both (plus the UE's Rx→Tx switching time), giving dmax ≈ GP·c/2. A one-symbol GP at 30 kHz (≈35.7 µs) supports a ≈5.3 km cell; a three-symbol GP reaches ≈16 km. This is why large rural TDD cells widen the special slot's flexible region.

3.4.5 Common TDD Patterns

PatternPeriod (µ=1)DL shareTypical use
DDDDU2.5 ms80 %DL-heavy FR1 macro; simple, few UL opportunities
DDDSU2.5 ms~71 %The commercial workhorse; the S slot adds a UL HARQ chance and a guard period
DDDDDDDSUU5 ms~70 %eMBB-heavy with two UL slots per period for ACK + SR
FR2 DDDDDDDDSUU(120 kHz)variesFiner 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 lengthDuration at µ=1Typical use
2 symbols≈71 µsUltra-low-latency URLLC control/small data
4 symbols≈143 µsModerate URLLC payloads
7 symbols≈250 µsLarger 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.
Figure 3.5b — Mini-slots: same numerology, shorter duration, arbitrary start
Cut both the start delay and the duration → faster turnaroundfull slot14 symmini-slot7 symmini-slot4 symmini-slot2 symtime within one slot →
Figure 3.5b. A mini-slot occupies 2, 4 or 7 symbols instead of the full 14, and may begin on almost any symbol rather than waiting for the slot edge. A 2-symbol mini-slot at 30 kHz transmits in ≈70 µs instead of ≈500 µs — the core mechanism behind URLLC's sub-millisecond budget.
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.

Figure 3.6 — Type 0 (RBG bitmap) vs Type 1 (RIV) frequency allocation
Frequency-domain resource allocation: Type 0 (RBG bitmap) vs Type 1 (RIV)Type 0RBG bitmapRBG01RBG10RBG21RBG31RBG40RBG50RBG61RBG70one bit per RBG (RBG size P = 2/4/8/16 by BWP size) — allows non-contiguous allocationType 1RIV (start,len)RB_start = 2 · L = 4RIV = N·(L−1)+start (if L−1 ≤ N/2)one compact field encodes a contiguous blockcontiguous only — cheaper DCI
Figure 3.6. Type 0 assigns one bit per RBG, allowing a scattered, non-contiguous allocation at the price of a longer bitmap. Type 1 describes a single contiguous run of RBs with a start and a length, packed into one RIV field — compact, but it cannot skip a busy sub-band. The DCI's "resource allocation type" flag (or RRC config) selects between them.

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.

Figure 3.7 — A port is a DMRS pattern, not a physical antenna
transmitter (hidden)4 physical antennas + precodinginternal mapnever signalledport 1000DMRS pattern Aport 1001DMRS pattern Breceiverestimates 1 channel per portThe UE only ever sees "the channel for port 1000", measured from that port's DMRS. The physics behind it is the transmitter's secret.
Figure 3.7. A port is defined purely by its DMRS. The receiver equalises per port without ever knowing the array geometry, so the same UE works behind a 2-element or a 64-element array with no spec change. "More layers" simply means "more orthogonal DMRS ports".
Port rangeSignalDirection
0–11PUSCH DMRSUL
1000–1011PDSCH DMRSDL
1000–1003SRSUL
2000PDCCH DMRSDL
3000–3031CSI-RSDL
4000SS/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.

OffsetFrom → ToCarried in / by
K0PDCCH (DL grant) → PDSCHPDSCH-TimeDomainResourceAllocation (DCI 1_x)
K1PDSCH → HARQ-ACK on PUCCHPDSCH-to-HARQ feedback timing (dl-DataToUL-ACK)
K2PUSCH grant (DCI 0_x) → PUSCHPUSCH-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.
Figure 3.8 — K0, K1 and K2 stitch the DL and UL transactions together
Slot-timing relationships: K0 (DL grant→data), K1 (data→ACK), K2 (UL grant→data)n+0n+1n+2n+3n+4n+5n+6n+7n+8n+9DCIPDSCHACKPUSCHK0=2K1=3K0: PDCCH(DCI 1_x) → PDSCH · K1: PDSCH → HARQ-ACK on PUCCH (dl-DataToUL-ACK)n+0n+1n+2n+3n+4n+5n+6n+7n+8n+9UL grantPUSCHK2=3 · DCI 0_x → PUSCH
Figure 3.8. Top: a DL grant in slot n schedules PDSCH K0 slots later, and the UE returns HARQ-ACK on PUCCH K1 slots after the PDSCH. Bottom: an UL grant schedules PUSCH K2 slots later. Because the offsets are in slots, the same numeric value means very different wall-clock latency at different numerologies — which is precisely how a higher µ shrinks the round trip for URLLC.
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
  1. Locate the slot. SFN = 27. At µ=1 there are 2 slots/subframe, so slot 13 = subframe 6, second slot (13 = 6·2 + 1).
  2. 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.
  3. 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).
  4. 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.
  5. 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.
  6. Check the guard. The 3 flexible symbols (≈107 µs) give dmax ≈ 16 km — comfortable for an n78 macro cell.

3.10 Field-Engineering Notes

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 (Qm, 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

ModulationQmPointsSE (bits/sym)Norm. factorEVM req. (TS 38.101-1)Used in
π/2-BPSK121.01/√230 % (≈ −10.5 dB)DFT-s-OFDM PUSCH/PUCCH coverage
QPSK242.01/√217.5 % (≈ −15.1 dB)PBCH, PDCCH, PUCCH, low-MCS data
16-QAM4164.01/√1012.5 % (≈ −18.1 dB)Mid-MCS data
64-QAM6646.01/√428 % (≈ −21.9 dB)High-MCS data (default ceiling)
256-QAM82568.01/√1703.5 % (≈ −29.1 dB)qam256 table
1024-QAM10102410.01/√6822.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.
Figure 4.1 — Four constellations to scale: QPSK, 16-QAM, 64-QAM, 256-QAM
Each step doubles bits/symbol and halves the spacing between pointsQPSK · 4 pts16-QAM · 16 pts64-QAM · 64 pts256-QAM · 256 ptsDoubling Q_m halves the minimum Euclidean distance → ~6 dB more SNR needed for the same error rate.
Figure 4.1. Each step from QPSK to 256-QAM doubles the bits per symbol but halves the minimum distance between adjacent points. 1024-QAM (32×32) takes it further still and is only practical with EVM tighter than 2.5 % at the transmitter.
Figure 4.1b — The link-budget staircase: +2 bits/symbol costs ≈6 dB of SNR
bits / symbolrequired SNR at ≈10% BLER (indicative) →π/2-BPSK-2 dBQPSK0 dB16-QAM7 dB64-QAM13 dB256-QAM19 dB1024-QAM25 dB
Figure 4.1b. Every jump to the next constellation doubles bits-per-symbol but roughly halves the spacing between points, so it needs about 6 dB more SNR to hold the same error rate. This single curve is why high-order modulation only appears near the cell centre, and it is the physical basis of link adaptation (Chapter 16).
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.

Figure 4.3 — Gray mapping: neighbours differ by one bit
16-QAM Gray labelling — adjacent points differ in exactly one bit0000010011001000000101011101100100110111111110110010011011101010the two red neighbours: 0100 ↔ 1100 — only the 1st bit flips
Figure 4.3. 16-QAM with Gray labels (I-bits then Q-bits). Move to any nearest neighbour and exactly one of the four bits flips. Because near-threshold errors are almost always nearest-neighbour confusions, this halves or thirds the bit-error rate compared with a naive binary labelling — and it makes per-bit soft LLRs (§4.6) almost separable on the I and Q axes.
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.
Figure 4.4 — Scrambling: same data, different cell, uncorrelated bits
Coded bits are XOR-ed with a UE/cell-specific Gold sequence before modulationdata bits b(i)Gold c(i) · c_init = f(n_RNTI, q, N_ID)scrambled → modulateCell A seed ≠ Cell B seedsame data → uncorrelated bitsinter-cell interference whitened
Figure 4.4. The coded bits are XOR-ed with a UE/cell-specific Gold sequence before the modulation mapper. Two cells transmitting similar data on overlapping REs therefore produce uncorrelated bit streams, so their mutual interference is whitened — it appears to the decoder as noise rather than as decodable, structured signal.
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.

Figure 4.5 — π/2-BPSK keeps the trajectory off the origin → lower PAPR
plain BPSKtransition crosses the origin → envelope dips to 0 → PA backs offπ/2-BPSKevery other symbol rotated 90° → path skirts the circle, never 0 → ~3 dB lower PAPR
Figure 4.5. Plain BPSK's +1↔−1 transition crosses the origin, a momentary envelope zero that forces PA back-off. π/2-BPSK rotates alternate symbols by 90°, so the path skirts the circle and never collapses — dropping PAPR by ≈3 dB and giving the cell edge ≈3 dB more usable power.

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.

Figure 4.6 — The I/Q distance to the decision boundary becomes the LLR
Soft demodulation: the I/Q distance becomes a log-likelihood ratio (LLR)decision boundary (LLR = 0)bit = 0bit = 1received Idistance → |LLR|LLR(b) = ln[ P(b=0 | y) / P(b=1 | y) ] ≈ (2/σ²)·y for Gray-mapped QPSK
Figure 4.6. For one bit, the demodulator measures how far the received sample sits from the decision boundary. The sign of that distance is the hard decision; its magnitude (scaled by the noise variance) is the LLR magnitude the decoder uses to weight this bit. Gray mapping is what makes these per-bit LLRs nearly separable on the I and Q axes.
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.

Figure 4.7 — EVM is the normalised length of the error vector
EVM = length of the error vector, normalised to the reference powerideal pointmeasurederror vectorEVM (%) =√(Σ|err|² / Σ|ref|²)× 100, over theallocated RBs, after EQ(EVM window for CP)
Figure 4.7. For each symbol, the error vector runs from the ideal constellation point to the measured one; EVM is the RMS error length over all allocated REs, normalised to the reference power and expressed as a percentage. The measurement is taken after equalisation, within a defined EVM window that handles the cyclic prefix (TS 38.101-1 Annex F).
ModulationUE Tx EVM (TS 38.101-1)≈ dBImplication
π/2-BPSK30 %−10.5 dBBuilt for coverage — very tolerant
QPSK17.5 %−15.1 dBRobust; control channels
16-QAM12.5 %−18.1 dBMid-rate data
64-QAM8 %−21.9 dBHigh-rate data
256-QAM3.5 %−29.1 dBNeeds a clean, well-calibrated PA
1024-QAM2.5 %−32 dBFR1 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 / signalModulationNotes
PBCHQPSKFixed — must decode at cell edge
PDCCHQPSKFixed — control must be robust
PDSCHQPSK … 1024-QAMPer MCS table; 1024-QAM FR1/Rel-17
PUSCHπ/2-BPSK / QPSK … 256-QAMπ/2-BPSK only with transform precoding
PUCCH F0/F1sequence selection / BPSK / QPSK1–2 UCI bits
PUCCH F2/F3/F4QPSK (π/2-BPSK option F3/F4)Larger UCI payloads
PSS / SSSBPSK-based sequencesm-/Gold sequences, not data QAM
PRACHZadoff-ChuConstant-amplitude, not a QAM constellation
DMRS / CSI-RS / PT-RSQPSK-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.

Figure 4.9 — The four MCS tables: the same 5-bit index means different things
The RRC-configured table decides what a given 5-bit MCS index meansTable 1≤ 64-QAMdefaultTable 2≤ 256-QAMqam256Table 3≤ 64-QAM · low-SEURLLCTable 4≤ 1024-QAMRel-17 FR1Same DCI MCS field; CQI table must match. A table mismatch fails every TB and looks like coverage loss.
Figure 4.9. The 5-bit MCS field indexes one of four tables. Table 1 tops out at 64-QAM, Table 2 at 256-QAM, Table 3 is a low-spectral-efficiency table for URLLC, and Table 4 (Rel-17) reaches 1024-QAM. The same index maps to a different (Qm, R) depending on the configured table — and the CQI table must match it.
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
  1. 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).
  2. Normalise. The 1/√10 factor puts the outermost points at ±3/√10 ≈ ±0.95, so average power = 1.
  3. Spectral efficiency. Take MCS with Qm=6 (64-QAM) and R=0.85 → SE = 6×0.85 = 5.1 bits/symbol/RE.
  4. Per-RB rate. 156 data REs/RB-slot × 5.1 ≈ 796 information bits per RB per slot (before TBS quantisation, Chapter 8 / Appendix B).
  5. 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.

CodeWhereBlock lengthWhy this code
LDPCPDSCH, PUSCH (data)up to 8448 info bits/CBNear-Shannon at high rate; parallel decode; IR-HARQ by reading more parity
PolarPBCH, PDCCH, UCI > 11 bits~12–1706 info bitsNo error floor at short blocks; clean rate matching; CRC-aided list decode
Reed–MullerUCI 3–11 bits3–11 bitsLowest decode cost in that range
Simplex / repetitionUCI 1–2 bits1–2 bitsTrivial 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).

Figure 5.0 — The transport-block processing chain, end to end
The transport-block processing chain (TS 38.212 §7.2) — bits in, REs outTB + CRC24A/16-bitsegment+ 24B CB-CRCLDPC encodeper code blockrate matchRV + interleaveconcatenatecode blocksscramble→modCh.4CRC first (so the receiver can verify), segment to fit the base graph, code each block, then shape to the granted size.
Figure 5.0. Every data TB follows this pipeline. CRC comes first so the receiver can verify the whole block; segmentation slices it to fit the base graph; each code block is coded and rate-matched independently; concatenation re-assembles the coded bits to exactly the granted size before they are scrambled and mapped to QAM. Polar-coded control follows an analogous but separate chain (§5.5).

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.

Figure 5.1 — LDPC is a sparse web of parity checks (Tanner graph)
LDPC = a sparse web of parity checks (Tanner graph)v0v1v2v3v4v5+++bitschecks"Low-density" = each bit touches only a few checks → cheap, massively parallel, near-Shannon at high rate.
Figure 5.1. An LDPC code is the bipartite graph of which codeword bits (circles) feed which parity checks (squares). Because the matrix is sparse, each bit touches only a few checks. The decoder is iterative belief propagation: bits send their current likelihoods to their checks, checks send back corrections, and after a few rounds the estimates converge on a valid codeword.
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).
Figure 5.1b — Base-graph selection decision tree
Base-graph selection is three deterministic checks on (A, R)inputs: A, RA ≤ 292 ?R ≤ 0.25 ?A ≤ 3824 and R ≤ 0.67 ?BG2K_cb=3840 · R=1/5BG1K_cb=8448 · R=1/3yes→BG2no→BG1
Figure 5.1b. Three deterministic checks pick the base graph: small messages → BG2; low code rate → BG2; medium messages at moderate rate → BG2; everything else → BG1. BG1 is the high-rate workhorse; BG2 covers small or low-rate blocks where its lower mother rate gives more protection.
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.

Figure 5.1c — The first 2·Z_c systematic bits are punctured, not transmitted
Mother code rate: the first 2·Z_c systematic columns are always puncturediiiiiiiipppppppppppunctured (not sent)transmitted infoparityBG1: rate 1/3 (22 info cols)K_cb = 8448BG2: rate 1/5 (10 info cols)K_cb = 3840
Figure 5.1c. The mother codeword is systematic info columns followed by parity. NR never sends the first two systematic columns (grey) — they are punctured and recovered at the receiver from the parity. BG1 has 22 info columns (mother rate 1/3); BG2 has 10 (mother rate 1/5). Rate matching (§5.4) then shapes this mother codeword up or down to exactly the granted number of bits.

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.

Figure 5.1d — Big transport block → code blocks, each its own CRC + LDPC
A large TB is segmented; each code block is coded — and ACK-able — on its ownTransport Block (up to ~1.2 Mbit)TB-CRCsplit if > K_cbCB024BLDPC encodeCB124BLDPC encodeCB224BLDPC encodePer-CB CRCs enable code-block-group (CBG) HARQ — NACK only the broken blocks (Chapter 8).
Figure 5.1d. A transport block gets a TB-CRC (24 bits if A>3824, else 16). If larger than Kcb it is sliced into equal code blocks, each with its own 24-bit CB-CRC, each LDPC-encoded separately — so the receiver can check, and the HARQ can retransmit, individual code blocks.

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.

Figure 5.2 — The circular buffer and the four redundancy versions
The circular buffer and the four redundancy versionsRV0RV2RV3RV1circularbuffersystematic (info bits)parity (LDPC redundancy)Each (re)transmission reads E bits from adifferent RV offset → a fresh slice of parity.practical order: RV0 → RV2 → RV3 → RV1receiver soft-combines slices = IR-HARQ
Figure 5.2. After encoding, systematic and parity bits fill a circular buffer. A transmission reads E bits from an RV offset; RV0 is self-decodable, later RVs add fresh parity that the receiver soft-combines. Because the buffer is circular, high-RV reads wrap around and still form a valid lower-rate code — the essence of IR-HARQ.

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.

Figure 5.2b — Rate matching: select E bits, then interleave into Q_m rows
Rate matching = select E bits, then interleave into Q_m rows1 · select E bitsE bits read from RV offset (skip fillers)2 · interleave (Q_m=4 rows)read out by columns →Column read-out spreads consecutive coded bits across the Q_m bits of each QAM symbol → burst resilience.
Figure 5.2b. Rate matching first selects E coded bits from the chosen RV offset (skipping filler bits), then interleaves them through a Qm-row block interleaver. Column-wise read-out scatters consecutive coded bits across the bits of successive QAM symbols, spreading the damage of any one bad symbol — a small but real robustness win, especially at high modulation orders.

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.
Figure 5.3 — Channel polarization: info on the good channels, freeze the bad
Channel polarization: info on the good channels, freeze the bad onesK info bitsfrozen = 0synthetic channels, sorted by reliability → (a universal length-1024 sequence ranks them once)
Figure 5.3. The recursive transform splits N channels into near-perfect (capacity ≈ 1) and near-useless (≈ 0). Information rides the K most reliable synthetic channels; the rest are frozen to 0. As N grows the split sharpens — how polar reaches capacity. A single universal length-1024 sequence ranks the channels once, so building any (N, K) code is just "take the top K".

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

Figure 5.3b — The three polar rate-matching modes
Polar rate matching: three modes set by E vs N (after sub-block interleaving)repetitionE ≥ Nre-send coded bits to fill EpuncturingE < N, low ratedrop coded bits the decoder treats as erasedshorteningE < N, high ratedrop known-0 bits at the endA 32-way sub-block interleaver runs first; then the E vs N comparison picks the mode (TS 38.212 §5.4.1).
Figure 5.3b. When E ≥ N, coded bits are repeated to fill E. When E < N at low rate, bits are punctured (dropped and treated as erased by the decoder). When E < N at high rate, bits are shortened (known-zero bits at the end are dropped, so the decoder treats them as perfectly known). A 32-way sub-block interleaver runs first so the dropped bits are spread evenly.

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.

Figure 5.3c — SCL keeps the L most-likely paths; the CRC picks the winner
SCL decoding keeps the L most-likely paths; the CRC picks the winnergreen = surviving paths (list size L) · grey = pruned · frozen bits force known turns; CA-CRC selects the survivor.
Figure 5.3c. SCL treats each information bit as a branch in a binary tree. Rather than committing to one path (plain SC), it keeps the L most-likely partial paths alive and prunes the rest; frozen bits force known turns, and at the end the CRC-aided rule selects the one survivor that checks out (CA-polar).
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

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.

WhereCRCGenerator polynomial g(D)
TB, A > 382424AD²⁴+D²³+D¹⁸+D¹⁷+D¹⁴+D¹¹+D¹⁰+D⁷+D⁶+D⁵+D⁴+D³+D+1
TB, A ≤ 382416D¹⁶+D¹²+D⁵+1
Per code block24BD²⁴+D²³+D⁶+D⁵+D+1
DCI / PBCH24CD²⁴+D²³+D²¹+D²⁰+D¹⁷+D¹⁵+D¹³+D¹²+D⁸+D⁴+D²+D+1
UCI 12–19 bits6D⁶+D⁵+1
UCI ≥ 20 bits11D¹¹+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.
Figure 5.4 — The CRC zoo: every channel gets the right-sized checksum
Bigger payloads earn longer CRCs; control CRCs do double dutyTB · A>382424AgCRC24ATB · A≤382416gCRC16per code block24BgCRC24BDCI24CRNTI-maskedPBCH24CgCRC24CUCI 12+11 / 6gCRC11 / 6DCI/PBCH 24C is RNTI-masked → the CRC also confirms "this grant is for YOU".
Figure 5.4. Larger payloads earn longer CRCs; control CRCs do double duty. DCI and PBCH use 24C, whose tail is XOR-masked with the RNTI — so a UE that descrambles with the wrong RNTI gets a CRC failure, making addressing and error-detection a single operation.
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
  1. CRC. A > 3824 → attach 24A → B = 16,024 bits.
  2. Base graph. A > 3824 and R = 0.7 > 0.67 → BG1 (Kcb = 8448, mother rate 1/3).
  3. Segment. B = 16,024 > 8448 → C = 2 code blocks; each gets a 24B CB-CRC → ~8,036 bits/CB.
  4. 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.
  5. Rate match. Granted G bits split across the 2 CBs → E per CB. Read E bits from RV0, skip fillers, interleave over Qm rows.
  6. 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 Lmax; 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 SSref and kSSB; 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:

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.
Figure 6.1 — From "Power On" to "Ready" in 30 milliseconds
0 · UE Wakes scans sync raster fSS candidate list 1 · PSS coarse timing NID(2) ∈ {0,1,2} 3 hypotheses 2 · SSS NID(1) ∈ [0,335] PCI resolved 1 of 1,008 3 · PBCH-DMRS channel estimate 3 bits of iSSB free 4 · PBCH (MIB) SFN, SCS, CORESET#0 half-frame, SSB-idx polar K=40 5 · CORESET#0 → SIB1 DCI Format 1_0 SI-RNTI scrambled cell config t ≈ 0 ms 0 – 20 ms ~21 ms ~22 ms ~23 ms ~30 ms PCI = 3·NID(1) + NID(2) ∈ [0, 1007] Six discrete decode stages, each gated by the previous one
Figure 6.1. The UE starts blind on a sync-raster candidate, locks symbol timing on PSS (1 of 3 m-sequences), resolves PCI on SSS (1 of 336 Gold sequences within the PSS group), uses PBCH-DMRS to estimate the channel (and lift 3 iSSB bits from the sequence selection itself), decodes the polar-coded MIB to learn where CORESET#0 lives, and finally finds DCI Format 1_0 there to schedule SIB1 on PDSCH. Total wall-clock budget: ~30 ms in benign FR1 conditions.
Figure 6.1b — The SSB is deliberately tiny: it must be found blind, at the cell edge
SSB20 RBs × 4 symPSS+SSS+PBCH• found with NO prior info → must be small & fixed• decoded at cell edge → robust QPSK, heavy coding• sent on every beam → overhead must stay lowSmallness is a feature, not a limitationA UE with zero knowledge of the cell must still detect it — so the SSB is compact, fixed, and rugged.
Figure 6.1b. The SS/PBCH block is intentionally minimal — 20 RBs over 4 symbols. It has to be detectable by a UE that knows nothing about the cell, decodable at the very edge of coverage, and cheap enough to repeat on every sweep beam. Those three constraints force it to be small, fixed-format, and ruggedly coded (QPSK, low rate).
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 – 55k = 56 – 182k = 183 – 239Notes
l0 + 0ReservedPSS (127 SC)ReservedReserved REs set to zero, not modulated
l0 + 1PBCH + PBCH-DMRS across all 240 SCsDMRS every 4th SC, offset ν
l0 + 2PBCH + DMRSSSS (127 SC)PBCH + DMRSSSS centred, PBCH on the edges
l0 + 3PBCH + PBCH-DMRS across all 240 SCsSymmetric 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.
Figure 6.2 — SSB RE map (one block, one beam)
Time (OFDM symbols) ⟶ Frequency · 240 SC ⟶ l₀ + 0 l₀ + 1 l₀ + 2 l₀ + 3 k=239 k=183 k=127 k=56 k=0 reserved PSS 127 SC, sym 0 m-sequence NID(2) ∈ {0,1,2} reserved PBCH + DMRS · 240 SC DMRS k = 4n + ν PBCH (top) SSS 127 SC, sym 2 Gold sequence NID(1) ∈ [0,335] PBCH (bottom) PBCH + DMRS · 240 SC REs: PSS 127 SSS 127 PBCH 432 DMRS 144 Σ = 830 (+130 rsvd)
Figure 6.2. The 4×240 SSB RE map. PSS/SSS sit on the central 127 SCs of symbols l0 and l0+2 respectively; PBCH and PBCH-DMRS share symbols l0+1 and l0+3, plus the top/bottom 57/56 SCs of l0+2. PBCH-DMRS occupies every fourth subcarrier (k = 4n + ν), giving 60 pilot REs per shared symbol — 144 in total.

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.
Figure 6.3 — PSS generator: 7-stage LFSR with taps at x⁴ + x⁰, three cyclic shifts
LFSR: x(i+7) = (x(i+4) ⊕ x(i)) mod 2 x(6)=1 x(5)=1 x(4)=1 x(3)=0 x(2)=1 x(1)=1 x(0)=0 feedback x(i), i = 0..126 N_ID^(2) = 0 d(n) = 1 − 2·x(n mod 127) shift = 0 N_ID^(2) = 1 d(n) = 1 − 2·x((n+43) mod 127) shift = 43 N_ID^(2) = 2 · shift = 86 · d(n) = 1 − 2·x((n+86) mod 127)
Figure 6.3. The PSS shift register. Seven stages, taps at x⁴ and x⁰, XOR feedback into x(6). After 127 clocks the register cycles back to its initial state — that is what makes it an m-sequence of length 2⁷−1 = 127. The three PSS variants are not three different LFSRs; they are three different starting offsets into the same 127-sample output stream. Shifts {0, 43, 86} are maximally equidistant on a length-127 ring, which keeps inter-sequence cross-correlation near the Welch bound (~1/√127).
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.
Figure 6.4 — SSS Gold sequence: two LFSRs, two shifts, one product
x₀ (taps x⁴, x⁰) x₀(6) x₀(5) x₀(4) x₀(3) x₀(2) x₀(1) x₀(0) shift m₀ 1−2x₀(·) x₁ (taps x¹, x⁰) x₁(6) x₁(5) x₁(4) x₁(3) x₁(2) x₁(1) x₁(0) shift m₁ 1−2x₁(·) × d_SSS(n) n = 0..126 Shifts (derived from cell ID): m₀ = 15·⌊N_ID^(1) / 112⌋ + 5·N_ID^(2) m₁ = N_ID^(1) mod 112
Figure 6.4. The SSS Gold-sequence generator. Two independent length-127 m-sequence registers, x₀ (taps x⁴+x⁰, init x(0)=1, i.e. 0x01) and x₁ (taps x¹+x⁰, init x(0)=1, i.e. 0x01), each cyclically shifted by m₀ / m₁ derived from the cell ID, then BPSK-mapped (1−2x), then element-wise multiplied. The product of two distinct m-sequences with co-prime period structure gives a Gold sequence; the shift pair (m₀, m₁) encodes both NID(1) and NID(2), so SSS carries the complete cell identity even though PSS already revealed NID(2) earlier.

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
Figure 6.5 — PCI identity tree: 3 PSS × 336 SSS = 1,008 cells
PCI is a two-level hierarchy: PSS picks the group, SSS picks within it. PSS Group 0 N_ID^(2) = 0 · shift 0 PCI ∈ {0, 3, 6, …, 1005} PSS Group 1 N_ID^(2) = 1 · shift 43 PCI ∈ {1, 4, 7, …, 1006} PSS Group 2 N_ID^(2) = 2 · shift 86 PCI ∈ {2, 5, 8, …, 1007} 336 SSS sequences N_ID^(1) = 0 … 335 m₁ = N_ID^(1) mod 112 m₀ depends on N_ID^(2) 336 SSS sequences N_ID^(1) = 0 … 335 m₀ ∈ {5, 20, 35, …} 336 SSS sequences N_ID^(1) = 0 … 335 3 · 336 = 1008 PCI = 3·N_ID^(1) + N_ID^(2) 1,008 unique cell identities · range [0, 1007]
Figure 6.5. Cell identity is a two-level hierarchy. PSS narrows to one of 3 groups of 336 cells; SSS picks one cell within that group. Operator PCI planning works in this same hierarchy: mod 3 separates PSS sequences (avoids PSS collisions in neighbouring sectors), mod 4 separates PBCH-DMRS combs (Sec. 6.2.5), mod 30 is the PUCCH F1 cyclic-shift constraint inherited from LTE practice.
PCI Calculator live · TS 38.211 §7.4.2.1
PCI = 451
PCI mod 3 = 1 PCI mod 30 = 1 DMRS ν = PCI mod 4 = 3
SSS group (m0) = 20, m1 = 38
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:

FieldWidthMeaning
systemFrameNumber6 (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.
subCarrierSpacingCommon1SCS for SIB1/Msg.2/Msg.4: 0 → 15 kHz (FR1) or 60 kHz (FR2); 1 → 30/120 kHz.
ssb-SubcarrierOffset4 (LSBs)kSSB bits [3:0]. MSB kSSB[4] is in the PBCH payload extension. Range 0–23 (FR1) / 0–11 (FR2).
dmrs-TypeA-Position1PDSCH/PUSCH DMRS Type A symbol position: 2 or 3.
pdcch-ConfigSIB18★ controlResourceSetZero (4 b) + searchSpaceZero (4 b). Single most consequential field.
cellBarred1If 1, UE may not access this cell.
intraFreqReselection1Allow reselection to other intra-freq cells when the current is barred.
spare1Reserved; 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 Q0N−1 of TS 38.212 §5.3.1.2 Table 5.3.1.2-1. CRC-24C is gCRC24C(D) = D24+D23+D21+D20+D17+D15+D13+D12+D8+D4+D2+D+1.
Figure 6.6 — PBCH encoding pipeline: 32 payload bits to 432 QPSK symbols
8 discrete stages · per TS 38.212 §7.1.1 to §7.1.5 Ā = 32 bits MIB+PHY payload CRC-24C → K = 56 bits poly attach Interleave Table 7.1.1-1 SFN-aware Polar enc N=512, K=56 Q₀ⁿ⁻¹ seq Sub-block 32 cols interleave Rate match → E=864 circular buf Scramble Gold seq c_init(PCI) QPSK → 432 sym → PBCH REs 32 56 56 512 512 864 864 432 sym bit count after stage PBCH-scrambling c_init = N_ID^cell · (offset depends on SFN bit a₂, a₁ — see TS 38.211 §7.3.3.1 — distinct from PBCH-DMRS c_init)
Figure 6.6. Eight stages, from the 32-bit BCH transport block (A = 32) to 432 QPSK symbols on the air. Two distinct scrambling sequences live in the SSB: PBCH uses a Gold sequence seeded only by the PCI (TS 38.211 §7.3.3.1), while PBCH-DMRS uses a Gold sequence seeded by PCI, SSB index, and half-frame (Sec. 6.2.5). The N = 512 polar codeword is rate-matched down to 864 bits — coding rate ≈ K/E = 56/864 ≈ 0.065, deep enough that PBCH survives well below 0 dB SNR.
In plain English. The cell takes 32 little bits (the most important 32 bits in 5G), wraps them in a 24-bit checksum so the phone can detect errors, then dresses the result in a heavy coat of redundancy — 864 coded bits, more than fifteen times the original payload — so that even when the radio link is weak, the phone almost always gets the message right. Two scramblers are layered on so that two neighbouring cells transmitting on the same frequency don't look identical; even if their bits accidentally line up, the descrambling step splits them apart again.

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 bitLmax = 4Lmax = 8Lmax = 64
0SFN bit [3]SFN bit [3]SFN bit [3]
1SFN bit [2]SFN bit [2]SFN bit [2]
2SFN bit [1]SFN bit [1]SFN bit [1]
3SFN bit [0]SFN bit [0]SFN bit [0]
4nhf (half-frame)nhfnhf
5kSSB MSB ([4])kSSB MSB ([4])SSB index bit [5]
6reservedreservedSSB index bit [4]
7reservedreservedSSB 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 ā67 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 ā67.)
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.

Figure 6.7 — DMRS comb position depends on ν = PCI mod 4
Four possible combs, one per PCI mod 4 — neighbouring cells stagger their pilots. k = 0 k = 31 ν = 0 PCI mod 4 = 0 ν = 1 PCI mod 4 = 1 ν = 2 PCI mod 4 = 2 ν = 3 PCI mod 4 = 3
Figure 6.7. DMRS positions are k = 4n + ν over 32 visible subcarriers per row. Solid cells are pilot REs (every 4th SC); empty cells are PBCH data. Four ν values, four orthogonal-in-frequency combs. A pair of co-located cells with PCI mod 4 = 0 and PCI mod 4 = 1 do not collide on DMRS, only on data — which is exactly the property an interference-aware planner exploits.
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.
PBCH-DMRS cinit Calculator 31-bit · TS 38.211 §7.4.1.4.1
īSSB = 3   SSB+1) = 4   ⌊PCI/4⌋ = 112   PCI mod 4 (= ν) = 3
cinit = 925955  · hex = 0xE21C3
cinit = 211·4·113 + 26·4 + 3 = 925696 + 256 + 3 = 925955

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 rangeCarrier frequencyLmaxSSB SCS options
FR1 lowf ≤ 3 GHz415, 30 kHz
FR1 high3 GHz < f ≤ 7.125 GHz815, 30 kHz
FR2-124.25 – 52.6 GHz64120, 240 kHz
FR2-2 (Rel-17+)52.6 – 71.0 GHz64120, 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

CaseSCSFR / bandFirst symbols of each SSBLmax
A15 kHzFR1{2, 8} + 14·n; n = 0,1 (≤3 GHz) or 0..3 (>3 GHz)4 / 8
B30 kHzFR1 paired/SUL{4, 8, 16, 20} + 28·n; n = 0 or 14 / 8
C30 kHzFR1 unpaired{2, 8} + 14·n; n = 0..1 or 0..34 / 8
D120 kHzFR2-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
E240 kHzFR2-1{8, 12, 16, 20, 32, 36, 40, 44} + 56·n; n ∈ {0,1,2,3, 5,6,7,8}64
F480 kHzFR2-2{2, 9} + 14·n compressed pattern64
G960 kHzFR2-2{2, 9} + 14·n further compressed64
Table 6.4 — SSB candidate positions per TS 38.213 §4.1.1 – §4.1.5.
Figure 6.8 — Burst-set symbol layout for Cases A, B, C, D, E (first 5 ms half-frame)
Each colored block is one SSB (4 symbols). White = available, grey = not used. Case A 15 kHz · L=4 0 14 28 42 56 70 0 1 2 3 Case C 30 kHz · L=8 0 14 28 42 56 01 23 45 67 Case D 120 kHz · L=64 Case E 240 kHz · L=64 SSB (even index) SSB (odd index) non-SSB symbol (available for PDCCH/PDSCH) Time axis is symbols; one whole row = 5 ms (one half-frame).
Figure 6.8. The burst is dense at low Lmax and very dense at Lmax=64. Case D's 64 SSBs at 120 kHz occupy almost every "spare" symbol in a 5 ms half-frame — when the gNB is actively sweeping, very little symbol space remains for downlink data inside that half-frame. After the sweep, however, the gNB has 15 ms of clear time before the next sweep starts (at default 20 ms period). The trade-off: ~25 % overhead during sweep slots in exchange for 64 beam-formed acquisition opportunities per cell.

6.3.3 Beam-sweep timing and SSB index conveyance

LmaxBits of iSSBCarried by
422 bits via PBCH-DMRS sequence selection (4 candidate DMRS), plus nhf folded into īSSB.
83All 3 bits via PBCH-DMRS sequence selection (8 candidate DMRS); nhf in PBCH payload extension.
6463 LSBs via PBCH-DMRS sequence, 3 MSBs via PBCH payload extension bits a̅5..7.
Table 6.5 — Conveyance of SSB index.
Figure 6.9 — Beam sweep in physical space and in time
Spatial view (Lmax=8) gNB SSB 0 RSRP −82 SSB 1 RSRP −85 SSB 2 RSRP −78 SSB 3 RSRP −90 SSB 4 RSRP −66 ★ SSB 5 RSRP −81 SSB 6 RSRP −88 SSB 7 RSRP −95 UE camps on strongest beam (here SSB 4) Time view · 5 ms half-frame 0 5 ms 01 23 45 67 repeats every 20 ms (TSSB,default) iSSB=4 ⇄ time slot After the 5 ms burst, the gNB is free for 15 ms — PDCCH/PDSCH/RACH all happen in this window. Sweep cost ≈ 25 % of 5 ms = 1.25 ms per period (~6 % of 20 ms).
Figure 6.9. The gNB radiates each SSB on a distinct beam direction; the UE selects the strongest. iSSB is both a temporal label (which symbol slot inside the 5 ms burst) and a spatial label (which beam). All downstream beam-management procedures (TCI states, beam failure recovery, PRACH RO mapping) hang off iSSB.
SSB Burst Timeline live · TS 38.213 §4.1
First-symbol indices l₀ (within half-frame):
2, 8, 16, 22, 30, 36, 44, 50
SSBs in burst: 8   Last SSB ends at symbol: 53
🧪 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:

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
Figure 6.10 — Sync raster on band n78 (3300 – 3800 MHz, GSCN 7711 – 8054)
~620 GSCN steps · 1.44 MHz spacing · UE probes each 3300 MHz 3800 MHz GSCN 7711 GSCN 8054 GSCN 7811 3449.28 MHz The UE tries each tick in sequence. On a successful PSS lock at GSCN 7811 it stops and proceeds to SSS.
Figure 6.10. Sync-raster candidate frequencies on n78. The spacing is 1.44 MHz (FR1 high), much larger than the channel raster (5 kHz), and tightly chosen so that for every legal channel BW the centre of at least one SSB lands inside the channel — guaranteeing that any UE on the band can find some SSB to camp on.

6.4.2 The five decode stages

Step-by-step UE cell search
  1. 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).
  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).
  3. 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).
  4. 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).
  5. 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.
Figure 6.11 — Cell-search compute timeline (typical UE, FR1, 0 dB SNR)
0 ms 10 ms 20 ms 25 ms 30 ms PSS correlation (sliding) PSS peak detection Fine timing + CFO SSS · 336 hypotheses DMRS · pick iSSB wait for next SSB (worst case 20 ms) PBCH polar decode CRC ✓ Total typical: 20–30 ms. Best case (UE catches the SSB just as it powered on): under 5 ms.
Figure 6.11. Wall-clock breakdown of cell search on FR1 at 0 dB SNR with default 20 ms SSB period. The dominant cost is waiting — sliding the correlator until an SSB arrives. Once the SSB shows up, every subsequent stage is microseconds-to-milliseconds.

6.4.3 Receiver implementation notes

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.
Figure 6.12 — From the 8-bit pdcch-ConfigSIB1 byte to a concrete CORESET#0
8 MIB bits → CORESET#0 layout + Type0-PDCCH Search-Space schedule pdcch-ConfigSIB1 = 1001 1100 (0x9C) controlResourceSetZero = 1001 = 9 searchSpaceZero = 1100 = 12 TS 38.213 Table 13-4 (FR1, SSB SCS 30, PDCCH 30, paired) idx 9 → (24 RB · 1 sym · offset 12 RB) TS 38.213 Table 13-11 idx 12 → O=0, M=1, first sym=3 1×AL4 + 1×AL8 candidates Resulting CORESET#0: RB 0 RB 12 RB 36 RB 51 CORESET#0 · 24 RBs · 1 symbol
Figure 6.12. Worked decode of pdcch-ConfigSIB1 = 0x9C for an FR1 30/30 kHz paired-spectrum cell: high nibble (9) selects (24 RB, 1 sym, offset 12 RB) from Table 13-4; low nibble (12) selects (O=0, M=1, first symbol within CORESET = 3, 1 AL-4 + 1 AL-8 candidate) from Table 13-11. UE now knows exactly where to listen for the SI-RNTI-scrambled DCI Format 1_0 scheduling SIB1.
CORESET#0 Decoder live · TS 38.213 §13
High nibble (controlResourceSetZero) = 9  Low nibble (searchSpaceZero) = 12
CORESET#0: 24 RBs · 1 symbol · offset 12 RBs
SS#0 monitoring: O=0, M=1, first sym=3, 1×AL4 + 1×AL8 candidates

6.5 Worked Example — UE finds PCI 451 on n78

End-to-end with TS-compliant numbers
  1. 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.
  2. SSS correlation on symbol l0+2 identifies sequence #150 ⇒ NID(1) = 150 ⇒ PCI = 3·150 + 1 = 451.
  3. DMRS comb offset ν = 451 mod 4 = 3. UE generates 8 candidate PBCH-DMRS sequences (Lmax=8 on n78). Correlation peak picks iSSB = 3.
  4. cinit = 211·(3+1)·(⌊451/4⌋+1) + 26·(3+1) + (451 mod 4) = 2048·4·113 + 64·4 + 3 = 925955.
  5. 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
  6. 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

6.8 Field-Engineering Notes & Edge Cases

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.
Figure 7.1 — The PDCCH loop: gNB schedules, UE blind-decodes, data flows
gNB Scheduler writes DCI for each UE picks RB allocation, MCS, AL, CCE position knows everything PDCCH region (CORESET) UE1 UE1 · UE2 · · UE3 UE3 UE2 UE2 16 CCEs · each AL ∈ {1,2,4,8,16} CCEs UE1 in AL2 · UE2 in AL4 · UE3 in AL2 UE Blind Decoder tries 44 candidate positions per slot CRC ⊕ RNTI = ✓ → mine knows almost nothing write read? Every slot, every cell, every connected UE. ~1000 cycles per second per phone.
Figure 7.1. The PDCCH loop. The gNB writes a DCI for each UE into a chosen subset of the CORESET's CCEs. The UE doesn't know which subset, so it tries every legal candidate, runs each through a polar decoder + CRC check, and the one whose CRC matches its own RNTI is its DCI. The candidates are structured enough (Sec. 7.4) that the UE only has to try a few dozen, not thousands.

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?"

UnitSizeBuilt fromPurpose
RE1 SC × 1 symbolThe atom. PDCCH uses QPSK, so each RE carries 2 bits.
REG12 REs (1 RB × 1 symbol)12 REsResource Element Group. The smallest unit a CORESET assigns. 9 data REs + 3 DMRS REs.
CCE6 REGs (72 REs)6 REGsControl Channel Element. The unit a DCI is mapped onto. 54 data REs + 18 DMRS = ~108 QPSK bits coded.
AL1, 2, 4, 8, or 16 CCEsL · CCEsAggregation Level. How many CCEs a single DCI uses — chosen by the gNB based on link quality.
Candidate1 AL of CCEs1 ALOne 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.
Figure 7.2 — From a single RE up to an aggregated PDCCH candidate
Data RE DMRS RE CCE RE REG CCE AL = 4 (candidate) 1 RE 1 subcarrier × 1 symbol 12 REs = 1 RB 3 DMRS + 9 data 6 REGs = 72 REs (18 DMRS + 54 data) ~108 coded QPSK bits CCE N CCE N+1 CCE N+2 CCE N+3 4 CCEs = 288 REs → ~432 QPSK bits ~3 dB more coding gain than AL 2 ×12 ×6 ×4 Each step up the hierarchy aggregates more resources — and every doubling of the aggregation level adds ~3 dB of link budget.
Figure 7.2. The four levels of the hierarchy, from a single RE through one REG (12 REs in a column, 3 of them DMRS), one CCE (six REGs in a row), to an aggregation-level-4 PDCCH candidate (4 CCEs side by side). Bigger aggregation = more coded bits = lower required SNR, at the cost of consuming more of the CORESET budget.

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.
Figure 7.3 — frequencyDomainResources: 45 bits, 6 RBs each, 270 RBs covered
Bit b_i covers RBs [6·i, 6·i+5]. The 1-bits form the CORESET's frequency footprint. Example: bitmap = 000111111000000000000000000000000000000000000 (CORESET#0 spanning RBs 18..47) RB 0 RB 269 RB 18 RB 47 popcount = 6 bits set → 6 × 6 = 36 contiguous RBs in CORESET Bits can be discontiguous; the CCE numbering still walks them in increasing RB-group order.
Figure 7.3. A 45-bit frequency-domain bitmap is the most economical way to describe an arbitrary CORESET shape. Every set bit is 6 RBs of PDCCH territory. Operators typically set just a few contiguous bits to keep CORESETs compact, but the encoding allows scattered allocations for spectrum-fragmented deployments.

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:

StrategyUse caseREG ordering
Non-interleavedStatic low-mobility, frequency-selective schedulingCCE n uses REGs 6n..6n+5 in increasing CORESET index (frequency-first, then time).
InterleavedHigh-mobility, diversity gainREG 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.
Figure 7.4 — Non-interleaved vs interleaved CCE-to-REG mapping (CORESET: 24 RBs, 1 symbol, L=6)
Non-interleaved CCE 0 = REGs 0..5 (contiguous in frequency) CCE 0 CCE 1 Deep fade in RB 8-12 → CCE 1 loses lots of REGs → AL=1 likely fails Interleaved (R=2, n_shift=0) CCE 0's bundles scattered across frequency bundle 0 bundle 1 bundle 2 A deep fade can only kill 1 of 3 bundles → polar decoder still wins f(x) = (r·C + c + n_shift) mod (N_REG^CORESET / L) x = c·R + r, C = N_REG^CORESET / (L·R), c ∈ [0..C−1], r ∈ [0..R−1] L (bundle size) and R (interleaver size) both ∈ {2, 3, 6}; n_shift ≈ PCI mod (N_REG/L) by default.
Figure 7.4. Two ways to assign REGs to CCEs. In the non-interleaved case, CCE 0 is six REGs in a row — clean but fragile in a frequency-selective channel. In the interleaved case, the three bundles of CCE 0 are spread across the CORESET so that no single fade can destroy more than one of them. The interleaver is parameterised by L, R, and nshift, all under RRC control.
CCE-to-REG Interleaved Mapping live · TS 38.211 §7.3.2.2
NREGCORESET = 24  Nbundle = 4  NCCE = 4
CCE 0 maps to REG bundles: 0
…which cover REGs: 0, 1, 2, 3, 4, 5

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

TypeNameRNTIPurpose
CSS Type 0Common SS for SIB1SI-RNTICell access. Configured by MIB pdcch-ConfigSIB1.
CSS Type 0ACommon SS for other SISI-RNTISIB2+ scheduling.
CSS Type 1Common SS for RACHRA-RNTI, MsgB-RNTI, TC-RNTIRandom-access response.
CSS Type 2Common SS for pagingP-RNTIIdle-mode paging.
CSS Type 3Common SS for groupINT-RNTI, SFI-RNTI, TPC-* RNTIs, etc.Pre-emption indicators, slot-format updates, group power control.
USSUE-specific SSC-RNTI, MCS-C-RNTI, CS-RNTI, SP-CSI-RNTIPer-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.
Figure 7.5 — Search-space taxonomy: who decodes which DCI?
All UEs · some UEs · one UE — three audiences, six SS types Search Space Common (CSS) UE-specific (USS) Type 0 SIB1 Type 0A other SI Type 1 RACH Type 2 paging Type 3 group USS · per UE, per RNTI C-RNTI · MCS-C-RNTI · CS-RNTI SI-RNTI SI-RNTI RA-RNTI P-RNTI INT, SFI… "all UEs in the cell" "all UEs in a group" "just this UE" Each UE may have many SSs configured; the SS-and-CORESET pair determines exactly where to look in each slot.
Figure 7.5. Search-space taxonomy. Common SSs cover network-wide broadcast (Type 0/0A SIB), paging (Type 2), random-access response (Type 1), and group power-control / pre-emption (Type 3). USS carries everything per-UE, scrambled by C-RNTI or its variants. The hashing function spreads USS candidates so two UEs almost never collide on the same CCE in the same slot.

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).
USS Candidate Locator live · TS 38.213 §10.1
Ap (p mod 3) = 39827  Yp,ns =
Candidate starting CCEs:
Figure 7.6 — Yp,ns recursion: how PDCCH candidates wander slot-to-slot
C-RNTI = 4660, A0 = 39827, D = 65537 — recursion over 8 slots slot 0 Y = 58573 slot 1 Y = 62893 slot 2 Y = 15371 slot 3 Y = 65237 slot 4 Y = 45171 slot 5 Y = 34767 slot 6 Y = 65110 slot 7 Y = 33491 N_CCE=16, L=4 → start CCE = 4·(Y mod 4): CCE 4 CCE 4 CCE 12 CCE 4 CCE 12 CCE 12
Figure 7.6. Yp,ns values from the recursion Yp,ns = (39827·Yp,ns−1) mod 65537 with Yp,−1 = 4660. The values look random; what matters is that any two UEs with different C-RNTIs produce different recursion trajectories, so collisions on the same CCE in the same slot are statistically rare. Over many slots, every CCE eventually becomes the start of a candidate, providing diversity.

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

μSCSMax blind decodes / slot (MBD)Max non-overlapped CCEs / slot (CCCE)
015 kHz4456
130 kHz3656
260 kHz2248
3120 kHz2032
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.

Blind-Decode Budget Checker live · TS 38.213 §10.1
Used BDs: 3 / 36  Used CCEs: 16 / 56
✓ within both budgets

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.
Figure 7.5b — Blind decoding has a budget: only so many candidates per slot
The UE can't try infinite hypotheses — the spec caps the workPDCCH candidates44/slotnon-overlapping CCEs56/slot(numbers for SCS 15 kHz) — both the candidate count and the channel-estimation (CCE) effort are bounded.
Figure 7.5b. The UE searches for its PDCCH by blind-decoding candidates across aggregation levels — but it can't try unlimited hypotheses. The spec caps both the number of blind decodes (e.g. 44/slot at 15 kHz) and the number of non-overlapping CCEs the UE must channel-estimate (56/slot). The scheduler must place PDCCH within these budgets.
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.)

FormatDirectionRNTIPurposeRelease
0_0ULC-RNTI, TC-RNTIFallback PUSCH grant. Short, robust.Rel-15
0_1ULC-RNTI, MCS-C-RNTI, CS-RNTI, SP-CSI-RNTIFull-feature PUSCH grant.Rel-15
0_2ULC-RNTI, MCS-C-RNTI, CS-RNTIURLLC PUSCH grant — flexible field sizes.Rel-16
0_3ULC-RNTI, MCS-C-RNTI, CS-RNTIMulti-cell scheduling: one PUSCH in one cell, or one PUSCH each in several cells.Rel-18
1_0DLC-RNTI, SI-RNTI, P-RNTI, RA-RNTI, TC-RNTIFallback PDSCH assignment. The first format every UE supports.Rel-15
1_1DLC-RNTI, MCS-C-RNTI, CS-RNTIFull-feature PDSCH assignment.Rel-15
1_2DLC-RNTI, MCS-C-RNTI, CS-RNTIURLLC PDSCH assignment.Rel-16
1_3DLC-RNTI, MCS-C-RNTI, CS-RNTIMulti-cell scheduling: one PDSCH in one cell, or one PDSCH each in several cells.Rel-18
2_0SFI-RNTISlot-format indication (which symbols are DL/UL/flex).Rel-15
2_1INT-RNTIPre-emption indication (eMBB resources just grabbed for URLLC).Rel-15
2_2TPC-PUSCH-RNTI, TPC-PUCCH-RNTIUL power control commands for a group.Rel-15
2_3TPC-SRS-RNTISRS power-control group commands.Rel-15
2_4CI-RNTICancellation indication (Rel-16 IIoT).Rel-16
2_5AI-RNTIAvailability indication for IAB.Rel-16
2_6PS-RNTIPower-saving wake-up signal (DCP).Rel-16
2_7PEI-RNTIPaging 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_0SidelinkSL-RNTI, SL-CS-RNTISidelink scheduling.Rel-16
3_1SidelinkSL-Semi-RNTISidelink semi-persistent.Rel-16
3_2SidelinkSL-RNTI familySchedules PSCCH + SL PRS for a dedicated sidelink-positioning resource pool.Rel-18
4_0DL (MBS)G-RNTI, G-CS-RNTIBroadcast/multicast PDSCH in RRC_INACTIVE.Rel-17
4_1DL (MBS)G-RNTI, G-CS-RNTIMulticast PDSCH (connected) — full-feature.Rel-17
4_2DL (MBS)G-RNTI, G-CS-RNTIMulticast 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.

FieldWidthValue space
Identifier for DCI formats10 = UL fallback, 1 = DL fallback (1_0)
Frequency-domain RA⌈log₂(NRB(NRB+1)/2)⌉RIV encoding of contiguous RB allocation
Time-domain RA4Index into PDSCH-TimeDomainResourceAllocationList
VRB-to-PRB mapping10 = non-interleaved, 1 = interleaved
MCS5Index into TS 38.214 Table 5.1.3.1-1 or -2
NDI (new data)1Toggles each new transport block on this HARQ process
RV (redundancy version)20, 1, 2, 3
HARQ process number40–15
DAI (downlink assignment index)2For HARQ-ACK codebook tracking
TPC for PUCCH2−1, 0, +1, +3 dB
PUCCH resource indicator3Index into pucch-ResourceList
PDSCH-to-HARQ feedback timing K130–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.
Figure 7.7 — The DCI format families as a tree of purposes
UL grants · DL grants · Group-common · Sidelink UL grants (0_x) 0_0 fallback 0_1 full 0_2 URLLC DL grants (1_x) 1_0 fallback ★ 1_1 full 1_2 URLLC Group-common (2_x) 2_0 SFI 2_1 INT pre-empt 2_2 TPC UL 2_3 TPC SRS 2_4 cancel 2_5 AI (IAB) 2_6 power save 2_7 PEI Sidelink (3_x) 3_0 3_1
Figure 7.7. The DCI universe. Most traffic is carried by 1_1 (DL) and 0_1 (UL); 1_0 / 0_0 are the always-available fallbacks. The 2_x family carries network-wide instructions (slot format updates, pre-emption, group power control); the 3_x family carries sidelink scheduling.

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.
CRC ⊕ RNTI scrambler live · TS 38.212 §7.3.2
CRC (binary, MSB 8): AB   (LSB 16): CDEF
Scrambled CRC (last 16 bits XOR RNTI): 0xAB………
Receiver: compute CRC on decoded payload → XOR with own RNTI → if = 0 → "this is mine".

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.
Figure 7.8 — PDCCH-DMRS occupies subcarriers k = 4n + 1 in every REG (RE 1, 5, 9)
Within one RB (12 SCs), three pilots and nine data REs per symbol k=11 data k=10 data k=9 DMRS k=8 data k=7 data k=6 data k=5 DMRS k=4 data k=3 data k=2 data k=1 DMRS k=0 data Pattern repeats in every RB the CORESET covers · DMRS scrambled per cell, per symbol → 3 DMRS + 9 data REs per REG ⇒ 18 + 54 per CCE ⇒ ~108 coded bits per CCE
Figure 7.8. PDCCH-DMRS comb pattern. Pilots on subcarriers 1, 5, 9 of every RB the CORESET covers; data on the other nine. The pattern is fixed regardless of PCI; only the sequence values on those REs change with PCI (and slot, and symbol).

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:

RNTIRange (hex)Purpose
SI-RNTI0xFFFFSystem information (SIB1+). Same for every UE on every cell.
P-RNTI0xFFFEPaging. Same for every UE.
RA-RNTI0x0001–0xFFEFRandom-access response (Msg2). Derived from PRACH RO.
TC-RNTI0x0001–0xFFEFTemporary cell RNTI during contention resolution.
C-RNTI0x0001–0xFFEFThe UE's identity once connected. Per-cell.
CS-RNTI0x0001–0xFFEFConfigured grant / semi-persistent scheduling.
MCS-C-RNTI0x0001–0xFFEFHigher MCS table indication (256-QAM).
SP-CSI-RNTI0x0001–0xFFEFSemi-persistent CSI reporting.
INT-RNTI0x0001–0xFFEFPre-emption indication.
SFI-RNTI0x0001–0xFFEFSlot format indication.
TPC-PUCCH/PUSCH/SRS-RNTI0x0001–0xFFEFGroup power-control commands.
MsgB-RNTI0x0001–0xFFEF2-step RACH MsgB.
PS-RNTI0x0001–0xFFEFDCP wake-up for power saving.
SL-RNTI, SL-CS-RNTI, SL-Semi-RNTI0x0001–0xFFEFSidelink scheduling family.
AI-RNTI0x0001–0xFFEFIAB availability indication.
CI-RNTI0x0001–0xFFEFUL 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.

Figure 7.10b — DCI size alignment keeps the number of blind-decode sizes ≤ 4
before alignmany distinct sizes → too many decodesafter align (pad)padded to ≤4 sizes (≤3 C-RNTI)Zero-pad smaller DCIs so the UE tests few sizes, not many formats
Figure 7.10b. A UE doesn't blind-decode every DCI format separately — it decodes by size. To keep the work bounded, the spec aligns DCI sizes: smaller formats are zero-padded so the total number of distinct sizes the UE monitors stays ≤4 (and ≤3 scrambled by C-RNTI). Fewer sizes means fewer blind decodes.
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

7.12 Worked Example — UE finds its DCI in slot 7

End-to-end with TS-compliant numbers
  1. 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.
  2. Search-space set p=0 says: monitor AL=4 with M=2 candidates and AL=8 with M=1 candidate.
  3. 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.
  4. 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.
  5. For AL=8, m=0: CCE_0 = 8·(33491 mod ⌊16/8⌋) + i = 8·(33491 mod 2) + i = 8·1 + i = CCE 8..15.
  6. 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.
  7. 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

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.

Figure 8.1 — PDSCH from MAC PDU to receive bits — end-to-end view
DCI 1_x says where + how → PDSCH delivers what MAC scheduler picks UE, RBs, MCS DCI 1_0 / 1_1 / 1_2 on PDCCH (Ch.7) TB → LDPC → bits TS 38.212 §7.2 scramble → modulate layer → port → RE PDSCH REs on the air UE Rx → MAC PDU HARQ-ACK on PUCCH/PUSCH (Ch.13) — drives retransmission if CRC fails Tens of microseconds in silicon · milliseconds in MAC · seconds in human time
Figure 8.1. Every PDSCH transmission begins with a MAC scheduling decision, becomes a DCI on PDCCH telling the UE where and how, then runs through transport-block coding (LDPC) and physical-layer mapping before lighting up actual REs on the air. The UE retraces the same path in reverse, and a HARQ-ACK on PUCCH (or PUSCH) tells the gNB whether to send the next transport block or repeat the current one with a different redundancy version.

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·Qm/(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: Kcb = 8448 (BG1), Kcb = 3840 (BG2).
Figure 8.2 — Transport-block coding chain: A bits to G coded bits
Six stages from a single A-bit transport block to G transmittable bits TB A bits from MAC + TB CRC 24A (A>3824) 16 (else) BG select BG1 / BG2 by A & R Segment C code blocks + CB CRC if C>1 LDPC + RM N_LDPC → E_r RV ∈ {0,1,2,3} Concat → G to scrambler (§8.3) Base-graph decision tree A ≤ 292 → BG2 (Kcb = 3840) A > 292 AND R ≤ 0.25 → BG2 A ≤ 3824 AND R ≤ 0.67 → BG2 · otherwise → BG1 (Kcb = 8448)
Figure 8.2. The pipeline. After segmentation, every code block is processed independently — its own CRC, its own LDPC encoding, its own rate matching, its own HARQ buffer. The final concatenation step glues them back together in the order they were segmented, ready for the physical-layer scrambler.
LDPC Base-Graph & Segmentation live · TS 38.212 §7.2.2
TB CRC: 24A  B = 8448 bits  Base graph: BG1  Kcb = 8448
Code blocks C = 1  per-CB CRC: no (C=1)  K per CB ≈ 8448

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).

RVStart position (in circular buffer)Used in HARQ as
0Position 0 — includes all systematic bits + first parity sliceInitial transmission (default)
1Skip systematic, into parity1st retransmission (typical)
2Further into parity2nd retransmission
3Wraps back through systematic again3rd 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.
Figure 8.3 — Circular buffer and the four redundancy versions
NLDPC bits arranged in a circle · 4 starting positions, 4 RVs systematic parity RV 0 0% RV 2 25% RV 3 50% RV 1 75% → read E bits Typical HARQ cycle attempt 1 → RV 0 attempt 2 → RV 2 attempt 3 → RV 3 attempt 4 → RV 1
Figure 8.3. The LDPC mother codeword is laid out as a circle of bits — systematic first, then parity. Each RV is a different reading start. RV0 always begins at position 0 and includes most of the systematic bits, ideal for the first transmission. RV2 begins around the parity region and is the natural pick for the second attempt, giving the receiver new parity to combine with the systematic it already has. The "standard" RV sequence is 0 → 2 → 3 → 1, then it wraps. Operators tune this for their channels.

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.
Figure 8.3b — PDSCH physical-layer chain: from coded bits to the antenna
After LDPC: scramble → modulate → layer → precode → map → OFDMscrambleGoldmodulateQAMlayer mapνprecodeWRE mapgridOFDMIFFTDMRS/PT-RS are inserted at the RE-map stage; the same skeleton serves every DL channel.
Figure 8.3b. Once the transport block is coded (Ch.5), PDSCH runs a fixed physical-layer chain: scramble the bits (cell/UE-specific Gold), map to QAM symbols, split across layers, apply the precoder W, place onto the resource-element grid (interleaving DMRS/PT-RS), and finally OFDM-modulate. Every downlink channel is a variation on this same skeleton.
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:

TypeDCI field widthEncodingTypical use
Type 0⌈NRBBWP / P⌉ bitsOne 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)⌉ bitsSingle integer RIV (resource indication value) encoding start RB + lengthContiguous 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.
Figure 8.4 — Type 0 bitmap vs Type 1 RIV: two ways to describe the same idea
Type 0 · bitmap (RBG size 4) 048 121620 242832 3640 bitmap = 011001100000 → RBs 4–11, 20–27 = 16 RBs (non-contiguous) Type 1 · RIV (single integer) 048 RB 12 – 23 (12 RBs) RIV = 48·(12−1) + 12 = 540 → start RB 12, length 12 (contiguous) Both messages occupy the same DCI slot. Type 0's bitmap is wider but flexible; Type 1's integer is compact but contiguous-only.
Figure 8.4. Two encodings, same job — different trade-offs. The bitmap can punch holes in the allocation; the RIV cannot. Type 0 RBG size P depends on BWP size: P ∈ {2, 4, 8, 16} per Table 5.1.2.2.1-1 of TS 38.214 — smaller BWPs use smaller RBGs.
RIV ↔ (start, length) Codec live · TS 38.214 §5.1.2.2.1
Encoded RIV = 540
Decoded: start RB 12, length 12

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:

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.

Figure 8.4b — Time-domain allocation: K0, S, L and mapping Type A vs B
When (K0 slots later), where (start S), how long (L symbols)PDCCH (n)K0 slotsDMSS+LType A:slot-aligned, DMRS at sym 2/3 — eMBB defaultType B:starts anywhere, DMRS front-loaded — mini-slot/URLLC
Figure 8.4b. The DCI's time-domain field encodes three things via a single SLIV value: K0 (how many slots after the PDCCH the data lands), S (the start symbol), and L (the length in symbols). Mapping Type A is slot-aligned with DMRS at a fixed early symbol; Type B can start on almost any symbol with front-loaded DMRS, enabling 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 tableSelected byMax MCS indexMax QmSpec ref
Table 5.1.3.1-1default (DCI 1_0 always)28 (+3 reserved)6 (64QAM)TS 38.214 §5.1.3.1
Table 5.1.3.1-2UE configured with mcs-Table=qam25627 (+4 reserved)8 (256QAM)same §5.1.3.1
Table 5.1.3.1-3low spectral-efficiency (URLLC, RedCap)286same §5.1.3.1
Table 5.1.3.1-4mcs-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.
Figure 8.5c — TBS in five steps: from REs to a byte-aligned transport-block size
How many bits actually fit in this allocationN_RE'REs/RB minus DMRS/overheadN_RE×nRB (cap 156/RB)N_info×R×Qm×ν×N_REquantiseto a valid TBSTBSbits in this grantN_info is then quantised to a TBS the LDPC segmentation and CRC can use cleanly.
Figure 8.5c. The transport-block size isn't read from a table directly — it's computed. Count usable REs per RB (subtract DMRS and overhead), multiply by the number of RBs (capped at 156/RB), multiply by code rate × bits-per-symbol × layers to get N_info, then quantise to a valid byte-aligned TBS. That final number is how many payload bits the grant carries.
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
  1. Per-PRB unused REs: NRE' = 12·Nsymb,sh − NDMRS,sh − NohPRB. Overhead Noh ∈ {0, 6, 12, 18}, default 0.
  2. Total useful REs: NRE = min(156, NRE') · nPRB.
  3. Intermediate info bits: Ninfo = NRE · R · Qm · v.
  4. If Ninfo ≤ 3824: round and look up TBS in Table 5.1.3.2-1 (smallest TBS ≥ Ninfo).
  5. 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.
TBS Calculator live · TS 38.214 §5.1.3.2
NRE' per RB = 132  capped = 132  NRE total = 6600
Ninfo = 27720  TBS ≈ 27784 bits

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:

ConfigurationPatternSingle-sym portsDouble-sym portsDMRS REs per RB (single-sym)
Type 1k = 4n + 2k' + Δ; CDM groups 0/14 (1000–1003)8 (1000–1007)6 per CDM group
Type 2k = 6n + 2k' + Δ; CDM groups 0/1/26 (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).
Figure 8.5 — PDSCH-DMRS RE patterns: Type 1 vs Type 2 (single symbol, one RB)
Type 1 · 2 CDM groups, 6 REs each Type 2 · 3 CDM groups, 4 REs each k=11 CDM 1 (1002/1003) k=10 CDM 0 (1000/1001) k=9 k=8 k=7 k=6 k=5 k=4 k=3 k=2 k=1 k=0 k=11 CDM 2 (1004/1005) k=10 k=9 CDM 1 (1002/1003) k=8 k=7 CDM 0 (1000/1001) k=6 k=5 k=4 k=3 k=2 k=1 k=0 12 REs per RB per symbol · ports within one CDM group are OCC-multiplexed
Figure 8.5. Type 1 splits the 12 REs into two alternating-SC CDM groups of 6 REs each, supporting up to 4 (single-sym) or 8 (double-sym) ports via length-2 OCC. Type 2 splits them into three pairs-of-adjacent-SCs CDM groups of 4 REs each, supporting up to 6 (single-sym) or 12 (double-sym) ports. Type 1 has stronger per-port channel estimates; Type 2 supports higher-order MIMO.
Figure 8.6b — Additional DMRS symbols: more pilots for fast-fading channels
1 DMRS (low Doppler)4 DMRS (high Doppler)More DMRS = channel tracked across the slot, fewer data REscoloured = DMRS symbol across the 14-symbol slot · front-loaded first for early estimate.
Figure 8.6b. PDSCH-DMRS is front-loaded (an early symbol) so the channel estimate is available before the data. For fast-moving UEs whose channel changes within a slot, the gNB adds additional DMRS symbols later in the slot so the estimate tracks the fading — at the cost of the data REs those pilots occupy.
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.

FieldValuesSets via
KPT-RS (frequency density)2 or 4 RBs per PT-RS REMCS threshold ptrs-MCS_i
LPT-RS (time density)1, 2, or 4 symbols between PT-RSRB-count threshold ptrs-NRB_i
Portfirst scheduled DMRS port for the codewordimplicit
Subcarrier offsetkRE,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.
Figure 8.7b — PT-RS: chasing the phase noise that smears high-order QAM
phase noise → rotationPT-RS de-rotatesPT-RS pilots track CPEA few scattered pilots measure the common phase error each symbolDensity rises with MCS (more sensitive) and falls with allocation size — configured, not fixed.
Figure 8.7b. At FR2 and very high MCS, oscillator phase noise slowly rotates the whole constellation between symbols (common phase error). PT-RS scatters a few known pilots through time so the receiver can measure that rotation each symbol and de-rotate the data — without it, 256/1024-QAM would smear into errors.
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 fieldWidthFunction
HARQ process number4 bitsProcess ID 0–15
NDI (New Data Indicator)1 bitToggles per new TB; same value = retransmission
RV (Redundancy Version)2 bits{0, 1, 2, 3} circular-buffer entry
DAI (Downlink Assignment Index)2 bitsTracks accumulated DL grants for HARQ-ACK codebook
PDSCH-to-HARQ feedback timing K13 bitsSlot 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.
Figure 8.6 — HARQ process timeline (single process, two attempts)
First attempt fails CRC → ACK=NACK → gNB sends RV2 of same process slot 0 slot 1 slot 2 slot 3 slot 4 slot 5 slot 6 PDSCH 1 · RV0 proc=4, NDI=1 NACK on PUCCH PDSCH 1' · RV2 proc=4, NDI=1 (same!) ACK soft-combined ✓ When NDI flips, the UE flushes the buffer and starts fresh. When it stays, the UE combines.
Figure 8.6. A HARQ process across time. First attempt fails (LLRs are stored in the soft buffer for process 4). After ~3 slots, the gNB sees the NACK and schedules a retransmission with RV2 on the same process number. The UE combines the new LLRs with the stored ones, polar-decodes the LDPC, and finally passes the CRC.
Figure 8.8b — HARQ: parallel stop-and-wait processes with soft-combining
Up to 16 processes run in parallel so the pipe never stalls waiting for one ACKHP 0ACKHP 1ACKHP 2retxHP 3ACKHP 4ACKHP 5retxHP 6ACKHP 7ACKNACK → retransmit SAME process with a new RV → receiver soft-combines LLRsNDI toggles = new data; NDI same = retransmission of this process.
Figure 8.8b. HARQ runs many stop-and-wait processes in parallel (up to 16). While process 0 waits for its ACK, processes 1–7 keep transmitting, so the link never idles. On a NACK the gNB retransmits the same process with a different redundancy version; the receiver soft-combines the new LLRs with the stored ones (Fig 5.2c) and re-decodes.
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

8.10 Worked Example — 50 RBs · 12 symbols · MCS 17 · 64QAM · 2 layers

End-to-end TBS & pipeline
  1. 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.
  2. NRE' = 12·12 − 12 − 0 = 132 per RB.  capped to 132 (since 132 < 156).  NRE = 132·50 = 6600.
  3. Ninfo = 6600 · (658/1024) · 6 · 2 = 50,892 bits.
  4. 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.
  5. 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.
  6. 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).
  7. 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.
  8. 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.
  9. 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

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?
SignalCarried wherePurposeSpec
PBCH-DMRSInside SSB (Ch.6)PBCH channel estimate · SSB-index carrierTS 38.211 §7.4.1.4
PDCCH-DMRSInside CCEs (Ch.7)PDCCH channel estimateTS 38.211 §7.4.1.3
PDSCH-DMRSInside PDSCH allocation (Ch.8)PDSCH channel estimate · MIMO port referenceTS 38.211 §7.4.1.1
PT-RSInside PDSCH (Ch.8)Phase tracking at high MCS / FR2TS 38.211 §7.4.1.2
NZP-CSI-RSConfigured CSI-RS resourcesCQI / RI / PMI measurement, beam management, trackingTS 38.211 §7.4.1.5
ZP-CSI-RSReserved REsPDSCH rate-match holes (no transmission)TS 38.214 §5.1.4.2
TRSSpecial CSI-RS configurationFine time / frequency trackingTS 38.214 §5.1.6.1.1
PRSPositioning Reference SignalUE 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.
Figure 9.1c — Two camps of reference signal: rides-with-a-channel vs stands-alone
Demodulation RS (with a channel)PBCH-DMRSPDCCH-DMRSPDSCH-DMRSPT-RSMeasurement RS (standalone)CSI-RSTRSPRSappear only when their host channel doestransmitted on their own schedule
Figure 9.1c. Every NR downlink reference signal falls into one of two camps. Demodulation RS (PBCH/PDCCH/PDSCH-DMRS, PT-RS) ride alongside their host channel and vanish when it does — they exist to demodulate that channel. Measurement RS (CSI-RS, TRS, PRS) are transmitted on their own schedule whether or not there's data, so the UE can measure quality, track timing, and position.
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.

RowPorts XDensity ρcdm-TypeCDM groupsCSI-RS RE/RB (=X·ρ)
113noCDM3
211, 1/2noCDM11 / 0.5
321, 1/2fd-CDM212 / 1
441fd-CDM224
541fd-CDM224
681fd-CDM248
781fd-CDM248
881cdm4-FD2-TD228 (×2 sym)
9121fd-CDM2612
10121cdm4-FD2-TD2312 (×2 sym)
11161, 1/2fd-CDM2816 / 8
12161, 1/2cdm4-FD2-TD2416 / 8 (×2 sym)
13241, 1/2fd-CDM21224 / 12
14241, 1/2cdm4-FD2-TD2624 / 12 (×2 sym)
15241, 1/2cdm8-FD2-TD4324 / 12 (×4 sym)
16321, 1/2fd-CDM21632 / 16
17321, 1/2cdm4-FD2-TD2832 / 16 (×2 sym)
18321, 1/2cdm8-FD2-TD4432 / 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.
Figure 9.1 — Four CSI-RS row patterns: 1, 2, 4, 8 ports in one RB
12 SCs × 14 symbols inside one RB · CSI-RS REs marked Row 1 · 1 port · ρ=3 3 REs/RB · cheap, sparse Row 4 · 4 ports · ρ=1 4 REs · fd-CDM2 pairs Row 6 · 8 ports · ρ=1 Row 7 · 8 ports · cdm4-FD2-TD2 8 ports via 4-RE CDM, less overhead When to pick which row Row 1 (1 port, ρ=3) → TRS component Row 2 (1 port, ρ=1) → per-beam RSRP Rows 3–5 (2/4 ports) → SU-MIMO CQI Rows 6–9 (8/12 ports) → MU-MIMO CQI Rows 10–14 (16/24 ports) → FR1 massive MIMO Rows 15–17 (32 ports) → FR2 64T64R / mMIMO Higher X = more overhead but finer PMI granularity
Figure 9.1. Four CSI-RS row patterns at a glance. Row 1 sprinkles 3 sparse pilots per RB — perfect for TRS tracking. Row 4 places 4 pairs of CDM-multiplexed REs on a single symbol — clean for 4-port CQI. Row 6 splits 8 ports across 4 freq-CDM-2 pairs. Row 7 trades freq density for time density via cdm4 — halves the per-symbol cost at the price of needing two PDSCH symbols.

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:

ModeTriggerPeriodicityUse
Periodic (P-CSI-RS)RRC{4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, 640} slotsAlways-on CQI tracking, beam scan
Semi-Persistent (SP-CSI-RS)MAC CE activationsame set as periodic but on/off via MACMobility-triggered CQI
Aperiodic (A-CSI-RS)DCI 0_1/0_2 triggerOne-shotOn-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.
Figure 9.1b — fd-CDM2 despreading: two ports share two REs
Both ports transmit on both REs · receiver separates them by code What is transmitted (RE k, RE k+1) +p +p P0 +p −p P1 RE k RE k+1 channel h0,h1 What is received y0 = p(h0 + h1) y1 = p(h0 − h1) ↓ correlate (y0+y1)/2p = h0 (y0−y1)/2p = h1 Orthogonal codes [+1,+1] and [+1,−1] → sum isolates P0, difference isolates P1 · each at full energy
Figure 9.1b. Code-division multiplexing of two CSI-RS ports onto the same two REs. Port 0 uses cover code [+1,+1], port 1 uses [+1,−1]. After the channel mixes them, the receiver recovers each port by a sum (port 0) or difference (port 1). The two ports never need separate REs — they are separated by code, not by position — provided the channel is flat across the CDM group.

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.
Figure 9.2b — Why a few pilots are enough (and when they aren't)
Pilots closer than coherence BW Pilots too far apart → aliasing frequency (subcarriers) → frequency (subcarriers) → true channel interpolated estimate CSI-RS pilot
Figure 9.2b. Left: when pilots are spaced closer than the coherence bandwidth, the interpolated estimate (dashed) hugs the true channel (solid) — the UE knows the channel on every data RE it never measured. Right: space the pilots too far apart and the interpolation cuts straight across a peak it never sampled — the classic aliasing failure. Density ρ and periodicity are exactly the frequency- and time-axis sampling rates that keep you on the left.

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
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
Figure 9.2c — How a pattern of pilots becomes three feedback numbers
CSI-RS known pilots estimate Ĥ Nₐₓ × Nₙₒₑₜₛ covariance R = Σ ĤᴴĤ eigenvalues noise λ₁λ₂λ₃λ₄ 2 strong → rank 2 RI · # layers count strong λ PMI · precoder eigvecs → codebook CQI · MCS SINR → 10% BLER "How many ways does energy reach this user, and how strong is each?" — the eigen-decomposition answers all three.
Figure 9.2c. The full journey from pilots to feedback. The de-spread channel estimate Ĥ is folded into a spatial covariance R; its eigenvalues reveal how many independent spatial pipes the channel offers and how strong each is. The count of strong eigenvalues becomes the RI, the eigenvectors pick the codebook PMI, and the resulting post-beam SINR sets the CQI.

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.

Figure 9.2 — TRS pattern: 4 CSI-RS resources in 2 slots
2 slots × 14 symbols · 4 single-symbol TRS instances Slot N sym 0 sym 13 TRS sym 5 TRS sym 9 Δl = 4 symbols → freq estimate Slot N+1 TRS sym 5 TRS sym 9 1-slot gap → fine timing estimate All 4 resources use Row 1 · 1 port · ρ=3 · ≥ 52 RBs wide
Figure 9.2. The TRS pattern: 4 single-symbol CSI-RS resources, two per slot, on two consecutive slots. The 4-symbol gap within a slot enables CFO estimation (phase rotation between two pilots); the 1-slot gap between bursts enables fine timing estimation. All resources are wide-band (≥ 52 RBs) and on a single port — TRS is for tracking, not for spatial measurement.

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.
Figure 9.3.1b — Measuring frequency offset from the spin between two pilots
pilot l pilot l+4 Δt ≈ 4 symbols (≈143 µs @ 30 kHz) Δφ channel phase at pilot l …has rotated by Δφ at pilot l+4 Δf = Δφ / (2π·Δt) spin rate of the phasor = the oscillator offset unambiguous to ±3.5 kHz
Figure 9.3.1b. The two TRS pilots in a slot carry the same known sequence, so after the UE removes that known value, any leftover phase is pure channel. A residual frequency offset makes that phase spin by Δφ over the gap Δt between the pilots. Measuring the spin (conjugate-multiply the two estimates, take the angle) and dividing by 2π·Δt recovers the offset directly — the dashed arrow shows where the phasor started, the purple arc is the rotation it picked up.

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:

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.
Figure 9.4b — ZP-CSI-RS: one TRP's pilots are the other's reserved holes
TRP ATRP Bshared RE setA: NZP (real pilots)B: ZP (skips/rate-match)B leaves the holes so A's pilots arrive uncontaminatedSame trick for inter-cell CSI and future-reserved REs.
Figure 9.4b. Zero-power CSI-RS coordinates transmitters. TRP A transmits real (NZP) CSI-RS on a set of REs; TRP B declares those exact REs as ZP, so its PDSCH rate-matches around them and never transmits there. The UE then measures A's pilots free of B's interference — the same mechanism handles inter-cell measurement and reserving REs for later activation.
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:

  1. NZP-CSI-RS-Resource declares one CSI-RS pattern (one row).
  2. NZP-CSI-RS-ResourceSet groups one or more resources for a single purpose.
  3. CSI-ResourceConfig binds resource sets to a reporting purpose: CQI, beam management, tracking, etc.
  4. 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.

CSI-RS cinit Calculator live · TS 38.211 §7.4.1.5.2
cinit =  hex =
cinit = (210·(14·ns + l + 1)·(2NID+1) + NID) mod 231
Figure 9.5b — CSI-RS timing: periodic, semi-persistent, aperiodic
PeriodicRRC, always-onSemi-persistentMAC-CE on/offAperiodic← one DCI triggerSame pilots, three ways to schedule them in time
Figure 9.5b. A CSI-RS resource set is transmitted in one of three temporal modes: periodic (RRC-configured, always there), semi-persistent (toggled on/off by a MAC-CE for mobility bursts), or aperiodic (a single shot triggered by a DCI when the gNB needs fresh CSI before a grant). The mode is per resource-set, balancing measurement freshness against overhead.
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
  1. gNB on n78 wants 20 ms TRS periodicity. It configures a NZP-CSI-RS-ResourceSet with trs-Info = enabled and four resources r0–r3.
  2. All four use Row 1 of Table 7.4.1.5.3-1: 1 port, ρ=3, noCDM, bandwidth = 80 RBs (full initial DL BWP).
  3. 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.
  4. scramblingID = 123 for all four resources. UE computes c_init each symbol and generates the QPSK pilot sequence.
  5. 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).
  6. 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).
  7. Every 20 ms, the burst repeats; UE updates its timing/frequency tracking loop.
  8. 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

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.

WaveformPAPRMCS reachUse case
CP-OFDMHigh (~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-OFDMLow (~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.
Figure 10.1 — CP-OFDM vs DFT-s-OFDM: the PAPR trade-off
CP-OFDM (default) DFT-s-OFDM (coverage) PAPR ≈ 10 dB · big spikes PAPR ≈ 3 dB · smoother envelope Lower PAPR → less amplifier back-off → ~3 dB more usable transmit power at cell edge.
Figure 10.1. CP-OFDM produces a waveform with sharp instantaneous peaks; DFT-s-OFDM smooths them by spreading each modulated symbol across the whole allocation. At MCS 5 with QPSK, both deliver the same data; at MCS 20 with 64QAM only CP-OFDM works.
Figure 10.1b — DFT-s-OFDM = OFDM + one extra DFT that makes it single-carrier-like
The green DFT is the whole difference from CP-OFDMbits / QAMDFTspread M-ptsubcarrier mapIFFT+ CP⇑ RFRemove the DFT block → plain CP-OFDM. Keep it → low-PAPR DFT-s-OFDM for cell-edge uplink.
Figure 10.1b. DFT-s-OFDM (transform precoding) inserts an M-point DFT before the subcarrier mapping. That pre-spreading makes the time-domain waveform behave like a single carrier — far lower peak-to-average power — at the cost of giving up per-subcarrier flexibility. It is the uplink waveform of choice when the UE is power-limited at the cell edge.
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:

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:

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).
Figure 10.3b — DMRS Type 1 (comb) vs Type 2 (blocks): more ports vs more data
Type 1 · comb-2 · ≤8 portsType 2 · 2-SC blocks · ≤12 portsSame idea as PDSCH-DMRS: trade DMRS density for orthogonal layers12 subcarriers shown · coloured = DMRS RE · Type 2 leaves more REs for data, supports more layers.
Figure 10.3b. Uplink DMRS comes in two layouts. Type 1 places pilots on every other subcarrier (a comb), giving up to 8 orthogonal ports. Type 2 uses pairs of adjacent subcarriers in blocks, freeing more REs for data and supporting up to 12 ports. The choice trades channel-estimation density against data capacity and layer count.
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:

WaveformPT-RS patternDensity control
CP-OFDM PT-RS1 RE per KPT-RS RBs, every LPT-RS symbols, on one portSame MCS-threshold + RB-threshold logic as PDSCH PT-RS (Sec. 8.7).
DFT-s-OFDM PT-RSK' samples per group, 2/4/8 groups across the allocationConfigured 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.
Figure 10.4b — PUSCH PT-RS: phase tracking that rides the uplink waveform
CP-OFDM PUSCHPT-RS like downlink (time-dense)DFT-s-OFDM PUSCHPT-RS pre-DFT, spread with dataSame job as DL PT-RS, but placement depends on the waveformDFT-s-OFDM inserts PT-RS chunks before the transform so they survive the spreading.
Figure 10.4b. Uplink PT-RS tracks the same common phase error as downlink (Fig 8.7b), but its placement depends on the waveform. For CP-OFDM PUSCH it's mapped like downlink PT-RS. For DFT-s-OFDM it's inserted as chunks before the transform precoding, so after spreading the receiver can still extract the phase reference.
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:

ModeWhere hop occursHop pattern
Intra-slot hoppingFirst half of the symbols use RB_start; second half uses (RB_start + RB_offset) mod N_BWPOne hop per slot.
Inter-slot hoppingEven slots use RB_start; odd slots use (RB_start + RB_offset) mod N_BWPOne 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.
Figure 10.2 — Intra-slot vs inter-slot frequency hopping
Intra-slot Inter-slot freq time within slot → half 1 · RB_start half 2 · +offset slot 0 slot 1 slot 0 · RB_start slot 1 · +offset
Figure 10.2. Intra-slot hopping jumps mid-allocation; inter-slot hopping jumps between slots. Diversity gain ~3 dB in frequency-selective fading at the cost of more complex DMRS placement (each hop carries its own DMRS).

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:

ModeIndicated byUE behaviour
Codebook-basedTPMI (Transmitted Precoding Matrix Indicator) + SRI in DCI 0_1/0_2UE picks precoder W from the fixed TS 38.211 §6.3.1.5 codebook (size depends on ports, layers & codebookSubset — see below).
Non-codebook-basedSRI 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:

PortsLayers νnonCoherentpartial&NonCoherentfull&partial&NonCoherent (all)
2126 (TPMI 0–5)
2213 (TPMI 0–2)
4141228 (TPMI 0–27)
4261422 (TPMI 0–21)
43357 (TPMI 0–6)
44235 (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.
Figure 10.6b — Uplink precoding: codebook (gNB picks) vs non-codebook (UE's own SRS)
CodebookUE sends SRSgNB picks TPMIfrom codebookDCI signals TPMI+ SRIUE applies WNon-codebookUE sends SRS(≥2 ports)gNB computes WTDD reciprocityDCI signals SRI(which beams)UE appliesits own SRS W
Figure 10.6b. Two ways the uplink gets a precoder. Codebook mode: the gNB chooses a precoder from a fixed catalogue and signals its index (TPMI) in the DCI. Non-codebook mode: the UE forms candidate precoders from its own SRS, the gNB (using TDD reciprocity) tells it which SRS resources (SRIs) to use — finer, but TDD-dependent.
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 pieceBit count formula (essence)Placement
HARQ-ACKQ'ACK = ⌈OACK·βoffsetHARQ-ACK·L · NRE·R / GUL-SCHSymbols immediately after the front-loaded DMRS
CSI Part 1Q'CSI-1 with βoffsetCSI-1Spread across remaining PUSCH symbols
CSI Part 2Q'CSI-2 with βoffsetCSI-2Lowest 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.
Figure 10.7b — UCI riding on PUSCH: ACK punctures, CSI is rate-matched
Control and data share the same PUSCH grantPUSCH dataDMRSHARQ-ACK (punctures)CSI (rate-matched)
Figure 10.7b. When the UE has both data and control to send, UCI multiplexes onto the PUSCH. HARQ-ACK is mapped right after the front-loaded DMRS and punctures data (overwrites those REs) so it is never dropped; CSI is rate-matched around the data (data is encoded to fit the space left). The split protects the most time-critical bits.
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:

TypeConfigured byActivationUse case
Type 1RRC fullyRRC reconfigurationVoNR, deterministic IIoT
Type 2RRC + DCI activateDCI 0_1 with CS-RNTIBursty 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.

Figure 10.8b — Configured grants: periodic uplink with no per-slot DCI
Type 1RRC configures everything→ UE just transmits on schedulezero DCI, lowest latencyType 2RRC sets params, DCI activates→ on/off without re-configflexible activationPre-granted periodic resources — the UE sends without asking each time
Figure 10.8b. A configured grant gives the UE pre-allocated periodic uplink resources so it can transmit without a per-transmission DCI — cutting the scheduling-request round-trip. Type 1 is fully RRC-configured (transmit on schedule immediately); Type 2 is RRC-configured but switched on/off by a DCI, trading a little latency for flexibility.
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.

SchemeReleaseGranularityIdea
Repetition Type ARel-15Whole slotK repetitions in K consecutive slots, same symbol allocation each slot; RV cycles 0,2,3,1. Set by numberOfRepetitions / pusch-AggregationFactor.
Repetition Type BRel-16Mini-slotBack-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.
TBoMSRel-17Multi-slotOne transport block mapped over multiple slots → lower effective code rate without per-slot CRC overhead.
DMRS bundlingRel-17Across repsMaintain 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.
Figure 10.9 — PUSCH repetition Type A (slot-aligned) vs Type B (back-to-back)
PUSCH repetition for coverage: Type A (slot-aligned) vs Type B (back-to-back)Type A1 rep / slotRV0slot 0RV2slot 1RV3slot 2RV1slot 3same symbolseach slotType Bback-to-backslot boundaryrep1rep2rep3arep3brep4nominal rep split → 2 actual repsType A repeats whole slots (low complexity); Type B packs mini-slot reps back-to-back and splits any that cross a slot edge (lower latency).
Figure 10.9. Type A repeats the same symbol allocation in K consecutive slots, cycling the redundancy version each time — simple, but coarse and slot-bound. Type B places mini-slot repetitions back-to-back for lower latency, splitting any "nominal" repetition that would cross a slot boundary or hit an invalid (e.g. DL/flexible) symbol into shorter "actual" repetitions. Both feed the receiver more energy per transport block; Rel-17 DMRS bundling lets it combine them coherently.
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
  1. 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.
  2. NRE' = 12·12 − 12 − 0 = 132 per RB. Capped at 132 (< 156). NRE = 132·20 = 2640.
  3. Ninfo = 2640 · (490/1024) · 4 · 1 = 5,053 bits.
  4. Ninfo > 3824: n = ⌊log₂(5,029)⌋ − 5 = 12 − 5 = 7; Ninfo' = max(3840, 128·round(5,029/128)) = max(3840, 128·39) = 4,992.
  5. R > 0.25 and Ninfo' ≤ 8424 → C = 1. TBS = 8·⌈(4,992+24)/8⌉ − 24 = 8·627 − 24 = 4,992 bits.
  6. 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.
  7. 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.
  8. PUSCH transmitted on UE's allocated PRBs; gNB demodulates using SRS-derived channel estimate + PUSCH-DMRS.

10.11 Rel-17 / Rel-18 Deltas

10.12 Field-Engineering Notes

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

FormatLengthUCI bitsWaveform / multiplexing
01–2 sym (short)1–2Cyclic-shift sequence selection — no modulation, no DMRS
14–14 sym (long)1–2Long version of 0; time-domain OCC → many UEs per PRB
21–2 sym (short)≥3 (typ. ≤11)QPSK on PRBs; DMRS every 3rd subcarrier; no CDM
34–14 sym (long)≥3, large CSIDFT-s-OFDM (π/2-BPSK or QPSK); single-UE
44–14 sym (long)≥3DFT-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).
Figure 11.1 — PUCCH format chooser: payload vs duration
Pick the format from (payload bits, duration)duration → 1–2 sym (short) | 4–14 sym (long)UCI bits ↑Format 0 · ≤2 bitsFormat 1 · ≤2 bits (long, coverage)Format 2≥3 bits · shortQPSKFormat 3 · ≥3 bits, longDFT-s-OFDM · no UE-mux · large CSIFormat 4 · long + OCC multiplex (2 or 4 UEs)short PUCCHlong PUCCH
Figure 11.1. Choose by (payload size, duration). Tiny payloads use Format 0 (short) or 1 (long); medium-to-large use 2 (short) or 3/4 (long). Format 4 is the only one that lets multiple UEs share the same PUCCH resource, via length-2 or length-4 orthogonal cover codes.

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).

Figure 11.2 — Format 0: the cyclic shift itself is the message
Format 0: the cyclic shift of one base sequence IS the messageACK = shift 0NACK = shift 6How the gNB reads it• UE sends a length-12 low-PAPR seq, shifted by α• gNB correlates against all 12 candidate shifts• strongest peak → which shift → ACK/NACK/SR• 1–2 symbols, no DMRS — the fastest ACK in NR
Figure 11.2. Format 0 modulates no bits — it transmits a constant-amplitude base sequence rotated by one of several cyclic shifts, and the shift encodes the 1–2 bit HARQ-ACK/SR. The gNB recovers it by finding which shift correlates strongest — sequence detection that works at very low SNR in one or two symbols, with no separate DMRS.
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 LadditionalDMRS=falseadditionalDMRS=true
4sym 1sym 0, 2
6, 7sym 1, 4same
8sym 1, 5sym 1, 4, 7
10sym 2, 7sym 1, 3, 6, 8
12sym 2, 8sym 1, 4, 7, 10
14sym 3, 10sym 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.
Figure 11.3 — Long PUCCH alternates DMRS and UCI through the slot
Long PUCCH (Format 3/4): DMRS interleaved with UCI so the estimate tracks the slotUCIDMUCIDMUCIDMUCIDMUCIDMUCIDMUCIDMMore DMRS = better estimate under Doppler; fewer UCI REs = less payload — a coverage knob (additionalDMRS).
Figure 11.3. A long PUCCH (Format 3/4) interleaves DMRS and UCI symbols so the receiver tracks the channel as it changes across the slot — vital for cell-edge UEs whose long transmissions span fading. More DMRS buys a better estimate under Doppler at the cost of payload (the additionalDMRS knob).

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.

Figure 11.4 — The three HARQ-ACK codebooks
HARQ-ACK codebook: how many ACK bits the UE reports, and how it stays alignedType 1 · semi-staticSize fixed by RRC(TDD pattern × K1 set × CCs)UE always sends that many bits— NACK for unscheduled+ robust to a missed DCI− wastes bits when lightly loadedType 2 · dynamicSize follows actual grantsuses DAI in DCI 1_x:• C-DAI = running count• T-DAI = total so farkeeps UE+gNB aligned if aDCI is missed (2-bit, mod 4)Type 3 · one-shot (Rel-16)One request → feedback forALL HARQ processes at oncetriggered by a DCI flagrecovery / NR-U after LBT gapscatches up missed ACKsheaviest but most complete
Figure 11.4. Type 1 (semi-static) fixes the report size by RRC from the TDD pattern, the set of K1 feedback timings, and the carriers — the UE always sends that many bits (NACK for unscheduled occasions), so a missed DCI cannot desynchronise it. Type 2 (dynamic) sizes the report to the PDSCH actually scheduled, using the Downlink Assignment Index in the DCI to keep both ends counting together. Type 3 (Rel-16) requests one-shot feedback for every HARQ process at once — a recovery tool for NR-U and error cases.

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.

Figure 11.5 — The ACK resource is derived from where the grant was found
Where to send the ACK falls out of where the grant was foundPDCCHfirst CCE n_CCEimplicit formular = f(n_CCE, ΔARI)PUCCH resource rin the configured setBefore dedicated config, the first CCE picks one of 16 cell-common resources (pucch-ResourceCommon, SIB1).
Figure 11.5. The UE is not told outright which PUCCH resource to use for a HARQ-ACK. It computes it from the first CCE index of the PDCCH that scheduled the data, adjusted by the 3-bit ARI/PRI field in the DCI. This implicit mapping spends no extra signalling on every grant; before dedicated config it selects one of 16 cell-common resources from SIB1.

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.

Figure 11.6 — Slot repetition (coverage) vs sub-slot PUCCH (latency)
Two coverage/latency tools: slot repetition vs sub-slot PUCCHRepetitioncoveragePUCCHslot 0PUCCHslot 1PUCCHslot 2PUCCHslot 3nrofSlots=4Sub-slotURLLC (Rel-16)ACKACKACKACK2-sym sub-slotsRepetition stacks the SAME PUCCH across slots for energy; sub-slot gives several HARQ opportunities WITHIN one slot for low latency.
Figure 11.6. Repetition sends the same long-PUCCH resource over nrofSlots ∈ {2,4,8} consecutive UL slots so the gNB accumulates energy — a coverage tool for the cell edge. Sub-slot PUCCH (Rel-16) divides a slot into 2-symbol or 7-symbol sub-slots, giving several HARQ-ACK opportunities within one slot — a latency tool for URLLC, where waiting a whole slot for the next PUCCH would blow the budget.
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 sizeEncodingNotes
1 bitRepetition (BPSK) / sequenceVia sequence selection in Formats 0/1
2 bitsSimplex / sequenceAlso via sequence selection
3–11 bitsReed–Muller (32, O)TS 38.212 §6.3.1.2
12+ bitsPolar (+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.
Figure 11.7 — Which code protects UCI depends on its size
Tiny payloads use trivial codes; big ones use polar1–2: repetition / seq3–11: Reed–Muller12+: polar (CRC-aided)UCI payload size (bits) →
Figure 11.7. 1–2 bits get repetition/sequence selection (cheapest), 3–11 bits a Reed–Muller block code, and 12+ bits CRC-aided polar — the same family PDCCH uses, so one decoder serves both. The decode cost is matched to the payload, so a 1-bit ACK never pays for a polar decoder.

11.8 Worked Example — 4-bit HARQ-ACK on Format 2

Format 2 carrying a small Type-2 codebook
  1. 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).
  2. PRI in DCI = 2 → PUCCH-Resource id 4 in Set 1: Format 2, PRB 80, 1 PRB, 1 symbol, start symbol 12.
  3. 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.
  4. Rate-match 32 → 16, QPSK → 8 PUCCH REs; DMRS on k ∈ {1,4,7,10}.
  5. Scramble cinit = (nRNTI·215 + NID) mod 231; QPSK-map.
  6. 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

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:

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.
Figure 12.1 — 4-step RACH timeline
UE gNB Msg1 · Preamble PRACH · 1 of 64 IDs Msg2 · RAR PDSCH · RA-RNTI · TC-RNTI + TA + grant Msg3 · RRC req PUSCH · TC-RNTI · UE-identity Msg4 · Contention res PDSCH · TC→C-RNTI promotion Total latency: 10–20 ms typical for initial access.
Figure 12.1. The four messages of 4-step RACH. Msg1 is the only one the UE sends without any uplink scheduling — the rest fall back to normal scheduled PUSCH/PDSCH. If multiple UEs pick the same preamble in Msg1, Msg4 resolves the contention by addressing exactly one of them (the others detect the mismatch and back off).
Figure 12.1b — What each of the four RACH messages actually carries
UE → gNBgNB → UEMsg1preamble (1 of 64)Msg2RAR: TA + UL grant + TC-RNTIMsg3RRCSetupRequest + UE idMsg4contention resolution (echo id)Msg2 gives the UE its timing advance; Msg4 resolves which UE "won" a contended preamble.
Figure 12.1b. The 4-step handshake's content: Msg1 is just a preamble choice; Msg2 (RAR) returns a timing advance, an uplink grant for Msg3, and a temporary RNTI; Msg3 carries the actual RRC request with a UE identity; Msg4 echoes that identity back so a UE knows whether it won the contention or must back off and retry.
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.

Step2-step contentChannel
MsgAPreamble + PUSCH payload (RRC request + small data)PRACH + PUSCH back-to-back
MsgBRAR with contention resolution + C-RNTI assignmentPDSCH 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.

Figure 12.3b — 2-step RACH collapses four messages into two
4-stepMsg1 preambleMsg2 RARMsg3 RRCReqMsg4 contention res.2-stepMsgA preamble + payloadMsgB RAR + resolutionMsgA bundles the preamble with the payload that Msg3 used to carry → one round-trip saved.
Figure 12.3b. Classic 4-step RACH needs two full round-trips (preamble→RAR, then RRC request→contention resolution). 2-step RACH bundles the preamble and the Msg3 payload into a single MsgA, and the gNB answers with MsgB — halving the handshake latency when the UE already has a valid timing estimate.
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.

FormatLRASequence lengthSCSCP durationMax cell radius
08391 OFDM symbol1.25 kHz103 μs~15 km
18392 symbols (rep)1.25 kHz684 μs~100 km
28394 symbols (rep)1.25 kHz153 μs~22 km
38394 symbols (rep)5 kHz103 μs~14.5 km (high-speed)
A1 – A31392, 4, 6 symbols15/30/60/120 kHz2–17 μssmall/mid cell
B1 – B41392, 4, 6 symbols15/30/60/120 kHz3–47 μssmall/mid cell, longer GP
C0, C21391, 4 symbols15/30/60/120 kHzlongerlarge 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.
Figure 12.4b — Long vs short PRACH preamble formats
Long (L_RA=839)CPZC sequence (×1–4)GT1.25/5 kHz SCS · big cells (up to ~100 km)Short (L_RA=139)seqseqseq15–120 kHz SCS · small cells, FR2, fits a slotCell size + numerology pick the formatLong CP + guard time tolerate the big round-trip of a large cell; short formats repeat the sequence for beam sweeping.
Figure 12.4b. Long PRACH formats use an 839-sample Zadoff-Chu sequence at 1.25/5 kHz spacing with a long cyclic prefix and guard time — built to absorb the multi-microsecond round-trip of large cells. Short formats use a 139-sample sequence at NR data numerologies, repeat it several times for beam sweeping, and fit neatly inside a slot — the FR2 / small-cell choice.
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.

Figure 12.2 — 64 preambles from cyclic shifts of one Zadoff-Chu root
Root u = 53 · cyclic shifts produce 64 orthogonal sequences shift 0 shift 1 shift 2 shift 62 shift 63 Why this works • Constant amplitude → 0 dB PAPR → max UE TX power • Cyclic shifts of one root are perfectly orthogonal • gNB correlator separates 64 simultaneous preambles cleanly • Multipath delay spread < cyclic-shift step → no collision
Figure 12.2. A single Zadoff-Chu root can produce 64 distinct cyclic shifts, each orthogonal to every other. The shift step is determined by the channel's expected delay spread — too small a step and multipath replicas of one preamble look like a different preamble; too large and you waste preamble capacity. zeroCorrelationZoneConfig picks the step that matches your cell radius.

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.

restrictedSetConfigUseEffect
unrestrictedStatic / low mobilityAll cyclic shifts usable — maximum preambles per root
restricted Type AHigh speed (≈ up to ~250–350 km/h)Removes the shifts a moderate Doppler would alias into
restricted Type BVery 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.
Figure 12.6 — Why high speed needs restricted cyclic-shift sets
Doppler makes a Zadoff-Chu shift alias — restricted sets blank the dangerous shiftsunrestricted + Dopplertrue peakDoppler ghostghost peak looks like another UE’s shift → false alarmrestricted setaliased shifts removed → fewer per root, more roots needed
Figure 12.6. A Doppler shift turns one Zadoff-Chu correlation peak into the true peak plus a displaced ghost. If a ghost lands on another UE’s cyclic-shift position, the gNB cannot tell them apart. Restricted sets (Type A for high speed, Type B for very high speed) simply forbid the cyclic shifts that would be aliased — trading preamble capacity for robust detection. The cost is fewer preambles per root, so more root sequences are consumed to reach 64.
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:

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."

Figure 12.6b — RACH occasions: a grid of preamble opportunities in time and frequency
msg1-FDM in frequency × RACH occasions in time = total capacityROROROROROROROROROROROROmsg1-FDM (freq)RACH occasions in time (within the period) →
Figure 12.6b. The PRACH configuration lays out a grid of RACH occasions — several frequency-multiplexed ROs (msg1-FDM) at each of several time positions within the configured period. Total RACH capacity is occasions × preambles-per-occasion; raising either is how an operator survives a RACH storm (Ch.26 Case 3).
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.
Figure 12.7b — SSB-to-RO association: the preamble's slot tells the gNB which beam you heard
UE transmits in the RO mapped to its best SSB beamSSB 0SSB 1SSB 2SSB 3RACH Occasion 0preambles for SSB 0RACH Occasion 1preambles for SSB 1RACH Occasion 2preambles for SSB 2RACH Occasion 3preambles for SSB 3ssb-perRACH-Occasion sets the ratio; here 1 SSB → 1 RO.
Figure 12.7b. Each SSB beam is associated with specific RACH occasions. The UE measures the SSBs, picks the strongest, and sends its preamble in that SSB's RACH occasion. So the very choice of when/where the preamble lands tells the gNB which downlink beam the UE can hear — letting it answer Msg2 on the right beam.
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.
RA-RNTI Calculator live · TS 38.321 §5.1.3
RA-RNTI = 1  hex = 0x0001
1 + 0 + 14·0 + 14·80·0 + 14·80·8·0 = 1
Figure 12.8b — RA-RNTI: the preamble's time/frequency slot becomes its reply address
RO indicess_id, t_id, f_id, ulRA-RNTI = 1 + s_id + 14·t_id+ 14·80·f_id + 14·80·8·ulWhere you sent the preamble determines how Msg2 is addressed to youThe UE computes the same RA-RNTI and watches PDCCH for a DCI scrambled with it.
Figure 12.8b. The UE isn't given an address before Msg2 — it derives one. The RA-RNTI is computed from the time and frequency indices of the RACH occasion the UE used (symbol, slot, FDM index, UL-carrier). Both ends compute the same value, so the UE knows exactly which PDCCH to watch for its random-access response.
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).
Figure 12.3 — Power ramp across PRACH attempts (Δ = 2 dB)
TX power (dBm) Attempt number −10 1 −8 2 −6 3 −4 4 −2 5 0 6 +2 7 +4 (P_CMAX) 8 After preambleTransMax attempts, the UE gives up → RA failure → RRC reports problem.
Figure 12.3. A typical power-ramp profile. Most UEs succeed on attempt 1 or 2; attempts 5+ indicate poor coverage or RO contention. The first attempt's power is based on the UE's SS-RSRP measurement plus the gNB's target, so it should usually be close — large powerRampingStep × many attempts means the gNB and UE disagreed about either the path loss or the target.

12.11 Worked Example — UE finds n78, sends preamble #17, gets RAR

RACH end-to-end
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. UE applies TA, transmits Msg3 (RRC Setup Request) on the granted PUSCH with TC-RNTI 0x4660.
  8. 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

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.

SignalCarried withPurpose
DMRS-ULPUSCH (Ch. 10) and PUCCH (Ch. 11)Demodulation pilots; vanish when the data channel does
SRSDedicated SRS resourcesStand-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.

UsageJobTriggered by
codebookCodebook-based PUSCH precoder training (TPMI)DCI 0_1 SRI
nonCodebookNon-codebook PUSCH precoder (UE forms its own)DCI 0_1 SRI
beamManagementUplink beam refinement (the UL analogue of P2/P3)DCI / MAC-CE
antennaSwitchingSweep Tx antennas so the gNB sees the full DL channelRRC + 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.
Figure 13.1 — One SRS, four jobs: the usage field decides
SRS-ResourceSet.usage decides what the sounding feedscodebookTPMI selection (closed-loop)nonCodebookUE's own SRS-derived precodersantennaSwitchingfill the DL channel columnsbeamManagementrefine the uplink beamSame physical sounding signal; four jobs depending on configuration.
Figure 13.1. SRS is not a single thing — its usage tells the gNB what to do with the sounding: choose a codebook precoder, derive a non-codebook precoder, switch transmit antennas to complete the DL channel matrix, or refine an uplink beam. The same physical signal serves all four.
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.

Figure 13.2 — Comb K_TC=4: four frequency-interleaved sounders
SRS comb K_TC=4: four frequency-interleaved sounders in one symboloff 0off 1off 2off 3Each offset takes every 4th subcarrier; × up to 8–12 cyclic shifts → dozens of orthogonal SRS per RB.
Figure 13.2. Four comb offsets, each taking every fourth subcarrier; combined with up to 8–12 cyclic shifts of the base sequence, one OFDM symbol carries dozens of orthogonal SRS — enough to sound a whole micro-cell at once. The comb (frequency) and cyclic shift (code) are independent orthogonality axes, so the capacities multiply.
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

TypeTriggerUse
PeriodicRRC config, every periodAlways-on UL CSI for TDD reciprocity
Semi-persistentMAC-CE on/offMobility-driven UL CSI, toggled with load
AperiodicDCI 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.
Figure 13.3 — Three trigger modes
Three trigger modes — overhead vs freshnessPeriodicRRC · always-onSemi-persistentMAC-CE on/offAperiodicDCI one-shot (2-bit req)Aperiodic is the low-overhead default for TDD reciprocity — sound only when a fresh precoder is needed.
Figure 13.3. SRS can be periodic (RRC, always-on), semi-persistent (toggled by MAC-CE), or aperiodic (a one-shot DCI request). Aperiodic SRS is the low-overhead default for reciprocity: the gNB sounds only when it needs a fresh precoder, rather than paying periodic overhead forever.

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.

Figure 13.4 — Antenna switching: one Tx chain sounds each antenna in turn
Antenna switching: one Tx chain sounds each antenna in turn1 TxchainSRS res 0 → ant 0SRS res 1 → ant 1SRS res 2 → ant 2SRS res 3 → ant 3supportedSRS-TxPortSwitch (TS 38.214 §6.2.1.2)t1r1 · t1r2 · t2r2 · t1r4 · t2r4 · t4r4 …xTyR = x Tx chains, y Rx antennas — cheap UEs have x < ya guard symbol is needed while the chain switches (~causes 1 lost symbol)
Figure 13.4. A 1T4R UE has one transmit chain but four receive antennas; it cannot sound all four simultaneously. Antenna switching sends a separate SRS resource through each antenna in sequence, so the gNB reconstructs the full 4-column downlink channel. The supported patterns (supportedSRS-TxPortSwitch: t1r1, t1r2, t2r2, t1r4, t2r4, t4r4, …) are a UE capability; switching the chain costs a guard symbol.
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.

Figure 13.5 — Positioning SRS: a staggered comb covers every subcarrier
Positioning SRS: a staggered comb sounds every subcarrier over several symbolssym 0sym 1sym 2sym 3sym 4sym 5The offset shifts each symbol → the union covers all subcarriers → fine delay resolution for UL-TDOA / multi-RTT.
Figure 13.5. A positioning SRS increments its comb offset each symbol, so although any single symbol is sparse, the union across symbols samples the whole band. That dense effective sampling sharpens the time-of-arrival estimate the positioning engine needs for UL-TDOA / multi-RTT. Neighbour TRPs also measure this same SRS, which is how the network triangulates the UE.
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.

Figure 13.6 — SRS carrier switching: sound a DL-only carrier
SRS carrier switching: borrow the Tx chain to sound a DL-only carrierCarrier 1 (PCell, has UL)PUSCH / SRSCarrier 2 (SCell, DL-only TDD)SRS (switched)UE momentarily switches its Tx to Carrier 2gNB gets UL sounding (hence DL reciprocity precoding) on a carrier that has no uplink — at the cost of a brief Tx interruption.
Figure 13.6. The UE normally transmits on the carrier that has uplink (left). With SRS carrier switching it briefly retunes a Tx chain to the DL-only secondary carrier (right) to send SRS, giving the gNB the uplink sounding it needs for downlink precoding there. The cost is a short interruption of uplink on the original carrier while the chain switches.
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
  1. UE configured with an SRS-ResourceSet (usage = nonCodebook) of 4 SRS resources, each 1 port, KTC=4, 1 symbol, 24-RB bandwidth.
  2. The UE precodes each SRS resource with a different candidate precoder it derived from its CSI-RS-based DL channel estimate.
  3. The gNB measures all four soundings, ranks by Rx SINR, and sends DCI 0_1 with SRI = the best resource index.
  4. The UE reuses that resource's precoder for the next PUSCH — no codebook lookup needed.
  5. Periodic SRS every 80 slots (40 ms at µ=1) refreshes the precoder as the channel drifts.

13.10 Field-Engineering Notes

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.

UseWhat changesWhat you gain
Tx diversitySame data, different antenna ports~3 dB / 6 dB SNR vs 1 antenna
Spatial multiplexingNL different data streams (layers)Up to NL× the data rate, at the cost of needing Nr ≥ NL at the receiver
BeamformingSame data, weighted across antennas to form a directional beam10·log10(Nt) dB SNR if pointed correctly
MU-MIMODifferent layers go to different UEs simultaneouslyCell 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.
Figure 14.1b — Three ways to spend antennas: reliability, rate, or reach
Diversity same data, 2 paths → reliability Spatial multiplexing 2 streams → 2× rate Beamforming focused energy → +10log(N) dB
Figure 14.1b. Multiple antennas buy three different things. Diversity sends the same data over independent fading paths for reliability. Spatial multiplexing sends different streams at once for rate. Beamforming weights the antennas to focus energy in one direction for signal strength. NR routinely uses all three in the same slot.
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.
Figure 14.1c — MU-MIMO: same time & frequency, separated by direction
gNB array UE A UE B θ separation Both UEs use the same RBs in the same slot — the precoders aim each layer so the other UE sees a null.
Figure 14.1c. Multi-user MIMO co-schedules two (or more) UEs on the identical time-frequency resources, separating them purely by spatial direction. The gNB picks precoders that maximise each UE's signal while placing a null toward the other. Cell capacity then scales with the number of UEs it can keep spatially apart.
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:

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
Figure 14.2b — From codeword to antenna: layers, precoder, ports
Coding fills codewords · layer map splits streams · W aims them · ports carry DMRS codeword(s)1–2 TBslayer mapν layersprecoder Wν → N_pantenna portsDMRS-definedantennasphysical 1 codeword for ν≤4 layers, 2 codewords for ν=5–8 · the precoder W is what the PMI selects.
Figure 14.2b. The MIMO transmit chain. A transport block (codeword) is split by the layer mapper into ν parallel streams; the precoder matrix W (ν inputs, Np outputs) maps those layers onto antenna ports; and the ports — each defined by its DMRS — drive the physical array. The UE's reported PMI is exactly the index of the W the gNB should use.
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.

Figure 14.3 — Analog vs digital vs hybrid beamforming
Three ways to build a beam — cost vs flexibilityAnalogRFphase shifters on RFONE beam per panel at a timecheap, low power→ needs beam sweeping (SSB)Digital1 RF chain per elementper-subcarrier precodingmany beams + MU-MIMO→ FR1 massive MIMO (32/64T)Hybridfew RF chains, many elementsanalog steers, digital precodesbalance of both→ FR2 mmWave reality
Figure 14.3. Analog beamforming applies phase shifters in the RF path, forming one beam per panel at a time — cheap and low-power, but it must sweep beams in time (the reason SSB beam-sweeps). Digital beamforming gives every element its own RF chain, enabling per-subcarrier precoding and many simultaneous beams / MU-MIMO — the FR1 massive-MIMO approach (32–64 TRX), at high cost and power. Hybrid uses a few RF chains feeding many elements through analog phase shifters: analog steers a coarse beam, digital precodes within it — the practical choice at FR2, where full-digital would need impossibly many converters.
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).

CodebookAntenna geometryPMI sizeGranularity
Type I single-panel(N1, N2) ∈ many, Xp = N1·N2·2 ports~6–10 bitsCoarse beams, oversampled DFT (O1, O2)
Type I multi-panelMultiple antenna panels at different positions~10 bitsCoarse beams + per-panel phase
Type IISame as Type I~40–600 bitsLinear combination of L beams (L ∈ {2, 3, 4}), per-RB amplitude + phase
Type II PortSelectionBeamformed CSI-RS~20–100 bitsUE selects from a port-set, no beam DFT
eType II (Rel-16)Same as Type IIHigher fidelity at lower overheadFrequency-domain compression
Rel-17 enhancedCoherent JT, mMIMOVariousMulti-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.
Figure 14.1 — Type I (coarse) vs Type II (fine) codebook
Type I · 1 DFT beam picked picked Type II · 4 beams combined w/ amp+phase a₁ e^jφ₁ a₂ e^jφ₂ a₃ e^jφ₃ a₄ e^jφ₄ Result is an arbitrary precoder, not a single direction
Figure 14.1. Type I: pick one of a discrete set of beam directions. Type II: linearly combine multiple beams with amplitude and phase coefficients — produces a much finer beam pattern, at much higher feedback overhead. Type II is what makes Massive MIMO MU-MIMO work; Type I is the SU-MIMO default.

14.5 CSI Reporting — RI, PMI, CQI

The UE feeds back three quantities to drive scheduling:

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.

Figure 14.4b — The three CSI numbers the UE feeds back
RIhow many layersPMIwhich precoderCQIwhich MCSschedulerDL grantRI → PMI → CQI, computed in that order, drive the next grantCQI assumes the reported RI and PMI — change either and the implied MCS no longer holds.
Figure 14.4b. The UE distils the channel into three feedback quantities, computed in dependency order: RI (how many spatial layers the channel supports), PMI (which codebook precoder to use), then CQI (the highest MCS that survives at that rank and precoder). The scheduler consumes all three to pick the next downlink transmission.
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:

ProcedureWhat's sweptReference signalWhere
P1gNB Tx beam (broad)SSB (Ch.6)Initial access, coarse beam picking
P2gNB Tx beam (refined)CSI-RS resource set with repetition=offBeam refinement after P1
P3UE Rx beamCSI-RS resource set with repetition=onUE sweeps its panels with the gNB beam fixed
Table 14.3 — Beam management procedures (TS 38.214 §5.1.6.1.5).
Figure 14.2 — P1 → P2 → P3 beam refinement
P1 · SSB coarse, ~30° beams P2 · CSI-RS, gNB Tx sweep refined, ~5–10° P3 · CSI-RS, UE Rx sweep UE refines its Rx beam
Figure 14.2. Three-stage beam refinement. P1 establishes the rough direction during initial access. P2 narrows the gNB's beam by sweeping a CSI-RS set (with repetition off, so each resource is a different beam). P3 has the gNB hold its beam steady while the UE sweeps its Rx beam (with repetition on, so all resources are the same beam) — refining the UE's panel.

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 TypeShared parametersUse
ADoppler shift, Doppler spread, average delay, delay spreadFull coherent channel model — fine timing/freq from TRS
BDoppler shift, Doppler spreadFor tracking when only Doppler is relevant
CDoppler shift, average delayCoarse, for initial acquisition
DSpatial Rx — beam direction at the UEFR2 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.

Figure 14.6b — A TCI state: "borrow timing from the TRS, borrow the beam from this SSB"
TCI state applied to PDSCH/PDCCH DMRS QCL-Type A → TRS Doppler · delay · avg delay · spread → fine time/freq tracking QCL-Type D → SSB #3 spatial-Rx parameter → which Rx beam to point The UE applies both: it tunes its tracking loops from the TRS and steers its receive beam from SSB #3.
Figure 14.6b. A TCI state tells the UE how to receive a channel by declaring its DMRS quasi-co-located with reference signals it already knows. A typical state chains two: QCL-Type A with a TRS (for fine timing and frequency) and QCL-Type D with an SSB (for the receive-beam direction). The UE applies both at once.
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.

Figure 14.8 — Beam correspondence and the unified TCI pool
Beam correspondence + unified TCI: one beam serves both directionsgNBUEDL: UE finds best Rx beamUL: UE reuses it as Tx beambeam correspondence — no separate UL beam trainingUnified TCI (Rel-17)one TCI pool for PDCCH/PDSCH/PUCCH/PUSCHPDCCHPDSCHPUCCHPUSCHjoint TCI = one beam DL+UL · separate = DL/UL splitMAC-CE activates, DCI indicates — far less beam-indication overhead
Figure 14.8. Left: with beam correspondence the UE reuses its best downlink receive beam as its uplink transmit beam, skipping uplink beam training. Right: Rel-17 unified TCI replaces per-channel beam indication with one shared pool for PDCCH/PDSCH/PUCCH/PUSCH — joint (one beam both directions) or separate (DL/UL split) — activated by MAC-CE and selected by DCI, slashing beam-indication overhead.
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:

  1. UE detects beam failure (Qout threshold on configured BFD-RS).
  2. UE scans candidate beams (SSBs and/or CSI-RS) from candidateBeamRSList.
  3. UE picks the strongest beam > Qin threshold.
  4. UE sends a PRACH preamble dedicated to that candidate (PRACH-Resource configured per BFR), or uses Msg1 of normal RACH if no dedicated resource.
  5. 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.

Figure 14.7b — Beam-failure recovery, step by step
Lose the beam → find a new one → tell the gNB — all in tens of ms 1 · DetectBLER > Q_out2 · Scancandidate SSB/CSI-RS3 · Pickbest > Q_in4 · PRACHdedicated preamble5 · New TCIgNB switches beamno candidate > Q_in→ RLF → RRC re-establish
Figure 14.7b. When the serving beam's quality collapses, the UE doesn't wait for radio-link failure. It detects the failure on the BFD reference signal, scans the configured candidate beams, picks one above the Q_in threshold, signals it with a dedicated PRACH preamble, and the gNB replies with a new TCI state. Only if no candidate beam is good enough does it fall through to full RLF.
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
  1. 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).
  2. gNB maps PMI 3-1-0 to a specific 4×2 precoder W from TS 38.214 Table 5.2.2.2.1-1.
  3. gNB schedules PDSCH with 2 layers, 64QAM, MCS 17, on 4 antenna ports {1000, 1001, 1002, 1003}.
  4. UE demodulates using 4 DMRS ports (Type 1, 2 CDM groups w/o data), applies the channel inverse + precoder reverse to recover 2 layers.
  5. If link quality drops (CQI from periodic CSI falls), gNB drops to RI=1 with a 1-layer precoder next slot.
Figure 14.8b — A 4×4 MIMO grant, end to end
From a CSI-RS measurement to a 2-layer 64-QAM PDSCH4-port CSI-RSmeasureRI=2rank 2PMI→W4×2 precoderPDSCH: 2 layers · 64QAM · MCS17If quality drops next report, the gNB falls back to RI=1 with a 1-layer precoder.
Figure 14.8b. A concrete 4×4 example: the UE measures a 4-port CSI-RS, reports rank 2, picks a Type-I PMI that the gNB maps to a 4×2 precoder W, and gets a PDSCH of 2 layers at 64-QAM (MCS 17) on four antenna ports. The UE demodulates with 4 DMRS ports and inverts the channel + precoder to recover the two layers.
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.
Figure 15.1 — The closed CSI loop
Measure → report → adapt → repeat, every 4–320 slotsgNBtransmitCSI-RSUEmeasurechannelUEcomputeRI/PMI/CQIUEreportPUCCH/PUSCHgNBadaptMCS/precoderthe gNB schedules the next PDSCH from the report — then asks for a fresh one
Figure 15.1. CSI is a feedback loop, not a one-off message. The gNB sends pilots, the UE measures and returns rank, precoder and quality, and the gNB chooses the very next transmission from them — then asks again. The faster and more accurate the loop, the closer the link rides to the channel's true capacity.

15.2 CSI Quantities

QuantityBitsMeaning
CRI⌈log₂ KsCSI-RS Resource Indicator — which CSI-RS resource (beam) is best
RI⌈log₂ RmaxRank Indicator — recommended number of MIMO layers
LI⌈log₂ R⌉Layer Indicator — which layer carries the strongest reference
PMI~6–600Precoding Matrix Indicator — codebook entry (§15.5)
CQI4 / codewordChannel Quality Indicator — best MCS at the target BLER (§15.7)
L1-RSRP7 + 4·(K−1)Beam-level RSRP for the best K beams
L1-SINR7Beam-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.

Figure 15.2 — How the RRC IEs nest into one CSI report
From "what this UE must report" down to "which REs to measure"CSI-MeasConfigtop-level list of every CSI report for this UECSI-ReportConfigwhat to report · P/SP/A · PUCCH/PUSCHCSI-ResourceConfigbind resource sets to a purpose (CQI/beam/track)NZP-CSI-RS-ResourceSeta bundle of CSI-RS resourcesNZP-CSI-RS-Resourceone CSI-RS RE pattern (one 38.211 row)
Figure 15.2. CSI-MeasConfig is the master list; each CSI-ReportConfig says what/how to report and points at a CSI-ResourceConfig; that binds resource sets to a purpose; each set bundles resources; each resource is one concrete CSI-RS RE pattern. (A parallel chain configures the CSI-IM for interference.)

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).

Figure 15.3 — PMI codebooks: resolution vs feedback overhead
PMI codebooks: resolution vs feedback overheadType I1 beam per polarizationnormal resolutionlow feedback (≈ tens of bits)→ SU-MIMO, robustType IIlinear combo of L beamsamp + phase coefficientsHIGH resolutionlarge overhead → MU-MIMOeType II (Rel-16)Type II + DFT frequencycompression~Type II accuracyfar less overhead → FDD MU-MIMO
Figure 15.3. Type I reports a single dominant beam per polarization — tens of bits, robust, ideal for SU-MIMO. Type II reports a weighted linear combination of L beams with amplitude and phase coefficients — far higher spatial resolution for MU-MIMO, but hundreds of bits. Enhanced Type II (Rel-16) compresses Type II across frequency with a DFT basis, keeping most of the accuracy at a fraction of the overhead — the enabler for practical FDD MU-MIMO.
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.

Figure 15.4 — Wideband (one value) vs sub-band (one per group)
Wideband vs sub-band CSI: one number, or one per sub-bandWidebandone CQI / PMI for the whole bandSub-bandSB0SB1SB2SB3SB4SB5SB6SB7Sub-band size (4/8/16/32 PRB by BWP) lets the scheduler exploit a frequency-selective channel — at higher feedback cost.
Figure 15.4. A wideband report gives the gNB one CQI/PMI averaged over the band — cheap, but blind to frequency-selective fading. A sub-band report gives one value per group of PRBs, so the scheduler can exploit the good sub-bands and avoid the deep fades — at proportionally more feedback. The sub-band size is fixed by the BWP bandwidth (TS 38.214 Table 5.2.1.4-2).

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).

Figure 15.5 — CQI: a 4-bit index → (modulation, code rate) at a target BLER
CQI: a 4-bit index → (modulation, code rate) at a target BLERCQI 1-4QPSK low-RCQI 5-9QPSK..16QAMCQI 10-1264QAMCQI 13-1564/256QAMTable 1/2/3 (38.214 §5.2.2.1)up to 64QAM · 256QAM · low-SEtarget BLER10% (default) · 10⁻⁵ (low-SE / URLLC table)CQI = "the highest MCS I could decode at the target BLER with the precoder/rank I just reported"
Figure 15.5. The 4-bit CQI indexes one of three tables (TS 38.214 §5.2.2.1): up to 64-QAM, up to 256-QAM, or a low-spectral-efficiency table. The first two target 10 % BLER; the low-SE table targets 10⁻⁵ for URLLC reliability. CQI 0 means "out of range — I can't decode even the lowest MCS." The reported CQI is always conditioned on the rank and precoder in the same report.
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

ModeTriggerChannelUse
PeriodicRRCPUCCH F2/F3/F4Always-on CQI tracking
Semi-persistentMAC-CE activationPUCCH or PUSCHMobility-driven CQI
AperiodicDCI 0_1/0_2 CSI requestPUSCH onlyOne-shot pre-grant CSI (large Type II)
Table 15.2 — CSI reporting modes (TS 38.214 §5.2.1).
Figure 15.6 — Three ways a CSI report is scheduled
Same report, three trigger/carrier combinationsPeriodicPUCCH · RRC · always-onSemi-persistentPUCCH/PUSCH · MAC-CEAperiodicPUSCH · DCI CSI-requestSmall periodic reports ride PUCCH; large aperiodic (Type II sub-band) ones need PUSCH.
Figure 15.6. Periodic (always-on, PUCCH), semi-persistent (toggled by MAC-CE, PUCCH or PUSCH), or aperiodic (one-shot, DCI-triggered, PUSCH). Small reports fit PUCCH; the large Type-II sub-band reports need PUSCH's capacity.

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.

Figure 15.7 — Part 1 always lands; Part 2 is dropped first
Part 1 is fixed-size & decodable alone; Part 2 size depends on Part 1Part 1RI + wideband CQI + L1-RSRPPart 2 (variable)full sub-band PMI + per-SB CQIdroppedif PUSCH tightThe gNB must decode Part 1 to know how big Part 2 is — so Part 1 can never be the casualty.
Figure 15.7. Part 1 (rank, wideband CQI, beam RSRP) is fixed-size and decodable alone; Part 2 (sub-band PMI and per-sub-band CQI) is large and variable, and the gNB literally cannot parse it without Part 1. So under PUSCH pressure Part 2 is dropped first — the gNB keeps enough to schedule and loses only the fine precoding.
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.

Figure 15.8 — CSI Processing Units cap how much a UE computes at once
CSI Processing Units: a UE can only compute so many reports at onceCPU0CPU1CPU2CPU3CPU4CPU5CPU6CPU73 busy (active reports)5 freeEach report occupies CPUs for a duration; request more than the UE has and the lowest-priority reports are simply not updated.
Figure 15.8. A UE has a fixed pool of CSI Processing Units (TS 38.214 §5.2.1.6). Each report occupies CPUs while it is being computed; a beam-management report over K resources can occupy K of them. Over-trigger the UE — more concurrent reports than CPUs — and the lowest-priority reports are dropped from the update, not crammed in. The scheduler must budget CPUs like any other finite resource.
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.

Figure 16.2b — Two loops: a fast inner CQI→MCS, a slow outer BLER correction
choose MCS= MCS(CQI) + Δ_ollaINNER · per slot · CQI report → MCSOUTER · seconds · BLER (ACK/NACK) → adjust Δ_ollaCQIACK/NACK
Figure 16.2b. Link adaptation runs two nested loops. The fast inner loop maps the latest CQI straight to an MCS every slot. The slow outer loop watches the actual block-error rate from the ACK/NACK stream and trims an offset (Δ_olla) to correct the UE's CQI bias. Inner reacts to the channel; outer corrects for the report's untrustworthiness.
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/(Δupdown)
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 — Outer-loop link adaptation converging on the BLER target
14 16 18 20 MCS index slots (time) → target = 10% BLER ceiling climb: +Δ↑ on each ACK NACK −Δ↓ NACK → MCS −1 effective MCS (OLLA) STEADY STATE Δ↑ = 1/9 Δ↓ = 1 P(ACK) = Δ↓/(Δ↑+Δ↓) = 1/(1/9+1) = 0.90 → BLER = 10%
Figure 16.1. The effective MCS (blue) climbs by a small step Δ↑ on every ACK and drops by a large step Δ↓ on every NACK. Starting below the channel ceiling it ramps up until transmissions start failing, then locks into a sawtooth around the target. With Δ↑ = 1/9 and Δ↓ = 1 the loop balances where exactly one in ten transmissions fails — a 10 % block-error rate (the teal band). It never settles on one value: the only way to sense the channel ceiling is to keep probing just past it.

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 MCSbase = 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:
  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.
  2. Effective MCS = 20 + (−2) = 18. At MCS 18 the true error rate has dropped to ~10 %. Now ACKs outnumber NACKs nine-to-one.
  3. 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 %.
  4. 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.
Figure 16.3b — CQI is a 4-bit hint; the gNB maps it to a 5-bit MCS
CQI → spectral efficiency → nearest MCS rowCQI 3SE 0.38CQI 6SE 1.18CQI 9SE 2.41CQI 12SE 3.9CQI 15SE 5.55Why interpolate?16 CQI values vs 32 MCS values —the gNB picks the MCS whose target SEmatches the CQI's SE, then adds Δ_olla.CQI says "how good"; MCS says "what to send".
Figure 16.3b. The UE reports a 4-bit CQI (16 levels), each tied to a target spectral efficiency at ≤10% BLER. The gNB converts that to one of the 32 MCS indices by matching spectral efficiency, then applies the outer-loop offset. CQI describes the channel; MCS is the actual transmission choice.
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.

Figure 16.5 — The four MCS tables and how one is selected
Four MCS tables — RRC picks the pair; MCS-C-RNTI switches to the low-SE table per grantTable 1qam64default DL/ULMCS 0–28 · Q_m≤6Table 2qam256high SNRMCS 0–27 · Q_m≤8Table 3qam64-LowSEURLLC reliabilitylow rates · target 10⁻⁵Table 4qam1024 (R17)FR1 PDSCHMCS 0–27 · Q_m≤10The CQI table must match the MCS table (§15.7) — a mismatch maps quality to the wrong rate and every TB fails.
Figure 16.5. Table 1 (qam64) is the default; Table 2 (qam256) is used at high SNR; Table 3 (qam64-LowSE) trades rate for reliability at a 10⁻⁵ target for URLLC; Table 4 (qam1024, Rel-17 FR1 PDSCH) reaches the top rate. RRC selects the table per channel via mcs-Table, and the MCS-C-RNTI dynamically switches a grant to the low-SE table — so a UE can run eMBB on Table 1 and a URLLC grant on Table 3 in adjacent slots.
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

ServiceTarget BLERWhy
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.
Figure 16.4b — HARQ and link adaptation work on different clocks
HARQ (per TB, ~ms)NACK → retransmit new RV → soft-combineOuter LA (seconds)NACK rate → nudge MCS offset toward targetsame ACK/NACK stream feeds bothA NACK triggers an instant retransmit AND a slow MCS correction
Figure 16.4b. A NACK does double duty. HARQ reacts immediately — retransmit the same TB with a fresh redundancy version and soft-combine — recovering this packet in milliseconds. The outer link-adaptation loop reacts slowly — a rising NACK rate nudges the MCS offset toward the BLER target over seconds. The same ACK/NACK stream drives both.
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.

Figure 16.8 — Uplink link adaptation runs entirely at the gNB
Uplink link adaptation: no UE CQI — the gNB measures and decides for itselfSRS / PUSCH-DMRSgNB estimates UL SINRchoose UL MCS+ Δ_olladecode PUSCHCRC pass / failCRC result is the gNB's own ground truth — no fed-back ACK needed for OLLAThe gNB decodes the UL itself, so it knows pass/fail directly and runs its outer loop on that.
Figure 16.8. With no UE CQI, the gNB estimates uplink SINR from SRS and PUSCH-DMRS, picks the UE's MCS (plus its outer-loop offset), and decodes the result. Because it decodes the uplink itself, the CRC pass/fail is immediate ground truth — the uplink outer loop is fed by the gNB's own decoder, not by a feedback message.
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.

Figure 17.1 — One formula, every uplink channel: open-loop sets the level, closed-loop trims it
P_PUSCH = min( P_CMAX , sum of the blocks )P_O,PUSCHtarget Rx power+10log(2ᵘ·M_RB)allocation size+α·PLpath-loss comp+Δ_TFMCS/format+f(i,l)closed-loop TPCP_CMAXopen loop — UE computes from its own RSRP + the grantclosed loop — gNB trims ±dB via TPCPUCCH / SRS / PRACH reuse the same skeleton — only the constants change.
Figure 17.1. Every uplink power formula is the same stack. Open-loop first: a target receive power, scaled for allocation size and for measured path loss (α decides how fully). The gNB then nudges it closed-loop with ±dB TPC. The sum is clamped to PCMAX — at the cell edge the UE is often pinned to that cap and simply cannot shout louder. PUCCH / SRS / PRACH reuse the skeleton with different constants.

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:

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.

Figure 17.2 — α trades cell-edge SNR for cell capacity
Fractional path-loss compensation: α trades edge SNR for cell capacitypath loss (cell-centre → cell-edge) →Rx power at gNBα=1 fullα<1 partialα ∈ {0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}
Figure 17.2. With α=1 every UE arrives at the gNB at the same target power (flat blue) — fair, but cell-edge UEs transmit at full blast and raise the noise floor for neighbours. With α<1 (orange) edge UEs are deliberately under-compensated: weaker arrivals, but the whole sector carries more total throughput. Typical deployments run α ≈ 0.7–0.8.
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 bitsAccumulated modeAbsolute mode
00−1 dB−4 dB
010 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.
Figure 17.3 — Closed-loop TPC: tiny ±dB commands steer the accumulator
Each DCI carries a 2-bit TPC field → accumulatestarget+1+1+30-1-1+10-1+10-1TPC commands (per DCI) → accumulated mode: −1/0/+1/+3 dB
Figure 17.3. On top of the open-loop baseline, the gNB fine-tunes the UE with a 2-bit TPC command in (almost) every DCI — −1, 0, +1, or +3 dB. The UE accumulates them into the closed-loop offset f(i,l), correcting biases the path-loss estimate cannot catch: antenna-gain error, body loss, calibration offsets.
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.

Figure 17.4 — P_CMAX components and the power-scaling priority
P_CMAX and power scaling: the cap, and who wins when the sum exceeds itP_CMAX bounded byP_PowerClass (e.g. 23 dBm)− MPR (high-PAPR backoff)− A-MPR (band emissions)≤ P-Max / P_EMAX (cell)If Σ power > P_CMAX, scale by priority:1. PRACH2. PUCCH (HARQ-ACK / SR)3. PUCCH (CSI)4. PUSCH with UCI5. PUSCH without UCIIn carrier aggregation the UE drops/scales the lowest-priority transmissions first so the critical ones reach the gNB.
Figure 17.4. PCMAX is bounded above by the power class and below by power-class minus MPR/A-MPR, and capped by the cell's P-Max. When a UE aggregating carriers would need more total power than its cap allows, it scales down by a strict priority — PRACH first, then PUCCH carrying HARQ-ACK/SR, then PUCCH CSI, then PUSCH with UCI, then PUSCH without — so the most critical signals always reach the gNB (TS 38.213 §7.5).
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.

Figure 17.5 — Power headroom: how much louder the UE could still shout
Power headroom: how much louder the UE could still shoutP_PUSCH (used)+PHR (room)P_CMAXpositive PHR = room to grow (gNB can grant more RB / higher MCS)Type 1PUSCH headroomType 3SRS headroomVirtualno PUSCH → reference formatMulti-entryone per CA cellSent as a MAC-CE; triggered by path-loss change, a timer, or configuration — the gNB's window into UE power limits.
Figure 17.5. Headroom = PCMAX − Pused. A positive PHR means room to grow — the gNB can safely grant more resources. A negative PHR means the UE is power-limited and clipped, so a larger grant would only dilute its power per RB. Type 1 reports PUSCH headroom; Type 3 reports SRS headroom; a virtual PHR is computed against a reference format when there is no actual PUSCH; and a multi-entry PHR carries one value per activated carrier in CA. It is sent as a MAC-CE.
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
  1. Config: PO,PUSCH = −90 dBm, α = 0.8, µ=1, grant MRB = 50, ΔTF = +2 dB, f(i,l) = +3 dB.
  2. Measured PL = 120 dB (deep edge). Path-loss term = α·PL = 0.8 × 120 = 96 dB.
  3. Allocation term = 10·log₁₀(2¹·50) = 10·log₁₀(100) = 20 dB.
  4. Sum = −90 + 20 + 96 + 2 + 3 = 31 dBm.
  5. 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.
  6. 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.

Figure 18.1 — What the scheduler weighs every slot
Many inputs → one per-slot allocation decisionbuffer statusCQI / CSIQoS / 5QI priorityHARQ pendingpower headroom (UL)scheduleronce per slotdecisionwho · which RBs · MCS · layersaggregation level · HARQ proc · timing
Figure 18.1. Every slot the scheduler fuses each UE's buffer occupancy, reported CQI/CSI, QoS priority, pending HARQ, and (on the uplink) power headroom into one allocation: who, which RBs, what MCS and layers, which aggregation level and HARQ process. The spec defines the inputs and the grant format; the fusion rule is the vendor's.
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).

Figure 18.2 — Three ways resources reach a UE
Three ways resources reach a UEDynamicone DCI per grantfull flexibility, PDCCH costSPS (DL)RRC period + DCI activateperiodic DL, no per-PDSCH DCIConfigured Grant (UL)Type 1 RRC / Type 2 +DCIperiodic UL, skips SR→grantSPS/CG cut PDCCH overhead and latency for periodic traffic (VoNR, IIoT) — activated/released by a DCI with CS-RNTI.
Figure 18.2. Dynamic scheduling sends a DCI per grant. SPS (DL) is RRC-configured with a periodicity and activated by a DCI scrambled with the CS-RNTI, after which periodic PDSCH arrives with no further DCI. The uplink configured grant is the mirror image — Type 1 (RRC only) or Type 2 (RRC + DCI activation). Both cut PDCCH overhead and latency for VoNR and IIoT, and both are released by a DCI.
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.

Figure 18.3 — The uplink SR → BSR → grant handshake
Uplink grant handshake: SR → BSR → grantdata arrivesUE buffer fillsSR on PUCCH"I have data"small grantgNB gives roomBSR"this much data"right-sized grantgNB schedulesIf the UE already has a UL grant it sends the BSR directly, skipping the SR. BSR groups logical channels into up to 8 LCGs.
Figure 18.3. Data arrives at the UE with no uplink grant available, so it sends an SR on PUCCH. The gNB replies with a small grant; the UE uses it to send a BSR telling the gNB how much data it has (grouped into up to 8 logical-channel groups). The gNB then issues a right-sized grant for the actual data. If the UE already holds a grant, it skips the SR and sends the BSR directly.
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

PolicyMetricBehaviour
Round Robinlast-scheduled timeEqual share regardless of channel quality
Max-CQI (max-C/I)current CQIMaximises cell throughput; starves the edge
Proportional Fairinstant rate / smoothed rateServes each UE near its own peak — the empirical default
EDF (URLLC)deadline − nowUrgent flows pre-empt when the latency budget is critical
Mixed PF + EDFcombinedModern 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.
Figure 18.4 — Proportional-fair schedules whoever is highest relative to their own average
metric = instantaneous rate ÷ smoothed average rateUE A avgUE B avgB scheduled!A scheduledB wins at t=3 even though A is faster — B is far above its own average there (multi-user diversity).
Figure 18.4. Proportional-fair does not schedule the fastest UE — it schedules the one whose current rate is highest relative to its own recent average. So a weak cell-edge UE (B) still wins the slots where its bursty channel briefly peaks, while the strong UE (A) gets most slots. Serving a UE raises its average, lowering its future metric — built-in anti-starvation, and a close match to maximising the sum of log throughputs.

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.

Figure 18.5 — Cross-carrier scheduling with the Carrier Indicator Field
Cross-carrier scheduling: a PDCCH on one cell grants data on anotherScheduling cell (PCell)PDCCH (DCI + CIF)Scheduled cell (SCell)PDSCH / PUSCHCIF (3-bit) names the target cellOffloads PDCCH from a congested/poor-coverage carrier; the Carrier Indicator Field says which cell the grant is for.
Figure 18.5. A PDCCH on the scheduling cell (often the more robust PCell) carries a DCI whose Carrier Indicator Field names a different scheduled cell, where the actual PDSCH/PUSCH lands. This offloads control from a congested or poor-coverage carrier and concentrates blind-decoding effort on one cell — useful when an mmWave SCell has great data capacity but unreliable control coverage.

18.7 Pre-emption and URLLC Multiplexing

Figure 18.6 — URLLC pre-empts eMBB mid-slot; DCI 2_1 signals the punctured region
A URLLC mini-slot punches into an ongoing eMBB PDSCH; DCI 2_1 tells the eMBB UEURLLC overwrites these REseMBB PDSCHpre-empted
Figure 18.6. When an urgent URLLC packet arrives mid-slot, the scheduler transmits a short mini-slot on resources already granted to an eMBB UE, overwriting them. The eMBB UE is later told via a group-common pre-emption-indication DCI (format 2_1) which REs were clobbered, so it treats them as erasures and lets HARQ recover the block on retransmission.
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.

Figure 18.7 — What bounds the scheduler: PDCCH budget and DRX
What bounds the scheduler: PDCCH budget and DRXPDCCH budget (per slot)• max blind decodes per slot (by SCS)• max non-overlapping CCEs• one DCI per grant → caps #UEs/slot• big aggregation levels eat the budgetConnected-mode DRX• UE only monitors PDCCH in active time• onDuration + inactivity timer• no grant possible while UE sleeps• saves battery, costs scheduling latency
Figure 18.7. The PDCCH budget caps how many DCIs fit in a slot — and cell-edge UEs at high aggregation levels eat more of it, so a cell full of weak UEs can run out of control capacity before it runs out of data capacity. Connected-mode DRX saves UE battery by limiting PDCCH monitoring to the active time, but the scheduler cannot grant a sleeping UE — trading latency for power.
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.

QuantityDefinition (essence)RangeSpec
SS-RSRPLinear average of SSS RE powers within the SSB−156…−31 dBm, 1 dBTS 38.215 §5.1.1
CSI-RSRPSame construction on configured CSI-RS REssame§5.1.2
RSSITotal received power (signal + interference + noise) across the OFDM symbols of N RBs(within RSRQ)
SS-RSRQN · RSRP / RSSI−43…+20 dB, 0.5 dB§5.1.3
SS-SINRSSS signal / (interference + noise) on SSS REs−23…+40 dB§5.1.5
CSI-SINRSame, CSI-RS basedsame§5.1.6
L1-RSRP / L1-SINRPer-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.
Figure 19.1 — RSRP, RSSI, and why RSRQ falls as a cell fills up
RSRP is measured only on reference REs — so it stays put while the cell loadsLightly loadedneighbour + interferenceown data REsreference REs = RSRPRSSI = whole barRSRQ ≈ highHeavily loadedneighbour + interferenceown data REsreference REs = RSRPRSSI = whole barRSRQ ≈ lowload rises
Figure 19.1. RSRP is the power on the cell's reference REs (blue block) and does not change with traffic. RSSI is the entire bar: reference + own data + neighbour interference + noise. As the cell loads, the data and interference blocks grow, RSSI climbs, and since RSRQ = N·RSRP/RSSI the quality ratio drops — by design, so the UE can prefer an emptier neighbour.

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.

Figure 19.2 — Per-beam L1-RSRP rolls up into one cell measurement
Per-beam L1-RSRP → one cell measurementbeam 0-85 dBmbeam 1-92 dBmbeam 2-104 dBmbeam 3-110 dBmabsThreshSS-BlocksConsolidationcell RSRP= average of beams above threshold(else: just the strongest beam)nrofSS-BlocksToAverage + absThreshSS-BlocksConsolidation decide how beams roll up into the cell value.
Figure 19.2. The UE measures each beam separately. If absThreshSS-BlocksConsolidation is configured, the cell RSRP is the average of the (up to nrofSS-BlocksToAverage) beams above that threshold; otherwise it is simply the strongest beam. Averaging gives a smoother, more representative cell value; best-beam tracks the peak. The choice quietly shapes when A3 (§19.4) fires.

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.

Figure 19.3 — Fast raw L1 samples filtered into a stable L3 metric
L3 = IIR filter over many noisy L1 samplesL1 fast/noisyL3 filteredL1 drives beam/link adaptation (1 slot); L3 drives handover (100s of ms, filterCoefficient).
Figure 19.3. Layer-1 is fast but noisy — ideal for beam/link adaptation. Layer-3 filters those samples into a smooth value for handover, where reacting to every dip would bounce the UE between cells. The filter coefficient is the most-retuned mobility parameter: too smooth delays handover past link viability; too light invites 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.

Figure 19.4 — The RRC measurement events and what each is for
RRC measurement events — each with hysteresis + time-to-triggerA1serving > threshold→ stop inter-freq measuringA2serving < threshold→ start inter-freq measuringA3neighbour > serving + offset→ intra/inter-freq handoverA4neighbour > threshold→ HO to a good cellA5serving < thr1 AND neighbour > thr2→ HO when serving is badA6neighbour > SCell + offset→ SCell change (CA)B1 / B2inter-RAT neighbour conditions→ to LTE / other RATAll use L3-filtered values; the source gNB decides and commands the handover — the UE never hands itself over.
Figure 19.4. A1/A2 turn inter-frequency measuring on and off as the serving cell weakens or recovers. A3 (neighbour beats serving by an offset) is the workhorse intra/inter-frequency handover trigger. A4 reports any cell above a threshold; A5 fires when the serving cell is bad and a neighbour is good. A6 handles SCell changes in carrier aggregation. B1/B2 cover inter-RAT (e.g. to LTE). Every event adds hysteresis and a time-to-trigger so a brief crossover cannot cause an unnecessary handover.
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.

Figure 19.5 — Measurement gaps let the UE retune to other frequencies
Measurement gaps: brief windows to retune and measure other frequenciesserving cell Tx/RxgapgapMGRP (20/40/80/160 ms)During a gap (MGL 1.5–6 ms) the UE leaves the serving carrier to measure an inter-frequency / inter-RAT cell — no serving Tx/Rx meanwhile.
Figure 19.5. A measurement gap recurs every Measurement Gap Repetition Period (MGRP ∈ 20/40/80/160 ms) and lasts a Measurement Gap Length (MGL ≈ 1.5–6 ms). During it the UE leaves the serving cell to measure an inter-frequency or inter-RAT target, so the gNB must leave those symbols unscheduled. Gaps can be per-UE or per-frequency-range (gapFR1/gapFR2), and a UE capable of independent FR2 measurement may need none for some cases.
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.
Figure 20.1 — A Gold sequence is two shift registers XOR-ed together
Same recursion every time — only the seed c_init changes per cell/slot x₁taps 0, 3x₂taps 0, 1, 2, 3 c(n) the scramble Skip the first Nc = 1600 outputs (let the transient die), then emit. x₁ is fixed; x₂ is seeded by c_init.
Figure 20.1. Every "random-looking but reproducible" value in NR — DMRS, CSI-RS, scrambling — comes from this one machine: two 31-stage linear-feedback shift registers (x₁ fixed, x₂ seeded by c_init) whose outputs are XOR-ed. Because both ends compute the identical recursion from the identical seed, the gNB's scramble and the UE's de-scramble line up bit-for-bit, while two different cells (different seeds) produce near-uncorrelated sequences.

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.
Figure 20.2b — Zadoff-Chu: every sample on the unit circle (0 dB PAPR)
all |x_u(n)| = 1 → constant envelopeThree magic propertiesConstant amplitude → 0 dB PAPR (great UL/PRACH)Zero periodic autocorrelation off-shiftLow cross-correlation between roots ux_u(n) = exp(−jπ·u·n(n+1)/N_zc), N_zc prime
Figure 20.2b. A Zadoff-Chu sequence places every sample on the unit circle, so its amplitude never varies — a 0 dB peak-to-average ratio. Combined with perfect off-shift autocorrelation and low cross-correlation between roots, that is why ZC underlies PRACH preambles, low-PAPR uplink DMRS, and PUCCH formats 0/1.
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.

Figure 20.3b — m-sequence autocorrelation: a near-perfect thumbtack
+1 at zero shift, −1/(2ⁿ−1) everywhere elsecyclic shift →peak = detection
Figure 20.3b. A maximum-length sequence correlates to a sharp spike at zero shift and a tiny constant value (−1/(2ⁿ−1)) at every other shift. That 'thumbtack' shape is ideal for detection and timing — which is why the length-127 m-sequence is used for PSS and as the building block inside Gold sequences.
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

SignalFamilyLength
PSSm-sequence127
SSSGold (product of two m-seqs)127
PBCH-DMRS, PDCCH-DMRS, PDSCH-DMRS (CP-OFDM), CSI-RS, scramblingGoldvariable
PUSCH-DMRS (DFT-s-OFDM), PUCCH F0/F1, SRSZadoff-Chu derived (low-PAPR)12·NRB−1
PRACH preambleZadoff-Chu839 or 139
Table 20.1 — Sequence family per NR signal.
Figure 20.4b — Which sequence family sits under which NR signal
m-seq for detection · Gold for scrambling · ZC for low-PAPRPSSm-sequencelen 127SSSGoldlen 127DMRS / CSI-RS / scramblingGoldlen varPUSCH-DMRS(DFT-s)/PUCCH0,1/SRSZC-derivedlen varPRACH preambleZadoff-Chulen 839/139The choice always follows the job: find-me, separate-me, or send-me-at-full-power.
Figure 20.4b. Each NR signal picks the sequence family that fits its job. PSS uses a bare m-sequence (sharp detection); SSS and all the scrambling/DMRS/CSI-RS use Gold (many low-cross-correlation codes); the power-limited uplink signals and PRACH use Zadoff-Chu (0 dB PAPR + perfect autocorrelation). One of three families underlies every pilot and scramble in the standard.
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.

Figure 20.5 — 30 sequence groups × 2 base sequences, hopping per slot
Low-PAPR uplink sequences: 30 groups × up to 2 base sequences, hopping per slotu0u1u2u3u4u5u6u7u8u9u10u11u12u13u14u15u16u17u18u19u20u21u22u23u24u25u26u27u28u29u = (f_gh + f_ss) mod 30f_gh = group hopping (Gold, per slot)f_ss = N_ID mod 30 (cell shift)within a group: v ∈ {0,1} (seq hopping)hops each slotShort lengths (1–2 RB: M=6,12,18,24,30) are NOT Zadoff-Chu — they are computer-generated phase tables φ(n)∈{±1,±3}Long lengths (≥3 RB) are cyclic extensions of a prime-length Zadoff-Chu sequence (TS 38.211 §5.2.2.2)
Figure 20.5. A cell's low-PAPR sequence group is u = (fgh + fss) mod 30, where fss = NID mod 30 is a cell-specific shift and fgh is an optional per-slot group-hopping offset driven by a Gold sequence. Within a group, sequence hopping selects v ∈ {0,1} for lengths ≥ 72. Crucially, the short sequences (1–2 RB) are not Zadoff-Chu at all — they are computer-generated phase tables φ(n) ∈ {±1, ±3}, because no good prime-length ZC exists that short.
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

  • TS 38.211 §5.2 sequences
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

ChannelPurposeUu counterpart
PSBCH / S-SSBSidelink sync + broadcast (SL-MIB)SSB/PBCH
PSCCHSidelink control — 1st-stage SCI (format 1-A)PDCCH
PSSCHSidelink shared — transport block + 2nd-stage SCIPDSCH
PSFCHSidelink HARQ feedbackPUCCH
Table 21.1 — Sidelink physical channels (TS 38.211 §8). PSCCH and PSSCH are frequency-multiplexed in the same slot; PSFCH appears periodically.
Figure 21.1 — The four sidelink channels in one slot
One sidelink slot — control, data, and feedback, mirroring the Uu interfacePSCCHcontrol (SCI-1) ≈ PDCCHPSSCHdata + SCI-2 ≈ PDSCHPSFCHHARQ ≈ PUCCHS-SSB / PSBCHsidelink sync + SL-MIB (≈ SSB)PC5 link, no gNB in the data path — the braking car tells the car behind directly.
Figure 21.1. Sidelink mirrors the Uu interface with its own channels: PSCCH (control), PSSCH (data), PSFCH (HARQ), and S-SSB/PSBCH (sync). The defining difference is who assigns the resources — and, before that, how the UEs even agree on timing without a base station.

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.

Figure 21.2 — The sidelink sync-reference priority and the S-SSB
Sidelink picks a sync reference by priority — so UEs agree on timing with no gNB1. GNSSsatellite time — top priority2. gNB / eNBif in cellular coverage3. another UE (SLSS)relay a UE that has a better source4. selfbe your own source if nothing betterS-SSB• S-PSS + S-SSS (SLSS)• + PSBCH (SL-MIB)• SLSS-ID 0…671 (336×2)• period 160 ms
Figure 21.2. A UE chooses its timing reference by priority: GNSS if available, else a gNB/eNB if in coverage, else another UE that itself has a good reference (relayed via its SLSS), else it becomes its own source. The S-SSB carries the SLSS (S-PSS + S-SSS, giving an SLSS-ID 0–671) plus the PSBCH/SL-MIB, on a 160 ms period — so a newly-arriving UE can find the local timing and slot structure with no network at all.

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.

Figure 21.3 — First-stage SCI is public; second-stage is for the receiver
Two-stage SCI: a public reservation, then a private data header1st stage — SCI 1-A (on PSCCH)• time/freq resource + future reservations• MCS, DMRS pattern, priority• 2nd-stage SCI format indicatordecoded by ALL sensing UEs2nd stage — SCI 2-A/B/C (on PSSCH)• source ID (8b) + destination ID (16b)• HARQ process, NDI, RV, cast type• 2-A unicast/groupcast · 2-B dist-feedback · 2-C coorddecoded by the INTENDED receiver(s)
Figure 21.3. The 1st-stage SCI (PSCCH) carries the time/frequency assignment, future reservations, MCS, and which 2nd-stage format follows — and is decoded by all sensing UEs so they can plan around it. The 2nd-stage SCI (PSSCH) carries source ID (8 bits), destination ID (16 bits), HARQ process/NDI/RV, and cast type — format 2-A for unicast/groupcast, 2-B for distance-based groupcast feedback, 2-C for Rel-17 inter-UE coordination. This is why sensing works: the part that matters to neighbours is the part that is broadcast.

21.5 Mode 1 vs Mode 2 and Resource Selection

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.
Figure 21.4 — Mode 2: sense, exclude, self-select, announce
Mode 2: sense a window, exclude reserved blocks, self-select, then announcesensing windowdecode others' SCI-1 reservationsselection windowexclude reserved (RSRP-thresholded), pick freetransmit + reserveSCI-1 announces the UE's own future reservation so neighbours can dodge it — distributed scheduling by mutual courtesy.
Figure 21.4. Out of coverage there is no scheduler. Each UE senses a window to learn which resources its neighbours have reserved (from their 1st-stage SCI), excludes the ones it hears strongly (RSRP-thresholded, so distant reuse is allowed), picks from what remains, transmits, and announces its own reservation. Distributed scheduling by mutual courtesy — robust to having no network, but vulnerable to hidden nodes that cannot hear each other.

21.6 Cast Types

Figure 21.5 — Unicast, groupcast, broadcast
How many receivers, and how much feedback?TxRxUnicast1 → 1 · PC5-RRC · full HARQ + CSITxRxRxRxGroupcast1 → group · NACK-only or full-ACKTxRxRxRxRxBroadcast1 → anyone · no feedback (safety beacons)
Figure 21.5. Unicast is a one-to-one PC5-RRC link with full HARQ and per-link CSI/link-adaptation. Groupcast targets a group, with feedback that can be NACK-only (distance-based) or full ACK. Broadcast reaches anyone listening with no feedback — the mode safety beacons use, which is why they rely on a conservative fixed MCS and repetition rather than HARQ.

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.

Figure 21.6 — Two groupcast HARQ feedback options on PSFCH
Sidelink HARQ on PSFCH — two groupcast feedback optionsOption 1 — NACK-only (distance)• Rx replies ONLY if it failed• AND is within the communication range• all NACKs share one PSFCH resource• scales to many receiversOption 2 — ACK/NACK (per-Rx)• each Rx has its OWN PSFCH resource• Tx learns exactly who decoded• precise but resource-hungry• small groups onlyPSFCH is sequence-based (one PRB, cyclic shift ≈ PUCCH F0), transmitted every 1/2/4 slots (sl-PSFCH-Period).
Figure 21.6. Option 1 (NACK-only) has a receiver reply only if it both failed to decode and is within the communication range — all such NACKs share one PSFCH resource, so it scales to large groups (a platoon). Option 2 (ACK/NACK) gives each receiver its own PSFCH resource, so the transmitter learns exactly who decoded — precise, but resource-hungry, so it suits small groups. PSFCH itself is sequence-based and periodic (sl-PSFCH-Period).

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:

CategoryProcedureUsed for
Cat 1No 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 3Random backoff, fixed contention windowRare
Cat 4 (Type 1)Random backoff, variable contention window — the Wi-Fi-compatible full procedureAcquiring 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.

Figure 22.1 — Cat-4 LBT, then hold the floor for the COT
Sense idle → random back-off → transmit → hold the floor for the COTtime →Cat-4 LBTlisten N idle slotsCOT — up to 10 ms (only quick Cat-2 sense inside)DL burstULsharedDL burstLend the mic to the UE briefly (shared COT) and take it back — as long as the gap is too short for anyone else to grab it.
Figure 22.1. The gNB cannot just transmit. It runs Cat-4 LBT — wait for idle, count down a random number of idle slots — and only then transmits, acquiring a Channel Occupancy Time of up to 10 ms during which further bursts need only the quick Cat-2 check. It can even lend part of the window to the UE for uplink.

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.

Figure 22.2 — The four priority classes and their contention windows
Channel Access Priority Classes — higher priority backs off less, holds shorterCAPC pCW rangeMCOTtypical traffic13 – 72 msvoice (lowest latency, wins fast)27 – 153 msinteractive315 – 638–10 msbest-effort data415 – 10238–10 msbackground (waits longest)Smaller contention window = grabs the channel sooner; but the higher-priority classes may hold it for less time (smaller MCOT).
Figure 22.2. A lower CAPC value (higher priority — e.g. voice) uses a smaller contention window, so on average it counts down fewer idle slots and seizes the channel sooner. The trade is a shorter maximum channel-occupancy time (MCOT) for the highest-priority classes — they win fast but hold briefly. Background data (p=4) uses a huge contention window (up to 1023) and waits longest, but may hold the channel for the full MCOT. (Exact MCOTs are region/coexistence-dependent.)

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.

Figure 22.3 — Sharing the COT: the gNB lends the floor to the UE
After one Cat-4 win, UL rides the same COT with only a quick Cat-2 checkone acquired COT (≤ MCOT)DL burstgapUL (Cat-2)DL burstThe hand-back gap must stay under ~16–25 µs or another device could seize the channel mid-COT.
Figure 22.3. Once the gNB wins a COT with a full Cat-4 LBT, it lends part of the window to the UE: after a short gap the UE does only a 25 µs Cat-2 sense and transmits, then the gNB resumes — sparing the UE its own Cat-4 backoff, a major uplink-latency win.
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.

Figure 22.4 — FBE (semi-static) vs LBE (random backoff)
Two access regimes: Frame-Based (semi-static) vs Load-Based (random backoff)FBEno Wi-Fi expectedsenseCOTsenseCOTsenseCOTfixed frame period: one sense at frame start, COT, mandatory idle gapLBEcoexist w/ Wi-FiCat-4 backoffCOTbackoff againCOTrandom backoff before every grab — the Wi-Fi-compatible default
Figure 22.4. FBE divides time into fixed frame periods, sensing once at each frame boundary and transmitting if idle — efficient and low-overhead, but only appropriate where no unpredictable other-technology traffic is expected (e.g. a private/isolated deployment). LBE runs a Cat-4 random backoff before every channel grab — the Wi-Fi-compatible choice for genuinely shared spectrum.

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.

Figure 22.5 — DRS: a discoverable beacon, transmitted when LBT allows
DRS: an always-discoverable beacon — but only when LBT allowsDRSSSB + RMSI~20 ms (LBT permitting)DRSSSB + RMSI~20 ms (LBT permitting)DRSSSB + RMSIIf LBT fails at the nominal instant the DRS slips within a window (DMTC) rather than being skipped.
Figure 22.5. Even in shared spectrum a UE must find the cell, so NR-U sends a Discovery Reference Signal (SSB + RMSI) on a ~20 ms grid whenever LBT permits. The DMTC window lets it slip rather than disappear under contention — but persistent Wi-Fi load can repeatedly defer it, making NR-U cell presence contention-dependent in a way licensed NR never is.

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.

Figure 22.6 — Interlaced RBs spread the transmission across the channel
Interlaced RB allocation: spread across the band to meet PSD + OCB rulesone interlace = every 10th RB (15 kHz: 10 interlaces; 30 kHz: 5 interlaces)Why spread, not clump?PSD limit caps power per MHz — using thewhole band lets the UE send more TOTAL powerOccupied Channel BW ≥ 80%regulators require the signal to occupymost of the channel — interlacing does both
Figure 22.6. An interlace is every Mth resource block (10 interlaces at 15 kHz SCS, 5 at 30 kHz, in a 20 MHz channel). Spreading the allocation across the band lets a power-limited UE transmit more total power while staying under the per-MHz PSD cap, and it automatically satisfies the ≥80 % occupied-channel-bandwidth rule. PUSCH and PUCCH both use interlaced mapping in NR-U.

22.7 Bandwidth Modes

BWStructure
20 MHzThe default unlicensed channel (one LBT sub-band)
40 / 80 / 160 MHzMultiple 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.
Figure 22.7 — Wideband NR-U: independent LBT per 20 MHz sub-band
80 MHz = 4 × 20 MHz, each cleared (or not) on its ownch 0 · 20 MHzLBT PASSclear → usech 1 · 20 MHzLBT PASSclear → usech 2 · 20 MHzLBT BUSYbusy → skipch 3 · 20 MHzLBT PASSclear → useTransmit on the sub-bands that cleared; one busy 20 MHz does not block the rest — bandwidth is elastic.
Figure 22.7. NR-U builds 40/80/160 MHz channels from 20 MHz sub-bands and runs LBT independently on each. If three clear and one is busy, the gNB transmits on the three — bandwidth degrades gracefully instead of blocking. The catch: if the primary 20 MHz (carrying control/DRS) is busy, the whole COT attempt fails regardless of the others, so primary-channel contention dominates real-world throughput.

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:

MethodSignalsEstimatesAccuracy
DL-TDOAPRS from ≥ 3 gNBsPosition from time-difference hyperbolas3–10 m
UL-TDOASRS measured at ≥ 3 gNBsSame idea, network side3–10 m
Multi-RTTPRS + SRS round-tripRange from each gNB → trilateration1–3 m (Rel-17 target)
DL-AoDPRS beam-RSRP per Tx beamDirection from each gNB5–20° (FR2: <1°)
UL-AoASRS angle-of-arrivalNetwork estimates direction5–20° (FR2: <1°)
E-CIDRSRP-based cell IDCoarse, fallbackcell-radius scale
Table 23.1 — NR positioning methods per TS 38.305. Combining multiple methods improves accuracy further.
Figure 23.2b — Six positioning methods, three measurement primitives
Each method fuses time-differences, angles, or round-trip rangestime-diffangleRTT/RSRPDL-TDOAUL-TDOAMulti-RTTDL-AoDUL-AoAE-CIDCombining methods (e.g. multi-RTT + AoA) tightens the fix further.
Figure 23.2b. NR positioning offers six standardised methods built from three primitives: time-difference of arrival, angle of departure/arrival, and round-trip time. DL/UL-TDOA use timing; AoD/AoA use array geometry; multi-RTT uses ranges; E-CID is the coarse RSRP fallback. The location engine can fuse several for accuracy.
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.
Figure 23.1b — Wider PRS bandwidth → sharper arrival timing → tighter fix
position errorPRS bandwidth →narrow → metreswide (FR2) → sub-metreRanging resolution ≈ c / (2 · bandwidth)
Figure 23.1b. A positioning fix is only as sharp as the arrival-time estimate, and timing resolution scales with bandwidth (≈ c/2B). Narrow PRS gives metre-level error; the huge bandwidths available at FR2 push it toward sub-metre. This is the single biggest lever in positioning accuracy — you cannot 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.
Figure 23.1 — Locating a UE from several gNBs
Each gNB gives one range/angle constraint — the intersection is the UE gNB 1gNB 2gNB 3 UE DL-TDOA uses time-difference hyperbolas; multi-RTT uses ranges (shown). Wider PRS bandwidth → sharper arrival timing → tighter fix.
Figure 23.1. Positioning fuses constraints from several gNBs. Each gNB's PRS gives the UE a measurement — a range (multi-RTT, shown as circles) or a time-difference relative to another gNB (DL-TDOA, which yields hyperbolas) or an angle (AoD). Any one constraint is a curve the UE could be anywhere on; intersect three and you pin the position. The wider the PRS bandwidth, the sharper each arrival time, and the smaller the intersection blob — which is why FR2's huge bandwidths reach sub-metre accuracy.
Figure 23.3b — Multi-RTT needs no gNB clock sync; TDOA does
DL-TDOAgNB1gNB2need common clockcompares arrival TIMES across sitesMulti-RTTgNBUEeach link measures its OWN round-tripclock offset cancels
Figure 23.3b. DL-TDOA infers position from differences in arrival time across gNBs — which only works if those gNBs share a precise clock. Multi-RTT instead measures the round-trip time on each gNB-UE link separately; because each measurement is a there-and-back on one clock, any clock offset cancels. That's the biggest practical accuracy gain since LTE OTDOA.
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.
Figure 23.2c — PRS muting: gNBs take turns so their pilots don't collide
A muting pattern silences each gNB on some occasions → others heard cleanlyPRSmutePRSmutePRSmutePRSmuteA distant gNB's PRS is weak; muting nearby gNBs lets the UE still hear it — vital for the ≥3-gNB fix.
Figure 23.2c. For TDOA the UE must hear PRS from at least three gNBs, but a nearby strong gNB would drown a distant weak one. A muting pattern silences each gNB on a schedule of occasions, so on the occasions a neighbour is muted, the far gNB's PRS comes through cleanly — the near-far solution that makes multi-gNB positioning possible.
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.

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.
Figure 24.1 — Same content, two delivery shapes
PTM — one transmission, a cluster PTP — per-UE copies, dispersed gNB one PDSCH · G-RNTI gNB per-UE link adaptation + HARQ everyone decodes the same PDSCH
Figure 24.1. MBS sends common content two ways. PTM transmits once, addressed to a group via G-RNTI, and every UE in the cluster decodes the same PDSCH — ideal for a packed stadium. PTP sends a tailored copy to each UE, allowing per-UE link adaptation and HARQ — better when receivers are spread out and MU-MIMO can be exploited. The gNB can switch per stream, even per slot.
Figure 24.1c — The gNB switches PTM↔PTP by how clustered the receivers are
clustered → PTMone transmission, all decode (G-RNTI)dispersed → PTPper-UE copies, link-adapted + HARQSame content, delivery chosen per geometry — even per slot
Figure 24.1c. The gNB picks the MBS delivery mode from receiver geometry. A tight cluster (a stadium block) is served once by PTM via G-RNTI. Spatially scattered receivers are better served by PTP — per-UE copies that can be link-adapted, HARQ-protected, and MU-MIMO-paired. The choice can change per content stream and 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

RNTIUse
G-RNTIPTM data on PDSCH
G-CS-RNTIPTM configured-grant scheduling
Table 24.1 — MBS-specific RNTIs.
Figure 24.2b — One PDSCH, one G-RNTI, a whole group decodes
gNB1 PDSCH · scrambled by G-RNTIUE 1 ✓UE 2 ✓UE 3 ✓UE 4 ✓PTM: descramble with the shared G-RNTI → everyone decodes the same bitsUnicast uses a per-UE C-RNTI; MBS PTM uses a group G-RNTI so one transmission serves all.
Figure 24.2b. In MBS point-to-multipoint, the gNB scrambles a single PDSCH with a group RNTI (G-RNTI). Every UE configured with that G-RNTI descrambles and decodes the identical transport block. One transmission, N receivers — versus unicast, where each UE has its own C-RNTI and its own copy.
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.
Figure 24.3b — Rel-17 multicast HARQ: rescue stragglers without dropping to unicast
PTM (G-RNTI)UE1 ACKUE2 ACKUE3 NACKUE4 ACKretransmit only to the stragglerPTP or group retx — not a full unicast fallbackOptional feedback lets the gNB fix the one UE that missed
Figure 24.3b. Plain PTM has no feedback, so the MCS must suit the worst UE. Rel-17 adds optional HARQ feedback to multicast: most UEs ACK, the gNB sees the one straggler's NACK, and retransmits just to it (PTP or a small group retx) — recovering reliability without dropping the whole group back to per-UE unicast.
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.

KPIWhat it measuresPHY culprits when bad
DL Throughputbits/s per UELow CQI, AL too large, MCS clamp, CORESET overhead, DMRS mis-config, BWP too narrow
UL Throughputsame, uplinkSRS missing, codebook precoder wrong, TPC overshoot, DFT-s-OFDM clamp on cell-centre UEs
RACH SuccessMsg1 → Msg4 successPreamble collisions, power-ramp mis-config, ssb-perRO mis-set, root-seq collision
Handover SuccessHO completion rateSMTC mis-config, beam-failure during HO, TCI mismatch on target
AccessibilityRRC setup successRACH issues, beam coverage, SIB1 BLER
RetainabilityBLER and call dropsBFR 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).
Figure 25.1 — From a dipping KPI down to the PHY culprit
KPI: RACH success ↓ 98% → 92% the dashboard symptom preamble collisions RACH period too long power ramp too small UEs give up below gNB sensitivity ssb-perRO mis-set RACH on the wrong beams one config change → A/B test → promote (see Ch.27 investigation loop)
Figure 25.1. Every KPI maps to a short list of physical-layer root causes. When a number dips, you don't search blindly — you read off the two-to-five usual culprits for that KPI (Table 25.1), test the most likely one with a single-cell config change, and promote the fix if the KPI recovers. The skill is the mapping; the table is the cheat sheet.
Figure 25.2b — The KPIs follow the session's life: get on, stay on, move, leave cleanly
Each phase of a connection has its own headline KPIAccessAccessibilityRRC setup successActiveIntegritythroughput · BLERMobilityHO successhandoverReleaseRetainabilityno dropA dip in any one points at a different PHY subsystem (Fig 25.1).
Figure 25.2b. Network KPIs line up with the life of a connection: accessibility (can the UE get on?), integrity (is the data fast and clean while active?), mobility (do handovers succeed?), and retainability (does the call survive to a clean release?). Reading a KPI dip starts with asking which phase it lives in.
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.
Figure 25.1c — Accessibility is a chain — the weakest gate caps it
RRC setup succeeds only if every upstream gate passesRACH successbeam coverageSIB1 BLERRRC setup ✓An accessibility dip → test each gate in order: RACH first, then beam coverage, then SIB1.
Figure 25.1c. The accessibility KPI (RRC setup success) is the product of several independent gates: the UE must complete RACH, be within beam coverage, and decode SIB1. Because they multiply, the worst gate caps the whole KPI — so an accessibility investigation walks the chain in order rather than guessing.
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 %.

Figure 26.1b — Case 1: PCI mod-3 collision puts two cells' PSS on the same subcarriers
Cell A · PCI 1212 mod 3 = 0Cell B · PCI 3636 mod 3 = 0same PSSsubcarriersPSS subcarrier set = PCI mod 3 → equal mod 3 = mutual interferenceFix: replan PCIs with a mod-3 (and mod-30) separation constraint between neighbours
Figure 26.1b. The PSS occupies subcarriers determined by N_ID(2) = PCI mod 3. Two neighbouring cells whose PCIs share the same value mod 3 transmit PSS on the identical subcarriers, so their sync signals interfere — contaminating the preamble correlation and starving Msg2. The fix is a PCI replan that forbids equal-mod-3 neighbours.
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 %.

Figure 26.1 — Case 3: the festival RACH storm, before and after the fix
RACH attempts per period — capacity must exceed offered load 8,000offered load~8,000 UEs converging 5,120capacity BEFORE64 preambles×8 RO×100ms 10,240capacity AFTERperiod halved to 50ms +2-step load Before: capacity (purple) sits below the load line → collisions, 60% success. After: capacity (teal) clears the line → >95%.
Figure 26.1. The RACH storm was a pure capacity shortfall: ~8,000 attempts/second were offered against the 5,120/second the configuration could absorb, so preambles collided and success collapsed to 60%. Halving the PRACH period doubled the opportunities and 2-step RACH cut per-attempt overhead, lifting capacity above the offered load and restoring success 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 %.

Figure 26.4b — Case 4: clashing TDD patterns across aggregated carriers
CC1DDDDDDDDUUUUUUCC2UUUUUUDDDDDDDDDL on CC1 while UL on CC2 → UE self-interference / impossible timingFix: align TDD-UL-DL patterns across aggregated carriers (or honour the UE's simultaneous-Tx/Rx capability).
Figure 26.4b. Case 4: two aggregated carriers were configured with different TDD up/down patterns. In the boxed symbols CC1 is transmitting downlink while CC2 expects uplink — a UE without simultaneous transmit/receive capability simply can't do both, so transmissions are dropped. The fix is aligning the slot formats across carriers (or respecting the UE's declared capability).
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 %.

Figure 26.5b — Case 5: paired MU-MIMO UEs too close in angle → cross-talk
gNBUE AUE Bθ too smallBeams overlap → each UE hears the other → both BLER spikeFix: tighten the co-scheduling angular-separation threshold (or use Type II / SRS reciprocity for deeper nulls).
Figure 26.5b. Case 5: the scheduler paired two UEs for MU-MIMO that were too close in angle. The precoders couldn't place a deep enough null toward the other UE, so each received the other's layers as interference and both saw BLER spike. The fix is a stricter angular-separation gate for pairing, plus finer CSI (Type II or SRS reciprocity) for deeper nulls.
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

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

Figure 27.1c — Correlate UE-side, gNB-side and drive-test on one timeline
UE-sideDCI · decode failsgNB-sidePHY trace · countersdrive-testRSRP/SINR/BLERsame 30-s window→ root causeThree views of the same fault, lined up by timestamp
Figure 27.1c. A solid investigation never trusts one log. The UE-side capture shows what the phone saw (DCI, decode failures), the gNB-side PHY trace shows what the network scheduled and counted, and the drive-test shows the RF reality (RSRP/SINR/BLER). Aligning all three on the same time window is what turns a vague 'throughput is bad' into a precise root cause.
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

CounterMeaningHealthy range
DL BLER (1st-tx)BLER before retransmission5–15 %
UL BLER (residual)BLER after 4 HARQ attempts< 1 %
PDCCH BD successblind-decode hit rate> 99 % per slot
RACH attempts/cell/spreamble TXs per secondload-dependent; check ramp distribution
HO successhandover success rate> 98 %
SR pendingSRs awaiting grant< 5
Table 27.1 — Counters every PHY engineer watches.
Figure 27.1 — Three log sources feed one disciplined investigation loop
UE-sideQXDM · Diag · ELTgNB-sidevendor PHY tracedrive-testR&S · Anritsu 1 · Reproduce2 · Localise3 · Quantify4 · Hypothesise5 · Test fix6 · Promoterepeat End in a config change you can A/B test — not a guess.
Figure 27.1. A root-cause investigation pulls from three streams — UE-side diagnostics, gNB-side PHY traces, and drive-test recordings — and runs them through a fixed loop: reproduce the fault on both sides for the same window, localise it to a channel/slot/UE, quantify the KPI delta, match it to a known culprit (Ch.25), test one config change against a control, and promote it network-wide only if the KPI actually recovers.
Figure 27.2b — Counter health bands: know 'normal' before you chase 'broken'
The green band is healthy — outside it, start the investigation loopDL BLER 1st-tx5–15%UL resid. BLER<1%PDCCH BD99–100%HO success>98%A DL BLER of 0% is NOT healthy — it means the MCS is too conservative (see Fig 16.1).
Figure 27.2b. Every PHY counter has a healthy range, not a single 'good' value. First-transmission DL BLER should sit at 5–15% (that's link adaptation working); residual UL BLER under 1%; PDCCH blind-decode success above 99%; handover success above 98%. Knowing the band is what turns a noisy dashboard into a triage tool.
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

  1. Reproduce — capture both UE and gNB log for the same 30-second window.
  2. Localise — which channel? DL or UL? Which slot? Which UE?
  3. Quantify — KPI delta vs baseline. Counters trending which way?
  4. Hypothesise — match against a known PHY culprit (see Sec. 25.1).
  5. Test the fix — config change on one cell, A/B against the rest, watch KPI.
  6. Promote — if KPI recovers, roll out network-wide.
Figure 27.3b — End in a config change, not a guess
symptomKPI / counter diphypothesismatched culprit (Ch.25)A/B testone cell vs controlpromoteif KPI recoversSymptom → hypothesis → test on one cell → roll outThe A/B step is what separates a fix from a coincidence.
Figure 27.3b. A disciplined investigation ends in a verified config change. Take the symptom (a KPI or counter dip), form a hypothesis by matching it to a known PHY culprit (Ch.25), change one parameter on a single cell and A/B it against untouched neighbours, and promote network-wide only if the KPI actually recovers. The A/B step is what distinguishes a real fix from a coincidence.
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).

MCSQmR × 1024Spectral efficiency
02 (QPSK)1200.234
121570.306
221930.377
322510.490
423080.602
523790.740
624490.877
725261.027
826021.176
926791.326
104 (16QAM)3401.328
1143781.477
1244341.695
1344901.914
1445532.160
1546162.406
1646582.570
176 (64QAM)4382.566
1864662.730
1965173.029
2065673.322
2166163.609
2266663.902
2367194.213
2467724.523
2568224.816
2668735.115
2769105.332
2869485.555
292reservedretransmission
304reservedretransmission
316reservedretransmission
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.

MCSQmR × 1024SE
021200.234
121930.377
223080.602
324490.877
426021.176
543781.477
644341.695
744901.914
845532.160
946162.406
1046582.570
1164662.730
1265173.029
1365673.322
1466163.609
1566663.902
1667194.213
1767724.523
1868224.816
1968735.115
208 (256QAM)682.55.332
2187115.555
2287545.891
2387976.227
2488416.570
2588856.914
268916.57.160
2789487.406
28–31reservedretransmissions
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.

MCSQmR × 1024SE
02300.0586
12400.0781
22500.0977
32640.1250
42780.1523
52990.1934
621200.2344
721570.3066
821930.3770
922510.4902
1023080.6016
1123790.7402
1224490.8770
1325261.0273
1426021.1758
1543401.3281
1643781.4766
1744341.6953
1844901.9141
1945532.1602
2046162.4063
2164382.5664
2264662.7305
2365173.0293
2465673.3223
2566163.6094
2666663.9023
2767194.2129
2867724.5234
292reserved (retransmission)
304reserved (retransmission)
316reserved (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.

MCSQmR × 1024SE
021200.2344
121930.3770
224490.8770
343781.4766
444901.9141
546162.4063
664662.7305
765173.0293
865673.3223
966163.6094
1066663.9023
1167194.2129
1267724.5234
1368224.8164
1468735.1152
158682.55.3320
1687115.5547
1787545.8906
1887976.2266
1988416.5703
2088856.9141
218916.57.1602
2289487.4063
2310 (1024QAM)805.57.8662
24108538.3301
2510900.58.7939
26109489.2578
272reserved (retransmission)
284reserved
296reserved
308reserved
3110reserved
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

  1. 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.)
  2. Read DCI MCS field (5 bits, 0–31). If in retransmission range, TBS comes from prior transmission.
  3. 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.

idxTBSidxTBSidxTBSidxTBS
1242524049808731992
2322625650848742088
3402727251888752152
4482828852928762216
5562930453984772280
66430320541032782408
77231336551064792472
88032352561128802536
98833368571160812600
109634384581192822664
1110435408591224832728
1211236432601256842792
1312037456611288852856
1412838480621320862976
1513639504631352873104
1614440528641416883240
1715241552651480893368
1816042576661544903496
1916843608671608913624
2017644640681672923752
2118445672691736933824
2219246704701800
2320847736711864
2422448768721928
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
  1. nPRB=4, Nsymb,sh=7, DMRS=12 REs/RB, oh=0 → NRE' = 7·12 − 12 = 72; capped 72; total = 288.
  2. Qm=2, R=0.378, v=1 → Ninfo = 288·0.378·2 = ~218 bits.
  3. Ninfo ≤ 3824 → n = max(3, ⌊log₂(218)⌋−6) = max(3, 1) = 3; 2³ = 8; Ninfo' = max(24, 8·27) = 216.
  4. 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
  1. NRE' = 144−12 = 132 (capped); total = 132·100 = 13,200.
  2. Ninfo = 13,200·0.10·2·1 = 2,640 bits.
  3. Ninfo ≤ 3824 → quantize → look up → TBS ≈ 2,664 bits.

B.6 Example 5 — Massive (256-QAM, 273 RBs, 14 sym, 4 layers)

Peak eMBB
  1. NRE' = 168−12 = 156 (right at cap); total = 156·273 = 42,588.
  2. Qm=8, R=0.926, v=4 → Ninfo = 42,588·0.926·8·4 ≈ 1,261,000 bits.
  3. Quantize and segment with C ≈ 150 code blocks → TBS ≈ 1.26 Mbits per slot.
  4. 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

TypeShared propertiesUse case
ADoppler shift, Doppler spread, average delay, delay spreadFull coherent — typically used to QCL PDSCH-DMRS with TRS for fine timing/freq tracking
BDoppler shift, Doppler spreadWhen only Doppler is relevant — e.g. inter-frequency measurement
CDoppler shift, average delayCoarse, for initial acquisition (SSB)
DSpatial 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

ChannelTypical 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

BandUL (MHz)DL (MHz)DuplexUse
n11920–19802110–2170FDD2.1 GHz IMT, Europe/Asia
n31710–17851805–1880FDD1.8 GHz, Europe/Asia
n5824–849869–894FDD850 MHz, Americas
n72500–25702620–2690FDD2.6 GHz IMT-E
n8880–915925–960FDD900 MHz, Europe
n20832–862791–821FDD800 MHz digital dividend
n28703–748758–803FDD700 MHz APT, Asia/EU
n382570–26202570–2620TDD2.6 GHz TDD
n412496–26902496–2690TDD2.5 GHz, Sprint/T-Mo
n661710–17802110–2200FDD1.7/2.1 GHz AWS-3
n701695–17101995–2020FDDAWS-4
n71663–698617–652FDD600 MHz, T-Mo US
n773300–42003300–4200TDD3.7–4.2 GHz mid-band
n783300–38003300–3800TDD★ 3.5 GHz, the most common NR band globally
n794400–50004400–5000TDD4.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

BandFrequency (GHz)Notes
n25726.5–29.5★ 28 GHz, mobile in Japan/US/Korea
n25824.25–27.526 GHz, mobile in EU
n26037–4039 GHz, mobile in US (Verizon)
n26127.5–28.3528 GHz subset, FWA
Table D.2 — FR2-1 bands.

D.3 FR2-2 — Rel-17 (52.6–71 GHz)

BandFrequency (GHz)Notes
n26247.2–48.2Rel-17 FR2-2
n26357–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/(Δupdown) → 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.

Website: www.cafetele.com
Email: [email protected]

© 2026 Abhijeet Kumar • CafeTele • All Rights Reserved • Unauthorized Reproduction Prohibited
CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE CAFETELE