Kodowanie i kompresja 1 Kody liniowe
Transkrypt
Kodowanie i kompresja 1 Kody liniowe
Kodowanie i kompresja Streszczenie Studia wieczorowe Wykład 4, 8.03.2005 1 Kody liniowe - kodowanie w oparciu o macierz parzystości Niech H b˛edzie macierza˛ parzystości kodu liniowego, rozmiaru k × n, rz˛edu k. Wówczas, słowa kodowe maja˛ długość n, każde słowo kodowe koduje n − k bitów danych. 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 . • 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 równań H 0 x0 = b0 nie b˛edzie miał jednoznacznego rozwiazania! ˛ 2 Kody liniowe - dekodowanie 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 ˛ przen kłamania. Ponadto, zgodnie z arytmetyka˛ w Z2 , zachodzi v = w + e, czyli do odkodowania słowa kodowego wystarczy wyznaczyć wektor bł˛edów. 1 Definicja 2 Niech H b˛edzie macierza˛ parzystości (o rozmiarze m × n) kodu liniowego K. Wówczas syndromem słowa w ∈ {0, 1} 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ść: 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). Dekodowanie 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 spośrów 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, wadze w(K) = p, rz˛edu m. Wówczas: • czas zakodowania n − m bitów danych jest rz˛edu O(m · n + m3 ). • 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 Uwaga. Czas dla dekodowania długich ciagów ˛ danych można obniżyć wykonujac ˛ preprocessing. Zwi˛eksza to jednak wymagania pami˛eciowe. 3 Kompresja danych: bezstratna Dane niezależne: mamy alfabet A = {a1 , . . . , an } i prawdopodobieństwa wyst˛epowania symboli p1 , . . . , pn . Prawdopodobieństwa wyst˛epowania symboli na poszczególnych pozycjach w tekście sa˛ niezależne. 2 Kodowanie K : A → {0, 1}∗ przydziela każdemu elementowi A ciag ˛ binarny. Wymagamy, aby kodowanie było jednoznaczne. Średnia˛ długościa˛ kodu K nazywamy n X pi |K(ai )|. i=1 Kodem optymalnym dla danych prawdopodobieństw p1 , . . . , pn nazywamy kod o minimalnej średniej długości. Cel: chcemy znaleźć kod optymalny. Twierdzenie 2 Niech p1 ≥ p2 ≥ . . . ≥ pn oznaczaja˛ prawdopodobieństwa wyst˛epowania symboli. Optymalny kod prefiksowy dla takich prawdopodobieńst wyst˛epowania symboli spełnia nast˛epujace ˛ warunki: • jeśli pi > pj , to |K(ai )| ≤ |K(aj )|; • słowa kodowe dla symboli an−1 i an maja˛ równe długości. 3.1 Statyczne kody Huffmana Dane: prawdopodobieństwa P (a1 ), . . . , P (an ) symboli a1 , . . . , an , gdzie n > 1. Poj˛ecie: drzewo kodu prefiksowego. Algorytm tworzenia słów kodowych: niech A = {a1 , . . . , an }, gdzie n > 1. Jeśli |A| = 2 wówczas przyporzadkuj ˛ elementom A słowa jednobitowe 0 i 1. W przeciwnym razie: 1. wybierz a, b ∈ A o najmniejszych prawdopodobieństwach; 2. usuń a i b z A, dodaj do A symbol a0 o prawdopodobieństwie P (a0 ) = P (a) + P (b); 3. wyznacz kody Huffmana K 0 dla nowego zbioru A i nowych prawodpodobieństw; 4. przyporzaduj ˛ K(c) = K 0 (c) dla każdego c 6∈ {a, b} oraz K(a) = K 0 (a)0 i 0 K(b) = K (b)1. Twierdzenie 3 Kody Huffmana sa˛ optymalnymi kodami prefiksowymi. Algorytm kompresji: każdy symbol ai w tekście źżódłowym jest zamieniany na K(ai ). Algorytm dekompresji: kod Huffmana jest kodem prefiksowym, dlatego też każde słowo kodowe można odkodować jednoznacznie bez konieczności czytania symboli połoózonych na prawo od niego. Przykład. Znajdź kody Huffmana dla prawdopodobieństw 0, 2; 0, 2; 0, 4; 0, 1 (kompresja, dekompresja przykładowego ciagu). ˛ 3