为什么我的方程式计算不正确?
Why isnt my equation evalutaing correctly?
所以我正在为 Python 中的一个 uni 项目制作一个 BCH 解码器。它采用有错或无错的 10 位代码字,并且应该检测并纠正它发现的任何错误。对于双重纠错,有一个数学公式可以检测这些错误的位置和大小:
formula for error pos and mag
i = (-Q + ((Q^2-4*P*R)^(1/2))/2*P)<br/>
j = (-Q - ((Q^2-4*P*R)^(1/2))/2*P)
b = (i*s1-s2)/(i-j)<br/>
a = s1-b
我已经正确计算出QPR和s1,s2
因此,我正在使用此示例 (2 error BCH example) 进行调试。它的编号 8888880747
被传输到 8899880747
,因此位置 3 和 4 中存在 2
错误,幅度均为 1。到目前为止,我的程序生成了正确的 syndromes(s1 to s4 - 2,7,3,3)
和正确的 PQR 值 (10,7,10)
但是在计算 i 和 j 时,我得到的值与示例不同 - 10.7
和 10.6
而不是 3
和 4
.
这是我的 i 和 j 代码:
#work out error positions i and j
sqrt = ((Q**2 - 4*P*R) % 11)**(1/2)
i = (((-Q+sqrt)/(2*P))%11)
j = (((-Q-sqrt)/(2*P))%11)
谁能看出我做错了什么?谢谢。
运算是要在GF(11)
中进行的,也就是说要进行mod11,平方根和除法mod11跟他们不一样都是实数。
有高级算法可以计算平方根和 mod 平方根,但对于小至 11 的数字,您可以使用蛮力或预先计算 table。在这里遵循第一原则。对于 sqrt(x),请尝试 [0,1,2,...10] 并查看平方等于 x 时哪个。那就是平方根。对于除法(逆),1/x,尝试 [0,1,2,...10] 并查看乘以 x 时哪个等于 1 mod 11。现在我们插入这些值以获得 i = 3, j = 4.
所以,通过计算 mod 11,我们有:
P, Q, R = (10,7,10)
(Q**2 - 4*P*R) = -351, -351 % 11 = 1
这很方便,因为 1 的平方根就是 1 mod 11。
查看接下来的两个方程式,我们将需要计算 1/(2*P) mod 11,换句话说,我们需要找到 2*P mod 11 的倒数,即(2P)-1mod11.
2*P % 11 = 20 % 11 = 9。通过尝试所有的可能性,我们发现 9-1 mod 11 是 5.
所以我正在为 Python 中的一个 uni 项目制作一个 BCH 解码器。它采用有错或无错的 10 位代码字,并且应该检测并纠正它发现的任何错误。对于双重纠错,有一个数学公式可以检测这些错误的位置和大小:
formula for error pos and mag
i = (-Q + ((Q^2-4*P*R)^(1/2))/2*P)<br/>
j = (-Q - ((Q^2-4*P*R)^(1/2))/2*P)
b = (i*s1-s2)/(i-j)<br/>
a = s1-b
我已经正确计算出QPR和s1,s2
因此,我正在使用此示例 (2 error BCH example) 进行调试。它的编号 8888880747
被传输到 8899880747
,因此位置 3 和 4 中存在 2
错误,幅度均为 1。到目前为止,我的程序生成了正确的 syndromes(s1 to s4 - 2,7,3,3)
和正确的 PQR 值 (10,7,10)
但是在计算 i 和 j 时,我得到的值与示例不同 - 10.7
和 10.6
而不是 3
和 4
.
这是我的 i 和 j 代码:
#work out error positions i and j
sqrt = ((Q**2 - 4*P*R) % 11)**(1/2)
i = (((-Q+sqrt)/(2*P))%11)
j = (((-Q-sqrt)/(2*P))%11)
谁能看出我做错了什么?谢谢。
运算是要在GF(11)
中进行的,也就是说要进行mod11,平方根和除法mod11跟他们不一样都是实数。
有高级算法可以计算平方根和 mod 平方根,但对于小至 11 的数字,您可以使用蛮力或预先计算 table。在这里遵循第一原则。对于 sqrt(x),请尝试 [0,1,2,...10] 并查看平方等于 x 时哪个。那就是平方根。对于除法(逆),1/x,尝试 [0,1,2,...10] 并查看乘以 x 时哪个等于 1 mod 11。现在我们插入这些值以获得 i = 3, j = 4.
所以,通过计算 mod 11,我们有:
P, Q, R = (10,7,10) (Q**2 - 4*P*R) = -351, -351 % 11 = 1 这很方便,因为 1 的平方根就是 1 mod 11。 查看接下来的两个方程式,我们将需要计算 1/(2*P) mod 11,换句话说,我们需要找到 2*P mod 11 的倒数,即(2P)-1mod11. 2*P % 11 = 20 % 11 = 9。通过尝试所有的可能性,我们发现 9-1 mod 11 是 5.