kodowanie w oparciu o macierz parzy

Transkrypt

kodowanie w oparciu o macierz parzy
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 rozwiazań
˛
układu równań tworzy podprzestrzeń liniowa˛ Z2n ;
• ale rozmiar tej podprzestrzeni zależy od rz˛edu macierzy H – maksymalnej liczby
liniowo niezależnych wierszy/kolumn (p. przykład powyżej);
• dlatego ograniczymy si˛e do macierzy, w których wszystkie wiersze sa˛ liniowo
niezależne, wi˛ec rzad
˛ macierzy to k (pozostałe wiersze nie sa˛ w ogóle potrzebne).
• wówczas rzad
˛ podprzestrzeni to n − k, liczba słów kodowych to 2n−k (ponieważ
rozważamy ciało Z2 );
• ... a zawartość informacyjna kodu to (n − k)/n.
Wniosek. Niech H b˛edzie macierza˛ parzystości kodu liniowego, rozmiaru k × n, rz˛edu
k (k < n). Wówczas, słowa kodowe maja˛ długość n, każde słowo kodowe koduje n − k
bitów danych.
Przypomnienie Macierz rz˛edu k zawiera k liniowo niezależnych wierszy i k liniowo
niezależnych kolumn.
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 .
1
• 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
0 0
0
równań H x = b nie b˛edzie miał jednoznacznego rozwiazania!!!
˛
Jak uprościć obliczenia?
• najlepiej, gdy macierz parzystości k × n zawiera kolumny di (z jedna˛ jedynka˛ –
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): Ix0 = b0 dla
macierzy jesnostkowej I i wyliczonego wektora b0 (na podstawie bitów danych);
• a rozwiazanie
˛
takiego układu jest trywialne;
• gdy spełnione sa˛ powyższe warunki – mówimy, że kod jest systematyczny;
• w takim kodzie bity danych wyst˛epuja˛ na poczatku
˛ 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ł˛edów.
Zauważmy, że wektor bł˛edów ma jedynki na tych pozycjach, na których wystapiły
˛
przekłamania. Ponadto, zgodnie z arytmetyka˛ w Z2n , zachodzi v = w + e, czyli do odkodowania słowa kodowego wystarczy wyznaczyć wektor bł˛edów.
Definicja 2 Niech H b˛edzie macierza˛ parzystości (o rozmiarze m × n) kodu liniowego
K. Wówczas syndromem słowa w ∈ {0, 1}n 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ść:
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ł˛edó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˛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 i wadze w(K) = p. Wówczas:
• czas zakodowania n − m bitów danych jest rz˛edu O(m · n + m3 ); w kodzie
systematycznym jest to O(m · n)
• 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
• dla długich ciagów
˛
danych możliwe jest szybsze dekodowanie, ale kosztem pami˛eci:
³P
b(p−1)/2c
³ ´
´
n
– Preprocessing: w czasie O
· m · n wyznaczamy dla każdej
i=1
i
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 2m
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ł˛edów w oparciu o tablic˛e A.
Definicja 3 (Kod rozszerzony) Kodem rozszerzonym liniowego (n, k) kodu K nazywamy liniowy (n + 1, k) kod K 0 otrzymany z K poprzez dodanie do każdego słowa
P
˛ do każdego
kodowego x = x1 . . . xn symbolu xn+1 równego ni=1 xi . Inaczej mówiac,
słowa kodowego dodajemy bit parzystości.
3
3 Jednoczesne wykrywanie i poprawianie bł˛edów
Przykład
• Czy potrafimy odróżnić dwa bł˛edy od jednego bł˛edu w kodzie Hamminga?
˛
2 bł˛edów?
• co si˛e stanie gdy zastosujemy dekodowanie po wystapieniu
• CEL: chcemy odróżnić 2 bł˛edy od jednego, bo jeden możemy skorygować, a
gdy sa˛ dwa to możemy poprosić o retransmisj˛e (dekodowanie b˛edzie wówczas
niepoprawne).
Definicja 4 Mówimy, że kod blokowy K jednocześnie poprawia t bł˛edów i wykrywa s
bł˛edó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 w0 6= w wynosi
wi˛ecej niż t.
Powyższa własność umożliwia jednoczesne poprawianie t bł˛edów i wykrywanie s bł˛edów w nast˛epujacym
˛
sensie:
• jeśli liczba bł˛edów jest mniejsza niż t wówczas wykonywane jest dekodowanie
odtwarzajace
˛ oryginalne słowo kodowe;
• jeśli liczba bł˛edów znajduje si˛e w przedziale [t + 1, s], wówczas wykryty zostaje
fakt wystapienia
˛
bł˛edów, ale bez możliwości ich poprawienia.
Stosujemy w tym celu nast˛epujacy
˛ algorytm. Niech w b˛edzie słowem odebranym po
przejściu przez kanał komunikacyjny, niech v b˛edzie 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 wystapienia
˛
wi˛ecej niż t bł˛edów.
Fakt 1 Kod K jednocześnie poprawia t bł˛edów i wykrywa s bł˛edó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ł˛edy.
4
4 Co jeszcze warto wiedzieć?
• Kody stosowane w praktyce do korekcji bł˛edów na nośnikach danych: dobrze
sobie radza˛ z bł˛edami “seryjnymi” (ciag
˛ bitów z bł˛edami) – uzasadnione specyfika˛
uszkodzeń;
• Istnieja˛ ogólne kody, które pozwalaja:
˛
– korygować b bł˛edów na słowie kodowym;
– kosztem tylko 2 log n bitów korygujacych
˛
na n bitów danych (troch˛e gorzej
niż kody Hamminga);
• powyższe kody sa˛ kodami liniowymi!
• Dlaczego wi˛ec nie poznamy tych kodów na wykładzie: czas, algebra, ...
5