♪ NOW PLAYING 0 Old Flame Like A Dream | *** thanks for stopping by my corner of the web *** best viewed at 800x600 *** sign my guestbook *** The Problem Shannon Left BehindChannel Coding Every phone call you make, every video you stream, and every bit your SSD reads back correctly is riding on an idea that spent forty-five years looking impossible. In 1948 Claude Shannon proved that essentially error-free communication over a noisy channel is achievable, then left engineers a problem so hard that closing the gap between his theorem and working hardware took until the 1990s, and the story is still unfolding in the coding standards deployed today. This series traces that story through its three protagonist code families: turbo codes, LDPC codes, and polar codes. This opening page sets up the problem they all answer, equips you with the small toolkit the whole series leans on, and fixes the shared vocabulary (and the classic traps) you’ll need to read any performance curve honestly. Shannon’s Theorem and Its Two Unsolved ProblemsShannon’s 1948 theorem says that every noisy channel has a capacity , and that for any rate there exist codes making the error probability as small as you like. That is an astonishing claim: noise does not impose a quality ceiling, only a rate ceiling. But look at how the proof works and the trouble starts. Shannon didn’t construct a good code; he showed that a code whose codewords are drawn at random performs well on average, when decoded by maximum-likelihood (ML) decoding, which compares the received word against every codeword and picks the closest. That proof is famously unhelpful in practice, because it leaves two problems unsolved. First, construction: a random code has no structure, so the only way to specify it is to store all codewords explicitly. For information bits (a modest block by modern standards) that is more codewords than atoms in the observable universe. Second, decoding: ML decoding of an unstructured code means checking all candidates, an search that is physically unrealizable for any interesting . The obvious escape is structure. Give the code algebraic regularity and both problems soften: a compact description replaces the codeword list, and clever algorithms replace brute-force search. But for decades the field’s working belief was that this escape came at a price. Here is the central tension of coding theory in one breath: structure makes decoding tractable, but structure was thought to cost performance; randomness achieves capacity, but random codes cannot be decoded. Highly structured codes (Hamming, BCH, Reed-Solomon, convolutional codes with Viterbi decoding) were decodable and useful, yet they sat stubbornly far from Shannon’s limit. Random codes sat at the limit and were useless. Every code family in this series is a different answer to the same question: how do I get random-like performance from a structure I can actually decode? Each family’s trick fits in a sentence.
Notice the historical irony hiding in that table. Shannon’s proof paired an unstructured code with the optimal decoder. All three modern families do the reverse: they pair structured codes with suboptimal decoders. Turbo and LDPC decoding are heuristic (their message-passing algorithms are exactly optimal only on cycle-free graphs, which real codes never are), and the basic successive-cancellation decoder for polar codes is greedy, committing to each bit decision without ever revisiting it. The great empirical surprise of the last three decades is that this concession costs almost nothing: the gap between these practical decoders and true ML decoding turned out to be negligible. The field spent forty years assuming decodability and performance were enemies; they turned out to be nearly free of each other. PreliminariesBefore you can reason about any of the three families, you need a small amount of classical machinery in hand. None of it is deep, but all of it is used constantly, so it’s worth checking each piece now rather than mid-derivation later. From linear block codes you need the two matrix descriptions and what they buy you. A generator matrix maps information words to codewords, , and an parity-check matrix characterizes membership: is a codeword exactly when . Applying to a received word gives the syndrome, which depends only on the error pattern, not on which codeword was sent; that separation is what makes algebraic decoding possible at all. The minimum distance , the smallest Hamming distance between distinct codewords (equivalently, the smallest weight of a nonzero codeword, by linearity), controls how the code behaves when the channel is good; hold that thought, because the performance vocabulary below returns to it. From convolutional codes you need the picture of an encoder as a small shift register whose generator polynomials tap its state, and the two equivalent unrollings of that state machine: the state diagram and, unrolled in time, the trellis. The trellis matters because the Viterbi algorithm is nothing more than a shortest-path search through it, and the trellis view is the doorway to the soft-decision decoders at the heart of turbo decoding. The convolutional analogue of minimum distance is the free distance , the lowest weight of any path that leaves the all-zero state and returns to it. You also need the three channel models the whole literature is calibrated against. The binary symmetric channel BSC() flips each bit independently with probability . The binary erasure channel BEC() never lies but sometimes shrugs: each bit arrives intact or is erased with probability , and its analytical transparency makes it the sandbox where nearly every theorem in this series is proved first. The binary-input AWGN channel adds Gaussian noise to a BPSK symbol and is where real radios live. Each has a known capacity, and “gap to capacity” always means the gap to the relevant one of these. Finally, one classical estimate ties distance to error probability. For soft-decision decoding on the BI-AWGN channel, the union bound sums pairwise error probabilities over all wrong codewords using the Gaussian tail function : Proof of the union boundLinearity: the multiset of distances from any codeword to the rest of the code is the same for every choice of reference codeword. A linear code is a subgroup under XOR, and Hamming distance is XOR weight, . For fixed , translation is a bijection of onto itself (it is its own inverse, and closure keeps it inside ), so
the weight distribution of : independent of . The union bound sums a fixed function over exactly this multiset of distances; a sum depends only on the multiset of values fed into it, not on which codeword produced which value, so its total is likewise independent of which codeword is transmitted. Channel symmetry: the pairwise error probability between two codewords depends only on their Hamming distance , not on which coordinates differ or which two codewords they are. This is exactly what Step 2 below computes directly: the result depends on and only through , because AWGN treats every coordinate identically and the derivation only ever uses the size of the differing set , never its location. Linearity fixes the multiset of distances each term of the union bound ranges over; channel symmetry fixes the value of each term as a function of distance alone. Together they make independent of the transmitted codeword, so it suffices to evaluate the bound for one convenient choice of . Assume without loss of generality that the all-zero codeword is transmitted, mapped under BPSK to . Step 1: maximum-likelihood decoding is minimum-distance decoding. Every codeword maps under BPSK to a signal point of the same energy, , so maximizing the AWGN likelihood over codewords is the same as minimizing the Euclidean distance . The ML decoder simply picks the closest signal point. Step 2: the pairwise error probability. Fix one competing codeword at Hamming distance , and let be the set of coordinates where and differ; there while . The coordinates outside are identical in and , so they contribute equally to both distances and cancel, leaving
Substituting with i.i.d. gives with , so
Writing for the energy per coded symbol, , and for the energy per information bit, , so this pairwise error probability is exactly : the summand of the boxed bound. Step 3: the union bound. The decoder errs exactly when some competing codeword beats : the error event is the union, over every , of the pairwise events just computed. Boole’s inequality bounds the probability of a union by the sum of the individual probabilities,
At high SNR the nearest codewords dominate this sum, which is precisely why rules the high-SNR regime; at low SNR the bound goes slack, which is an early hint that a different kind of analysis will be needed there. Both halves of that observation drive the series. Log-Likelihood RatiosAll three decoders in this series traffic in the same quantity, so it deserves its own introduction. The log-likelihood ratio of a bit is and its two components carry the two things a decoder can know about a bit. The sign is the hard decision: favours bit , favours bit . The magnitude is the confidence: is a near-certainty, is barely better than a coin flip, and is total ignorance. Everything the turbo, LDPC, and polar-list decoders do can be read as arithmetic on these two components: combining independent pieces of evidence adds LLRs, and the various message-passing update rules are just careful bookkeeping about which evidence may be added where. LLRs are the working currency of this entire series; when in doubt about what a decoder equation means, translate it back into “sign is the vote, magnitude is the conviction.” Now for the trap, and it is worth flagging in bold because it is the single most common source of confusion when reading across papers: two opposite sign conventions coexist in the literature. These notes use throughout, so positive LLR means bit ; under the standard BPSK mapping , , positive LLR also means the transmitted symbol was . Plenty of papers put on top instead, which silently negates every equation. If a formula from an external source disagrees with one here by an overall sign, check the convention before checking the algebra. (The original sources have their own quirks too: Gallager’s 1963 thesis works in raw probabilities rather than LLRs, and Arıkan’s 2009 paper uses likelihood ratios rather than their logarithms; the relevant pages of this series translate as needed.) One concrete LLR appears so often it should be memorized. For the BI-AWGN channel with transmitted amplitude , noise variance , and received sample , the channel LLR is exactly linear in the observation: The received value itself is the evidence; the channel reliability just scales it. A strongly positive through a clean channel yields a large positive LLR, and the same through a noisy channel yields a timid one. Every decoder in this series takes as its raw input. Performance Metrics and TerminologyThe three families will be judged against each other constantly, so the judging language needs to be precise from the start. A coded system’s error-rate curve, plotted against SNR, has two characteristic regions. The waterfall region (or cliff) is the SNR range where the error rate plunges steeply, often by orders of magnitude within a fraction of a dB. The error floor is the flattening that can appear at high SNR, where the curve stops plunging and settles into a shallow slope. These two regions are governed by different properties of the code. The waterfall is governed by the threshold: the worst channel parameter for which the iterative decoder’s error probability can be driven to zero as the block length and iteration count both grow without bound. A threshold is an asymptotic quantity; a finite-length code approaches it but never reaches it. The floor, by contrast, is governed by the code’s low-weight codewords and similar small weak spots, which is to say by and its friends, exactly as the union bound predicted. Here is the trap worth internalizing now, because it will save you from misreading half the plots in this field: threshold and minimum distance are independent knobs. A code can have a wonderful threshold and a terrible floor, or a mediocre threshold and a floor too low to measure. Turbo codes are the classic example: a spectacular waterfall startlingly close to capacity, and a clearly visible floor caused by a small population of low-weight codewords. Forney’s remark, quoted by Benedetto and Montorsi, captures how thoroughly this scrambled the field’s instincts: “Turbo codes seem to turn the conventional design principles on their head; they make error coefficients more important than minimum distance!” The error coefficient (how many bad codewords there are) had always been a second-order correction to the distance (how far away they are); turbo codes inverted that priority, and the notion of interleaver gain, the factor by which the error coefficient shrinks as the interleaver grows, will make the inversion quantitative when the series reaches the turbo pages. Two more terms round out the vocabulary. Coding gain is the honest bottom line: the dB of saved at a fixed error rate compared with uncoded transmission. And a final bookkeeping trap: BLER versus BER. Block (frame) error rate counts a block as wrong if any bit in it is wrong; bit error rate counts wrong bits. The polar literature habitually plots BLER, the turbo literature habitually plots BER, and the two can differ by orders of magnitude for the same system. Never compare curves across that distinction without converting. Organization of This SeriesThree families, three tricks, and yet by the end of the series a single picture will hold them all: every decoder we study is message passing on a factor graph, and the families differ only in the graph’s shape and the schedule of the messages. The LDPC graph is sparse, random, and locally tree-like, and its decoder floods messages between all nodes in parallel. The turbo “graph” is two strong trellis codes tied through an interleaver into one enormous cycle, and its decoder alternates between the two halves, exchanging carefully filtered soft information. The polar graph is a rigid butterfly network of nodes, and its basic decoder passes messages in one fixed sequential order. Same mathematics, three geometries. The chronological route the series takes runs from Gallager’s 1963 thesis, through the 1993 turbo shock (the turbo pages) and the rediscovery and modern analysis of LDPC codes (density evolution), to Arıkan’s polar codes (capacity by construction) and the list-decoding refinements that carried all of this into deployed silicon, where the finale weighs the families against each other in practice. Check Yourself
Answers
Where This Leaves UsThe stage is set: Shannon guaranteed that capacity is reachable, his random-coding proof left both construction and decoding unsolved, and the field spent decades believing that the structure needed for decodability necessarily forfeited performance. You now hold the toolkit the series assumes (linear and convolutional codes, the three channel models, LLRs with this series’ sign convention, the union bound) and the vocabulary for judging what follows, including the crucial independence of threshold and minimum distance. The next entry rewinds to 1963, when a doctoral student named Robert Gallager quietly wrote down sparse random parity-check matrices and an iterative decoder to go with them, essentially solving the problem thirty years early, only for the work to be shelved as impractical and forgotten. Gallager’s Sparse Graphs picks up there. IndexGallager's Sparse Graphs → |