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).