Forward Error Correction - Wikipedia
Forward Error Correction - Wikipedia
To all our readers in India: This Monday we need your help. We rely on volunteers to write
Wikipedia, but we are missing many articles in languages spoken in India. Please help translate
or write missing articles in your languages. Together, we can keep Wikipedia in India
independent and thriving. Thank you. — Jimmy Wales, Wikipedia Founder
Get started
Forward error
correction
In telecommunication, information
theory, and coding theory, forward error
correction (FEC) or channel coding[1] is a
technique used for controlling errors in
data transmission over unreliable or
noisy communication channels. The
central idea is the sender encodes the
message in a redundant way by using an
error-correcting code (ECC). The
American mathematician Richard
Hamming pioneered this field in the
1940s and invented the first error-
correcting code in 1950: the Hamming
(7,4) code.[2]
How it works
FEC is accomplished by adding
redundancy to the transmitted
information using an algorithm. A
redundant bit may be a complex function
of many original information bits. The
original information may or may not
appear literally in the encoded output;
codes that include the unmodified input
in the output are systematic, while those
that do not are non-systematic.
001 0
010 0
100 0
110 1
101 1
011 1
Types of FEC
The two main categories of FEC codes
are block codes and convolutional codes.
Low-density parity-check
(LDPC)
Low-density parity-check (LDPC) codes
are a class of highly efficient linear block
codes made from many single parity
check (SPC) codes. They can provide
performance very close to the channel
capacity (the theoretical maximum)
using an iterated soft-decision decoding
approach, at linear time complexity in
terms of their block length. Practical
implementations rely heavily on decoding
the constituent SPC codes in parallel.
Turbo codes
Turbo coding is an iterated soft-decoding
scheme that combines two or more
relatively simple convolutional codes and
an interleaver to produce a block code
that can perform to within a fraction of a
decibel of the Shannon limit. Predating
LDPC codes in terms of practical
application, they now provide similar
performance.
Interleaving
Interleaving is frequently used in digital
communication and storage systems to
improve the performance of forward
error correcting codes. Many
communication channels are not
memoryless: errors typically occur in
bursts rather than independently. If the
number of errors within a code word
exceeds the error-correcting code's
capability, it fails to recover the original
code word. Interleaving ameliorates this
problem by shuffling source symbols
across several code words, thereby
creating a more uniform distribution of
errors.[12] Therefore, interleaving is widely
used for burst error-correction.
Example
Error-free message:
aaaabbbbccccddddeeeeffffggg
g
Transmission with a burst
error:
aaaabbbbccc____deeeeffffggg
g
With interleaving:
Original transmitted
sentence:
ThisIsAnExampleOfInterleavi
ng
Received sentence with a
burst error:
ThisIs______pleOfInterleavi
ng
With interleaving:
Transmitted sentence:
ThisIsAnExampleOfInterleavi
ng...
Error-free transmission:
TIEpfeaghsxlIrv.iAaenli.snm
Oten.
Received sentence with a
burst error:
TIEpfe______Irv.iAaenli.snm
Oten.
Received sentence after
deinterleaving:
T_isI_AnE_amp_eOfInterle_vi
n_...
Disadvantages of interleaving
List of error-correcting
codes
Distance Code
5 (double-error correcting)
AN codes
BCH code, which can be designed to
correct any arbitrary number of errors
per code block.
Berger code
Constant-weight code
Convolutional code
Expander codes
Group codes
Golay codes, of which the Binary Golay
code is of practical interest
Goppa code, used in the McEliece
cryptosystem
Hadamard code
Hagelbarger code
Hamming code
Latin square based code for non-white
noise (prevalent for example in
broadband over powerlines)
Lexicographic code
Long code
Low-density parity-check code, also
known as Gallager code, as the
archetype for sparse graph codes
LT code, which is a near-optimal
rateless erasure correcting code
(Fountain code)
m of n codes
Online code, a near-optimal rateless
erasure correcting code
Polar code (coding theory)
Raptor code, a near-optimal rateless
erasure correcting code
Reed–Solomon error correction
Reed–Muller code
Repeat-accumulate code
Repetition codes, such as Triple
modular redundancy
Spinal code, a rateless, nonlinear code
based on pseudo-random hash
functions [21]
Tornado code, a near-optimal erasure
correcting code, and the precursor to
Fountain codes
Turbo code
Walsh–Hadamard code
Cyclic redundancy checks (CRCs) can
correct 1-bit errors for messages at
most bits long for optimal
generator polynomials of degree ,
see Mathematics of cyclic redundancy
checks#Bitfilters
See also
Code rate
Erasure codes
Soft-decision decoder
Error detection and correction
Error-correcting codes with feedback
Burst error-correcting code
References
1. Charles Wang; Dean Sklar; Diana
Johnson (Winter 2001–2002). "Forward
Error-Correction Coding" . Crosslink — the
Aerospace Corporation magazine of
advances in aerospace technology. The
Aerospace Corporation. 3 (1). “How
Forward Error-Correcting Codes Work ”
2. Hamming, R. W. (April 1950). "Error
Detecting and Error Correcting Codes"
(PDF). Bell System Tech. J. USA: AT&T. 29
(2): 147–160. doi:10.1002/j.1538-
7305.1950.tb00463.x . Retrieved
4 December 2012.
3. "Hamming codes for NAND flash
memory devices" . EE Times-Asia.
Apparently based on "Micron Technical
Note TN-29-08: Hamming Codes for
NAND Flash Memory Devices" . 2005.
Both say: "The Hamming algorithm is an
industry-accepted method for error
detection and correction in many SLC
NAND flash-based applications."
4. "What Types of ECC Should Be Used on
Flash Memory?" . (Spansion application
note). 2011. says: "Both Reed-Solomon
algorithm and BCH algorithm are common
ECC choices for MLC NAND flash. ...
Hamming based block codes are the most
commonly used ECC for SLC.... both Reed-
Solomon and BCH are able to handle
multiple errors and are widely used on
MLC flash."
5. Jim Cooke. "The Inconvenient Truths of
NAND Flash Memory" . 2007. p. 28. says
"For SLC, a code with a correction
threshold of 1 is sufficient. t=4 required ...
for MLC."
6. Baldi M.; Chiaraluce F. (2008). "A Simple
Scheme for Belief Propagation Decoding
of BCH and RS Codes in Multimedia
Transmissions" . International Journal of
Digital Multimedia Broadcasting. 2008:
957846. doi:10.1155/2008/957846 .
7. Shah, Gaurav; Molina, Andres; Blaze,
Matt (2006). "Keyboards and covert
channels" (PDF). Proceedings of the 15th
conference on USENIX Security
Symposium.
8. David Tse, Pramod Viswanath (2005),
Fundamentals of Wireless
Communication, Cambridge University
Press, UK
9. C. E. Shannon: A mathematical theory
of communication. Bell System Technical
Journal, vol. 27, pp. 379–423 and 623–
656, July and October 1948
10. Rosas, Fernando; Brante, Glauber;
Souza, Richard Demo; Oberli, Christian
(2014). "Optimizing the code rate for
achieving energy-efficient wireless
communications" . Proceedings of the
IEEE Wireless Communications and
Networking Conference (WCNC).
11. IEEE Standard, section 20.3.11.6
"802.11n-2009" , IEEE, October 29, 2009,
accessed March 21, 2011.
12. B. Vucetic; J. Yuan (2000). Turbo
codes: principles and applications.
Springer Verlag. ISBN 978-0-7923-7868-6.
13. M. Luby, M. Mitzenmacher, A.
Shokrollahi, D. Spielman, V. Stemann
(1997). "Practical Loss-Resilient Codes".
Proc. 29th annual Association for
Computing Machinery (ACM) symposium
on Theory of computation.
14. "Digital Video Broadcast (DVB);
Second generation framing structure,
channel coding and modulation systems
for Broadcasting, Interactive Services,
News Gathering and other satellite
broadband applications (DVB-S2)". En 302
307. ETSI (V1.2.1). April 2009.
15. K. Andrews; et al. (November 2007).
"The Development of Turbo and LDPC
Codes for Deep-Space Applications". Proc.
IEEE. 95 (11).
16. S. Dolinar and D. Divsalar. Weight
Distributions for Turbo Codes Using
Random and Nonrandom Permutations.
1995. [1]
17. Takeshita, Oscar (2006). "Permutation
Polynomial Interleavers: An Algebraic-
Geometric Perspective". IEEE Transactions
on Information Theory. 53: 2116–2132.
arXiv:cs/0601048 .
doi:10.1109/TIT.2007.896870 .
18. 3GPP TS 36.212 , version 8.8.0, page
14
19. "Digital Video Broadcast (DVB); Frame
structure, channel coding and modulation
for a second generation digital terrestrial
television broadcasting system (DVB-T2)".
En 302 755. ETSI (V1.1.1). September
2009.
20. "Explaining Interleaving - W3techie" .
w3techie.com. Retrieved 2010-06-03.
21. Perry, Jonathan; Balakrishnan, Hari;
Shah, Devavrat (2011). "Rateless Spinal
Codes" . Proceedings of the 10th ACM
Workshop on Hot Topics in Networks.
doi:10.1145/2070562.2070568 .
Further reading
Clark, George C., Jr.; Cain, J. Bibb
(1981). Error-Correction Coding for
Digital Communications. New York:
Plenum Press. ISBN 0-306-40615-2.
Wicker, Stephen B. (1995). Error Control
Systems for Digital Communication and
Storage. Englewood Cliffs NJ: Prentice-
Hall. ISBN 0-13-200809-2.
Wilson, Stephen G. (1996). Digital
Modulation and Coding. Englewood
Cliffs NJ: Prentice-Hall. ISBN 0-13-
210071-1.
"Error Correction Code in Single Level
Cell NAND Flash memories" 16
February 2007
"Error Correction Code in NAND Flash
memories" 29 November 2004
Observations on Errors, Corrections, &
Trust of Dependent Systems , by
James Hamilton, February 26, 2012
Sphere Packings, Lattices and Groups,
By J.H. Conway, N.J.A. Sloane,
Springer Science & Business Media, 9
Mar 2013 - Mathematics - 682 pages.
External links
Morelos-Zaragoza, Robert (2004). "The
Correcting Codes (ECC) Page" .
Retrieved 2006-03-05.
Retrieved from
"https://en.wikipedia.org/w/index.php?
title=Forward_error_correction&oldid=835438328
"