Teoria Informacji - wykład Kodowanie wiadomości
Definicja kodu Niech S={s 1, s 2,..., s q } oznacza dany zbiór elementów. Kodem nazywamy wówczas odwzorowanie zbioru wszystkich możliwych ciągów utworzonych z elementów zbioru S w pewien zbiór ciągów utworzonych z elementów innego zbioru X={x 1, x 2,..., x r }. Zbiór S to zbiór wiadomości elementarnych, a zbiór X zbiorem sygnałów elementarnych. Cecha kodu mając ciąg cyfr binarnych tworzących ciąg kodowy możemy jednoznacznie powrócić do ciągu wiadomości, tzn. zdekodować wiadomość.
Rodzaje kodów KODY NIEBLOKOWE BLOKOWE OSOBLIWE NIEOSOBLIWE NIEJEDNOZNACZNIE DEKODOWALNE JEDNOZNACZNIE DEKODOWALNE Z OPÓŹNIENIEM BEZ OPÓŹNIENIA
Zawężenie definicji kodu Kodem blokowym nazywamy kod, który każdą z wiadomości elementarnych wchodzących w skład zbioru S odwzorowuje w ustalony ciąg sygnałów elementarnych ze zbioru X. Takie ciągi sygnałów elementarnych nazywamy ciągami kodowymi. Ciąg kodowy odpowiadający wiadomości s i oznaczać będziemy przez X i. Tak więc symbol X i oznacza ciąg złożony z elementów typu x j.
Długość słowa kodowego długości ciągów kodowych s 1 =x 11 x 12...x 1l1 l 1 s i =x i1 x i2...x ili l i s q =x q1 x q2...x qlq l q
Nieosobliwy kod Wiadomości elementarne Ciągi kodowe s 1 0 s 2 11 11 s 3 00 s 4 11 11 01 Kod blokowy jest nieosobliwy, jeżeli wszystkie jego ciągi kodowe różnią się nawzajem.
Rozszerzenie kodu Definicja n-krotnym rozszerzeniem kodu blokowego, przyporządkowującego wiadomościom s i ciągi kodowe X i, jest kod blokowy, który ciągom wiadomości elementarnych (s i1, s i2,..., s in ) przyporządkowuje ciągi ciągów kodowych (X i1, X i2,..., X in ). n-krotne rozszerzenie kodu blokowego jest również kodem blokowym.
Wiadomości elementarne Ciągi kodowe s 1 0 s 2 11 s 3 00 s 4 01 s 1 s 3? s 3 s 1 Przykład 2-krotnego Wiadomości elementarne rozszerzenia kodu Ciągi kodowe Wiadomości elementarne Ciągi kodowe s 1 s 1 0 0 s 3 s 1 00 0 s 1 s 2 0 11 s 3 s 2 00 11 000 000 s 1 s 3 0 00 s 3 s 3 00 00 s 1 s 4 0 01 s 3 s 4 00 01 s 2 s 1 11 0 s 4 s 1 01 0 s 2 s 2 11 11 s 4 s 2 01 11 s 2 s 3 11 00 s 4 s 3 01 00 s 2 s 4 11 01 s 4 s 4 01 01
Kod jednoznacznie dekodowalny Kod blokowy jest jednoznacznie dekodowalny wtedy i tylko wtedy, gdy n-krotne rozszerzenie tego kodu jest kodem nieosobliwym dla dowolnego skończonego n.
Przykład kodów jednoznacznie dekodowalnych Wiadomości elementarne Kod A Kod B s 1 00 0 s 2 01 10 s 3 10 110 s 4 11 1110 KodB Kod z przecinkiem sygnał elementarny 0 pełni funkcję przecinka rozdzielającego jeden ciąg kodowy od drugiego KodA Wszystkie ciągi kodowe tej samej długości Kod nieosobliwy Wiadomości elementarne Kod C s 1 0 s 2 01 s 3 011 s 4 0111
Kod dekodowalny bez opóźnienia Jednoznacznie dekodowalny kod będziemy nazywać kodem dekodowalnym bez opóźnienia, jeżeli każdy z ciągów kodowych tego kodu można dekodować bez czekania aż pojawią się sygnały elementarne odpowiadające dalszym ciągom kodowym (następującym po ciągu kodowym aktualnie dekodowanym).
Kod dekodowalny bez opóźnienia Ogólny test Niech X 1 =(x i1, x i2,..., x im ) będzie ciągiem kodowym pewnego kodu. Ciąg sygnałów elementarnych (x i1, x i2,..., x ij ), gdzie j m nazywamy przedrostkiem ciągu kodowego. Warunkiem koniecznym i dostatecznym na to, aby dany kod był kodem dekodowalnym bez opóźnienia, jest, aby żaden pełny ciąg kodowy tego kodu nie był użyty jako przedrostek innego ciągu kodowego tego kodu.
Przykłady kodów dekodowalnych bez opóźnienia Wyjście źródła Kod blokowy Kod z przecinkiem s 1 00 0 s 2 01 10 s 3 10 110 s 4 11 1110
Nierówność Krafta Nierówność Krafta określa warunki konieczne i dostateczne istnienia kodu dekdowalnego bez opóźnień z ciągami kodowymi o długości l 1, l 2,..., l q. q i= 1 r l i 1 l i długość i-tego ciągu kodowego q ilość ciągów kodowych r ilość wiadomości elementarnych podstawa systemu kodowego
Średnia długość ciągu kodowego Niech kod blokowy odwzorowuje wiadomości s 1, s 2,..., s q w ciągi kodowe X 1, X 2,..., X q. Niech prawdopodobieństwa tych wiadomości będą równe P 1, P 2,..., P q oraz niech długości odpowiednich ciągów kodowych będą równe l 1, l 2,..., l q. Wówczas średnią długość L ciągu kodowego definiujemy wzorem: q L = i= 1 P i l i p i prawdopodobieństwo wystąpienia i-tej wiadomości l i długość i-tego ciągu kodowego q ilość ciągów kodowych r ilość wiadomości elementarnych
Kod o możliwie najmniejszej długości ciągu kodowego Definicja Rozważmy kod jednoznacznie dekodowalny, przyporządkowujący elementom źródła wiadomości S ciągi kodowe zbudowane z sygnałów elementarnych, których zbiór zawiera r elementów. Kod taki nazywamy kodem zwięzłym (dla źródła S), jeżeli jego średnia długość jest mniejsza lub równa średniej długości wszystkich jednoznacznie dekodowalnych kodów dla tego samego źródła wiadomości i tego samego zbioru sygnałów elementarnych.
Minimalna długość L Skąd: H ( s) log r L Co jest jednoznaczne z: H r ( s) L
Pierwsze twierdzenie Shannona (Twierdzenie o kodowaniu dla kanałów bezszumowych) Najmniejsza średnia liczba r-narnych sygnałów elementarnych przypadająca na pojedynczą wiadomość jest nie mniejsza niż entropia źródła mierzona w jednostkach r-narnych. lim n L n n = H r ( S) L n średnia długość ciągów kodowych odpowiadających wiadomościom elementarnym ze źródła S n krotność rozszerzenia źródła H r entropia mierzona w jednostkach r-narnych
Kody Huffmana
Metody statystyczne Metoda Huffmana S={x 1,...,x q } jest alfabetem źródła S, P={p 1,...,p q } jest zbiorem prawdopodobieństw stowarzyszonych ze zbiorem S. Najpierw prawdopodobieństwa p i =p(x i ) użycia liter źródłowych x i są ustawione w ciąg nierosnący, tzn. p 1 p 2... p q
Metody statystyczne Metoda Huffmana 1. Konstrukcja źródeł zredukowanych 2 ostatnie wiadomości elementarne źródła S traktujemy jako jedną wtórną (prawdopodobieństwo równe sumie prawdopodobieństw składowych elementów). Otrzymujemy w miejsce źródła pierwotnego S nowe źródło S 1 o zbiorze zawierającym q-1 elementów. Takie źródło nazywamy źródłem zredukowanym. Procedurę tę powtarzamy do momentu, gdy uzyskamy 2-elementowe źródło zredukowane.
Kody Huffmana (kody zwięzłe) Konstrukcja kodów w trzech etapach: 1 ze źródła pierwotnego konstruujemy ciąg źródła zredukowanego, 2 znajdujemy kod zwięzły dla jednego ze źródeł w tym ciągu, 3 konstruowanie kodu dla kolejnych źródeł aż do źródła pierwotnego Kodowanie Wiadomości ostatniego źródła zredukowanego kodujemy, nadając im wartości 0 i 1.
Binarny kod Huffmana Uszereguj wiadomości wg malejących prawdopodobieństw Połącz dwa najmniej prawdopodobne wiadomości w jedną TAK Czy liczba wiadomości jest większa od 2? NIE Przypisz do każdej z dwu wiadomości różne bity Rozłącz połączone ostatnio dwie wiadomości i do wspólnego kodu każdej z nich dopisz inny bit TAK Czy są jeszcze złączone wiadomości? NIE
Przykład binarnego kodu zwięzłego Źródło pierwotne Źródło zredukowane Wiadomości elementarne Prawdopodobieństwa S 1 S 2 S 3 S 4 1 s 1 0,4 0,4 0,4 0,4 0,6 00 1 00 s 2 0,3 0,3 0,3 0,3 0,4 1 00 1 00 0 1 011 011 010 s 3 0,1 0,1 0,2 0,3 01 0110 0100 s 4 0,1 0,1 0,1 011 01010 s 5 0,06 0,1 0101 s 6 0,04 01011
Metoda Huffmana r-narne kody zwięzłe 1. Łączenie r-wiadomości w 1 wiadomość. 2. Ostatnie źródło musi zawierać r-wiadomości. 3. Źródło pierwotne musi zawierać r+k(r-1), wiadomości; k jest liczbą całkowitą.
r-narne kody zwięzłe Ostatnie źródło zawiera w swym zbiorze r elementów wtedy i tylko wtedy, gdy źródło pierwotne zawiera tych elementów r+k(r-1), gdzie k całkowite. np. n=r+k(r-1)=13, dla k=3, r=4
r-narne kody Huffmana Uwagi do algorytmu Łączyć będzie się po r najmniej prawdopodobnych wiadomości Aby na końcu uzyskać dokładnie r wiadomości, za pierwszym razem połączymy nie więcej niż r wiadomości, aby w następnym kroku ich liczba była równa dla dowolnego całkowitego k. r + k (r 1) r Dozwolone liczby wiadomości 3 5 7 9 11 13 15 17 19 21 23 25 4 7 10 13 16 19 22 25 28 31 34 37 8 15 22 29 36 43 50 57 64 71 78 85 10 19 28 37 46 55 64 73 82 91 100 109 16 31 46 61 76 91 106 121 136 151 166 181
Algorytm r 0 =r; Oblicz liczbę r 0 wiadomości do połączenia Uszereguj wiadomości wg malejących prawdopodobieństw Połącz r 0 najmniej prawdopodobnych wiadomości w jedną TAK Czy liczba wiadomości jest większa od r? NIE Przypisz do każdej z r wiadomości różne symbole Rozłącz połączone ostatnio r wiadomości i do wspólnego kodu każdej z nich dopisz inny symbol TAK Czy są jeszcze złączone wiadomości? NIE
Przykład kodu r-narnego Dla r=3. Źródło pierwotne Wiadomości elementarne Prawdopodobieństwa Źródło zredukowane S 1 S 2 S 3 s 1 0,4 0,4 0,4 0,4 s 2 0,2 0,2 0,2 0,4 s 3 0,1 0,1 0,2 0,2 s 4 0,1 0,1 0,1 s 5 0,05 0,1 0,1 s 6 0,05 0,05 s 7 0,05 0,05 s 8 0,05 s 9 0 1 00 02 20 21 22 010 011 012 1 00 01 02 20 21 22 1 2 00 01 02 0 1 2
Sprawność i rozwlekłość kodu Definicje. Sprawność kodu Rozwlekłość kodu η = H r ( S) L rozwlekłość = 1 η = L H r ( S) L L średnia długość ciągów kodowych odpowiadających wiadomościom elementarnym ze źródła S H r entropia mierzona w jednostkach r-narnych η - sprawność kodu