我一直在阅读和研究二进制数据中的错误纠正,但我似乎无法掌握所使用的步骤。我已阅读https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction及其相关文章,我对所涉及的数学有所了解,但我想彻底了解整个过程。
任何人都可以向我解释或链接到一个解释,它会一步一步地告诉我,我是如何从二进制表示法,比如字符串“你好,你好吗?” (01001000011001010110110001101100011011110010110000100000011010000110111101110111001000000110000101110010011001010010000001111001011011110111010100111111
)到一个二进制blob,有足够的纠错信息,以恢复多达十分之一的乱码位,然后解释结果,并能够确定哪些位错了?我可以理解代码或数学两行,所以欢迎任何帮助。谢谢!
答案 0 :(得分:1)
从维基文章中,系统编码过程将消息视为具有有限域系数的多项式,附加所需数量的零(乘以x ^ t),除以生成多项式,然后从附加的那些中减去余数归零字节。这意味着编码消息多项式是生成多项式的精确倍数。
如果在生成多项式的根(a ^ 1,a ^ 2,...)处评估原始编码消息多项式,则结果是一组零。如果在生成多项式的根处评估接收到的带有错误的编码消息,则原始术语将丢失,结果是一组“校正子”,它们是错误位置和错误值的函数。维基文章然后解释了错误定位多项式(lambda)和“syndromes”之间的关键等式。
wiki文章随后解释了4种可用于将校正子转换为错误位置和错误值的方法,但Berlekamp-Massey和Euclid是使用的两种主要方法。
如wiki文章中所述,每个错误都需要两个奇偶校验项来纠正错误(因为每个错误有两个未知数,错误的位置和错误的值)。对于10%的错误处理,那么20%的消息必须是奇偶校验。如果消息有30个字节,则添加20个字节的奇偶校验以产生50字节的编码消息,其中可以纠正多达10个字节的错误。
维基文章包含此NASA教程的链接:
http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19900019023_1990019023.pdf
你可能会发现这个更简短的教程,我写的更容易理解。
http://rcgldr.net/misc/ecc.pdf
在我的教程中有一些你不需要的东西,比如求解二次或三次方程式(遗留下来的东西,我没有删除),而且它缺少像扩展Euclid或Berlekamp Massey解码这样的东西,但它是足以开始。