Just as different channel architectures may use different modulation schemes for different radio conditions and different customer requirements, the developers of cellular systems use different error-correction schemes for different needs. One of the challenges facing cellular systems today is that the systems were designed and built for voice quality, which allows a certain degree of error. However, customers are want- ing to use the cellular networks for data transmission more and more and, as a result, are often dissatisfied because optimization for voice is different from optimization for data. The FEC scheme illustrated in Fig. 17.1 is a form of block code where each collection of k bits is mapped into n bits (n > k), and the receiver turns n bits back into k bits even if one or two of them is wrong. In this case, k = 64 bits are turned into n = 80 bits. This example was chosen because it is easy to see how it works; there are much better block codes for FEC, codes with better error-recovery rates. The other kind of error correction is a convolutional code, where each k bits become n bits using a moving window of K bits. The ratio r = k/n is the code rate and the ability of an FEC system, block or convolutional code, to correct errors increases as the code rate r in- creases. The Viterbi algorithm is a commonly used convolutional code for error correction. There are longer and more efficient convolutional-code FEC algorithms called turbo codes. Because these codes require longer sequences of bits, turbo codes create long la- tency times for low bit rates. Therefore, they are used for high data rates or when de- lay times are not critical. Service providers often offer data rates that are not exactly the same as the channel rates. This is often an opportunity for stronger FEC algorithms, but sometimes it is simpler just to modify the bit stream. When the rate is a simple fraction, then the bits can be repeated, such as sending 4800 bits twice on a 9600-bit channel. This multiple sending of the same bits is es