Source-linked AI summary
List Decoding of Polar Codes
Ido Tal, Alexander Vardy
TL;DR
Polar codes perform disappointingly at short to moderate block lengths despite their asymptotic capacity-achieving property. The paper introduces SCL decoding, showing near-ML performance for most-likely-codeword selection and LDPC-comparable performance with a simple genie approximation, using O(L·n log n) time and O(L·n) space.
Problem
Polar codes are capacity-achieving asymptotically, but their performance at short to moderate block lengths is disappointing, potentially because of weak codes, degraded SC decoding, or both.
Method
The paper generalizes SC decoding into SCL decoding by concurrently considering up to L paths, pruning to the most likely paths, and using a CRC-based genie approximation.
Results
Most-likely-codeword selection produces performance very close to ML decoding for moderate L, while the genie-assisted modification yields performance comparable to state-of-the-art LDPC codes.
Takeaways & Limitations
SCL decoding addresses SC-decoder sub-optimality, and the modified polar-code scheme substantially improves error-rate performance within the reported comparisons.
Abstract
from arXiv · showhide
We describe a successive-cancellation \emph{list} decoder for polar codes, which is a generalization of the classic successive-cancellation decoder of Arıkan. In the proposed list decoder, up to $L$ decoding paths are considered concurrently at each decoding stage. Then, a single codeword is selected from the list as output. If the most likely codeword is selected, simulation results show that the resulting performance is very close to that of a maximum-likelihood decoder, even for moderate values of $L$. Alternatively, if a "genie" is allowed to pick the codeword from the list, the results are comparable to the current state of the art LDPC codes. Luckily, implementing such a helpful genie is easy. Our list decoder doubles the number of decoding paths at each decoding step, and then uses a pruning procedure to discard all but the $L$ "best" paths. %In order to implement this algorithm, we introduce a natural pruning criterion that can be easily evaluated. Nevertheless, a straightforward implementation still requires $Ω(L \cdot n^2)$ time, which is in stark contrast with the $O(n \log n)$ complexity of the original successive-cancellation decoder. We utilize the structure of polar codes to overcome this problem. Specifically, we devise an efficient, numerically stable, implementation taking only $O(L \cdot n \log n)$ time and $O(L \cdot n)$ space.
I. INTRODUCTION
Polar codes are capacity-achieving asymptotically but perform disappointingly at short to moderate block lengths. The paper introduces SCL decoding, whose most-likely-path output approaches ML performance, while a genie-assisted variant is comparable to state-of-the-art LDPC codes.
- Polar codes combine explicit construction, efficient encoding and decoding, and capacity achievement over binary-input symmetric memoryless channels.
- Short- and moderate-length performance is disappointing, potentially because of weak codes, degraded SC decoding, or both.
- SCL decoding generalizes SC decoding by maintaining a list of paths, with L = 1 recovering classic SC decoding.
- Choosing the most likely codeword from the list yields performance very close to ML decoding over a large range, even for moderate L.
- A simple genie-assisted modification makes polar-code performance comparable to state-of-the-art LDPC codes, although some length-2048 rate-1/2 LDPC codes perform better.
- The SCL decoder is implemented with O(L·n log n) time, while the paper reduces SC-decoder space complexity from O(n log n) to O(n).
II. FORMALIZATION OF THE SUCCESSIVE CANCELLATION DECODER
The paper formalizes SC decoding by representing the transmitted polar-code information and codeword vectors, the channel, and the received word. Decoding maps the received word to an estimated codeword and information vector.
- The SC decoder is recast in the paper’s notation for later use.
- A polar code has length n and dimension k, with n − k frozen bits.
- The information-bit vector u includes frozen bits and maps to the corresponding codeword c.
- The codeword is transmitted over a binary-input channel W, producing the received word y.
- A decoding algorithm applied to y produces a decoded codeword ĉ and corresponding information bits û.
A. An outline of Successive Cancellation
The SC decoder processes phases sequentially, calculating probability pairs before deciding each estimated information bit and ultimately returning a decoded codeword.
- At each phase ϕ, the decoder calculates a pair of probabilities for the corresponding bit channel before deciding ˆu_ϕ.
- Algorithm 1 takes the received vector y as input and outputs a decoded codeword ˆc.
- The main loop iterates over phases ϕ = 0, 1, ..., n − 1.
- The decoder returns the codeword corresponding to the estimated information vector ˆu.
- The probability calculations use recursively defined channel quantities across layers, with W_0^(0)(y|u) = W(y|u) as the stopping condition.
B. Detailed description
The detailed implementation organizes probability and bit information in layer-indexed arrays, recursively propagates values, and establishes correctness through an induction-based invariant.
- The implementation uses probability arrays P_λ indexed by channel positions and bit values, together with bit arrays B_λ for decoded inputs.
- Branch numbers identify recursive channel inputs and outputs, with branch β mapping to combinations such as u_2ψ ⊕ u_2ψ+1 and u_2ψ+1.
- At layer 0, the input and output for branch β correspond to y_β and ˆc_β, respectively.
- The first implementation has O(n log n) running time and O(n log n) space complexity.
- Algorithms 2–4 are proved valid by showing both that their operations implement SC decoding and that every read array element has been initialized.
- Recursive calculations apply the channel recursions separately according to whether the phase is even or odd.
III. SPACE-EFFICIENT SUCCESSIVE CANCELLATION DECODING
The paper reduces SC decoding space from O(n log n) to O(n) by discarding obsolete phase information and renaming bit-array storage without changing the algorithm’s runtime.
- The SC decoder runs in O(n log n) time, while the initial implementation uses O(n log n) space.
- P-array storage is reduced to O(n) by retaining only probability entries that remain relevant at the current phase.
- The B arrays are renamed and resized as C arrays so storage retains branch and phase-parity information while discarding redundant phase indices.
- The revised space-efficient decoder is given in Algorithms 5–7.
- The space-reduction observations also support the later analysis of the list decoder’s time complexity.
IV. SUCCESSIVE CANCELLATION LIST DECODER
The SCL decoder maintains up to L candidate paths by splitting on unfrozen bits and pruning to the most likely paths, while exploiting polar-code structure to reduce implementation cost.
- SCL decoding generalizes SC decoding by maintaining a list of candidate decoding paths controlled by list size L.
- At each unfrozen bit, the decoder examines both bit values, doubles the paths, and prunes them to at most L most likely candidates.
- Figure 4 shows decoding paths for L = 4, with at most four continuing nodes per level and discontinued paths colored gray.
- A naive implementation duplicates each parent path’s data structures, requiring Ω(L · n^2) time because there are Ω(L · n) splits and each path stores Ω(n) data.
- The proposed implementation achieves O(L · n log n) time instead of the naive Ω(L · n^2) bound.
- The implementation exploits the fact that larger P_λ and C arrays are accessed less frequently, balancing copying cost against access frequency.
A. Low-level functions
The low-level implementation manages active decoding paths and shared probability and bit arrays through indexed banks, reference counts, and path-state operations. It preserves well-defined execution while deliberately favoring simplicity over speed in one copying decision.
- Path management: Each path has an index and can transition between active and inactive states, with a stack tracking inactive path indices.The activePath array records whether each path is active, while inactivePathIndices stores reusable inactive indices.
- Shared data structures: Probability-pair and bit-pair arrays are organized into banks of L arrays per layer and may be shared by multiple active paths.Pointer mappings connect each path and layer to its corresponding arrays.
- Shared data structures: Reference counts track how many paths use each array, allowing zero-reference arrays to be reclaimed through inactive-array stacks.The same reference count applies to the probability and bit-array pointers at a given layer and bank index.
- Path management: Cloning a path makes the two resulting paths share probability and bit arrays until later access requires separation.The clone operation is the final step before splitting and initially shares both array types.
- Implementation trade-off: The implementation deliberately calls its pointer-access functions before both reads and writes, although copying is needed only before writing.This explicitly sacrifices speed for simplicity.
- Correctness conditions: A valid calling sequence guarantees bounded stack operations and ensures every array read follows a prior write.The implementation also proves consistency between active-path states, inactive stacks, and array reference counts.
B. Mid-level functions
The mid-level implementation extends the SC calculations across all active list paths while preserving consistency for shared arrays. It also normalizes probabilities to address floating-point underflow, though the correction does not guarantee that underflows never occur.
- List-path calculations: Algorithms 14 and 15 implement the SC calculation procedures for list decoding.The new implementations loop over all path indices and use shared-array pointer functions to preserve calculation consistency.
- List-path calculations: Shared-array pointer functions maintain consistent calculations when multiple decoding paths use the same probability and bit arrays.The implementations invoke getArrayPointer_P and getArrayPointer_C while iterating over path indices.
- Numerical stability: Probability normalization sets the highest probability to 1 after calculation to reduce the risk of meaningless comparisons caused by floating-point underflow.Earlier SC implementations could round both probabilities to 0 for sufficiently long codes, making comparisons meaningless.
- Numerical stability: With infinitely accurate floating-point variables, the unnormalized and normalized algorithm variants differ only by multiplicative scaling of probability values.The paper formalizes this equivalence under the perfect-floating-point assumption.
- Numerical stability: Normalization does not assure that underflows will never occur, but the probability of a meaningless comparison due to underflow becomes extremely low.This is stated as the correction's remaining limitation.
C. High-level functions
The SCL decoder processes active paths through a main loop, prunes doubled forks to retain the L best paths, and returns the most likely final codeword. Its implementation achieves O(L · n log n) running time and O(L · n) space, avoiding the naive O(L · n^2) copying cost.
- Main loop: The main loop initializes the decoder, processes all n phases, and returns the best codeword in the list.The algorithm takes received vector y and list size L as input.
- Path pruning: At each split, the decoder marks the ρ largest-probability forks among 2L candidates, kills paths with no continuing fork, and splits paths when both forks continue.Paths are killed before surviving paths are continued or split.
- Path pruning: The pruning procedure leaves only the L “best” paths according to their path probabilities.The implementation uses path continuation markers and probability comparisons to perform selection.
- Complexity: The SCL decoder has O(L · n) space complexity.The allocated list-decoder data structures use O(L · n) space, with additional O(L), O(1), and O(log n) terms for selection, local variables, and recursion.
- Complexity: The SCL decoder has O(L · n log n) running time.With m = log n, the running-time table gives O(L · m · n), and the recursive calculation contributes O(L · m · n).
- Complexity: A naive implementation would require Ω(L · n^2) time because each path split duplicates data structures of size Ω(n).Reducing array sizes and exploiting shared structures helps reduce the list-decoding running time.
V. MODIFIED POLAR CODES
Simulations show that increasing the list size improves decoder performance, but with diminishing returns. A CRC-based modification approximates a genie that selects the transmitted path, producing performance comparable to state-of-the-art LDPC codes while reducing the code rate.
- Simulation results: Simulation results show that decoder performance improves as the list size L increases.Figure 5 reports word error rate for rate-1/2 polar codes of lengths 2048 and 8192, optimized for SNR = 2 dB.
- Simulation results: Increasing the list size exhibits diminishing returns.The paper identifies this phenomenon in the simulated decoder performance.
- Simulation results: The ML-bound curve is a lower bound on the ML decoder’s error probability, based on failures where the decoded codeword is more likely than the transmitted codeword.The bound is constructed from simulations with L = 32.
- Modified polar codes: With the modification, polar-code performance is comparable to state-of-the-art LDPC codes.The motivation is that the transmitted path often remains in the final list but is not selected because another path is more likely.
- Modified polar codes: A CRC-based concatenation approximates a genie by appending an r-bit CRC to the first k − r information bits.The decoder discards paths with invalid CRCs when at least one valid path remains, then chooses the most likely valid path.
- Modified polar codes: The modified code reduces its rate from k/n to (k − r)/n.The rate penalty results from reserving the last r unfrozen bits for the CRC.
- Modified polar codes: Systematic decoding further improves bit-error rate, but not block-error rate.This comparison concerns the original and modified polar-code variants.