Kanalcodierung/Decodierung von Faltungscodes: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
(Die Seite wurde neu angelegt: „ {{Header |Untermenü=Faltungscodierung und geeignete Decoder |Vorherige Seite=Codebeschreibung mit Zustands– und Trellisdiagramm |Nächste Seite=Distanzeig…“)
 
Zeile 73: Zeile 73:
 
*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>
 
*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>
  
 +
== Decodierbeispiel für den fehlerfreien Fall (1) ==
 +
<br>
 +
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>
  
 +
[[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>
  
 +
Die eingetragenen Zahlenwerte und die verschiedenen Stricharten werden im folgenden Text erklärt:
 +
*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>
  
 +
*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:
 +
 +
::<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):
 +
 +
::<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>
 +
::<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>
 +
::<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>
 +
::<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>
 +
 +
*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>
 +
 +
Die Beschreibung wird auf der nächsten Seite fortgesetzt.
  
  

Version vom 15. Januar 2017, 21:05 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 J. Viterbi entwickelte Algorithmus wurde bereits im Kapitel 3.8 des Buches „Digitalsignalübertragung” 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:

Systemmodell zur Beschreibung der Decodierung von Faltungscodes

  • Die Informationssequenz u = (u1, u2, ...) ist hier im Gegensatz zur Beschreibung der linearen Blockcodes ⇒ Kapitel 1.5 oder von Reed–Solomon–Codes ⇒ Kapitel 2.4 im allgemeinen unendlich lang („semi–infinite”). Für die Informationssymbole gilt stets ui ∈ {0, 1}.
  • Die Codesequenz x = (x1, x2, ...) mit xi ∈ {0, 1} hängt außer von u auch noch von der Coderate R = 1/n, dem Gedächtnis m und der Übertragungsfunktionsmatrix 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} ... \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} \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}.\]
  • Die Empfangssequenz y = (y1, y2, ...) ergibt sich entsprechend dem angenommenen Kanalmodell. Bei einem digitalen Modell wie dem Binary Symmetric Channel (BSC) gilt yi ∈ {0, 1}, so dass die Verfälschung von x auf y mit der Hamming–Distanz dH (x, y) quantifiziert werden kann. Die erforderlichen Modifikationen für den AWGN–Kanal folgen auf Seite 6 dieses Kapitels.
  • Der nachfolgend beschriebene Viterbi–Algorithmus liefert eine Schätzung z für die Codesequenz x und eine weitere Schätzung υ für die Informationssequenz 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}.\]

Zusammenfassung : Der Viterbi–Algorithmus sucht bei einem digitalen Kanalmodell (zum Beispiel BSC) von allen möglichen Codesequenzen x' diejenige Sequenz z mit der minimalen Hamming–Distanz dH(x', y) zur Empfangssequenz y:

\[\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} ) = {\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}.\]

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

Vorbemerkungen zu den nachfolgenden Decodierbeispielen (1)


In den Beispielen dieses Kapitels wird stets von unserem Standard–Faltungscodierer der Rate R = 1/2, mit dem Gedächtnis m = 2 sowie der Übertragungsfunktionsmatrix G(D) = (1 + D + D2, 1 + D2) ausgegangen. Die Länge der Informationssequenz sei L = 5 und unter Berücksichtigung der Terminierung L′ = 7. Die betrachteten Codesequenzen x und auch die Empfangssequenzen y setzen sich somit jeweils aus 14 Bit zusammen. Durch Aufteilung entsprechend y = ( y1, y2, ... , y7) ergeben sich die Bitpaare yi ∈ {00, 01, 10, 11}.

Trellis zur Decodierung der Empfangssequenz y

Die Viterbi–Decodierung erfolgt mit Hilfe des dargestellten Trellisdiagramms. Ein roter Pfeil steht für die Hypothese ui = 0, ein blauer für ui = 1. Um Verwechslungen zu vermeiden, versehen wir hypothetische Größen mit Apostroph. Auch dann, wenn wir sicher wissen, dass das Informationsbit ui = 1 ist, gilt ui' ∈ {0, 1}. Neben den Pfeilen steht die jeweilige hypothetische Codesequenz xi' ∈ {00, 01, 10, 11}.

Wir gehen auf dieser und den nachfolgenden Seiten davon aus, dass die Viterbi–Decodierung auf der Hamming–Distanz dH(xi', yi) zwischen dem Empfangswort yi und den vier möglichen Codeworten xi' ∈ {00, 01, 10, 11} basiert. Dann gehen wir wie folgt vor:

  • In den noch leeren Kreisen werden die Fehlergrößen Γi(Sμ) der Zustände Sμ (0 ≤ μ ≤ 3) zu den Zeitpunkten i eingetragen. Der Startwert ist stets Γ0(S0) = 0.
  • Die Fehlergrößen für i = 1 und i = 2 ergeben sich zu
\[{\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},\]
\[{\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},\]
\[{\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}.\]

Die Beschreibung wird auf der nächsten Seite fortgesetzt.

Vorbemerkungen zu den nachfolgenden Decodierbeispielen (2)


Fortsetzung der allgemeinen Viterbi–Beschreibung:

Trellis zur Decodierung der Empfangssequenz y

  • Ab dem Zeitpunkt i = 3 hat das Trellisdiagramm seine Grundform erreicht, und zur Berechnung aller Γi(Sμ) muss jeweils das Minimum zwischen zwei Summen ermittelt werden:
\[{\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},\]
\[{\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},\]
\[{\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},\]
\[{\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}.\]
  • Von den zwei an einem Knoten Γi(Sμ) ankommenden Zweigen wird der schlechtere (der zu einem größeren Γi(Sμ) 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 das zusammenhängenden Pfades vom Ende des Trellis ⇒ Γ7(S0) bis zum Anfang ⇒ Γ0(S0) abgeschlossen werden.
  • Durch diesen Pfad liegen dann die am wahrscheinlichsten erscheinende Codesequenz z und die wahrscheinlichste Informationssequenz υ fest. Nicht für alle Empfangssequenzen y gilt aber z = x und υ = u. Das heißt: Bei zu vielen Übertragungsfehlern versagt auch der Viterbi–Algorithmus.

Decodierbeispiel für den fehlerfreien Fall (1)


Zunächst gehen wir von der Empfangssequenz y = (11, 01, 01, 11, 11, 10, 11) aus, die hier – wegen der Codewortlänge n = 2 – bereits in Bitpaare y1, ... , y7 unterteilt ist.

Viterbi–Schema für y = (11, 01, 01, 11, 11, 10, 11)

Die eingetragenen Zahlenwerte und die verschiedenen Stricharten werden im folgenden Text erklärt:

  • Ausgehend vom Initialwert Γ0(S0) = 0 kommt man mit y1 = (11) durch Addition der Hamming-Distanzen dH ((00), y1) = 2 bzw. dH ((11), y1) = 0 zu den Fehlergrößen Γ1(S0) = 2, Γ1(S1) = 0.
  • Im zweiten Decodierschritt gibt es Fehlergrößen für alle vier Zustände: Mit y2 = (01) erhält man:
\[{\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},\]
\[{\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},\]
\[{\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},\]
\[{\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}.\]
  • In allen weiteren Decodierschritten müssen jeweils zwei Werte verglichen werden, wobei dem Knoten Γi(Sμ) stets der kleinere Wert zugewiesen wird. Beispielsweise gilt für i = 3 mit y3 = (01):
\[{\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 ] =\]
\[ \hspace{1.2cm} = \hspace{-0.15cm}{\rm min} \left [ 3+1\hspace{0.05cm},\hspace{0.05cm} 2+1 \right ] = 3\hspace{0.05cm},\]
\[{\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 ] =\]
\[ \hspace{1.2cm} = \hspace{-0.15cm}{\rm min} \left [ 3+0\hspace{0.05cm},\hspace{0.05cm} 0+2 \right ] = 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 Γ6(S0) und Γ6(S2) anzustellen, und für i = 7 nur noch ein Vergleich mit dem Endergebnis Γ7(S0).
  • 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(Sμ) geführt hat. Die „schlechten” Zweige werden verworfen. Sie sind in obiger Grafik jeweils punktiert dargestellt.

Die Beschreibung wird auf der nächsten Seite fortgesetzt.