maple implementation of Berlekamp-Massey algorithm
\PMlinkescapetext{
>
# Maple code for the Berlekamp-Massey algorithm
# Adapted from www.cs.wisc.edu/~cs435-1/bermas.m
# Transliteration of
# Massey, "Shift-Register Synthesis and BCH Decoding,"
# IEEE Trans. Inform. Theory, 15(1):122-127, 1969.
# Input: P, either 0 or a prime
# If P>0 then we work over the field K = Z/Z[P] (mod P)
# else we work over the field K = Q (rationals)
# N, a positive integer
# s, a list of >= 2*N terms in K
# x, a formal variable
# Returns: Unique monic annihilator of minimum degree, over K[x].
BM := proc(s, N, P, x)
local C,B,T,L,k,i,n,d,b,safemod;
ASSERT(nops(s) = 2*N);
safemod := (exp, P) -> `if`(P=0, exp, exp mod P);
B := 1;
C := 1;
L := 0;
k := 1;
b := 1;
for n from 0 to 2*N-1 do
d := s[n+1];
for i from 1 to L do
d := safemod(d + coeff(C,x^i)*s[n-i+1], P);
od;
if d=0 then k := k+1 fi;
if (d <> 0 and 2*L > n) then
C := safemod(expand(C - d*x^k*B/b), P);
k := k+1;
fi;
if (d <> 0 and 2*L <= n) then
T := C;
C := safemod(expand(C - d*x^k*B/b), P);
B := T;
L := n+1-L;
k := 1;
b := d;
fi;
od;
return C;
end:
}
The following test demonstrates usage and verifies that this works:
\PMlinkescapetext{
> P := 103:
d := 4:
num := 21+83*x+90*x^2+4*x^3: # degree < d
den := 1+11*x+23*x^2+58*x^3+69*x^4: # monic, degree <= d
f := series(num/den, x=0, 2*d) mod P:
s := [seq(coeff(f, x, i), i=0..2*d-1)]:
BM(s, d, P, x);}
The annihilator is the same as denominator, as we expect.
| Title | maple implementation of Berlekamp-Massey algorithm |
|---|---|
| Canonical name | MapleImplementationOfBerlekampMasseyAlgorithm |
| Date of creation | 2013-03-22 15:35:27 |
| Last modified on | 2013-03-22 15:35:27 |
| Owner | daveagp (6096) |
| Last modified by | daveagp (6096) |
| Numerical id | 6 |
| Author | daveagp (6096) |
| Entry type | Algorithm |
| Classification | msc 11B37 |
| Classification | msc 15A03 |
| Related topic | BerlekampMasseyAlgorithm |