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 rozwiązań układu równań tworzy podprzestrzeń liniową Z n 2 ; ale rozmiar tej podprzestrzeni zależy od rzędu macierzy H maksymalnej liczby liniowo niezależnych wierszy/kolumn (p. przykład powyżej); dlatego ograniczymy się do macierzy, w których wszystkie wiersze są liniowo niezależne, więc rząd macierzy to k (pozostałe wiersze nie są w ogóle potrzebne). wówczas rząd podprzestrzeni to n k, liczba słów kodowych to 2 n k (ponieważ rozważamy ciało Z 2 );... a zawartość informacyjna kodu to (n k)/n. Wniosek. Niech H będzie macierzą parzystości kodu liniowego, rozmiaru k n, rzędu k (k < n). Wówczas, słowa kodowe mają długość n, każde słowo kodowe koduje n k bitów danych. Przypomnienie Macierz rzędu k zawiera k liniowo niezależnych wierszy i k liniowo niezależnych kolumn. Nasze zadanie, to jednoznacznie przyporządkować słowo kodowe do każdego binarnego ciągu danych v 1... v n k. Robimy to w następujący sposób: W układzie równań Hx = 0 ustalamy n k zmiennych x i1,..., x in k, którym przyporządkowane są wartości v 1,..., v n k. W efekcie uzyskujemy układ k równań liniowych z k niewiadomymi H x = b, który rozwiązujemy standardowymi metodami algebry liniowej. Macierz H składa się z kolumn macierzy H o numerach spoza zbioru i 1,..., i n k. 1
UWAGA: Powyżej zdefiniowany układ k równań liniowych z k niewiadomymi powinien mieć jednoznaczne rozwiązanie. A zatem, macierz H powinna mieć rząd k. Oznacza to, że kolumny odpowiadające bitom korygującym powinny być liniowo niezależne! Przykład: Kody Hamminga (2 m 1 m, 2 m ). Jeśli bitom danych przyporządkujemy wartości wszystkich zmiennych, które nie są potęgami dwójki, wówczas macierz H w układzie równań H x = b będzie macierzą jednostkową. Lecz przyporządkowanie bitom danych zmiennych x m+1,..., x 2 m 1 spowoduje, że układ równań H x = b nie będzie miał jednoznacznego rozwiązania!!! Jak uprościć obliczenia? najlepiej, gdy macierz parzystości k n zawiera kolumny d i (z jedną jedynką 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): Ix = b dla macierzy jesnostkowej I i wyliczonego wektora b (na podstawie bitów danych); a rozwiązanie takiego układu jest trywialne; gdy spełnione są powyższe warunki mówimy, że kod jest systematyczny; w takim kodzie bity danych występują na początku 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łędów. Zauważmy, że wektor błędów ma jedynki na tych pozycjach, na których wystąpiły przekłamania. Ponadto, zgodnie z arytmetyką w Z n 2, zachodzi v = w + e, czyli do odkodowania słowa kodowego wystarczy wyznaczyć wektor błędów. Definicja 2 Niech H będzie macierza parzystości (o rozmiarze m n) kodu liniowego K. Wówczas syndromem słowa w {0, 1} n nazywamy słowo s(w) = Hw T (w T oznacza transpozycję). Zauważmy, że syndrom każdego słowa kodowego kodu K jest równy wektorowi zerowemu. Ponadto, zachodzi następująca 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łędó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ępnie przyjmujemy, że e jest wektorem błędów, czyli v = w + e. Uzasadnienie: Liczba jedynek w wektorze błędów odpowiada liczbie błęó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. Zaletą kodu Hamminga jest, iż wartość syndromu jednoznacznie i efektywnie identyfikuje wektor błędów o najmniejszej liczbie jedynek. Twierdzenie 1 Niech K będzie 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ędu O(m n + m 3 ); w kodzie systematycznym jest to O(m n) czas dekodowania jednego słowa kodowego (odpowiadajacego n m bitom danych) jest rzędu O ( ) ) (p 1)/2 i=1 m n. ( n i dla długich ciagów danych możliwe jest szybsze dekodowanie, ale kosztem pamięci: Preprocessing: w czasie O ( ( ) ) (p 1)/2 n i=1 i m n wyznaczamy dla każdej 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 2 m 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łędów w oparciu o tablicę A. Definicja 3 (Kod rozszerzony) Kodem rozszerzonym liniowego (n, k) kodu K nazywamy liniowy (n + 1, k) kod K otrzymany z K poprzez dodanie do każdego słowa kodowego x = x 1... x n symbolu x n+1 równego n i=1 x i. Inaczej mówiac, do każdego słowa kodowego dodajemy bit parzystości. 3
3 Jednoczesne wykrywanie i poprawianie błędów Przykład Czy potrafimy odróżnić dwa błędy od jednego błędu w kodzie Hamminga? co się stanie gdy zastosujemy dekodowanie po wystąpieniu 2 błędów? CEL: chcemy odróżnić 2 błędy od jednego, bo jeden możemy skorygować, a gdy są dwa to możemy poprosić o retransmisję (dekodowanie będzie wówczas niepoprawne). Definicja 4 Mówimy, że kod blokowy K jednocześnie poprawia t błędów i wykrywa s błędó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 w w wynosi więcej niż t. Powyższa własność umożliwia jednoczesne poprawianie t błędów i wykrywanie s błędów w następującym sensie: jeśli liczba błędów jest mniejsza niż t wówczas wykonywane jest dekodowanie odtwarzające oryginalne słowo kodowe; jeśli liczba błędów znajduje się w przedziale [t + 1, s], wówczas wykryty zostaje fakt wystąpienia błędów, ale bez możliwości ich poprawienia. Stosujemy w tym celu następujący algorytm. Niech w będzie słowem odebranym po przejściu przez kanał komunikacyjny, niech v będzie 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 wystąpienia więcej niż t błędów. Fakt 1 Kod K jednocześnie poprawia t błędów i wykrywa s błędó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łędy. 4
4 Co jeszcze warto wiedzieć? Kody stosowane w praktyce do korekcji błędów na nośnikach danych: dobrze sobie radzą z błędami seryjnymi (ciąg bitów z błędami) uzasadnione specyfiką uszkodzeń; Istnieją ogólne kody, które pozwalają: korygować b błędów na słowie kodowym; kosztem tylko 2 log n bitów korygujących na n bitów danych (trochę gorzej niż kody Hamminga); powyższe kody są kodami liniowymi! Dlaczego więc nie poznamy tych kodów na wykładzie: czas, algebra,... 5