2017-02-17 94 views
1

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

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

回答

1

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

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

这篇wiki文章解释了4种可用于将综合征转换为错误位置和错误值的方法,但Berlekamp-Massey和Euclid是两种主要使用的方法。如维基文章中所述,每个错误需要两个奇偶项来纠正错误(因为每个错误有两个未知数,错误的位置和错误值)。对于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

有一个在我的教程一些东西,你不需要,像解决二次或三次方程(遗留下来的传统的东西,我没有删除),并且它缺少的东西一样扩展欧几里德或Berlekamp梅西解码,但它足以开始。

+0

哇,这看起来非常有用!让我们来看看... –

+0

@BenjaminBarney - 我更新了我的答案,包括一个链接,我写了几年前的简短教程。应该更简单一些。如果有兴趣,我还有一些示例程序可以与NASA教程一起使用。 – rcgldr

+0

这是很棒的信息!感谢您的回答,它既迷人又复杂,足以让我有足够的时间学习和思考! –

相关问题