The core concept of turbo codes is based on two main elements: parallel concatenated encoding of two or more recursive convolutional codes with one or more interleavers and the iterative decoding at reception. Iterative decoding is suboptimal, but it has a reasonable complexity for practical implementation and leads to very
good performance. In (Berrou et al. 1993), the performance achieved by a turbo code
with the information block length of 65536 bits and 18 iterations of turbo decoding
was 0.5 dB far from the Shannon limit, which was an outstanding result.
The crucial component of turbo codes is the interleaver, a device that interlaces
a block of symbols. The interleaver role in decoding is to decorrelate the inputs in
the component decoders of the turbo decoder, which proves essential for turbo code
suboptimal decoding. During encoding, the interleaver combines the low weight code
words provided by a component encoder with those of high weight provided by the
other component encoder, so that the codeword from the turbo encoder output has
an overall large weight.