您如何确定Welch-Berlekamp算法中的错误数量?


9

在用于解码Reed-Solomon码的Welch-Berlekamp算法中,给出了一个点列表,该点(ai,bi)表示未知位置b i上有e错误的消息(并且将e赋给该算法)。输出是通过所有给定点(发生错误的点除外)的多项式。bie

该方法涉及求解形式为的线性方程组

biE(ai)=Q(ai)

所有i这里E有度eQ具有至多度e+k。变量是E的系数Q

为了确保E具有度e通常会在上述线性系统中加上的系数xe为1 的约束。但是,实际上并不一定知道e。一个低效的(但仍多项式时间)的方式来解决这个问题是尝试e所有值开始ñ+ķ-1个/2-1个,直到找到一个解下去。

我的问题是:确定方法是否更有效Ë或者,是否对线性系统进行了修改,以允许使用的上限Ë而不是精确值?

特别是我想将此特定的解码器用于Reed-Solomon码,而不是基于其他技术的完全不同的算法。


为了回应DW的回答,这是我的工作示例。一切都以7为模。

plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]

因此,错误在于第三点。

Ë=2的多项式方程为

b一世Ë0+Ë1个X+Ë2X2-q0-q1个X-q2X2-q3X3-q4X4=0

和堵塞在给出了在矩阵形式的系统:X=01个234

[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]

最后一行是的约束。应用高斯消去,我们得到Ë2=1个

[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]

并为两个自由变量选择1,我们得到一个解向量

[2, 2, 1, 4, 1, 0, 1, 1]

转化为

E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4

不分Q。注意Q因子为ËŤ+6Ť3+2Ť2+2Ť+37

对于我得到了一个很好的解决方案:Ë=1个

system is:    
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0] 
[0, 1, 0, 0, 0, 0, 1]

reduced system is:

[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]

solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0

请注意,虽然上面的反例是由我从头开始编写的代码生成的(基本上是我尝试的第一件事),但可以手动检查解决方案是否有效,因此即使我的代码有错误,它仍然是声明的有效反例。使用可行的。Ë=2


@DW解决方案向量有效。它实际上是1 * 2 + 1 * 1 + 4 * 1(由于矩阵的最后一列被省略,所以解矢量的维数是一维的)。我了是这里写的错字,但是在我的实现中是正确的。例如,您可以在使用点[1,0]的系统的第二行中看到它的效果,并且前三个整数都为零,因为它们被乘以0。如果我的示例不清楚,我可以发布我在github上的代码。我认为我的代码干净,但是由于它的通用性,它会变得更混乱。b一世
JeremyKun

Answers:


3

实际上,相同的过程可以纠正任何数量的错误,直到为止。Ë

a i eËX一个一世ËXË

因此,如果是错误数量的上限,则将存在一个具有所有所需属性的多项式(即,度数恰好为并且在出现错误的每个点均为零)。例如,如果错误少于,则存在一个多项式,在每个错误处为零,在更多点处为零,以使零的个数精确到。E x e e E x eËËXËËËXË

最后,正确性定理说,如果存在这样的多项式,那么Berlekamp-Welch算法将能够找到它。因此,即使错误少于 ,该过程仍然可以正确识别。一旦有了,您就可以确定没有错误的位置,然后可以以一种直接的方式进行解码。e E x E x n - eËXËËXËXñ-Ë


要记录有关问题中“ counterexample”的对话结果,请执行以下操作:

这实际上不是有效的反例。缺陷在于您希望Berlekamp-Welch能够纠正多少错误。该距离为,因此您应该期望它能够纠正多达错误(如Ran G.所指出的)。在您的反例中,和,所以,因此您应该只希望此过程能够纠正一个错误,即。因此,当您在具有的示例上运行该过程时,没有理由期望该过程可以正常工作。n k / 2 n = 5 k = 3 n k / 2 = 1 e = 1 e = 2ñ-ķ+1个ñ-ķ/2ñ=5ķ=3ñ-ķ/2=1个Ë=1个Ë=2

因此,反例实际上不是反例,并且与我上面的回答并不矛盾。


1
ñ-ķ+1个ñ-ķ/2

ËXËX

ñ=7Ë=2

好的,这适用于我正在尝试的示例。优秀的!
JeremyKun 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.