BCH kód

V teorii kódování tvoří BCH kódy skupinu cyklických samoopravných kódů, které jsou konstruovány pomocí konečných těles. BCH kódy byly vynalezeny v roce 1959 Hocquenghemem, a nezávisle v roce 1960 Bosem a Ray-Chaudhurim.[1] Zkratka BCH je tvořena počátečními jmény těchto objevitelů.

Klíčovou vlastností BCH kódů je možnost v průběhu návrhu kódu přesně kontrolovat počet opravitelných chyb ve výsledném kódu. Další výhodou BCH kódů je jednoduchost jejich dekódování pomocí algebraických metod známých jako syndrome decoding. To zjednodušuje návrh dekodérů s použitím malého výkonnostně slabého hardwaru.

BCH kódy jsou používány například v satelitní komunikaci,[2] CD a DVD přehrávačích, pevných discích, flash discích[3] a QR kódech.

Konstrukce

Nechť A je GF(qa). BCH kód kóduje slova pevné délky k nad vstupní abecedou A tak, že kódové slovo předem dané délky n vznikne doplněním vstupního slova dalšími znaky nad abecedou A. Konstrukce kódu je založena na nadtělese B GF(qb) tělesa A v němž existuje prvek α jehož řád je alespoň délka n kódových slov, tedy a|b a ord(α)≥n. Nechť c a d jsou celá čísla. Kódová slova jsou taková slova v1v2vn, kde polynom v1xn-1+v2xn-2+…+vn-1x1+vn má kořeny αc, αc+1, …, αc+d-2.

Při konstrukci je nalezen polynom g(x) nejmenšího stupně, který má uvedené kořeny. Tomuto polynomu říkáme generující polynom. Je-li m jeho stupeň, pak je takto možno kódovat slova délky k=n-m. Kódové slovo vznikne tak, že zjistíme zbytek R(x) při dělení polynomu V(x)=v1xn-1+v2xn-2+…+vkxm polynomem P(x).

Kódové slovo vznikne z polynomu V(x)-R(x), tak že vi bude tvořeno koeficientem u xn-i.

Konstrukce garantuje Hammingovu vzdálenost kódových slov alespoň d. Užitečnou vlastností BCH kódů je, že zpráva je pouze doplněna zabezpečovacím podslovem, ale začátek zprávy je nezměněn.

Speciální případy BCH kódů

  • BCH kód s c=1 je nazýván doslovný kód.
  • BCH kód s n=qb/a−1 je nazýván primitivní kód.
  • BCH kód s n<qb/a−1 je nazýván zkrácený kód.
  • BCH kód s A=Zq je nazýván základní BCH kód.
  • BCH kód s A=Z2 je nazýván binární BCH kód.
  • BCH kód s A=B je nazýván Reed Solomonův kód.[4]

Běžně jsou používány primitivní doslovné základní BCH kódy.

Může se stát, že pro vhodnou volbu c dostaneme řád generujícího polynomu menší než při volbě c=1. Taková volba pak přináší více prostoru pro data (a kód přestává být doslovný).

Pro Reedovy–Solomonovy kódy jsou všechny volby c stejně dobré, protože minimální polynom pro každé αi je prvního řádu. Používány jsou především Reed Solomonovy kódy s c=0.

Kódy s b>a>1 nejsou pravděpodobně používány.

Příklad základních primitivních doslovných BCH kódů

Nechť q = 2 {\displaystyle q=2} a b = 4 {\displaystyle b=4} (tedy n = 15 {\displaystyle n=15} ). Uvažujme různé hodnoty d . {\displaystyle d.}

Existuje primitivní prvek α G F ( 16 ) {\displaystyle \alpha \in GF(16)} splňující α 4 + α + 1 = 0 ( ) , {\displaystyle \alpha ^{4}+\alpha +1=0(*),} jeho minimální polynom nad Z 2 {\displaystyle Z_{2}} je

m 1 ( x ) = x 4 + x + 1. {\displaystyle m_{1}(x)=x^{4}+x+1.}

Poznamenejme, že v G F ( 2 4 ) , {\displaystyle GF(2^{4}),} platí ( a + b ) 2 = a 2 + a b + a b + b 2 = a 2 + b 2 , {\displaystyle (a+b)^{2}=a^{2}+ab+ab+b^{2}=a^{2}+b^{2},} proto m 1 ( α 2 ) = m 1 ( α ) 2 = 0. {\displaystyle m_{1}(\alpha ^{2})=m_{1}(\alpha )^{2}=0.}

Tudíž α 2 {\displaystyle \alpha ^{2}} je kořen polynomu m 1 ( x ) , {\displaystyle m_{1}(x),} a

m 2 ( x ) = m 1 ( x ) = x 4 + x + 1. {\displaystyle m_{2}(x)=m_{1}(x)=x^{4}+x+1.}

Abychom spočítali m 3 ( x ) , {\displaystyle m_{3}(x),} poznamenejme, že opakovanou aplikací (*), dostáváme následující rovnice:

  • 1 = 0 α 3 + 0 α 2 + 0 α + 1 {\displaystyle 1=0\alpha ^{3}+0\alpha ^{2}+0\alpha +1}
  • α 3 = 1 α 3 + 0 α 2 + 0 α + 0 {\displaystyle \alpha ^{3}=1\alpha ^{3}+0\alpha ^{2}+0\alpha +0}
  • α 6 = 1 α 3 + 1 α 2 + 0 α + 0 {\displaystyle \alpha ^{6}=1\alpha ^{3}+1\alpha ^{2}+0\alpha +0}
  • α 9 = 1 α 3 + 0 α 2 + 1 α + 0 {\displaystyle \alpha ^{9}=1\alpha ^{3}+0\alpha ^{2}+1\alpha +0}
  • α 12 = 1 α 3 + 1 α 2 + 1 α + 1 {\displaystyle \alpha ^{12}=1\alpha ^{3}+1\alpha ^{2}+1\alpha +1}

Pět pravých stran délky čtyři musí být lineárně závislých a tak najdeme lineární závislost α 12 + α 9 + α 6 + α 3 + 1 = 0. {\displaystyle \alpha ^{12}+\alpha ^{9}+\alpha ^{6}+\alpha ^{3}+1=0.}

Protože neexistuje závislost nižšího řádu, je minimálním polynomem pro α 3 {\displaystyle \alpha ^{3}} polynom

m 3 ( x ) = x 4 + x 3 + x 2 + x + 1. {\displaystyle m_{3}(x)=x^{4}+x^{3}+x^{2}+x+1.}

Budeme-li pokračovat obdobně, získáme

m 4 ( x ) = m 2 ( x ) = m 1 ( x ) = x 4 + x + 1 , {\displaystyle m_{4}(x)=m_{2}(x)=m_{1}(x)=x^{4}+x+1,\,}
m 5 ( x ) = x 2 + x + 1 , {\displaystyle m_{5}(x)=x^{2}+x+1,\,}
m 6 ( x ) = m 3 ( x ) = x 4 + x 3 + x 2 + x + 1 , {\displaystyle m_{6}(x)=m_{3}(x)=x^{4}+x^{3}+x^{2}+x+1,\,}
m 7 ( x ) = x 4 + x 3 + 1. {\displaystyle m_{7}(x)=x^{4}+x^{3}+1.\,}

BCH kódy s d = 1 , 2 , 3 {\displaystyle d=1,2,3} mají generující polynom

g ( x ) = m 1 ( x ) = x 4 + x + 1. {\displaystyle g(x)=m_{1}(x)=x^{4}+x+1.\,}

Kód má minimální Hammingovu vzdálenost alespoň 3 a opravuje nejvýš 1 chybu. Protože generující polynom je stupně 4, má tento kód 11 datových bitů a 4 zabezpečovací bity.

BCH kódy s d = 4 , 5 {\displaystyle d=4,5} mají generující polynom

g ( x ) = n s n ( m 1 ( x ) , m 3 ( x ) ) = ( x 4 + x + 1 ) ( x 4 + x 3 + x 2 + x + 1 ) = x 8 + x 7 + x 6 + x 4 + 1. {\displaystyle g(x)={\rm {nsn}}(m_{1}(x),m_{3}(x))=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)=x^{8}+x^{7}+x^{6}+x^{4}+1.\,}

Jeho minimální Hammingova vzdálenost je alespoň 5 a opravuje nejvýš 2 chyby. Protože generující polynom je stupně 8, má tento kód 7 datových bitů a 8 zabezpečovacích bitů.

BCH kódy s d = 6 , 7 {\displaystyle d=6,7} mají generující polynom

g ( x ) = n s n ( m 1 ( x ) , m 3 ( x ) , m 5 ( x ) ) = ( x 4 + x + 1 ) ( x 4 + x 3 + x 2 + x + 1 ) ( x 2 + x + 1 ) = x 10 + x 8 + x 5 + x 4 + x 2 + x + 1. {\displaystyle {\begin{aligned}g(x)&{}={\rm {nsn}}(m_{1}(x),m_{3}(x),m_{5}(x))\\&{}=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)(x^{2}+x+1)\\&{}=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1.\end{aligned}}}

Má minimální Hammingovu vzdálenost alespoň 7 a opravuje nejvýš 3 chyby. Tento kód má 5 datových bitů a 10 zabezpečovacích bitů.

BCH kód s d 8 {\displaystyle d\geq 8} má generující polynom

g ( x ) = n s n ( m 1 ( x ) , m 3 ( x ) , m 5 ( x ) , m 7 ( x ) ) = ( x 4 + x + 1 ) ( x 4 + x 3 + x 2 + x + 1 ) ( x 2 + x + 1 ) ( x 4 + x 3 + 1 ) = x 14 + x 13 + x 12 + + x 2 + x + 1. {\displaystyle {\begin{aligned}g(x)&{}={\rm {nsn}}(m_{1}(x),m_{3}(x),m_{5}(x),m_{7}(x))\\&{}=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)(x^{2}+x+1)(x^{4}+x^{3}+1)\\&{}=x^{14}+x^{13}+x^{12}+\cdots +x^{2}+x+1.\end{aligned}}}

Kód má minimální Hammingovu vzdálenost 15 a opravuje nejvýš 7 chyb. Má 1 datový bit a 14 zabezpečovacích bitů. Tento kód má tedy jen dvě kódová slova: 000000000000000 a 111111111111111.

Vlastnosti

1. Generující polynom BCH kódu má stupeň nejvýš ( d 1 ) ( b / a ) . {\displaystyle (d-1)(b/a).} Navíc, pokud A = Z 2 {\displaystyle A=Z_{2}} a c = 1 , {\displaystyle c=1,} pak generující polynom má stupeň nejvýš d b / 2 a . {\displaystyle db/2a.}

Důkaz: každý minimální polynom m i ( x ) {\displaystyle m_{i}(x)} má stupeň nejvýš b / a . {\displaystyle b/a.}

Proto minimální společný násobek d 1 {\displaystyle d-1} z nich má stupeň nejvýš ( d 1 ) ( b / a ) . {\displaystyle (d-1)(b/a).} Navíc, pokud A = Z 2 , {\displaystyle A=Z_{2},} pak m i ( x ) = m 2 i ( x ) {\displaystyle m_{i}(x)=m_{2i}(x)} pro každé i . {\displaystyle i.} Proto, g ( x ) {\displaystyle g(x)} je nejmenší společný násobek nejvýš d / 2 {\displaystyle d/2} minimálních polynomů m i ( x ) {\displaystyle m_{i}(x)} pro liché indexy i , {\displaystyle i,} každý z nich je stupně nejvýš b / a . {\displaystyle b/a.}

2. BCH kód má minimální Hammingovu vzdálenost alespoň d . {\displaystyle d.}

Důkaz: Předpokládejme, že p ( x ) {\displaystyle p(x)} je kód (jemu odpovídající polynom) s méně než d {\displaystyle d} nenulovými koeficienty. Potom nechť

p ( x ) = b 1 x k 1 + + b d 1 x k d 1 ,  kde  k 1 < k 2 < < k d 1 . {\displaystyle p(x)=b_{1}x^{k_{1}}+\cdots +b_{d-1}x^{k_{d-1}},{\text{ kde }}k_{1}<k_{2}<\cdots <k_{d-1}.}

Připomeňme, že α c , , α c + d 2 {\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}} jsou kořeny g ( x ) , {\displaystyle g(x),} tudíž i jeho násobku p ( x ) . {\displaystyle p(x).} Z toho plyne, že b 1 , , b d 1 {\displaystyle b_{1},\ldots ,b_{d-1}} splňuje následující rovnice pro i = c , , c + d 2 : {\displaystyle i=c,\ldots ,c+d-2:}

p ( α i ) = b 1 α i k 1 + b 2 α i k 2 + + b d 1 α i k d 1 = 0. {\displaystyle p(\alpha ^{i})=b_{1}\alpha ^{ik_{1}}+b_{2}\alpha ^{ik_{2}}+\cdots +b_{d-1}\alpha ^{ik_{d-1}}=0.}

V maticovém tvaru dostáváme

[ α c k 1 α c k 2 α c k d 1 α ( c + 1 ) k 1 α ( c + 1 ) k 2 α ( c + 1 ) k d 1 α ( c + d 2 ) k 1 α ( c + d 2 ) k 2 α ( c + d 2 ) k d 1 ] [ b 1 b 2 b d 1 ] = [ 0 0 0 ] . {\displaystyle {\begin{bmatrix}\alpha ^{ck_{1}}&\alpha ^{ck_{2}}&\cdots &\alpha ^{ck_{d-1}}\\\alpha ^{(c+1)k_{1}}&\alpha ^{(c+1)k_{2}}&\cdots &\alpha ^{(c+1)k_{d-1}}\\\vdots &\vdots &&\vdots \\\alpha ^{(c+d-2)k_{1}}&\alpha ^{(c+d-2)k_{2}}&\cdots &\alpha ^{(c+d-2)k_{d-1}}\\\end{bmatrix}}{\begin{bmatrix}b_{1}\\b_{2}\\\vdots \\b_{d-1}\end{bmatrix}}={\begin{bmatrix}0\\0\\\vdots \\0\end{bmatrix}}.}

Determinant této matice je roven

( i = 1 d 1 α c k i ) det ( 1 1 1 α k 1 α k 2 α k d 1 α ( d 2 ) k 1 α ( d 2 ) k 2 α ( d 2 ) k d 1 ) = ( i = 1 d 1 α c k i ) det ( V ) . {\displaystyle \left(\prod _{i=1}^{d-1}\alpha ^{ck_{i}}\right)\det {\begin{pmatrix}1&1&\cdots &1\\\alpha ^{k_{1}}&\alpha ^{k_{2}}&\cdots &\alpha ^{k_{d-1}}\\\vdots &\vdots &&\vdots \\\alpha ^{(d-2)k_{1}}&\alpha ^{(d-2)k_{2}}&\cdots &\alpha ^{(d-2)k_{d-1}}\\\end{pmatrix}}=\left(\prod _{i=1}^{d-1}\alpha ^{ck_{i}}\right)\det(V).}

Matice V {\displaystyle V} je Vandermondova matice, a její determinant je

det ( V ) = 1 i < j d 1 ( α k j α k i ) , {\displaystyle \det(V)=\prod _{1\leq i<j\leq d-1}(\alpha ^{k_{j}}-\alpha ^{k_{i}}),}

což je nenulové. Odtud vyplývá, že b 1 , , b d 1 = 0 , {\displaystyle b_{1},\ldots ,b_{d-1}=0,} a tudíž p ( x ) = 0. {\displaystyle p(x)=0.}

3. Kód, kde délka kódových slov n je rovna řádu prvku α je cyklický. Speciálně pak každý primitivní kód je cyklický.

Důkaz: Kód generovaný pomocí polynomů délky n {\displaystyle n} je cyklický právě když generující polynom dělí x n 1. {\displaystyle x^{n}-1.} Protože g ( x ) {\displaystyle g(x)} je minimální polynom s kořeny α c , , α c + d 2 , {\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2},} stačí zkontrolovat, že každé z α c , , α c + d 2 {\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}} je kořen polynomu x n 1. {\displaystyle x^{n}-1.} To plyne přímo z toho, že α {\displaystyle \alpha } je podle definice n {\displaystyle n} tá odmocnina z jedné.

Dekódování

Existuje mnoho algoritmů pro dekódování BCH kódů. Nejběžnější používají následující schéma:

  1. Spočtěme pro přijaté slovo syndromy sj.
  2. Ze syndromů určeme počet chyb t a polynom pro lokalizaci chyb Λ(x).
  3. Nalezněme kořeny polynomu pro lokalizaci chyb xj a jejich logaritmy -ij, tak že α−ij=xj.
  4. Spočtěme chybové hodnoty ei v pozicích ij.
  5. Opravme chyby.

V průběhu algoritmu může dekódovací algoritmus určit, že přijaté slovo obsahuje příliš mnoho chyb a nemůže být opraveno. Například, pokud vhodná hodnota pro t není nalezena, korekce selže. V případě zkráceného kódu, může být vypočtena pozice chyby mimo kódové slovo. Pokud přijaté slovo má více chyb než kód dokáže opravit, dekodér může vrátit zdánlivě korektní zprávu, která se liší od zprávy odeslané.

Pokud jsou některá písmena zprávy nečitelná, můžeme jejich pozici považovat za pozici chyby. Nalezení chyby na neznámé pozici vyžaduje stejně informací jako opravení dvou chyb na známých pozicích.

Výpočet syndromů

Přijaté slovo R {\displaystyle R} je součet korektního kódového slova C {\displaystyle C} a neznámého chybového slova E . {\displaystyle E.} Hodnoty syndromů jsou získány dosazením hodnot α c , , α c + d 2 {\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}} do R {\displaystyle R} vnímaného jakožto polynom. Proto jsou syndromy[5]

s j = R ( α j ) = C ( α j ) + E ( α j ) , {\displaystyle s_{j}=R(\alpha ^{j})=C(\alpha ^{j})+E(\alpha ^{j}),}

pro j {\displaystyle j} od c {\displaystyle c} do c + d 2. {\displaystyle c+d-2.} Protože α j {\displaystyle \alpha ^{j}} jsou kořeny g ( x ) , {\displaystyle g(x),} jehož je C ( x ) {\displaystyle C(x)} násobek, C ( α j ) = 0. {\displaystyle C(\alpha ^{j})=0.} Zkoumání hodnot syndromů proto izoluje chybový vektor, takže můžeme začít v jeho hledání.

Pokud v přenosu nevznikly chyby, je s j = 0 {\displaystyle s_{j}=0} pro každé j . {\displaystyle j.} V takovém případě dekódování končí.

Výpočet polynomu pro lokalizaci chyb

Pokud jsou některé syndromy nenulové, jsou v přijaté zprávě chyby. Dekodér musí zjistit, kolik jich je a kde se vyskytují.

Předpokládejme, že

E ( x ) = e 1 x i 1 + e 2 x i 2 + + e v x i v . {\displaystyle E(x)=e_{1}x^{i_{1}}+e_{2}x^{i_{2}}+\cdots +e_{v}x^{i_{v}}\,.}

Není zřejmé, jak začít řešit rovnice s neznámými e k {\displaystyle e_{k}} a i k {\displaystyle i_{k}} vysvětlující syndromy.

Prvním krokem je nalezení polynomu pro lokalizaci chyb

Λ ( x ) = j = 1 v ( x α i j 1 ) {\displaystyle \Lambda (x)=\prod _{j=1}^{v}(x\alpha ^{i_{j}}-1)} kompatibilního se spočtenými syndromy a s minimálním možným v . {\displaystyle v.}

Dva populární algoritmy pro tuto úlohu jsou:

  1. Algoritmus Peterson–Gorenstein–Zierler[6]
  2. Algoritmus Berlekamp–Massey

Cílem obou algoritmů je nalézt

Λ ( x ) = λ 0 + λ 1 x + λ 2 x 2 + + λ v x v {\displaystyle \Lambda (x)=\lambda _{0}+\lambda _{1}x+\lambda _{2}x^{2}+\cdots +\lambda _{v}x^{v}}

takové, aby pro každé j {\displaystyle j} od c {\displaystyle c} do c + d 2 v {\displaystyle c+d-2-v} platilo

i = 0 v λ i s j + v i = 0. {\displaystyle \sum _{i=0}^{v}\lambda _{i}s_{j+v-i}=0.}

Navíc požadujeme λ 0 = 1. {\displaystyle \lambda _{0}=1.}


Zdůvodnění rovnic pro výpočet polynomu pro lokalizaci chyb

Vzhledem k tomu, že α i k {\displaystyle \alpha ^{-i_{k}}} je kořenem polynomu Λ ( x ) , {\displaystyle \Lambda (x),} musí být

0 = i = 0 v λ i α i i k . {\displaystyle 0=\sum _{i=0}^{v}\lambda _{i}\alpha ^{-i\cdot i_{k}}.}

Po pronásobení e k α ( j + v ) i k {\displaystyle e_{k}\alpha ^{(j+v)i_{k}}} dostáváme

0 = i = 0 v λ i e k α ( j + v i ) i k . {\displaystyle 0=\sum _{i=0}^{v}\lambda _{i}e_{k}\alpha ^{(j+v-i)i_{k}}.}

Po sečtení přes jednotlivé chyby pak

0 = i = 0 v λ i k = 0 v e k α ( j + v i ) i k , {\displaystyle 0=\sum _{i=0}^{v}\lambda _{i}\sum _{k=0}^{v}e_{k}\alpha ^{(j+v-i)i_{k}},}

neboli

0 = i = 0 v λ i s j + v i . {\displaystyle 0=\sum _{i=0}^{v}\lambda _{i}s_{j+v-i}.}

Algoritmus Peterson–Gorenstein–Zierler

Algoritmus řeší soustavu rovnic hrubou silou. Nachází jediné v a Λ, které může vyhovovat, správně by měl nakonec zkontrolovat, zda skutečně vyhovují i pro ve výpočtu nepoužité syndromy.

Začněme s v=[t=(d-1)/2].

  • Nejprve sestavme matici
S v × v = [ s c s c + 1 s c + v 1 s c + 1 s c + 2 s c + v s c + v 1 s c + v s c + 2 v 2 ] , {\displaystyle S_{v\times v}={\begin{bmatrix}s_{c}&s_{c+1}&\dots &s_{c+v-1}\\s_{c+1}&s_{c+2}&\dots &s_{c+v}\\\vdots &\vdots &\ddots &\vdots \\s_{c+v-1}&s_{c+v}&\dots &s_{c+2v-2}\end{bmatrix}},}
  • pak vektor c v × 1 {\displaystyle c_{v\times 1}}
C v × 1 = [ s c + v s c + v + 1 s c + 2 v 1 ] . {\displaystyle C_{v\times 1}={\begin{bmatrix}s_{c+v}\\s_{c+v+1}\\\vdots \\s_{c+2v-1}\end{bmatrix}}.}
  • Nechť neznámé koeficienty polynomu Λ {\displaystyle \Lambda } jsou
Λ v × 1 = [ λ v λ v 1 λ 1 ] . {\displaystyle \Lambda _{v\times 1}={\begin{bmatrix}\lambda _{v}\\\lambda _{v-1}\\\vdots \\\lambda _{1}\end{bmatrix}}.}
  • Pokud má S v × v {\displaystyle S_{v\times v}} nenulový determinant, pak maticová rovnice
S v × v Λ v × 1 = C v × 1 {\displaystyle S_{v\times v}\Lambda _{v\times 1}=-C_{v\times 1\,}}
má řešení. Nalezněme tedy koeficienty polynomu Λ {\displaystyle \Lambda } a skončeme.
  • Jinak pokud v = 0 , {\displaystyle v=0,} deklarujme nulový polynom lokalizace chyb a skončeme.
  • Jinak snižme v {\displaystyle v} o 1 {\displaystyle 1} a vraťme se k sestavení matice S v × v . {\displaystyle S_{v\times v}.}

V případě v {\displaystyle v} větším než je počet chyb (můžeme dodefinovat nadbytečná e k {\displaystyle e_{k}} nulou). Pak

S v × v = [ α 0 i 1 α 0 i 2 α 0 i v α 1 i 1 α 1 i 2 α 1 i v α ( v 1 ) i 1 α ( v 1 ) i 2 α ( v 1 ) i v ] [ e 1 α c i 1 0 0 0 e 2 α c i 2 0 0 0 e v α c i v ] [ α 0 i 1 α 1 i 1 α ( v 1 ) i 1 α 0 i 2 α 1 i 2 α ( v 1 ) i 2 α 0 i v α 1 i v α ( v 1 ) i v ] , {\displaystyle S_{v\times v}={\begin{bmatrix}\alpha ^{0i_{1}}&\alpha ^{0i_{2}}&\dots &\alpha ^{0i_{v}}\\\alpha ^{1i_{1}}&\alpha ^{1i_{2}}&\dots &\alpha ^{1i_{v}}\\\vdots &\vdots &\ddots &\vdots \\\alpha ^{(v-1)i_{1}}&\alpha ^{(v-1)i_{2}}&\dots &\alpha ^{(v-1)i_{v}}\end{bmatrix}}{\begin{bmatrix}e_{1}\alpha ^{ci_{1}}&0&\dots &0\\0&e_{2}\alpha ^{ci_{2}}&\dots &0\\\vdots &\vdots &\ddots &\vdots \\0&0&\dots &e_{v}\alpha ^{ci_{v}}\end{bmatrix}}{\begin{bmatrix}\alpha ^{0i_{1}}&\alpha ^{1i_{1}}&\dots &\alpha ^{(v-1)i_{1}}\\\alpha ^{0i_{2}}&\alpha ^{1i_{2}}&\dots &\alpha ^{(v-1)i_{2}}\\\vdots &\vdots &\ddots &\vdots \\\alpha ^{0i_{v}}&\alpha ^{1i_{v}}&\dots &\alpha ^{(v-1)i_{v}}\end{bmatrix}},}

a determinant je nulový, dokud není v {\displaystyle v} minimální možné.

Algoritmus Berlekamp–Massey

Algoritmus udržuje Λ odpovídající počátečnímu úseku posloupnosti syndromů. Postupně prodlužuje délku úseku a koriguje Λ.

Nalezení kořenů polynomu pro lokalizaci chyb

Není znám algoritmus, který by hledal kořeny jinak než hrubou silou postupným dosazováním prvků tělesa B. Algoritmus Chien search optimalizuje výpočet tím, že minimalizuje násobení proměnnými na úkor stejného počtu násobení konstantami.

Výpočet chybových hodnot

Jakmile jsou známy polohy chyb, zbývá určit velikosti chyb na těchto místech. Odečtením nalezených velikostí chyb dostaneme z přijatého slova kódové slovo.

V případě binárního kódu a původně neznámé polohy chyby stačí negovat příslušný bit. V případě nečitelných dat je pro účely hledání chyby nahrazeno nečitelné písmeno nulou a pokračujeme jako v obecném případě. V obecném případě mohou být velikosti chyb e j {\displaystyle e_{j}} určeny řešením soustavy lineárních rovnic

s c = e 1 α c i 1 + e 2 α c i 2 + {\displaystyle s_{c}=e_{1}\alpha ^{c\,i_{1}}+e_{2}\alpha ^{c\,i_{2}}+\ldots }
s c + 1 = e 1 α ( c + 1 ) i 1 + e 2 α ( c + 1 ) i 2 + {\displaystyle s_{c+1}=e_{1}\alpha ^{(c+1)\,i_{1}}+e_{2}\alpha ^{(c+1)\,i_{2}}+\ldots }

Forneyův vzorec

Existuje ale efektivnější metoda známá jako Forneyův vzorec.

Nechť S ( x ) = i = 0 d 2 s c + i x i . {\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}.} Nechť v d 1 , {\displaystyle v\leq d-1,} λ 0 0 {\displaystyle \lambda _{0}\neq 0} a Λ ( x ) = i = 0 v λ i x i = λ 0 k = 0 v ( α i k x 1 ) . {\displaystyle \Lambda (x)=\sum _{i=0}^{v}\lambda _{i}x^{i}=\lambda _{0}\cdot \prod _{k=0}^{v}(\alpha ^{-i_{k}}x-1).}

Nechť Ω ( x ) = S ( x ) Λ ( x ) ( mod x d 1 ) {\displaystyle \Omega (x)=S(x)\,\Lambda (x){\pmod {x^{d-1}}}} je polynom vyhodnocující chyby.[7]

Nechť Λ ( x ) = Σ i = 1 v i λ i x i 1 , {\displaystyle \Lambda '(x)=\Sigma _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},} kde i x {\displaystyle i\cdot x} zde značí k = 1 i x {\displaystyle \textstyle \sum _{k=1}^{i}x} místo násobení v příslušném tělese.

Pokud je možno syndromy vysvětlit chybovým slovem, které může být nenulové jedině na pozicích i k {\displaystyle i_{k}} , pak jsou velikosti chyb

e k = α i k Ω ( α i k ) α c i k Λ ( α i k ) . {\displaystyle e_{k}=-{\alpha ^{i_{k}}\Omega (\alpha ^{-i_{k}}) \over \alpha ^{c\cdot i_{k}}\Lambda '(\alpha ^{-i_{k}})}.}

Pro doslovné kódy, c = 1, takže můžeme výraz vykrátit na:

e k = Ω ( α i k ) Λ ( α i k ) . {\displaystyle e_{k}=-{\Omega (\alpha ^{-i_{k}}) \over \Lambda '(\alpha ^{-i_{k}})}.}

Zdůvodnění Forneyova vzorce

Algoritmus je založen na Lagrangeově interpolaci a technikách vytvořujících funkcí.

Prozkoumejme S ( x ) Λ ( x ) . {\displaystyle S(x)\Lambda (x).} Pro jednoduchost dodefinujme λ k = 0 {\displaystyle \lambda _{k}=0} pro k > v {\displaystyle k>v} a s k = 0 {\displaystyle s_{k}=0} pro k > c + d 2. {\displaystyle k>c+d-2.}

Pak S ( x ) Λ ( x ) = j = 0 i = 0 j s j i + c λ i x j . {\displaystyle S(x)\Lambda (x)=\sum _{j=0}^{\infty }\sum _{i=0}^{j}s_{j-i+c}\lambda _{i}x^{j}.} Vztah i = 0 v s v i + j λ i = 0 {\displaystyle \sum _{i=0}^{v}s_{v-i+j}\lambda _{i}=0} jsme již odvodili dříve, takže víme pro důkaz nepodstatnou informaci, že koeficienty u x j {\displaystyle x^{j}} jsou 0 pro v j d 2. {\displaystyle v\leq j\leq d-2.}

Zkoumejme dál význam jednotlivých koeficientů:

S ( x ) = i = 0 d 2 j = 1 v e j α ( c + i ) i j x i = j = 1 v e j α c i j i = 0 d 2 ( α i j ) i x i = j = 1 v e j α c i j ( x α i j ) d 1 1 x α i j 1 , {\displaystyle S(x)=\sum _{i=0}^{d-2}\sum _{j=1}^{v}e_{j}\alpha ^{(c+i)\cdot i_{j}}x^{i}=\sum _{j=1}^{v}e_{j}\alpha ^{c\,i_{j}}\sum _{i=0}^{d-2}(\alpha ^{i_{j}})^{i}x^{i}=\sum _{j=1}^{v}e_{j}\alpha ^{c\,i_{j}}{(x\alpha ^{i_{j}})^{d-1}-1 \over x\alpha ^{i_{j}}-1},}
S ( x ) Λ ( x ) = S ( x ) λ 0 = 1 v ( α i x 1 ) = λ 0 j = 1 v e j α c i j ( x α i j ) d 1 1 x α i j 1 = 1 v ( α i x 1 ) . {\displaystyle S(x)\Lambda (x)=S(x)\lambda _{0}\prod _{\ell =1}^{v}(\alpha ^{i_{\ell }}x-1)=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{c\,i_{j}}{(x\alpha ^{i_{j}})^{d-1}-1 \over x\alpha ^{i_{j}}-1}\prod _{\ell =1}^{v}(\alpha ^{i_{\ell }}x-1).}

Můžeme získat následující formu polynomu :

S ( x ) Λ ( x ) = λ 0 j = 1 v e j α c i j ( ( x α i j ) d 1 1 ) { 1 , , v } { j } ( α i x 1 ) . {\displaystyle S(x)\Lambda (x)=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{c\,i_{j}}((x\alpha ^{i_{j}})^{d-1}-1)\prod _{\ell \in \{1,\dots ,v\}\setminus \{j\}}(\alpha ^{i_{\ell }}x-1).}

Chceme spočítat neznámé e j , {\displaystyle e_{j},} a můžeme zjednodušit kontext odstraněním ( x α i j ) d 1 {\displaystyle (x\alpha ^{i_{j}})^{d-1}} členů. To vede k definici polynomu vyhodnocujícího chyby

Ω ( x ) = S ( x ) Λ ( x ) ( mod x d 1 ) . {\displaystyle \Omega (x)=S(x)\,\Lambda (x){\pmod {x^{d-1}}}.}

Díky předpokladu v d 1 {\displaystyle v\leq d-1} dostáváme

Ω ( x ) = λ 0 j = 1 v e j α c i j { 1 , , v } { j } ( α i x 1 ) . {\displaystyle \Omega (x)=-\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{c\,i_{j}}\prod _{\ell \in \{1,\dots ,v\}\setminus \{j\}}(\alpha ^{i_{\ell }}x-1).}

Zaměřme se na Ω ( α i k ) . {\displaystyle \Omega (\alpha ^{-i_{k}}).} Díky Λ {\displaystyle \Lambda } (trik Lagrangeovy interpolace) suma degeneruje na jediný sčítanec

Ω ( α i k ) = λ 0 e k α c i k { 1 , , v } { k } ( α i α i k 1 ) . {\displaystyle \Omega (\alpha ^{-i_{k}})=-\lambda _{0}e_{k}\alpha ^{c\cdot i_{k}}\prod _{\ell \in \{1,\dots ,v\}\setminus \{k\}}(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1).}

K nalezení e k {\displaystyle e_{k}} již stačí zbavit se nadbytečného součinu. Můžeme jej spočítat přímo z již známých kořenů α i j {\displaystyle \alpha ^{-i_{j}}} polynomu Λ , {\displaystyle \Lambda ,} ale můžeme využít jednodušší výraz.

Protože formální derivace Λ ( x ) = λ 0 j = 1 v α i j { 1 , , v } { j } ( α i x 1 ) . {\displaystyle \Lambda '(x)=\lambda _{0}\sum _{j=1}^{v}\alpha ^{i_{j}}\prod _{\ell \in \{1,\dots ,v\}\setminus \{j\}}(\alpha ^{i_{\ell }}x-1).}

Získáváme v bodě α i k {\displaystyle \alpha ^{-i_{k}}} opět jediný sčítanec

Λ ( α i k ) = λ 0 α i k { 1 , , v } { k } ( α i α i k 1 ) . {\displaystyle \Lambda '(\alpha ^{-i_{k}})=\lambda _{0}\alpha ^{i_{k}}\prod _{\ell \in \{1,\dots ,v\}\setminus \{k\}}(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1).}

Takže konečně

e k = α i k Ω ( α i k ) α c i k Λ ( α i k ) {\displaystyle e_{k}=-{\alpha ^{i_{k}}\Omega (\alpha ^{-i_{k}}) \over \alpha ^{c\cdot i_{k}}\Lambda '(\alpha ^{-i_{k}})}}

Tato formule je zjednodušením v případě, kdy formální derivaci Λ {\displaystyle \Lambda } počítáme z tvaru Λ ( x ) = i = 1 v λ i x i {\displaystyle \Lambda (x)=\sum _{i=1}^{v}\lambda _{i}x^{i}} pomocí

Λ ( x ) = Σ i = 1 v i λ i x i 1 , {\displaystyle \Lambda '(x)=\Sigma _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},}

kde i x {\displaystyle i\cdot x} značí k = 1 i x {\displaystyle \textstyle \sum _{k=1}^{i}x} místo násobení v příslušném tělese.

Dekódování založené na rozšířeném Euklidově algoritmu

Celý proces hledání lokalizačního polynomu Λ i hledání velikosti chyb je možno založit na

  1. Rozšířeném Eukleidově algoritmu. Navíc přitom můžeme opravovat i nečitelné znaky na neznámých pozicích.

Nechť k 1 , . . . , k k {\displaystyle k_{1},...,k_{k}} jsou pozice nečitelných znaků. Sestavíme tomu odpovídající polynom Γ ( x ) = i = 1 k ( x α k i 1 ) . {\displaystyle \Gamma (x)=\prod _{i=1}^{k}(x\alpha ^{k_{i}}-1).} Dodefinujme nečitelná místa nulou a spočtěme syndromy. Tak jak jsme si popsali u Forneyova vzorce nechť S ( x ) = i = 0 d 2 s c + i x i . {\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}.}

Spustíme rozšířený Euklidův algoritmus na hledání nejmenšího společného dělitele polynomů S ( x ) Γ ( x ) {\displaystyle S(x)\Gamma (x)} a x d 1 . {\displaystyle x^{d-1}.} Naším cílem ale nebude nalézt nejmenšího společného dělitele, ale polynom r ( x ) {\displaystyle r(x)} stupně nejvýš ( d + k 3 ) / 2 {\displaystyle \lfloor (d+k-3)/2\rfloor } a polynomy a ( x ) , b ( x ) {\displaystyle a(x),b(x)} tak, aby r ( x ) = a ( x ) S ( x ) Γ ( x ) + b ( x ) x d 1 . {\displaystyle r(x)=a(x)S(x)\Gamma (x)+b(x)x^{d-1}.} Nízký stupeň polynomu r ( x ) {\displaystyle r(x)} zajistí, že pro a ( x ) {\displaystyle a(x)} budou platit zobecněné (o polynom opravující nečitelné znaky) definiční vztahy které jsme kladli na Λ . {\displaystyle \Lambda .}

Při definici Ξ ( x ) = a ( x ) Γ ( x ) {\displaystyle \Xi (x)=a(x)\Gamma (x)} a použití Ξ {\displaystyle \Xi } na místě Λ {\displaystyle \Lambda } ve Fourney algoritmu pak dostaneme odhad velikosti chyb.

Hlavní výhodou algoritmu je, že zároveň spočítá ve Forneyově vzorci potřebné Ω ( x ) = S ( x ) Ξ ( x ) mod x d 1 = r ( x ) . {\displaystyle \Omega (x)=S(x)\Xi (x){\bmod {x}}^{d-1}=r(x).}

Zdůvodnění nejen dekódování založeném na rozšířeném Euklidově algoritmu

Naší snahou je nalézt kódové slovo, které se od přijatého slova na čitelných pozicích liší co nejméně. Při vyjádření přijatého slova jako součtu nejbližšího kódového slova a chybového slova tak hledáme chybové slovo s nejmenším počtem nenulových souřadnic na čitelných pozicích. Syndrom s i {\displaystyle s_{i}} klade na chybové slovo podmínku s i = j = 0 n 1 e j α i j . {\displaystyle s_{i}=\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}.} Tyto podmínky můžeme zapisovat samostatně, nebo můžeme vytvořit polynom S ( x ) = i = 0 d 2 s c + i x i {\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}} a klást podmínky na koeficienty u mocnin 0 {\displaystyle 0} d 2. {\displaystyle d-2.} S ( x ) { 0 , , d 2 } = E ( x ) = i = 0 d 2 j = 0 n 1 e j α i j α c j x i . {\displaystyle S(x){\textstyle {\{0,\ldots ,\,d-2\} \atop =}}E(x)=\sum _{i=0}^{d-2}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}\alpha ^{cj}x^{i}.}

Víme-li, že na pozici k 1 {\displaystyle k_{1}} je nečitelný znak, můžeme množinu syndromů { s c , , s c + d 2 } {\displaystyle \{s_{c},\ldots ,s_{c+d-2}\}} nahradit množinou syndromů { t c , , t c + d 3 } {\displaystyle \{t_{c},\ldots ,t_{c+d-3}\}} definovaných vztahem t i = α k 1 s i s i + 1 . {\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}.} Pokud platí pro chybové slovo podmínky kladené množinou syndromů { s c , , s c + d 2 } , {\displaystyle \{s_{c},\ldots ,s_{c+d-2}\},} pak t i = α k 1 s i s i + 1 = α k 1 j = 0 n 1 e j α i j j = 0 n 1 e j α j α i j = j = 0 n 1 e j ( α k 1 α j ) α i j . {\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}=\alpha ^{k_{1}}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}-\sum _{j=0}^{n-1}e_{j}\alpha ^{j}\alpha ^{ij}=\sum _{j=0}^{n-1}e_{j}(\alpha ^{k_{1}}-\alpha ^{j})\alpha ^{ij}.} Nová množina syndromů má vůči chybovému vektoru f j = e j ( α k 1 α j ) {\displaystyle f_{j}=e_{j}(\alpha ^{k_{1}}-\alpha ^{j})} stejný vztah jako měla původní množina syndromů vůči chybovému vektoru e j . {\displaystyle e_{j}.} Všimněme si, že s výjimkou souřadnice k 1 , {\displaystyle k_{1},} kde je f k 1 = 0 , {\displaystyle f_{k_{1}}=0,} je f j {\displaystyle f_{j}} nenulové, právě když je e j {\displaystyle e_{j}} nenulové. Co se týče hledání pozic chyb, můžeme proto takto upravit množinu syndromů postupným zohledněním pozic neznámých znaků. Výsledná množina syndromů bude kratší o počet k {\displaystyle k} nečitelných znaků.

Při formulaci v řeči polynomů nám náhrada množiny syndromů { s c , , s c + d 2 } {\displaystyle \{s_{c},\ldots ,s_{c+d-2}\}} množinou syndromů { t c , , t c + d 3 } {\displaystyle \{t_{c},\ldots ,t_{c+d-3}\}} vede k T ( x ) = i = 0 d 3 t c + i x i = α k 1 i = 0 d 3 s c + i x i i = 1 d 2 s c + i x i 1 . {\displaystyle T(x)=\sum _{i=0}^{d-3}t_{c+i}x^{i}=\alpha ^{k_{1}}\sum _{i=0}^{d-3}s_{c+i}x^{i}-\sum _{i=1}^{d-2}s_{c+i}x^{i-1}.} Odtud x T ( x ) { 1 , , d 2 } = ( x α k 1 1 ) S ( x ) . {\displaystyle xT(x){\textstyle {\{1,\ldots ,\,d-2\} \atop =}}(x\alpha ^{k_{1}}-1)S(x).}

Po nahrazení S ( x ) {\displaystyle S(x)} pomocí S ( x ) Γ ( x ) {\displaystyle S(x)\Gamma (x)} pak proto budeme hledat shodu u koeficientů k , , d 2. {\displaystyle k,\ldots ,d-2.}

Obdobně jako odstraňování vlivu nečitelných znaků můžeme vnímat i hledání chybných pozic. Pokud najdeme v {\displaystyle v} souřadnic tak, že odstranění jejich vlivu povede k tomu, že zbylé syndromy budou nulové, existuje chybový vektor jenž má nenulové hodnoty pouze v těchto souřadnicích. Pokud označíme Λ ( x ) {\displaystyle \Lambda (x)} polynom odstraňující vliv těchto souřadnic, dostaneme S ( x ) Γ ( x ) Λ ( x ) { k + v , , d 2 } = 0. {\displaystyle S(x)\Gamma (x)\Lambda (x){\textstyle {\{k+v,\ldots ,\,d-2\} \atop =}}0.}

V Euklidově algoritmu se snažíme odstranit nejvýš ( d 1 k ) / 2 {\displaystyle (d-1-k)/2} chyb (na čitelných místech), protože při větším počtu chyb může být více kódových slov od přijatého slova stejně daleko. Proto musí pro hledané Λ ( x ) {\displaystyle \Lambda (x)} nastat ve výše uvedeném vztahu rovnost u všech souřadnic počínaje k + ( d 1 k ) / 2 . {\displaystyle k+\lfloor (d-1-k)/2\rfloor .}

Ve Forney vzorci (pro nelezení velikosti chyb) nezáleželo na tom, zda je Λ ( x ) {\displaystyle \Lambda (x)} vynásobena nenulovou konstantou, proto je podmínka λ 0 = 1 {\displaystyle \lambda _{0}=1} zbytečná. Může se stát, že Euklidův algoritmus najde Λ ( x ) {\displaystyle \Lambda (x)} stupně většího než ( d 1 k ) / 2 , {\displaystyle (d-1-k)/2,} který má tolik různých kořenů, jako je jeho stupeň, a pomocí Forney algoritmu bude možno opravit chyby v polohách všech jeho kořenů, přesto opravovat takto nalezené chyby je nebezpečné. Obvykle při nalezení Λ ( x ) {\displaystyle \Lambda (x)} většího stupně odmítáme chyby opravovat. Stejně tak oprava chyb selže, pokud má Λ ( x ) {\displaystyle \Lambda (x)} vícenásobné kořeny či jejich počet neodpovídá stupni Λ ( x ) . {\displaystyle \Lambda (x).} Selhání také může detekovat to, když Forney vzorec vrátí chybu z rozdílu těles B A . {\displaystyle B\setminus A.}

Příklady dekódování

Dekódování binárního kódu bez nečitelných znaků

Nechť d = 7 {\displaystyle d=7} a používáme dříve uvedený kód s g ( x ) = x 10 + x 8 + x 5 + x 4 + x 2 + x + 1 {\displaystyle g(x)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1} v GF(24). (Tento generátor je použit v QR kódech.) Nechť přenášená zpráva je [1 1 0 1 1], nebo jako polynom M ( x ) = x 4 + x 3 + x + 1. {\displaystyle M(x)=x^{4}+x^{3}+x+1.} Zabezpečovací symboly jsou spočteny dělením x 10 M ( x ) {\displaystyle x^{10}M(x)} polynomem g ( x ) {\displaystyle g(x)} a přičtením (odečtením) zbytku x 9 + x 4 + x 2 {\displaystyle x^{9}+x^{4}+x^{2}} neboli [ 1 0 0 0 0 1 0 1 0 0 ] k x 10 M ( x ) . {\displaystyle x^{10}M(x).} Přidáním ke zprávě tak dostáváme přenášené kódové slovo [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 ].

Předpokládejme, že dva bity byly poškozeny v průběhu přenosu, takže přijaté slovo je [ 1 0 0 1 1 1 0 0 0 1 1 0 1 0 0 ]. Jakožto polynom tedy:

R ( x ) = C ( x ) + x 13 + x 5 = x 14 + x 11 + x 10 + x 9 + x 5 + x 4 + x 2 {\displaystyle R(x)=C(x)+x^{13}+x^{5}=x^{14}+x^{11}+x^{10}+x^{9}+x^{5}+x^{4}+x^{2}}

Abychom chyby opravili, spočteme nejprve syndromy. Přitom α = 0010 , {\displaystyle \alpha =0010,} dostaneme s 1 = R ( α 1 ) = 1011 , {\displaystyle s_{1}=R(\alpha ^{1})=1011,} s 2 = 1001 , {\displaystyle s_{2}=1001,} s 3 = 1011 , {\displaystyle s_{3}=1011,} s 4 = 1101 , {\displaystyle s_{4}=1101,} s 5 = 0001 {\displaystyle s_{5}=0001} a s 6 = 1001. {\displaystyle s_{6}=1001.} K zápisu bychom mohli používat hexadecimální číslice, ale držme se v tomto úvodním příkladu dvojkové soustavy.

Následně aplikujme Petersonův algoritmus.

[ S 3 × 3 | C 3 × 1 ] = [ s 1 s 2 s 3 s 4 s 2 s 3 s 4 s 5 s 3 s 4 s 5 s 6 ] = [ 1011 1001 1011 1101 1001 1011 1101 0001 1011 1101 0001 1001 ] [ 0001 0000 1000 0111 0000 0001 1011 0001 0000 0000 0000 0000 ] {\displaystyle \left[S_{3\times 3}|C_{3\times 1}\right]={\begin{bmatrix}s_{1}&s_{2}&s_{3}&s_{4}\\s_{2}&s_{3}&s_{4}&s_{5}\\s_{3}&s_{4}&s_{5}&s_{6}\end{bmatrix}}={\begin{bmatrix}1011&1001&1011&1101\\1001&1011&1101&0001\\1011&1101&0001&1001\end{bmatrix}}\Rightarrow {\begin{bmatrix}0001&0000&1000&0111\\0000&0001&1011&0001\\0000&0000&0000&0000\end{bmatrix}}}

Protože S3×3 je singulární, což není překvapením, protože slovo obsahuje pouze dvě chyby. Nyní levý horní roh matice je identický s [S2×2 C2×1], což vede k řešení λ 2 = 1000 , {\displaystyle \lambda _{2}=1000,} λ 1 = 1011. {\displaystyle \lambda _{1}=1011.} Výsledný polynom pro lokalizaci chyb je Λ ( x ) = 1000 x 2 + 1011 x + 0001. {\displaystyle \Lambda (x)=1000x^{2}+1011x+0001.} Polynom má kořeny 0100 = α 13 {\displaystyle 0100=\alpha ^{-13}} a 0111 = α 5 . {\displaystyle 0111=\alpha ^{-5}.} Exponenty α {\displaystyle \alpha } odpovídají pozicím chyb. Nemusíme v tomto případě počítat chybové hodnoty, protože jedinou možnou hodnotou je hodnota 1.

Dekódování s nečitelnými znaky a maximálním opravitelným počtem chyb

Předpokládejme nyní, stejný případ, ale přijaté slovo má dva nečitelné znaky [ 1 0 0 ? 1 1 ? 0 0 1 1 0 1 0 0 ]. Nahradíme nečitelné znaky (např.) nulami, vytvořme polynom potlačující vliv nečitelných znaků Γ ( x ) = ( α 8 x 1 ) ( α 11 x 1 ) . {\displaystyle \Gamma (x)=(\alpha ^{8}x-1)(\alpha ^{11}x-1).} Najděme syndromy s 1 = α 7 , {\displaystyle s_{1}=\alpha ^{-7},} s 2 = α 1 , {\displaystyle s_{2}=\alpha ^{1},} s 3 = α 4 , {\displaystyle s_{3}=\alpha ^{4},} s 4 = α 2 , {\displaystyle s_{4}=\alpha ^{2},} s 5 = α 5 {\displaystyle s_{5}=\alpha ^{5}} a s 6 = α 7 . {\displaystyle s_{6}=\alpha ^{-7}.} (Používáme logaritmické vyjádření, které je vzhledem k isomorfismu GF(24) nezávislé na reprezentaci pro sčítání. Možné reprezentace jednotlivých mocnin jsou stejně jako v předchozím případě hexadecimálními číslicemi 1, 2, 4, 8, 3, 6, C, B, 5, A, 7, E, F, D, 9 se sčítáním založeném na bitovém xor.) Vytvořme polynom syndromů S ( x ) = α 7 + α 1 x + α 4 x 2 + α 2 x 3 + α 5 x 4 + α 7 x 5 , {\displaystyle S(x)=\alpha ^{-7}+\alpha ^{1}x+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{5}x^{4}+\alpha ^{-7}x^{5},} spočtěme S ( x ) Γ ( x ) = α 7 + α 4 x + α 1 x 2 + α 6 x 3 + α 1 x 4 + α 5 x 5 + α 7 x 6 + α 3 x 7 . {\displaystyle S(x)\Gamma (x)=\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}.}

Spusťme rozšířený euklidův algoritmus: ( S ( x ) Γ ( x ) x 6 ) = ( α 7 + α 4 x + α 1 x 2 + α 6 x 3 + α 1 x 4 + α 5 x 5 + α 7 x 6 + α 3 x 7 x 6 ) = {\displaystyle {\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}\\x^{6}\end{pmatrix}}=}

( α 7 + α 3 x 1 1 0 ) ( x 6 α 7 + α 4 x + α 1 x 2 + α 6 x 3 + α 1 x 4 + α 5 x 5 + ( α 7 + α 7 ) x 6 + ( α 3 + α 3 ) x 7 ) = {\displaystyle {\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+(\alpha ^{7}+\alpha ^{7})x^{6}+(\alpha ^{-3}+\alpha ^{-3})x^{7}\end{pmatrix}}=}

( α 7 + α 3 x 1 1 0 ) ( α 4 + α 5 x 1 1 0 ) ( α 7 + α 4 x + α 1 x 2 + α 6 x 3 + α 1 x 4 + α 5 x 5 α 3 + ( α 7 + α 3 ) x + ( α 3 + α 1 ) x 2 + ( α 5 + α 6 ) x 3 + ( α 3 + α 1 ) x 4 + ( α 6 + α 6 ) x 5 + ( α 0 + 1 ) x 6 ) = {\displaystyle {\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{-5}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+(\alpha ^{-7}+\alpha ^{3})x+(\alpha ^{3}+\alpha ^{-1})x^{2}+\\(\alpha ^{-5}+\alpha ^{-6})x^{3}+(\alpha ^{3}+\alpha ^{1})x^{4}+(\alpha ^{-6}+\alpha ^{-6})x^{5}+(\alpha ^{0}+1)x^{6}\end{pmatrix}}=}

( ( 1 + α 4 ) + ( α 1 + α 2 ) x + α 7 x 2 α 7 + α 3 x α 4 + α 5 x 1 ) ( α 7 + α 4 x + α 1 x 2 + α 6 x 3 + α 1 x 4 + α 5 x 5 α 3 + α 2 x + α 0 x 2 + α 2 x 3 + α 6 x 4 ) = {\displaystyle {\begin{pmatrix}(1+\alpha ^{-4})+(\alpha ^{1}+\alpha ^{2})x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\end{pmatrix}}=}

( α 3 + α 5 x + α 7 x 2 α 7 + α 3 x α 4 + α 5 x 1 ) ( α 5 + α 4 x 1 1 0 ) ( α 3 + α 2 x + α 0 x 2 + α 2 x 3 + α 6 x 4 ( α 7 + α 7 ) + ( α 7 + α 7 + α 4 ) x + ( α 5 + α 6 + α 1 ) x 2 + ( α 7 + α 4 + α 6 ) x 3 + ( α 4 + α 6 + α 1 ) x 4 + ( α 5 + α 5 ) x 5 ) = {\displaystyle {\begin{pmatrix}\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-5}+\alpha ^{-4}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\(\alpha ^{7}+\alpha ^{-7})+(\alpha ^{-7}+\alpha ^{-7}+\alpha ^{4})x+\\(\alpha ^{-5}+\alpha ^{-6}+\alpha ^{-1})x^{2}+\\(\alpha ^{-7}+\alpha ^{-4}+\alpha ^{6})x^{3}+\\(\alpha ^{4}+\alpha ^{-6}+\alpha ^{-1})x^{4}+(\alpha ^{5}+\alpha ^{5})x^{5}\end{pmatrix}}=}

( α 7 x + α 5 x 2 + α 3 x 3 α 3 + α 5 x + α 7 x 2 α 3 + α 5 x + α 6 x 2 α 4 + α 5 x ) ( α 3 + α 2 x + α 0 x 2 + α 2 x 3 + α 6 x 4 α 4 + α 4 x + α 2 x 2 + α 5 x 3 ) . {\displaystyle {\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}{\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix}}.}

Dostali jsme se k polynomu stupně 3, a vzhledem k tomu, že ( ( α 4 + α 5 x ) α 3 + α 5 x + α 7 x 2 α 3 + α 5 x + α 6 x 2 ( α 7 x + α 5 x 2 + α 3 x 3 ) ) ( α 7 x + α 5 x 2 + α 3 x 3 α 3 + α 5 x + α 7 x 2 α 3 + α 5 x + α 6 x 2 α 4 + α 5 x ) = ( 1 0 0 1 ) , {\displaystyle {\begin{pmatrix}-(\alpha ^{4}+\alpha ^{-5}x)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3})\end{pmatrix}}{\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},} dostáváme ( ( α 4 + α 5 x ) α 3 + α 5 x + α 7 x 2 α 3 + α 5 x + α 6 x 2 ( α 7 x + α 5 x 2 + α 3 x 3 ) ) ( S ( x ) Γ ( x ) x 6 ) = ( α 3 + α 2 x + α 0 x 2 + α 2 x 3 + α 6 x 4 α 4 + α 4 x + α 2 x 2 + α 5 x 3 ) , {\displaystyle {\begin{pmatrix}-(\alpha ^{4}+\alpha ^{-5}x)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3})\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\\\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\\\alpha ^{-5}x^{3}\end{pmatrix}},}

a tedy S ( x ) Γ ( x ) ( α 3 + α 5 x + α 6 x 2 ) ( α 7 x + α 5 x 2 + α 3 x 3 ) x 6 = α 4 + α 4 x + α 2 x 2 + α 5 x 3 . {\displaystyle S(x)\Gamma (x)(\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2})-(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3})x^{6}=\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}.}

Nechť Λ ( x ) = α 3 + α 5 x + α 6 x 2 . {\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}.} Netrapme se tím, že absolutní člen není 1. Nalezněme hrubou silou kořeny polynomu Λ . {\displaystyle \Lambda .} Jsou jimi α 2 {\displaystyle \alpha ^{2}} a α 10 {\displaystyle \alpha ^{10}} (po nalezení prvního můžeme vydělit Λ {\displaystyle \Lambda } polynomem ( x α 2 ) {\displaystyle (x-\alpha ^{2})} a kořen polynomu stupně 1 nalezneme snadno).

Označme Ξ ( x ) = Γ ( x ) Λ ( x ) = α 3 + α 4 x 2 + α 2 x 3 + α 5 x 4 {\displaystyle \Xi (x)=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{-5}x^{4}} a Ω ( x ) = S ( x ) Ξ ( x ) mod x 6 = α 4 + α 4 x + α 2 x 2 + α 5 x 3 . {\displaystyle \Omega (x)=S(x)\Xi (x){\bmod {x}}^{6}=\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}.} Velikosti chyb hledáme ve tvaru e j = Ω ( α i j ) / Ξ ( α i j ) , {\displaystyle e_{j}=-\Omega (\alpha ^{-i_{j}})/\Xi '(\alpha ^{-i_{j}}),} kde α i j {\displaystyle \alpha ^{-i_{j}}} jsou kořeny polynomu Ξ ( x ) . {\displaystyle \Xi (x).} Ξ ( x ) = α 2 x 2 . {\displaystyle \Xi '(x)=\alpha ^{2}x^{2}.} Dostáváme e 1 = Ω ( α 4 ) / Ξ ( α 4 ) = ( α 4 + α 7 + α 5 + α 7 ) / α 5 = α 5 / α 5 = 1 , {\displaystyle e_{1}=-\Omega (\alpha ^{4})/\Xi '(\alpha ^{4})=(\alpha ^{-4}+\alpha ^{-7}+\alpha ^{-5}+\alpha ^{7})/\alpha ^{-5}=\alpha ^{-5}/\alpha ^{-5}=1,} e 2 = Ω ( α 7 ) / Ξ ( α 7 ) = ( α 4 + α 4 + α 1 + α 1 ) / α 1 = 0 , {\displaystyle e_{2}=-\Omega (\alpha ^{7})/\Xi '(\alpha ^{7})=(\alpha ^{-4}+\alpha ^{-4}+\alpha ^{1}+\alpha ^{1})/\alpha ^{1}=0,} e 3 = Ω ( α 10 ) / Ξ ( α 10 ) = ( α 4 + α 1 + α 7 + α 5 ) / α 7 = α 7 / α 7 = 1 , {\displaystyle e_{3}=-\Omega (\alpha ^{10})/\Xi '(\alpha ^{10})=(\alpha ^{-4}+\alpha ^{-1}+\alpha ^{7}+\alpha ^{-5})/\alpha ^{7}=\alpha ^{7}/\alpha ^{7}=1,} e 4 = Ω ( α 2 ) / Ξ ( α 2 ) = ( α 4 + α 6 + α 6 + α 1 ) / α 6 = α 6 / α 6 = 1. {\displaystyle e_{4}=-\Omega (\alpha ^{2})/\Xi '(\alpha ^{2})=(\alpha ^{-4}+\alpha ^{6}+\alpha ^{6}+\alpha ^{1})/\alpha ^{6}=\alpha ^{6}/\alpha ^{6}=1.} To, že e 3 = e 4 = 1 , {\displaystyle e_{3}=e_{4}=1,} by nás nemělo překvapit.

Opravený kód tedy má být [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Dekódování s nečitelnými znaky a malým počtem chyb

Ještě ukažme průběh výpočtu v případě, kdy je v přijatém kódu pouze jedna chyba [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ]. Opět nahradíme nečitelné znaky nulami, spočteme Γ ( x ) = ( α 8 x 1 ) ( α 11 x 1 ) {\displaystyle \Gamma (x)=(\alpha ^{8}x-1)(\alpha ^{11}x-1)} a syndromy s 1 = α 4 , {\displaystyle s_{1}=\alpha ^{4},} s 2 = α 7 , {\displaystyle s_{2}=\alpha ^{-7},} s 3 = α 1 , {\displaystyle s_{3}=\alpha ^{1},} s 4 = α 1 , {\displaystyle s_{4}=\alpha ^{1},} s 5 = α 0 , {\displaystyle s_{5}=\alpha ^{0},} a s 6 = α 2 . {\displaystyle s_{6}=\alpha ^{2}.} Sestavíme polynom syndromů S ( x ) = α 4 + α 7 x + α 1 x 2 + α 1 x 3 + α 0 x 4 + α 2 x 5 , {\displaystyle S(x)=\alpha ^{4}+\alpha ^{-7}x+\alpha ^{1}x^{2}+\alpha ^{1}x^{3}+\alpha ^{0}x^{4}+\alpha ^{2}x^{5},} a S ( x ) Γ ( x ) = α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 + α 1 x 6 + α 6 x 7 . {\displaystyle S(x)\Gamma (x)=\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}.} Spusťme rozšířený Euklidův algoritmus:

( S ( x ) Γ ( x ) x 6 ) = ( α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 + α 1 x 6 + α 6 x 7 x 6 ) = {\displaystyle {\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}\\x^{6}\end{pmatrix}}=} ( α 1 + α 6 x 1 1 0 ) ( x 6 α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 + ( α 1 + α 1 ) x 6 + ( α 6 + α 6 ) x 7 ) = {\displaystyle {\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+(\alpha ^{-1}+\alpha ^{-1})x^{6}+(\alpha ^{6}+\alpha ^{6})x^{7}\end{pmatrix}}=} ( α 1 + α 6 x 1 1 0 ) ( α 3 + α 1 x 1 1 0 ) ( α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 α 7 + ( α 5 + α 5 ) x + ( α 7 + α 7 ) x 2 + ( α 6 + α 6 ) x 3 + ( α 4 + α 4 ) x 4 + ( α 2 + α 2 ) x 5 + ( α 0 + 1 ) x 6 ) = {\displaystyle {\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{3}+\alpha ^{1}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+(\alpha ^{-5}+\alpha ^{5})x+(\alpha ^{-7}+\alpha ^{-7})x^{2}+(\alpha ^{6}+\alpha ^{6})x^{3}+\\(\alpha ^{4}+\alpha ^{4})x^{4}+(\alpha ^{2}+\alpha ^{2})x^{5}+(\alpha ^{0}+1)x^{6}\end{pmatrix}}=} ( ( 1 + α 2 ) + ( α 0 + α 6 ) x + α 7 x 2 α 1 + α 6 x α 3 + α 1 x 1 ) ( α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 α 7 + α 0 x ) . {\displaystyle {\begin{pmatrix}(1+\alpha ^{2})+(\alpha ^{0}+\alpha ^{-6})x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}}.}

Dostali jsme se k polynomu stupně nejvýš 3, a vzhledem k tomu, že ( ( 1 ) α 1 + α 6 x α 3 + α 1 x ( α 7 + α 7 x + α 7 x 2 ) ) ( α 7 + α 7 x + α 7 x 2 α 1 + α 6 x α 3 + α 1 x 1 ) = ( 1 0 0 1 ) , {\displaystyle {\begin{pmatrix}-(1)&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2})\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},} dostáváme ( ( 1 ) α 1 + α 6 x α 3 + α 1 x ( α 7 + α 7 x + α 7 x 2 ) ) ( S ( x ) Γ ( x ) x 6 ) = ( α 4 + α 7 x + α 5 x 2 + α 3 x 3 + α 1 x 4 + α 1 x 5 α 7 + α 0 x ) , {\displaystyle {\begin{pmatrix}-(1)&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2})\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}},}

a tedy S ( x ) Γ ( x ) ( α 3 + α 1 x ) ( α 7 + α 7 x + α 7 x 2 ) x 6 = α 7 + α 0 x . {\displaystyle S(x)\Gamma (x)(\alpha ^{3}+\alpha ^{1}x)-(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2})x^{6}=\alpha ^{7}+\alpha ^{0}x.}

Nechť Λ ( x ) = α 3 + α 1 x . {\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{1}x.} Netrapme se tím, že absolutní člen není 1. Kořenem polynomu je α 3 1 . {\displaystyle \alpha ^{3-1}.}

Označme Ξ ( x ) = Γ ( x ) Λ ( x ) = α 3 + α 7 x + α 4 x 2 + α 5 x 3 {\displaystyle \Xi (x)=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{-7}x+\alpha ^{-4}x^{2}+\alpha ^{5}x^{3}} a Ω ( x ) = S ( x ) Ξ ( x ) mod x 6 = α 7 + α 0 x . {\displaystyle \Omega (x)=S(x)\Xi (x){\bmod {x}}^{6}=\alpha ^{7}+\alpha ^{0}x.} Velikosti chyb hledáme ve tvaru e j = Ω ( α i j ) / Ξ ( α i j ) , {\displaystyle e_{j}=-\Omega (\alpha ^{-i_{j}})/\Xi '(\alpha ^{-i_{j}}),} kde α i j {\displaystyle \alpha ^{-i_{j}}} jsou kořeny polynomu Ξ ( x ) . {\displaystyle \Xi (x).} Ξ ( x ) = α 7 + α 5 x 2 . {\displaystyle \Xi '(x)=\alpha ^{-7}+\alpha ^{5}x^{2}.} Dostáváme e 1 = Ω ( α 4 ) / Ξ ( α 4 ) = ( α 7 + α 4 ) / ( α 7 + α 2 ) = α 3 / α 3 = 1 , {\displaystyle e_{1}=-\Omega (\alpha ^{4})/\Xi '(\alpha ^{4})=(\alpha ^{7}+\alpha ^{4})/(\alpha ^{-7}+\alpha ^{-2})=\alpha ^{3}/\alpha ^{3}=1,} e 2 = Ω ( α 7 ) / Ξ ( α 7 ) = ( α 7 + α 7 ) / ( α 7 + α 4 ) = 0 / α 5 = 0 , {\displaystyle e_{2}=-\Omega (\alpha ^{7})/\Xi '(\alpha ^{7})=(\alpha ^{7}+\alpha ^{7})/(\alpha ^{-7}+\alpha ^{4})=0/\alpha ^{5}=0,} e 3 = Ω ( α 2 ) / Ξ ( α 2 ) = ( α 7 + α 2 ) / ( α 7 + α 6 ) = α 3 / α 3 = 1. {\displaystyle e_{3}=-\Omega (\alpha ^{2})/\Xi '(\alpha ^{2})=(\alpha ^{7}+\alpha ^{2})/(\alpha ^{-7}+\alpha ^{-6})=\alpha ^{-3}/\alpha ^{-3}=1.} To, že e 3 = 1 , {\displaystyle e_{3}=1,} by nás nemělo překvapit.

Opravený kód tedy má být [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Reference

  1. Reed & Chen 1999, s. 189
  2. Phobos Lander Coding System: Software and Analysis [online]. [cit. 2012-02-25]. Dostupné online. Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  3. Sandforce SF-2500/2600 Product Brief [online]. [cit. 2012-02-25]. Dostupné online. Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  4. Gill unknown, s. 3
  5. Lidl & Pilz 1999, s. 229
  6. Gorenstein, Peterson & Zierler 1960
  7. Gill unknown, s. 47

Literatura

Hlavní literatura

  • HOCQUENGHEM, A. Codes correcteurs d'erreurs. Chiffres. Paris: September 1959, s. 147–156. (French) Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • BOSE, R. C.; RAY-CHAUDHURI, D. K. On A Class of Error Correcting Binary Group Codes. Information and Control. March 1960, s. 68–79. ISSN 0890-5401. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.

Sekundární literatura

  • GILBERT, W. J.; NICHOLSON, W. K. Modern Algebra with Applications. 2nd. vyd. [s.l.]: John Wiley, 2004. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • GILL, John. EE387 Notes #7, Handout #28. [s.l.]: Stanford University, unknown. Dostupné v archivu pořízeném dne 30-06-2014. S. 42–45. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • GORENSTEIN, Daniel; PETERSON, W. Wesley; ZIERLER, Neal. Two-Error Correcting Bose-Chaudhuri Codes are Quasi-Perfect. Information and Control. 1960, s. 291–294. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • LIDL, Rudolf; PILZ, Günter. Applied Abstract Algebra. 2nd. vyd. [s.l.]: John Wiley, 1999. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • LIN, S.; COSTELLO, D. Error Control Coding: Fundamentals and Applications. Englewood Cliffs, NJ: Prentice-Hall, 2004. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • MACWILLIAMS, F. J.; SLOANE, N. J. A. The Theory of Error-Correcting Codes. New York, NY: North-Holland Publishing Company, 1977. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • REED, Irving S.; CHEN, Xuemin. Error-Control Coding for Data Networks. Boston, MA: Kluwer Academic Publishers, 1999. ISBN 0-7923-8528-4. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.
  • RUDRA, Atri. CSE 545, Error Correcting Codes: Combinatorics, Algorithms and Applications. [s.l.]: University at Buffalo Dostupné v archivu pořízeném dne 02-07-2010. Je zde použita šablona {{Citation}} označená jako k „pouze dočasnému použití“.