Informacje potrzebne do rozwiązanie zadania z kodem Golaya.

Transkrypt

Informacje potrzebne do rozwiązanie zadania z kodem Golaya.
Informacje potrzebne do rozwiązanie zadania z
kodem Golaya.
Kod Golaya pozwala zerojedynkowy ciąg długości 12 uzupełnić o 11 symboli
tak, można było skorygować 3 błędy.
Ciąg a0 , a1 , . . . , a11 zer i jedynek utożsamiamy z wielomianem w(x) = (a0 +
a1 x + . . . + a11 x11 ) · x11
Niech g(x) = x11 + x10 + x6 + x5 + x4 + x2 + 1.
Dane słowo, a raczej wielomian w(x) kodujemy jako v(x) = w(x)−w(x) mod g(x).
Zauważmy, że wielomian v jest podzielny przez g. Co więcej, wielomiany w i v mają
identyczne współczynniki przy potęgach od 11 do 22.
Zakładamy, że przesyłamy współczynniki wielomianu v i podczas przesyłania
mogą wystąpić najwyżej trzy błędy (mogą ulec zmianie najwyżej trzy współczynniki, przesyłana informacja nie ulega skróceniu, ani wydłużeniu).
Przypuśćmy, że otrzymaliśmy współczynniki wielomianu v 0 . Mając v 0 powinniśmy odtworzyć v, a mając v – wyjściowy ciąg odtwarzamy biorąc v(x) div x11
(albo po prostu usuwając 11 pierwszych (mniej znaczących) współczynników v).
Wielomian g ma następującą własność: jeżeli g(x) dzieli v(x) = a0 + a1 x +
. . . + a22 x22 , to g(x) dzieli C(v)(x) = a22 + a0 x + a1 x2 + . . . + a21 x22 (C oznacza
więc operację cyklicznego przesunięcia współczynników wielomianu). Ponadto, kod
Golaya jest doskonały: każdy wielomian różni się najwyżej w trzech miejscach od
wielomianu podzielnego przez g(x).
Algorytm korygujący błędy: Dane: wielomian V stopnia 22 (23 współczynniki).
1) obliczamy i zapamiętujemy reszty z dzielenia przez g(x) wszystkich wielomianów stopnia 22 o ¬ 3 niezerowych współczynnikach razem z tymi wielomianami ,
2) licznik := 0,
3) dopóki V nie dzieli się przez g(x)
(a) sprawdź, czy jest pamiętany wielomian u(x) taki, że V mod g(x) =
u(x) mod g(x),
(b) jeżeli jest takie u, to V := V − u,
(c) przesuń cyklicznie V i zwiększ licznik o 1,
4) V przesuń cyklicznie 23 − licznik razy ,
5) zwróć V .

Podobne dokumenty