Teoria informacji/TI Wykład 10
Efektywne kodowanie wiadomości
Dla pary wejście-wyjście (A,B), rozważmy dodatkową zmienną losową
możemy ją interpretować jako sygnaturę błędu w czasie transmisji. Zachodzi równość
Wynika to z definicji BSC:
i zauważenia że
Rozważmy teraz sekwencję par wejście-wyjście , zachowującą niezależność symboli. Implikuje to że zmienne losowe (gdzie są niezależne (zauważmy że implikacja w drugą stronę nie zawsze zachodzi): Używając notacji lub po prostu na oznaczenie możemy to zapisać
- .
Używając niezależności symboli oraz TODO dostajemy
dla dowolnego
. A więc
Załóżmy że dysponujemy opisanym wyżej symetrycznym kanałem w którym P>Q, i chcemy przesyłać nim wartości zmiennej losowej X o wartościach z . We wcześniejszych wykładach poznaliśmy techniki efektywnego kodowania wartości. Jeśli kanał jest wierny, wystarczy że znajdziemy optymalne kodowanie i będziemy wysyłać bit po bicie. Oczekiwana długość (czas) transmisji będzie ograniczony wtedy przez H(X)+1 (link TODO). Z drugiej strony, zawsze możemy zakodować używając ciągów długości , co daje nam ograniczenie na pesymistyczny czas transmisji (te dwa ograniczenia mogą nie dać się zachować jednocześnie dla żadnego kodowania).
Jeśli jednak kanał nie jest wierny, ta metoda będzie prowadziła do błędów. Przykład TODO pokazuje że będziemy musieli użyć redundantnego, a więc nieoptymalnego kodowania. Zajmiemy się teraz szukaniem metod pogodzenia tych dwóch przeciwstawnych celów:
- używaniem jak najmniejszej redundancji
- zmiejszenia prawdopodobieństwa błędu do jak najniższego poziomu
Ogólny schemat postępowania będzie następujący
Algorytm transmisji
(dla zmiennej losowej X o wartościach wi kanału ) 1. Wybierz i takie że 2. Ustal bijekcję (oczywiście taki kod będzie bezprefiksowy). 3. Prześlij ciąg znaków przez kanał bit po bicie, otrzymując na wyjściu . 4. Aby odkodować wiadomość wybierz takie dla którego jest maksymalne
Zakładając że kanał jest bezstanowy i pozbawiony feedbacku (link TODO), mamy
Użyta reguła dekodowania wskazuje zatem dla każdego ciągu
ciąg , najbliższy możliwy w sensie odległości Hamminga (jeśli jest kilka równie odległych to wybierany jest któryś z nich). Jest to tak zwana reguła dobrosąsiedzka.Dla uproszczenia możemy utożsamić
z C (za pomocą bijekcji ) i traktować X jako zmienną losową o wartościach w C.Na opisaną powyżej procedurę możemy patrzeć jak na nowy kanał (z C do C):
z prawdopodobieństwem błędu
Naszą pierwszą obserwacją będzie fakt że najgorszym możliwym rozkładem X jest rozkład jednostajny ( dla )
Fakt
Dowód
Przy analizowaniu jakości naszych metod możemy zatem bez utraty ogólności zakładać że rozkład X jest jednostajny. W takim przypadku
zależy jedynie od C, a więc możemy używać notacji .Redundancję mierzymy porównując entropię C (o wartości
) (link TODO), z faktyczną długością kodu (w naszym przypadku n).
Definicja [Szybkość transmisji]
Szybkością transmisji kodu
nazywamy wartośćIntuicyjnie możemy rozumieć że aby przesłać
bitów informacji, używamy faktycznie n bitów, a więc przesyłamy bity z szybkością </math> bitów na znak.Dwa warunki jakie postawiliśmy w TODO oznaczają teraz że chcemy zminimalizować zarówno
jak i R(C).
Przykład [Wadliwa maszyna do pisania]
Wrócimy do przykładu wadliwej maszyny do pisania (link TODO). Z pewnością taki kanał generuje bardzo dużo błędów. Jednak jeśli użyjemy tylko nieparzystych liter (
) to będziemy mogli zawsze odkodować wiernie otrzymane znaki.Czy możemy użyć tej obserwacji do przesyłania dowolnych wiadomości?
Najprostszym pomysłem jest kodowanie liter jako par, używając wciąż tylko połowy znaków, np.:
Szybkość transmisji w tym przypadku wynosi
. Czy można to zrobić lepiej?Jeśli mielibyśmy dodatkowy symbol, np. #, który potrafilibyśmy odkodować bezbłędnie, moglibyśmy zakodować symbole w następujący sposób:
Średnia długość kodu wynosi tu , a więc szybkość transmisji wynosi . Możemy tę metodę wykorzystać bez rozszerzania alfabetu, wybierając jedną literę, np. a, aby grała rolę #, i kodując a przez aa, b przez ca i c przez cc (aby zachować bezprefiksowość kodu). Uzyskamy wtedy szybkość transmisji niewiele mniejszą niż . Rozwinięcie tej metody pozwala podnieść szybkość transmisji do wartości bliskiej 1 (TODO ćwiczenie).
Przykład [Wielokrotny BSC]
Główne Twierdzenie Shannona mówi że sytuacja w rzeczywistości jest o wiele lepsza. Możemy osiągnąć to samo zachowując szybkość transmisji bliską pewnej stałej, konkretnie (link TODO) przepustowości kanału
.Zanim przejdziemy do samego twierdzenie pokażemy dolne ograniczenie, dowodzące że lepszej szybkości transmisji w ogólności nie da się uzyskać. Zaczniemy od dowiedzenia tego gdy prawdopodobieństwo błędu musi być zerowe, i w dalszej części pokażemy jak ten dowód rozszerza się na dodatnie prawdopodobieństwa. Tutaj niezależność symboli.
może być dowolnym kanałem, ale jak zwykle zakładamy
Fakt [Przepustowość kanału]
Jeśli
toDowód
- .
Wiemy ponadto (link TODO) że
Czyli
(z definicji
)Z drugiej strony mamy
(gdzie
). Tutaj ma wartość zero, ponieważ założenie implikuje że X jest funkcją Y (konkretnie . Ponadto gdyż X ma rozkład jednostajny. Ostatecznie zatem
Fakt
i ostatecznie