error-correction - 里德所罗门纠错和误报
问题描述
我有一个 Reed-Solomon 编码器/解码器。在操作数据和评估结果后,我经历了以下3个案例:
- 解码器正确解码消息并且不抛出错误
- 解码器将消息解码为错误的结果,而不会抱怨 - 有效地产生误报。机会应该非常低,但可能会发生,即使操作数据的数量远低于纠错能力(即使在更改单个位之后......)
- 如果操作的数据多于其纠错能力所允许的数据,则解码器会失败(抛出错误)。
所有 3 种情况都对适当的 Reed-Solomon 解码器有效吗?我特别不确定情况 2,其中解码器会产生错误的结果(不会引发错误),即使错误比其纠正能力所允许的要少得多......?
解决方案
- 错误纠正能力低于纠错能力
这将表明代码中存在错误。如果错误少于 ⌊(nk)/2⌋,则 RS 解码器永远不会失败。
- 校正检测何时有更多错误然后纠错能力
即使有超过 ⌊(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 文章示例可能更容易理解。
推荐阅读
- swift4 - 在 iCloud 上创建相册并使用 cloudKit Swift 4 在每个相册中存储不同的照片
- firebase - 如何在 javascript 中使用 Firebase 函数插入现有的 Firebase DB 数组
- laravel - 有很多:显示具有 1 个或多个元素的区域
- ios - 在 swift 中使用正则表达式阿拉伯文和英文字符进行密码验证
- javascript - Bootstrap 4 JavaScript 不工作 Symfony4
- r - R / dyplr:将两行转换为两列
- python - 在 Dataframe 中为分类数据添加标签
- ios - iOS 应用测试本地化翻译是否具有相同的键
- python - 如何在 python 中抓取完整的 Instagram 页面?
- python - 如何让 python 信任我服务器的 TLS 自签名证书:ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败