Teoria informacji/TI Wykład 10: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Stromy (dyskusja | edycje)
Nie podano opisu zmian
 
Stromy (dyskusja | edycje)
Nie podano opisu zmian
Linia 2: Linia 2:


Dla pary wejście-wyjście (A,B), rozważmy dodatkową zmienną losową
Dla pary wejście-wyjście (A,B), rozważmy dodatkową zmienną losową
:<math>E = A \oplus B</math>
<center><math>E = A \oplus B</math></center>


możemy ją interpretować jako sygnaturę błędu w czasie transmisji. Zachodzi równość
możemy ją interpretować jako sygnaturę błędu w czasie transmisji. Zachodzi równość
:<math>p (b | a ) = p (E = a \oplus b)</math>
<center><math>p (b | a ) = p (E = a \oplus b)</math></center>


Wynika to z definicji BSC:
Wynika to z definicji BSC:
:<math>p (b | a ) =  \begin{matrix}  
<center><math>p (b | a ) =  \begin{matrix}  
P & a = b & (a \oplus b = 0) \\
P & a = b & (a \oplus b = 0) \\
Q & a \neq b & (a \oplus b = 1)
Q & a \neq b & (a \oplus b = 1)
\end{matrix}
\end{matrix}
</math>
</math></center>


i zauważenia że
i zauważenia że
:<math>p (E = 0) = p (A = 0) \cdot p (0 \to 0) + p(A=1)\cdot p (1 \to 1) = P</math>
<center><math>p (E = 0) = p (A = 0) \cdot p (0 \to 0) + p(A=1)\cdot p (1 \to 0) = P</math></center>
:<math>p (E = 1) = p (A = 0) \cdot p (0 \to 1) + p(A=1)\cdot p (1 \to q) = Q</math>
<center><math>p (E = 1) = p (A = 0) \cdot p (0 \to 1) + p(A=1)\cdot p (1 \to 1) = Q</math></center>




Rozważmy teraz sekwencję par wejście-wyjście <math>(A_1 ,B_1), \ldots , (A_k, B_k )</math>, zachowującą [[Teoria informacji/TI Wykład 8#niez_symboli|niezależność symboli]]. Implikuje to że zmienne losowe <math>E_1, \ldots, E_k</math> (gdzie <math>E_i = A_i \oplus B_i</math> są niezależne (zauważmy że implikacja w drugą stronę nie zawsze zachodzi): Używając notacji <math> p (\vec{E} = \vec{e} )</math> lub po prostu <math>p(\vec{e}</math> na oznaczenie <math> p(E_1 = e_1 \wedge \ldots \wedge E_k = e_k )</math> możemy to zapisać
Rozważmy teraz sekwencję par wejście-wyjście <math>(A_1 ,B_1), \ldots , (A_k, B_k )</math>, zachowującą [[Teoria informacji/TI Wykład 8#niez_symboli|niezależność symboli]]. Implikuje to że zmienne losowe <math>E_1, \ldots, E_k</math> (gdzie <math>E_i = A_i \oplus B_i</math> są niezależne (zauważmy że implikacja w drugą stronę nie zawsze zachodzi): Używając notacji <math> p (\vec{E} = \vec{e} )</math> lub po prostu <math>p(\vec{e}</math> na oznaczenie <math> p(E_1 = e_1 \wedge \ldots \wedge E_k = e_k )</math> możemy to zapisać
:<math> p (e_1 \ldots e_k) = \sum_{\vec{a}} p (\vec{A} = \vec{a} \wedge \vec{B} = \vec{a} \oplus \vec{e}) = \sum_{\vec{a}} p (\vec{A} = \vec{a}) \cdot p  (\vec{B} = \vec{a} \oplus \vec{e} | \vec{A} = \vec{a})</math>.
<center><math> p (e_1 \ldots e_k) = \sum_{\vec{a}} p (\vec{A} = \vec{a} \wedge \vec{B} = \vec{a} \oplus \vec{e}) = \sum_{\vec{a}} p (\vec{A} = \vec{a}) \cdot p  (\vec{B} = \vec{a} \oplus \vec{e} | \vec{A} = \vec{a})</math></center>


Używając [[Teoria informacji/TI Wykład 8#niez_symboli|niezależności symboli]] oraz TODO dostajemy
Używając [[Teoria informacji/TI Wykład 8#niez_symboli|niezależności symboli]] w połączeniu z
<math>p (b | a ) = p (E = a \oplus b)</math> dostajemy


<math>p (\vec{B} = \vec{a} \oplus \vec{e} | \vec{A} = \vec{a}) = p (B_1 = a_1 \oplus e_1 | A_1 = a_1) \cdot \ldots \cdot p (B_k = a_k \oplus e_k | A_k = a_k )</math>
<center><math>\aligned
::<math>=p (E_1 = e_1) \cdot \ldots \cdot p(E_k = e_k)</math>
p(\vec{B} = \vec{a} \oplus \vec{e} | \vec{A} = \vec{a}) & = p (B_1 = a_1 \oplus e_1 | A_1 = a_1) \cdot \ldots \cdot p (B_k = a_k \oplus e_k | A_k = a_k )\\
& =p (E_1 = e_1) \cdot \ldots \cdot p(E_k = e_k)
\endaligned
</math></center>


dla dowolnego <math>\vec{a}</math>. A więc
dla dowolnego <math>\vec{a}</math>. A więc
:<math>p (e_1 \ldots e_k) = p (e_1) \cdot \ldots \cdot p(e_k)</math>
<center><math>p (e_1 \ldots e_k) = p (e_1) \cdot \ldots \cdot p(e_k)</math></center>




Załóżmy że dysponujemy opisanym wyżej symetrycznym kanałem <math>\Gamma</math> w którym P>Q, i chcemy przesyłać nim wartości zmiennej losowej X o wartościach z <math>\mathcal{X}=\{x_1, \ldots, x_m\}</math>. We wcześniejszych wykładach poznaliśmy techniki efektywnego kodowania wartości. Jeśli kanał jest wierny, wystarczy że znajdziemy optymalne kodowanie <math>\varphi : {\mathcal X} \to \{ 0,1\}^*</math> 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ć <math>\mathcal{X}</math> używając ciągów długości <math>\lceil \log m \rceil</math>, co daje nam ograniczenie na pesymistyczny czas transmisji (te dwa ograniczenia mogą nie dać się zachować jednocześnie dla żadnego kodowania).
Załóżmy że dysponujemy opisanym wyżej symetrycznym kanałem <math>\Gamma</math> w którym P>Q, i chcemy przesyłać nim wartości zmiennej losowej X o wartościach z <math>\mathcal{X}=\{x_1, \ldots, x_m\}</math>. We wcześniejszych wykładach poznaliśmy techniki efektywnego kodowania wartości. Jeśli kanał jest wierny, wystarczy że znajdziemy optymalne kodowanie <math>\varphi : {\mathcal X} \to \{ 0,1\}^*</math> i będziemy wysyłać bit po bicie. Oczekiwana długość (czas) transmisji będzie ograniczony wtedy przez H(X)+1 (na podstawie [[Teoria informacji/TI Wykład 4#shannon_fano|kodowania Shannona-Fano]]). Z drugiej strony, zawsze możemy zakodować <math>\mathcal{X}</math> używając ciągów długości <math>\lceil \log m \rceil</math>, 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:
Jeśli jednak kanał nie jest wierny, ta metoda będzie prowadziła do błędów. Przykład z [[Teoria informacji/TI Wykład 9|poprzedniego wykładu]] 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:{{kotwica|warunki|}}
* używaniem jak najmniejszej redundancji
* używaniem jak najmniejszej redundancji
* zmiejszenia prawdopodobieństwa błędu do jak najniższego poziomu
* zmiejszenia prawdopodobieństwa błędu do jak najniższego poziomu
Linia 49: Linia 53:




Zakładając że kanał jest bezstanowy i pozbawiony feedbacku (link TODO), mamy
Zakładając że kanał jest bezstanowy i pozbawiony feedbacku, mamy
:<math>p( b_1 \ldots b_k | a_1 \ldots a_k ) = Q^{d (\vec{a},\vec{b})} \cdot P^{1-d  (\vec{a},\vec{b})}</math>
<center><math>p( b_1 \ldots b_k | a_1 \ldots a_k ) = Q^{d (\vec{a},\vec{b})} \cdot P^{1-d  (\vec{a},\vec{b})}</math></center>


Użyta reguła dekodowania wskazuje zatem dla każdego ciągu <math>b_1 \ldots b_n</math> ciąg <math>\Delta(b_1 \ldots b_n) \in C</math>, 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'''.
Użyta reguła dekodowania wskazuje zatem dla każdego ciągu <math>b_1 \ldots b_n</math> ciąg <math>\Delta(b_1 \ldots b_n) \in C</math>, 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'''.
Linia 57: Linia 61:


Na opisaną powyżej procedurę możemy patrzeć jak na nowy kanał (z C do C):
Na opisaną powyżej procedurę możemy patrzeć jak na nowy kanał (z C do C):
:<math> C \ni  a_1 \ldots a_n \to \Gamma \to b_1 \ldots b_n \to \Delta (b_1 \ldots b_n )  \in C</math>
<center><math> C \ni  a_1 \ldots a_n \to </math>[[grafika:gamma.PNG]]<math> \to b_1 \ldots b_n \to \Delta (b_1 \ldots b_n )  \in C</math></center>


z prawdopodobieństwem błędu
z prawdopodobieństwem błędu
:<math>Pr_E(\Delta,X)=p(\Delta\circ Y \neq X )</math>
<center><math>Pr_E(\Delta,X)=p(\Delta\circ Y \neq X )</math></center>




Linia 72: Linia 76:
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 <math>Pr_E(\Delta,X)</math> zależy jedynie od C, a więc możemy używać notacji <math>Pr_E(\Delta, C)</math>.
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 <math>Pr_E(\Delta,X)</math> zależy jedynie od C, a więc możemy używać notacji <math>Pr_E(\Delta, C)</math>.


Redundancję mierzymy porównując entropię C (o wartości <math>\log_2 |C|</math>) (link TODO), z faktyczną długością kodu (w naszym przypadku n).
Redundancję mierzymy porównując entropię C (o wartości <math>\log_2 |C|</math>), z faktyczną długością kodu (w naszym przypadku n).




{{definicja|[Szybkość transmisji]||
{{definicja|[Szybkość transmisji]||
'''Szybkością transmisji''' kodu <math>C \subseteq \{0,1\}^n</math> nazywamy wartość
'''Szybkością transmisji''' kodu <math>C \subseteq \{0,1\}^n</math> nazywamy wartość
:<math>R(C)=\frac{\log_2 |C|}{n}</math>}}
<center><math>R(C)=\frac{\log_2 |C|}{n}</math></center>}}


Intuicyjnie możemy rozumieć że aby przesłać <math>\log_2 |C|</math> bitów informacji, używamy faktycznie n bitów, a więc przesyłamy bity z szybkością <math>\frac{\log_2 |C|}{n}</math></math> bitów na znak.
Intuicyjnie możemy rozumieć że aby przesłać <math>\log_2 |C|</math> bitów informacji, używamy faktycznie n bitów, a więc przesyłamy bity z szybkością <math>\frac{\log_2 |C|}{n}</math></math> bitów na znak.


Dwa warunki jakie postawiliśmy w TODO oznaczają teraz że chcemy zminimalizować zarówno <math>Pr_E(\Delta,C)</math> jak i R(C).
Dwa [[#warunki|warunki]] jakie postawiliśmy wcześniej oznaczają teraz że chcemy zminimalizować zarówno <math>Pr_E(\Delta,C)</math> jak i R(C).




{{przyklad|[Wadliwa maszyna do pisania]||
{{przyklad|[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 (<math> a, c, e, g, \ldots</math>) to będziemy mogli zawsze odkodować wiernie otrzymane znaki.
Wrócimy do przykładu [[Teoria informacji/TI Wykład 7#maszyna_kanal|wadliwej maszyny do pisania]]. Z pewnością taki kanał generuje bardzo dużo błędów. Jednak jeśli użyjemy tylko nieparzystych liter (<math> a, c, e, g, \ldots</math>) to będziemy mogli zawsze odkodować wiernie otrzymane znaki.


Czy możemy użyć tej obserwacji do przesyłania dowolnych wiadomości?
Czy możemy użyć tej obserwacji do przesyłania dowolnych wiadomości?
Linia 94: Linia 98:
a & & aa\\
a & & aa\\
b & & ac \\
b & & ac \\
c & & cc \\
c & & cc \\
d & &  ce \\
d & &  ce \\
\ldots  & &
\ldots  & &
Linia 113: Linia 117:
</math>
</math>


Średnia długość kodu wynosi tu <math>\frac{1}{2}\cdot 1+\frac{1}{2}\cdot 2 =\frac{3}{2}</math>, a więc szybkość transmisji wynosi <math>\frac{2}{3}</math>. 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ż <math>\frac{2}{3}</math>. Rozwinięcie tej metody pozwala podnieść szybkość transmisji do wartości bliskiej 1 (TODO ćwiczenie).}}
Średnia długość kodu wynosi tu <math>\frac{1}{2}\cdot 1+\frac{1}{2}\cdot 2 =\frac{3}{2}</math>, a więc szybkość transmisji wynosi <math>\frac{2}{3}</math>. 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ż <math>\frac{2}{3}</math>. Rozwinięcie tej metody pozwala podnieść szybkość transmisji do wartości bliskiej 1.}}




{{przyklad|[Wielokrotny BSC]||
{{przyklad|[Wielokrotny BSC]||
W tym przykładzie rozważmy kanał BSC i poprawienie jego jakości przez wysłanie każdego bitu wielokrotnie (link TODO). Niech <math>n=k\cdot l</math> i niech <math>m=2^k</math>. Wtedy dowolny ciąg bitów <math>a_1 \ldots a_k</math> możemy zakodować jako <math>a_1^l \ldots a_k^l \in \{0,1\}^n</math>, uzyskując kod o szybkości transmisji <math>\frac{1}{l}</math>. Podobna analiza jak (link TODO) pokazuje że dla dowolnego k jesteśmy w stanie zmniejszyć <math>Pr_E(\Delta,C)</math> do dowolnie małej wartości, wystarczająco wydłużając l. Oznacza to że teoretycznie, o ile kanał nie jest całkowicie chaotyczny (czyli <math>P \neq Q</math>), możemy nim przesyłać wiadomości z dowolnie małym prawdopodobieństwem błędu - ale ceną za to jest spowalnianie prędkości transmisji prawie do zera.}}
W tym przykładzie rozważmy kanał BSC i poprawienie jego jakości przez wysłanie każdego bitu wielokrotnie. Niech <math>n=k\cdot l</math> i niech <math>m=2^k</math>. Wtedy dowolny ciąg bitów <math>a_1 \ldots a_k</math> możemy zakodować jako <math>a_1^l \ldots a_k^l \in \{0,1\}^n</math>, uzyskując kod o szybkości transmisji <math>\frac{1}{l}</math>. Podobna analiza jak (link TODO) pokazuje że dla dowolnego k jesteśmy w stanie zmniejszyć <math>Pr_E(\Delta,C)</math> do dowolnie małej wartości, wystarczająco wydłużając l. Oznacza to że teoretycznie, o ile kanał nie jest całkowicie chaotyczny (czyli <math>P \neq Q</math>), możemy nim przesyłać wiadomości z dowolnie małym prawdopodobieństwem błędu - ale ceną za to jest spowalnianie prędkości transmisji prawie do zera.}}




Linia 128: Linia 132:
{{fakt|[Przepustowość kanału]||
{{fakt|[Przepustowość kanału]||
Jeśli <math>Pr_E(\Delta,C)=0</math> to
Jeśli <math>Pr_E(\Delta,C)=0</math> to
:<math>R(C) \le C_{\Gamma}</math>}}
<center><math>R(C) \le C_{\Gamma}</math></center>}}


{{dowod||| Niech <math>X=(A_1, \ldots A_n)</math> i <math>Y=(B_1, \ldots B_n)</math> będą zmiennymi z (link TODO) algortymu transmisji. Używając [[Teoria informacji/TI Wykład 8#niez_symboli|niezależności symboli]] możemy łatwo policzyć że
{{dowod||| Niech <math>X=(A_1, \ldots A_n)</math> i <math>Y=(B_1, \ldots B_n)</math> będą zmiennymi z (link TODO) algortymu transmisji. Używając [[Teoria informacji/TI Wykład 8#niez_symboli|niezależności symboli]] możemy łatwo policzyć że
:<math>H(Y|X) = H(B_1 |A_1) + \ldots + H(B_n | A_n )</math>.
<center><math>H(Y|X) = H(B_1 |A_1) + \ldots + H(B_n | A_n )</math></center>


Wiemy ponadto (link TODO) że
Wiemy ponadto (link TODO) że
:<math>H(Y) \leq H(B_1) + \ldots + H(B_n)</math>
<center><math>H(Y) \leq H(B_1) + \ldots + H(B_n)</math></center>


Czyli
Czyli
<math>I (X,Y) = H(Y) - H(Y|X)</math>
<center><math>\aligned
::<math>\leq \sum_{i=1}^n H(B_i ) - \sum_{i=1}^n H(B_i | A_i ) </math>
I (X,Y) & = H(Y) - H(Y|X)\\
::<math> = \sum_{i=1}^n \underbrace{(H(B_i ) - H(B_i | A_i ))}_{=I (A_i , B_i)} </math>
& \leq \sum_{i=1}^n H(B_i ) - \sum_{i=1}^n H(B_i | A_i )\\
::<math>\leq n \cdot C_{\Gamma }</math>
& = \sum_{i=1}^n \underbrace{(H(B_i ) - H(B_i | A_i ))}_{=I (A_i , B_i)}\\
&\leq n \cdot C_{\Gamma }
\endaligned
</math></center>


(z definicji <math>C_{\Gamma}</math>)
(z definicji <math>C_{\Gamma}</math>)


Z drugiej strony mamy
Z drugiej strony mamy
:<math>I (X,Y) = H(X) - \underbrace{H(X|Y)}_{=0} = \log_2 m</math>
<center><math>I (X,Y) = H(X) - \underbrace{H(X|Y)}_{=0} = \log_2 m</math></center>


(gdzie <math>m=|C|</math>). Tutaj <math>H(X|Y)</math> ma wartość zero, ponieważ założenie <math>Pr_E(\Delta,C)=0</math> implikuje że X jest funkcją Y (konkretnie <math>X=\Delta(Y)</math>. Ponadto <math>H(X)=\log_2 m</math> gdyż X ma rozkład jednostajny. Ostatecznie zatem
(gdzie <math>m=|C|</math>). Tutaj <math>H(X|Y)</math> ma wartość zero, ponieważ założenie <math>Pr_E(\Delta,C)=0</math> implikuje że X jest funkcją Y (konkretnie <math>X=\Delta(Y)</math>. Ponadto <math>H(X)=\log_2 m</math> gdyż X ma rozkład jednostajny. Ostatecznie zatem
:<math>R(C) = \frac{\log_2 m}{n} \leq C_{\Gamma }</math>
<center><math>R(C) = \frac{\log_2 m}{n} \leq C_{\Gamma }</math></center>


jak zakładaliśmy.}}
jak zakładaliśmy.}}


{{fakt||| Korzystając z ciągłości, możemy łatwo pokazać że osłabienie warunku <math>Pr_E (\Delta,C) = 0</math> do <math>Pr_E (\Delta,C) \le \delta</math> dla pewnego <math>\delta > 0</math> daje w powyższym dowodzie <math>H(X|Y) \leq \vartheta (\delta )</math> (dla pewnej ciągłej i ograniczonej funkcji <math>\vartheta</math>). Z tego dostajemy
{{fakt||| Korzystając z ciągłości, możemy łatwo pokazać że osłabienie warunku <math>Pr_E (\Delta,C) = 0</math> do <math>Pr_E (\Delta,C) \le \delta</math> dla pewnego <math>\delta > 0</math> daje w powyższym dowodzie <math>H(X|Y) \leq \vartheta (\delta )</math> (dla pewnej ciągłej i ograniczonej funkcji <math>\vartheta</math>). Z tego dostajemy
:<math>\log_2 m - \vartheta (\delta ) \leq n \cdot C_{\Gamma }</math>
<center><math>\log_2 m - \vartheta (\delta ) \leq n \cdot C_{\Gamma }</math></center>


i ostatecznie
i ostatecznie
:<math>R (C)  \leq C_{\Gamma } + \frac{\vartheta (\delta )}{n}</math>
<center><math>R (C)  \leq C_{\Gamma } + \frac{\vartheta (\delta )}{n}</math></center>


Z grubsza oznacza to że jeśli chcemy uzyskać małe prawdopodobieństwo błędu, szybkość transmisji nie może być wiele większa niż <math>C_{\Gamma}</math>.}}
Z grubsza oznacza to że jeśli chcemy uzyskać małe prawdopodobieństwo błędu, szybkość transmisji nie może być wiele większa niż <math>C_{\Gamma}</math>.}}

Wersja z 13:41, 2 sie 2006

Efektywne kodowanie wiadomości

Dla pary wejście-wyjście (A,B), rozważmy dodatkową zmienną losową

E=AB

możemy ją interpretować jako sygnaturę błędu w czasie transmisji. Zachodzi równość

p(b|a)=p(E=ab)

Wynika to z definicji BSC:

p(b|a)=Pa=b(ab=0)Qab(ab=1)

i zauważenia że

p(E=0)=p(A=0)p(00)+p(A=1)p(10)=P
p(E=1)=p(A=0)p(01)+p(A=1)p(11)=Q


Rozważmy teraz sekwencję par wejście-wyjście (A1,B1),,(Ak,Bk), zachowującą niezależność symboli. Implikuje to że zmienne losowe E1,,Ek (gdzie Ei=AiBi są niezależne (zauważmy że implikacja w drugą stronę nie zawsze zachodzi): Używając notacji p(E=e) lub po prostu p(e na oznaczenie p(E1=e1Ek=ek) możemy to zapisać

p(e1ek)=ap(A=aB=ae)=ap(A=a)p(B=ae|A=a)

Używając niezależności symboli w połączeniu z p(b|a)=p(E=ab) dostajemy

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned p(\vec{B} = \vec{a} \oplus \vec{e} | \vec{A} = \vec{a}) & = p (B_1 = a_1 \oplus e_1 | A_1 = a_1) \cdot \ldots \cdot p (B_k = a_k \oplus e_k | A_k = a_k )\\ & =p (E_1 = e_1) \cdot \ldots \cdot p(E_k = e_k) \endaligned }

dla dowolnego a. A więc

p(e1ek)=p(e1)p(ek)


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 𝒳={x1,,xm}. We wcześniejszych wykładach poznaliśmy techniki efektywnego kodowania wartości. Jeśli kanał jest wierny, wystarczy że znajdziemy optymalne kodowanie φ:𝒳{0,1}* i będziemy wysyłać bit po bicie. Oczekiwana długość (czas) transmisji będzie ograniczony wtedy przez H(X)+1 (na podstawie kodowania Shannona-Fano). Z drugiej strony, zawsze możemy zakodować 𝒳 używając ciągów długości logm, 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 z poprzedniego wykładu 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 w 𝒳={x1,,xm} i kanału Γ)
1. Wybierz n i C{0,1}n takie że |C|=m
2. Ustal bijekcję φ:𝒳C (oczywiście taki kod będzie bezprefiksowy). 
3. Prześlij ciąg znaków φ(X)=a1an przez kanał Γ bit po bicie, 
otrzymując na wyjściu Y=b1bn.
4. Aby odkodować wiadomość wybierz a1anC takie dla którego p(b1bn|a1an) jest maksymalne


Zakładając że kanał jest bezstanowy i pozbawiony feedbacku, mamy

p(b1bk|a1ak)=Qd(a,b)P1d(a,b)

Użyta reguła dekodowania wskazuje zatem dla każdego ciągu b1bn ciąg Δ(b1bn)C, 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):

Ca1anb1bnΔ(b1bn)C

z prawdopodobieństwem błędu

PrE(Δ,X)=p(ΔYX)


Naszą pierwszą obserwacją będzie fakt że najgorszym możliwym rozkładem X jest rozkład jednostajny (p(x)=1m dla xC)

Fakt

Niech X i U będą dwiema zmiennymi losowymi o wartościach w C{0,1}n. U niech będzie miała rozkład losowy, a X dowolny. Wtedy istnieje permutacja φ:CC taka że
PrE(Δ,φX)PrE(Δ,U)

Dowód

TODO

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 PrE(Δ,X) zależy jedynie od C, a więc możemy używać notacji PrE(Δ,C).

Redundancję mierzymy porównując entropię C (o wartości log2|C|), z faktyczną długością kodu (w naszym przypadku n).


Definicja [Szybkość transmisji]

Szybkością transmisji kodu C{0,1}n nazywamy wartość

R(C)=log2|C|n

Intuicyjnie możemy rozumieć że aby przesłać log2|C| bitów informacji, używamy faktycznie n bitów, a więc przesyłamy bity z szybkością log2|C|n</math> bitów na znak.

Dwa warunki jakie postawiliśmy wcześniej oznaczają teraz że chcemy zminimalizować zarówno PrE(Δ,C) jak i R(C).


Przykład [Wadliwa maszyna do pisania]

Wrócimy do przykładu wadliwej maszyny do pisania. Z pewnością taki kanał generuje bardzo dużo błędów. Jednak jeśli użyjemy tylko nieparzystych liter (a,c,e,g,) 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.:

aaabaccccdce

Szybkość transmisji w tym przypadku wynosi 12. 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:

aab#accd#c

Średnia długość kodu wynosi tu 121+122=32, a więc szybkość transmisji wynosi 23. 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ż 23. Rozwinięcie tej metody pozwala podnieść szybkość transmisji do wartości bliskiej 1.


Przykład [Wielokrotny BSC]

W tym przykładzie rozważmy kanał BSC i poprawienie jego jakości przez wysłanie każdego bitu wielokrotnie. Niech n=kl i niech m=2k. Wtedy dowolny ciąg bitów a1ak możemy zakodować jako a1lakl{0,1}n, uzyskując kod o szybkości transmisji 1l. Podobna analiza jak (link TODO) pokazuje że dla dowolnego k jesteśmy w stanie zmniejszyć PrE(Δ,C) do dowolnie małej wartości, wystarczająco wydłużając l. Oznacza to że teoretycznie, o ile kanał nie jest całkowicie chaotyczny (czyli PQ), możemy nim przesyłać wiadomości z dowolnie małym prawdopodobieństwem błędu - ale ceną za to jest spowalnianie prędkości transmisji prawie do zera.


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 CΓ.

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 Γ może być dowolnym kanałem, ale jak zwykle zakładamy niezależność symboli.


Fakt [Przepustowość kanału]

Jeśli PrE(Δ,C)=0 to

R(C)CΓ

Dowód

Niech X=(A1,An) i Y=(B1,Bn) będą zmiennymi z (link TODO) algortymu transmisji. Używając niezależności symboli możemy łatwo policzyć że
H(Y|X)=H(B1|A1)++H(Bn|An)

Wiemy ponadto (link TODO) że

H(Y)H(B1)++H(Bn)

Czyli

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned I (X,Y) & = H(Y) - H(Y|X)\\ & \leq \sum_{i=1}^n H(B_i ) - \sum_{i=1}^n H(B_i | A_i )\\ & = \sum_{i=1}^n \underbrace{(H(B_i ) - H(B_i | A_i ))}_{=I (A_i , B_i)}\\ &\leq n \cdot C_{\Gamma } \endaligned }

(z definicji CΓ)

Z drugiej strony mamy

I(X,Y)=H(X)H(X|Y)=0=log2m

(gdzie m=|C|). Tutaj H(X|Y) ma wartość zero, ponieważ założenie PrE(Δ,C)=0 implikuje że X jest funkcją Y (konkretnie X=Δ(Y). Ponadto H(X)=log2m gdyż X ma rozkład jednostajny. Ostatecznie zatem

R(C)=log2mnCΓ
jak zakładaliśmy.

Fakt

Korzystając z ciągłości, możemy łatwo pokazać że osłabienie warunku PrE(Δ,C)=0 do PrE(Δ,C)δ dla pewnego δ>0 daje w powyższym dowodzie H(X|Y)ϑ(δ) (dla pewnej ciągłej i ograniczonej funkcji ϑ). Z tego dostajemy
log2mϑ(δ)nCΓ

i ostatecznie

R(C)CΓ+ϑ(δ)n
Z grubsza oznacza to że jeśli chcemy uzyskać małe prawdopodobieństwo błędu, szybkość transmisji nie może być wiele większa niż CΓ.