Kanalcodierung/Decodierung von Faltungscodes: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
 
(66 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:
 
== Blockschaltbild und Voraussetzungen ==
 
== Blockschaltbild und Voraussetzungen ==
 
<br>
 
<br>
Ein wesentlicher Vorteil der Faltungscodierung ist, dass es hierfür mit dem Viterbi&ndash;Algorithmus ein sehr effizientes Decodierverfahren gibt. Dieser von Andrew J. Viterbi entwickelte Algorithmus wurde bereits im [http://www.lntwww.de/Digitalsignal%C3%BCbertragung/Viterbi%E2%80%93Empf%C3%A4nger#Blockschaltbild_und_Voraussetzungen_f.C3.BCr_Kapitel_3.8_.281.29 Kapitel 3.8] des Buches &bdquo;Digitalsignalübertragung&rdquo; im Hinblick auf seinen Einsatz zur Entzerrung im Detail beschrieben. Für seinen Einsatz als Faltungsdecodierer gehen wir von folgendem Blockschaltbild und den folgenden Voraussetzungen aus:<br>
+
Ein wesentlicher Vorteil der Faltungscodierung ist, dass es hierfür mit dem Viterbi&ndash;Algorithmus ein sehr effizientes Decodierverfahren gibt. Dieser von&nbsp; [https://de.wikipedia.org/wiki/Andrew_J._Viterbi Andrew James Viterbi]&nbsp; entwickelte Algorithmus wurde bereits im Kapitel&nbsp; [[Digitalsignalübertragung/Viterbi–Empfänger| Viterbi–Empfänger]]&nbsp; des Buches &bdquo;Digitalsignalübertragung&rdquo; im Hinblick auf seinen Einsatz zur Entzerrung beschrieben.  
  
[[Datei:P ID2651 KC T 3 4 S1 v1.png|Systemmodell zur Beschreibung der Decodierung von Faltungscodes|class=fit]]<br>
+
[[Datei:P ID2651 KC T 3 4 S1 v1.png|center|frame|Systemmodell zur Beschreibung der Decodierung von Faltungscodes|class=fit]]
*Die Informationssequenz <u><i>u</i></u> = (<i>u</i><sub>1</sub>, <i>u</i><sub>2</sub>, ...) ist hier im Gegensatz zur Beschreibung der linearen Blockcodes &#8658; [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Blockschaltbild_und_Voraussetzungen Kapitel 1.5] oder von Reed&ndash;Solomon&ndash;Codes &#8658; [http://www.lntwww.de/Kanalcodierung/Reed%E2%80%93Solomon%E2%80%93Decodierung_beim_Ausl%C3%B6schungskanal#Blockschaltbild_und_Voraussetzungen_zu_Kapitel_2.4 Kapitel 2.4] im allgemeinen unendlich lang (<i>&bdquo;semi&ndash;infinite&rdquo;</i>). Für die Informationssymbole gilt stets <i>u<sub>i</sub></i> &#8712; {0, 1}.<br>
 
  
*Die Codesequenz <u><i>x</i></u> = (<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, ...) mit <i>x<sub>i</sub></i> &#8712; {0, 1} hängt außer von <u><i>u</i></u> auch noch von der Coderate <i>R</i> = 1/<i>n</i>, dem Gedächtnis <i>m</i> und der Übertragungsfunktionsmatrix <b>G</b>(<i>D</i>) ab. Bei endlicher Anzahl <i>L</i> an Informationsbits sollte der Faltungscode durch Anfügen von <i>m</i> Nullen terminiert werden:
+
Für seinen Einsatz als Faltungsdecodierer gehen wir von obigem Blockschaltbild und den folgenden Voraussetzungen aus:<br>
 +
*Die Informationssequenz&nbsp; $\underline{u} = (u_1, \ u_2, \ \text{...} \ )$&nbsp; ist hier im Gegensatz zur Beschreibung der linearen Blockcodes &nbsp; &#8658; &nbsp; [[Kanalcodierung/Decodierung_linearer_Blockcodes#Blockschaltbild_und_Voraussetzungen| Erstes Hauptkapitel]]&nbsp; oder von Reed&ndash;Solomon&ndash;Codes &nbsp; &#8658; &nbsp;  [[Kanalcodierung/Reed%E2%80%93Solomon%E2%80%93Decodierung_beim_Ausl%C3%B6schungskanal#Blockschaltbild_und_Voraussetzungen| Zweites Hauptkapitel]]&nbsp; im allgemeinen unendlich lang&nbsp; (<i>&bdquo;semi&ndash;infinite&rdquo;</i>&nbsp;). Für die Informationssymbole gilt stets&nbsp; $u_i &#8712; \{0, 1\}$.<br>
  
::<math>\underline{u}= (u_1,\hspace{0.05cm} u_2,\hspace{0.05cm} ...  \hspace{0.1cm}, u_L, \hspace{0.05cm} 0 \hspace{0.05cm},\hspace{0.05cm} ...  \hspace{0.1cm}, 0 ) \hspace{0.3cm}\Rightarrow \hspace{0.3cm}
+
*Die Codesequenz&nbsp; $\underline{x} = (x_1, \ x_2, \ \text{...})$&nbsp; mit&nbsp; $x_i &#8712; \{0, 1\}$&nbsp; hängt außer von&nbsp; $\underline{u}$&nbsp; auch  von der Coderate&nbsp; $R = 1/n$, dem Gedächtnis&nbsp; $m$&nbsp; und der Übertragungsfunktionsmatrix&nbsp; $\mathbf{G}(D)$&nbsp; ab. Bei endlicher Anzahl&nbsp; $L$&nbsp; an Informationsbits sollte der Faltungscode durch Anfügen von&nbsp; $m$&nbsp; Nullen terminiert werden:
\underline{x}= (x_1,\hspace{0.05cm} x_2,\hspace{0.05cm} ...  \hspace{0.1cm}, x_{2L}, \hspace{0.05cm} x_{2L+1} ,\hspace{0.05cm} ...  \hspace{0.1cm}, \hspace{0.05cm} x_{2L+2m} ) \hspace{0.05cm}.</math>
 
  
*Die Empfangssequenz <u><i>y</i></u> = (<i>y</i><sub>1</sub>, <i>y</i><sub>2</sub>, ...) ergibt sich entsprechend dem angenommenen Kanalmodell. Bei einem digitalen Modell wie dem [http://www.lntwww.de/Kanalcodierung/Klassifizierung_von_Signalen#Binary_Symmetric_Channel_.E2.80.93_BSC Binary Symmetric Channel] (BSC) gilt <i>y<sub>i</sub></i> &#8712; {0, 1}, so dass die Verfälschung von <u><i>x</i></u> auf <u><i>y</i></u> mit der [http://www.lntwww.de/Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung Hamming&ndash;Distanz] <i>d</i><sub>H</sub> (<u><i>x</i></u>, <u><i>y</i></u>) quantifiziert werden kann. Die erforderlichen Modifikationen für den [http://www.lntwww.de/Kanalcodierung/Klassifizierung_von_Signalen#AWGN.E2.80.93Kanal_bei_bin.C3.A4rem_Eingang AWGN&ndash;Kanal] folgen auf [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Viterbi.E2.80.93Algorithmus.2C_basierend_auf_Korrelation_und_Metriken_.281.29 Seite 6] dieses Kapitels.
+
::<math>\underline{u}= (u_1,\hspace{0.05cm} u_2,\hspace{0.05cm} \text{...} \hspace{0.1cm}, u_L, \hspace{0.05cm} 0 \hspace{0.05cm},\hspace{0.05cm} \text{...}  \hspace{0.1cm}, 0 ) \hspace{0.3cm}\Rightarrow \hspace{0.3cm}
 +
\underline{x}= (x_1,\hspace{0.05cm} x_2,\hspace{0.05cm} \text{...}  \hspace{0.1cm}, x_{2L}, \hspace{0.05cm} x_{2L+1} ,\hspace{0.05cm} \text{...}  \hspace{0.1cm}, \hspace{0.05cm} x_{2L+2m} ) \hspace{0.05cm}.</math>
  
*Der nachfolgend beschriebene Viterbi&ndash;Algorithmus liefert eine Schätzung <u><i>z</i></u> für die Codesequenz <u><i>x</i></u> und eine weitere Schätzung <u><i>&upsilon;</i></u> für die Informationssequenz <u><i>u</i></u>. Dabei gilt:
+
*Die Empfangssequenz&nbsp; $\underline{y} = (y_1, \ y_2, \ \text{...} )$&nbsp; ergibt sich entsprechend dem angenommenen Kanalmodell. Bei einem digitalen Modell wie dem&nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#Binary_Symmetric_Channel_.E2.80.93_BSC| Binary Symmetric Channel]]&nbsp; (BSC) gilt&nbsp; $y_i &#8712; \{0, 1\}$, so dass die Verfälschung von&nbsp; $\underline{x}$&nbsp; auf&nbsp; $\underline{y}$&nbsp; mit der&nbsp; [[Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung| Hamming&ndash;Distanz]]&nbsp; $d_{\rm H}(\underline{x}, \underline{y})$&nbsp; quantifiziert werden kann. Die erforderlichen Modifikationen für den&nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#AWGN.E2.80.93Kanal_bei_bin.C3.A4rem_Eingang| AWGN&ndash;Kanal]]&nbsp; folgen im Abschnitt&nbsp; [[Kanalcodierung/Decodierung_von_Faltungscodes#Viterbi.E2.80.93Algorithmus.2C_basierend_auf_Korrelation_und_Metriken| Viterbi&ndash;Algorithmus, basierend auf Korrelation und Metriken]].
 +
 
 +
*Der Viterbi&ndash;Algorithmus liefert eine Schätzung&nbsp; $\underline{z}$&nbsp; für die Codesequenz&nbsp; $\underline{x}$&nbsp; und eine weitere Schätzung&nbsp; $\underline{v}$&nbsp; für die Informationssequenz&nbsp; $\underline{u}$. Dabei gilt:
  
 
::<math>{\rm Pr}(\underline{z} \ne \underline{x})\stackrel{!}{=}{\rm Minimum}
 
::<math>{\rm Pr}(\underline{z} \ne \underline{x})\stackrel{!}{=}{\rm Minimum}
Zeile 27: Zeile 29:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
'''Zusammenfassung :''' Der Viterbi&ndash;Algorithmus sucht bei einem digitalen Kanalmodell (zum Beispiel BSC) von allen möglichen Codesequenzen <u><i>x</i></u>' diejenige Sequenz <u><i>z</i></u> mit der minimalen Hamming&ndash;Distanz <i>d</i><sub>H</sub>(<u><i>x</i></u>', <u><i>y</i></u>) zur Empfangssequenz <u><i>y</i></u>:
+
{{BlaueBox|TEXT= 
 +
$\text{Fazit:}$&nbsp; Bei einem digitalen Kanalmodell (zum Beispiel dem BSC&ndash;Modell) sucht der Viterbi&ndash;Algorithmus von allen möglichen Codesequenzen&nbsp; $\underline{x}\hspace{0.05cm}'$&nbsp; diejenige Sequenz&nbsp; $\underline{z}$&nbsp; mit der minimalen Hamming&ndash;Distanz&nbsp; $d_{\rm H}(\underline{x}\hspace{0.05cm}', \underline{y})$&nbsp; zur Empfangssequenz&nbsp; $\underline{y}$:
  
:<math>\underline{z} = {\rm arg} \min_{\underline{x}' \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm} d_{\rm H}( \underline{x}'\hspace{0.02cm},\hspace{0.02cm} \underline{y}  )  
+
:<math>\underline{z} = {\rm arg} \min_{\underline{x}\hspace{0.05cm}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} d_{\rm H}( \underline{x}\hspace{0.05cm}'\hspace{0.02cm},\hspace{0.02cm} \underline{y}  )  
= {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm} {\rm Pr}( \underline{y}  \hspace{0.05cm}|\hspace{0.05cm} \underline{x}')\hspace{0.05cm}.</math>
+
= {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} {\rm Pr}( \underline{y}  \hspace{0.05cm} \vert \hspace{0.05cm} \underline{x}')\hspace{0.05cm}.</math>
  
Das bedeutet auch: Der Viterbi&ndash;Algorithmus erfüllt das [http://www.lntwww.de/Kanalcodierung/Klassifizierung_von_Signalen#MAP.E2.80.93_und_ML.E2.80.93Kriterium_.281.29 Maximum&ndash;Likelihood&ndash;Kriterium.]<br>
+
Das bedeutet auch: &nbsp; Der Viterbi&ndash;Algorithmus erfüllt das&nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#Maximum-a-posteriori.E2.80.93_und_Maximum-Likelihood.E2.80.93Kriterium| Maximum&ndash;Likelihood&ndash;Kriterium]].}}<br>
  
== Vorbemerkungen zu den nachfolgenden Decodierbeispielen (1) ==
+
== Vorbemerkungen zu den nachfolgenden Decodierbeispielen ==
 
<br>
 
<br>
In den Beispielen dieses Kapitels wird stets von unserem Standard&ndash;Faltungscodierer der Rate <i>R</i>&nbsp;=&nbsp;1/2, mit dem Gedächtnis <i>m</i> = 2 sowie der Übertragungsfunktionsmatrix <b>G</b>(<i>D</i>) = (1 + <i>D</i> + <i>D</i><sup>2</sup>, 1 + <i>D</i><sup>2</sup>) ausgegangen. Die Länge der Informationssequenz sei <i>L</i> = 5 und unter Berücksichtigung der Terminierung <i>L&prime;</i> = 7. Die betrachteten Codesequenzen <u><i>x</i></u> und auch die Empfangssequenzen <u><i>y</i></u> setzen sich somit jeweils aus 14 Bit zusammen. Durch Aufteilung entsprechend <u><i>y</i></u> = ( <u><i>y</i></u><sub>1</sub>,  <u><i>y</i></u><sub>2</sub>, ... ,  <u><i>y</i></u><sub>7</sub>) ergeben sich die Bitpaare  <u><i>y</i></u><sub><i>i</i></Sub>&nbsp;&#8712;&nbsp;{00,&nbsp;01,&nbsp;10,&nbsp;11}.<br>
+
[[Datei:P ID2652 KC T 3 4 S2 v1.png|right|frame|Trellis zur Decodierung der Empfangssequenz&nbsp; $\underline{y}$|class=fit]]
 +
Für alle Beispiele in diesem Kapitels gelten folgende&nbsp; '''Voraussetzungen''':
  
[[Datei:P ID2652 KC T 3 4 S2 v1.png|Trellis zur Decodierung der Empfangssequenz <u><i>y</i></u>|class=fit]]<br>
+
*Standard&ndash;Faltungscodierer: &nbsp; Rate $R = 1/2$,&nbsp; Gedächtnis&nbsp; $m = 2$;
 +
*Übertragungsfunktionsmatrix: &nbsp; $\mathbf{G}(D) = (1 + D + D^2, 1 + D^2)$;
 +
*Länge der Informationssequenz: &nbsp; $L = 5$;
 +
*Berücksichtigung der Terminierung: &nbsp; $L\hspace{0.05cm}' = 7$;
 +
*Länge der Sequenzen&nbsp; $\underline{x}$&nbsp; und&nbsp; $\underline{y}$&nbsp;: &nbsp; jeweils $14$ Bit;
 +
*Aufteilung gemäß&nbsp; $\underline{y} = (\underline{y}_1, \ \underline{y}_2, \ \text{...} \ , \ \underline{y}_7)$ <br>&rArr; &nbsp; Bitpaare&nbsp; $\underline{y}_i &#8712; \{00, 01, 10, 11\}$;
 +
*Viterbi&ndash;Decodierung mittels Trellisdiagramms:
 +
::roter Pfeil &nbsp; &rArr; &nbsp; Hypothese&nbsp; $u_i = 0$,
 +
::blauer Pfeil &nbsp; &rArr; &nbsp; Hypothese&nbsp; $u_i = 1$;
 +
*hypothetische Codesequenz&nbsp; $\underline{x}_i\hspace{0.01cm}' &#8712; \{00, 01, 10, 11\}$;
 +
*alle hypothetischen Größen mit Apostroph.
 +
<br clear=all>
 +
Wir gehen stets davon aus, dass die Viterbi&ndash;Decodierung auf der&nbsp; [[Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung| Hamming&ndash;Distanz]]&nbsp; $d_{\rm H}(\underline{x}_i\hspace{0.01cm}', \ \underline{y}_i)$&nbsp; zwischen dem Empfangswort&nbsp; $\underline{y}_i$&nbsp; und den vier möglichen Codeworten&nbsp; $x_i\hspace{0.01cm}' &#8712; \{00, 01, 10, 11\}$&nbsp; basiert. Dann gehen wir wie folgt vor:
  
Die Viterbi&ndash;Decodierung erfolgt mit Hilfe des dargestellten Trellisdiagramms. Ein roter Pfeil steht für die Hypothese <i>u<sub>i</sub></i> = 0, ein blauer für <i>u<sub>i</sub></i> = 1. Um Verwechslungen zu vermeiden, versehen wir hypothetische Größen mit Apostroph. Auch dann, wenn wir sicher wissen, dass das Informationsbit <i>u<sub>i</sub></i>&nbsp;=&nbsp;1 ist, gilt <i>u<sub>i</sub></i>'&nbsp;&#8712;&nbsp;{0,&nbsp;1}. Neben den Pfeilen steht die jeweilige hypothetische Codesequenz <i><u>x</u><sub>i</sub></i>' &#8712; {00, 01, 10, 11}.<br>
+
*In die noch leeren Kreise werden die Fehlergrößen&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; der Zustände&nbsp; $S_{\mu} (0 &#8804; \mu &#8804; 3)$&nbsp; zu den Zeitpunkten&nbsp; $i$&nbsp; eingetragen. Der Startwert ist stets&nbsp; ${\it \Gamma}_0(S_0) = 0$.
  
Wir gehen auf dieser und den nachfolgenden Seiten davon aus, dass die Viterbi&ndash;Decodierung auf der [http://www.lntwww.de/Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung Hamming&ndash;Distanz] <i>d</i><sub>H</sub>(<u><i>x</i></u><sub><i>i</i></sub>', <u><i>y</i></u><sub><i>i</i></sub>) zwischen dem Empfangswort <u><i>y</i></u><sub><i>i</i></sub> und den vier möglichen Codeworten <i>x</i><sub>i</sub>'&nbsp;&#8712;&nbsp;{00,&nbsp;01,&nbsp;10,&nbsp;11}  basiert. Dann gehen wir wie folgt vor:
+
*Die Fehlergrößen für&nbsp; $i = 1$&nbsp; und&nbsp; $i = 2$&nbsp; ergeben sich zu
  
*In den noch leeren Kreisen werden die Fehlergrößen <i>&Gamma;</i><sub><i>i</i></sub>(<i>S<sub>&mu;</sub></i>) der Zustände <i>S<sub>&mu;</sub></i> (0 &#8804; <i>&mu;</i> &#8804; 3) zu den Zeitpunkten <i>i</i> eingetragen. Der Startwert ist stets <i>&Gamma;</i><sub>0</sub>(<i>S</i><sub>0</sub>) = 0.
+
::<math>{\it \Gamma}_1(S_0) =d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big )  \hspace{0.05cm}, \hspace{2.38cm}{\it \Gamma}_1(S_1) = d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big )  \hspace{0.05cm},</math>
 +
::<math>{\it \Gamma}_2(S_0) ={\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.6cm}{\it \Gamma}_2(S_1) = {\it \Gamma}_1(S_0)+ d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )  \hspace{0.05cm},\hspace{0.6cm}{\it \Gamma}_2(S_2) ={\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.6cm}{\it \Gamma}_2(S_3) = {\it \Gamma}_1(S_1)+ d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )  \hspace{0.05cm}.</math>
  
*Die Fehlergrößen für <i>i</i> = 1 und <i>i</i> = 2 ergeben sich zu
+
*Ab&nbsp; $i = 3$&nbsp; hat das Trellis seine Grundform erreicht, und zur Berechnung aller&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; muss jeweils das Minimum zwischen zwei Summen ermittelt werden:
  
::<math>{\it \Gamma}_1(S_0) \hspace{-0.15cm} =  \hspace{-0.15cm} d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big ) \hspace{0.05cm}, \hspace{2.13cm}{\it \Gamma}_1(S_1) = d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big ) \hspace{0.05cm},</math>
+
::<math>{\it \Gamma}_i(S_0) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
::<math>{\it \Gamma}_2(S_0) \hspace{-0.15cm} \hspace{-0.15cm}{\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.4cm}{\it \Gamma}_2(S_1) = {\it \Gamma}_1(S_0)+ d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big ) \hspace{0.05cm},</math>
+
::<math>{\it \Gamma}_i(S_1)={\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
::<math>{\it \Gamma}_2(S_2) \hspace{-0.15cm} \hspace{-0.15cm}{\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.4cm}{\it \Gamma}_2(S_3) = {\it \Gamma}_1(S_1)+ d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big ) \hspace{0.05cm}.</math>
+
::<math>{\it \Gamma}_i(S_2) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
 +
::<math>{\it \Gamma}_i(S_3) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm}.</math>
  
Die Beschreibung wird auf der nächsten Seite fortgesetzt.<br>
+
*Von den zwei an einem Knoten&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; ankommenden Zweigen wird der schlechtere (der zu einem größeren&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; geführt hätte) eliminiert. Zu jedem Knoten führt dann nur noch ein einziger Zweig.<br>
  
== Vorbemerkungen zu den nachfolgenden Decodierbeispielen (2) ==
+
*Sind alle Fehlergrößen bis einschließlich&nbsp; $i = 7$&nbsp; ermittelt, so kann der Viterbi&ndash;Algotithmus mit der Suche des zusammenhängenden Pfades vom Ende des Trellis &nbsp; &#8658; &nbsp; ${\it \Gamma}_7(S_0)$&nbsp; bis zum Anfang &nbsp; &#8658; &nbsp; ${\it \Gamma}_0(S_0)$&nbsp; abgeschlossen werden.<br>
<br>
 
<b>Fortsetzung der allgemeinen Viterbi&ndash;Beschreibung</b>:<br>
 
  
[[Datei:P ID2664 KC T 3 4 S2 v1.png|Trellis zur Decodierung der Empfangssequenz  <u><i>y</i></u>|class=fit]]<br>
+
*Durch diesen Pfad liegen dann die  am wahrscheinlichsten erscheinende Codesequenz&nbsp; $\underline{z}$&nbsp; und die wahrscheinlichste Informationssequenz&nbsp; $\underline{v}$&nbsp; fest.  
 +
*Nicht für alle Empfangssequenzen&nbsp; $\underline{y}$&nbsp; gilt aber&nbsp; $\underline{z} = \underline{x}$&nbsp; und&nbsp; $\underline{v} = \underline{u}$. Das heißt: &nbsp; '''Bei zu vielen Übertragungsfehlern versagt auch der Viterbi&ndash;Algorithmus'''.<br>
  
*Ab dem Zeitpunkt <i>i</i> = 3 hat das Trellisdiagramm seine Grundform erreicht, und zur Berechnung aller <i>&Gamma;</i><sub><i>i</i></sub>(<i>S<sub>&mu;</sub></i>) muss jeweils das Minimum zwischen zwei Summen ermittelt werden:
+
== Erstellen des Trellis im fehlerfreien Fall &nbsp;&ndash;&nbsp; Fehlergrößenberechnung==
 +
<br>
 +
Zunächst gehen wir von der Empfangssequenz&nbsp; $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$&nbsp; aus, die hier &ndash; wegen der Codewortlänge&nbsp; $n = 2$&nbsp; &ndash; bereits in Bitpaare&nbsp; $\underline{y}_1, \hspace{0.05cm} \text{...} \hspace{0.05cm} , \ \underline{y}_7$&nbsp; unterteilt ist. Die in das Trellis eingetragenen Zahlenwerte und die verschiedenen Stricharten werden im folgenden Text erklärt.<br>
  
::<math>{\it \Gamma}_i(S_0) \hspace{-0.15cm}  =  \hspace{-0.15cm}{\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
+
[[Datei:KC_T_3_4_S3a_neu.png|right|frame|Viterbi–Schema für den Empfangsvektor&nbsp; $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$|class=fit]]
::<math>{\it \Gamma}_i(S_1) \hspace{-0.15cm}  = \hspace{-0.15cm}{\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
 
::<math>{\it \Gamma}_i(S_2) \hspace{-0.15cm}  =  \hspace{-0.15cm}{\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},</math>
 
::<math>{\it \Gamma}_i(S_3) \hspace{-0.15cm}  =  \hspace{-0.15cm}{\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm}.</math>
 
  
*Von den zwei an einem Knoten <i>&Gamma;</i><sub><i>i</i></sub>(<i>S<sub>&mu;</sub></i>) ankommenden Zweigen wird der schlechtere (der zu einem größeren <i>&Gamma;</i><sub><i>i</i></sub>(<i>S<sub>&mu;</sub></i>) geführt hätte) eliminiert. Zu jedem Knoten führt dann nur noch ein einziger Zweig.<br>
+
*Ausgehend vom Initialwert&nbsp; ${\it \Gamma}_0(S_0) = 0$&nbsp; kommt man mit&nbsp; $\underline{y}_1 = (11)$&nbsp; durch Addition der Hamming-Distanzen
 +
:$$d_{\rm H}((00), \ \underline{y}_1) = 2\text{    bzw.   }d_{\rm H}((11), \ \underline{y}_1) = 0$$
  
*Sind alle Fehlergrößen bis einschließlich <i>i</i> = 7 ermittelt, so kann der Viterbi&ndash;Algotithmus mit der Suche das zusammenhängenden Pfades vom Ende des Trellis &#8658; <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>) bis zum Anfang &#8658; <i>&Gamma;</i><sub>0</sub>(<i>S</i><sub>0</sub>) abgeschlossen werden.<br>
+
:zu den Fehlergrößen&nbsp; ${\it \Gamma}_1(S_0) = 2, \ {\it \Gamma}_1(S_1) = 0$.<br>
  
*Durch diesen Pfad liegen dann die  am wahrscheinlichsten erscheinende Codesequenz <u><i>z</i></u> und die wahrscheinlichste Informationssequenz <u><i>&upsilon;</i></u> fest. Nicht für alle Empfangssequenzen  <u><i>y</i></u> gilt aber <u><i>z</i></u> = <u><i>x</i></u> und <u><i>&upsilon;</i></u>&nbsp;=&nbsp;<u><i>u</i></u>. Das heißt: Bei zu vielen Übertragungsfehlern versagt auch der Viterbi&ndash;Algorithmus.<br>
+
*Im zweiten Decodierschritt gibt es Fehlergrößen für alle vier Zustände: &nbsp; Mit&nbsp; $\underline{y}_2 = (01)$&nbsp; erhält man:
  
== Decodierbeispiel für den fehlerfreien Fall (1) ==
+
::<math>{\it \Gamma}_2(S_0) = {\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) = 2+1 = 3 \hspace{0.05cm},</math>
<br>
+
::<math>{\it \Gamma}_2(S_1) ={\it \Gamma}_1(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 2+1 = 3 \hspace{0.05cm},</math>
Zunächst gehen wir von der Empfangssequenz <u><i>y</i></u> = (11, 01, 01, 11, 11, 10, 11) aus, die hier &ndash; wegen der Codewortlänge <i>n</i> = 2 &ndash; bereits in Bitpaare <u><i>y</i></u><sub>1</sub>, ... , <u><i>y</i></u><sub>7</sub> unterteilt ist.<br>
+
::<math>{\it \Gamma}_2(S_2) ={\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 0+2=2 \hspace{0.05cm},</math>
 +
::<math>{\it \Gamma}_2(S_3) = {\it \Gamma}_1(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 0+0=0 \hspace{0.05cm}.</math>
  
[[Datei:P ID2653 KC T 3 4 S2 v95.png|Viterbi–Schema für <u><i>y</i></u> = (11, 01, 01, 11, 11, 10, 11)|class=fit]]<br>
+
*In allen weiteren Decodierschritten müssen jeweils zwei Werte verglichen werden, wobei dem Knoten&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; stets der kleinere Wert zugewiesen wird. Beispielsweise gilt für&nbsp; $i = 3$&nbsp; mit&nbsp; $\underline{y}_3 = (01)$:
  
Die eingetragenen Zahlenwerte und die verschiedenen Stricharten werden im folgenden Text erklärt:
+
::<math>{\it \Gamma}_3(S_0) ={\rm min} \left [{\it \Gamma}_{2}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] ={\rm min} \big [ 3+1\hspace{0.05cm},\hspace{0.05cm} 2+1 \big ] = 3\hspace{0.05cm},</math>
*Ausgehend vom Initialwert <i>&Gamma;</i><sub>0</sub>(<i>S</i><sub>0</sub>) = 0 kommt man mit <u><i>y</i></u><sub>1</sub> = (11) durch Addition der Hamming-Distanzen <i>d</i><sub>H</sub> ((00), <u><i>y</i></u><sub>1</sub>) = 2 bzw. <i>d</i><sub>H</sub> ((11), <u><i>y</i></u><sub>1</sub>) = 0 zu den Fehlergrößen <i>&Gamma;</i><sub>1</sub>(<i>S</i><sub>0</sub>) = 2, <i>&Gamma;</i><sub>1</sub>(<i>S</i><sub>1</sub>) = 0.<br>
+
::<math>{\it \Gamma}_3(S_3) ={\rm min} \left [{\it \Gamma}_{2}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] ={\rm min} \big [ 3+0\hspace{0.05cm},\hspace{0.05cm} 0+2 \big ] = 2\hspace{0.05cm}.</math>
  
*Im zweiten Decodierschritt gibt es Fehlergrößen für alle vier Zustände: Mit <u><i>y</i></u><sub>2</sub> = (01) erhält man:
+
*Ab&nbsp; $i = 6$&nbsp; wird im betrachteten Beispiel die Terminierung des Faltungscodes wirksam. Hier sind nur noch zwei Vergleiche zur Bestimmung von&nbsp; ${\it \Gamma}_6(S_0) = 3$&nbsp; und&nbsp; ${\it \Gamma}_6(S_2)= 0$&nbsp; anzustellen, und für&nbsp; $i = 7$&nbsp; nur noch ein einziger ein Vergleich mit dem Endergebnis&nbsp; ${\it \Gamma}_7(S_0) = 0$.<br>
  
::<math>{\it \Gamma}_2(S_0) \hspace{-0.15cm}  =  \hspace{-0.15cm} {\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 2+1 = 3 \hspace{0.05cm},</math>
 
::<math>{\it \Gamma}_2(S_1) \hspace{-0.15cm}  =  \hspace{-0.15cm} {\it \Gamma}_1(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 2+1 = 3 \hspace{0.05cm},</math>
 
::<math>{\it \Gamma}_2(S_2) \hspace{-0.15cm}  =  \hspace{-0.15cm} {\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 0+2=2 \hspace{0.05cm},</math>
 
::<math>{\it \Gamma}_2(S_3) \hspace{-0.15cm}  =  \hspace{-0.15cm} {\it \Gamma}_1(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big )  = 0+0=0 \hspace{0.05cm}.</math>
 
  
*In allen weiteren Decodierschritten müssen jeweils zwei Werte verglichen werden, wobei dem Knoten <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) stets der kleinere Wert zugewiesen wird. Beispielsweise gilt für <i>i</i> = 3 mit <u><i>y</i></u><sub>3</sub> = (01):
+
Die Beschreibung des Viterbi&ndash;Decodiervorgangs wird auf der nächsten Seite fortgesetzt.
  
::<math>{\it \Gamma}_3(S_0) \hspace{-0.15cm}  = \hspace{-0.15cm}{\rm min} \left [{\it \Gamma}_{2}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] =</math>
+
== Auswerten des Trellis im fehlerfreien Fall &nbsp;&ndash;&nbsp; Pfadsuche==
::<math> \hspace{1.2cm} = \hspace{-0.15cm}{\rm min} \left [ 3+1\hspace{0.05cm},\hspace{0.05cm} 2+1 \right ] = 3\hspace{0.05cm},</math>
+
<br>
::<math>{\it \Gamma}_3(S_3) \hspace{-0.15cm}  =  \hspace{-0.15cm}{\rm min} \left [{\it \Gamma}_{2}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] =</math>
+
Nachdem alle Fehlergrößen&nbsp; ${\it \Gamma}_i(S_{\mu})$ &nbsp;&ndash;&nbsp; im vorliegenden Beispiel für&nbsp; $1 &#8804; i &#8804; 7$&nbsp; und&nbsp; $0 &#8804; \mu &#8804; 3$ &nbsp;&ndash;&nbsp; ermittelt wurden, kann der Viterbi&ndash;Decoder mit der Pfadsuche beginnen:<br>
::<math> \hspace{1.2cm}  =  \hspace{-0.15cm}{\rm min} \left [ 3+0\hspace{0.05cm},\hspace{0.05cm} 0+2 \right ] = 2\hspace{0.05cm}.</math>
 
  
*Ab <i>i</i> = 6 wird im betrachteten Beispiel die Terminierung des Faltungscodes wirksam. Hier sind nur noch zwei Vergleiche zur Bestimmung von <i>&Gamma;</i><sub>6</sub>(<i>S</i><sub>0</sub>) und <i>&Gamma;</i><sub>6</sub>(<i>S</i><sub>2</sub>) anzustellen, und für <i>i</i> = 7 nur noch ein Vergleich mit dem Endergebnis <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>).<br>
+
[[Datei:P ID2654 KC T 3 4 S3b v1.png|right|frame|Viterbi–Pfadsuche für für den Empfangsvektor&nbsp; $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$|class=fit]]
 +
*Die Grafik zeigt das Trellis nach der Fehlergrößenberechnung. Alle Kreise sind mit Zahlenwerten belegt.
 +
*Allerding ist der in der Grafik bereits eingezeichnete wahrscheinlichste Pfad noch nicht bekannt.
 +
*Von den jeweils zwei an einem Knoten ankommenden Zweigen wird stets nur derjenige bei der abschließenden Pfadsuche herangezogen, der zur minimalen Fehlergröße&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; geführt hat.
 +
*Die &bdquo;schlechten&rdquo; Zweige werden verworfen. Sie sind in obiger Grafik jeweils punktiert dargestellt.
 +
<br clear=all>
 +
Die Pfadsuche läuft wie folgt ab:
 +
*Ausgehend vom Endwert&nbsp; ${\it \Gamma}_7(S_0)$&nbsp; wird in Rückwärtsrichtung ein zusammenhängender Pfad bis zum Startwert&nbsp; ${\it \Gamma}_0(S_0)$&nbsp; gesucht. Erlaubt sind nur die durchgezogenen Zweige. Punktierte Linien können nicht Teil des ausgewählten Pfades sein.<br>
  
*Von den jeweils zwei an einem Knoten ankommenden Zweigen wird stets nur derjenige bei der abschließenden Pfadsuche herangezogen, der zur minimalen Fehlergröße <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) geführt hat. Die &bdquo;schlechten&rdquo; Zweige werden verworfen. Sie sind in obiger Grafik jeweils punktiert dargestellt.<br><br>
+
*Der ausgewählte Pfad durchläuft von rechts nach links die Zustände&nbsp; $S_0 &#8592; S_2 &#8592; S_1 &#8592; S_0 &#8592; S_2 &#8592; S_3 &#8592; S_1 &#8592; S_0$&nbsp; und ist in der Grafik grau hinterlegt. Es gibt keinen zweiten durchgehenden Pfad von&nbsp; ${\it \Gamma}_7(S_0)$ zu ${\it \Gamma}_0(S_0)$. Das bedeutet: &nbsp; Das Decodierergebnis ist eindeutig.<br>
  
Die Beschreibung wird auf der nächsten Seite fortgesetzt.
+
*Das Ergebnis&nbsp; $\underline{v} = (1, 1, 0, 0, 1, 0, 0)$&nbsp; des Viterbi&ndash;Decoders hinsichtlich der Informationssequenz erhält man, wenn man für den durchgehenden Pfad &nbsp;&ndash;&nbsp; nun aber in Vorwärtsrichtung von links nach rechts &nbsp;&ndash;&nbsp; die Farben der einzelnen Zweige auswertet $($rot entspricht einer&nbsp; $0$&nbsp;und blau einer&nbsp; $1)$.<br><br>
  
== Decodierbeispiel für den fehlerfreien Fall (2) ==
+
Aus dem Endwert&nbsp; ${\it \Gamma}_7(S_0) = 0$&nbsp; erkennt man, dass  in diesem ersten Beispiel keine Übertragungsfehler vorlagen:
<br>
+
*Das Decodierergebnis&nbsp; $\underline{z}$&nbsp; stimmt also mit dem Empfangsvektor &nbsp;$\underline{y} = (11, 01, 01, 11, 11, 10, 11)$&nbsp; und der tatsächlichen Codesequenz&nbsp; $\underline{x}$&nbsp; überein.
Nachdem alle Fehlergrößen <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) &ndash; in dem vorliegenden Beispiel für 1 &#8804; <i>i</i> &#8804; 7 und 0 &#8804; <i>&mu;</i> &#8804; 3 &ndash; ermittelt wurden, kann der Viterbi&ndash;Decoder mit der Pfadsuche beginnen.<br>
+
*Bei fehlerfreier Übertragung  ist &nbsp;$\underline{v}$&nbsp; nicht nur die nach dem ML&ndash;Kriterium wahrscheinlichste Informationssequenz&nbsp; $\underline{u}$, sondern beide sind sogar identisch: &nbsp; $\underline{v} \equiv \underline{u}$.<br>
  
[[Datei:P ID2654 KC T 3 4 S3b v1.png|Viterbi–Pfadsuche für <u><i>y</i></u> = (11, 01, 01, 11, 11, 10, 11)|class=fit]]<br>
 
  
Die Pfadsuche läuft wie folgt ab:
+
<i>Anmerkung:</i> &nbsp; Bei der beschriebenen Decodierung wurde natürlich von der bereits in der Überschrift enthaltenen Information &bdquo;Fehlerfreier Fall&rdquo; kein Gebrauch gemacht.  
*Ausgehend vom Endwert <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>) wird in Rückwärtsrichtung ein zusammenhängender Pfad bis zum Startwert  <i>&Gamma;</i><sub>0</sub>(<i>S</i><sub>0</sub>) gesucht. Erlaubt sind nur die durchgezogenen Zweige. Punktierte Linien können nicht Teil des ausgewählten Pfades sein.<br>
 
  
*Der ausgewählte Pfad ist in der Grafik grau markiert. Er durchläuft von rechts nach links die Zustände <i>S</i><sub>0</sub> &#8592; <i>S</i><sub>2</sub> &#8592; <i>S</i><sub>1</sub> &#8592; <i>S</i><sub>0</sub> &#8592; <i>S</i><sub>2</sub> &#8592; <i>S</i><sub>3</sub> &#8592; <i>S</i><sub>1</sub> &#8592; <i>S</i><sub>0</sub>. Es gibt keinen zweiten durchgehenden Pfad von  <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>) zu <i>&Gamma;</i><sub>0</sub>(<i>S</i><sub>0</sub>). Das bedeutet: Das Decodierergebnis ist eindeutig.<br>
+
Nun folgen drei Beispiele zur Viterbi&ndash;Decodierung für den fehlerbehafteten Fall. <br>
  
*Das Ergebnis <u><i>&upsilon;</i></u> = (1, 1, 0, 0, 1, 0, 0) des Viterbi&ndash;Decoders hinsichtlich der Informationssequenz erhält man, wenn man für den durchgehenden Pfad &ndash; nun aber in Vorwärtsrichtung von links nach rechts &ndash; die Farben der einzelnen Zweige auswertet (rot entspricht einer 0, blau einer 1).<br><br>
+
== Decodierbeispiele für den fehlerbehafteten Fall ==
 +
<br>
 +
{{GraueBox|TEXT= 
 +
$\text{Beispiel 1:}$&nbsp;  Wir gehen hier vom Empfangsvektor &nbsp;$\underline{y} = \big (11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 00\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) $&nbsp; aus, der keine gültige Codesequenz&nbsp; $\underline{x}$&nbsp; darstellt. Die Berechnung der Fehlergrößen&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; und die Pfadsuche geschieht wie auf der Seite&nbsp; [[Kanalcodierung/Decodierung_von_Faltungscodes#Vorbemerkungen_zu_den_nachfolgenden_Decodierbeispielen| Vorbemerkungen]]&nbsp; beschrieben und auf den beiden  letzten Seite für den fehlerfreien Fall demonstriert.<br>
  
Aus dem Endwert <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>) = 0 erkennt man, dass  in diesem ersten Beispiel keine Übertragungsfehler vorlagen. Das Decodierergebnis <u><i>z</i></u> stimmt also mit dem Empfangsvektor <u><i>y</i></u> = (11, 01, 01, 11, 11, 10, 11) und der tatsächlichen Codesequenz <u><i>x</i></u> überein. Außerdem ist <u><i>&upsilon;</i></u> nicht nur die nach dem ML&ndash;Kriterium wahrscheinlichste Informationssequenz  <u><i>u</i></u>, sondern es gilt auch hier die Identität: <u><i>&upsilon;</i></u> = <u><i>u</i></u>.<br>
+
[[Datei:P ID2655 KC T 3 4 S4a v1.png|center|frame|Decodierbeispiel mit zwei Bitfehlern|class=fit]]
  
<i>Anmerkung:</i> Bei der beschriebenen Decodierung wurde von der bereits in der Überschrift enthaltenen Information &bdquo;Fehlerfreier Fall&rdquo; natürlich kein Gebrauch gemacht wurde.<br>
+
Als&nbsp; '''Resümee'''&nbsp; dieses ersten Beispiels ist festzuhalten:
 +
*Auch beim obigen Trellis  lässt sich ein eindeutiger Pfad (mit dunkelgrauer Hinterlegung) zurückverfolgen, der zu den folgenden Ergebnissen führt <br>(erkennbar an den Beschriftungen bzw. den Farben dieses Pfades):
  
== Decodierbeispiele für den fehlerbehafteten Fall (1) ==
+
::<math>\underline{z} = \big (00\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 00\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11 \hspace{0.05cm} \big ) \hspace{0.05cm},</math>
<br>
+
::<math> \underline{\upsilon} =\big (0\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0 \hspace{0.05cm} \big ) \hspace{0.05cm}.</math>
Es folgen zwei weitere Beispiele zur Viterbi&ndash;Decodierung. Die Berechnung der Fehlergrößen  <i>&Gamma;</i><sub><i>i</i></sub>(<i>S<sub>&mu;</sub></i>) geschieht wie auf [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Vorbemerkungen_zu_den_nachfolgenden_Decodierbeispielen_.281.29 Seite 2] beschrieben und auf der letzten Seite für den fehlerfreien Fall demonstriert.<br>
 
  
[[Datei:P ID2655 KC T 3 4 S4a v1.png|Decodierbeispiel mit zwei Bitfehlern|class=fit]]<br>
+
*Der Vergleich der am wahrscheinlichsten gesendeten Codesequenz &nbsp;$\underline{z}$&nbsp; mit dem Empfangsvektor &nbsp;$\underline{y}$&nbsp; zeigt, dass hier zwei Bitfehler (gleich am Beginn) vorlagen. Da aber der verwendete Faltungscode die [[Kanalcodierung/Codebeschreibung_mit_Zustands%E2%80%93_und_Trellisdiagramm#Definition_der_freien_Distanz_.281.29| freie Distanz]] $d_{\rm F} = 5$ aufweist, führen zwei Fehler noch nicht zu einem falschen Decodierergebnis.<br>
  
Als Resümee dieses ersten Beispiels mit obigem Trellis ist festzuhalten:
+
*Es gibt andere Pfade wie zum Beispiel den heller markierten Pfad $(S_0 &#8594; S_1 &#8594; S_3 &#8594; S_3 &#8594; S_3 &#8594; S_2 &#8594; S_0 &#8594; S_0)$, die zunächst als vielversprechend erscheinen. Erst im letzten Decodierschritt $(i = 7)$ kann dieser hellgraue Pfad endgültig verworfen werden.<br>
*Auch hier lässt sich ein eindeutiger Pfad (dunkelgraue Markierung) zurückverfolgen, der zu den folgenden Ergebnissen führt (erkennbar an den Beschriftungen bzw. den Farben dieses Pfades):
 
  
::<math>\underline{z} \hspace{-0.15cm}  = \hspace{-0.15cm} \big (00\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 00\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11 \hspace{0.05cm} \big ) \hspace{0.05cm},</math>
+
*Das Beispiel zeigt, dass eine zu frühe Entscheidung oft nicht zielführend ist. Man erkennt auch die Zweckmäßigkeit der Terminierung: &nbsp; Bei endgültiger Entscheidung bei $i = 5$ (Ende der Informationssequenz) wären die Sequenzen &nbsp;$(0, 1, 0, 1, 1)$&nbsp; und &nbsp;$(1, 1, 1, 1, 0)$&nbsp; noch als gleichwahrscheinlich angesehen worden.<br><br>
::<math> \underline{\upsilon} \hspace{-0.15cm}  =  \hspace{-0.15cm} \big (0\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0 \hspace{0.05cm} \big ) \hspace{0.05cm}.</math>
 
  
*Der Vergleich der am wahrscheinlichsten gesendeten Codesequenz <u><i>z</i></u> mit dem Empfangsvektor <u><i>y</i></u> zeigt, dass hier zwei Bitfehler (am Beginn) vorlagen. Da aber der verwendete Faltungscode die [http://www.lntwww.de/Kanalcodierung/Codebeschreibung_mit_Zustands%E2%80%93_und_Trellisdiagramm#Definition_der_freien_Distanz_.281.29 freie Distanz <i>d</i><sub>F</sub> = 5] aufweist, führen zwei Fehler noch nicht zu einem falschen Decodierergebnis.<br>
+
<i>Anmerkungen:</i> &nbsp; Bei der Berechnung von&nbsp; ${\it \Gamma}_5(S_0) = 3$&nbsp; und&nbsp; ${\it \Gamma}_5(S_1) = 3$&nbsp; führen hier jeweils die beiden Vergleichszweige zur exakt gleichen minimalen Fehlergröße. In der Grafik sind diese beiden Sonderfälle durch Strichpunktierung markiert.<br>
  
*Es gibt andere Pfade wie zum Beispiel den heller markierten Pfad (<i>S</i><sub>0</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>3</sub> &#8594; <i>S</i><sub>3</sub> &#8594; <i>S</i><sub>3</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub>), die zunächst als vielversprechend erscheinen. Erst im letzten Decodierschritt (<i>i</i>&nbsp;=&nbsp;7) kann dieser hellgraue Pfad endgültig verworfen werden.<br>
+
*In diesem Beispiel hat dieser Sonderfall keine Auswirkung auf die Pfadsuche.  
 +
*Der Algorithmus erwartet trotzdem stets eine Entscheidung zwischen zwei konkurrierenden Zweigen.
 +
*In der Praxis hilft man sich dadurch, dass man bei Gleichheit  einen der beiden Pfade zufällig auswählt.}}<br>
  
*Dieses Beispiel zeigt, dass eine zu frühe Entscheidung oft zu einem Decodierfehler führt, und man erkennt auch die Zweckmäßigkeit der Terminierung: Bei endgültiger Entscheidung zum Zeitpunkt <i>i</i> = 5 (dem Ende der eigentlichen Informationssequenz) wären die Sequenzen (0, 1, 0, 1, 1) und (1, 1, 1, 1, 0) noch als gleichwahrscheinlich angesehen worden.<br><br>
+
{{GraueBox|TEXT= 
 +
$\text{Beispiel 2:}$&nbsp; 
 +
Im diesem Beispiel gehen wir von folgenden Voraussetzungen bezüglich Quelle und Coder aus:
  
<i>Anmerkung:</i> Bei der Berechnung von <i>&Gamma;</i><sub>5</sub>(<i>S</i><sub>0</sub>) = 3 und <i>&Gamma;</i><sub>5</sub>(<i>S</i><sub>1</sub>) = 3 führen hier jeweils die beiden Vergleichszweige zur gleichen minimalen Fehlergröße. In der Grafik sind diese beiden Sonderfälle durch Strichpunktierung markiert.<br>
+
::<math>\underline{u} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0 \big )\hspace{0.3cm}\Rightarrow \hspace{0.3cm}
 +
\underline{x} = \big (11\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) \hspace{0.05cm}.</math>
  
In diesem Beispiel hat dieser Sonderfall keine Auswirkung auf die Pfadsuche. Der Algorithmus erwartet trotzdem stets eine Entscheidung zwischen zwei konkurrierenden Zweigen. In der Praxis hilft man sich dadurch, dass man bei Gleichheit  einen der beiden Pfade zufällig auswählt.<br>
+
[[Datei:P ID2700 KC T 3 4 S4b v1.png|center|frame|Decodierbeispiel mit drei Bitfehlern|class=fit]]<br>
  
== Decodierbeispiele für den fehlerbehafteten Fall (2) ==
+
Aus der Grafik erkennt man, dass sich hier der Decoder trotz dreier Bitfehler für den richtigen Pfad (dunkle Hinterlegung) entscheidet.
<br>
+
*Es gibt also nicht immer eine Fehlentscheidung, wenn mehr als&nbsp; $d_{\rm F}/2$&nbsp; Bitfehler aufgetreten sind.
Im letzten Beispiel gehen wir stets von folgenden Voraussetzungen bezüglich Quelle und Coder aus:
+
*Aber bei statistischer Verteilung der drei Übertragungsfehler würde häufiger falsch entschieden als richtig.}}<br>
  
:<math>\underline{u} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0  \big )\hspace{0.3cm}\Rightarrow \hspace{0.3cm}
+
{{GraueBox|TEXT= 
\underline{x} = \big (11\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) \hspace{0.05cm}.</math>
+
$\text{Beispiel 3:}$&nbsp;  Auch hier gelte&nbsp; <math>\underline{u} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0  \big )\hspace{0.3cm}\Rightarrow \hspace{0.3cm}
 +
\underline{x} = \big (11\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) \hspace{0.05cm}.</math> Im Unterschied zum&nbsp; $\text{Beispiel 2}$&nbsp; ist aber noch ein vierter Bitfehler in Form von&nbsp; $\underline{y}_7 = (01)$ hinzugefügt.
  
Aus der ersten der beiden Grafiken erkennt man, dass sich hier der Decoder trotz dreier Bitfehler für den richtigen Pfad (dunkle Hinterlegung) entscheidet. Es gibt also nicht immer eine Fehlentscheidung, wenn mehr als <i>d</i><sub>F</sub>/2 Bitfehler aufgetreten sind.<br>
+
[[Datei:P ID2704 KC T 3 4 S4c v1.png|center|frame|Decodierbeispiel mit vier Bitfehlern|class=fit]]
  
[[Datei:P ID2700 KC T 3 4 S4b v1.png|Decodierbeispiel mit drei Bitfehlern|class=fit]]<br>
+
*Nun führen beide Zweige im Schritt&nbsp; $i = 7$&nbsp; zur minimalen Fehlergröße&nbsp; ${\it \Gamma}_7(S_0) = 4$, erkennbar an den strichpunktierten Übergängen. Entscheidet man sich im dann erforderlichen Losverfahren für den dunkel hinterlegten Pfad, so wird auch bei vier Bitfehlern noch die richtige Entscheidung getroffen:  &nbsp; $\underline{v} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0  \big )$. <br>
  
In der unteren Grafik ist noch ein vierter Bitfehler in Form von <i><u>y</u></i><sub>7</sub> = (01) hinzugefügt:
+
*Andernfalls kommt es zu einer Fehlentscheidung. Je nachdem, wie das Auswürfeln im Schritt&nbsp; $i =6$&nbsp; zwischen den beiden strichpunktierten Konkurrenten ausgeht, entscheidet man sich entweder für den violetten oder den hellgrauen Pfad. Mit dem richtigen Pfad haben beide wenig gemein.}}
*Nun führen beide Zweige im Schritt <i>i</i>&nbsp;=&nbsp;7 zur minimalen Fehlergröße <i>&Gamma;</i><sub>7</sub>(<i>S</i><sub>0</sub>) = 4, erkennbar an den strichpunktierten Übergängen. Entscheidet man sich im dann erforderlichen Losverfahren für den dunkel hinterlegten Pfad, so wird auch bei vier Bitfehlern noch die richtige Entscheidung getroffen.<br>
 
  
*Andernfalls kommt es zu einer Fehlentscheidung. Je nachdem, wie das Auswürfeln im Schritt <i>i</i>&nbsp;=&nbsp;6 zwischen den beiden strichpunktierten Konkurrenten ausgeht, entscheidet man sich entweder für den violetten oder den hellgrauen Pfad.  Mit dem richtigen Pfad haben beide wenig gemein.<br>
 
  
:[[Datei:P ID2704 KC T 3 4 S4c v1.png|Decodierbeispiel mit vier Bitfehlern|class=fit]]<br>
 
  
 
== Zusammenhang zwischen Hamming–Distanz und Korrelation ==
 
== Zusammenhang zwischen Hamming–Distanz und Korrelation ==
 
<br>
 
<br>
Insbesondere beim [http://www.lntwww.de/Kanalcodierung/Klassifizierung_von_Signalen#Binary_Symmetric_Channel_.E2.80.93_BSC BSC&ndash;Modell] &ndash; aber auch bei jedem anderen Binärkanal &nbsp;&#8658;&nbsp; Eingang <i>x<sub>i</sub></i> &#8712; {0, 1}, Ausgang <i>y<sub>i</sub></i> &#8712; {0, 1} wie zum Beispiel dem [http://www.lntwww.de/Digitalsignal%C3%BCbertragung/B%C3%BCndelfehlerkan%C3%A4le#Kanalmodell_nach_Gilbert.E2.80.93Elliott_.281.29 Gilbert&ndash;Elliott&ndash;Modell] &ndash; liefert die Hamming&ndash;Distanz <i>d</i><sub>H</sub>(<u><i>x</i></u>,&nbsp;<u><i>y</i></u>) genau die gleiche Information über die Ähnlichkeit der Eingangsfolge <u><i>x</i></u> und der Ausgangsfolge <u><i>y</i></u> wie das [http://www.lntwww.de/Digitalsignal%C3%BCbertragung/Signale,_Basisfunktionen_und_Vektorr%C3%A4ume#Zur_Nomenklatur_im_vierten_Kapitel_.282.29 innere Produkt.] Nimmt man an, dass die beiden Folgen in bipolarer Darstellung vorliegen (gekennzeichnet durch Tilden) und dass die Folgenlänge jeweils <i>L</i> ist, so gilt für das innere Produkt:
+
Insbesondere beim&nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#Binary_Symmetric_Channel_.E2.80.93_BSC| BSC&ndash;Modell]]&nbsp; &ndash; aber auch bei jedem anderen Binärkanal &nbsp; &#8658; &nbsp; Eingang&nbsp; $x_i &#8712; \{0,1\}$,&nbsp; Ausgang $y_i &#8712; \{0,1\}$&nbsp; wie zum Beispiel dem&nbsp; [[Digitalsignalübertragung/Bündelfehlerkanäle#Kanalmodell_nach_Gilbert.E2.80.93Elliott| Gilbert&ndash;Elliott&ndash;Modell]]&nbsp; &ndash; liefert die Hamming&ndash;Distanz&nbsp; $d_{\rm H}(\underline{x}, \ \underline{y})$&nbsp; genau die gleiche Information über die Ähnlichkeit der Eingangsfolge&nbsp; $\underline{x}$&nbsp; und der Ausgangsfolge&nbsp; $\underline{y}$&nbsp; wie das&nbsp; [[Digitalsignalübertragung/Signale,_Basisfunktionen_und_Vektorräume#Zur_Nomenklatur_im_vierten_Kapitel| innere Produkt]]. Nimmt man an, dass die beiden Folgen in bipolarer Darstellung vorliegen (gekennzeichnet durch Tilden) und dass die Folgenlänge jeweils&nbsp; $L$&nbsp; ist, so gilt für das innere Produkt:
  
:<math><\hspace{-0.1cm}\underline{\tilde{x}}, \hspace{0.05cm}\underline{\tilde{y}} \hspace{-0.1cm}> \hspace{0.15cm}
+
::<math><\hspace{-0.1cm}\underline{\tilde{x}}, \hspace{0.05cm}\underline{\tilde{y}} \hspace{-0.1cm}> \hspace{0.15cm}
 
= \sum_{i = 1}^{L} \tilde{x}_i \cdot \tilde{y}_i \hspace{0.3cm}{\rm mit } \hspace{0.2cm} \tilde{x}_i = 1 - 2 \cdot x_i  \hspace{0.05cm},\hspace{0.2cm} \tilde{y}_i = 1 - 2 \cdot y_i \hspace{0.05cm},\hspace{0.2cm} \tilde{x}_i, \hspace{0.05cm}\tilde{y}_i \in \hspace{0.1cm}\{ -1, +1\} \hspace{0.05cm}.</math>
 
= \sum_{i = 1}^{L} \tilde{x}_i \cdot \tilde{y}_i \hspace{0.3cm}{\rm mit } \hspace{0.2cm} \tilde{x}_i = 1 - 2 \cdot x_i  \hspace{0.05cm},\hspace{0.2cm} \tilde{y}_i = 1 - 2 \cdot y_i \hspace{0.05cm},\hspace{0.2cm} \tilde{x}_i, \hspace{0.05cm}\tilde{y}_i \in \hspace{0.1cm}\{ -1, +1\} \hspace{0.05cm}.</math>
  
Wir bezeichnen dieses innere Produkt manchmal auch als &bdquo;Korrelationswert&rdquo;. Die Anführungszeichen sollen darauf hinweisen, dass der Wertebereich eines [http://www.lntwww.de/Stochastische_Signaltheorie/Zweidimensionale_Zufallsgr%C3%B6%C3%9Fen#Korrelationskoeffizient Korrelationskoeffizienten] eigentlich &plusmn;1 ist.<br>
+
Wir bezeichnen dieses innere Produkt manchmal auch als den&nbsp; "'''Korrelationswert'''".&nbsp; Im Unterschied zum&nbsp; [[Stochastische_Signaltheorie/Zweidimensionale_Zufallsgr%C3%B6%C3%9Fen#Korrelationskoeffizient| Korrelationskoeffizienten]]&nbsp; kann der Korrelationswert den Wertebereich&nbsp;  $&plusmn;1$&nbsp; durchaus überschreiten.<br>
  
{{Beispiel}}''':''' Wir betrachten hier zwei Binärfolgen der Länge <i>L</i> = 10:<br>
+
[[Datei:KC_T_3_4_S5_neu.png|right|frame|Zusammenhang zwischen Haming–Distanz und Korrelationswert |class=fit]]
 +
{{GraueBox|TEXT= 
 +
$\text{Beispiel 4:}$&nbsp;  Wir betrachten hier zwei Binärfolgen der Länge&nbsp; $L = 10$.<br>
 +
*Links dargestellt sind die unipolaren Folgen&nbsp; $\underline{x}$&nbsp; und&nbsp; $\underline{y}$&nbsp; sowie das Produkt&nbsp; $\underline{x} \cdot \underline{y}$.
 +
*Man erkennt die Hamming&ndash;Distanz&nbsp; $d_{\rm H}(\underline{x}, \ \underline{y}) = 6$ &nbsp; &#8658; &nbsp; sechs Bitfehler an den Pfeilpositionen.
 +
*Das innere Produkt&nbsp; $ < \underline{x} \cdot \underline{y} > \hspace{0.15cm} = \hspace{0.15cm}0$&nbsp; hat hier keine Aussagekraft. Zum Beispiel ist&nbsp; $< \underline{0} \cdot \underline{y} >&nbsp;$ unabhängig von&nbsp; $\underline{y}$&nbsp; stets Null.
  
[[Datei:P ID2662 KC T 3 4 S5 v1.png|Zusammenhang zwischen Haming–Distanz und „Korrelation” |class=fit]]<br>
 
  
*Links dargestellt sind die unipolaren Folgen <u><i>x</i></u> und <u><i>y</i></u> sowie das Produkt <u><i>x</i></u> &middot; <u><i>y</i></u>. Man erkennt die Hamming&ndash;Distanz <i>d</i><sub>H</sub>(<u><i>x</i></u>, <u><i>y</i></u>) = 6 &nbsp;&#8658;&nbsp; sechs Bitfehler an den Pfeilpositionen. Das innere Produkt &#9001;<u><i>x</i></u> &middot; <u><i>y</i></u>&#9002; = 0 hat hier keine Aussagekraft. Zum Beispiel ist &#9001;<u>0</u> &middot; <u><i>y</i></u>&#9002; unabhängig von <u><i>y</i></u> stets Null.
+
Die Hamming&ndash;Distanz&nbsp; $d_{\rm H} = 6$&nbsp; erkennt man auch aus der bipolaren (antipodalen) Darstellung der rechten Grafik.
 +
*Die &bdquo;Korrelationswert&rdquo; hat nun den richtigen Wert:
 +
:$$4 \cdot (+1) + 6 \cdot (-1) = \, -2.$$
 +
*Es gilt der deterministische Zusammenhang zwischen den beiden Größen mit der Folgenlänge&nbsp; $L$:
  
*Die Hamming&ndash;Distanz <i>d</i><sub>H</sub> = 6 erkennt man auch aus der bipolaren (antipodalen) Darstellung der rechten Grafik. Die &bdquo;Korrelationswert&rdquo; hat aber nun den richtigen Wert 4 &middot; (+1) + 6 &middot; (&ndash;1) = &ndash;2. Es gilt der deterministische Zusammenhang zwischen den beiden Größen mit der Folgenlänge <i>L</i>:
+
:$$ < \underline{ \tilde{x} } \cdot \underline{\tilde{y} } > \hspace{0.15cm} = \hspace{0.15cm} L - 2 \cdot d_{\rm H} (\underline{\tilde{x} }, \hspace{0.05cm}\underline{\tilde{y} })\hspace{0.05cm}. $$}}
 +
<br clear=all>
  
::<math><\hspace{-0.1cm}\underline{\tilde{x}}, \hspace{0.05cm}\underline{\tilde{y}} \hspace{-0.1cm}> \hspace{0.15cm}
+
{{BlaueBox|TEXT= 
= L - 2 \cdot d_{\rm H} (\underline{\tilde{x}}, \hspace{0.05cm}\underline{\tilde{y}})\hspace{0.05cm}.</math>{{end}}<br>
+
$\text{Fazit:}$&nbsp;  Interpretieren wir nun diese Gleichung für einige Sonderfälle:
 +
*Identische Folgen: &nbsp; Die Hamming&ndash;Distanz ist gleich&nbsp; $0$&nbsp; und der &bdquo;Korrelationswert&rdquo; gleich&nbsp; $L$.<br>
  
Interpretieren wir nun diese Gleichung für einige Sonderfälle:
+
*Invertierte: Folgen: &nbsp; Die Hamming&ndash;Distanz ist gleich&nbsp; $L$&nbsp; und der &bdquo;Korrelationswert&rdquo; gleich&nbsp; $-L$.<br>
*Identische Folgen: Die Hamming&ndash;Distanz ist gleich 0 und der &bdquo;Korrelationswert&rdquo; gleich <i>L</i>.<br>
 
  
*Invertierte: Folgen: Die Hamming&ndash;Distanz ist gleich <i>L</i> und der &bdquo;Korrelationswert&rdquo; gleich &ndash;<i>L</i>.<br>
+
*Unkorrelierte Folgen: &nbsp; Die Hamming&ndash;Distanz ist gleich&nbsp; $L/2$, der &bdquo;Korrelationswert&rdquo; gleich&nbsp; $0$.}}
  
*Unkorrelierte Folgen: Die Hamming&ndash;Distanz ist gleich <i>L</i>/2, der &bdquo;Korrelationswert&rdquo; gleich 0.<br><br>
+
== Viterbi–Algorithmus, basierend auf Korrelation und Metriken ==
 +
<br>
 +
Mit den Erkenntnissen der letzten Seite lässt sich der Viterbi&ndash;Algorithmus auch wie folgt charakterisieren.  
  
== Viterbi–Algorithmus, basierend auf Korrelation und Metriken (1) ==
+
{{BlaueBox|TEXT=
<br>
+
$\text{Alternative Beschreibung:}$&nbsp; 
Mit den Erkenntnissen der letzten Seite lässt sich der Viterbi&ndash;Algorithmus auch wie folgt charakterisieren. Der Algorithmus sucht von allen möglichen Codesequenzen <u><i>x</i></u>&prime; &#8712; <i>C</i> die Sequenz <u><i>z</i></u> mit der maximalen Korrelation zur Empfangssequenz <u><i>y</i></u>:
+
Der Viterbi&ndash;Algorithmus sucht von allen möglichen Codesequenzen&nbsp; $\underline{x}' &#8712; \mathcal{C}$&nbsp; die Sequenz&nbsp; $\underline{z}$&nbsp; mit dem maximalen &bdquo; Korrelationswert&rdquo; zur Empfangssequenz&nbsp; $\underline{y}$:
  
:<math>\underline{z} = {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm} \left\langle \tilde{\underline{x}}'\hspace{0.05cm} ,\hspace{0.05cm}  \tilde{\underline{y}} \right\rangle
+
::<math>\underline{z} = {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} \left\langle \tilde{\underline{x} }'\hspace{0.05cm} ,\hspace{0.05cm}  \tilde{\underline{y} } \right\rangle
  \hspace{0.4cm}{\rm mit }\hspace{0.4cm}\tilde{\underline{x}}'= 1 - 2 \cdot \underline{x}'\hspace{0.05cm}, \hspace{0.2cm}
+
  \hspace{0.4cm}{\rm mit }\hspace{0.4cm}\tilde{\underline{x} }\hspace{0.05cm}'= 1 - 2 \cdot \underline{x}'\hspace{0.05cm}, \hspace{0.2cm}
  \tilde{\underline{y}}= 1 - 2 \cdot \underline{y}
+
  \tilde{\underline{y} }= 1 - 2 \cdot \underline{y}
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
&#9001; ... &#9002; bezeichnet einen &bdquo;Korrelationswert&rdquo; entsprechend den Aussagen auf der letzten Seite. Die Tilden weisen wieder auf die bipolare (antipodale) Darstellung hin.<br>
+
$&#9001;\ \text{ ...} \  &#9002;$&nbsp; bezeichnet einen &bdquo;Korrelationswert&rdquo; entsprechend den Aussagen auf der letzten Seite. Die Tilden weisen wieder auf die bipolare (antipodale) Darstellung hin.}}<br>
 
 
Die Grafik zeigt die diesbezügliche Trellisauswertung. Zugrunde liegt
 
*der gleiche Faltungscode mit <i>R</i> = 1/2, <i>m</i> = 2 und <b>G</b>(<i>D</i>) = (1 + <i>D</i> + <i>D</i><sup>2</sup>, 1 + <i>D</i><sup>2</sup>), und<br>
 
 
 
*der gleiche Empfangsvektor <u><i>y</i></u> = (11, 11, 10, 00, 01, 01, 11)<br><br>
 
  
wie für das [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Decodierbeispiel_f.C3.BCr_den_fehlerfreien_Fall_.281.29 Trellisdiagramm] auf Seite 3a dieses Kapitels, basierend auf der minimalen Hamming&ndash;Distanz und den Fehlergrößen <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>). Beide Darstellungen ähneln sich sehr.<br>
+
Die Grafik zeigt die diesbezügliche Trellisauswertung. Zugrunde liegt wie für die&nbsp; [[Kanalcodierung/Decodierung_von_Faltungscodes#Decodierbeispiele_f.C3.BCr_den_fehlerbehafteten_Fall| Trellisauswertung gemäß Beispiel 1]]&nbsp; &ndash; basierend auf der minimalen Hamming&ndash;Distanz und den Fehlergrößen ${\it \Gamma}_i(S_{\mu})$ &ndash; wieder die Eingangsfolge&nbsp;
 +
$\underline{u} = \big (0\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0 \hspace{0.05cm} \big )$ &nbsp; &rArr; &nbsp; Codefolge
 +
$\underline{x} = \big (00, 11, 10, 00, 01, 01, 11 \big ) \hspace{0.05cm}.$
  
[[Datei:P ID2663 KC T 3 4 S6 v1.png|Viterbi–Decodierung, basierend auf Korrelation und Metrik|class=fit]]<br>
+
[[Datei:P ID2663 KC T 3 4 S6 v1.png|right|frame|Viterbi–Decodierung, basierend auf Korrelation und Metrik|class=fit]]
 +
Weiter werden vorausgesetzt:
 +
*der Standard&ndash;Faltungscodierer: &nbsp; Rate&nbsp; $R = 1/2$,&nbsp; Gedächtnis&nbsp; $m = 2$;
 +
*die Übertragungsfunktionsmatrix: &nbsp; $\mathbf{G}(D) = (1 + D + D^2, 1 + D^2)$;
 +
*Länge der Informationssequenz: &nbsp; $L = 5$;
 +
*Berücksichtigung der Terminierung: &nbsp;$L' = 7$;
 +
*der Empfangsvektor &nbsp; $\underline{y} = (11, 11, 10, 00, 01, 01, 11)$ <br>&rArr; &nbsp; zwei Bitfehler zu Beginn;
 +
*Viterbi&ndash;Decodierung mittels Trellisdiagramms:
 +
**roter Pfeil &rArr; &nbsp; Hypothese $u_i = 0$,
 +
**blauer Pfeil &rArr; &nbsp; Hypothese $u_i = 1$.
  
Ebenso wie die Suche nach der Sequenz mit der minimalen Hamming&ndash;Distanz geschieht auch die <i>Suche nach dem maximalen Korrelationswert</i> schrittweise:
 
*Die Knoten bezeichnet man hier als die Metriken <i>&Lambda;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>). Die englische Bezeichnung hierfür ist <i>Cumulative Metric</i>, während  <i>Branch Metric</i> den Metrikzuwachs angibt.<br>
 
  
*Der Endwert <i>&Lambda;</i><sub>7</sub>(<i>S</i><sub>0</sub>) = 10 gibt den &bdquo;Korrelationswert&rdquo; zwischen der ausgewählten Folge <u><i>z</i></u> und dem Empfangsvektor <u><i>y</i></u> an. Im fehlerfreien Fall ergäbe sich <i>&Lambda;</i><sub>7</sub>(<i>S</i><sub>0</sub>) = 14.<br><br>
+
Nebenstehendes Trellis und die&nbsp; [[Kanalcodierung/Decodierung_von_Faltungscodes#Decodierbeispiele_f.C3.BCr_den_fehlerbehafteten_Fall| Trellisauswertung gemäß Beispiel 1]]&nbsp; ähneln sich sehr. Ebenso wie die Suche nach der Sequenz mit der minimalen Hamming&ndash;Distanz geschieht auch die&nbsp; <i>Suche nach dem maximalen Korrelationswert</i>&nbsp; schrittweise:
 +
*Die Knoten bezeichnet man hier als die Metriken&nbsp; ${\it \Lambda}_i(S_{\mu})$.  
 +
*Die englische Bezeichnung hierfür ist&nbsp; <i>Cumulative Metric</i>, während&nbsp;  <i>Branch Metric</i>&nbsp; den Metrikzuwachs angibt.<br>
  
Die Trellisbeschreibung wird auf der nächsten Seite fortgesetzt.<br>
+
*Der Endwert&nbsp; ${\it \Lambda}_7(S_0) = 10$&nbsp; gibt den &bdquo;Korrelationswert&rdquo; zwischen der ausgewählten Folge&nbsp; $\underline{z}$&nbsp; und dem Empfangsvektor&nbsp; $\underline{y}$&nbsp; an.  
 +
*Im fehlerfreien Fall ergäbe sich&nbsp; ${\it \Lambda}_7(S_0) = 14$.<br><br>
  
== Viterbi–Algorithmus, basierend auf Korrelation und Metriken (2) ==
+
{{GraueBox|TEXT=
<br>
+
$\text{Beispiel 5:}$&nbsp; Die folgende Detailbeschreibung der Trellisauswertung beziehen sich auf das obige Trellis:
Die nachfolgende Beschreibung bezieht sich auf die Trellisauswertung entsprechend der letzten Seite, basierend auf [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Viterbi.E2.80.93Algorithmus.2C_basierend_auf_Korrelation_und_Metriken_.281.29 &bdquo;Korrelationswerten&rdquo; und den Metriken <i>&Lambda;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>).] Zum Vergleich zeigt die Grafik auf Seite 3a Trellisauswertung, die auf [http://www.lntwww.de/Kanalcodierung/Decodierung_von_Faltungscodes#Decodierbeispiele_f.C3.BCr_den_fehlerbehafteten_Fall_.281.29 Hamming&ndash;Distanzen und den Fehlergrößen <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>)] basieren.<br>
 
  
*Die Metriken zum Zeitpunkt <i>i</i> = 1 ergeben sich mit <u><i>y</i></u><sub>1</sub> = (11) zu
+
*Die Metriken zum Zeitpunkt&nbsp; $i = 1$&nbsp; ergeben sich mit&nbsp; $\underline{y}_1 = (11)$&nbsp; zu
  
 
::<math>{\it \Lambda}_1(S_0) \hspace{0.15cm}  =  \hspace{0.15cm} <\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
 
::<math>{\it \Lambda}_1(S_0) \hspace{0.15cm}  =  \hspace{0.15cm} <\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
Zeile 226: Zeile 264:
 
= \hspace{0.1cm} +2  \hspace{0.05cm}.</math>
 
= \hspace{0.1cm} +2  \hspace{0.05cm}.</math>
  
*Entsprechend gilt zum Zeitpunkt <i>i</i> = 2 mit <u><i>y</i></u><sub>2</sub> = (11):
+
*Entsprechend gilt zum Zeitpunkt&nbsp; $i = 2$&nbsp; mit&nbsp; $\underline{y}_2 = (11)$:
  
::<math>{\it \Lambda}_2(S_0) \hspace{-0.15cm}  \hspace{-0.15cm} {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
+
::<math>{\it \Lambda}_2(S_0) =  {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
 
= \hspace{0.1cm} -2-2 = -4  \hspace{0.05cm},</math>
 
= \hspace{0.1cm} -2-2 = -4  \hspace{0.05cm},</math>
::<math>{\it \Lambda}_2(S_1) \hspace{-0.15cm}  = \hspace{-0.15cm} {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(11)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
+
::<math>{\it \Lambda}_2(S_1) = {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(11)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
 
= \hspace{0.1cm} -2+2 = 0  \hspace{0.05cm},</math>
 
= \hspace{0.1cm} -2+2 = 0  \hspace{0.05cm},</math>
::<math>{\it \Lambda}_2(S_2) \hspace{-0.15cm}  = \hspace{-0.15cm} {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
+
::<math>{\it \Lambda}_2(S_2)= {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
= \hspace{0.1cm} 2+0 = 2  \hspace{0.05cm},</math>
+
= \hspace{0.1cm} +2+0 = +2  \hspace{0.05cm},</math>
::<math>{\it \Lambda}_2(S_3) \hspace{-0.15cm}  = \hspace{-0.15cm} {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
+
::<math>{\it \Lambda}_2(S_3)= {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm}
= \hspace{0.1cm} 2+0 = 2  \hspace{0.05cm}.</math>
+
= \hspace{0.1cm} +2+0 = +2  \hspace{0.05cm}.</math>
  
*Ab dem Zeitpunkt <i>i</i> = 3 muss eine Entscheidung zwischen zwei Metriken getroffen werden. Beispielsweise erhält man mit <u><i>y</i></u><sub>3</sub> = (10) für die oberste und die unterste Metrik im Trellis:
+
*Ab dem Zeitpunkt&nbsp; $i =3$&nbsp; muss eine Entscheidung zwischen zwei Metriken getroffen werden. Beispielsweise erhält man mit&nbsp; $\underline{y}_3 = (10)$&nbsp; für die oberste und die unterste Metrik im Trellis:
  
::<math>{\it \Lambda}_3(S_0) \hspace{-0.15cm}  = \hspace{-0.15cm}{\rm max} \left [{\it \Lambda}_{2}(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}> \right ] =</math>
+
::<math>{\it \Lambda}_3(S_0)={\rm max} \left [{\it \Lambda}_{2}(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}> \right ] = {\rm max} \left [ -4+0\hspace{0.05cm},\hspace{0.05cm} +2+0 \right ] = +2\hspace{0.05cm},</math>
::<math>\hspace{1.25cm}  =  \hspace{-0.15cm} {\rm max} \left [ -4+0\hspace{0.05cm},\hspace{0.05cm} 2+0 \right ] = 2\hspace{0.05cm},</math>
+
::<math>{\it \Lambda}_3(S_3) ={\rm max} \left [{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_3) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}> \right ] = {\rm max} \left [ 0+0\hspace{0.05cm},\hspace{0.05cm} +2+2 \right ] = +4\hspace{0.05cm}.</math>
::<math>{\it \Lambda}_3(S_3) \hspace{-0.15cm}  = \hspace{-0.15cm}{\rm max} \left [{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_3) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}> \right ] =</math>
 
::<math>\hspace{1.25cm}  =  \hspace{-0.15cm} {\rm max} \left [ 0+0\hspace{0.05cm},\hspace{0.05cm} 2+2 \right ] = 4\hspace{0.05cm}.</math>
 
  
Vergleicht man die zu minimierenden Fehlergrößen <i>&Gamma;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) mit den zu maximierenden Metriken <i>&Lambda;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>), so erkennt man den folgenden deterministischen Zusammenhang:
+
Vergleicht man die zu zu maximierenden Metriken&nbsp; ${\it \Lambda}_i(S_{\mu})$&nbsp; mit den zu minimierenden Fehlergrößen&nbsp; ${\it \Gamma}_i(S_{\mu})$&nbsp; gemäß dem&nbsp;[[Kanalcodierung/Decodierung_von_Faltungscodes#Decodierbeispiele_f.C3.BCr_den_fehlerbehafteten_Fall| $\text{Beispiel 1}$]], so erkennt man den folgenden deterministischen Zusammenhang:
  
:<math>{\it \Lambda}_i(S_{\mu}) = 2 \cdot  \big [ i -  {\it \Gamma}_i(S_{\mu}) \big ] \hspace{0.05cm}.</math>
+
::<math>{\it \Lambda}_i(S_{\mu}) = 2 \cdot  \big [ i -  {\it \Gamma}_i(S_{\mu}) \big ] \hspace{0.05cm}.</math>
  
Die Auswahl der zu den einzelnen Decodierschritten überlebenden Zweige ist bei beiden Verfahren identisch, und auch die Pfadsuche liefert das gleiche Ergebnis.<br>
+
Die Auswahl der zu den einzelnen Decodierschritten überlebenden Zweige ist bei beiden Verfahren identisch, und auch die Pfadsuche liefert das gleiche Ergebnis.<br>}}
  
<b>Zusammenfassung:</b>
 
*Beim Binärkanal &ndash; zum Beispiel dem BSC&ndash;Modell &ndash; führen die beiden beschriebenen Viterbi&ndash;Varianten <i>Fehlergrößenminimierung</i> und <i>Metrikmaximierung</i> zum gleichen Ergebnis.<br>
 
  
*Beim AWGN&ndash;Kanal ist die Fehlergrößenminimierung nicht anwendbar, da keine Hamming&ndash;Distanz zwischen dem binären Eingang <u><i>x</i></u> und dem analogen Ausgang <u><i>y</i></u> angegeben werden kann.<br>
+
{{BlaueBox|TEXT= 
 +
$\text{Fazit:}$&nbsp; 
 +
*Beim Binärkanal &ndash; zum Beispiel nach dem BSC&ndash;Modell &ndash; führen die beiden beschriebenen Viterbi&ndash;Varianten &bdquo;Fehlergrößenminimierung&rdquo; und &bdquo;Metrikmaximierung&rdquo; zum gleichen Ergebnis.<br>
  
*Die Metrikmaximierung ist beim AWGN&ndash;Kanal vielmehr identisch mit der Minimierung der [http://www.lntwww.de/Kanalcodierung/Klassifizierung_von_Signalen#ML.E2.80.93Entscheidung_beim_AWGN.E2.80.93Kanal Euklidischen Distanz] &ndash; siehe Aufgabe Z3.10.<br>
+
*Beim AWGN&ndash;Kanal ist dagegen die Fehlergrößenminimierung nicht anwendbar, da keine Hamming&ndash;Distanz zwischen dem binären Eingang&nbsp; $\underline{x}$&nbsp; und dem analogen Ausgang&nbsp; $\underline{y}$&nbsp; angegeben werden kann.<br>
  
*Ein weiterer Vorteil der Metrikmaximierung ist, dass eine Zuverlässigkeitsinformation über die Empfangswerte <u><i>y</i></u> in einfacher Weise berücksichtigt werden kann.<br>
+
*Die Metrikmaximierung ist beim AWGN&ndash;Kanal vielmehr identisch mit der Minimierung der&nbsp; [[Kanalcodierung/Klassifizierung_von_Signalen#ML.E2.80.93Entscheidung_beim_AWGN.E2.80.93Kanal| Euklidischen Distanz]]&nbsp; &ndash; siehe&nbsp; [[Aufgaben:Aufgabe_3.10Z:_ML–Decodierung_von_Faltungscodes|Aufgabe 3.10Z]].<br>
  
== Viterbi–Entscheidung bei nicht–terminierten Faltungscodes (1) ==
+
*Ein weiterer Vorteil der Metrikmaximierung ist, dass eine Zuverlässigkeitsinformation über die Empfangswerte&nbsp; $\underline{y}$&nbsp; in einfacher Weise berücksichtigt werden kann.}}<br>
 +
 
 +
== Viterbi–Entscheidung bei nicht–terminierten Faltungscodes==
 
<br>
 
<br>
Bisher wurde stets ein terminierter Faltungscode der Länge <i>L</i>&prime; = <i>L</i> + <i>m</i> betrachtet, und das Ergebnis des Viterbi&ndash;Decoders war der durchgehende Trellispfad vom Startzeitpunkt (<i>i</i> = 0) bis zum Ende (<i>i</i> = <i>L</i>&prime;).<br>
+
Bisher wurde stets ein terminierter Faltungscode der Länge&nbsp; $L\hspace{0.05cm}' = L + m$&nbsp; betrachtet, und das Ergebnis des Viterbi&ndash;Decoders war der durchgehende Trellispfad vom Startzeitpunkt&nbsp; $(i = 0)$&nbsp; bis zum Ende&nbsp; $(i = L\hspace{0.05cm}')$.<br>
 
+
*Bei nicht&ndash;terminierten Faltungscodes&nbsp; $(L\hspace{0.05cm}' &#8594; &#8734;)$&nbsp; ist diese Entscheidungsstrategie nicht anwendbar.  
Bei nicht&ndash;terminierten Faltungscodes (<i>L</i>&prime; &#8594; &#8734;) ist diese Entscheidungsstrategie nicht anwendbar. Hier muss der Algorithmus abgewandelt werden, um in endlicher Zeit eine bestmögliche Schätzung (gemäß Maximum&ndash;Likelihood) der einlaufenden Bits der Codesequenz liefern zu können.<br>
+
*Hier muss der Algorithmus abgewandelt werden, um in endlicher Zeit eine bestmögliche Schätzung (gemäß Maximum&ndash;Likelihood) der einlaufenden Bits der Codesequenz liefern zu können.<br>
  
[[Datei:P ID2676 KC T 3 4 S7 v1.png|Beispielhaftes Trellis und überlebende Pfade|class=fit]]<br>
 
  
Die obere Grafik zeigt ein beispielhaftes Trellis für
+
Die Grafik zeigt im oberen Teil ein beispielhaftes Trellis für
*unseren Standard&ndash;Codierer &nbsp;&nbsp;&#8658;&nbsp;&nbsp; <i>R</i> = 1/2, <i>m</i> = 2, G(<i>D</i>) = (1 + <i>D</i> + <i>D</i><sup>2</sup>, 1 + <i>D</i><sup>2</sup>),<br>
+
*&bdquo;unseren&rdquo; Standard&ndash;Codierer &nbsp; &#8658; &nbsp; $R = 1/2, \ m = 2, \ {\rm G}(D) = (1 + D + D^2, \ 1 + D^2)$,<br>
  
*die Nullfolge &#8658; <u><i>u</i></u> = <u>0</u> = (0, 0, 0, ...) &nbsp;&nbsp;&#8658;&nbsp;&nbsp; <i>x</i> = <u>0</u> = (00, 00, 00, ...),<br>
+
*die Nullfolge &nbsp; &#8658; &nbsp; $\underline{u} = \underline{0} = (0, 0, 0, \ \text{...})$ &nbsp;&nbsp;&#8658;&nbsp;&nbsp; $\underline{x} = \underline{0} = (00, 00, 00, \ \text{...})$,<br>
  
*jeweils einen Übertragungsfehler bei <i>i</i> = 4 und <i>i</i> = 5.<br><br>
+
*jeweils einen Übertragungsfehler bei&nbsp; $i = 4$&nbsp; und&nbsp; $i = 5$.<br><br>
  
Anhand der Stricharten erkennt man erlaubte (durchgezogene) und verbotene (punktierte) Pfeile in rot (<i>u<sub>i</sub></i> = 0) und blau (<i>u<sub>i</sub></i> = 1). Punktierte Linien haben einen Vergleich gegen einen Konkurrenten verloren und können nicht Teil des ausgewählten Pfades sein.<br>
+
Anhand der Stricharten erkennt man erlaubte (durchgezogene) und verbotene (punktierte) Pfeile in rot $(u_i = 0)$ und blau $(u_i = 1)$. Punktierte Linien haben einen Vergleich gegen einen Konkurrenten verloren und können nicht Teil des ausgewählten Pfades sein.<br>
  
Die untere Grafik zeigt die 2<sup><i>m</i></sup> überlebenden Pfade <i>&Phi;<sub>i</sub></i> (<i>S<sub>&mu;</sub></i>) für den Zeitpunkt <i>i</i> = 9. Man findet diese Pfade am einfachsten von rechts nach links. Die folgende Angabe zeigt die durchlaufenen Zustände <i>S<sub>&mu;</sub></i> in Vorwärtsrichtung:<br><br>
+
[[Datei:P ID2676 KC T 3 4 S7 v1.png|center|frame|Beispielhaftes Trellis und überlebende Pfade|class=fit]]
  
:<i>&Phi;</i><sub>9</sub>(<i>S</i><sub>0</sub>) :  <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub>,<br>
+
Der untere Teil der Grafik zeigt die&nbsp; $2^m = 4$&nbsp; überlebenden Pfade&nbsp; ${\it \Phi}_9(S_{\mu})$&nbsp; zum Zeitpunkt&nbsp; $i = 9$.
 +
*Man findet diese Pfade am einfachsten von rechts nach links (Rückwärtsrichtung).
 +
*Die folgende Angabe zeigt die durchlaufenen Zustände&nbsp; $S_{\mu}$&nbsp; allerdings in Vorwärtsrichtung:<br>
 +
:$${\it \Phi}_9(S_0) \text{:} \hspace{0.4cm} S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0,$$
 +
:$${\it \Phi}_9(S_1) \text{:} \hspace{0.4cm} S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_1 &#8594; S_2 &#8594; S_1 &#8594; S_3 &#8594; S_2 &#8594; S_1,$$
 +
:$${\it \Phi}_9(S_2) \text{:} \hspace{0.4cm}  S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_1 &#8594; S_2 &#8594; S_1 &#8594; S_2 &#8594; S_1 &#8594; S_2,$$
 +
:$${\it \Phi}_9(S_3) \text{:} \hspace{0.4cm}  S_0 &#8594; S_0 &#8594; S_0 &#8594; S_0 &#8594; S_1 &#8594; S_2 &#8594; S_1 &#8594; S_2 &#8594; S_1 &#8594; S_3.$$
  
:<i>&Phi;</i><sub>9</sub>(<i>S</i><sub>1</sub>) :  <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>3</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub>,<br>
+
Zu früheren Zeitpunkten&nbsp; $(i<9)$&nbsp; würden sich andere überlebende Pfade&nbsp; ${\it \Phi}_i(S_{\mu})$&nbsp; ergeben. Deshalb definieren wir:
  
:<i>&Phi;</i><sub>9</sub>(<i>S</i><sub>2</sub>) : <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub>,<br>
+
{{BlaueBox|TEXT= 
 +
$\text{Definition:}$&nbsp;  Der&nbsp; <b>überlebende Pfad</b>&nbsp; (englisch: &nbsp;<i>Survivor</i>)&nbsp; ${\it \Phi}_i(S_{\mu})$&nbsp; ist der durchgehende Pfad vom Start&nbsp; $S_0$&nbsp; $($bei&nbsp; $i = 0)$&nbsp; zum Knoten&nbsp; $S_{\mu}$ zum Zeitpunkt&nbsp; $i$. Empfehlenswert ist die Pfadsuche in Rückwärtsrichtung.}}<br>
  
:<i>&Phi;</i><sub>9</sub>(<i>S</i><sub>3</sub>) :  <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>0</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>2</sub> &#8594; <i>S</i><sub>1</sub> &#8594; <i>S</i><sub>3</sub>.<br><br>
+
Die folgende Grafik zeigt die überlebenden Pfade für die Zeitpunkte&nbsp; $i = 6$&nbsp; bis&nbsp; $i = 9$. Zusätzlich sind die jeweiligen Metriken&nbsp; ${\it \Lambda}_i(S_{\mu})$&nbsp; für alle vier Zustände angegeben.  
  
Die Beschreibung wird auf der nächsten Seite fortgesetzt.<br>
+
[[Datei:P ID2677 KC T 3 4 S7b v1.png|center|frame|Die überlebenden Pfade&nbsp; ${\it \Phi}_6, \ \text{...} \ , \ {\it \Phi}_9$|class=fit]]
  
== Viterbi–Entscheidung bei nicht–terminierten Faltungscodes (2) ==
+
Diese Grafik ist wie folgt zu interpretieren:
<br>
+
*Zum Zeitpunkt&nbsp; $i = 9$&nbsp; kann noch keine endgültige ML&ndash;Entscheidung über die ersten neun Bit der Informationssequenz getroffen werden. Allerdings ist bereits sicher, dass die wahrscheinlichste Bitfolge durch einen der Pfade&nbsp; ${\it \Phi}_9(S_0), \ \text{...} \ , \ {\it \Phi}_9(S_3)$&nbsp; richtig wiedergegeben wird.<br>
{{Definition}}''':''' Der <b>überlebende Pfad</b> (englisch: <i>Survivor</i>) <i>&Phi;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) ist der durchgehende Pfad vom Start <i>S</i><sub>0</sub> (bei <i>i</i> = 0) zum Knoten <i>S<sub>&mu;</sub></i> zum Zeitpunkt <i>i</i>. Empfehlenswert ist die Pfadsuche in Rückwärtsrichtung.{{end}}<br>
 
  
[[Datei:P ID2677 KC T 3 4 S7b v1.png|Die überlebenden Pfade <i>Φ</i><sub>6</sub>, ... , <i>Φ</i><sub>9</sub> |class=fit]]<br>
+
*Da alle vier Pfade bis&nbsp; $i = 3$&nbsp; identisch sind, ist die Entscheidung &bdquo;$v_1 = 0, v_2 = 0, \ v_3 = 0$&rdquo; die bestmögliche (hellgraue Hinterlegung). Auch zu einem späteren Zeitpunkt würde keine andere Entscheidung getroffen werden. Hinsichtlich der Bits&nbsp; $v_4, \ v_5, \ \text{...}$&nbsp; sollte man sich zu diesem frühen Zeitpunkt noch nicht festlegen.<br>
  
Die Grafik zeigt die überlebenden Pfade für die Zeitpunkte <i>i</i> = 6 bis <i>i</i> = 9. Zusätzlich sind die jeweiligen Metriken <i>&Lambda;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>) für alle vier Zustände angegeben.Die Grafik ist wie folgt zu interpretieren:
+
*Müsste man zum Zeitpunkt&nbsp; $i = 9$&nbsp; eine Zwangsentscheidung treffen, so würde man sich für&nbsp; ${\it \Phi}_9(S_0)$ &nbsp; &#8658; &nbsp; $\underline{v} = (0, 0, \ \text{...} \ , 0)$ entscheiden, da die Metrik&nbsp; ${\it \Lambda}_9(S_0) = 14$&nbsp; größer ist als die Vergleichsmetriken.<br>
*Zum Zeitpunkt <i>i</i> = 9 kann noch keine endgültige ML&ndash;Entscheidung über die ersten neun Bit der Informationssequenz getroffen werden. Allerdings ist bereits sicher, dass die wahrscheinlichste Bitfolge durch einen der Pfade <i>&Phi;</i><sub>9</sub>(<i>S</i><sub>0</sub>), ... , <i>&Phi;</i><sub>9</sub>(<i>S</i><sub>3</sub>) richtig wiedergegeben wird.<br>
 
  
*Da alle vier Pfade bei <i>i</i> = 3 zusammenlaufen, ist die Entscheidung &bdquo;<i>&upsilon;</i><sub>1</sub> = 0, <i>&upsilon;</i><sub>2</sub> = 0, <i>&upsilon;</i><sub>3</sub> = 0&rdquo; die bestmögliche (hellgraue Hinterlegung). Auch zu einem späteren Zeitpunkt würde keine andere Entscheidung getroffen werden. Hinsichtlich der Bits <i>&upsilon;</i><sub>4</sub>, <i>&upsilon;</i><sub>5</sub>, ... sollte man sich noch nicht festlegen.<br>
+
*Die Zwangsentscheidung zum Zeitpunkt&nbsp; $i = 9$&nbsp; führt in diesem Beispiel zum richtigen Ergebnis. Zum Zeitpunkt&nbsp; $i = 6$&nbsp; wäre ein solcher Zwangsentscheid  falsch gewesen &nbsp; &#8658; &nbsp; $\underline{v} = (0, 0, 0, 1, 0, 1)$, und zu den Zeitpunten&nbsp; $i = 7$&nbsp; bzw.&nbsp; $i = 8$&nbsp; nicht eindeutig.<br>
  
*Müsste man zum Zeitpunkt <i>i</i> = 9 eine Zwangsentscheidung treffen, so würde man sich für <i>&Phi;</i><sub>9</sub>(<i>S</i><sub>0</sub>) &nbsp;&#8658;&nbsp; <u><i>&upsilon;</i></u> = (0, 0, ... , 0) entscheiden, da die Metrik <i>&Lambda;</i><sub>9</sub>(<i>S</i><sub>0</Sub>) = 14 größer ist als die Vergleichsmetriken.<br>
 
  
*Die Zwangsentscheidung zum Zeitpunkt <i>i</i> = 9 führt in diesem Beispiel zum richtigen Ergebnis. Zum Zeitpunkt <i>i</i> = 6 wäre ein solcher Zwangsentscheid  falsch gewesen &#8658; <u><i>&upsilon;</i></u> = (0, 0, 0, 1, 0, 1), und zu den Zeitpunten <i>i</i> = 7 bzw. <i>i</i> = 8 nicht eindeutig.<br>
 
  
 
== Weitere Decodierverfahren für Faltungscodes ==
 
== Weitere Decodierverfahren für Faltungscodes ==
 
<br>
 
<br>
Wir haben uns bisher in diesem Kapitel nur mit dem Viterbi&ndash;Algorithmus beschäftigt, der 1967 von A. J. Viterbi veröffentlicht wurde. Erst 1974 hat G. D. Forney nachgewiesen, dass dieser Algorithmus eine Maximum&ndash;Likelihood&ndash;Decodierung von Faltungscodes durchführt.<br>
+
Wir haben uns bisher nur mit dem Viterbi&ndash;Algorithmus in der Form beschäftigt, der 1967 von Andrew J. Viterbi in&nbsp; [Vit67]<ref name'Vit67'>Viterbi, A.J.: ''Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm''. In: IEEE Transactions on Information Theory, vol. IT-13, pp. 260-269, April 1967.</ref> veröffentlicht wurde. Erst 1974 hat&nbsp; [https://de.wikipedia.org/wiki/David_Forney George David Forney]&nbsp; nachgewiesen, dass dieser Algorithmus eine Maximum&ndash;Likelihood&ndash;Decodierung von Faltungscodes durchführt.<br>
 +
 
 +
Aber schon in den Jahren zuvor waren viele Wissenschaftler sehr bemüht, effiziente Decodierverfahren für die 1955 erstmals von&nbsp; [https://de.wikipedia.org/wiki/Peter_Elias Peter Elias]&nbsp; beschriebenen Faltungscodes bereitzustellen. Zu nennen sind hier unter Anderem &ndash; genauere Beschreibungen findet man beispielsweise in&nbsp; [Bos98]<ref name='Bos98'>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref> oder der englischen Ausgabe&nbsp; [Bos99]<ref name='Bos99'>Bossert, M.: ''Channel Coding for Telecommunications.'' Wiley & Sons, 1999.</ref>.
 +
*[http://ieeexplore.ieee.org/document/1057663/ <i>Sequential Decoding</i>&nbsp;]&nbsp; von J. M. Wozencraft und B. Reiffen aus dem Jahre 1961,<br>
 +
 
 +
*der Vorschlag von&nbsp; [https://en.wikipedia.org/wiki/Robert_Fano Robert Mario Fano]&nbsp; (1963), der als <i>Fano&ndash;Algorithmus</i>&nbsp; bekannt wurde,<br>
  
Aber schon in den Jahren zuvor waren viele Wissenschaftler sehr bemüht, effiziente Decodierverfahren für die 1955 erstmals von Peter Elias beschriebenen Faltungscodes bereitzustellen. Zu nennen sind hier unter Anderem &ndash; genauere Beschreibungen findet man beispielsweise in [Bos99]<ref>Bossert, M.: ''Channel Coding for Telecommunications.'' Wiley & Sons, 1999.</ref>.
+
*die Arbeiten von Kamil Zigangirov (1966) und&nbsp; [https://en.wikipedia.org/wiki/Frederick_Jelinek Frederick Jelinek]&nbsp; (1969), deren Decodierverfahren auch als <i>Stack&ndash;Algorithmus</i>&nbsp; bezeichnet wird.<br><br>
*<i>Sequential Decoding</i> von J. M. Wozencraft und B. Reifen aus dem Jahre 1961,<br>
 
  
*der Vorschlag von R. M. Fano (1963), der als <i>Fano&ndash;Algorithmus</i> bekannt wurde,<br>
+
Alle diese Decodierverfahren und auch der Viterbi&ndash;Algorithmus in seiner bisher beschriebenen Form liefern &bdquo;hart&rdquo; entschiedene Ausgangswerte &nbsp; &#8658; &nbsp;  $v_i &#8712; \{0, 1\}$. Oftmals wären jedoch Informationen über die Zuverlässigkeit der getroffenen Entscheidungen wünschenswert, insbesondere dann, wenn ein verkettetes Codierschema mit einem äußeren und einem inneren Code vorliegt.<br>
  
*die Arbeiten von K. Zigangirov (1966) und F. Jelinek (1969), deren Decodierverfahren häufig als <i>Stack&ndash;Algorithmus</i> bezeichnet wird.<br><br>
+
Kennt man die Zuverlässigkeit der vom inneren Decoder entschiedenen Bits zumindest grob, so kann durch diese Information die Bitfehlerwahrscheinlichkeit des äußeren Decoders (signifikant) herabgesetzt werden. Der von&nbsp; [[Biografien_und_Bibliografien/Lehrstuhlinhaber_des_LNT#Prof._Dr.-Ing._Dr.-Ing._E.h._Joachim_Hagenauer_.281993-2006.29|Joachim Hagenauer]]&nbsp; in&nbsp; [Hag90]<ref name='Hag90'>Hagenauer, J.: ''Soft Output Viterbi Decoder.'' In: Technischer Report, Deutsche Forschungsanstalt für Luft- und Raumfahrt (DLR), 1990.</ref> vorgeschlagene&nbsp; <i>Soft&ndash;Output&ndash;Viterbi&ndash;Algorithmus</i>&nbsp; (SOVA) erlaubt es, zusätzlich zu den entschiedenen Symbolen auch jeweils ein Zuverlässigkeitsmaß anzugeben.<br>
  
Alle diese Decodierverfahren und auch der Viterbi&ndash;Algorithmus in seiner bisher beschriebenen Form liefern &bdquo;hart&rdquo; entschiedene Ausgangswerte &#8658; <i>&upsilon;<sub>i</sub></i> &#8712; {0, 1}. Oftmals wären jedoch Informationen über die Zuverlässigkeit der getroffenen Entscheidungen wünschenswert, insbesondere dann, wenn ein verkettetes Codierschema mit einem äußeren und einem inneren Code vorliegt.<br>
+
Abschließend gehen wir noch etwas genauer auf den&nbsp; <i>BCJR&ndash;Algorithmus</i>&nbsp; ein, benannt nach dessen Erfindern L. R. Bahl, J. Cocke, F. Jelinek  und J. Raviv&nbsp; [BCJR74]<ref name='BCJR74'>Bahl, L.R.; Cocke, J.; Jelinek, F.; Raviv, J.: ''Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate.'' In: IEEE Transactions on Information Theory, Vol. IT-20, S. 284-287, 1974.</ref>.
 +
*Während der Viterbi&ndash;Algorithmus nur eine Schätzung der Gesamtsequenz vornimmt &nbsp; &#8658; &nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#Definitionen_der_verschiedenen_Optimalempf.C3.A4nger|''block&ndash;wise ML'']], schätzt der BCJR&ndash;Algorithmus ein einzelnes Symbol (Bit) unter Berücksichtigung der gesamten empfangenen Codesequenz.
 +
* Es handelt sich hierbei also um eine&nbsp; <i>symbolweise Maximum&ndash;Aposteriori&ndash;Decodierung</i> &nbsp; &#8658; &nbsp; [[Kanalcodierung/Kanalmodelle_und_Entscheiderstrukturen#Definitionen_der_verschiedenen_Optimalempf.C3.A4nger|''bit&ndash;wise MAP'']].<br>
  
Kennt man die Zuverlässigkeit der vom inneren Decoder entschiedenen Bits zumindest grob, so kann durch diese Information die Bitfehlerwahrscheinlichkeit des äußeren Decoders (signifikant) herabgesetzt werden. Der von J. Hagenauer in [Hag90]<ref>Hagenauer, J.: ''Soft Output Viterbi Decoder.'' In: Technischer Report, Deutsche Forschungsanstalt für Luft- und Raumfahrt (DLR), 1990.</ref> vorgeschlagene <i>Soft&ndash;Output&ndash;Viterbi&ndash;Algorithmus</i> (SOVA) erlaubt es, zusätzlich zu den entschiedenen Symbolen auch jeweils ein Zuverlässigkeitsmaß anzugeben.<br>
 
  
Abschließend gehen wir noch etwas genauer auf den <i>BCJR&ndash;Algorithmus</i> ein, benannt nach dessen Erfinder L. R. Bahl, J. Cocke, F. Jelinek  und J. Raviv [BCJR74]<ref>Bahl, L.R.; Cocke, J.; Jelinek, F.; Raviv, J.: ''Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate.'' In: IEEE Transactions on Information Theory, Vol. IT-20, S. 284-287, 1974.</ref>. Während der Viterbi&ndash;Algorithmus nur eine Schätzung der Gesamtsequenz vornimmt &nbsp;&#8658;&nbsp; block&ndash;wise ML, schätzt der BCJR&ndash;Algorithmus ein einzelnes Symbol (Bit) unter Berücksichtigung der gesamten empfangenen Codesequenz. Es handelt sich hierbei also um eine <i>symbolweise Maximum&ndash;Aposteriori&ndash;Decodierung</i> &nbsp;&#8658;&nbsp; bit&ndash;wise MAP.<br>
+
{{BlaueBox|TEXT= 
 +
$\text{Fazit:}$&nbsp; Der Unterschied zwischen Viterbi&ndash;Algorithmus und BCJR&ndash;Algorithmus soll &ndash; stark vereinfacht &ndash; am Beispiel eines terminierten Faltungscodes dargestellt werden:
 +
*Der&nbsp; <b>Viterbi&ndash;Algorithmus</b>&nbsp; arbeitet das Trellis nur in einer Richtung &ndash; der  <i>Vorwärtsrichtung</i>&nbsp; &ndash; ab und berechnet für jeden Knoten die Metriken&nbsp; ${\it \Lambda}_i(S_{\mu})$. Nach Erreichen des Endknotens wird der  überlebende Pfad gesucht, der die wahrscheinlichste Codesequenz kennzeichnet.<br>
  
Der Unterschied zwischen Viterbi&ndash;Algorithmus und BCJR&ndash;Algorithmus soll &ndash; stark vereinfacht &ndash; am Beispiel eines terminierten Faltungscodes dargestellt werden:
+
*Beim&nbsp; <b>BCJR&ndash;Algorithmus</b>&nbsp; wird das Trellis zweimal abgearbeitet, einmal in Vorwärtsrichtung und anschließend in <i>Rückwärtsrichtung</i>. Für jeden Knoten sind dann zwei Metriken angebbar,  aus denen für jedes Bit die Aposterori&ndash;Wahrscheinlichkeit bestimmt werden kann.}}<br>
*Der <b>Viterbi&ndash;Algorithmus</b> arbeitet das Trellis nur in einer Richtung &ndash; der  <i>Vorwärtsrichtung</i> &ndash; ab und berechnet für jeden Knoten die Metriken <i>&Lambda;<sub>i</sub></i>(<i>S<sub>&mu;</sub></i>). Nach Erreichen des Endknotens wird der  überlebende Pfad gesucht, der die wahrscheinlichste Codesequenz kennzeichnet.<br>
 
  
*Beim <b>BCJR&ndash;Algorithmus</b> wird das Trellis zweimal abgearbeitet, einmal in Vorwärtsrichtung und anschließend in <i>Rückwärtsrichtung</i>. Für jeden Knoten sind dann zwei Metriken angebbar,  aus denen für jedes Bit die Aposterori&ndash;Wahrscheinlichkeit bestimmt werden kann.<br><br>
+
<i>Hinweise:</i>  
 +
*Diese Kurzzusammenfassung basiert auf dem Lehrbüchern&nbsp; [Bos98]<ref name='Bos98'>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref>&nbsp; bzw.&nbsp; [Bos99]<ref name='Bos99'>Bossert, M.: ''Channel Coding for Telecommunications.'' Wiley & Sons, 1999.</ref>.  
 +
*Eine etwas ausführlichere Beschreibung des BCJR&ndash;Algorithmus' folgt auf der Seite&nbsp; [[Kanalcodierung/Soft–in_Soft–out_Decoder#Hard_Decision_vs._Soft_Decision| Hard Decision vs. Soft Decision]]&nbsp; [https://www.lntwww.de/Kanalcodierung im vierten Hauptkapitel]&nbsp; &bdquo;Iterative Decodierverfahren&rdquo;.<br>
  
<b>Hinweis:</b> Diese Kurzzusammenfassung basiert auf dem Lehrbuch [Bos98]<ref>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref>. Eine etwas ausführlichere Beschreibung des BCJR&ndash;Algorithmus' folgt im [http://www.lntwww.de/Kanalcodierung/Soft%E2%80%93in_Soft%E2%80%93out_Decoder#Hard_Decision_vs._Soft_Decision_.281.29 Kapitel 4.1.]<br>
 
  
== Aufgaben ==
+
== Aufgaben zum Kapitel ==
 
<br>
 
<br>
[[Aufgaben:3.9 Viterbi–Algorithmus: Grundlegendes|A3.9 Viterbi–Algorithmus: Grundlegendes]]
+
[[Aufgaben:Aufgabe_3.09:_Grundlegendes_zum_Viterbi–Algorithmus|Aufgabe 3.9: Grundlegendes zum Viterbi–Algorithmus]]
  
[[Zusatzaufgaben:3.9 Nochmals Viterbi–Algorithmus]]
+
[[Aufgaben:Aufgabe_3.09Z:_Nochmals_Viterbi–Algorithmus|Aufgabe 3.9Z: Nochmals Viterbi–Algorithmus]]
  
[[Aufgaben:3.10 Fehlergrößenberechnung|A3.10 Fehlergrößenberechnung]]
+
[[Aufgaben:Aufgabe_3.10:_Fehlergrößenberechnung|Aufgabe 3.10: Fehlergrößenberechnung]]
  
[[Zusatzaufgaben:3.10 ML–Decodierung von Faltungscodes]]
+
[[Aufgaben:Aufgabe_3.10Z:_ML–Decodierung_von_Faltungscodes|Aufgabe 3.10Z: ML–Decodierung von Faltungscodes]]
  
[[Aufgaben:3.11 Viterbi–Pfadsuche|A3.11 Viterbi–Pfadsuche]]
+
[[Aufgaben:Aufgabe_3.11:_Viterbi–Pfadsuche|Aufgabe 3.11: Viterbi–Pfadsuche]]
  
 
==Quellenverzeichnis==
 
==Quellenverzeichnis==

Aktuelle Version vom 17. November 2022, 19:50 Uhr

Blockschaltbild und Voraussetzungen


Ein wesentlicher Vorteil der Faltungscodierung ist, dass es hierfür mit dem Viterbi–Algorithmus ein sehr effizientes Decodierverfahren gibt. Dieser von  Andrew James Viterbi  entwickelte Algorithmus wurde bereits im Kapitel  Viterbi–Empfänger  des Buches „Digitalsignalübertragung” im Hinblick auf seinen Einsatz zur Entzerrung beschrieben.

Systemmodell zur Beschreibung der Decodierung von Faltungscodes

Für seinen Einsatz als Faltungsdecodierer gehen wir von obigem Blockschaltbild und den folgenden Voraussetzungen aus:

  • Die Informationssequenz  $\underline{u} = (u_1, \ u_2, \ \text{...} \ )$  ist hier im Gegensatz zur Beschreibung der linearen Blockcodes   ⇒   Erstes Hauptkapitel  oder von Reed–Solomon–Codes   ⇒   Zweites Hauptkapitel  im allgemeinen unendlich lang  („semi–infinite” ). Für die Informationssymbole gilt stets  $u_i ∈ \{0, 1\}$.
  • Die Codesequenz  $\underline{x} = (x_1, \ x_2, \ \text{...})$  mit  $x_i ∈ \{0, 1\}$  hängt außer von  $\underline{u}$  auch von der Coderate  $R = 1/n$, dem Gedächtnis  $m$  und der Übertragungsfunktionsmatrix  $\mathbf{G}(D)$  ab. Bei endlicher Anzahl  $L$  an Informationsbits sollte der Faltungscode durch Anfügen von  $m$  Nullen terminiert werden:
\[\underline{u}= (u_1,\hspace{0.05cm} u_2,\hspace{0.05cm} \text{...} \hspace{0.1cm}, u_L, \hspace{0.05cm} 0 \hspace{0.05cm},\hspace{0.05cm} \text{...} \hspace{0.1cm}, 0 ) \hspace{0.3cm}\Rightarrow \hspace{0.3cm} \underline{x}= (x_1,\hspace{0.05cm} x_2,\hspace{0.05cm} \text{...} \hspace{0.1cm}, x_{2L}, \hspace{0.05cm} x_{2L+1} ,\hspace{0.05cm} \text{...} \hspace{0.1cm}, \hspace{0.05cm} x_{2L+2m} ) \hspace{0.05cm}.\]
  • Der Viterbi–Algorithmus liefert eine Schätzung  $\underline{z}$  für die Codesequenz  $\underline{x}$  und eine weitere Schätzung  $\underline{v}$  für die Informationssequenz  $\underline{u}$. Dabei gilt:
\[{\rm Pr}(\underline{z} \ne \underline{x})\stackrel{!}{=}{\rm Minimum} \hspace{0.25cm}\Rightarrow \hspace{0.25cm} {\rm Pr}(\underline{\upsilon} \ne \underline{u})\stackrel{!}{=}{\rm Minimum} \hspace{0.05cm}.\]

$\text{Fazit:}$  Bei einem digitalen Kanalmodell (zum Beispiel dem BSC–Modell) sucht der Viterbi–Algorithmus von allen möglichen Codesequenzen  $\underline{x}\hspace{0.05cm}'$  diejenige Sequenz  $\underline{z}$  mit der minimalen Hamming–Distanz  $d_{\rm H}(\underline{x}\hspace{0.05cm}', \underline{y})$  zur Empfangssequenz  $\underline{y}$:

\[\underline{z} = {\rm arg} \min_{\underline{x}\hspace{0.05cm}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} d_{\rm H}( \underline{x}\hspace{0.05cm}'\hspace{0.02cm},\hspace{0.02cm} \underline{y} ) = {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} {\rm Pr}( \underline{y} \hspace{0.05cm} \vert \hspace{0.05cm} \underline{x}')\hspace{0.05cm}.\]

Das bedeutet auch:   Der Viterbi–Algorithmus erfüllt das  Maximum–Likelihood–Kriterium.


Vorbemerkungen zu den nachfolgenden Decodierbeispielen


Trellis zur Decodierung der Empfangssequenz  $\underline{y}$

Für alle Beispiele in diesem Kapitels gelten folgende  Voraussetzungen:

  • Standard–Faltungscodierer:   Rate $R = 1/2$,  Gedächtnis  $m = 2$;
  • Übertragungsfunktionsmatrix:   $\mathbf{G}(D) = (1 + D + D^2, 1 + D^2)$;
  • Länge der Informationssequenz:   $L = 5$;
  • Berücksichtigung der Terminierung:   $L\hspace{0.05cm}' = 7$;
  • Länge der Sequenzen  $\underline{x}$  und  $\underline{y}$ :   jeweils $14$ Bit;
  • Aufteilung gemäß  $\underline{y} = (\underline{y}_1, \ \underline{y}_2, \ \text{...} \ , \ \underline{y}_7)$
    ⇒   Bitpaare  $\underline{y}_i ∈ \{00, 01, 10, 11\}$;
  • Viterbi–Decodierung mittels Trellisdiagramms:
roter Pfeil   ⇒   Hypothese  $u_i = 0$,
blauer Pfeil   ⇒   Hypothese  $u_i = 1$;
  • hypothetische Codesequenz  $\underline{x}_i\hspace{0.01cm}' ∈ \{00, 01, 10, 11\}$;
  • alle hypothetischen Größen mit Apostroph.


Wir gehen stets davon aus, dass die Viterbi–Decodierung auf der  Hamming–Distanz  $d_{\rm H}(\underline{x}_i\hspace{0.01cm}', \ \underline{y}_i)$  zwischen dem Empfangswort  $\underline{y}_i$  und den vier möglichen Codeworten  $x_i\hspace{0.01cm}' ∈ \{00, 01, 10, 11\}$  basiert. Dann gehen wir wie folgt vor:

  • In die noch leeren Kreise werden die Fehlergrößen  ${\it \Gamma}_i(S_{\mu})$  der Zustände  $S_{\mu} (0 ≤ \mu ≤ 3)$  zu den Zeitpunkten  $i$  eingetragen. Der Startwert ist stets  ${\it \Gamma}_0(S_0) = 0$.
  • Die Fehlergrößen für  $i = 1$  und  $i = 2$  ergeben sich zu
\[{\it \Gamma}_1(S_0) =d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big ) \hspace{0.05cm}, \hspace{2.38cm}{\it \Gamma}_1(S_1) = d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_1 \big ) \hspace{0.05cm},\]
\[{\it \Gamma}_2(S_0) ={\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.6cm}{\it \Gamma}_2(S_1) = {\it \Gamma}_1(S_0)+ d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big ) \hspace{0.05cm},\hspace{0.6cm}{\it \Gamma}_2(S_2) ={\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big )\hspace{0.05cm}, \hspace{0.6cm}{\it \Gamma}_2(S_3) = {\it \Gamma}_1(S_1)+ d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_2 \big ) \hspace{0.05cm}.\]
  • Ab  $i = 3$  hat das Trellis seine Grundform erreicht, und zur Berechnung aller  ${\it \Gamma}_i(S_{\mu})$  muss jeweils das Minimum zwischen zwei Summen ermittelt werden:
\[{\it \Gamma}_i(S_0) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},\]
\[{\it \Gamma}_i(S_1)={\rm Min} \left [{\it \Gamma}_{i-1}(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_2) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},\]
\[{\it \Gamma}_i(S_2) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm},\]
\[{\it \Gamma}_i(S_3) ={\rm Min} \left [{\it \Gamma}_{i-1}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{i-1}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} \underline{y}_i \big ) \right ] \hspace{0.05cm}.\]
  • Von den zwei an einem Knoten  ${\it \Gamma}_i(S_{\mu})$  ankommenden Zweigen wird der schlechtere (der zu einem größeren  ${\it \Gamma}_i(S_{\mu})$  geführt hätte) eliminiert. Zu jedem Knoten führt dann nur noch ein einziger Zweig.
  • Sind alle Fehlergrößen bis einschließlich  $i = 7$  ermittelt, so kann der Viterbi–Algotithmus mit der Suche des zusammenhängenden Pfades vom Ende des Trellis   ⇒   ${\it \Gamma}_7(S_0)$  bis zum Anfang   ⇒   ${\it \Gamma}_0(S_0)$  abgeschlossen werden.
  • Durch diesen Pfad liegen dann die am wahrscheinlichsten erscheinende Codesequenz  $\underline{z}$  und die wahrscheinlichste Informationssequenz  $\underline{v}$  fest.
  • Nicht für alle Empfangssequenzen  $\underline{y}$  gilt aber  $\underline{z} = \underline{x}$  und  $\underline{v} = \underline{u}$. Das heißt:   Bei zu vielen Übertragungsfehlern versagt auch der Viterbi–Algorithmus.

Erstellen des Trellis im fehlerfreien Fall  –  Fehlergrößenberechnung


Zunächst gehen wir von der Empfangssequenz  $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$  aus, die hier – wegen der Codewortlänge  $n = 2$  – bereits in Bitpaare  $\underline{y}_1, \hspace{0.05cm} \text{...} \hspace{0.05cm} , \ \underline{y}_7$  unterteilt ist. Die in das Trellis eingetragenen Zahlenwerte und die verschiedenen Stricharten werden im folgenden Text erklärt.

Viterbi–Schema für den Empfangsvektor  $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$
  • Ausgehend vom Initialwert  ${\it \Gamma}_0(S_0) = 0$  kommt man mit  $\underline{y}_1 = (11)$  durch Addition der Hamming-Distanzen
$$d_{\rm H}((00), \ \underline{y}_1) = 2\text{ bzw. }d_{\rm H}((11), \ \underline{y}_1) = 0$$
zu den Fehlergrößen  ${\it \Gamma}_1(S_0) = 2, \ {\it \Gamma}_1(S_1) = 0$.
  • Im zweiten Decodierschritt gibt es Fehlergrößen für alle vier Zustände:   Mit  $\underline{y}_2 = (01)$  erhält man:
\[{\it \Gamma}_2(S_0) = {\it \Gamma}_1(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) = 2+1 = 3 \hspace{0.05cm},\]
\[{\it \Gamma}_2(S_1) ={\it \Gamma}_1(S_0) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) = 2+1 = 3 \hspace{0.05cm},\]
\[{\it \Gamma}_2(S_2) ={\it \Gamma}_1(S_1) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) = 0+2=2 \hspace{0.05cm},\]
\[{\it \Gamma}_2(S_3) = {\it \Gamma}_1(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) = 0+0=0 \hspace{0.05cm}.\]
  • In allen weiteren Decodierschritten müssen jeweils zwei Werte verglichen werden, wobei dem Knoten  ${\it \Gamma}_i(S_{\mu})$  stets der kleinere Wert zugewiesen wird. Beispielsweise gilt für  $i = 3$  mit  $\underline{y}_3 = (01)$:
\[{\it \Gamma}_3(S_0) ={\rm min} \left [{\it \Gamma}_{2}(S_0) + d_{\rm H} \big ((00)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_2) + d_{\rm H} \big ((11)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] ={\rm min} \big [ 3+1\hspace{0.05cm},\hspace{0.05cm} 2+1 \big ] = 3\hspace{0.05cm},\]
\[{\it \Gamma}_3(S_3) ={\rm min} \left [{\it \Gamma}_{2}(S_1) + d_{\rm H} \big ((01)\hspace{0.05cm},\hspace{0.05cm} (01) \big )\hspace{0.05cm}, \hspace{0.2cm}{\it \Gamma}_{2}(S_3) + d_{\rm H} \big ((10)\hspace{0.05cm},\hspace{0.05cm} (01) \big ) \right ] ={\rm min} \big [ 3+0\hspace{0.05cm},\hspace{0.05cm} 0+2 \big ] = 2\hspace{0.05cm}.\]
  • Ab  $i = 6$  wird im betrachteten Beispiel die Terminierung des Faltungscodes wirksam. Hier sind nur noch zwei Vergleiche zur Bestimmung von  ${\it \Gamma}_6(S_0) = 3$  und  ${\it \Gamma}_6(S_2)= 0$  anzustellen, und für  $i = 7$  nur noch ein einziger ein Vergleich mit dem Endergebnis  ${\it \Gamma}_7(S_0) = 0$.


Die Beschreibung des Viterbi–Decodiervorgangs wird auf der nächsten Seite fortgesetzt.

Auswerten des Trellis im fehlerfreien Fall  –  Pfadsuche


Nachdem alle Fehlergrößen  ${\it \Gamma}_i(S_{\mu})$  –  im vorliegenden Beispiel für  $1 ≤ i ≤ 7$  und  $0 ≤ \mu ≤ 3$  –  ermittelt wurden, kann der Viterbi–Decoder mit der Pfadsuche beginnen:

Viterbi–Pfadsuche für für den Empfangsvektor  $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$
  • Die Grafik zeigt das Trellis nach der Fehlergrößenberechnung. Alle Kreise sind mit Zahlenwerten belegt.
  • Allerding ist der in der Grafik bereits eingezeichnete wahrscheinlichste Pfad noch nicht bekannt.
  • Von den jeweils zwei an einem Knoten ankommenden Zweigen wird stets nur derjenige bei der abschließenden Pfadsuche herangezogen, der zur minimalen Fehlergröße  ${\it \Gamma}_i(S_{\mu})$  geführt hat.
  • Die „schlechten” Zweige werden verworfen. Sie sind in obiger Grafik jeweils punktiert dargestellt.


Die Pfadsuche läuft wie folgt ab:

  • Ausgehend vom Endwert  ${\it \Gamma}_7(S_0)$  wird in Rückwärtsrichtung ein zusammenhängender Pfad bis zum Startwert  ${\it \Gamma}_0(S_0)$  gesucht. Erlaubt sind nur die durchgezogenen Zweige. Punktierte Linien können nicht Teil des ausgewählten Pfades sein.
  • Der ausgewählte Pfad durchläuft von rechts nach links die Zustände  $S_0 ← S_2 ← S_1 ← S_0 ← S_2 ← S_3 ← S_1 ← S_0$  und ist in der Grafik grau hinterlegt. Es gibt keinen zweiten durchgehenden Pfad von  ${\it \Gamma}_7(S_0)$ zu ${\it \Gamma}_0(S_0)$. Das bedeutet:   Das Decodierergebnis ist eindeutig.
  • Das Ergebnis  $\underline{v} = (1, 1, 0, 0, 1, 0, 0)$  des Viterbi–Decoders hinsichtlich der Informationssequenz erhält man, wenn man für den durchgehenden Pfad  –  nun aber in Vorwärtsrichtung von links nach rechts  –  die Farben der einzelnen Zweige auswertet $($rot entspricht einer  $0$ und blau einer  $1)$.

Aus dem Endwert  ${\it \Gamma}_7(S_0) = 0$  erkennt man, dass in diesem ersten Beispiel keine Übertragungsfehler vorlagen:

  • Das Decodierergebnis  $\underline{z}$  stimmt also mit dem Empfangsvektor  $\underline{y} = (11, 01, 01, 11, 11, 10, 11)$  und der tatsächlichen Codesequenz  $\underline{x}$  überein.
  • Bei fehlerfreier Übertragung ist  $\underline{v}$  nicht nur die nach dem ML–Kriterium wahrscheinlichste Informationssequenz  $\underline{u}$, sondern beide sind sogar identisch:   $\underline{v} \equiv \underline{u}$.


Anmerkung:   Bei der beschriebenen Decodierung wurde natürlich von der bereits in der Überschrift enthaltenen Information „Fehlerfreier Fall” kein Gebrauch gemacht.

Nun folgen drei Beispiele zur Viterbi–Decodierung für den fehlerbehafteten Fall.

Decodierbeispiele für den fehlerbehafteten Fall


$\text{Beispiel 1:}$  Wir gehen hier vom Empfangsvektor  $\underline{y} = \big (11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 00\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) $  aus, der keine gültige Codesequenz  $\underline{x}$  darstellt. Die Berechnung der Fehlergrößen  ${\it \Gamma}_i(S_{\mu})$  und die Pfadsuche geschieht wie auf der Seite  Vorbemerkungen  beschrieben und auf den beiden letzten Seite für den fehlerfreien Fall demonstriert.

Decodierbeispiel mit zwei Bitfehlern

Als  Resümee  dieses ersten Beispiels ist festzuhalten:

  • Auch beim obigen Trellis lässt sich ein eindeutiger Pfad (mit dunkelgrauer Hinterlegung) zurückverfolgen, der zu den folgenden Ergebnissen führt
    (erkennbar an den Beschriftungen bzw. den Farben dieses Pfades):
\[\underline{z} = \big (00\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 00\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11 \hspace{0.05cm} \big ) \hspace{0.05cm},\]
\[ \underline{\upsilon} =\big (0\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0 \hspace{0.05cm} \big ) \hspace{0.05cm}.\]
  • Der Vergleich der am wahrscheinlichsten gesendeten Codesequenz  $\underline{z}$  mit dem Empfangsvektor  $\underline{y}$  zeigt, dass hier zwei Bitfehler (gleich am Beginn) vorlagen. Da aber der verwendete Faltungscode die freie Distanz $d_{\rm F} = 5$ aufweist, führen zwei Fehler noch nicht zu einem falschen Decodierergebnis.
  • Es gibt andere Pfade wie zum Beispiel den heller markierten Pfad $(S_0 → S_1 → S_3 → S_3 → S_3 → S_2 → S_0 → S_0)$, die zunächst als vielversprechend erscheinen. Erst im letzten Decodierschritt $(i = 7)$ kann dieser hellgraue Pfad endgültig verworfen werden.
  • Das Beispiel zeigt, dass eine zu frühe Entscheidung oft nicht zielführend ist. Man erkennt auch die Zweckmäßigkeit der Terminierung:   Bei endgültiger Entscheidung bei $i = 5$ (Ende der Informationssequenz) wären die Sequenzen  $(0, 1, 0, 1, 1)$  und  $(1, 1, 1, 1, 0)$  noch als gleichwahrscheinlich angesehen worden.

Anmerkungen:   Bei der Berechnung von  ${\it \Gamma}_5(S_0) = 3$  und  ${\it \Gamma}_5(S_1) = 3$  führen hier jeweils die beiden Vergleichszweige zur exakt gleichen minimalen Fehlergröße. In der Grafik sind diese beiden Sonderfälle durch Strichpunktierung markiert.

  • In diesem Beispiel hat dieser Sonderfall keine Auswirkung auf die Pfadsuche.
  • Der Algorithmus erwartet trotzdem stets eine Entscheidung zwischen zwei konkurrierenden Zweigen.
  • In der Praxis hilft man sich dadurch, dass man bei Gleichheit einen der beiden Pfade zufällig auswählt.


$\text{Beispiel 2:}$  Im diesem Beispiel gehen wir von folgenden Voraussetzungen bezüglich Quelle und Coder aus:

\[\underline{u} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0 \big )\hspace{0.3cm}\Rightarrow \hspace{0.3cm} \underline{x} = \big (11\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) \hspace{0.05cm}.\]
Decodierbeispiel mit drei Bitfehlern

Aus der Grafik erkennt man, dass sich hier der Decoder trotz dreier Bitfehler für den richtigen Pfad (dunkle Hinterlegung) entscheidet.

  • Es gibt also nicht immer eine Fehlentscheidung, wenn mehr als  $d_{\rm F}/2$  Bitfehler aufgetreten sind.
  • Aber bei statistischer Verteilung der drei Übertragungsfehler würde häufiger falsch entschieden als richtig.


$\text{Beispiel 3:}$  Auch hier gelte  \(\underline{u} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0 \big )\hspace{0.3cm}\Rightarrow \hspace{0.3cm} \underline{x} = \big (11\hspace{0.05cm}, 01\hspace{0.05cm}, 01\hspace{0.05cm}, 11\hspace{0.05cm}, 11\hspace{0.05cm}, 10\hspace{0.05cm}, 11 \hspace{0.05cm} \hspace{0.05cm} \big ) \hspace{0.05cm}.\) Im Unterschied zum  $\text{Beispiel 2}$  ist aber noch ein vierter Bitfehler in Form von  $\underline{y}_7 = (01)$ hinzugefügt.

Decodierbeispiel mit vier Bitfehlern
  • Nun führen beide Zweige im Schritt  $i = 7$  zur minimalen Fehlergröße  ${\it \Gamma}_7(S_0) = 4$, erkennbar an den strichpunktierten Übergängen. Entscheidet man sich im dann erforderlichen Losverfahren für den dunkel hinterlegten Pfad, so wird auch bei vier Bitfehlern noch die richtige Entscheidung getroffen:   $\underline{v} = \big (1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0\hspace{0.05cm}, 1 \hspace{0.05cm}, 0\hspace{0.05cm}, 0 \big )$.
  • Andernfalls kommt es zu einer Fehlentscheidung. Je nachdem, wie das Auswürfeln im Schritt  $i =6$  zwischen den beiden strichpunktierten Konkurrenten ausgeht, entscheidet man sich entweder für den violetten oder den hellgrauen Pfad. Mit dem richtigen Pfad haben beide wenig gemein.


Zusammenhang zwischen Hamming–Distanz und Korrelation


Insbesondere beim  BSC–Modell  – aber auch bei jedem anderen Binärkanal   ⇒   Eingang  $x_i ∈ \{0,1\}$,  Ausgang $y_i ∈ \{0,1\}$  wie zum Beispiel dem  Gilbert–Elliott–Modell  – liefert die Hamming–Distanz  $d_{\rm H}(\underline{x}, \ \underline{y})$  genau die gleiche Information über die Ähnlichkeit der Eingangsfolge  $\underline{x}$  und der Ausgangsfolge  $\underline{y}$  wie das  innere Produkt. Nimmt man an, dass die beiden Folgen in bipolarer Darstellung vorliegen (gekennzeichnet durch Tilden) und dass die Folgenlänge jeweils  $L$  ist, so gilt für das innere Produkt:

\[<\hspace{-0.1cm}\underline{\tilde{x}}, \hspace{0.05cm}\underline{\tilde{y}} \hspace{-0.1cm}> \hspace{0.15cm} = \sum_{i = 1}^{L} \tilde{x}_i \cdot \tilde{y}_i \hspace{0.3cm}{\rm mit } \hspace{0.2cm} \tilde{x}_i = 1 - 2 \cdot x_i \hspace{0.05cm},\hspace{0.2cm} \tilde{y}_i = 1 - 2 \cdot y_i \hspace{0.05cm},\hspace{0.2cm} \tilde{x}_i, \hspace{0.05cm}\tilde{y}_i \in \hspace{0.1cm}\{ -1, +1\} \hspace{0.05cm}.\]

Wir bezeichnen dieses innere Produkt manchmal auch als den  "Korrelationswert".  Im Unterschied zum  Korrelationskoeffizienten  kann der Korrelationswert den Wertebereich  $±1$  durchaus überschreiten.

Zusammenhang zwischen Haming–Distanz und Korrelationswert

$\text{Beispiel 4:}$  Wir betrachten hier zwei Binärfolgen der Länge  $L = 10$.

  • Links dargestellt sind die unipolaren Folgen  $\underline{x}$  und  $\underline{y}$  sowie das Produkt  $\underline{x} \cdot \underline{y}$.
  • Man erkennt die Hamming–Distanz  $d_{\rm H}(\underline{x}, \ \underline{y}) = 6$   ⇒   sechs Bitfehler an den Pfeilpositionen.
  • Das innere Produkt  $ < \underline{x} \cdot \underline{y} > \hspace{0.15cm} = \hspace{0.15cm}0$  hat hier keine Aussagekraft. Zum Beispiel ist  $< \underline{0} \cdot \underline{y} > $ unabhängig von  $\underline{y}$  stets Null.


Die Hamming–Distanz  $d_{\rm H} = 6$  erkennt man auch aus der bipolaren (antipodalen) Darstellung der rechten Grafik.

  • Die „Korrelationswert” hat nun den richtigen Wert:
$$4 \cdot (+1) + 6 \cdot (-1) = \, -2.$$
  • Es gilt der deterministische Zusammenhang zwischen den beiden Größen mit der Folgenlänge  $L$:
$$ < \underline{ \tilde{x} } \cdot \underline{\tilde{y} } > \hspace{0.15cm} = \hspace{0.15cm} L - 2 \cdot d_{\rm H} (\underline{\tilde{x} }, \hspace{0.05cm}\underline{\tilde{y} })\hspace{0.05cm}. $$


$\text{Fazit:}$  Interpretieren wir nun diese Gleichung für einige Sonderfälle:

  • Identische Folgen:   Die Hamming–Distanz ist gleich  $0$  und der „Korrelationswert” gleich  $L$.
  • Invertierte: Folgen:   Die Hamming–Distanz ist gleich  $L$  und der „Korrelationswert” gleich  $-L$.
  • Unkorrelierte Folgen:   Die Hamming–Distanz ist gleich  $L/2$, der „Korrelationswert” gleich  $0$.

Viterbi–Algorithmus, basierend auf Korrelation und Metriken


Mit den Erkenntnissen der letzten Seite lässt sich der Viterbi–Algorithmus auch wie folgt charakterisieren.

$\text{Alternative Beschreibung:}$  Der Viterbi–Algorithmus sucht von allen möglichen Codesequenzen  $\underline{x}' ∈ \mathcal{C}$  die Sequenz  $\underline{z}$  mit dem maximalen „ Korrelationswert” zur Empfangssequenz  $\underline{y}$:

\[\underline{z} = {\rm arg} \max_{\underline{x}' \in \hspace{0.05cm} \mathcal{C} } \hspace{0.1cm} \left\langle \tilde{\underline{x} }'\hspace{0.05cm} ,\hspace{0.05cm} \tilde{\underline{y} } \right\rangle \hspace{0.4cm}{\rm mit }\hspace{0.4cm}\tilde{\underline{x} }\hspace{0.05cm}'= 1 - 2 \cdot \underline{x}'\hspace{0.05cm}, \hspace{0.2cm} \tilde{\underline{y} }= 1 - 2 \cdot \underline{y} \hspace{0.05cm}.\]

$〈\ \text{ ...} \ 〉$  bezeichnet einen „Korrelationswert” entsprechend den Aussagen auf der letzten Seite. Die Tilden weisen wieder auf die bipolare (antipodale) Darstellung hin.


Die Grafik zeigt die diesbezügliche Trellisauswertung. Zugrunde liegt wie für die  Trellisauswertung gemäß Beispiel 1  – basierend auf der minimalen Hamming–Distanz und den Fehlergrößen ${\it \Gamma}_i(S_{\mu})$ – wieder die Eingangsfolge  $\underline{u} = \big (0\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 1\hspace{0.05cm}, 1\hspace{0.05cm}, 0\hspace{0.05cm}, 0 \hspace{0.05cm} \big )$   ⇒   Codefolge $\underline{x} = \big (00, 11, 10, 00, 01, 01, 11 \big ) \hspace{0.05cm}.$

Viterbi–Decodierung, basierend auf Korrelation und Metrik

Weiter werden vorausgesetzt:

  • der Standard–Faltungscodierer:   Rate  $R = 1/2$,  Gedächtnis  $m = 2$;
  • die Übertragungsfunktionsmatrix:   $\mathbf{G}(D) = (1 + D + D^2, 1 + D^2)$;
  • Länge der Informationssequenz:   $L = 5$;
  • Berücksichtigung der Terminierung:  $L' = 7$;
  • der Empfangsvektor   $\underline{y} = (11, 11, 10, 00, 01, 01, 11)$
    ⇒   zwei Bitfehler zu Beginn;
  • Viterbi–Decodierung mittels Trellisdiagramms:
    • roter Pfeil ⇒   Hypothese $u_i = 0$,
    • blauer Pfeil ⇒   Hypothese $u_i = 1$.


Nebenstehendes Trellis und die  Trellisauswertung gemäß Beispiel 1  ähneln sich sehr. Ebenso wie die Suche nach der Sequenz mit der minimalen Hamming–Distanz geschieht auch die  Suche nach dem maximalen Korrelationswert  schrittweise:

  • Die Knoten bezeichnet man hier als die Metriken  ${\it \Lambda}_i(S_{\mu})$.
  • Die englische Bezeichnung hierfür ist  Cumulative Metric, während  Branch Metric  den Metrikzuwachs angibt.
  • Der Endwert  ${\it \Lambda}_7(S_0) = 10$  gibt den „Korrelationswert” zwischen der ausgewählten Folge  $\underline{z}$  und dem Empfangsvektor  $\underline{y}$  an.
  • Im fehlerfreien Fall ergäbe sich  ${\it \Lambda}_7(S_0) = 14$.

$\text{Beispiel 5:}$  Die folgende Detailbeschreibung der Trellisauswertung beziehen sich auf das obige Trellis:

  • Die Metriken zum Zeitpunkt  $i = 1$  ergeben sich mit  $\underline{y}_1 = (11)$  zu
\[{\it \Lambda}_1(S_0) \hspace{0.15cm} = \hspace{0.15cm} <\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.2cm}<(+1,\hspace{0.05cm} +1)\hspace{0.05cm}, \hspace{0.05cm}(-1,\hspace{0.05cm} -1) >\hspace{0.1cm} = \hspace{0.1cm} -2 \hspace{0.05cm},\]
\[{\it \Lambda}_1(S_1) \hspace{0.15cm} = \hspace{0.15cm} <\hspace{-0.05cm}(11)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.2cm}<(-1,\hspace{0.05cm} -1)\hspace{0.05cm}, \hspace{0.05cm}(-1,\hspace{0.05cm} -1) >\hspace{0.1cm} = \hspace{0.1cm} +2 \hspace{0.05cm}.\]
  • Entsprechend gilt zum Zeitpunkt  $i = 2$  mit  $\underline{y}_2 = (11)$:
\[{\it \Lambda}_2(S_0) = {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.1cm} -2-2 = -4 \hspace{0.05cm},\]
\[{\it \Lambda}_2(S_1) = {\it \Lambda}_1(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(11)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.1cm} -2+2 = 0 \hspace{0.05cm},\]
\[{\it \Lambda}_2(S_2)= {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.1cm} +2+0 = +2 \hspace{0.05cm},\]
\[{\it \Lambda}_2(S_3)= {\it \Lambda}_1(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} = \hspace{0.1cm} +2+0 = +2 \hspace{0.05cm}.\]
  • Ab dem Zeitpunkt  $i =3$  muss eine Entscheidung zwischen zwei Metriken getroffen werden. Beispielsweise erhält man mit  $\underline{y}_3 = (10)$  für die oberste und die unterste Metrik im Trellis:
\[{\it \Lambda}_3(S_0)={\rm max} \left [{\it \Lambda}_{2}(S_0) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(00)\hspace{0.05cm}, \hspace{0.05cm}(11) \hspace{-0.05cm}> \right ] = {\rm max} \left [ -4+0\hspace{0.05cm},\hspace{0.05cm} +2+0 \right ] = +2\hspace{0.05cm},\]
\[{\it \Lambda}_3(S_3) ={\rm max} \left [{\it \Lambda}_{2}(S_1) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(01)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}>\hspace{0.2cm} \hspace{0.05cm}, \hspace{0.2cm}{\it \Lambda}_{2}(S_3) \hspace{0.2cm}+ \hspace{0.1cm}<\hspace{-0.05cm}(10)\hspace{0.05cm}, \hspace{0.05cm}(10) \hspace{-0.05cm}> \right ] = {\rm max} \left [ 0+0\hspace{0.05cm},\hspace{0.05cm} +2+2 \right ] = +4\hspace{0.05cm}.\]

Vergleicht man die zu zu maximierenden Metriken  ${\it \Lambda}_i(S_{\mu})$  mit den zu minimierenden Fehlergrößen  ${\it \Gamma}_i(S_{\mu})$  gemäß dem  $\text{Beispiel 1}$, so erkennt man den folgenden deterministischen Zusammenhang:

\[{\it \Lambda}_i(S_{\mu}) = 2 \cdot \big [ i - {\it \Gamma}_i(S_{\mu}) \big ] \hspace{0.05cm}.\]

Die Auswahl der zu den einzelnen Decodierschritten überlebenden Zweige ist bei beiden Verfahren identisch, und auch die Pfadsuche liefert das gleiche Ergebnis.


$\text{Fazit:}$ 

  • Beim Binärkanal – zum Beispiel nach dem BSC–Modell – führen die beiden beschriebenen Viterbi–Varianten „Fehlergrößenminimierung” und „Metrikmaximierung” zum gleichen Ergebnis.
  • Beim AWGN–Kanal ist dagegen die Fehlergrößenminimierung nicht anwendbar, da keine Hamming–Distanz zwischen dem binären Eingang  $\underline{x}$  und dem analogen Ausgang  $\underline{y}$  angegeben werden kann.
  • Ein weiterer Vorteil der Metrikmaximierung ist, dass eine Zuverlässigkeitsinformation über die Empfangswerte  $\underline{y}$  in einfacher Weise berücksichtigt werden kann.


Viterbi–Entscheidung bei nicht–terminierten Faltungscodes


Bisher wurde stets ein terminierter Faltungscode der Länge  $L\hspace{0.05cm}' = L + m$  betrachtet, und das Ergebnis des Viterbi–Decoders war der durchgehende Trellispfad vom Startzeitpunkt  $(i = 0)$  bis zum Ende  $(i = L\hspace{0.05cm}')$.

  • Bei nicht–terminierten Faltungscodes  $(L\hspace{0.05cm}' → ∞)$  ist diese Entscheidungsstrategie nicht anwendbar.
  • Hier muss der Algorithmus abgewandelt werden, um in endlicher Zeit eine bestmögliche Schätzung (gemäß Maximum–Likelihood) der einlaufenden Bits der Codesequenz liefern zu können.


Die Grafik zeigt im oberen Teil ein beispielhaftes Trellis für

  • „unseren” Standard–Codierer   ⇒   $R = 1/2, \ m = 2, \ {\rm G}(D) = (1 + D + D^2, \ 1 + D^2)$,
  • die Nullfolge   ⇒   $\underline{u} = \underline{0} = (0, 0, 0, \ \text{...})$   ⇒   $\underline{x} = \underline{0} = (00, 00, 00, \ \text{...})$,
  • jeweils einen Übertragungsfehler bei  $i = 4$  und  $i = 5$.

Anhand der Stricharten erkennt man erlaubte (durchgezogene) und verbotene (punktierte) Pfeile in rot $(u_i = 0)$ und blau $(u_i = 1)$. Punktierte Linien haben einen Vergleich gegen einen Konkurrenten verloren und können nicht Teil des ausgewählten Pfades sein.

Beispielhaftes Trellis und überlebende Pfade

Der untere Teil der Grafik zeigt die  $2^m = 4$  überlebenden Pfade  ${\it \Phi}_9(S_{\mu})$  zum Zeitpunkt  $i = 9$.

  • Man findet diese Pfade am einfachsten von rechts nach links (Rückwärtsrichtung).
  • Die folgende Angabe zeigt die durchlaufenen Zustände  $S_{\mu}$  allerdings in Vorwärtsrichtung:
$${\it \Phi}_9(S_0) \text{:} \hspace{0.4cm} S_0 → S_0 → S_0 → S_0 → S_0 → S_0 → S_0 → S_0 → S_0 → S_0,$$
$${\it \Phi}_9(S_1) \text{:} \hspace{0.4cm} S_0 → S_0 → S_0 → S_0 → S_1 → S_2 → S_1 → S_3 → S_2 → S_1,$$
$${\it \Phi}_9(S_2) \text{:} \hspace{0.4cm} S_0 → S_0 → S_0 → S_0 → S_1 → S_2 → S_1 → S_2 → S_1 → S_2,$$
$${\it \Phi}_9(S_3) \text{:} \hspace{0.4cm} S_0 → S_0 → S_0 → S_0 → S_1 → S_2 → S_1 → S_2 → S_1 → S_3.$$

Zu früheren Zeitpunkten  $(i<9)$  würden sich andere überlebende Pfade  ${\it \Phi}_i(S_{\mu})$  ergeben. Deshalb definieren wir:

$\text{Definition:}$  Der  überlebende Pfad  (englisch:  Survivor)  ${\it \Phi}_i(S_{\mu})$  ist der durchgehende Pfad vom Start  $S_0$  $($bei  $i = 0)$  zum Knoten  $S_{\mu}$ zum Zeitpunkt  $i$. Empfehlenswert ist die Pfadsuche in Rückwärtsrichtung.


Die folgende Grafik zeigt die überlebenden Pfade für die Zeitpunkte  $i = 6$  bis  $i = 9$. Zusätzlich sind die jeweiligen Metriken  ${\it \Lambda}_i(S_{\mu})$  für alle vier Zustände angegeben.

Die überlebenden Pfade  ${\it \Phi}_6, \ \text{...} \ , \ {\it \Phi}_9$

Diese Grafik ist wie folgt zu interpretieren:

  • Zum Zeitpunkt  $i = 9$  kann noch keine endgültige ML–Entscheidung über die ersten neun Bit der Informationssequenz getroffen werden. Allerdings ist bereits sicher, dass die wahrscheinlichste Bitfolge durch einen der Pfade  ${\it \Phi}_9(S_0), \ \text{...} \ , \ {\it \Phi}_9(S_3)$  richtig wiedergegeben wird.
  • Da alle vier Pfade bis  $i = 3$  identisch sind, ist die Entscheidung „$v_1 = 0, v_2 = 0, \ v_3 = 0$” die bestmögliche (hellgraue Hinterlegung). Auch zu einem späteren Zeitpunkt würde keine andere Entscheidung getroffen werden. Hinsichtlich der Bits  $v_4, \ v_5, \ \text{...}$  sollte man sich zu diesem frühen Zeitpunkt noch nicht festlegen.
  • Müsste man zum Zeitpunkt  $i = 9$  eine Zwangsentscheidung treffen, so würde man sich für  ${\it \Phi}_9(S_0)$   ⇒   $\underline{v} = (0, 0, \ \text{...} \ , 0)$ entscheiden, da die Metrik  ${\it \Lambda}_9(S_0) = 14$  größer ist als die Vergleichsmetriken.
  • Die Zwangsentscheidung zum Zeitpunkt  $i = 9$  führt in diesem Beispiel zum richtigen Ergebnis. Zum Zeitpunkt  $i = 6$  wäre ein solcher Zwangsentscheid falsch gewesen   ⇒   $\underline{v} = (0, 0, 0, 1, 0, 1)$, und zu den Zeitpunten  $i = 7$  bzw.  $i = 8$  nicht eindeutig.


Weitere Decodierverfahren für Faltungscodes


Wir haben uns bisher nur mit dem Viterbi–Algorithmus in der Form beschäftigt, der 1967 von Andrew J. Viterbi in  [Vit67][1] veröffentlicht wurde. Erst 1974 hat  George David Forney  nachgewiesen, dass dieser Algorithmus eine Maximum–Likelihood–Decodierung von Faltungscodes durchführt.

Aber schon in den Jahren zuvor waren viele Wissenschaftler sehr bemüht, effiziente Decodierverfahren für die 1955 erstmals von  Peter Elias  beschriebenen Faltungscodes bereitzustellen. Zu nennen sind hier unter Anderem – genauere Beschreibungen findet man beispielsweise in  [Bos98][2] oder der englischen Ausgabe  [Bos99][3].

  • der Vorschlag von  Robert Mario Fano  (1963), der als Fano–Algorithmus  bekannt wurde,
  • die Arbeiten von Kamil Zigangirov (1966) und  Frederick Jelinek  (1969), deren Decodierverfahren auch als Stack–Algorithmus  bezeichnet wird.

Alle diese Decodierverfahren und auch der Viterbi–Algorithmus in seiner bisher beschriebenen Form liefern „hart” entschiedene Ausgangswerte   ⇒   $v_i ∈ \{0, 1\}$. Oftmals wären jedoch Informationen über die Zuverlässigkeit der getroffenen Entscheidungen wünschenswert, insbesondere dann, wenn ein verkettetes Codierschema mit einem äußeren und einem inneren Code vorliegt.

Kennt man die Zuverlässigkeit der vom inneren Decoder entschiedenen Bits zumindest grob, so kann durch diese Information die Bitfehlerwahrscheinlichkeit des äußeren Decoders (signifikant) herabgesetzt werden. Der von  Joachim Hagenauer  in  [Hag90][4] vorgeschlagene  Soft–Output–Viterbi–Algorithmus  (SOVA) erlaubt es, zusätzlich zu den entschiedenen Symbolen auch jeweils ein Zuverlässigkeitsmaß anzugeben.

Abschließend gehen wir noch etwas genauer auf den  BCJR–Algorithmus  ein, benannt nach dessen Erfindern L. R. Bahl, J. Cocke, F. Jelinek und J. Raviv  [BCJR74][5].

  • Während der Viterbi–Algorithmus nur eine Schätzung der Gesamtsequenz vornimmt   ⇒   block–wise ML, schätzt der BCJR–Algorithmus ein einzelnes Symbol (Bit) unter Berücksichtigung der gesamten empfangenen Codesequenz.
  • Es handelt sich hierbei also um eine  symbolweise Maximum–Aposteriori–Decodierung   ⇒   bit–wise MAP.


$\text{Fazit:}$  Der Unterschied zwischen Viterbi–Algorithmus und BCJR–Algorithmus soll – stark vereinfacht – am Beispiel eines terminierten Faltungscodes dargestellt werden:

  • Der  Viterbi–Algorithmus  arbeitet das Trellis nur in einer Richtung – der Vorwärtsrichtung  – ab und berechnet für jeden Knoten die Metriken  ${\it \Lambda}_i(S_{\mu})$. Nach Erreichen des Endknotens wird der überlebende Pfad gesucht, der die wahrscheinlichste Codesequenz kennzeichnet.
  • Beim  BCJR–Algorithmus  wird das Trellis zweimal abgearbeitet, einmal in Vorwärtsrichtung und anschließend in Rückwärtsrichtung. Für jeden Knoten sind dann zwei Metriken angebbar, aus denen für jedes Bit die Aposterori–Wahrscheinlichkeit bestimmt werden kann.


Hinweise:


Aufgaben zum Kapitel


Aufgabe 3.9: Grundlegendes zum Viterbi–Algorithmus

Aufgabe 3.9Z: Nochmals Viterbi–Algorithmus

Aufgabe 3.10: Fehlergrößenberechnung

Aufgabe 3.10Z: ML–Decodierung von Faltungscodes

Aufgabe 3.11: Viterbi–Pfadsuche

Quellenverzeichnis

  1. Viterbi, A.J.: Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm. In: IEEE Transactions on Information Theory, vol. IT-13, pp. 260-269, April 1967.
  2. 2,0 2,1 Bossert, M.: Kanalcodierung. Stuttgart: B. G. Teubner, 1998.
  3. 3,0 3,1 Bossert, M.: Channel Coding for Telecommunications. Wiley & Sons, 1999.
  4. Hagenauer, J.: Soft Output Viterbi Decoder. In: Technischer Report, Deutsche Forschungsanstalt für Luft- und Raumfahrt (DLR), 1990.
  5. Bahl, L.R.; Cocke, J.; Jelinek, F.; Raviv, J.: Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate. In: IEEE Transactions on Information Theory, Vol. IT-20, S. 284-287, 1974.