首页 > 解决方案 > 里德所罗门纠错和误报

问题描述

我有一个 Reed-Solomon 编码器/解码器。在操作数据和评估结果后,我经历了以下3个案例:

  1. 解码器正确解码消息并且不抛出错误
  2. 解码器将消息解码为错误的结果,而不会抱怨 - 有效地产生误报。机会应该非常低,但可能会发生,即使操作数据的数量远低于纠错能力(即使在更改单个位之后......)
  3. 如果操作的数据多于其纠错能力所允许的数据,则解码器会失败(抛出错误)。

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

标签: error-correctionreed-solomonforwarderrorcorrection

解决方案


  1. 错误纠正能力低于纠错能力

这将表明代码中存在错误。如果错误少于 ⌊(nk)/2⌋,则 RS 解码器永远不会失败。

  1. 校正检测何时有更多错误然后纠错能力

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

可以通过为已纠正的码字重新生成伴随式来检测不可纠正的错误,但在求解错误定位多项式时(通常通过遍历所有可能的定位值来完成)通常会更快地被捕获,因为它产生的定位符比它应该由于重复或缺根。

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

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

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


推荐阅读