Expand description
Interleavers: permutations of the coded bits (or of their LLRs).
An Interleaver holds a permutation $\pi$: the interleaved sequence is
$y_{i} = x_{\pi(i)}$. Interleaver::block writes row by row and reads column by
column; Interleaver::random draws a uniform permutation from a seed; the
quadratic permutation polynomial of LTE turbo codes is
Interleaver::qpp, $\pi(i) = (f_{1} i + f_{2} i^{2}) \bmod K$ (Sun & Takeshita 2005).
A ConvolutionalInterleaver spreads a stream instead of a block (Forney 1971): a
commutator sends symbol $t$ to branch $j = t \bmod I$, a FIFO of $M j$ cells clocked
once every $I$ symbols, so that symbol $t$ leaves $I M j$ symbols late; its
deinterleaver has the depths $M (I - 1 - j)$, and every symbol crosses the pair in
$I M (I - 1)$ symbols. A burst of $b \le I$ consecutive channel errors lands, at the
output of the deinterleaver, in $b$ symbols at least $I M - 1$ apart. DVB-S and DVB-T
interleave the bytes of their Reed–Solomon codewords with $I = 12$, $M = 17$ (ETSI
EN 300 421, Sec. 4.4.2, Figure 4).
§Examples
use comnum_fec::interleaving::Interleaver;
let p = Interleaver::block(2, 3);
assert_eq!(p.interleave(&[0, 1, 2, 3, 4, 5]), vec![0, 3, 1, 4, 2, 5]);
assert_eq!(p.deinterleave(&p.interleave(&[9, 8, 7, 6, 5, 4])), vec![9, 8, 7, 6, 5, 4]);§References
- J. Sun and O. Y. Takeshita, “Interleavers for turbo codes using permutation polynomials over integer rings,” IEEE Trans. Inf. Theory, 51(1), 101–119, 2005.
- G. D. Forney, “Burst-correcting codes for the classic bursty channel,” IEEE Trans. Commun. Technol., 19(5), 772–781, 1971.
- ETSI EN 300 421 V1.1.2, DVB; Framing structure, channel coding and modulation for 11/12 GHz satellite services, 1997, Sec. 4.4.2.
Structs§
- Convolutional
Interleaver - A convolutional (Forney) interleaver or deinterleaver of $I$ branches of unit depth $M$ (see the module): a stream processed symbol by symbol, its FIFOs holding the symbols still in flight.
- Interleaver
- A permutation of the positions of a block.