我知道使用循环冗余校验的主要目的是进行错误检测,但我听说有人声称它除了错误检测还可用于基本纠错。我很好奇这是否属实,如果属实,那么它的强大程度如何? 我的意思是,我们通常认为CRC能够执行x位检测,但我想知道它是否能够执行x位纠正。如果可以,那么如何实现? 谢谢。
我知道使用循环冗余校验的主要目的是进行错误检测,但我听说有人声称它除了错误检测还可用于基本纠错。我很好奇这是否属实,如果属实,那么它的强大程度如何? 我的意思是,我们通常认为CRC能够执行x位检测,但我想知道它是否能够执行x位纠正。如果可以,那么如何实现? 谢谢。
如果找不到匹配错误CRC的1位,请查看所有2位、3位直至汉明距离-1的位。请注意,这会很快变慢,对于2位来说,消息长度的平方,对于3位来说,消息长度的立方,对于五位来说,是第五次幂。
0x1f1922815 (= 0x787 * 0x557 * 0x465 * 0x3 * 0x3)
然后对表进行排序,当检查CRC时,如果它是错误的,则可以通过对表进行二进制搜索(最多28次循环)确定它是1、2还是3位错误情况,并使用存储在表中的索引进行更正。
但是,存在5个或更多比特错误的误纠正可能性。如果某些5个错误比特模式产生与3个错误比特模式相同的CRC,则将更改错误的3个比特,导致出现具有有效CRC的8个比特错误。
示例代码链接: