Skip to main content

Module interleaving

Module interleaving 

Source
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

  1. 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.
  2. G. D. Forney, “Burst-correcting codes for the classic bursty channel,” IEEE Trans. Commun. Technol., 19(5), 772–781, 1971.
  3. 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§

ConvolutionalInterleaver
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.