hitimajshima announced the invention of "Turbo codes." These achieve 3 dB or more of coding gain compared to RSV codes, and as a result they closely approach the Shannon limit. In the original Turbo code, a data block (d) is fed into a convolutional encoder, which computes a set of parity bits (p1). The data is in parallel scram- bled by an interleaver, giving a scrambled data block (d') which is fed into a second convolu- tional encoder, which computes a further set of parity bits (p2). Finally, the transmitter sends d, P1, and P2. These arrive, corrupted, at the receiver as data blocks dR, P1R, and P2R At the receiver there are two decoders; the first processes dR and P1R while the second processes dR' and P2R where dr' is generated from dR by a de-interleaver matching the one in the transmitter. A crucial aspect is that the decoding is iterative, with each decoder taking in not only the analogue signal samples but also information from the other decoder. The first decoder passes estimated values of the data, d, with "confidence levels" (actually a quantity called a log-likelihood ratio for each estimated digit), to the second decoder, which uses them, together with dR' and P2R, to compute revised decisions, each with an associated confidence level. These are passed back to the first decoder, which computes revised deci- Turbo and LDPC Codes sions, and SO on. This iterative process converges to a solution (when little further change occurs typically) after 4 to 10 iterations. This original type of Turbo code is called a Turbo Convolutional Code (TCC); it quite complex to implement and is heavily protected by patents on both the encoding and decoding sides. It is nevertheless included as an option in the IEEE 802. 16a standard and in 3G mobile telephony standards such as 3GPP (UMTS/W-CDMA) and 3GPP2 (CDMA2000). Another type of code, known as a Turbo Product Code (TPC), has been shown to provide performance similar to that of the TCC but with lower complexity and smaller encoding delay than either the TCC or RSV 