Forward error correction (FEC) is an error correction technique to detect and correct a limited number of errors in transmitted data without the need for retransmission.
In this method, the sender sends a redundant error-correcting code along with the data frame. The receiver performs necessary checks based upon the additional redundant bits. If it finds that the data is free from errors, it executes error-correcting code that generates the actual frame. It then removes the redundant bits before passing the message to the upper layers.
Because FEC does not require handshaking between the source and the destination, it can be used for broadcasting of data to many destinations simultaneously from a single source.
Another advantage is that FEC saves bandwidth required for retransmission. So, it is used in real time systems.
Its main limitation is that if there are too many errors, the frames need to be retransmitted.
Error correcting codes for forward error corrections can be broadly categorized into two types, namely, block codes and convolution codes.
Block codes − The message is divided into fixed-sized blocks of bits to which redundant bits are added for error correction.
Convolutional codes − The message comprises of data streams of arbitrary length and parity symbols are generated by the sliding application of a Boolean function to the data stream.
There are four popularly used error correction codes.
Hamming Codes − It is a block code that is capable of detecting up to two simultaneous bit errors and correcting single-bit errors.
Binary Convolution Code − Here, an encoder processes an input sequence of bits of arbitrary length and generates a sequence of output bits.
Reed - Solomon Code − They are block codes that are capable of correcting burst errors in the received data block.
Low-Density Parity Check Code − It is a block code specified by a parity-check matrix containing a low density of 1s. They are suitable for large block sizes in very noisy channels.