Teoria informacji i kodowania Ćwiczenia Piotr Chołda, Andrzej Kamisiński Katedra Telekomunikacji Akademii Górniczo-Hutniczej
Kod źródłowy Kodem źródłowym nazywamy funkcję różnowartościową, która elementom zbioru wiadomości przyporządkowuje ciągi liter alfabetu kodowego. W praktyce chcemy zapewnić, że nie zdarzy się sytuacja, w której ciąg słów kodowych będzie można interpretować na różne sposoby i dlatego interesujemy się tzw. kodami jednoznacznie dekodowalnymi. Wiadomo, że kodem jednoznacznie dekodowalnym jest taki kod, w którym żadne słowo kodowe nie jest początkiem innego słowa kodowego. Z każdym kodem jednoznacznie dekodowalnym możemy skojarzyć drzewo D-arne (binarne, ternarne,... ). Katedra Telekomunikacji AGH 2/9
Nierówność McMillana-Krafta Da się utworzyć jednoznacznie dekodowalny kod o literach z alfabetu zawierającego D symboli i słowach kodowych długości: l 1, l 2,..., l i,..., wtedy i tylko wtedy gdy: i D l i 1. Katedra Telekomunikacji AGH 3/9
Wartości charakteryzujące kody Dla kodu, w którym: wiadomość i występuje z prawdopodobieństwem Pr{i}, wiadomości i odpowiada słowo kodowe (ciąg) o długości l i liter alfabetu, wiadomości i odpowiada słowo kodowe o długości trwania t i, definiujemy: Średnia długość słowa kodowego L = i l i Pr{i}. Średni czas trwania słowa kodowego T = i t i Pr{i}. Katedra Telekomunikacji AGH 4/9
Średnia długość słowa kodowego Ograniczenie dolne na L Dla źródła o entropii H(S) i liczności alfabetu kodowego D, dla każdego kodu źródłowego jednoznacznie dekodowalnego: L H(S) lg D. (Względny) nadmiar kodu źródłowego R = H(S) L lg D. L Katedra Telekomunikacji AGH 5/9
Dobre kody Kod zwięzły: kod jednoznacznie dekodowalny o najkrótszej możliwej średniej długości słowa kodowego (inaczej: o najmniejszym możliwym nadmiarze dla danego rozkładu prawdopodobieństwa generowania wiadomości przez źródło oraz dla założonej liczności alfabetu kodowego). Kod optymalny: kod zwięzły o zerowym nadmiarze (w takim kodzie każda litera alfabetu kodowego występuje z takim samym prawdopodobieństwem), taki kod istnieje tylko wtedy, gdy prawdopodobieństwa wystąpienia wszystkich wiadomości w źródle 1 są naturalnymi potęgami D, tj. i Pr{i} = ( ) 1 li D (wtedy wykładnik jest długością słowa kodowego!). Katedra Telekomunikacji AGH 6/9
Kod Huffmana Algorytm tworzenia kodu Huffmana podaje nam sposób tworzenia kodu zwięzłego (chociaż oczywiście niekoniecznie optymalnego) dla alfabetu kodowego o liczności D symboli. 1 K1: uszeregować wszystkie N wiadomości w kolejności malejącego prawdopodobieństwa ich wystąpienia. 2 K1 (tylko w pierwszej iteracji dla kodów nad alfabetem niebinarnym, w innym przypadku przyjmujemy k = D): dobrać liczbę 2 k D, taką że iloraz N k D 1 jest całkowity. 3 K2: Utworzyć tzw. zredukowane źródło wiadomości, w którym k wiadomości o najniższym prawdopodobieństwie wystąpienia grupujemy w jedną wiadomość. 4 Powtórzyć kroki K1-K2, aż uzyska się źródło zredukowane o liczności D wiadomości, wtedy każdej z nich przypisujemy po jednej literze alfabetu. 5 Dokonujemy operacji odwrotnej do tworzenia źródeł zredukowanych, przy czym przypisujemy po jednej dodatkowej literze alfabetu tym wiadomościom, które w danym kroku były grupowane w jedną wiadomość. Katedra Telekomunikacji AGH 7/9
Kompresja bezstratna Inne podejścia Kod (Shannona-)Fano: tworzenie drzewa D-arnego kodu, w którym poszczególne węzły tworzy się, dzieląc węzeł odpowiadający pewnemu zbiorowi wiadomości na D węzłów odpowiadających podzbiorom wiadomości, które charakteryzują się jak najbardziej zbliżonymi sumami prawdopodobieństw wystąpienia (w ogólności nie musi dawać kodu zwięzłego). Kodowanie arytmetyczne: przesyłanie ciągu znaków interpretowanego jako liczba należąca do odpowiedniego przedziału; zakłada się, że dekoder zna statystykę źródła. Dynamiczne kodowanie Huffmana: zakładające ciągłe przebudowywanie drzewa kodu, nie jest potrzebna znajomość statystyki źródła. Katedra Telekomunikacji AGH 8/9
Twierdzenie Shannona dla kanałów bezszumowych Twierdzenie Shannona o kodowaniu źródłowym Jeśli L (k) to średnia długość kodu zwięzłego (używającego alfabetu D-arnego) k-krotnego rozszerzenia źródła bezpamięciowego S, to: L (k) lim k k = H(S) lg D. Znaczenie praktyczne: możemy się zbliżać do kodu optymalnego dowolnie blisko, jeśli tylko będziemy kodować rozszerzenia źródła (tj. musimy kodować coraz dłuższe wiadomości i rośnie nam słownik kodu). Katedra Telekomunikacji AGH 9/9