Reed-Solomon 算法正在向输入中添加额外的数据,因此可以将此类损坏输入上的潜在错误(特定大小/数量)纠正回原始状态。正确的?这个算法是否也保护了这些不是输入的一部分但被算法使用的附加数据?如果不是,如果错误发生在这样的非输入数据部分会发生什么?
2 回答
一个重要的方面是 Reed-Solomon (RS) 码是循环的:码字集通过循环移位是稳定的。
结果是代码字的任何特定部分都没有受到更多保护或更少保护。
RS 码具有等于t = (nk)/2的纠错能力,其中n是码长(通常以字节表示),k是信息部分长度。
如果错误总数(在两个部分中)小于t,则 RS 解码器将能够纠正错误(更准确地说,一般情况下的错误字节)。如果它更高,则无法纠正错误(但可以检测到,另一个故事)。
错误的位置,无论是在信息部分还是添加部分,对纠错能力没有影响。
编辑:我提到的规则t = (nk)/2对 Reed-Solomon 码有效。此规则通常不适用于 BCH 代码:t <= (nk)/2。但是,关于您的问题,这不会改变答案:这些代码系列具有给定的容量校正,对应于码字之间的最小距离,然后解码器可以纠正t个错误,无论码字中错误的位置如何
只要添加的数据中只有一半或更少的错误,则可以纠正仅存在于添加数据中的错误。
使用附加数据,数据+附加数据形成所谓的码字,符合码字规则的码字。请注意,Reed Solomon 代码有两种基本类型,“原始视图”和“BCH 视图”。构成有效代码字的内容取决于所使用的 Reed Solomon 代码类型。链接到解释这一点的 Wiki 文章:
https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
对于只擦除代码,所有错误的位置由其他方式确定,在这种情况下,即使已知所有附加数据都是错误的,也可以纠正(或重新生成)。