y are widely separated in the second encoder's input. As a result, the second encoder's output differs from the correct output in many bit positions. It will see the incorrect bit sequence as highly implausible. This is the basic principle of operation of the turbo codes and the key to the high performance of turbo codes at low SNRs. Erroneous information sequences that look reasonable to one decoder are likely to be rejected by the other decoder. This is also the rationale for the BER floor at higher SNRs. Since the interleaver is random, there are a few error patterns that will look plausible to both decoders. As the SNR increases, these weak patterns come to dominate the BER curve. One of the most interesting characteristics of a turbo code is that it is not just a single code. It is, in fact, a combination of two codes that work together to achieve a synergy that would not be possible by merely using one code by itself. As shown in Figure 9-41, a turbo code is formed from the parallel concatenation of two constituent encoders separated by an interleaver. Each constituent encoder can be any form of FEC coder used for conventional data communication. However, in practice, the constituent encoders are identical convolutional encoders. As can be seen in Figure 9-41, the turbo code consists of two identical constituent encoders. The input data stream and the parity outputs of the two parallel encoders are then serialized into a single turbo code word. The interleaver is a critical component of the turbo code. It is a simple functional block that rearranges the order of the data bits in a prescribed, but irregular, manner. Although the same set of data bits is present at the output of the interleaver, the order of these bits has been changed. It must be noted that the interleaver used by a turbo coder is quite different from the rectangular interleavers that are commonly used in wireless systems to help mitigate the effect of deep fading. While a rectangular channel interleaver tries to space the data out according