5G NR Channel Coding
5G NR channel coding is the bit-protection framework used to prepare data and control payloads for transmission on NR physical channels. It adds CRC bits, segments large payloads when needed, applies the selected coding family, and rate-matches the coded output to the available transmission resources.
Read this page as the main coding hub for NR PHY. Shared-data transport on PDSCH and PUSCH mainly uses LDPC. Important control and broadcast paths such as PDCCH and PBCH use Polar coding. Very short control payloads can use small-block coding.
| Technology | 5G NR |
|---|---|
| Main spec | 3GPP TS 38.212 |
| Related specs | 3GPP TS 38.214 and TS 38.213 for scheduling and code-rate context |
| Release | Release 18 |
| Main coding families | LDPC, Polar coding, and small-block coding |
| Main steps | CRC attachment, segmentation, coding, rate matching, interleaving, concatenation |
| Why it matters | Channel coding determines how payload and control bits are protected, segmented, and prepared for transmission across NR PHY channels |
Contents
Overview
NR coding is not one single encoder. It is a chain of preparation steps that depends on payload type, size, and physical-channel context.
- CRC attachment adds error-detection bits.
- Large payloads may be segmented into code blocks.
- The selected coding family encodes each code block.
- Rate matching reshapes the coded output to fit the scheduled resources.
Quick interpretation
| Role | Protect data and control bits before they are mapped to the physical channel |
|---|---|
| Main steps | CRC attachment, segmentation, channel coding, rate matching, interleaving, and code-block concatenation |
| Main families | LDPC, Polar coding, and small-block coding |
| Main data paths | DL-SCH on PDSCH and UL-SCH on PUSCH |
| Main control paths | PDCCH, PBCH, and selected UCI paths on PUCCH |
How the coding chain works
The coding chain starts from a transport payload or control payload, then prepares that payload so it can be transmitted and decoded with enough robustness for the selected channel conditions and resource allocation.
payload
-> CRC attachment
-> code block segmentation
-> channel coding
-> rate matching / interleaving
-> concatenation
-> physical mapping | Step | Purpose | Reading notes |
|---|---|---|
| CRC attachment | Add error-detection bits to the payload | CRC length depends on the payload type and coding path |
| Code block segmentation | Split the payload into encoder-sized blocks when needed | Large shared-data payloads usually need segmentation before LDPC coding |
| Channel coding | Apply LDPC, Polar, or small-block coding | The coding family depends on the channel and payload structure |
| Rate matching | Fit coded bits to the available transmission length | Read this together with resource allocation and MCS |
| Concatenation | Reassemble coded blocks into the transmission bit sequence | The output then moves into scrambling, modulation, and physical mapping |
CRC attachment
CRC is the first major protection step. The payload length grows by the CRC length, which is why coding work
is usually described in terms of the original payload size A and the CRC-appended size
B.
Code block segmentation
If the payload after CRC is too large for one code block in the selected coding family, the sequence is split into multiple code blocks and each code block can receive its own CRC. This is one of the central differences between large shared-data paths and shorter control paths.
Rate matching
Rate matching is where the coded sequence is adapted to the actual number of bits that can be sent on the scheduled resources. That is why coding cannot be read separately from MCS and resource allocation.
Coding families
NR uses different coding families for different roles rather than forcing all channels through the same encoder.
| Coding family | Main use | Why it matters |
|---|---|---|
| LDPC | Main shared-data coding on DL-SCH and UL-SCH | It is the core data-plane coding family behind PDSCH and PUSCH |
| Polar coding | Control and broadcast paths such as DCI and PBCH payload | It is the main control-plane coding family for key early decode paths |
| Small-block coding | Very short control payloads | Used when the payload is too short to justify the larger coding structures used elsewhere |
LDPC path
LDPC is the main transport-data coding family in NR. It is paired with code block segmentation, base-graph selection, rate matching, and block concatenation for the shared channels.
Polar path
Polar coding is used for key control and broadcast payloads such as PDCCH DCI and PBCH payload. It includes its own interleaving and rate-matching steps that differ from the LDPC chain.
Small-block path
For very short payloads, NR uses small-block coding instead of the larger LDPC or Polar machinery. This is especially relevant to short UCI cases on PUCCH.
Important formulas
These are the formulas that matter most when reading the NR coding chain at a practical level. They connect payload size, CRC overhead, segmentation, and scheduler-selected code rate.
CRC attachment
B = A + L A is the original payload size in bits. L is the CRC length in bits. B
is the size after CRC attachment.
| Symbol | Meaning |
|---|---|
A | Original payload size before CRC |
L | CRC length |
B | Payload size after CRC attachment |
LDPC code block segmentation
For LDPC, segmentation is needed only when the payload after CRC is larger than the maximum code block size supported by the selected base graph.
if B ≤ Kcb:
C = 1
Lcb = 0
B' = B
else:
C = ceil(B / (Kcb - Lcb))
Lcb = 24
B' = B + C × Lcb Kcb is the maximum code block size for the selected base graph. For LDPC base graph 1,
Kcb = 8448. For LDPC base graph 2, Kcb = 3840. C is the number of code
blocks, Lcb is the code-block CRC length, and B' is the total size after adding the
code-block CRC overhead.
Target code rate from the MCS table
R = x / 1024
In the MCS tables, the target code rate is signaled as
x scaled by 1024. The practical code-rate value used for interpretation is R.
Delivered coded length after rate matching
E = number of bits selected by rate matching for the transmission E is not fixed by coding alone. It depends on the scheduled resources, the modulation order, the
number of layers, and the transmission context. That is why rate matching belongs together with
resource allocation.
Reading note on spectral efficiency
spectral efficiency ≈ Qm × R
This is a useful reading shortcut, not a replacement for the full table interpretation. Qm is the
modulation order and R is the target code rate from the active MCS table family.
Channel-specific use
| Channel or transport path | Main coding view | What to read with it |
|---|---|---|
| DL-SCH on PDSCH | LDPC with segmentation and rate matching | MCS, TBS, DMRS overhead, and HARQ |
| UL-SCH on PUSCH | LDPC with segmentation and rate matching | MCS, Power Control, transform precoding, and HARQ |
| PDCCH DCI | Polar coding | CORESET, search space, blind decoding, and control reliability |
| PBCH | Polar coding | SSB structure, MIB delivery, and early cell detection |
| UCI on PUCCH | Polar or small-block coding depending on payload size and format | PUCCH format, UCI payload type, and control reliability |
Troubleshooting
Start by identifying which coding family applies, then verify the payload size, segmentation, and scheduler context. Many decode problems come from reading the wrong coding path rather than from a radio problem alone.
| Symptom | What to inspect first |
|---|---|
| Shared-channel decode looks weaker than expected | LDPC base-graph assumptions, code block segmentation, MCS, and rate matching |
| Control decode fails while data looks normal | Whether the path is Polar-coded, plus the PDCCH or PBCH-specific context |
| Transport size does not match expectation | CRC overhead, segmentation, TBS, and the active rate-matching length |
| Repeated retransmissions after aggressive scheduling | MCS, effective code rate, resource allocation, and HARQ history |
| Short UCI payload behaves differently from longer control payloads | Whether the UCI path moved from small-block coding to Polar coding or vice versa |
Common mistakes
- assuming all NR channels use the same coding family
- ignoring CRC and code-block CRC overhead in payload calculations
- reading a large payload as one code block when segmentation actually applies
- separating coding analysis from rate matching and MCS
- treating a decode failure as a pure radio issue before checking whether the coding path was interpreted correctly
References
- 3GPP TS 38.212 Release 18 - main NR multiplexing and channel-coding specification covering CRC attachment, segmentation, coding families, rate matching, and concatenation
- 3GPP TS 38.214 Release 18 - physical-layer data procedures including target code-rate selection through the active MCS table
- 3GPP TS 38.213 Release 18 - physical-layer control procedures that provide scheduling context for coded transmissions
- 3GPP TS 38.331 Release 18 - RRC configuration for channel and scheduling contexts that influence coding interpretation
FAQ
What is channel coding in 5G NR?
It is the bit-protection framework used to prepare data and control bits for transmission on NR physical channels.
Which NR paths use LDPC?
The main shared-data paths on PDSCH and PUSCH use LDPC.
Which NR paths use Polar coding?
Important control and broadcast paths such as PDCCH DCI and PBCH payload use Polar coding.
Why is code block segmentation needed?
It keeps large payloads inside the maximum supported code-block size of the selected coding family.
Why do formulas matter on a coding page?
Because CRC overhead, segmentation, and target code rate directly change how many bits are protected, how they are split, and how they fit the scheduled transmission length.