Kody blokowe Wykład 2, 10 III 2011 Literatura 1. R.M. Roth, Introduction to Coding Theory, 2006 2. W.C. Huffman, V. Pless, Fundamentals of Error-Correcting Codes, 2003 3. D.R. Hankerson et al., Coding Theory and Cryptography. Essentials, 2000 1
Uprzednio należy zauważyć, że będziemy działać w ciele F q, gdzie u nas q = 2. (Uwaga! - nie jest to ciało liczbowe, tylko ciało reszt modulo 2). Symbol F 2 występuje tutaj raz jako ciało (w sensie struktury algebraicznej), a raz jako zbiór, F 2 = {0, 1}. Możemy zatem zapisać, że ciało F q = ({0, 1},, ), gdzie i oznaczają dodawanie i mnożenie modulo 2, a nadto 0 [0] := {2k k Z}, 1 [1] := {2k + 1 k Z}. 2
Nasze dzisiejsze rozważania rozpoczniemy od następującego stwierdzenia. Nie każdy kod liniowy C ma macierz generującą G C w postaci systematycznej. Pokażemy to na przykładzie. [ ] 1 0 0 k = 2 Przykład 1. Niech G C =, 0 0 1 n = 3 Liczba słów C = 2 k = 2 2 = 4 oraz C = S := lins, gdzie S jest zbiorem wierszy macierzy G C. Bierzemy tu do C wszystkie kombinacje liniowe (dwóch) słów bazowych, co sprowadza się do wyboru wszystkich możliwych sum. w 1 + w 2 = 100 001 = 101 C, w 1 + w 1 = 100 100 = 000, w 2 + w 2 = 001 001 = 000. Trzy słowa w C są niezerowe i każde dwa z nich tworzą zbiór liniowo niezależny. Zatem ( 3 2) = 3 jest równe liczbie baz w C. Liczba macierzy generujących kod C wynosi 3 2! = 6 (ważna jest kolejność wierszy w macierzy). We wszystkich tych macierzach kolumna 2 jest zerowa. Ostatecznie, kod C nie ma macierzy generującej w postaci systematycznej. 3
Definicja 1 Kod blokowy ma słowa tej samej długości n. Wszystkie jego słowa wypisane jedno pod drugim tworzą blok (czyli tablicę, ang. array) o wymiarach M n, gdzie M = C. Każdy kod liniowy jest więc kodem blokowym. Istnieją jednak ciekawe nieliniowe kody blokowe. Są to np. kody (n, M, d), których moc M dla wielu par (n, d) jest większa niż moc wszystkich kodów liniowych o długości n i dystansie d. 4
Ciekawostka. Ile baz ma liniowy binarny kod blokowy C o wymiarze k? Odpowiedź jest dość zaskakująca! Twierdzenie 1 Liczbą baz binarnego kodu liniowego o wymiarze k jest k 1 1 (2 k 2 i ). k! i=0 Udowodnimy, że to jest prawda. Uwaga! Baza w tym kontekście to zbiór k-elementowy, liniowo niezależny. W dowodzie wykorzystamy znany fakt, że każdy zbiór liniowo niezależny da się dopełnić do bazy. Dowód. Obliczamy liczbę baz uporządkowanych, czyli ciągów utworzonych z elementów baz nieuporządkowanych. Liczba tych ciągów to liczba wszystkich możliwych macierzy generujących kod (bowiem pary: macierz i ciąg jej wierszy to bijekcja ). Określamy na ile sposobów wybieramy słowa na kolejne pozycje i = 1, 2,..., k w macierzy (liczność lub liczbę oznaczamy symbolem #). Lp. # możliwości objaśnienie 1 2 k 1 słowo zerowe nie może być wybrane, 2 2 k 2 dwa słowa odrzucamy jako wygenerowane przez słowo już wybrane,......... j 2 k 2 j 1 2 j 1 jest wygenerowane przez j 1 już wybranych słów,...... j = 2, 3,..., k. j = k 2 k 2 k 1 Iloczyn znalezionych możliwości jest więc liczbą macierzy generujących. Z każdej zaś bazy, permutując jej słowa, otrzymujemy k! macierzy. Mamy więc k! razy więcej macierzy niż baz, a stąd teza twierdzenia. 5
Macierz generująca kod dualny do danego kodu liniowego Definicja 2 Macierz generującą kod dualny C do danego kodu liniowego C nazywamy macierzą kontroli parzystości kodu C i oznaczamy ją symbolem H (= H C ). Zatem G C =: H C, gdzie G C jest macierzą generującą kod dualny C. Należy zauważyć, że kod dualny do dualnego jest kodem początkowym, ponieważ ( C ) = C. Możemy zatem zapisać, że GC = H C. 6
Kod Hamminga oznaczamy przez H r, gdzie r jest liczbą pozycji nadmiarowych w słowach kodowych, tzn. r = n k, czyli k = n r. H r ma parametry [n = 2 r 1, n r, 3] = [n, k, d]. Macierz kontroli parzystości dla H r ma więc wymiary r n; H Hr F r n 2. Kod Hamminga definiujemy, podając konstrukcję jego macierzy kontroli parzystości. 7
Przykład 2. Niech r = 3. Wtedy n = 2 r 1 = 7. Zatem H H3 F 3 7 2, H H3 = 1 0 0 0 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 0 1 Każde dwie kolumny tej macierzy z definicji muszą być liniowo niezależne, czyli niejednakowe. Kolumny te to wszystkie możliwe słowa binarne długości r = 3. Kolumnami są więc reprezentacje binarne liczb 1, 2,..., n = 2 r 1, ale brane w dowolnej kolejności. Wybierając te reprezentacje w odpowiedniej kolejności możemy uzyskać macierz w postaci systematycznej, p. macierz w powyższym przykładzie z podmacierzą I 3 w pierwszych trzech kolumnach. Zatem ogólnie dla dowolnego r, w macierzy systematycznej H pierwszych r kolumn to reprezentacje malejących potęg dwójki, poczynając od 2 r 1 : 2 r 1 2 r 2... 2 1 1 0 0 0 0 1 0 0 F r n 2 H Hr = A 0 0 1 0, 0 0 0 1 gdzie A Fr (n r) 2. Pozostałe liczby (które nie są potęgami dwójki) są reprezentowane w dowolnej kolejności przez dalsze kolumny macierzy H Hr, tworząc macierz A. 8
Uwaga 1 Zgodnie z definicją, kod Hamminga jest dowolnym kodem z całej klasy kodów permutacyjnie równoważnych, wśród których jest kod o macierzy kontroli parzystości, będącej macierzą systematyczną, podaną powyżej. Takich kodów i macierzy systematycznych jest zresztą (n r)! = k!. 9
Twierdzenie 2 (o korygowaniu błędów) Niech C będzie kodem (niekoniecznie liniowym) o parametrach (n, M, d), gdzie M = C i niech τ := (d 1)/2. Kod ten koryguje τ lub mniej błędnych symboli w słowie otrzymanym. Dowód. W naszym dowodzie skorzystamy z zasady największej wiarogodności, która mówi, że jeśli w jest słowem otrzymanym i w C, to słowem wysłanym jest słowo kodowe v C, które jest najbliższe słowu w (w sensie metryki Hamminga). Mianowicie v C and d H (v, w) = min u C d H(u, w). A dlaczego może nastąpić jednoznaczne korygowanie? Ponieważ słowa kodowe są oddalone nawzajem o d lub więcej, gdzie d 2τ, więc otoczenia domknięte słów kodowych o promieniu τ są parami rozłączne, p. Rys., gdzie v, v 1 C. Jeśli więc w ma τ lub mniej błędnych symboli, to w jest w jednym tylko z tych otoczeń. 10
Twierdzenie 3 (o wykrywaniu błędnych słów) Kod C o dystansie d 2 wykrywa d 1 lub mniej błędnych symboli w słowie otrzymanym. Dowód. Niech w będzie słowem otrzymanym. Wtedy w C, jeżeli w nie ma błędnych symboli, tzn. w było wysłane, lub też w ma d lub więcej błędnych symboli. Jeśli zaś w różni się od słowa wysłanego v C na t pozycjach, gdzie 1 t d 1, to d H (v, w) = t 0 i t < d, czyli w / C, i dlatego błędność w jest wykrywana. 11
Jak określamy dystans d kodu C? d := min v,w C v w d(u, w) = min v,w C v w wt(v w). Jeżeli kod jest liniowy, to dla v, w C różnica v w C (kod liniowy jest zamknięty ze względu na dodawanie). Zatem dla kodu liniowego C mamy d = min wt(v). v C v 0 Uwaga 2 Dystans kodu nieliniowego znajdujemy po znalezieniu dystansu (odległości) dla ( ) C 2 par różnych słów kodowych, jako najmniejszą z tych odległości. Dla kodów liniowych natomiast dystansem jest najmniejsza waga spośród C 1 wag niezerowych. To oznacza mniejszą złożoność obliczeń, gdy kod jest liniowy. 12
Zasada największej wiarogodności (MLD - maximum-likelihood decoding) Definicja 3 Niech symbol Φ p (v, w) oznacza prawdopodobieństwo, że dla słowa otrzymanego w słowem wysłanym było słowo v, różniące się od w na d pozycjach; 1 p oznacza niezawodność kanału (BSC): 2 < p 1, (p 1 2 ), oraz n ( d) oznacza długość kodu. Wtedy Φ p (v, w) = (1 p) d p n d. Twierdzenie 4 Niech v 1, v 2 będą słowami kodowymi długości n, zaś p niezawodnością kanału, 1 2 < p < 1. Niech d i = d(v i, w) dla i = 1, 2, gdzie w jest słowem otrzymanym. Wówczas Φ p (v 1, w) Φ p (v 2, w) d 1 d 2, tzn. prawdopodobieństwo większe, dokładnie gdy odległość mniejsza. Dowód. Następujące nierówności są parami równoważne. p n d1 (1 p) d1 p n d2 (1 p) d2 ( ) d2 d p 1 1 1 p p d 2 d 1 (bo 1 p > 1). 13