Error correction and detection
(Redirected from Error-correction)
Categories: Error detection and correction
In computer science and information theory, the issue of error correction and detection has great practical importance. Given some data, error detection methods enable one to check whether the data has been corrupted by the introduction of errors, but the method does not tell us where the errors have been introduced.
Error correction schemes permit error localization but also give the possibility of correcting errors that have been introduced. Error correction and detection schemes find use in implementations of reliable data transfer over noisy transmission links, data storage media (including dynamic RAM, compact discs), and other applications where the integrity of data is important.
- In digital telecommunications, channel coding is a pre-transmission mapping applied to a digital signal or data file, usually with an error-detection or an error-correction code.
- File formats that have internal error correction: AAC, mp3, ICER (used by the Mars rovers)
Contents |
Terminology
While the use of error correction and detection schemes are not limited only to sender-receiver systems, in discussing a particular scheme, it will be advantageous for us to use the terminology of a "sender" and a "receiver" for simplicity. The sender will always have the correct data, without errors, and thus for a situation of data storage media for example, the "sent" data can be likened to the original, correct data as intended, and the "received" data can be likened to the data that is read from the media.
Error correction and detection schemes work by adding extra information to the original sent information. We will call this extra information redundant data, and we will call the original information the payload.
Error detection
Given the goal of error correction, the idea of error detection may seem to be insufficient. However, error-correction schemes may be computationally intensive, or require excessive redundant data which may be inhibitive for a certain application. Error correction in some applications, such as a sender-receiver system, can be achieved with only a detection system in tandem with a automatic repeat request scheme to notify the sender that a portion of the data sent was received incorrectly and will need to be retransmitted, however where efficiency is important, it is possible to detect and correct errors with far less redundant data.
Typical schemes
Several schemes exist to achieve error detection, and are generally quite simple.
Repetition schemes
Variations on this theme exist. Given a stream of data that is to be sent, the data is broken up into blocks of bits, and in sending, each block is sent some predetermined number of times. For example, if we want to send "1011", we may repeat this block three times each.
Suppose we send "1011 1011 1011", and this is received as "1010 1011 1011". As one group is not the same as the other two, we can determine that an error has occurred. This scheme is not very efficient, and can be susceptible to problems if the error occurs in exactly the same place for each group (e.g. "1010 1010 1010" in the example above will be detected as correct in this scheme).
The scheme however is extremely simple, and is in fact used in some transmissions of numbers stations.
Parity schemes
- Main article: Parity bit
Given a stream of data that is to be sent, the data is broken up into blocks of bits, and the number of 1 bits is counted.
Based on this number, we use one bit of redundant data specified as follows: if the number of 1 bits is even, this bit is 0, otherwise, if the number of 1 bits is odd, this bit is 1. So, for the payload byte 00101101, there are four 1 bits, so the redundant data bit is 0. For the payload byte 11101111, there are seven 1 bits, so the redundant data bit is 1.
Suppose the payload and redundant data is sent consecutively, and we are sending the two payloads as above. So, we send "001011010" and "111011111". Say now an error occurs in the first byte, that "001011010" is received as "101011010". Error detection is achieved by recalculating the redundant data bit at the receiver side, using the first eight bits. From the receiver's point of view, there are five 1 bits, so the redundant data bit should be 1, but it is received as 0, so the receiver can conclude that an error has occurred. It can be seen that even if the redundant data bit is corrupted, error detection still occurs.
There is a limitation to the parity scheme. Suppose that two errors occur in the second byte, that "111011111" is received as "011001111". On recalculation of the redundant data bit, the receiver finds that there are five one bits -- which is still odd, and finds that this byte is received correctly! We say then that the parity scheme detects single-bit errors.
Cyclic redundancy checks
- Main article: Cyclic redundancy check
Many more complex error detection (and correction) methods make use of the properties of finite fields and polynomials over such fields.
The cyclic redundancy check considers a block of data as the coefficients to a polynomial and then divides by a fixed, predetermined polynomial. The coefficients of the result of the division is taken as the redundant data bits, the CRC.
- Checking the received data can be achieved by multiplying the predetermined polynomial by the CRC.
- If this is the same as the payload data, then the data has been received without error.
- Alternatively, one can recompute the CRC from the payload bits and compare the CRC with the CRC that has been received.
Error correction
The above methods are sufficient to determine whether some data has been received in error. But often, this is not enough. Consider an application such as simplex teletype over radio (SITOR). If a message needs to be received quickly and needs to be complete without error, merely knowing where the errors occurred may not be enough, the second condition is not satisfied as the message will be incomplete. Suppose then the receiver waits for a message to be repeated (since the situation is simplex), the first condition is not satisfied since the receiver will have to wait (possibly a long time) for the message to be repeated to fill the gaps left by the errors.
It would be advantageous if the receiver could somehow determine what the error was and thus correct it. Is this even possible? Yes, consider the NATO phonetic alphabet -- if a sender were to be sending the word "WIKI" with the alphabet by sending "WHISKEY INDIA KILO INDIA" and this was received (with * signifying letters received in error) as "W**KEY I**I* **LO **DI*", it would be possible to correct all the errors here since there is only one word in the NATO phonetic alphabet which starts with "W" and ends in "KEY", and similarly for the other words. This idea is also present in some error correcting codes (ECC).
Error-correcting schemes also have their limitations. Some can correct a certain number of bit errors and only detect further numbers of bit errors. Codes which can correct one error are termed single error correcting (SEC), and those which detect two are termed double error detecting (DED). There are codes which can correct and detect more errors than these.
Applications
The Internet
In a typical TCP/IP stack, error detection is performed at multiple levels:
- Each Ethernet frame carries a CRC-32 checksum. The receiver discards frames if their checksums don't match.
- The IPv4 header contains a header checksum of the contents of the header (excluding the checksum field). Packets with checksums that don't match are discarded.
- The checksum was omitted from the IPv6 header, because most current link layer protocols have error detection.
- UDP has an optional checksum. Packets with wrong checksums are discarded.
- TCP has a checksum of the payload, TCP header (excluding the checksum field) and source- and destination addresses of the IP header. Packets found to have incorrect checksums are discarded and eventually get retransmitted when the sender receives a triple-ack or a time-out occurs.
Deep Space Telecommunications (Voyager)
NASA has used many different error correcting codes. For missions between 1969 and 1977 the Mariner spacecraft used a Reed-Muller code. The noise these spacecraft were subject to was well approximated by a "bell-curve" (normal distribution), so the Reed-Muller codes were well suited to the situation.
The Voyager 1 & 2 spacecraft transmitted color pictures of Jupiter and Saturn in 1979 and 1980.
- Color image transmission required 3 times the amount of data, so the Golay (24,12,8) code was used.
- This Golay code is only 3-error correcting, but it could be transmitted at a much higher data rate.
- Voyager 2 went on to Uranus and Neptune and the code was switched to a concatenated Reed-Solomon code-Convolutional code for its substantially more powerful error correcting capabilities.
The different kinds of deep space and orbital missions that are conducted suggest that trying to find a "one size fits all" error correction system will be an ongoing problem for some time to come.
- For missions close to the earth the nature of the "noise" is different from that on a spacecraft headed towards the outer planets
- In particular, if a transmitter on a spacecraft far from earth is operating at a low power, the problem of correcting for noise gets larger with distance from the earth
Satellite Broadcasting (DVB)
The demand for satellite transponder bandwidth continues to grow, fueled by the desire to deliver television (including new channels and High Definition TV) and IP data. Transponder availability and bandwidth constraints have limited this growth, because transponder capacity is determined by the selected modulation scheme and Forward Error Correction (FEC) rate.
Scientific-Atlanta has been evaluating developing products based on Turbo Codes concatenated with minimal complexity Reed-Solomon Codes in its laboratories in Atlanta, Georgia and Toronto, Canada.
While QPSK has been in use for many years, higher orders of modulation such as 8PSK and 16QAM have recently enabled the satellite industry to increase transponder efficiency.
This increase in the information rate in a transponder comes at the expense of an increase in the carrier power to meet the threshold requirement into existing antennas.
Tests conducted using the latest silicon demonstrate that the performance achieved is as predicted, and that the implementation margin may be even lower than the 0.8 dB figure used in the initial design parameters.
Information theory and error correction and detection
Information theory tells us that whatever be the probability of error in transmission or storage, it is possible to construct error-correcting codes in which the likelihood of failure is arbitrarily low, although this requires adding increasing amounts of redundant data to the original, which might not be practical when the error probability is very high. Shannon's theorem sets an upper bound to the error correction rate that can be achieved (and thus the level of noise that can be tolerated) using a fixed amount of redundancy, but does not tell us how to construct such an optimal encoder.
Error-correcting codes can be divided into block codes and convolutional codes. Other block error-correcting codes, such as Reed-Solomon codes transform a chunk of bits into a (longer) chunk of bits in such a way that errors up to some threshold in each block can be detected and corrected.
However, in practice errors often occur in bursts rather than at random. This is often compensated for by shuffling (interleaving) the bits in the message after coding. Then any burst of bit-errors is broken up into a set of scattered single-bit errors when the bits of the message are unshuffled (de-interleaved) before being decoded.
List of error-correction methods
- Alamouti coding, otherwise called Space-Time codes.
- Check bit
- Check digit
- Convolutional codes are usually decoded with Iterative Viterbi Decoding techniques
- Digital fountain code
- Differential space-time code, related to Alamouti Code family of Space-Time codes.
- Erasure code
- Forward error correction
- Group code
- Golay code, the Binary Golay codes are the most commonly used Golay codes
- Hagelbarger code
- Hamming code
- Low-density parity-check code
- Parity bit
- Reed-Solomon error correction
- Reed-Muller code
- Sparse graph code
- Space-time trellis code
- Turbo code
- Viterbi algorithm
- Walsh code used in cellular telephony for its low noise immunity, not just its ECC capabilities
See also
Conferences on Error Correction
- 4th INTERNATIONAL SYMPOSIUM ON TURBO CODES
- Web [1] http://www-turbo.enst-bretagne.fr/
- Web [2] http://www.turbo-coding-2006.org/
External links
- The on-line textbook: Information Theory, Inference, and Learning Algorithms, by David MacKay, contains chapters on elementary error-correcting codes; on the theoretical limits of error-correction; and on the latest state-of-the-art error-correcting codes, including low-density parity-check codes, turbo codes, and digital fountain codes.ca:Detecció d'errors
de:Fehlerkorrekturverfahren es:Detección de errores fr:Code correcteur ko:오류정정부호 nl:Kanaalcodering ja:誤り検出 ru:Коррекция ошибок