24.01.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!