CRC-Aided SC List
How CRC Concatenation Rescues List Decoding
Arikan's original successive-cancellation (SC) decoder for polar codes is elegant and low-complexity but performs poorly at finite block lengths because a single early bit error propagates through the rest of the decoding tree. List decoding fixes the propagation problem by exploring multiple hypotheses: at each information bit the decoder forks both the 0 and 1 hypotheses, keeps the L paths with the best accumulated metric, and prunes the rest. The flaw is in the final step. After SCL produces its L survivors, the path with the best metric is not always the transmitted codeword, even when a correct candidate sits somewhere in the list. Researchers observed that the true codeword was frequently present but simply not selected.
CRC-aided SC list decoding solves the selection problem by concatenating a short cyclic redundancy check with the message before polar encoding. The CRC turns into an error-detecting outer code. After SCL finishes, the decoder recomputes the CRC on each of the L candidates and immediately discards any path that fails, then chooses the best-metric path among those that pass. As long as the correct path survives in the list and no incorrect path happens to satisfy the CRC, the decoder selects the right codeword. The probability that a wrong path falsely passes is approximately 2−r per candidate for an r-bit CRC, so even a modest CRC makes false selection rare.
The second, less obvious benefit is distance: the CRC and polar code together behave like a concatenated code whose minimum distance exceeds that of the polar code alone. This is why CA-SCL beats not only ordinary SCL but, at practical list sizes, even approaches the maximum-likelihood performance bound of the standalone polar code. The combined gain is what convinced 3GPP to adopt polar codes with CA-SCL for the 5G NR uplink and downlink control channels.
Path Metric and CRC Selection
PMl(i) = PMl(i−1) + ln(1 + e−(1−2ûi)·Li)
Hardware approximation:
PM ≈ PMprev + |Li| if ûi ≠ ½(1 − sign Li), else unchanged
Final CRC-aided selection:
ŵ = arg minl { PMl(N) : CRC(message bits of path l) = 0 }
False-pass probability of a wrong path:
Pfa ≈ 2−r per surviving candidate, r = CRC length in bits
Where Li is the channel log-likelihood ratio at bit i, ûi is the trial hard decision, N is the polar block length, and L is the list size. Example: r = 11 bit CRC, L = 8 survivors → Pfa ≈ 8 × 2−11 ≈ 0.004.
Decoder Comparison at Short Block Lengths
| Decoder | Complexity | BLER vs. SC (at 1e−3) | Latency | 5G NR role | Notes |
|---|---|---|---|---|---|
| SC (plain) | O(N log N) | baseline (worst) | Low, sequential | Not used directly | Error propagation hurts |
| SCL, L=8 | O(L·N log N) | ~1 to 2 dB better | Moderate | Intermediate step | Best-metric selection fails sometimes |
| CA-SCL, L=8 | O(L·N log N) | ~2.5 to 3.5 dB better | Moderate | PDCCH, PUCCH, PBCH | CRC picks the correct survivor |
| CA-SCL, L=32 | O(L·N log N) | ~0.2 to 0.4 dB over L=8 | Higher | Lab / reference | Diminishing returns |
| LDPC (BP) | O(N·iter), parallel | n/a (data channel) | Low, parallel | PDSCH / PUSCH data | Better for long blocks |
Frequently Asked Questions
How does the CRC actually help an SC list decoder choose the right path?
Plain SCL finishes with L survivors and normally outputs the best path-metric candidate, but that path is sometimes wrong even when a correct candidate exists in the list. CA-SCL appends a short CRC (6, 11, 16, or 24 bits in 5G NR) to the message before encoding. After SCL produces its L candidates, the decoder recomputes the CRC on each and discards every failing path, then picks the best-metric path among the CRC-passing ones. As long as the true codeword survives and no wrong path also passes the CRC, selection is correct, which closes most of the gap to maximum-likelihood decoding.
What list size L and CRC length does 5G NR use for polar codes?
3GPP TS 38.212 uses an 11-bit CRC for uplink control (PUCCH/PUSCH UCI) and a 24-bit CRC for the downlink PDCCH and the PBCH. Commercial receivers typically run CA-SCL with L = 8, balancing block error rate against latency and area. Pushing L to 16 or 32 yields only a few tenths of a dB because survival of the correct path, not CRC selection, becomes the limiter. PDCCH also uses distributed CRC interleaving so the decoder can early-terminate paths that violate the partial CRC.
Why can a longer CRC sometimes hurt CA-SCL performance?
Two effects compete. A longer CRC lowers the false-pass probability of a wrong path, roughly 2−r per survivor, so a 24-bit CRC almost never lets a bad path through. But those CRC bits are overhead that steal coding gain: for a fixed transmitted block, more CRC bits leave fewer redundancy bits for the polar code, raising the effective rate. At short blocks the overhead penalty dominates, so a 6 to 11 bit CRC is often optimal; longer CRCs are justified only for larger blocks or very low undetected-error targets.
How does CA-SCL latency and complexity compare to LDPC decoding?
CA-SCL scales as O(L·N log N) and is inherently sequential because successive cancellation decodes bits one at a time along the polar tree, giving higher latency per bit than a fully parallel LDPC belief-propagation decoder. That is why 5G NR uses polar CA-SCL for short control blocks (up to about 1706 payload bits) and LDPC for the high-throughput data channel. For small control payloads, CA-SCL with L = 8 delivers excellent block error rate at low SNR with acceptable latency, while LDPC dominates on the large data blocks where its parallelism wins.