Channel coding is a technique used in digital communications to ensure a transmission is received with minimal or no errors. The various coding methods that can be employed are achieved by interweaving additional binary digits into the transmission. When decoded on the receiving end, the transmission can be checked for errors that may have occurred and, in many cases, repaired. Other times, the recipient simply asks for the transmission again.
The idea behind channel coding was developed due to the inevitable existence of errors on any given type of communication channel. Radio waves, electrical signals, and even light waves over fiber optic channels will have some amount of noise on the medium, as well as degradation of the signal that occurs over some distance. Being such a common problem in communications, numerous theories for how to deal with it have developed under branches of applied mathematics such as information theory and coding theory.
One commonly used method is called automatic repeat request (ARQ), which simply involves the recipient checking the transmission for errors and asking for retransmission should any occur. This is sometimes referred to as backward error correction. Channel coding, on the other hand, is a forward error correction (FEC) technique. The sender prepares the bits for transmission using a special algorithm known as an error-correcting code, which is then decoded on the receiving end. Both methods are also often used in a hybrid manner, allowing for small errors in the transmission to be repaired with a channel code, with major errors requiring a complete retransmission.
The first channel coding technique was created by a mathematician named Richard Hamming, who developed what's known as the Hamming code. This was the first forward error correction code, which entails the inclusion of additional binary digits in the transmission that are called parity bits. A clever calculation of the parity bits on the receiving end of the transmission will reveal if any errors have occurred in the transmission, where they are in the string of bits, and how to repair them in order to recover the original transmission.
The Hamming code falls into the family of channel coding methods referred to as block codes, of which many have been developed over the years. Block codes typically involve the bits being collected into blocks of fixed lengths, which are then referred to as code words. Each code word is given the appropriate checking bits for decoding by the recipient. Block code methods tend to increase the size of the transmission due to the added bits in the code word, which can have an effect on the channel's bandwidth.
Another channel coding method is known as a convolutional code. These methods are much faster and can encode a bit stream of any length. One commonly used code of this type is called the Viterbi code, created by the Italian mathematician Andrew Viterbi. The drawback to this method is that as the length of the convolutional code increases, so does its complexity when decoding. In many cases, convolutional codes are used in combination with block codes in what's known as concatenated error correction codes.