kodowanie w oparciu o macierz parzy
Transkrypt
kodowanie w oparciu o macierz parzy
Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład 13 1 Kody liniowe - kodowanie w oparciu o macierz parzystości Przykład Różne macierze parzystości dla kodu powtórzeniowego. Co wiemy z algebry • układ k równań liniowym n zmiennych (k ≤ n) odpowiada macierzy H rozmiaru k × n; • zbiór rozwiazań ˛ układu równań tworzy podprzestrzeń liniowa˛ Z2n ; • ale rozmiar tej podprzestrzeni zależy od rz˛edu macierzy H – maksymalnej liczby liniowo niezależnych wierszy/kolumn (p. przykład powyżej); • dlatego ograniczymy si˛e do macierzy, w których wszystkie wiersze sa˛ liniowo niezależne, wi˛ec rzad ˛ macierzy to k (pozostałe wiersze nie sa˛ w ogóle potrzebne). • wówczas rzad ˛ podprzestrzeni to n − k, liczba słów kodowych to 2n−k (ponieważ rozważamy ciało Z2 ); • ... a zawartość informacyjna kodu to (n − k)/n. Wniosek. Niech H b˛edzie macierza˛ parzystości kodu liniowego, rozmiaru k × n, rz˛edu k (k < n). Wówczas, słowa kodowe maja˛ długość n, każde słowo kodowe koduje n − k bitów danych. Przypomnienie Macierz rz˛edu k zawiera k liniowo niezależnych wierszy i k liniowo niezależnych kolumn. Nasze zadanie, to jednoznacznie przyporzadkować ˛ słowo kodowe do każdego binarnego ciagu ˛ danych v1 . . . vn−k . Robimy to w nast˛epujacy ˛ sposób: • W układzie równań Hx = 0 ustalamy n − k zmiennych xi1 , . . . , xin−k , którym przyporzadkowane ˛ sa˛ wartości v1 , . . . , vn−k . • W efekcie uzyskujemy układ k równań liniowych z k niewiadomymi H 0 x0 = b0 , który rozwiazujemy ˛ standardowymi metodami algebry liniowej. Macierz H 0 składa si˛e z kolumn macierzy H o numerach spoza zbioru i1 , . . . , in−k . 1 • UWAGA: Powyżej zdefiniowany układ k równań liniowych z k niewiadomymi powinien mieć jednoznaczne rozwiazanie. ˛ A zatem, macierz H 0 powinna mieć rzad ˛ k. Oznacza to, że kolumny odpowiadajace ˛ bitom “korygujacym” ˛ powinny być liniowo niezależne! Przykład: Kody Hamminga (2m − 1 − m, 2m ). Jeśli bitom danych przyporzadkujemy ˛ wartości wszystkich zmiennych, które nie sa˛ pot˛egami dwójki, wówczas macierz H 0 w układzie równań H 0 x0 = b0 b˛edzie macierza˛ jednostkowa.˛ Lecz przyporzadkowanie ˛ bitom danych zmiennych xm+1 , . . . , x2m −1 spowoduje, że układ 0 0 0 równań H x = b nie b˛edzie miał jednoznacznego rozwiazania!!! ˛ Jak uprościć obliczenia? • najlepiej, gdy macierz parzystości k × n zawiera kolumny di (z jedna˛ jedynka˛ – na pozycji i) dla i = 1, . . . , k; • te kolumny umieścimy na końcu; • wtedy układ równań przyjmuje postać (po wstawieniu bitów danych): Ix0 = b0 dla macierzy jesnostkowej I i wyliczonego wektora b0 (na podstawie bitów danych); • a rozwiazanie ˛ takiego układu jest trywialne; • gdy spełnione sa˛ powyższe warunki – mówimy, że kod jest systematyczny; • w takim kodzie bity danych wyst˛epuja˛ na poczatku ˛ słowa kodowego. 2 Kody liniowe – ogólna metoda dekodowania Definicja 1 Załóżmy, że po przejściu przez kanał komunikacyjny otrzymaliśmy słowo binarne w, gdy wysłane było słowo kodowe v. Wówczas wektor e(w, v) = w + v nazywamy wektorem bł˛edów. Zauważmy, że wektor bł˛edów ma jedynki na tych pozycjach, na których wystapiły ˛ przekłamania. Ponadto, zgodnie z arytmetyka˛ w Z2n , zachodzi v = w + e, czyli do odkodowania słowa kodowego wystarczy wyznaczyć wektor bł˛edów. Definicja 2 Niech H b˛edzie macierza˛ parzystości (o rozmiarze m × n) kodu liniowego K. Wówczas syndromem słowa w ∈ {0, 1}n nazywamy słowo s(w) = HwT (wT oznacza transpozycj˛e). Zauważmy, że syndrom każdego słowa kodowego kodu K jest równy wektorowi zerowemu. Ponadto, zachodzi nast˛epujaca ˛ własność: 2 Lemat 1 Załózmy, że przez kanał komunikacyjny przesłane zostało słowo kodowe v a odebrane słowo w, stosowaliśmy kod liniowy z macierza˛ parzystości H. Wówczas syndrom słowa w jest równy syndromowi wektora bł˛edów e(w, v). Algorytm Dekodowania Dane: Słowo w oraz macierz parzystości H. (A zatem wyznaczyć też możemy syndrom słowa w, s(w)). Szukamy: słowa kodowego v, takiego że d(w, v) jest minimalna. Algorytm: Szukamy słowa binarnego e długości n o najmniejszej liczbie jedynek, ze zbioru słów, których syndrom jest równy s(w), czyli Hw = He. Nast˛epnie przyjmujemy, że e jest wektorem bł˛edów, czyli v = w + e. Uzasadnienie: Liczba jedynek w wektorze bł˛edów odpowiada liczbie bł˛eów transmisji. Ponadto, H(w + e) = H(w) + H(e) = H(w) + H(w) = 0. Przykład: Powyższa metoda stosowana jest w kodzie Hamminga. Zaleta˛ kodu Hamminga jest, iż wartość syndromu jednoznacznie i efektywnie identyfikuje wektor bł˛edów o najmniejszej liczbie jedynek. Twierdzenie 1 Niech K b˛edzie binarnym kodem liniowym o macierzy parzystości H rozmiaru m × n i wadze w(K) = p. Wówczas: • czas zakodowania n − m bitów danych jest rz˛edu O(m · n + m3 ); w kodzie systematycznym jest to O(m · n) • czas dekodowania ³jednego słowa kodowego ˛ n − m bitom da´ (odpowiadajacego Pb(p−1)/2c ³n´ nych) jest rz˛edu O ·m·n . i=1 i • dla długich ciagów ˛ danych możliwe jest szybsze dekodowanie, ale kosztem pami˛eci: ³P b(p−1)/2c ³ ´ ´ n – Preprocessing: w czasie O · m · n wyznaczamy dla każdej i=1 i wartości syndromu s słowo e o minimalnej wadze wśród słów spełniajacych ˛ warunek He = s (czyli s(e) = s); wyniki umieszczamy w tablicy A o 2m elementach długości n. – Dekodowanie: dla każdego ciagu ˛ o długości n wyznaczamy jego syndrom w czasie O(mn) i ustalamy wektor bł˛edów w oparciu o tablic˛e A. Definicja 3 (Kod rozszerzony) Kodem rozszerzonym liniowego (n, k) kodu K nazywamy liniowy (n + 1, k) kod K 0 otrzymany z K poprzez dodanie do każdego słowa P ˛ do każdego kodowego x = x1 . . . xn symbolu xn+1 równego ni=1 xi . Inaczej mówiac, słowa kodowego dodajemy bit parzystości. 3 3 Jednoczesne wykrywanie i poprawianie bł˛edów Przykład • Czy potrafimy odróżnić dwa bł˛edy od jednego bł˛edu w kodzie Hamminga? ˛ 2 bł˛edów? • co si˛e stanie gdy zastosujemy dekodowanie po wystapieniu • CEL: chcemy odróżnić 2 bł˛edy od jednego, bo jeden możemy skorygować, a gdy sa˛ dwa to możemy poprosić o retransmisj˛e (dekodowanie b˛edzie wówczas niepoprawne). Definicja 4 Mówimy, że kod blokowy K jednocześnie poprawia t bł˛edów i wykrywa s bł˛edów (t < s) jeśli dla każdego słowa kodowego v i każdego w spełniajacego ˛ warunek d(v, w) ≤ s, odległość Hamminga słowa w od każdego słowa kodowego w0 6= w wynosi wi˛ecej niż t. Powyższa własność umożliwia jednoczesne poprawianie t bł˛edów i wykrywanie s bł˛edów w nast˛epujacym ˛ sensie: • jeśli liczba bł˛edów jest mniejsza niż t wówczas wykonywane jest dekodowanie odtwarzajace ˛ oryginalne słowo kodowe; • jeśli liczba bł˛edów znajduje si˛e w przedziale [t + 1, s], wówczas wykryty zostaje fakt wystapienia ˛ bł˛edów, ale bez możliwości ich poprawienia. Stosujemy w tym celu nast˛epujacy ˛ algorytm. Niech w b˛edzie słowem odebranym po przejściu przez kanał komunikacyjny, niech v b˛edzie najbliższym w słowem kodowym w sensie miary Hamminga: • jeśli d(v, w) ≤ t wówczas przyjmujemy, że przesłane słowo kodowe to v; • jeśli d(v, w) > t, wówczas sygnalizowany jest fakt wystapienia ˛ wi˛ecej niż t bł˛edów. Fakt 1 Kod K jednocześnie poprawia t bł˛edów i wykrywa s bł˛edów wtedy i tylko wtedy, gdy minimalna odległość kodu d(K) spełnia warunek d(K) ≥ t + s + 1. Fakt 2 Rozszerzone kody Hamminga jednocześnie poprawiaja˛ jeden bład ˛ i wykrywaja˛ dwa bł˛edy. 4 4 Co jeszcze warto wiedzieć? • Kody stosowane w praktyce do korekcji bł˛edów na nośnikach danych: dobrze sobie radza˛ z bł˛edami “seryjnymi” (ciag ˛ bitów z bł˛edami) – uzasadnione specyfika˛ uszkodzeń; • Istnieja˛ ogólne kody, które pozwalaja: ˛ – korygować b bł˛edów na słowie kodowym; – kosztem tylko 2 log n bitów korygujacych ˛ na n bitów danych (troch˛e gorzej niż kody Hamminga); • powyższe kody sa˛ kodami liniowymi! • Dlaczego wi˛ec nie poznamy tych kodów na wykładzie: czas, algebra, ... 5