♪ NOW PLAYING 0 Old Flame Like A Dream | *** thanks for stopping by my corner of the web *** best viewed at 800x600 *** sign my guestbook *** Why Turbo Codes WorkChannel Coding The previous entry ended with a working miracle and an unanswered question. Berrou, Glavieux and Thitimajshima showed that parallel concatenation with iterative decoding reaches within a fraction of a decibel of Shannon; they did not really show why, and their seven-page conference paper left one puzzle hanging in the air. The constituent encoders must be recursive, yet a recursive encoder and its nonrecursive parent generate exactly the same set of codewords. Same code, same distance spectrum, wildly different behavior inside a turbo scheme. How can that be? Three years later, Benedetto and Montorsi’s “Unveiling Turbo Codes” supplied the missing theory, and that puzzle is precisely its central object of study. This page works through their machinery: weight enumerators, the uniform interleaver, the interleaver-gain law, and the design rules that fall out of it, then closes with the one thing their bound cannot do and the tool (EXIT charts) that fills the gap. Weight Enumerators and the Union BoundBenedetto’s entire analysis rests on a bookkeeping object. For a systematic code with input bits, the input-redundancy weight enumerating function (IRWEF) is where counts the codewords whose input (systematic) weight is and whose parity weight is ; the total codeword weight is . Fixing the input weight gives the conditional enumerator . Splitting the weight into an input part and a parity part, rather than lumping them together as a classical weight enumerator would, is not a cosmetic choice: the interleaver is about to act on the input bits only, so input weight is the quantity the whole analysis will be conditioned on. Feed the enumerator into the standard union bound for maximum-likelihood decoding on the binary-input AWGN channel and you get a bound on the bit error probability: The factor is what distinguishes this from a word-error bound: a codeword of input weight , when mistaken for the transmitted one, corrupts of the information bits. Hold onto that factor; it contributes one power of to the final result. With the bound in hand, every question about turbo performance becomes a question about the coefficients at small total weight , because at moderate-to-high SNR the smallest arguments of the -function dominate the sum. There is an immediate obstruction. The enumerator of a parallel concatenated code depends on which interleaver you chose. There are candidates, is tens of thousands, and no closed form exists for any particular one. The Uniform InterleaverBenedetto’s Definition 1 dissolves the obstruction by refusing to pick an interleaver at all. A uniform interleaver of length is a probabilistic device that maps an input word of weight to each of its distinct permutations with equal probability . No such physical device exists; it is an averaging instrument, the analytical stand-in for “an interleaver chosen at random.” Its payoff is enormous. Under uniform interleaving, what the second encoder sees is a uniformly random rearrangement of whatever the first encoder saw, so the two constituent encoders become statistically independent given the input weight , and the joint enumerator of the parallel concatenation factorizes: The average performance over all interleavers is now computable from the two constituent enumerators alone, each of which comes from a small trellis. Why should an average be meaningful? Benedetto’s answer is the same existence argument that powers random-coding proofs: the average over all interleavers is achievable by at least one deterministic interleaver, so the uniform-interleaver bound is not a fiction about imaginary hardware; some real permutation does at least this well. Empirically the statement is much stronger: almost all randomly drawn interleavers land close to the average, which is why the abstraction predicts real designs so faithfully. Weight Enumeration via the Transfer-Matrix MethodThe factorization is only useful if constituent enumerators are easy to compute, and they are: they fall out of a transfer matrix on the encoder’s state diagram. For a convolutional encoder with states, define the matrix where is the input weight of the transition and the parity weight it emits. The trick is that matrix multiplication does exactly the enumeration you want: it sums over intermediate states while multiplying monomials, and multiplying monomials adds the exponents. So enumerates every length- path from to , each tagged with its total input and parity weight, and for a terminated code the conditional enumerators of the equivalent block code are read directly from one entry: Benedetto relegates this to his Appendix, but it deserves to be worked once in full, because the whole pipeline (matrix, power, factorization, bound) fits in a few lines for a small code. Take the 2-state recursive systematic encoder with block length . The state is , the recursion is , and the parity output is . Enumerating the four transitions:
Square it once: Square again and keep only the entry: A sanity check is available because this encoder is so simple: its state after steps is just the parity of the inputs, so every even-weight input word returns to state 0 and is a valid terminated codeword. There are weight-2 inputs, and indeed the coefficients sum to ; there is weight-4 input, and the term is a single monomial. The machine is counting correctly. Now build the rate-1/3 PCCC from two copies of this encoder joined by a uniform interleaver of length 4. The factorization says to multiply the two conditional enumerators (squaring, since the encoders are identical; the product convolves the two parity weights, so the exponent of becomes the total parity ) and divide by . For : Those fractional coefficients are the signature of the uniform interleaver, and they are what Benedetto’s Example 2 is exhibiting: they are not counts of codewords (no code has one and a half codewords of weight 4) but averages over all permutations. Some interleavers give this PCCC two codewords with ; most give one or none; the mean is . The lowest-order term tells you the toy code’s effective distance: the minimum total weight reachable from a weight-2 input is . Feed into the union bound above and you have the complete interleaver-averaged performance curve of a turbo code, computed from nothing but a matrix. Everything Benedetto plots is this pipeline run on bigger constituents. Derivation of the Interleaver Gain ExponentNow for the theorem the whole paper exists to prove. Recall the fact the previous entry established on the trellis: because a recursive encoder’s feedback polynomial sits in the denominator of its transfer function, its impulse response is infinite, so a weight-1 input sets the register cycling forever and never produces a finite-weight error event. Define as the smallest input weight that can produce a finite-weight error event. For a recursive encoder ; for a nonrecursive encoder, whose impulse response is finite, . Benedetto’s equation (20) turns that single integer into an asymptotic law, and the derivation is a counting argument short enough to give completely. Let be the number of minimum-weight error events per unit time in the constituent code, and count how weight- inputs fare in a length- turbo code. First, count the bad patterns for encoder 1. An error event occupies a short, fixed span of trellis and can begin at any of roughly time instants, so about input sequences of weight drive encoder 1 into a minimum-weight event. Second, count all patterns: there are input sequences of weight in total. Third, ask the interleaver for its verdict. Under uniform interleaving the permuted sequence is equally likely to be any weight- sequence, so the probability that encoder 2 is also driven into a low-weight event is the ratio of the first count to the second: Fourth, the expected number of low-weight PCCC codewords is (bad patterns for encoder 1) times (probability encoder 2 cooperates), which scales as . Fifth and finally, convert to a bit error contribution: the union bound weights each codeword by , spending one more power of : Substituting the two values of produces the punchline of the paper:
A recursive constituent code lets the interleaver convert sheer length into a suppression of the error coefficient. A nonrecursive one gets nothing: you can grow the interleaver from a hundred bits to a million and the bound does not move. The same failure afflicts parallel concatenations of block codes, which is why the turbo construction is specifically a convolutional, recursive story. The Role of Recursive EncodingHere is the resolution of the puzzle from the opening, and it is the most conceptually interesting thing in the paper. A recursive encoder and its nonrecursive parent with the same transfer function generate exactly the same set of codewords: same code, same distance spectrum, and, used alone with ML decoding, essentially the same performance. Benedetto’s Figure 19 makes the point brutally by simulating both as ordinary standalone codes: the curves nearly coincide, and above 1 dB the nonrecursive one is actually slightly better. What differs is the input-to-codeword mapping: which input sequence gets assigned to which codeword. Recursion reshuffles that assignment so that the dangerous low-weight codewords require input weight 2 rather than input weight 1 to reach, and the mapping, not the codeword set, is what the interleaver acts on. Benedetto singles this out as the analysis’s single most important qualitative fact: recursive and nonrecursive constituent codes perform the same alone, and completely differently inside a parallel concatenation. Recursion, in other words, is not a property of the code at all. It is a property of the encoder, and turbo codes are the case in coding theory where the encoder matters independently of the code it generates. His Figures 20 and 21 show the mechanism pictorially. For the recursive encoder, low-weight inputs produce parity weights spread broadly and roughly uniformly across the whole range; for the nonrecursive encoder, low-weight inputs concentrate on a small set of low parity weights, and when those convolve with themselves in the concatenation the resulting spectrum is poor. The rest of his experimental section fills in the quantitative picture:
![]() The figure above runs the exact computation for the very encoder pair Benedetto used to make the argument, and the prediction lands within two percent. Note what the nonrecursive curves are quietly telling you: they are not merely failing to improve, they are pinned by codewords the interleaver cannot dilute. The bound is one thing and a real decoder is another, so it is worth checking that an actual iteratively decoded turbo code behaves the way the theory says. Simulating a rate-1/3 code at three interleaver lengths, with eight iterations of log-MAP decoding at each: ![]() Read it against the boxed law and the agreement is structural rather than approximate. Lengthening the interleaver moves each curve down, which is the error coefficient shrinking as , and it does so by a roughly constant factor per fourfold increase in , exactly as a power law demands. What lengthening the interleaver conspicuously does not do is change how steeply the curves fall, because the slope is set by and never enters the -function. This is the practical payoff of the whole analysis: the interleaver is the knob for the height of the error floor and the constituent code is the knob for its slope, and the two are independent. Design GuidelinesCombine the interleaver-gain law with the union bound and keep only the dominant weight-2 term. For a recursive-constituent PCCC at large , where , the effective free distance, is the minimum total codeword weight over weight-2 inputs. This formula is the turbo designer’s entire dashboard, and it has exactly two knobs. The first knob is . Lengthening the interleaver buys the coefficient directly: cheap in performance, expensive in latency, since nothing can be decoded until the whole block arrives. Berrou used ; his reference chip design accepted 2318 bits of latency for a far smaller configuration. And there is a second, structural cost hiding behind the first: the BCJR decoder’s backward recursion cannot even begin until the entire block has been received, a serialism that seems like a footnote now but becomes the decisive liability when this series reaches the hardware race in the finale. The second knob is , and it is set by the choice of constituent code, specifically the feedback polynomial. You want weight-2 inputs to generate as much parity weight as possible before the register returns to zero, and the register returns to zero only when the second 1 arrives a multiple of the state-cycle period after the first. A primitive feedback polynomial of degree maximizes that period at , forcing the surviving weight-2 events to be as long, and as parity-heavy, as possible. The rule of thumb “use primitive feedback” is this argument compressed to four words. Notice what is not on the dashboard. The constituent code’s own free distance never appears, and can be much larger than it. The 4-state RSC(7,5) from the previous entry has , achieved by a weight-3 input; but weight-3 events are crushed by scaling, so the quantity that survives is the weight-2 figure for the rate-1/3 PCCC, double the free distance and attached to a different input weight entirely. Hence Forney’s remark: “Turbo codes seem to turn the conventional design principles on their head; they make error coefficients more important than minimum distance!” Two misconceptions dissolve under the same light. First, turbo codes are emphatically not good because their constituent codes are good: the constituents are deliberately weak, 4 to 16 states, and at a fixed complexity budget stronger constituents actually hurt, because the strength lives in and the iteration, not in the trellis. Second, interleaver gain does not mean a longer interleaver improves the distance. It improves the coefficient, , and nothing else: appears in front of the -function and never inside it, so the asymptotic slope of the curve is set by alone and is independent of . Benedetto notes explicitly that curves for different interleaver lengths eventually merge as SNR grows. Length moves the floor down; it does not tilt it. Error Floor and Interleaver DesignThe gain reduces the number of low-weight codewords but does not eliminate them, and at high SNR the survivors dominate. The result is the error floor: the BER curve falls steeply through the waterfall, then flattens onto the gentle slope set by , typically around to for a naive interleaver. The surviving bad codewords have a precise anatomy. Take a weight-2 input whose two 1s are separated by a multiple of the cycle period, so encoder 1 produces a short, low-weight parity burst. Usually the interleaver scatters those two positions and encoder 2 sees a high-weight event; the floor comes from the unlucky patterns whose images under the permutation are also separated by a multiple of the period, so both encoders emit low-weight parity simultaneously. Interleaver design is the art of making such doubly-bad patterns impossible rather than merely improbable:
The other floor contributor is trellis termination. An RSC encoder cannot be driven to the zero state by appending zeros the way a nonrecursive encoder can: the feedback keeps the register cycling, which is the same fact that made in the first place. Termination requires feeding the register contents back into the input for steps. In practice designers often terminate encoder 1 and leave encoder 2’s trellis open, in which case the second decoder’s backward recursion must start from a uniform distribution over final states, admitting ignorance: a small but real loss, and another entry on the floor’s ledger. Limitations of the Union BoundIt is worth being precise about the epistemic status of everything above, because the bound has sharp limits and Benedetto is honest about all of them. First, it is a union bound on maximum-likelihood decoding, and iterative turbo decoding is not ML; strictly, it bounds the wrong decoder. Second, like every union bound it diverges below the cutoff rate, which is exactly the waterfall region where turbo codes earn their fame: the bound is structurally silent about the one thing everyone wanted explained in 1993. What it does deliver is the high-SNR story: there the bound is tight, and it predicts the error floor accurately, which is why everything in the previous two sections is trustworthy engineering rather than heuristics. The bridge between the two decoders is empirical. Benedetto’s Figure 17 overlays simulated iterative-decoding curves on the ML bound and shows them converging onto it as the iteration count grows, the strongest evidence in the paper that iterative decoding is asymptotically ML-like. Whether it truly converges to ML is listed, with commendable candor, as open problem number one in his concluding section. EXIT Chart AnalysisSo the waterfall needed a different tool, and turbo codes eventually got one: not an exact analysis but a remarkably effective semi-empirical one, ten Brink’s EXIT charts (1999). The starting point is an observation Berrou himself had already published without pursuing: his Figure 6 shows the histogram of the extrinsic values starting decidedly non-Gaussian at iteration 1 and converging toward a Gaussian with mean as iterations progress. EXIT analysis promotes that observation to a modeling assumption. Take the extrinsic LLRs to be Gaussian and consistent, meaning the symmetry of correct LLRs locks the variance to the mean: so a single scalar describes the entire message distribution. Rather than tracking directly, ten Brink tracks the mutual information between a bit and its LLR, computed from the Gaussian model via which is monotonic, hence invertible, and in practice tabulated once. The mutual-information coordinate is the robust choice: it saturates sensibly at 0 and 1 and is far less sensitive to the Gaussian idealization than the raw mean would be. Each constituent decoder is then characterized, by simulation, exactly once: feed it synthetic a priori LLRs drawn from the consistent Gaussian with a priori information , run it at a given , and measure the mutual information of its extrinsic output. The result is a transfer characteristic , one curve per decoder per SNR. Plot decoder 1’s curve on axes and decoder 2’s curve on the same axes with its coordinates swapped, which is legitimate because one decoder’s extrinsic output is the other’s a priori input. Iterative decoding then traces a staircase between the two curves: Reading the chart is reading the decoder’s fate. If the tunnel between the curves is open, the staircase climbs all the way to : decoding converges, and the number of steps predicts the number of iterations needed. If the curves pinch together, the staircase jams at the fixed point and decoding stalls; the SNR at which the tunnel first closes is the convergence threshold, the quantity Benedetto’s bound could never reach. A tunnel that is open but narrow means convergence only after many iterations, which is precisely the steep “turbo cliff” seen in simulation. And the chart is a design tool, not just a diagnostic: you want the two transfer curves well matched, hugging each other with minimal enclosed area, because tunnel area is wasted SNR. Curve matching became the design principle of the iterative-decoding era. Keep that phrase in mind, along with a forward echo worth planting now: everything in this section is an approximation resting on one Gaussian assumption, and the next family of codes in this series comes with an exact version of the same fixed-point analysis. Check Yourself
Answers
Where This Leaves UsBenedetto and Montorsi turned Berrou’s astonishing experiment into engineering. The uniform interleaver made the average analyzable; the transfer-matrix pipeline made it computable; the counting argument produced the law; and the law answered the planted question with a genuinely deep observation, that recursion is a property of the encoder rather than the code, and the interleaver rewards the encoder’s mapping, not the code’s distances. Out of it fell the working design rules (grow for the coefficient, choose primitive feedback for , engineer the interleaver against doubly-bad weight-2 patterns) and an honest boundary: the bound owns the floor, EXIT charts watch the waterfall, and neither is an exact theory of the iterative decoder. Meanwhile the turbo shock had a second consequence, sociological rather than mathematical. It sent researchers back through the literature hunting for anything else that iterated soft information on a random-looking structure, and MacKay and Neal found exactly that waiting in a thesis from 1962: Gallager’s sparse-graph codes, complete with an iterative decoder nobody had been able to afford. Their rediscovery comes with the payoff foreshadowed above: where turbo analysis leans on a Gaussian assumption, LDPC codes admit an exact fixed-point analysis of the decoder itself, density evolution, and it is the subject of the next entry. ← The Turbo Shock of 1993IndexLDPC Reborn: Density Evolution → |