|This article's factual accuracy is disputed. (July 2010)|
|This article needs additional citations for verification. (December 2009)|
Channel coding is referred to the processes done in both transmitter and receiver of a digital communications system. The mentioned processes require allocating extra bits, a.k.a. parity bits, and consuming extra bandwidth. Using this amount of communications resources results in more reliable connection between transmitter and its receiver. There are two policies to deal with channel coding:
- forward error correction (FEC)
- automatic repeat-request (ARQ)
FEC tries to discover the errors and correct them if it can. However, ARQ just discovers the error and sends a resend request to the transmitter. FEC-based methods are more complex in comparison with ARQ ones. Obviously, to use the benefits of two methods the combination of the above said policies is possible.
Back to channel coding theory. There are two types of channel codes:
Block codes submit k bits in their inputs and forwards n bits in their output. These codes are frequently known as (n,k) codes. Apparently, whatever coding scheme is, it has added n-k bits to the coded block. Contrary to block codes which are memoryless, convolutional codes are coding algorithms with memory. Since their coding rate (R) is higher than the counterpart in block codes, convolutional codes are more used in practice. Every convolutional code uses m units of memory, therefore a convolutional code is represented with (n,k,m).
In digital communications, a channel code is a broadly used term mostly referring to the forward error correction code and interleaving in communication and storage where the communication media or storage media is viewed as a channel. The channel code is used to protect data sent over it for storage or retrieval even in the presence of noise (errors).
Channel codes are made up of two main type: convolutional codes and block codes. In practical communication systems, convolutional codes tend to be one of the more widely used channel codes. These codes are used primarily for real-time error correction and can convert an entire data stream into one single codeword. The Viterbi algorithm provided the basis for the main decoding strategy of convolutional codes. The encoded bits depend not only on the current informational k input bits but also on past input bits. Block codes tend to be based on the finite field arithmetic and abstract algebra. Block codes accept a block of k information bits and return a block of n coded bits. Block codes are used primarily to correct or detect errors in data transmission. Commonly used block codes are Reed–Solomon codes, BCH codes, Golay codes and Hamming codes.
Sometimes channel coding also refers to other physical layer issues such as digital modulation, line coding, clock recovery, pulse shaping, channel equalization, bit synchronization, training sequences, etc. Channel coding is distinguished from source coding, i.e., digitizing of analog message signals and data compression. The theory behind designing and analyzing channel codes is called noisy-channel coding theorem.