 or 0000, while the correct codeword could have been either 0000 or 1111, which represents an undecidable problem. In such a case, majority logic fails to correct errors, unless more redundancy bits are used. Clearly, decoding reliability grows with increasing information redundancy and overhead, but at the expense of wasting the channel transmission capacity (a concept that we will have to develop in the next chapter). The two following sections describe efficient and far smarter ways to correct bit errors with minimal redundancy or overhead, as based on the two main ECC families called linear block codes and cyclic codes. Linear block codes A first possible strategy for error correction is to transmit the information by slicing it into successive blocks of a fixed, n-bit length. By convention, the first segment of the block is made of k payload bits, corresponding to 2k possible (payload) message sequences. The second segment is made of m = n - k bits, which we shall call parity bits, and which will be used for EC coding. These m parity bits represent the overhead information. We thus have an (n, k) block made of n bits, which contains k payload bits, and n - k parity bits. This arrangement is most generally referred to as a linear block code. By definition, the bit rate B is the number of payload bits generated or received per unit time (e.g., B = 1 Mbit/s). It is also the rate at which payload bits are encoded by the transmitter and decoded by the receiver, in the absence of ECC. The code rate is defined as the ratio R = k/n, which represents the proportion of payload bits in the block (1 - R representing the redundancy or overhead proportion). To provide decoded or corrected data at the initial payload-bit-rate B, the encoded-block bit rate should be increased by a factor 1/R, corresponding to a percent additional bandwidth of 1/R - 1, which is 11.2 Linear block codes referred to as the percent bandwidth expansion factor. The rate at which bit errors are detected is called the bit error rate (BER). The key e