Kodowanie i kompresja 1 Kody liniowe
Transkrypt
Kodowanie i kompresja 1 Kody liniowe
Kodowanie i kompresja Streszczenie Studia dzienne Wykład 3, 2.03.2005 1 Kody liniowe - uogólnienie i powtórka Fakt 1 Słowa kodowe binarnego kodu liniowego o długości n tworza˛ podprzestrzeń liniowa˛ przestrzeni Z2n , gdzie Z2 oznacza ciało nad zbiorem {0, 1} z operacjami dodawania i mnoźenia modulo 2. Liniowym (n, k) kodem nazywamy k-wymiarowa˛ podprzestrzeń Z2n . Fakt 2 Kod liniowy (n, k) ma k bitów danych, tzn. słowo kodowe o długości n koduje k bitów danych oryginalnych. Definicja 1 Niech K b˛edzie kodem liniowym o długości n, którego baz˛e tworza˛ wektory e1 , . . . , ek . Macierza˛ generatorów G kodu K nazywamy macierz wymiaru k × n której i-ty wiersz jest równy ei dla i ∈ [1, k]. Przyjmijmy nast˛epujac ˛ a˛ metod˛e kodowania dla kodu liniowego (n, k) o bazie e1 , . . . , ek : P k bitom danych u1 , . . . , uk przyporzadkowujemy ˛ wektor ki=1 ui ei . Wówczas słowo kodowe dla u = u1 . . . uk jest równe v = uG, gdzie G to macierz generatorów dla K i bazy {e1 , . . . , ek }. Definicja 2 Kod liniowy nazywamy systematycznym, jeśli ma on macierz generatorów postaci G = [IB], gdzie I jest macierza˛ identycznościowa.˛ Fakt 3 Stosujac ˛ macierz postaci G = [IB] do kodowania w liniowym kodzie systematycznym (n, k), bitom danych u1 . . . uk odpowiada słowo kodowe zaczynajace ˛ si˛e od u1 . . . u k . Fakt 4 Kod liniowy z macierza˛ generatorów G = [IB] ma macierz parzystości równa˛ H = [−B T I], gdzie B T oznacza transpozycj˛e macierzy B a I 0 macierz identycznościowa˛ rozmiaru (n − k) × (n − k). Fakt 5 Kaźdy liniowy kod (n, k) ma macierz parzystości rz˛edu n − k i rozmiaru (n − k) × n. 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. 1 2 Jednoczesne wykrywanie i poprawianie bł˛edów Definicja 4 Mówimy, źe kod blokowy K jednocześnie poprawia t bł˛edów i wykrywa s bł˛edów jeśli dla kaźdego słowa kodowego v i kaźdego w spełniajacego ˛ warunek d(v, w) ≤ 0 s, odległość Hamminga słowa w od kaźdego słowa kodowego w 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 6 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. ˛ i wykrywaja˛ Fakt 7 Rozszerzone kody Hamminga jednocześnie poprawiaja˛ jeden bład dwa bł˛edy. 3 Kody Reeda-Mullera 3.1 Funkcje boolowskie ˛ kaźDefinicja 5 Funkcja boolowska m zmiennych f : Z2m → Z2 przyporzadkowuje demu ciagowi ˛ zer i jedynek o długości m wartość 0 lub 1. Niech pj oznacza wektor b˛edacy ˛ binarna˛ reprezentacja˛ liczby j. Funkcj˛e boolowska˛ m zmiennych f moźna reprezentować przy pomocy tzw. tabeli wartości. W kolumnach tej tabeli umieszczamy w kolejności rosnacej ˛ wszystkie ciagi ˛ m 2 zer i jedynek, tzn. p0 , p1 , . . . , p2m −1 , a pod nimi umieszamy wartości funkcji f dla tych ciagów. ˛ A zatem kaźda˛ boolowska˛ funkcj˛e m zmiennych moźna opisać przy pomocy ciagu ˛ binarnego o długości 2m , definiujacego ˛ wartości funkcji dla kolejnych 2m argumentów. W dalszej cz˛eści notatki funkcj˛e boolowskie b˛edziemy cz˛esto utoźsamiać z taka˛ ich reprezentacja.˛ 3.2 Wielomiany boolowskie Dla funkcji boolowskiej m zmiennych f , niech fi oznacza wartość f dla argumentu b˛edacego ˛ binarna˛ reprezentacja˛ liczy i, pi . To znaczy, źe fi to i-ty bit w reprezentacji f przy pomocy binarnego wektora o długości 2m . Na funkcjach boolowskich f i g wykonujemy nast˛epujace ˛ operacje: • dodawanie f + g: odpowiada dodawaniu modulo 2 odpowiadajacych ˛ im wektorów; • mnoźenie logiczne: f g = (f2m −1 . . . f1 f0 )(g2m −1 . . . g1 g0 ) = (f2m −1 g2m −1 ) . . . (f1 g1 )(f0 g0 ), gdzie wynik mnoźenia dwóch elementów a, b ∈ {0, 1} jest równy 1 wtedy i tylko wtedy gdy a = b = 1. Jednomianem boolowskim n zmiennych nazywamy funkcj˛e boolowska˛ n zmiennych x1 , . . . , xn postaci xi1 . . . xis , gdzie s, i1 , . . . , is ≤ n oraz funkcj˛e identycznościowa˛ równa˛ 1, oznaczana˛ 1. Definicja 6 Wielomianem boolowskim m zmiennych nazywamy funkcj˛e boolowska˛ m zmiennych wyraźona˛ jako suma wybranych jednomianów boolowskich m zmiennych. Uwaga. W wielomianach boolowskich nie jest konieczne pot˛egowanie, poniewaź x·x = x dla kaźdego wektora x ∈ {0, 1}n . Obserwacja Funkcja boolowska m zmiennych f jest równa f (x0 , . . . , xm−1 ) = f (x0 , . . . , xm−2 , 0)+xm−1 (f (x0 , . . . , xm−2 , 0) + f (x0 , . . . , xm−2 , 1)) Lemat 1 Kaźda funkcja boolowska n zmiennych jest wielomianem boolowskim n zmiennych. Wniosek 1 Zbiór jednomianów m zmiennych (a dokładniej ich reprezentacji w postaci m wektorów binarnych o długości 2m ) tworzy baz˛e przestrzeni liniowej Z22 . 3 Definicja 7 Kodem Reeda-Mullera o długości n = 2m i stopniu r (dla r ≤ m) nazywamy kod binarny R(r, m) złoźony ze wszystkich słów binarnych o długości n reprezentujacych ˛ wielomiany n zmiennych stopnia co najwyźej r. Dwa słowa binarne w = w1 . . . wn i v = v1 . . . vn sa˛ ortogonalne gdy ich iloczyn skalarny jest równy 0, tzn. w·v = n X vi wi = 0. i=1 Kodem dualnym do kodu liniowego K, oznaczanym przez K ⊥ nazywamy kod złoźony ze wszystkich słow ortogonalnych do wszystkich słów kodowych kodu K. Twierdzenie 1 Kod Reeda-Mullera R(r, m) zawiera k= à ! r X m i=0 i bitów danych. Kodem dualnym do R(r, m) jest kod R(m − r − 1, m). 4