Turbo
Turbo
Turbo
Emilia Käsper
ekasper[at]tcs.hut.fi
Introduction
This paper is an introductory tutorial on turbo codes, a new technique of error-
correction coding developed in the 1990s. The reader is expected to be familiar
with the basic concepts of channel coding, although we briefly and informally
review the most important terms.
The paper starts with a short overview of channel coding and the reader is re-
minded the concept of convolutional encoding. Bottlenecks of the traditional ap-
proach are described and the motivation behind turbo codes is explained. After
examining the turbo codes design more in detail, reasons behind their efficiency
are brought out. Finally, a real-world example of the turbo code used in the third
generation Universal Mobile Telecommunications System (UMTS) is presented.
The paper is mainly based on two excellent tutorials by Valenti and Sun [6], and
Barbulescu and Pietrobon [2]. The scope of this paper does not cover implementation-
specific issues such as decoder architecture, modulation techniques and the like.
For a follow-up on these topics, the interested reader is referred to Part II of the
second tutorial [3].
Channel Coding
The task of channel coding is to encode the information sent over a communica-
tion channel in such a way that in the presence of channel noise, errors can be
detected and/or corrected. We distinguish between two coding methods:
Output y1,i
Input
xi−1 xi−2 xi−3
xi
Output y2,i
• Forward error correction (FEC) requires that the decoder should also be
capable of correcting a certain number of errors, i.e. it should be capable of
locating the positions where the errors occurred. Since FEC codes require
only simplex communication, they are especially attractive in wireless com-
munication systems, helping to improve the energy efficiency of the system.
In the rest of this paper we deal with binary FEC codes only.
For this encoder, M = 3, since the ith bits of output depend on input bit i, as well
as three previous bits i − 1, i − 2, i − 3. The encoder is nonsystematic, since the
input bits do not appear explicitly in its output.
An important parameter of a channel code is the code rate. If the input size (or
message size) of the encoder is k bits and the output size (the code word size) is n
bits, then the ratio nk is called the code rate r. Since our sample convolutional en-
coder produces two output bits for every input bit, its rate is 12 . Code rate expresses
Turbo Codes 3
the amount of redundancy in the code—the lower the rate, the more redundant the
code.
Finally, the Hamming weight or simply the weight of a code word is the number
of non-zero symbols in the code word. In the case of binary codes, dealt with in
this paper, the weight of a code word is the number of ones in the word.
in the beginning of the 1990s, the gap between this theoretical bound and practi-
cal implementations was still at best about 3dB. This means that practical codes
required about twice as much energy as the theoretical predicted minimum.1
Hence, new codes were sought that would allow for easier decoding. One way
of making the task of the decoder easier is using a code with mostly high-weight
code words. High-weight code words, i.e. code words containing more ones and
less zeros, can be distinguished more easily.
Another strategy involves combining simple codes in a parallel fashion, so that
each part of the code can be decoded separately with less complex decoders and
each decoder can gain from information exchange with others. This is called the
divide-and-conquer strategy.
Keeping these design methods in mind, we are now ready to introduce the concept
of turbo codes.
• The code is in a systematic form, i.e. the input bits also occur in the output
(see Figure 2);
The choice of the interleaver is a crucial part in the turbo code design . The task
of the interleaver is to “scramble” bits in a (pseudo-)random, albeit predetermined
1
A decibel is a relative measure. If E is the actual energy and Eref is the theoretical lower
bound, then the relative energy increase in decibels is 10 log10 EE
ref
. Since log10 2 ≈ 0.3, a
twofold relative energy increase equals 3dB.
Turbo Codes 5
Output I
Encoder I
Interleaver
Output II
Encoder II
fashion. This serves two purposes. Firstly, if the input to the second encoder is in-
terleaved, its output is usually quite different from the output of the first encoder.
This means that even if one of the output code words has low weight, the other
usually does not, and there is a smaller chance of producing an output with very
low weight. Higher weight, as we saw above, is beneficial for the performance of
the decoder. Secondly, since the code is a parallel concatenation of two codes, the
divide-and-conquer strategy can be employed for decoding. If the input to the sec-
ond decoder is scrambled, also its output will be different, or “uncorrelated” from
the output of the first encoder. This means that the corresponding two decoders
will gain more from information exchange.
We now briefly review some interleaver design ideas, stressing that the list is by no
means complete. The first three designs are illustrated in Figure 3 with a sample
input size of 15 bits.
3. An “odd-even” interleaver: first, the bits are left uninterleaved and en-
coded, but only the odd-positioned coded bits are stored. Then, the bits are
scrambled and encoded, but now only the even-positioned coded bits are
stored. Odd-even encoders can be used, when the second encoder produces
one output bit per one input bit.
Input
x1 x2 x3 x4 x5
x6 x7 x8 x9 x10
x11 x12 x13 x14 x15
There is no such thing as a universally best interleaver. For short block sizes, the
odd-even interleaver has been found to outperform the pseudo-random interleaver,
and vice versa. The choice of the interleaver has a key part in the success of the
code and the best choice is dependent on the code design. For further reading,
several articles on interleaver design can be found for example at [1].
Systematic Output xi
Output y1,i
Input
xi xi−1 xi−2 xi−3
Interleaver
Output y2,i
x0i
x0i−1 x0i−2 x0i−3
energy consumption is then 4.80dB for convolutional codes, and 0.98dB for turbo
codes. For code rate 16 , the respective numbers are 4.28dB and -0.12dB2 . It can
also be noticed, that turbo codes gain significantly more from lowering the code
rate than conventional convolutional codes.
Conclusions
Turbo codes are a recent development in the field of forward-error-correction
channel coding. The codes make use of three simple ideas: parallel concatena-
tion of codes to allow simpler decoding; interleaving to provide better weight
distribution; and soft decoding to enhance decoder decisions and maximize the
gain from decoder interaction.
While earlier, conventional codes performed—in terms of energy efficiency or,
equivalently, channel capacity—at least twice as bad as the theoretical bound sug-
gested, turbo codes immediately achieved performance results in the near range of
the theoretically best values, giving a less than 1.2-fold overhead. Since the first
proposed design in 1993, research in the field of turbo codes has produced even
better results. Nowadays, turbo codes are used in many commercial applications,
including both third generation cellular systems UMTS and cdma2000.
Turbo Codes 10
References
[1] University of South Australia, Institute for Telecommunications Research,
Turbo coding research group. http://www.itr.unisa.edu.au/
~steven/turbo/.
[2] S.A. Barbulescu and S.S. Pietrobon. Turbo codes: A tutorial on a new class of
powerful error correction coding schemes. Part I: Code structures and inter-
leaver design. J. Elec. and Electron.Eng., Australia, 19:129–142, September
1999.
[3] S.A. Barbulescu and S.S. Pietrobon. Turbo codes: A tutorial on a new class of
powerful error correction coding schemes. Part II: Decoder design and perfor-
mance. J. Elec. and Electron.Eng., Australia, 19:143–152, September 1999.
[7] A. M. Viterbi. Shannon theory, concatenated codes and turbo coding. http:
//occs.donvblack.com/viterbi/index.htm, 1998.