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