Algoritmus Berlekamp-Massey je algoritmus pro nalezení nejkratšího posuvného registru s lineární zpětnou vazbou pro binární sekvenci zadanou jako vstup. Algoritmus také umožňuje najít minimální polynom vstupní lineární rekurentní sekvence v libovolném poli .
Algoritmus objevil Alvin Berlekamp v roce 1968 [1] . Aplikaci algoritmu na lineární kódy našel následující rok James Massey [2] . To se stalo klíčem k praktické aplikaci Reed-Solomonových kódů .
Algoritmus B.M. je alternativní metoda pro řešení SLAE, kterou lze popsat následovně:
V níže uvedených příkladech kódu C(x) představuje Λ(x). Lokátor chyb C(x) pro chyby L je definován jako:
nebo zezadu dopředu:
Účelem algoritmu je určit minimum L a odpovídající C(x), což dává chyby v celém syndromu
nula na konci:
Algoritmus: C(x) je inicializováno na 1, L označuje aktuální počet dosud nalezených chyb a inicializováno na nulu. N je celkový počet prvků chybového syndromu. n je hlavní čítač, je to také index prvků syndromu od 0 do ( N -1). B(x) je kopie posledního C(x) v době aktualizace L a je inicializována na 1. b je kopie poslední nesrovnalosti d (viz níže), opět v době aktualizace L a je inicializováno na 1. m je počet iterací, které prošly od aktualizace L , B(x) a b a také inicializovány na jednu.
Při každé iteraci se vypočítá diskrepance d . V k-té iteraci to bude:
Pokud je d nula, znamená to, že C(x) a L jsou prozatím správné, stačí ma inkrementovat a pokračovat v iteraci.
Pokud je d nenulové, algoritmus opraví C(x) tak, aby d bylo nastaveno na nulu :
Násobení x m je v podstatě posunem B(x) koeficientů o m, tj. každý koeficient je o m vyšší, aby odpovídal syndromu pro b . Pokud byl L naposledy aktualizován v iteraci j (a nyní máme k -tou iteraci), pak m = k - j a přepočítaný nesoulad je:
To znamená, že nahrazením vidíme, že zmizí:
Také hodnotu L (počet nalezených chyb) je někdy potřeba opravit. Pokud se L rovná skutečnému počtu chybných symbolů, pak v průběhu iterací budou nesrovnalosti vynulovány, než bude n větší nebo rovno (2 L ). V opačném případě se L aktualizuje a algoritmus aktualizuje B(x), b, samotné L (přírůstky) a m je resetováno na 1. Výraz L = (n + 1 - L) omezuje L na počet použitých dostupných prvků syndromu. vypočítat nesrovnalosti a zároveň řeší problém zvýšení L o více než jednu.
Algorithm from Massey (1969 , str. 124):
polynom ( pole K ) s ( x ) = ... /* koeficienty jsou s_j; výstupní sekvence jako polynom N-1 stupně) */ /* spojovací polynom */ polynom ( pole K ) C ( x ) = 1 ; /* koeficienty jsou c_j */ polynom ( pole K ) B ( x ) = 1 ; int L = 0 ; int m = 1 ; pole Kb = 1 ; _ int n ; /* kroky 2. a 6. */ pro ( n = 0 ; n < N ; n ++ ) { /* krok 2. výpočet nesrovnalosti */ pole K d = s_n + \ Sigma_ { i = 1 } ^ L c_i * s_ { n - i }; if ( d == 0 ) { /* krok 3. nesoulad je nula; ničení pokračuje */ m = m + 1 _ } jinak if ( 2 * L <= n ) { /* krok 5. */ /* dočasná kopie C(x) */ polynom ( pole 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 ; } jiný { /* krok 4. */ C ( x ) = C ( x ) -db ^ { - 1 } x ^ mB ( x ) ; _ m = m + 1 _ } } návrat L ;