Objective
The general objective of channel coding is to transmit as much data as possible in as little transmission capacity, or bandwidth, of a communication system as possible, while still maintaining acceptable transmission quality. In digital communications, transmission quality is determined by the bit error rate -- the percentage of bits that have errors, relative to the total number of bits received -- at the receiver. The receiver detects if each element of a transmission, known as a code word, contains errors and, ideally, corrects those errors.
ARQ versus FEC
The two main methods of error control are Automatic Repeat Request (ARQ) and Forward Error Correction (FEC). In ARQ, when a receiver circuit detects errors in a block of data, it requests that the data be retransmitted, whereas in FEC, the data is encoded so that the receiver can correct as well as detect errors. The key idea of FEC is to transmit enough duplicate or redundant data to allow the receiver to recover from errors on its own. ARQ is relatively inexpensive to implement and is often preferred for simultaneous, independent transmission of data in both directions over a two-way channel, known as full-duplex communication. FEC, on the other hand, is used for half-duplex (one-way) communication.
Block Codes
The two main types of channel code are known as "block codes" and "convolutional codes." To create a block code, data is divided into blocks whose length, in bits, is represented by the letter "k" and a number of parity or check bits, represented by a letter "r," is added to each block. The end result is a codeword with an overall length of "n" bits, where n = k + r. Block codes typically involve a trade-off between efficiency, reliability and the complexity of encoding and decoding data.
Convolutional Codes
The creation of a convolutional code involves encoding a stream of data rather than blocks of data. The sequence of bits in a convolutional code depends not only on the current bits of data but also on previous bits of data. Convolutional codes are typically decoded by a set of rules, called the Viterbi algorithm, and are particularly well suited to communication channels corrupted by noise corresponding to a mathematical model known as additive white Gaussian noise (AWGN).