Kompresja
Transkrypt
Kompresja
Wieczorowe Studia Licencjackie Wrocław, 29.05.2007 Kodowanie informacji Kody korygujące błędy Wykład 12 (nieoficjalna notatka) BINARNE KODY LINIOWE Arytmetyka binarna (modularna): − operatory ⊕ i • (mnożenie) − interpretacja: w ciele operacji mod 2 (Z2) − własności (mnożenie przez skalar, odejmowanie) − uwaga: odejmowanie, to „to samo” co dodawanie (dlaczego?) KODY OPISYWANE (TYLKO) ZA POMOCĄ JEDNORODNYCH UKŁADÓW RÓWNAŃ LINIOWYCH: − układ jednorodny: opisany równianiem Hx=0, gdzie H to macierz nad {0,1}; − zbiór słów kodowych = zbiór wszystkich rozwiązań układu Hx=0. − Przykłady (powtórzeniowy Km, parzystości Pm, kody „prostokątne”). Definicja Binarny kod blokowy nazywamy liniowym jeśli dla każdych dwóch słów kodowych a, b, suma a⊕b jest również słowem kodowym. Przykłady: powtórzeniowy, parzystości, ... Obserwacja: wiele własności korekcyjnych kodów możemy badać tylko na podstawie zbioru jego słów kodowych (abstrahując od sposobu kodowania/dekodowania). Twierdzenie. Kod jest liniowy ⇔ zbiór jego słów kodowych jest równy zbiorowi rozwiązań pewnego jednorodnego układu równań liniowych. Dowód: ⇐ Jeśli Hx=0 oraz Hy=0 to H(x+y)=Hx+Hy=0 ⇒ ... pomijamy (troszkę algebry liniowej). Definicja. Waga Hamminga Waga Hamminga słowa – liczba bitów różnych od zera. Waga Hamminga kodu K – min. liczba bitów różnych od zera w słowach kodowych różnych od ciągu samych zer. Oznaczenia: - (minimalna) odległość kodu K: d(K) - waga kodu K: ω(K) Definicja. Wzorzec błędów Jeśli po przesłaniu słowa w do odbiorcy dotarło słowo v, wówczas mówimy, że e=w⊕v jest wzorcem błędów. Zauważmy, że e zawiera wartość 1 dokładnie na tych pozycjach, na których w i v są różne. WNIOSEK: - wprowadzenie błędów na określonych bitach jest w arytmetyce mod2 równoważne dodaniu odpowiedniego wzorca błędów! Twierdzenie. Minimalna odległość Hamminga binarnego kodu liniowego K jest równa jego wadze: d(K) = ω(K) Dowód: Obserwacja: wektor zerowy należy do każdego kodu liniowego. ω(K) ≥ d(K): - niech w to wektor o minimalnej wadze - wówczas ω(K) = ω(w) = d(w,0) ≥ d(K) d(K) ≥ ω(K): - niech u, v to najbliższe siebie słowa kodowe - wówczas e=u+v też jest słowem kodowym - a zatem d(K)=d(u,v)=d(e,0) = ω(e) ≥ ω(K). WNIOSEK. 1. Kod liniowy wykrywa t błędów ⇔ jego waga jest większa od t. 2. Kod liniowy poprawia t błędów ⇔ jego waga jest większa od 2t. PRZYKŁAD - KOD PROSTOKĄTNY 2x3 Definicja. Macierz parzystości Macierz H nazywana jest macierzą parzystości kodu K długości n jeśli zbiór słów kodowych K jest równy zbiorowi rozwiązań równania H x = 0. Fakt Dla każdego kodu liniowego istnieje (co najmniej jedna) macierz parzystości. Jak korygować jeden błąd na n bitach danych, stosując jak najmniejszą ilość nadmiarowej informacji... ? KOD HAMMINGA Hmm Długość słowa kodowego: Liczba bitów danych: Minimalna odległość Hamminga: Własność: n = 2m-1 k = 2m – m - 1 [ R(Hm)=k/n ] 3 poprawia pojedyncze błędy. Lemat (podstawa konstrukcji kodów!) Binarny kod liniowy poprawia jeden błąd ⇔ (każda) macierz parzystości H dla K ma wszystkie kolumny różne i niezerowe. Dowód: ⇒ - Gdyby j-ta kolumna H była zerowa to układ Hx=0 spełniałby wektor dj z jedną jedynką (na j-tej pozycji), - wtedy minimalna waga Hamminga, a tym sama odległość Hamminga jest równa 1 czyli kod nie może poprawiać żadnego błędu! - Gdyby i-ta i j-ta kolumna były równe, to układ Hx=0 spełniałby wektor dij = di +dj z jedynkami (tylko) na i-tej i j-tej pozycji. Znowu minimalna waga mniejsza od 3, czyli kod nie poprawia żadnego błędu. ⇐ Niech H to macierz parzystości, Hi to jej i-ta kolumna. Pokażemy, że słowa z jedną jedynką i z dwoma jedynkami nie mogą być kodowymi, reszta będzie wynikać z twierdzenia o równości (min.) wagi i (min.) odległości kodu. - Jedna jedynka (pozycja i): iloczyn H di (gdzie di ma jedynkę tylko na pozycji i) daje w wyniku i-tą kolumnę H – a ta z zał. różna od zera - więc di nie spełnia układu równań H x = 0. - Dwie jedynki (pozycje i i j): H dij (gdzie dij ma jedynki dokładnie na pozycjach i oraz j) to suma dwóch kolumn, czyli H dij= Hi+ Hj - ale skoro wszystkie kolumny są różne to Hi+ Hj ≠ 0 - a zatem wektor dij nie spełnia układu równań, nie jest słowem kodowym. C.N.D. //Pytanie: ile może być bitów danych gdy macierz parzystości ma rozmiar m × n ???? WNIOSEK. (intuicja) Dla uzyskania korekcji jednego błędu przy minimalnej utracie zawartości informacyjnej należy utworzyć macierz parzystości o jak największej liczbie kolumn. Kod Hamminga Hmm: 1. Konstruujemy macierz parzystości o 2m-1 kolumnach i m wierszach, w i-tej kolumnie umieszczamy reprezentację binarną liczby i. Kodowanie: − Macierz parzystości H ma rozmiar m × (2m-1). − H definiuje m równań z r=2m-1 niewiadomymi x1,…, xr − Za wartości 2m-1-m niewiadomych przyjmujemy wartości p = 2m-1-m bitów danych, Które niewiadome odpowiadają bitom danych: − niewiadome odpowiadające kolumnom z więcej niż jedną jedynką, − Po tej operacji wartości pozostałych zmiennych wyznaczamy jako rozwiązania układu m równań liniowych z m niewiadomymi. − postać zakodowana jest równa x1,..,xr. Przykład: Hm3 Dekodowanie: − odczytujemy blok r = 2m-1 bitów równy x = x1,..,xr − jeśli H x = 0 nie jest spełniony, traktujemy wektor H x jako liczbę binarną, i zmieniamy wartość bitu xHx w wektorze x − odtwarzamy p bitów danych jako x1,...,xp (dla p=2m-1-m). Oznaczenie Hmm = Hm(2m-1, 2m-1-m) Przykład: Hm3 Twierdzenie 3 Powyższy kod umożliwia korekcję jednego błędu. Dowód: Załóżmy, że błąd wystąpił na bicie i. - Dla wektora di (jedna jedynka, na i-tej pozycji) mamy Hdi = binarna reprezentacja liczby i (wynika z konstrukcji H). - Niech y = x + di będzie wektorem x z błędem na pozycji i. Wówczas H y = H x + H di = bin( i ) . - Zatem algorytm „poprawi” y na wartość y + di = x, czyli odtworzy wektor oryginalny. CND PRZYKŁAD: Hm3. UWAGI: 1. Z powyższego twierdzenia wynika, że każde dwa słowa kodowe kodu Hamminga różnią się na co najmniej 3 bitach. 2. Kody Hamminga są optymalne w tym sensie, że każdy ciąg, który nie jest słowem kodowym znajduje się w odległości Hamminga 1 od pewnego słowa kodowego. Zatem, żaden ciąg nie będący słowem kodowym nie może być wykorzystany jako słowo kodowe. Dowód: stosując konstrukcję z dowodu korekcji jednego błędu przez kody Hamminga. - Hy=v - wtedy y + dv jest słowem kodowym na mocy powyższego twierdzenia (czyli y „zamieniliśmy” na słowo kodowe przy pomocy zanegowania jednego bitu!). 3. Zawartość informacyjna kodu Hamminga dąży do 1 wraz ze wzrostem m, ale czym większe m tym gorsze zabezpieczenie przed błędami (tolerujemy tylko jeden błąd na 2m bitach). 4. Kodem Hamminga nazywamy każdy kod o macierzy parzystości złożonej ze wszystkich niezerowych wektorów o ustalonej długości (niezależnie od kolejności tych wektorów oraz sposobu kodowania/dekodowania danych wejściowych).