Forward error correction
From CAPE Wiki
Contents |
[edit] Introduction
In telecommunication, forward error correction (FEC) is a system of error control for data transmission, whereby the sender adds redundant data to its messages, which allows the receiver to detect and correct errors (within some bound) without the need to ask the sender for additional data. The advantage of forward error correction is that retransmission of data can often be avoided, at the cost of higher bandwidth requirements on average, and is therefore applied in situations where retransmissions are relatively costly or impossible. See Wikipedia: Forward Error Correction for more details.
The reason for FEC is the high probability of data bits received which are in error. Any bit flip during transmissions ruins the information. Any chance of correcting the error bits allows the system to perform the same for a longer distance or send more information with out corruption. The following graph shows the probability of receiving bits in error. Notice the small chance of receiving a "110" when a "0" bit was transmitted.
When FEC is used, the energy per bit Eb to have the same bit error rate (BER) is alot less.
Since microcontrollers with around 40MHz speeds are used on board the satellite for any data processing, careful consideration must be taken in order to implement an FEC that is efficient. The algorithm needs to be able to perform a significant level of error correcting without taking too much time. If either are lacking, then the design is undesirable for space communication.
Since the link between stations improves, a gain can be calculated. The FEC gain, usually known as a coding gain, is generally defined as the following:
See the FEC Log File for current CAPE research.
[edit] Convolutional Code with Viterbi
Convolutional codes with Viterbi algorithms are one option for implementing FEC. However, on the receive end, path (data) history must be stored somewhere in memory. In memory, a trellis is drawn of every possible path the information could take, which is eventually narrowed down to only the most probable paths. Therfore, significant memory must be allocated to storing the data which has been received before decoding can begin. See Wikipedia: Convolutional Code and Wikipedia: Viterbi Algorithm for more details.
[edit] r=1/3 k=3 Conv Code
This actually is one of the most simple of convolutional codes. Beginners can relatively easily build this in software to get the basic understanding of encoding.
[edit] r=1/2 k=7 Conv Code
This is the popular "Voyager" code, first used extensively on the Voyager space missions. Today, this code is popular among many systems including the AO-40 spacecraft. See Wikipedia: AO-40.
See Proposal for a FEC-Coded AO-40 Telemetry Link by Phil Karn, KA9Q
See CCSDS Recommendation for TM Synchronization and Channel Coding from the Consultative Committee for Space Data Systems.
[edit] Reed-Solomon Code
Another option is Reed-Solomon Codes. See Wikipedia: Reed-Solomon Code for more details.
This will be examined closely in order to package the conv code. This will improve gain tremendously.
[edit] Turbo
This is not currently being researched.
See JPL's New Millennium Lecture.
[edit] Hardware Devices
See PCD04C CCSDS Turbo and Viterbi Decoder by Small World Communications.
See PCI-6800-BV Bit Synchronizer/Viterbi Decoder
[edit] Books
See Google Books: Error-Control Coding for Data Networks By Irving S. Reed, Xuemin Chen




