Error detection and correction: Difference between revisions

Jump to navigation Jump to search
imported>Connoisseurship
Applications: fix CRC-32 links
 
imported>Barkercoder
mNo edit summary
 
Line 1: Line 1:
{{short description|Techniques that enable reliable delivery of digital data over unreliable communication channels}}
{{Short description|Reliable digital data delivery methods on unreliable channels}}
{{distinguish|Exception handling}}
{{distinguish|Exception handling}}
{{about|computing|knowledge|Fact-checking|and|Problem solving}}
{{More citations needed|article|date=August 2008}}


[[File:Reed–Solomon error correction Mona Lisa LroLrLasercomFig4.jpg|thumb|To clean up transmission errors introduced by Earth's atmosphere (left), Goddard scientists applied [[Reed–Solomon error correction]] (right), which is commonly used in CDs and DVDs. Typical errors include missing pixels (white) and false signals (black). The white stripe indicates a brief period when transmission was interrupted.]]
[[File:Reed–Solomon error correction Mona Lisa LroLrLasercomFig4.jpg|thumb|To clean up transmission errors introduced by Earth's atmosphere (left), Goddard scientists applied [[Reed–Solomon error correction]] (right), which is commonly used in CDs and DVDs. Typical errors include missing pixels (white) and false signals (black). The white stripe indicates a brief period when transmission was interrupted.]]
Line 14: Line 12:


== History ==
== History ==
In classical antiquity, [[copyist]]s of the [[Hebrew Bible]] were paid for their work according to the number of [[Wiktionary:stich|stich]]s (lines of verse). As the prose books of the Bible were hardly ever written in stichs, the copyists, in order to estimate the amount of work, had to count the letters.<ref name="Jewish">{{cite encyclopedia |url=http://www.jewishencyclopedia.com/articles/10465-masorah |encyclopedia=Jewish Encyclopedia |article=Masorah}}</ref> This also helped ensure accuracy in the transmission of the text with the production of subsequent copies.<ref>{{cite book |last1=Pratico |first1=Gary D. |last2=Pelt |first2=Miles V. Van |title=Basics of Biblical Hebrew Grammar: Second Edition |date=2009 |publisher=Zondervan |isbn=978-0-310-55882-8 |url=https://books.google.com/books?id=p3FIoT0s3yYC&pg=PT448}}</ref><ref>{{cite book |last1=Mounce |first1=William D. |title=Greek for the Rest of Us: Using Greek Tools Without Mastering Biblical Languages |date=2007 |publisher=Zondervan |isbn=978-0-310-28289-1 |page=289 |url=https://books.google.com/books?id=AF-5ptJ0l2gC&pg=PA289}}</ref> Between the 7th and 10th centuries CE a [[Masoretes|group of Jewish scribes]] formalized and expanded this to create the [[Masoretic Text#Numerical Masorah|Numerical Masorah]] to ensure accurate reproduction of the sacred text. It included counts of the number of words in a line, section, book and groups of books, noting the middle stich of a book, word use statistics, and commentary.<ref name="Jewish" /> Standards became such that a deviation in even a single letter in a Torah scroll was considered unacceptable.<ref>[[Mishneh Torah]], Tefillin, Mezuzah, and Sefer Torah, 1:2. Example English translation: {{cite book |title=The Rambam's Mishneh Torah |author=[[Eliyahu Touger]] |publisher=[[Moznaim Publishing Corporation]] |url=https://www.chabad.org/library/article_cdo/aid/925417/jewish/Tefillin-Mezuzah-and-Sefer-Torah-Chapter-One.htm}}</ref> The effectiveness of their error correction method was verified by the accuracy of copying through the centuries demonstrated by discovery of the [[Dead Sea Scrolls]] in 1947–1956, dating from {{Circa|150 BCE-75 CE}}.<ref>{{cite book |author=Brian M. Fagan |title=[[The Oxford Companion to Archaeology]] |section=Dead Sea Scrolls |publisher=[[Oxford University Press]] |date=5 December 1996 |isbn=0195076184}}</ref>
In classical antiquity, [[copyist]]s of the [[Hebrew Bible]] were paid for their work according to the number of [[Wiktionary:stich|stich]]s (lines of verse). As the prose books of the Bible were hardly ever written in stichs, the copyists, in order to estimate the amount of work, had to count the letters.<ref name="Jewish">{{cite encyclopedia |url=http://www.jewishencyclopedia.com/articles/10465-masorah |encyclopedia=Jewish Encyclopedia |article=Masorah}}</ref> This also helped ensure accuracy in the transmission of the text with the production of subsequent copies.<ref>{{cite book |last1=Pratico |first1=Gary D. |last2=Pelt |first2=Miles V. Van |title=Basics of Biblical Hebrew Grammar: Second Edition |date=2009 |publisher=Zondervan |isbn=978-0-310-55882-8 |url=https://books.google.com/books?id=p3FIoT0s3yYC&pg=PT448}}</ref><ref>{{cite book |last1=Mounce |first1=William D. |title=Greek for the Rest of Us: Using Greek Tools Without Mastering Biblical Languages |date=2007 |publisher=Zondervan |isbn=978-0-310-28289-1 |page=289 |url=https://books.google.com/books?id=AF-5ptJ0l2gC&pg=PA289}}</ref> Between the 7th and 10th centuries CE a [[Masoretes|group of Jewish scribes]] formalized and expanded this to create the [[Masoretic Text#Numerical Masorah|Numerical Masorah]] to ensure accurate reproduction of the sacred text. It included counts of the number of words in a line, section, book and groups of books, noting the middle stich of a book, word use statistics, and commentary.<ref name="Jewish" /> Standards became such that a deviation in even a single letter in a Torah scroll was considered unacceptable.<ref>[[Mishneh Torah]], Tefillin, Mezuzah, and Sefer Torah, 1:2. Example English translation: {{cite book |title=The Rambam's Mishneh Torah |author=Eliyahu Touger |publisher=Moznaim Publishing Corporation |url=https://www.chabad.org/library/article_cdo/aid/925417/jewish/Tefillin-Mezuzah-and-Sefer-Torah-Chapter-One.htm}}</ref> The effectiveness of their error correction method was verified by the accuracy of copying through the centuries demonstrated by discovery of the [[Dead Sea Scrolls]] in 1947–1956, dating from {{Circa|150 BCE&nbsp;–&nbsp;75 CE}}.<ref>{{cite book |author=Brian M. Fagan |title=The Oxford Companion to Archaeology |section=Dead Sea Scrolls |publisher=[[Oxford University Press]] |date=5 December 1996 |isbn=0195076184}}</ref>


The modern development of [[error correction code]]s is credited to [[Richard Hamming]] in 1947.<ref name=Thompson>{{citation|first=Thomas M.|last=Thompson|title=From Error-Correcting Codes through Sphere Packings to Simple Groups|publisher=The Mathematical Association of America|year=1983|series=The Carus Mathematical Monographs (#21)|isbn=0-88385-023-0|page=vii}}</ref> A description of [[Hamming's code]] appeared in [[Claude Shannon]]'s ''A Mathematical Theory of Communication''<ref>{{citation|first=C.E.|last=Shannon|title=A Mathematical Theory of Communication|journal=Bell System Technical Journal|volume=27|issue=3|pages=379–423|year=1948|doi=10.1002/j.1538-7305.1948.tb01338.x|pmid=9230594|hdl=10338.dmlcz/101429|hdl-access=free}}</ref> and was quickly generalized by [[Marcel J. E. Golay]].<ref>{{citation|first=Marcel J. E.|last=Golay|title=Notes on Digital Coding|journal=Proc.I.R.E. (I.E.E.E.)|volume=37|year=1949|page=657}}</ref>
The modern development of [[error correction code]]s is credited to [[Richard Hamming]] in 1947.<ref name=Thompson>{{citation|first=Thomas M.|last=Thompson|title=From Error-Correcting Codes through Sphere Packings to Simple Groups|publisher=The Mathematical Association of America|year=1983|series=The Carus Mathematical Monographs (#21)|isbn=0-88385-023-0|page=vii}}</ref> A description of [[Hamming's code]] appeared in [[Claude Shannon]]'s ''A Mathematical Theory of Communication''<ref>{{citation|first=C.E.|last=Shannon|title=A Mathematical Theory of Communication|journal=Bell System Technical Journal|volume=27|issue=3|pages=379–423|year=1948|doi=10.1002/j.1538-7305.1948.tb01338.x|pmid=9230594|hdl=10338.dmlcz/101429|hdl-access=free}}</ref> and was quickly generalized by [[Marcel J. E. Golay]].<ref>{{citation|first=Marcel J. E.|last=Golay|title=Notes on Digital Coding|journal=Proc.I.R.E. (I.E.E.E.)|volume=37|year=1949|page=657}}</ref>


== Principles ==
== Principles ==
All error-detection and correction schemes add some [[Redundancy (information theory)|redundancy]] (i.e., some extra data) to a message, which receivers can use to check consistency of the delivered message and to recover data that has been determined to be corrupted. Error detection and correction schemes can be either [[systematic code|systematic]] or non-systematic. In a systematic scheme, the transmitter sends the original (error-free) data and attaches a fixed number of ''check bits'' (or ''parity data''), which are derived from the data bits by some encoding algorithm. If error detection is required, a receiver can simply apply the same algorithm to the received data bits and compare its output with the received check bits; if the values do not match, an error has occurred at some point during the transmission. If error correction is required, a receiver can apply the decoding algorithm to the received data bits and the received check bits to recover the original error-free data. In a system that uses a non-systematic code, the original message is transformed into an encoded message carrying the same information and that has at least as many bits as the original message.
All error-detection and correction schemes add some [[Redundancy (information theory)|redundancy]] (i.e., some extra data) to a message, which receivers can use to check consistency of the delivered message and to recover data that has been determined to be corrupted. Error detection and correction schemes can be either [[systematic code|systematic]] or non-systematic. In a systematic scheme, the transmitter sends the original (error-free) data and attaches a fixed number of ''check bits'' (or ''parity data''), which are derived from the data bits by some encoding algorithm. If error detection is required, a receiver can simply apply the same algorithm to the received data bits and compare its output with the received check bits; if the values do not match, an error has occurred at some point during the transmission. If error correction is required, a receiver can apply the decoding algorithm to the received data bits and the received check bits to recover the original error-free data. In a system that uses a non-systematic code, the original message is transformed into an encoded message carrying the same information, and that has at least as many bits as the original message.


Good error control performance requires the scheme to be selected based on the characteristics of the communication channel. Common [[channel model]]s include [[memoryless]] models where errors occur randomly and with a certain probability, and dynamic models where errors occur primarily in [[burst error|bursts]]. Consequently, error-detecting and -correcting codes can be generally distinguished between ''random-error-detecting/correcting'' and ''burst-error-detecting/correcting''. Some codes can also be suitable for a mixture of random errors and burst errors.
Good error control performance requires the scheme to be selected based on the characteristics of the communication channel. Common [[channel model]]s include [[memoryless]] models where errors occur randomly and with a certain probability, and dynamic models where errors occur primarily in [[burst error|bursts]]. Consequently, error-detecting and -correcting codes can be generally distinguished between ''random-error-detecting/correcting'' and ''burst-error-detecting/correcting''. Some codes can also be suitable for a mixture of random errors and burst errors.


If the channel characteristics cannot be determined, or are highly variable, an error-detection scheme may be combined with a system for retransmissions of erroneous data. This is known as [[automatic repeat request]] (ARQ), and is most notably used in the Internet. An alternate approach for error control is [[hybrid automatic repeat request]] (HARQ), which is a combination of ARQ and error-correction coding.
If the channel characteristics cannot be determined or are highly variable, an error-detection scheme may be combined with a system for retransmission of erroneous data. This is known as [[automatic repeat request]] (ARQ), and is most notably used on the Internet. An alternate approach for error control is [[hybrid automatic repeat request]] (HARQ), which is a combination of ARQ and error-correction coding.


== Types of error correction ==
== Types of error correction ==
Line 48: Line 46:
* ''Block codes'' are processed on a [[Block (telecommunications)|block-by-block]] basis. Early examples of block codes are [[repetition code]]s, [[Hamming code]]s and [[multidimensional parity-check code]]s. They were followed by a number of efficient codes, [[Reed–Solomon code]]s being the most notable due to their current widespread use. [[Turbo code]]s and [[low-density parity-check code]]s (LDPC) are relatively new constructions that can provide almost [[:Category:Capacity-approaching codes|optimal efficiency]].
* ''Block codes'' are processed on a [[Block (telecommunications)|block-by-block]] basis. Early examples of block codes are [[repetition code]]s, [[Hamming code]]s and [[multidimensional parity-check code]]s. They were followed by a number of efficient codes, [[Reed–Solomon code]]s being the most notable due to their current widespread use. [[Turbo code]]s and [[low-density parity-check code]]s (LDPC) are relatively new constructions that can provide almost [[:Category:Capacity-approaching codes|optimal efficiency]].


[[Shannon's theorem]] is an important theorem in forward error correction, and describes the maximum [[information rate]] at which reliable communication is possible over a channel that has a certain error probability or [[signal-to-noise ratio]] (SNR). This strict upper limit is expressed in terms of the [[channel capacity]]. More specifically, the theorem says that there exist codes such that with increasing encoding length the probability of error on a [[channel model|discrete memoryless channel]] can be made arbitrarily small, provided that the [[code rate]] is smaller than the channel capacity. The code rate is defined as the fraction ''k/n'' of ''k'' source symbols and ''n'' encoded symbols.
[[Shannon's theorem]] is an important theorem in forward error correction, and describes the maximum [[information rate]] at which reliable communication is possible over a channel that has a certain error probability or [[signal-to-noise ratio]] (SNR). This strict upper limit is expressed in terms of the [[channel capacity]]. More specifically, the theorem says that there exist codes such that with increasing encoding length the probability of error on a [[channel model|discrete memoryless channel]] can be made arbitrarily small, provided that the [[code rate]] is lower than the channel capacity. The code rate is defined as the fraction ''k/n'' of ''k'' source symbols and ''n'' encoded symbols.


The actual maximum code rate allowed depends on the error-correcting code used, and may be lower. This is because Shannon's proof was only of existential nature, and did not show how to construct codes that are both optimal and have [[polynomial time|efficient]] encoding and decoding algorithms.
The actual maximum code rate allowed depends on the error-correcting code used, and may be lower. This is because Shannon's proof was only of existential nature, and did not show how to construct codes that are both optimal and have [[polynomial time|efficient]] encoding and decoding algorithms.
Line 102: Line 100:
A ''parity bit'' is a bit that is added to a group of source bits to ensure that the number of set bits (i.e., bits with value 1) in the outcome is even or odd. It is a very simple scheme that can be used to detect single or any other odd number (i.e., three, five, etc.) of errors in the output. An even number of flipped bits will make the parity bit appear correct even though the data is erroneous.
A ''parity bit'' is a bit that is added to a group of source bits to ensure that the number of set bits (i.e., bits with value 1) in the outcome is even or odd. It is a very simple scheme that can be used to detect single or any other odd number (i.e., three, five, etc.) of errors in the output. An even number of flipped bits will make the parity bit appear correct even though the data is erroneous.


Parity bits added to each ''word'' sent are called [[transverse redundancy check]]s, while those added at the end of a stream of ''words'' are called [[longitudinal redundancy check]]s.  For example, if each of a series of m-bit ''words'' has a parity bit added, showing whether there were an odd or even number of ones in that word, any word with a single error in it will be detected. It will not be known where in the word the error is, however. If, in addition, after each stream of n words a parity sum is sent, each bit of which shows whether there were an odd or even number of ones at that bit-position sent in the most recent group, the exact position of the error can be determined and the error corrected. This method is only guaranteed to be effective, however, if there are no more than 1 error in every group of n words.  With more error correction bits, more errors can be detected and in some cases corrected.
Parity bits added to each ''word'' sent are called [[transverse redundancy check]]s, while those added at the end of a stream of ''words'' are called [[longitudinal redundancy check]]s.  For example, if each of a series of m-bit ''words'' has a parity bit added, showing whether there were an odd or even number of ones in that word, any word with a single error in it will be detected. It will not be known where in the word the error is, however. If, in addition, after each stream of n words a parity sum is sent, each bit of which shows whether there were an odd or even number of ones at that bit-position sent in the most recent group, the exact position of the error can be determined and the error corrected. This method is only guaranteed to be effective, however, if there are no more than 1 error in every group of n words.  With more error correction bits, more errors can be detected and, in some cases, corrected.


There are also other bit-grouping techniques.
There are also other bit-grouping techniques.
Line 166: Line 164:


=== Deep-space telecommunications ===
=== Deep-space telecommunications ===
The development of error-correction codes was tightly coupled with the history of deep-space missions due to the extreme dilution of signal power over interplanetary distances, and the limited power availability aboard space probes. Whereas early missions sent their data uncoded, starting in 1968, digital error correction was implemented in the form of (sub-optimally decoded) [[convolutional code]]s and [[Reed–Muller code]]s.<ref name="deep-space-codes">K. Andrews et al., ''The Development of Turbo and LDPC Codes for Deep-Space Applications'', Proceedings of the IEEE, Vol. 95, No. 11, Nov. 2007.</ref> The Reed–Muller code was well suited to the noise the spacecraft was subject to (approximately matching a [[Gaussian function|bell curve]]), and was implemented for the Mariner spacecraft and used on missions between 1969 and 1977.
The development of error-correction codes was tightly coupled with the history of deep-space missions due to the extreme dilution of signal power over interplanetary distances and the limited power availability aboard space probes. Whereas early missions sent their data uncoded, starting in 1968, digital error correction was implemented in the form of (sub-optimally decoded) [[convolutional code]]s and [[Reed–Muller code]]s.<ref name="deep-space-codes">K. Andrews et al., ''The Development of Turbo and LDPC Codes for Deep-Space Applications'', Proceedings of the IEEE, Vol. 95, No. 11, Nov. 2007.</ref> The Reed–Muller code was well suited to the noise the spacecraft was subject to (approximately matching a [[Gaussian function|bell curve]]), and was implemented for the Mariner spacecraft and used on missions between 1969 and 1977.


The [[Voyager 1]] and [[Voyager 2]] missions, which started in 1977, were designed to deliver color imaging and scientific information from [[Jupiter]] and [[Saturn]].<ref name="voyager">{{cite book |first1=William Cary |last1=Huffman |first2=Vera S. |last2=Pless |author-link2=Vera Pless |title=Fundamentals of Error-Correcting Codes |publisher=[[Cambridge University Press]] |year=2003 |isbn=978-0-521-78280-7 |url-access=registration |url=https://archive.org/details/fundamentalsofer0000huff }}</ref> This resulted in increased coding requirements, and thus, the spacecraft were supported by (optimally [[Viterbi decoder|Viterbi-decoded]]) convolutional codes that could be [[concatenated code|concatenated]] with an outer [[Binary Golay code|Golay (24,12,8) code]]. The Voyager 2 craft additionally supported an implementation of a [[Reed–Solomon code]]. The concatenated Reed–Solomon–Viterbi (RSV) code allowed for very powerful error correction, and enabled the spacecraft's extended journey to [[Uranus]] and [[Neptune]]. After ECC system upgrades in 1989, both crafts used V2 RSV coding.
The [[Voyager 1]] and [[Voyager 2]] missions, which started in 1977, were designed to deliver color imaging and scientific information from [[Jupiter]] and [[Saturn]].<ref name="voyager">{{cite book |first1=William Cary |last1=Huffman |first2=Vera S. |last2=Pless |author-link2=Vera Pless |title=Fundamentals of Error-Correcting Codes |publisher=[[Cambridge University Press]] |year=2003 |isbn=978-0-521-78280-7 |url-access=registration |url=https://archive.org/details/fundamentalsofer0000huff }}</ref> This resulted in increased coding requirements, and thus, the spacecraft were supported by (optimally [[Viterbi decoder|Viterbi-decoded]]) convolutional codes that could be [[concatenated code|concatenated]] with an outer [[Binary Golay code|Golay (24,12,8) code]]. The Voyager 2 craft additionally supported an implementation of a [[Reed–Solomon code]]. The concatenated Reed–Solomon–Viterbi (RSV) code allowed for very powerful error correction, and enabled the spacecraft's extended journey to [[Uranus]] and [[Neptune]]. After ECC system upgrades in 1989, both crafts used V2 RSV coding.
Line 178: Line 176:


=== Data storage ===
=== Data storage ===
Error detection and correction codes are often used to improve the reliability of data storage media.<ref>{{Cite book|last1=Kurtas|first1=Erozan M.|url=https://books.google.com/books?id=Vx_NBQAAQBAJ&q=Error+detection+and+correction+codes+are+often+used+to+improve+the+reliability+of+data+storage+media&pg=PR5|title=Advanced Error Control Techniques for Data Storage Systems|last2=Vasic|first2=Bane|date=2018-10-03|publisher=CRC Press|isbn=978-1-4200-3649-7|language=en}}{{Dead link|date=March 2020 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>  A parity track capable of detecting single-bit errors was present on the first [[magnetic tape data storage]] in 1951. The [[optimal rectangular code]] used in [[group coded recording]] tapes not only detects but also corrects single-bit errors. Some [[file format]]s, particularly [[archive formats]], include a checksum (most often CRC-32]) to detect corruption and truncation and can employ redundancy or [[parity file]]s to recover portions of corrupted data. [[Cross-interleaved Reed–Solomon coding|Reed-Solomon codes]] are used in [[compact disc]]s to correct errors caused by scratches.
Error detection and correction codes are often used to improve the reliability of data storage media.<ref>{{Cite book|last1=Kurtas|first1=Erozan M.|title=Advanced Error Control Techniques for Data Storage Systems|last2=Vasic|first2=Bane|date=2018-10-03|publisher=CRC Press|isbn=978-1-4200-3649-7|language=en}}</ref>  A parity track capable of detecting single-bit errors was present on the first [[magnetic tape data storage]] in 1951. The [[optimal rectangular code]] used in [[group coded recording]] tapes not only detects but also corrects single-bit errors. Some [[file format]]s, particularly [[archive formats]], include a checksum (most often CRC-32]) to detect corruption and truncation and can employ redundancy or [[parity file]]s to recover portions of corrupted data. [[Reed-Solomon code]]s are used in [[compact disc]]s to correct errors caused by scratches.


Modern hard drives use Reed–Solomon codes to detect and correct minor errors in sector reads, and to recover corrupted data from failing sectors and store that data in the spare sectors.<ref>{{cite web |archive-url=https://web.archive.org/web/20080202143103/http://www.myharddrivedied.com/presentations_whitepaper.html |archive-date=2008-02-02 |url=http://www.myharddrivedied.com/presentations_whitepaper.html |title=My Hard Drive Died |author=Scott A. Moulton}}</ref> [[RAID]] systems use a variety of error correction techniques to recover data when a hard drive completely fails.  Filesystems such as [[ZFS]] or [[Btrfs]], as well as some [[RAID]] implementations, support [[data scrubbing]] and resilvering, which allows bad blocks to be detected and (hopefully) recovered before they are used.<ref>{{Cite book|last1=Qiao|first1=Zhi|last2=Fu|first2=Song|last3=Chen|first3=Hsing-Bung|last4=Settlemyer|first4=Bradley|title=2019 IEEE International Conference on Cluster Computing (CLUSTER) |chapter=Building Reliable High-Performance Storage Systems: An Empirical and Analytical Study |date=2019|pages=1–10|doi=10.1109/CLUSTER.2019.8891006|isbn=978-1-7281-4734-5|s2cid=207951690}}</ref> The recovered data may be re-written to exactly the same physical location, to spare blocks elsewhere on the same piece of hardware, or the data may be rewritten onto replacement hardware.
Modern hard drives use Reed–Solomon codes to detect and correct minor errors in sector reads, and to recover corrupted data from failing sectors and store that data in the spare sectors.<ref>{{cite web |archive-url=https://web.archive.org/web/20080202143103/http://www.myharddrivedied.com/presentations_whitepaper.html |archive-date=2008-02-02 |url=http://www.myharddrivedied.com/presentations_whitepaper.html |title=My Hard Drive Died |author=Scott A. Moulton}}</ref> [[RAID]] systems use a variety of error correction techniques to recover data when a hard drive completely fails.  Filesystems such as [[ZFS]] or [[Btrfs]], as well as some [[RAID]] implementations, support [[data scrubbing]] and resilvering, which allows bad blocks to be detected and (hopefully) recovered before they are used.<ref>{{Cite book|last1=Qiao|first1=Zhi|last2=Fu|first2=Song|last3=Chen|first3=Hsing-Bung|last4=Settlemyer|first4=Bradley|title=2019 IEEE International Conference on Cluster Computing (CLUSTER) |chapter=Building Reliable High-Performance Storage Systems: An Empirical and Analytical Study |date=2019|pages=1–10|doi=10.1109/CLUSTER.2019.8891006|isbn=978-1-7281-4734-5|s2cid=207951690}}</ref> The recovered data may be re-written to exactly the same physical location, to spare blocks elsewhere on the same piece of hardware, or the data may be rewritten onto replacement hardware.
Line 203: Line 201:
  | author = Jeff Layton | magazine = [[Linux Magazine]]
  | author = Jeff Layton | magazine = [[Linux Magazine]]
}}</ref><ref>{{cite web
}}</ref><ref>{{cite web
  | url = http://bluesmoke.sourceforge.net/
  | url = https://bluesmoke.sourceforge.net/
  | title = EDAC Project
  | title = EDAC Project
  | access-date = 2014-08-12
  | access-date = 2014-08-12
Line 240: Line 238:
* [http://www.eccpage.com/ ECC Page] – implementations of popular ECC encoding and decoding routines
* [http://www.eccpage.com/ ECC Page] – implementations of popular ECC encoding and decoding routines


[[Category:Error detection and correction| ]]
[[Category:Error detection and correction]]
[[Category:Computer errors|Detection and correction]]
[[Category:Computer errors]]