Convolutional Interleaver
How Shift-Register Branches Disperse Burst Errors
The convolutional interleaver, introduced by Ramsey and refined by Forney in the late 1960s, is built from B branches arranged in parallel. Branch 0 has zero delay, branch 1 holds a first-in first-out register of M cells, branch 2 holds 2M cells, and so on up to branch B−1 holding (B−1)M cells. An input commutator at the transmitter routes successive symbols to branches 0, 1, 2 and so on, wrapping back to branch 0 after every B symbols. A synchronized output commutator at the deinterleaver applies exactly the complementary delays: a symbol that passed through the longest register on the interleave side passes through the shortest on the deinterleave side, so every symbol experiences the same total delay and the original ordering is restored.
Because each branch imposes a different delay, two symbols that were originally adjacent in the code word end up B·M symbol periods apart on the channel. When a burst of impulse noise or a multipath fade corrupts a contiguous run of channel symbols, the deinterleaver scatters that damage so each Reed-Solomon code word sees at most a few byte errors rather than one concentrated, uncorrectable cluster. This randomizing action is what lets a code designed for independent errors operate effectively over a bursty channel.
The structure trades memory for performance. Total storage across the interleaver and deinterleaver is M·B·(B−1) symbols, and the end-to-end latency equals the same figure in symbol periods. Designers pick B and M so the guaranteed separation B·M comfortably exceeds the expected burst length while keeping latency inside the system budget.
Interleaver Span and Separation Equations
Dmax = (B − 1) × M symbol periods
Separation of input-adjacent symbols on the channel:
Δmin = B × M symbols
Total interleaver + deinterleaver memory:
Mtot = M × B × (B − 1) cells
End-to-end latency (identical for every symbol):
Tlat ≈ M × B × (B − 1) / Rs seconds
Where B = number of branches (depth), M = register increment per branch, Rs = symbol rate. DVB example: B = 12, M = 17 → Dmax = 187 byte periods, Δmin = 204 bytes (one RS frame), Mtot = 2,244 bytes, and at Rs ≈ 27.5 Mbaud, Tlat ≈ 82 μs.
Convolutional vs. Block Interleaving
| Parameter | Convolutional Interleaver | Block Interleaver |
|---|---|---|
| Operation | Continuous stream, branch commutator | Fill N×M matrix, read transposed |
| Memory (same span) | M·B·(B−1) cells | ~2×N·M cells (roughly double) |
| Latency | M·B·(B−1) symbol periods | ~2 full blocks |
| Synchronization | Branch-index alignment required | Block/frame boundary alignment |
| Typical standard | DVB-S, DVB-C (B=12, M=17) | IEEE 802.11a/g OFDM, GSM |
| Best pairing | Reed-Solomon outer code | Inner convolutional/Viterbi code |
Frequently Asked Questions
How does a convolutional interleaver differ from a block interleaver?
A block interleaver must buffer an entire N×M matrix before any symbol leaves, so its end-to-end memory and latency are roughly two full blocks. A convolutional interleaver runs continuously across B branches whose registers grow by M cells each, needing only about M·B·(B−1) cells, roughly half the memory and latency for the same interleaving span. That efficiency is why DVB-S and DVB-C adopt it, at the cost of requiring the deinterleaver branch index to stay aligned with the interleaver.
How do I choose interleaver depth B and increment M for a given burst length?
Pick B and M so the guaranteed separation B·M exceeds the worst-case burst, and so no Reed-Solomon code word receives more byte errors than t = (n−k)/2 lets it correct. The end-to-end memory is M·B·(B−1) cells. DVB sets B = 12 and chooses M = N/B = 204/12 = 17 so that the input-adjacent separation B·M = 204 equals the RS(204,188) frame length, mapping each of the 12 branches cleanly across one 204-byte frame.
What is the latency and memory cost of a convolutional interleaver?
The interleaver and deinterleaver each store M·B·(B−1)/2 symbols, for a total of M·B·(B−1) cells, and end-to-end latency equals the same value in symbol periods because every symbol gets the identical combined delay. For DVB B = 12, M = 17 that is 17×12×11 = 2,244 bytes of storage and 2,244 byte-periods of delay, under 100 μs at 27.5 Mbaud and negligible for broadcast video.