1

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

任何人都可以向我解释或将我链接到一个解释,它会一步一步地告诉我,我是如何从字符串“你好,你好吗?”的二进制表示开始的。( 01001000011001010110110001101100011011110010110000100000011010000110111101110111001000000110000101110010011001010010000001111001011011110111010100111111) 到具有足够纠错信息的二进制块,以恢复多达 10 个乱码位中的 1 个,然后解释结果并能够确定哪些位是错误的?我可以理解两行代码或数学,所以欢迎任何帮助。谢谢!

4

1 回答 1

1

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

如果在生成多项式 (a^1, a^2, ...) 的根处计算原始编码消息多项式,则结果是一组零。如果在生成多项式的根处评估接收到的带有错误的编码消息,则原始项会丢失,结果是一组“综合症”,它们是错误位置和错误值的函数。然后,wiki 文章解释了错误定位器多项式 (lambda) 和“综合征”之间的关键方程。

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

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

wiki 文章包含指向此 NASA 教程的链接:

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

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

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

在我的教程中有一些你不需要的东西,比如求解二次或三次方程(遗留的东西我没有删除),它缺少一些东西,比如扩展的 Euclid 或 Berlekamp Massey 解码,但这足以得到开始了。

于 2017-02-20T03:04:14.103 回答