Reed solomon 纠错和误报

Reed solomon error correction and false positives

我有一个 Reed-Solomon encoder/decoder。在操作数据和评估结果后,我经历了以下3种情况:

  1. 解码器正确解码消息,没有抛出错误
  2. 解码器将消息解码为错误的结果,没有抱怨 - 有效地产生误报。机会应该很低,但可能会发生,即使被操纵的数据数量远低于纠错能力(即使改变了一位......)
  3. 如果处理的数据超过其纠错能力所允许的数量,解码器将失败(抛出错误)。

所有 3 种情况都适用于适当的 Reed-Solomon 解码器吗?我特别不确定情况 2,解码器会产生错误的结果(不抛出错误),即使错误比其校正能力所允许的要少得多...?

  1. mis-correction below error correction ability

这表示代码中存在错误。如果错误少于 ⌊(n-k)/2⌋,RS 解码器就永远不会失败。

  1. correction detects when there more errors then error correction ability

即使错误超过 ⌊(n-k)/2⌋,RS 解码器仍很有可能检测到无法纠正的错误,因为大多数错误模式不会导致接收到的码字在有效码字的 ⌊(n-k)/2⌋ 或更少的错误符号,因为工作 RS 解码器应该只产生有效码字或指示不可纠正的错误。超过 ⌊(n-k)/2⌋ 错误的错误纠正涉及解码器创建额外的 ⌊(n-k)/2⌋ 或更少的错误符号,从而产生有效的代码字,但与原始代码字有 n-k+1 或更多符号。

可以通过为已纠正的码字重新生成校正子来检测不可纠正的错误,但在求解错误定位器多项式(通常通过遍历所有可能的定位器值来完成)时,当它产生的定位器少于它时,通常会更快地发现错误应该是由于重复或缺少根。

我用 C 编写了一些交互式 RS 演示程序,用于 4 位和 8 位字段,其中包括 3 种最常见的解码器(PGZ(矩阵)、BM(差异)、SY(扩展欧几里得))。请注意,我的示例中的 SY - 扩展 Euclid 解码器模拟了面向硬件寄存器的解决方案,两个寄存器,始终左移,每个寄存器包含两个多项式,其中拆分与寄存器一起左移。每个寄存器的右半部分被反转(最低有效系数在前)。维基文章示例可能更容易理解。

http://rcgldr.net/misc/eccdemo4.zip

http://rcgldr.net/misc/eccdemo8.zip