Berlekamp-Massey- algoritmen er en algoritme til at finde det korteste skifteregister med lineær feedback for en binær sekvens givet som input. Algoritmen giver dig også mulighed for at finde minimumspolynomiet for den lineære tilbagevendende inputsekvens over et vilkårligt felt .
Algoritmen blev opdaget af Alvin Berlekamp i 1968 [1] . En anvendelse af algoritmen til lineære koder blev fundet af James Massey året efter [2] . Dette blev nøglen til den praktiske anvendelse af Reed-Solomon-koder .
Algoritme B.M. er en alternativ metode til at løse SLAE, som kan beskrives som følger:
I kodeeksemplerne nedenfor repræsenterer C(x) Λ(x). Fejlfinderen C(x) for L -fejl er defineret som:
eller bagfra:
Formålet med algoritmen er at bestemme minimum L og den tilsvarende C(x), som giver fejl i hele syndromet
resulterer i nul:
Algoritme: C(x) initialiseres til 1, L angiver det aktuelle antal fejl fundet indtil nu, og initialiseres til nul. N er det samlede antal fejlsyndromelementer. n er hovedtælleren, det er også indekset for syndromelementerne fra 0 til ( N -1). B(x) er en kopi af den sidste C(x) på tidspunktet for opdatering af L og initialiseres til 1. b er en kopi af den sidste uoverensstemmelse d (se nedenfor), igen, på tidspunktet for opdatering af L og initialiseres til 1. m er antallet af iterationer, der er gået siden opdateringen L , B(x) og b og også initialiseret til én.
Ved hver iteration beregnes uoverensstemmelsen d . Ved den kth iteration vil det være:
Hvis d er nul, betyder det, at C(x) og L er korrekte for nu, det er nok at øge m og fortsætte iterationen.
Hvis d ikke er nul, korrigerer algoritmen C(x) for at sætte d til nul :
Multiplikation med x m er i det væsentlige en forskydning af B(x)-koefficienterne med m, dvs. hver koefficient finder sted m højere for at matche syndromet for b . Hvis sidste gang L blev opdateret ved iteration j (og nu har vi den kth iteration), så er m = k - j , og den genberegnede uoverensstemmelse er:
Det vil sige, at erstatte, ser vi, at det forsvinder:
Værdien af L (antallet af fundne fejl) skal nogle gange også rettes. Hvis L er lig med det faktiske antal fejlagtige symboler, så vil uoverensstemmelserne i løbet af iterationer blive nulstillet, før n bliver større end eller lig med (2 L ). Ellers opdateres L, og algoritmen opdaterer B(x), b, L selv (inkrementer), og m nulstilles til 1. Udtrykket L = (n + 1 - L) begrænser L til antallet af tilgængelige syndromelementer, der anvendes at beregne uoverensstemmelserne, og løser samtidig problemet med at øge L med mere end én.
Algoritme fra Massey (1969 , s. 124):
polynomium ( felt K ) s ( x ) = ... /* koefficienter er s_j; outputsekvens som N-1 grads polynomium) */ /* forbindelsespolynomium */ polynomium ( felt K ) C ( x ) = 1 ; /* koeffs er c_j */ polynomium ( felt K ) B ( x ) = 1 ; int L = 0 ; int m = 1 ; felt Kb = 1 ; _ int n ; /* trin 2. og 6. */ for ( n = 0 ; n < N ; n ++ ) { /* trin 2. beregn uoverensstemmelse */ felt Kd = s_n + \ Sigma_ { i = 1 } ^ L c_i * s_ { n - i } ; hvis ( d == 0 ) { /* trin 3. uoverensstemmelsen er nul; udslettelse fortsætter */ m = m + 1 _ } andet hvis ( 2 * L <= n ) { /* trin 5. */ /* midlertidig kopi af C(x) */ polynomium ( felt K ) T ( x ) = C ( x ); C ( x ) = C ( x ) -db ^ { - 1 } x ^ mB ( x ) ; _ L = n + 1 - L ; B ( x ) = T ( x ); b = d ; m = 1 ; } andet { /* trin 4. */ C ( x ) = C ( x ) -db ^ { - 1 } x ^ mB ( x ) ; _ m = m + 1 _ } } retur L ;