我正在尝试在上图中实现此算法。 Berlekamp-Massey算法解决了RS(n,k)
系统中的以下问题:给定校验子多项式
S(z)= {S(n-k-1),........ S(2),S(1),S(0)}
,找到最小度误差多项式。该算法适用于所有综合症,但当S(0)变为0时,错误多项式不正确。提到的算法有什么遗漏吗?
答案 0 :(得分:1)
什么时候失败?是不是无法生成错误定位器多项式,还是创建了没有正确根的多项式,还是后来失败了,例如Forney算法?
我不确定您在问题中是否真正表示S(0)。大多数文章将S(j)定义为元素之和乘以(alpha ^ j)的连续幂(位置)。如果首个连续根= FCR = alpha ^ 0 = 1(g(x)=(x-1)(x-alpha)(x),则解码器使用的校正子必须基于生成多项式的根,这一点很重要-alpha ^ 2)...),使用S(0)至S(nk-1),或者FCR = alpha(g(x)=(x-alpha)(x-alpha ^ 2)...) ,请使用S(1)至S(nk)。
尽管校正子为零,但只要校正子不太多(这表示不可纠正的错误),任何RS解码器都可以工作。
Wiki文章使用示例代码对算法进行了更简单的描述。请注意,它使用lambda(Λ)代替sigma(σ)来表示错误定位器多项式。该描述是针对示例代码的,在这种情况下,取决于FCR(未提及),S [0]可能表示S(0)或S(1)。
https://en.wikipedia.org/wiki/Berlekamp%E2%80%93Massey_algorithm
我还编写了针对4位和8位字段的交互式RS程序,其中包括Berlekamp Massey作为程序中实现的三个解码器之一。这些程序允许用户将FCR指定为1或2,除非选择了自反多项式(用于简化硬件编码器的非常用选项)。在这些示例程序中,多项式通常首先存储最高有效项(遗留问题),因此代码将数组移位以对其进行处理。
http://rcgldr.net/misc/eccdemo4.zip
http://rcgldr.net/misc/eccdemo8.zip
我修改了我的一个ecc演示程序之一,以便与GF(2 ^ 10)一起使用。我运行了您的测试用例:
S[...] = {0000 0596 0302 0897} (S[0] = 0)
这些是我为BM解码器获得的迭代和多项式:
k d σ
0 0000 0001
1 0596 0596 x^2 + 0000 x + 0001
2 0302 0596 x^2 + 1006 x + 0001
3 0147 0585 x^2 + 1006 x + 0001
根是:
383 = 1/(2^526) and 699 = 1/(2^527)
琐事,通过反转系数,可以得到定位符而不是其反函数:
0001 x^2 + 1006 x + 0585 : roots are 346 = 2^256 and 692 = 2^257
请注意,如果使用Forney来计算误差值,则Forney需要不可逆的多项式。