实现二进制数据纠错的过程是怎样的?

What is the process for achieving error correction in binary data?

我一直在阅读和研究二进制数据中的纠错,但我似乎无法完全掌握所使用的步骤。我已经阅读了https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction及其相关文章,对其中涉及的数学有所了解,但我想彻底了解整个过程。

任何人都可以向我或 link 我解释一个解释,该解释将逐步告诉我如何从二进制表示形式开始,例如,字符串 "Hello, how are you?" (01001000011001010110110001101100011011110010110000100000011010000110111101110111001000000110000101110010011001010010000001111001011011110111010100111111) 到具有足够纠错信息的二进制 blob 以恢复 10 个乱码位中的 1 个,然后解释结果并能够确定哪些位是错误的?我可以理解两行代码或数学,所以欢迎任何帮助。谢谢!

来自 wiki 文章,系统编码过程将消息视为具有有限域系数的多项式,附加所需数量的零(乘以 x^t),除以生成多项式,然后从中减去余数那些附加的归零字节。这意味着编码消息多项式是生成多项式的精确倍数。

如果在生成多项式 (a^1, a^2, ...) 的根处计算原始编码消息多项式,则结果是一组零。如果在生成多项式的根处评估接收到的带有错误的编码消息,则原始项将被丢弃,结果是一组 "syndromes",它们是错误位置和错误值的函数。维基文章随后解释了错误定位器多项式 (lambda) 与 "syndromes".

之间的关键方程式

wiki 文章随后解释了 4 种可用于将校正子转换为错误位置和错误值的方法,但 Berlekamp-Massey 和 Euclid 是使用的两种主要方法。

如 wiki 文章中所述,每个错误都需要两个奇偶校验项才能更正错误(因为每个错误有两个未知数,即错误位置和错误值)。对于 10% 的错误处理,则 20% 的消息必须是奇偶校验。如果一条消息有 30 个字节,则添加 20 个字节的奇偶校验以生成一个 50 字节的编码消息,其中最多可以纠正 10 个字节的错误。

Wiki 文章包含 link NASA 教程:

http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19900019023_1990019023.pdf

您可能会发现我写的这个更简短的教程更容易理解。

http://rcgldr.net/misc/ecc.pdf

我的教程中有一些您不需要的内容,例如求解二次或三次方程(我没有删除的遗留内容),并且它缺少扩展欧几里得或 Berlekamp Massey 解码等内容,但这足以开始。