我一直在try 实现一个里德-所罗门编码器,以系统的形式生成码字,消息后面跟着校验符号.为了进行比较,我引用了这篇白皮书:http://www.bbc.co.uk/rd/pubs/whp/whp031.shtml,它对手工计算和LFSR描述非常有指导意义.

对于本白皮书中给出的示例,RS(15,11)码的原始多项式为X^4+X+1,消息为1,2,3,4,5,6,7,8,9,10,11,得到的判断符号为3,3,12,12.

我可以亲自核实.我还使用了Reed Solomon上维基百科文章引用的代码https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders来验证判断符号是否为3,3,12,12.

然而,当我使用Python galois包和这段代码时,我得到了不同的结果.判断符号为11,10,14,6.

import galois

rs = galois.ReedSolomon(15,11, primitive_poly = 19)
GF = rs.field;
## Encode the message
m = GF([1,2,3,4,5,6,7,8,9,10,11])
c = rs.encode(m)

这一结果与MATLAB相吻合.

在reed solomon中,是否有两种不同的算法来编码产生不同校验符号的系统码字?如果没有,哪种方法是正确的?

推荐答案

问题是生成器多项式不同.

使用生成器多项式(x-1)(x-2)(x-4)(x-8),编码器生成3,3,12,12.

使用生成器多项式(x-2)(x-4)(x-8)(x-3),编码生成11,10,14,6.

两个生成器多项式都是"正确的".以(x-2)开头的生成器被称为"狭义代码".

https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction#The_BCH_view:_The_codeword_as_a_sequence_of_coefficients

Python相关问答推荐

提高算法效率的策略?

pandas fill和bfill基于另一列中的条件

处理Gekko的非最优解

用两个字符串构建回文

从嵌套极轴列的列表中删除元素

504未连接IB API TWS错误—即使API连接显示已接受''

如何为需要初始化的具体类实现依赖反转和接口分离?

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)

Fake pathlib.使用pyfakefs的类变量中的路径'

PyTorch变压器编码器中的填充掩码问题

如何更改网络中某条边的位置(&Q;)?

我应该使用哪一个来判断python中枚举值的唯一性?

滑动子数组美容工作在IDE上,但不是在leetcode上

如何在上一次迭代中跳过某些内容(&q;)?

Df.Drop_Duplates(),以极点表示?

Django LoginView中的一个大问题

sklearn ridgeCV与ElasticNetCV

已超过url:/Forecast的最大重试次数.无法在Fastapi应用程序上建立新连接:[WinError 10061]

基于直方图箱的样本数据

棋类游戏的极大极小函数