In digital telecommunications, forward error correction (or FEC) is a method of error correction in which redundancy is added to a data stream before it is likely to get corrupted, e.g. by being transmitted over air. At the receiver side, the redundant information can be used to detect and reconstruct a certain amount of data corruption.


                              (retransmit request)
    _________       _________   |   _________   |   _________       _________
   |         |     |         |(<--)|         |(<--)|         |     |         |
   |user data| --> |FEC coder| --> | channel | --> | decoder | --> |User data|
   |_________|     |_________|     |_________|     |_________|     |_________|

There are several different FEC schemes, ranging from the simple checksum to the complicated turbo coding:

  • checksums: somewhat efficient in detecting errors, not really useful in correcting them - and what do you do if your checksum gets corrupted?
  • CRC: a bit better than a simple checksum, but still not too useful when it comes to correcting the detected errors.
  • Cross Interleave Reed-Solomon Code: Quite good at detecting and reasonably efficient at correcting errors - as you can hear when listening to a CD.
  • convolutional coding: One of the coders used for e.g. cellular phones in order to permit you talking to each other. Convolutionally coded data is decoded with a so-called Viterbi decoder. In the usually used versions, a convolutional coder adds a lot of redundancy to the data stream. At the comon coder rates of 1/2 or 1/3, the data going into the coder only accounts for 1/2 (or 1/3) of the data going out of the coder. On the other hand, with in this way convolutionally coded data it doesn't matter which bits of the coded stream are corrupted.
  • turbo coding: Another coder/decoder pair used in wireless telecommunications. The coder uses a feedback system, taking some of the coded data back to the coder's input. Again, at common coder rates of 1/2 or 1/3, a turbo coder adds a lot of redundancy to the data stream and, again, all of the bits in the coded data stream are equally (in)sensitive towards being corrupted. The description of how a turbo coder does what it does and the proof that it does that correctly fills several PhD theses.

So why does anybody want to apparently waste 1/2 or 2/3 of the available (and expensive) bandwidth by transmitting redundant data? Simply because it's not a waste but a necessity if you want to recieve your data

  • completely,
  • with comparetively low delay and
  • in the order it was transmitted.
Without forward error correction, you'd have the chance of:
  • No error detection, which crud bh somrw_at_plebremitag...,
  • error detection without correction, sti_l not qui_e w_at you'd li_e to h_ve...,
  • error detection with retransmits, either without waiting for the retransmitted data to arrive - possible e.g. for web access, bu_ itm_ospsib_e lfor_sp ee_h.c..
  • ..or waiting for retransmits, whi__ch coul__d be__come__ somew__hat an__noy__ing...
So, in order to be able to cope with streaming real-time data, a system is needed that can correct errors in the incoming data without waiting for a retransmit, and the bandwidth increasing FEC schemes are the best we have today.

Log in or register to write something here or to contact authors.