CRC Attachment
How CRC Attachment Protects a Transport Block
A cyclic redundancy check treats the information bits of a block as the coefficients of a binary polynomial b(x). The transmitter divides xL·b(x) by a fixed generator polynomial g(x) of degree L using modulo-2 arithmetic, and the L-bit remainder becomes the CRC parity word that is concatenated to the message. Because the resulting codeword is exactly divisible by g(x), the receiver can recompute the remainder over the decoded bits: a zero remainder means no detectable error, while any non-zero remainder flags a block error. In 5G NR the transport-block CRC is attached before code-block segmentation, and each segment then receives its own 24-bit CRC so the receiver can localize which segment failed.
The strength of a CRC comes from the algebraic properties of g(x). A well-chosen degree-L polynomial detects all single-bit and double-bit errors, all odd numbers of bit errors when g(x) contains the factor (x + 1), every burst error shorter than L bits, and fails to detect a random error pattern only with probability 2−L. For the 24-bit polynomials used on NR transport blocks, that residual miss rate is roughly 6 × 10−8, low enough that an undetected error is far rarer than the target block-error-rate of 10−1 to 10−2 seen before HARQ combining.
CRC attachment is tightly coupled to the decoder. With CRC-aided successive-cancellation list decoding of polar codes, the CRC is computed over the information bits and embedded so the list decoder can rank its candidate paths and keep only the one whose CRC checks. This dual role, error detection plus path selection, is why the uplink control channel and the PBCH in NR distribute CRC bits among the polar information set rather than appending them all at the tail.
CRC Polynomials and Generator Division
c(x) = xL·b(x) + [ xL·b(x) mod g(x) ] (arithmetic over GF(2))
NR transport-block CRC (L = 24), gCRC24A:
g(x) = x24 + x23 + x18 + x17 + x14 + x11 + x10 + x7 + x6 + x5 + x4 + x3 + x + 1
Undetected-error probability (random codeword):
Pud ≈ 2−L → 2−24 ≈ 6 × 10−8 | 2−16 ≈ 1.5 × 10−5
Where b(x) = information polynomial, L = CRC degree, g(x) = generator polynomial. A guaranteed burst-error detection length equals L, and all odd-weight errors are caught when (x + 1) divides g(x).
3GPP CRC Variants by Channel
| CRC name | Length (bits) | Applied to | Channel / use | Undetected Pe |
|---|---|---|---|---|
| gCRC24A | 24 | Transport block > 3824 bits | PDSCH / PUSCH (LDPC) | ≈ 6 × 10−8 |
| gCRC24B | 24 | Each segmented code block | PDSCH / PUSCH per-CB | ≈ 6 × 10−8 |
| gCRC24C | 24 | DCI payload (RNTI-scrambled) | PDCCH (polar) | ≈ 6 × 10−8 |
| gCRC16 | 16 | Transport block ≤ 3824 bits | Small PDSCH / PUSCH | ≈ 1.5 × 10−5 |
| gCRC11 | 11 | UCI 12 to 19 bits | PUCCH / PUSCH (polar) | ≈ 4.9 × 10−4 |
| gCRC6 | 6 | UCI ≤ 11 bits | Small PUCCH (polar) | ≈ 1.6 × 10−2 |
Frequently Asked Questions
Which CRC polynomials does 3GPP define for transport blocks versus code blocks?
TS 38.212 defines six generators. A transport block above 3824 bits gets a 24-bit gCRC24A, while smaller blocks use gCRC16. After segmentation each code block adds a 24-bit gCRC24B. PDCCH DCI uses gCRC24C scrambled with the RNTI, PUCCH/PUSCH UCI of 12 to 19 bits uses gCRC11, and UCI of 12 bits or fewer uses gCRC6. Longer CRCs cut the miss rate but cost more overhead.
How does the receiver use the CRC after polar or LDPC decoding?
The decoder produces candidate bits; the receiver recomputes the CRC and compares it to the received parity. A match returns a HARQ ACK, a mismatch returns a NACK and triggers retransmission of a new redundancy version. In CRC-aided polar list decoding the CRC also prunes failing paths, improving block-error-rate by roughly 0.5 to 1 dB. A 24-bit CRC misses an error with probability near 2−24.
How much overhead does CRC attachment add to a 5G NR transport block?
A 24-bit CRC on an 8448-bit information block adds about 0.28 percent. With segmentation each code block carries an extra 24-bit gCRC24B, so a block split into four segments spends 24 + 4 × 24 = 120 CRC bits. Small payloads pay much more: a 32-bit UCI under gCRC11 spends roughly 26 percent on CRC, which is why shorter gCRC6 and gCRC11 polynomials protect small control fields.