kodowanie w oparciu o macierz parzys- tosci 2 Kody Reeda-Mullera
kodowanie w oparciu o macierz parzys- tosci 2 Kody Reeda-Mullera
kodowanie w oparciu o macierz parzys- tosci 2 Kody Reeda-Mullera
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Kodowanie i kompresja<br />
Streszczenie<br />
Studia dzienne<br />
Wykład 4<br />
1 <strong>Kody</strong> liniowe - <strong>kodowanie</strong> w <strong>oparciu</strong> o <strong>macierz</strong> <strong>parzys</strong>tości<br />
Niech H będzie <strong>macierz</strong>ą <strong>parzys</strong>tości kodu liniowego, rozmiaru k × n, rzędu k. Wówczas,<br />
słowa kodowe mają długość n, każde słowo kodowe koduje n − k bitów danych.<br />
Nasze zadanie, to jednoznacznie przyporządkować słowo kodowe do każdego binarnego<br />
ciągu danych v 1 . . . v n−k . Robimy to w następujący sposób:<br />
• W układzie równań Hx = 0 ustalamy n − k zmiennych x i1 , . . . , x in−k , którym<br />
przyporządkowane są wartości v 1 , . . . , v n−k .<br />
• W efekcie uzyskujemy układ k równań liniowych z k niewiadomymi H ′ x ′ =<br />
b ′ , który rozwiązujemy standardowymi metodami algebry liniowej. Macierz H ′<br />
składa się z kolumn <strong>macierz</strong>y H o numerach spoza zbioru i 1 , . . . , i n−k .<br />
• UWAGA: Powyżej zdefiniowany układ k równań liniowych z k niewiadomymi<br />
powinien mieć jednoznaczne rozwiązanie. A zatem, <strong>macierz</strong> H ′ powinna mieć<br />
rząd k. Oznacza to, że kolumny odpowiadające bitom “korygującym” powinny<br />
być liniowo niezależne!<br />
Przykład: <strong>Kody</strong> Hamminga (2 m − 1 − m, 2 m ). Jeśli bitom danych przyporządkujemy<br />
wartości wszystkich zmiennych, które nie są potęgami dwójki, wówczas <strong>macierz</strong> H ′ w<br />
układzie równań H ′ x ′ = b ′ będzie <strong>macierz</strong>ą jednostkową.<br />
Lecz przyporządkowanie bitom danych zmiennych x m+1 , . . . , x 2 m −1 spowoduje, że układ<br />
równań H ′ x ′ = b ′ nie będzie miał jednoznacznego rozwiązania!<br />
2 <strong>Kody</strong> <strong>Reeda</strong>-<strong>Mullera</strong> - powtórzenie<br />
Funkcję boolowską m zmiennych f : Z2<br />
m → Z 2 reprezentujemy przy pomocy słowa<br />
binarnego o długości 2 m , i-ty bit tego słowa reprezentuje wartość funkcji f dla argumentu<br />
będącego reprezentacją binarną liczby i.<br />
Definicja 1 Kodem <strong>Reeda</strong>-<strong>Mullera</strong> o długości n = 2 m i stopniu r (dla r ≤ m) nazywamy<br />
kod binarny R(r, m) złożony ze wszystkich słów binarnych o długości n reprezentujacych<br />
˛ wielomiany n zmiennych stopnia co najwyżej r.<br />
1
Dwa słowa binarne w = w 1 . . . w n i v = v 1 . . . v n są ortogonalne gdy ich iloczyn<br />
skalarny jest równy 0, tzn.<br />
n∑<br />
w · v = v i w i = 0.<br />
i=1<br />
Kodem dualnym do kodu liniowego K, oznaczanym przez K ⊥ nazywamy kod złożony<br />
ze wszystkich słow ortogonalnych do wszystkich słów kodowych kodu K.<br />
Twierdzenie 1 Kod <strong>Reeda</strong>-<strong>Mullera</strong> R(r, m) zawiera<br />
( )<br />
r∑ m<br />
k =<br />
i=0<br />
i<br />
bitów danych.<br />
Kodem dualnym do R(r, m) jest kod R(m − r − 1, m).<br />
Algorytm kodowania dla kodu R(r, m): ciąg k = ∑ r<br />
i=0<br />
( m<br />
i<br />
)<br />
bitów danych u1 . . . u k<br />
kodujemy mnożąc w przez <strong>macierz</strong>, której kolejnymi wierszami są funkcje charakterystyczne<br />
wszystkich jednomianów stopnia co najwyżej r.<br />
3 <strong>Kody</strong> liniowe – ogólna metoda dekodowania<br />
Definicja 2 Załóżmy, że po przejściu przez kanał komunikacyjny otrzymaliśmy słowo<br />
binarne w, gdy wysłane było słowo kodowe v. Wówczas wektor e(w, v) = w + v<br />
nazywamy wektorem błędów.<br />
Zauważmy, że wektor błędów ma jedynki na tych pozycjach, na których wystąpiły<br />
przekłamania. Ponadto, zgodnie z arytmetyką w Z n 2 , zachodzi v = w + e, czyli do<br />
odkodowania słowa kodowego wystarczy wyznaczyć wektor błędów.<br />
Definicja 3 Niech H będzie <strong>macierz</strong>a˛<br />
<strong>parzys</strong>tości (o rozmiarze m × n) kodu liniowego<br />
K. Wówczas syndromem słowa w ∈ {0, 1} nazywamy słowo s(w) = Hw T (w T oznacza<br />
transpozycję).<br />
Zauważmy, że syndrom każdego słowa kodowego kodu K jest równy wektorowi zerowemu.<br />
Ponadto, zachodzi następująca własność:<br />
Lemat 1 Załózmy, że przez kanał komunikacyjny przesłane zostało słowo kodowe v<br />
a odebrane słowo w, stosowaliśmy kod liniowy z <strong>macierz</strong>a˛<br />
<strong>parzys</strong>tości H. Wówczas<br />
syndrom słowa w jest równy syndromowi wektora błędów e(w, v).<br />
2
De<strong>kodowanie</strong><br />
Dane: Słowo w oraz <strong>macierz</strong> <strong>parzys</strong>tości H. A zatem wyznaczyć też możemy syndrom<br />
słowa w, s(w).<br />
Szukamy: słowa kodowego v, takiego że d(w, v) jest minimalna.<br />
Algorytm: Szukamy słowa binarnego e długości n o najmniejszej liczbie jedynek<br />
spośrów zbioru słów, których syndrom jest równy s(w), czyli Hw = He. Następnie<br />
przyjmujemy, że e jest wektorem błędów, czyli v = w + e.<br />
Uzasadnienie: Liczba jedynek w wektorze błędów odpowiada liczbie błęów transmisji.<br />
Ponadto,<br />
H(w + e) = H(w) + H(e) = H(w) + H(w) = 0.<br />
Przykład: Powyższa metoda stosowana jest w kodzie Hamminga. Zaletą kodu Hamminga<br />
jest, iż wartość syndromu jednoznacznie i efektywnie identyfikuje wektor błędów<br />
o najmniejszej liczbie jedynek.<br />
Twierdzenie 2 Niech K będzie binarnym kodem liniowym o <strong>macierz</strong>y <strong>parzys</strong>tości H<br />
rozmiaru m × n i wadze w(K) = p. Wówczas:<br />
• czas zakodowania n − m bitów danych jest rzędu O(m · n + m 3 ); w kodzie<br />
systematycznym jest to O(m · n)<br />
• czas dekodowania jednego słowa kodowego (odpowiadajacego ˛ n−m bitom danych)<br />
jest rzędu O ( ∑ ) ) ⌊(p−1)/2⌋<br />
i=1 · m · n .<br />
( n<br />
i<br />
• dla długich ciagów ˛ danych możliwe jest szybsze de<strong>kodowanie</strong>, ale kosztem pamięci:<br />
– Preprocessing: w czasie O ( ∑ ( ) ) ⌊(p−1)/2⌋ n<br />
i=1 i · m · n wyznaczamy dla każdej<br />
wartości syndromu s słowo e o minimalnej wadze wśród słów spełniajacych<br />
˛<br />
warunek He = s (czyli s(e) = s); wyniki umieszczamy w tablicy A o 2 m<br />
elementach długości n.<br />
– De<strong>kodowanie</strong>: dla każdego ciagu ˛ o długości n wyznaczamy jego syndrom w<br />
czasie O(mn) i ustalamy wektor błędów w <strong>oparciu</strong> o tablicę A.<br />
4 <strong>Kody</strong> <strong>Reeda</strong>-<strong>Mullera</strong> – efektywny algorytm dekodowania<br />
Twierdzenie 3 Minimalna waga kodu R(r, m) wynosi 2 m−r .<br />
Wniosek 1 Kod R(r, m) koryguje 2 m−r−1 − 1 błędów.<br />
3
4.1 Interpretacja geometryczna<br />
Definicja 4 Niech K będzie r-wymiarowa˛<br />
podprzestrzenia˛<br />
liniowa˛<br />
Z2 m . Wówczas zbiór<br />
a + K = {a + b | b ∈ K}<br />
dla a ∈ {0, 1} m nazywamy przestrzenia˛<br />
afiniczna˛<br />
wymiaru r.<br />
Fakt 1 Niech H będzie <strong>macierz</strong>a˛<br />
<strong>parzys</strong>tości kodu K o długości n (czyli K jest podrzestrzenia˛<br />
liniowa˛<br />
Z2 n ). Wówczas przestrzeń afiniczna a + K równa jest zbiorowi<br />
rozwiazań ˛ układu równań liniowych Hx = c, gdzie c = Ha T .<br />
Definicja 5 Funkcja˛<br />
charakterystyczna˛<br />
zbioru X ⊆ {0, 1} n nazywamy słowo binarne<br />
f = f 2 n −1 . . . f 1 f 0 takie, że f i = 1 wtedy i tylko wtedy gdy p i ∈ X.<br />
Twierdzenie 4 Funkcja charakterystyczna r wymiarowej przestrzeni afinicznej w Z m 2<br />
jest wielomianem boolowskim stopnia m − r.<br />
Wniosek 2 (1) Kod <strong>Reeda</strong>-<strong>Mullera</strong> R(r, m) jest równy podprzestrzeni liniowej rozpiętej<br />
na wektorach odpowiadajacych ˛ wszystkim funkcjom charakterystycznym przestrzeni afinicznych<br />
w Z2<br />
m o wymiarze m − r lub większym.<br />
(2) Funkcja charakterystyczna przestrzeni afinicznej rozmiaru r+1 jest elementem kodu<br />
dualnego do R(r, m) (czyli kodu R(m − (r + 1), m)).<br />
Idea dowodu. Na mocy twierdzenia 4, R(r, m) zawiera wszystkie funkcje charakterystyczne<br />
wszystkich przestrzeni afinicznych o wymiarze s ≥ m−r. Z drugiej strony,<br />
każdy jednomian x i1 . . . x is opisuje przestrzeń afiniczną (zdefiniowaną odpowiednimi<br />
równaniami), co daje (1). Natomiast (2) wynika z (1) i twierdzenia 1.<br />
4.2 Algorytm dekodowania<br />
Idea algorytmu Do odbiorcy dotarło słowo w. Zakładamy, że liczba błędów jest<br />
mniejsza niż 2 m−r−1 − 1. Dla każdej pozycji w chcemy ustalić czy wystąpił na niej<br />
błąd:<br />
• Każdą pozycję potraktujemy jako punkt w przestrzeni Z m 2 a dokładniej jako 0-<br />
wymiarową przestrzeń afiniczną.<br />
• <strong>parzys</strong>tością przestrzeni afinicznej L nazywać będziemy <strong>parzys</strong>tość liczby błędów<br />
w słowie w na pozycjach odpowiadających punktom należącym do L;<br />
• jeśli w jest słowem kodowym to f L · w = 0, gdzie f L to funkcja charakterystyczna<br />
dowolnej przestrzeni afinicznej rozmiaru r + 1; ogólnie, f L · w wyznacza<br />
<strong>parzys</strong>tość L;<br />
4
• Trik: <strong>parzys</strong>tość przestrzeni afinicznej L rozmiaru s ≤ r można wyznaczyć na<br />
podstawie <strong>parzys</strong>tości przestrzeni afinicznych rozmiaru s + 1 zawierających L! A<br />
<strong>parzys</strong>tość przestrzeni rozmiaru 0 odpowiadjącej bitowi w słowie w jest równa 1<br />
wtedy i tylko wtedy gdy na tej pozycji wystąpił błąd.<br />
Twierdzenie 5 Każda przestrzeń afiniczna L w Z m 2 rozmiaru s jest zawarta w 2 m−s − 1<br />
różnych przestrzeniach afinicznych rozmiaru s + 1. Każdy punkt, który nie należy do L,<br />
należy do dokładnie jednej przestrzeni afinicznej rozmiaru s + 1.<br />
Wniosek 3 Jeśli liczba błędów w odebranym słowie w jest mniejsza od 2 m−r−1 wówczas<br />
<strong>parzys</strong>tość przestrzeni afinicznej L rozmiaru s ≤ r jest taka sama jak <strong>parzys</strong>tość<br />
większości przestrzeni afinicznych rozmiaru s + 1 zawierajacych ˛ L.<br />
Idea dowodu Załóżmy, że odebrane słowo w ma t < 2 m−r−1 błędów. Z powyższego<br />
twierdzenia wiemy, że każdy punkt nie należący do L należy do tylko jednej przestrzeni<br />
afinicznej L ′ rozmiaru s + 1 zawierającej L. Parzystość L i L ′ może się więc różnić<br />
tylko wtedy, gdy L ′ zawiera punkt odpowiadający bitowi, na którym wystąpił błąd. A<br />
takich L ′ jest nie więcej niż 2 m−r−1 − 1. A wszystkich przestrzeni rozmiaru s + 1<br />
zawierających L jest<br />
2 m−s − 1 > 2 · (2 m−r−1 − 1).<br />
Algorytm dekodowania dla kodu R(r, m)<br />
Krok bazowy Niech w będzie słowem odebranym po przejściu przez kanał komunikacyjny.<br />
Przestrzeń afiniczną L rozmiaru r +1 nazywamy <strong>parzys</strong>tą, jeśli iloczym skalarny<br />
w i wektora charakterystycznego L jest równy 0; w przeciwnym razie L jest nie<strong>parzys</strong>ta.<br />
Krok rekurencyjny Dla s = r, r −1, . . . , 1, 0, i dla każdej przestrzeni afinicznej L rozmiaru<br />
s, L oznaczamy jako nie<strong>parzys</strong>tą jeśli większość przestrzeni afinicznym rozmiaru<br />
s + 1 zawierających L jest oznaczonych jako nie<strong>parzys</strong>te. W przeciwnym razie L oznaczamy<br />
jako <strong>parzys</strong>tą.<br />
Korekcja błędów Wartość i-tego bitu słowa w zostaje zmieniona wtedy i tylko wtedy,<br />
gdy przestrzeń afiniczna rozmiaru zero składająca się (tylko) z punktu p i została oznaczona<br />
jako nie<strong>parzys</strong>ta.<br />
Wniosek 4 Kod R(r, m) koryguje 2 m−r−1 − 1 błędów.<br />
5