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 .