Content deleted Content added
Matthiaspaul (talk | contribs) improved refs |
|||
Line 1:
{{bots|deny=Citation bot}}
{{short description|scheme for controlling errors in data over noisy communication channels}}
{{redirect|Interleaver|the fiber-optic device|optical interleaver}}
{{Use dmy dates|date=July 2013}}
In [[computing]], [[telecommunication]], [[information theory]], and [[coding theory]], an '''error correction code,''' sometimes '''error correcting code,''' ('''ECC''') is used for [[error control|controlling errors]] in data over unreliable or noisy [[communication channel]]s.<ref>
The redundancy allows the receiver to detect a limited number of errors that may occur anywhere in the message, and often to correct these errors without retransmission. ECC gives the receiver the ability to correct errors without needing a [[reverse channel]] to request retransmission of data, but at the cost of a fixed, higher forward channel bandwidth. ECC is therefore applied in situations where retransmissions are costly or impossible, such as one-way communication links and when transmitting
▲The redundancy allows the receiver to detect a limited number of errors that may occur anywhere in the message, and often to correct these errors without retransmission. ECC gives the receiver the ability to correct errors without needing a [[reverse channel]] to request retransmission of data, but at the cost of a fixed, higher forward channel bandwidth. ECC is therefore applied in situations where retransmissions are costly or impossible, such as one-way communication links and when transmitting to multiple receivers in [[multicast]]. For example, in the case of a satellite orbiting around [[Uranus]], a retransmission because of decoding errors can create a delay of 5 hours. ECC information is usually added to [[mass storage]] devices to enable recovery of corrupted data, is widely used in [[modem]]s, and is used on systems where the primary memory is [[ECC memory]].
ECC processing in a receiver may be applied to a digital bit stream or in the demodulation of a digitally modulated carrier. For the latter, ECC is an integral part of the initial [[Analog-to-digital converter|analog-to-digital conversion]] in the receiver. The [[Viterbi decoder]] implements a [[Error correction code#Types of ECC|soft-decision algorithm]] to demodulate digital data from an analog signal corrupted by noise. Many ECC encoders/decoders can also generate a [[bit-error rate]] (BER) signal which can be used as feedback to fine-tune the analog receiving electronics.
Line 92 ⟶ 69:
There are many types of block codes, but among the classical ones the most notable is [[Reed-Solomon error correction|Reed-Solomon coding]] because of its widespread use in [[compact disc]]s, [[DVD]]s, and [[hard disk drive#Error handling|hard disk drives]]. Other examples of classical block codes include [[Golay code (disambiguation)|Golay]], [[BCH code|BCH]], [[Multidimensional parity-check code|Multidimensional parity]], and [[Hamming code]]s.
Hamming ECC is commonly used to correct [[NAND flash]] memory errors.<ref>[http://www.eetasia.com/ART_8800575062_499486_AN_7549c493.HTM "Hamming codes for NAND flash memory devices"]. EE Times-Asia. Apparently based on [http://www.micron.com/~/media/Documents/Products/Technical%20Note/NAND%20Flash/tn2908_NAND_hamming_ECC_code.pdf "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."</ref>
This provides single-bit error correction and 2-bit error detection.
Hamming codes are only suitable for more reliable [[single-level cell]] (SLC) NAND.
Denser [[multi-level cell]] (MLC) NAND requires stronger multi-bit correcting ECC such as BCH or Reed–Solomon.<ref name="spansion">[http://www.spansion.com/Support/Application%20Notes/Types_of_ECC_Used_on_Flash_AN.pdf "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."</ref><ref>Jim Cooke. {https://cushychicken.github.io/assets/cooke_inconvenient_truths.pdf "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."</ref>{{Dubious|date=March 2008}} NOR Flash typically does not use any error correction.<ref name="spansion"/>
Classical block codes are usually decoded using '''hard-decision''' algorithms,<ref>{{cite journal |
Nearly all classical block codes apply the algebraic properties of [[finite field]]s. Hence classical block codes are often referred to as algebraic codes.
Line 129 ⟶ 84:
A few forward error correction codes are designed to correct bit-insertions and bit-deletions, such as Marker Codes and Watermark Codes.
The [[Levenshtein distance]] is a more appropriate way to measure the bit error rate when using such codes.
<ref>{{cite web |author-last1=Shah |author-first1=Gaurav |author-last2=Molina |author-first2=Andres |author-last3=Blaze |author-first3=Matt |title=Keyboards and covert channels |url=https://www.usenix.org/legacy/event/sec06/tech/full_papers/shah/shah_html/jbug-Usenix06.html |website=Usenix.org |access-date=20 December 2018 |date=2006}}</ref>
==Code-rate and the tradeoff between reliability and data rate==
Line 145 ⟶ 90:
The fundamental principle of ECC is to add redundant bits in order to help the decoder to find out the true message that was encoded by the transmitter. The code-rate of a given ECC system is defined as the rate between the number of information bits and the total number of bits (i.e. information plus redundancy bits) in a given communication package. The code-rate is hence a real number. A low code-rate close to zero implies a strong code that uses many redundant bits to achieve a good performance, while a large code-rate close to 1 implies a weak code.
The redundant bits that protect the information have to be transferred using the same communication resources that they are trying to protect. This causes a fundamental tradeoff between reliability and data rate.<ref>{{citation |
One interesting question is the following: how efficient in terms of information transfer can be an ECC that has a negligible decoding error rate? This question was answered by Claude Shannon with his second theorem, which says that the channel capacity is the maximum bit rate achievable by any ECC whose error rate tends to zero:<ref name="shannon paper">C. E. Shannon: ''A mathematical theory of communication.'' [[Bell System Technical Journal]], vol. 27, pp. 379–423 and 623–656, July and October 1948</ref>
The most popular ECCs have a trade-off between performance and computational complexity. Usually, their parameters give a range of possible code rates, which can be optimized depending on the scenario. Usually, this optimization is done in order to achieve a low decoding error probability while minimizing the impact to the data rate. Another criterion for optimizing the code rate is to balance low error rate and retransmissions number in order to the energy cost of the communication.<ref>{{Cite conference |title=Optimizing the code rate for achieving energy-efficient wireless communications |first1=Fernando |last1=Rosas |first2=Glauber |last2=Brante |first3=Richard Demo |last3=Souza |first4=Christian |last4=Oberli |url=http://ieeexplore.ieee.org/abstract/document/6952166/ |date=2014 |booktitle=Proceedings of the IEEE Wireless Communications and Networking Conference (WCNC)}}</ref>
==Concatenated ECC codes for improved performance==
Line 187 ⟶ 131:
[[File:Interleaving1.png|right|400px|thumb|A short illustration of interleaving idea.]]
Interleaving is frequently used in digital communication and storage systems to improve the performance of forward error correcting codes. Many [[communication channel]]s are not memoryless: errors typically occur in [[burst error|burst]]s 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 (continuous)|uniform distribution]] of errors.<ref name="turbo-principles">{{cite book |
The analysis of modern iterated codes, like [[turbo code]]s and [[LDPC code]]s, typically assumes an independent distribution of errors.<ref>{{cite journal |author-first1=
For turbo codes, an interleaver is an integral component and its proper design is crucial for good performance.<ref name="turbo-principles"/><ref>{{cite journal |author-first=K. |author-last=Andrews |title=The Development of Turbo and LDPC Codes for Deep-Space Applications |journal=[[
Interleaver designs include:
* rectangular (or uniform) interleavers (similar to the method using skip factors described above)
* convolutional interleavers
* random interleavers (where the interleaver is a known random permutation)
* S-random interleaver (where the interleaver is a known random permutation with the constraint that no input symbols within distance S appear within a distance of S in the output).<ref>S. Dolinar and D. Divsalar. Weight Distributions for Turbo Codes Using Random and Nonrandom Permutations.
* Another possible construction is a contention-free quadratic [[permutation polynomial]] (QPP).<ref name="Takeshita1">{{cite journal |
In multi-[[carrier signal|carrier]] communication systems, interleaving across carriers may be employed to provide frequency [[diversity scheme|diversity]], e.g., to mitigate [[frequency-selective fading]] or narrowband interference.<ref>{{Cite journal |title=Digital Video Broadcast (DVB); Frame structure, channel coding and modulation for a second generation digital terrestrial television broadcasting system (DVB-T2) |journal=En 302 755 |issue=V1.1.1 |publisher=[[ETSI]] |date=September 2009
===Example===
Line 238 ⟶ 182:
=== Disadvantages of interleaving ===
Use of interleaving techniques increases total delay. This is because the entire interleaved block must be received before the packets can be decoded.<ref>{{cite web |
== Software for error-correcting codes ==
Line 296 ⟶ 240:
* [[Repeat-accumulate code]]
* [[Repetition code]]s, such as [[Triple modular redundancy]]
* Spinal code, a rateless, nonlinear code based on pseudo-random hash functions
* [[Tornado code]], a near-optimal [[erasure code|erasure correcting code]], and the precursor to [[Fountain code]]s
* [[Turbo code]]
Line 322 ⟶ 258:
==Further reading==
* {{cite book |
* {{cite book |author-last=Wicker
* {{cite book |author-last=Wilson
* [https://web.archive.org/web/20070519161253/http://www.st.com/stonline/products/literature/an/10123.htm "Error Correction Code in Single Level Cell NAND Flash memories"] 16 February 2007
* [http://www.eetasia.com/ARTICLES/2004NOV/A/2004NOV29_MEM_AN10.PDF?SOURCES=DOWNLOAD "Error Correction Code in NAND Flash memories"] 29 November 2004
* [http://perspectives.mvdirona.com/2012/02/observations-on-errors-corrections-trust-of-dependent-systems/
* Sphere Packings, Lattices and Groups, By J. H. Conway, N. J. A. Sloane, [[Springer Science & Business Media]], 9
==External links==
* {{Cite web |author-last=Morelos-Zaragoza |author-first=Robert |date=2004 |url=http://www.eccpage.com/ |title=The Correcting Codes (ECC) Page |access-date=2006-03-05}}
* [https://github.com/supermihi/lpdec lpdec: library for LP decoding and related things (Python)]
|