Home / 5G / Protocols / PHY / Channel Coding

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
5G NR channel coding chain showing CRC attachment, code block segmentation, coding family selection, rate matching, and transmission-ready bits
A useful coding view starts with the transport or control payload, then follows CRC, segmentation, coding, and rate matching.
5G NR channel coding families showing LDPC for shared data, Polar coding for control and broadcast, and small-block coding for short control payloads
NR does not use one universal coding family. The channel type and payload structure decide which coding path applies.

Contents

  1. Overview
  2. How the coding chain works
  3. Coding families
  4. Important formulas
  5. Channel-specific use
  6. Troubleshooting
  7. References
  8. FAQ

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.

Related PHY topics