Difference between revisions of "Channel Coding/Decoding of Linear Block Codes"

From LNTwww
(Die Seite wurde neu angelegt: „ {{Header |Untermenü=Binäre Blockcodes zur Kanalcodierung |Vorherige Seite=Allgemeine Beschreibung linearer Blockcodes |Nächste Seite=Schranken für die Bl…“)
 
Line 29: Line 29:
 
::<math>\underline{z} = {\rm arg} \min_{\underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm} \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm}
 
::<math>\underline{z} = {\rm arg} \min_{\underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm} \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm}
 
d_{\rm H}(\underline{y}  \hspace{0.05cm}, \hspace{0.1cm}\underline{x}_{\hspace{0.03cm}i})\hspace{0.05cm}.</math>
 
d_{\rm H}(\underline{y}  \hspace{0.05cm}, \hspace{0.1cm}\underline{x}_{\hspace{0.03cm}i})\hspace{0.05cm}.</math>
 +
 +
== Prinzip der Syndromdecodierung ==
 +
<br>
 +
Vorausgesetzt wird hier ein (<i>n</i>, <i>k</i>)&ndash;Blockcode mit der Prüfmatrix <b>H</b> und den systematischen Codeworten
 +
 +
::<math>\underline{x}\hspace{0.05cm} = (x_1, x_2, ... \hspace{0.05cm}, x_i, ... \hspace{0.05cm}, x_n)
 +
= (u_1, u_2, ... \hspace{0.05cm}, u_k, p_1, ... \hspace{0.05cm}, p_{n-k})\hspace{0.05cm}. </math>
 +
 +
Mit dem Fehlervektor <i><u>e</u></i> gilt dann für das Empfangswort:
 +
 +
::<math>\underline{y} = \underline{x} + \underline{e} \hspace{0.05cm}, \hspace{0.4cm} \underline{y} \in \hspace{0.1cm} {\rm GF}(2^n) \hspace{0.05cm}, \hspace{0.1cm} \underline{x} \in \hspace{0.1cm} {\rm GF}(2^n) \hspace{0.05cm}, \hspace{0.1cm} \underline{e} \in \hspace{0.1cm} {\rm GF}(2^n)
 +
\hspace{0.05cm}.</math>
 +
 +
Ein Bitfehler an der Position <i>i</i>, das heißt <i>y<sub>i</sub></i> &ne; <i>x<sub>i</sub></i>, wird ausgedrückt durch den Fehlerkoeffizienten <i>e<sub>i</sub></i> = 1.<br>
 +
 +
{{Definition}}''':''' Das Syndrom <i><u>s</u></i> = (<i>s</i><sub>0</sub>, <i>s</i><sub>1</sub>, ... , <i>s</i><sub><i>m</i>&ndash;1</sub>) berechnet sich (als Zeilen&ndash; bzw. Spaltenvektor) aus dem Empfangswort <i><u>y</u></i> und der Prüfmatrix <b>H</b> in folgender Weise:
 +
 +
:<math>\underline{s} = \underline{y} \cdot { \boldsymbol{\rm H}}^{\rm T}\hspace{0.3cm}{\rm bzw.}\hspace{0.3cm}
 +
\underline{s}^{\rm T} = { \boldsymbol{\rm H}} \cdot \underline{y}^{\rm T}\hspace{0.05cm}.</math>
 +
 +
Die Vektorlänge von <u><i>s</i></u> ist gleich <i>m</i> = <i>n</i> &ndash; <i>k</i> (Zeilenzahl von <b>H</b>).{{end}}<br>
 +
 +
Das Syndrom <i><u>s</u></i> zeigt folgende Charakteristika:
 +
*Wegen <i><u>x</u></i> &middot; <b>H</b><sup>T</sup> = <u>0</u> hängt <i><u>s</u></i> nicht vom Codewort <i><u>x</u></i> ab, sondern allein vom Fehlervektor <i><u>e</u></i>:
 +
 +
::<math>\underline{s} = \underline{y} \cdot { \boldsymbol{\rm H}}^{\rm T}
 +
= \hspace{0.05cm} \underline{x} \cdot { \boldsymbol{\rm H}}^{\rm T} + \hspace{0.05cm} \underline{e} \cdot { \boldsymbol{\rm H}}^{\rm T}
 +
= \hspace{0.05cm} \underline{e} \cdot { \boldsymbol{\rm H}}^{\rm T}
 +
\hspace{0.05cm}.</math>
 +
 +
*Bei hinreichend wenig Bitfehlern liefert <i><u>s</u></i> einen eindeutigen Hinweis auf die Fehlerpositionen und ermöglicht so eine vollständige Fehlerkorrektur.<br><br>
 +
 +
{{Beispiel}}''':''' Ausgehend vom systematischen (7,&nbsp;4,&nbsp;3)&ndash;Hamming&ndash;Code erhält man beispielsweise für den Empfangsvektor <u><i>y</i></u> = (0, 1, 1, 1, 0, 0, 1) das folgende Ergebnis:
 +
 +
:<math>{ \boldsymbol{\rm H}} \cdot \underline{y}^{\rm T}
 +
=  \begin{pmatrix}
 +
1 &1 &1 &0 &1 &0 &0\\
 +
0 &1 &1 &1 &0 &1 &0\\
 +
1 &1 &0 &1 &0 &0 &1
 +
\end{pmatrix} \cdot \begin{pmatrix}
 +
0 \\
 +
1 \\
 +
1 \\
 +
1 \\
 +
0 \\
 +
0 \\
 +
1
 +
\end{pmatrix} = \begin{pmatrix}
 +
0 \\
 +
1 \\
 +
1
 +
\end{pmatrix} = \underline{s}^{\rm T} \hspace{0.05cm}.</math>
 +
 +
Vergleicht man das Syndrom mit den Prüfgleichungen des Hamming&ndash;Codes, so erkennt man, dass
 +
*am wahrscheinlichsten das vierte Symbol (<i>x</i><sub>4</sub> = <i>u</i><sub>4</sub>) des Codewortes verfälscht wurde,<br>
 +
 +
*der Codewortschätzer somit das Ergebnis  <u><i>z</i></u> = (0, 1, 1, 0, 0, 0, 1) liefern wird.<br>
 +
 +
*die Entscheidung nur dann richtig ist, wenn bei der Übertragung nur ein Bit verfälscht wurde.<br><br>
 +
 +
Nachfolgend sind die erforderlichen Korrekturen für den (7,&nbsp;4,&nbsp;3)&ndash;Hamming&ndash;Code angegeben, die sich aus dem errechneten Syndrom <i><u>s</u></i> entsprechend den Spalten der Prüfmatrix ergeben:
 +
 +
:<math>\underline{s} \hspace{-0.15cm} =  \hspace{-0.15cm} (0, 0, 0) \hspace{0.10cm} \Rightarrow\hspace{0.10cm}{\rm keine\hspace{0.15cm} Korrektur}\hspace{0.05cm};\hspace{0.4cm}\underline{s} = (1, 0, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm}p_1{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};</math>
 +
:<math>\underline{s} \hspace{-0.15cm} =  \hspace{-0.15cm}(0, 0, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} p_3{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 0, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_1{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};</math>
 +
:<math>\underline{s} \hspace{-0.15cm} =  \hspace{-0.15cm}(0, 1, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} p_2{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 1, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_3{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};</math>
 +
:<math>\underline{s} \hspace{-0.15cm} =  \hspace{-0.15cm}(0, 1, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_4{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 1, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_2{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm}. </math>{{end}}<br>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
  
 
{{Display}}
 
{{Display}}

Revision as of 22:35, 9 January 2017

Blockschaltbild und Voraussetzungen


Wir gehen von dem bereits im Kapitel 1.2 gezeigten Blockschaltbild aus, wobei als Kanalmodell meist der Binary Symmetric Channel (BSC) verwendet wird. Zur Codewortschätzung verwenden wir den Maximum–Likelihood–Entscheider (ML), der für binäre Codes ⇒ x ∈ GF(2n) das gleiche Ergebnis liefert wie der MAP–Empfänger.

Blockschaltbild zu Kapitel 1.5 und 1.6

Die Aufgabe des Kanaldecoders kann wie folgt beschrieben werden:

  • Der Vektor υ nach der Decodierung (an der Sinke) soll möglichst gut mit dem Informationswort u übereinstimmen. Das heißt: Die Blockfehlerwahrscheinlichkeit soll möglichst klein sein:
\[{ \rm Pr(Blockfehler)} = { \rm Pr}( \underline{v} \ne \underline{u}) \stackrel{!}{=} { \rm Minimum}\hspace{0.05cm}.\]
  • Aufgrund der deterministischen Zuweisungen x = enc(u) bzw. υ = enc–1(z) gilt aber auch:
\[{ \rm Pr(Blockfehler)} = { \rm Pr}( \underline{z} \ne \underline{x}) \stackrel{!}{=} { \rm Minimum}\hspace{0.05cm}.\]
  • Gesucht ist somit das zum gegebenen Empfangswort y = x + e am wahrscheinlichsten gesendete Codewort xi, das als Ergebnis z weiter gegeben wird:
\[\underline{z} = {\rm arg} \max_{\underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm} \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm} {\rm Pr}( \underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm}|\hspace{0.05cm} \underline{y} ) \hspace{0.05cm}.\]
  • Beim BSC–Kanal gilt sowohl xi ∈ GF(2n) als auch y ∈ GF(2n), so dass die ML–Regel auch mit der Hamming–Distanz dH(y, xi) geschrieben werden kann:
\[\underline{z} = {\rm arg} \min_{\underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm} \in \hspace{0.05cm} \mathcal{C}} \hspace{0.1cm} d_{\rm H}(\underline{y} \hspace{0.05cm}, \hspace{0.1cm}\underline{x}_{\hspace{0.03cm}i})\hspace{0.05cm}.\]

Prinzip der Syndromdecodierung


Vorausgesetzt wird hier ein (n, k)–Blockcode mit der Prüfmatrix H und den systematischen Codeworten

\[\underline{x}\hspace{0.05cm} = (x_1, x_2, ... \hspace{0.05cm}, x_i, ... \hspace{0.05cm}, x_n) = (u_1, u_2, ... \hspace{0.05cm}, u_k, p_1, ... \hspace{0.05cm}, p_{n-k})\hspace{0.05cm}. \]

Mit dem Fehlervektor e gilt dann für das Empfangswort:

\[\underline{y} = \underline{x} + \underline{e} \hspace{0.05cm}, \hspace{0.4cm} \underline{y} \in \hspace{0.1cm} {\rm GF}(2^n) \hspace{0.05cm}, \hspace{0.1cm} \underline{x} \in \hspace{0.1cm} {\rm GF}(2^n) \hspace{0.05cm}, \hspace{0.1cm} \underline{e} \in \hspace{0.1cm} {\rm GF}(2^n) \hspace{0.05cm}.\]

Ein Bitfehler an der Position i, das heißt yixi, wird ausgedrückt durch den Fehlerkoeffizienten ei = 1.

: Das Syndrom s = (s0, s1, ... , sm–1) berechnet sich (als Zeilen– bzw. Spaltenvektor) aus dem Empfangswort y und der Prüfmatrix H in folgender Weise:

\[\underline{s} = \underline{y} \cdot { \boldsymbol{\rm H}}^{\rm T}\hspace{0.3cm}{\rm bzw.}\hspace{0.3cm} \underline{s}^{\rm T} = { \boldsymbol{\rm H}} \cdot \underline{y}^{\rm T}\hspace{0.05cm}.\]

Die Vektorlänge von s ist gleich m = nk (Zeilenzahl von H).


Das Syndrom s zeigt folgende Charakteristika:

  • Wegen x · HT = 0 hängt s nicht vom Codewort x ab, sondern allein vom Fehlervektor e:
\[\underline{s} = \underline{y} \cdot { \boldsymbol{\rm H}}^{\rm T} = \hspace{0.05cm} \underline{x} \cdot { \boldsymbol{\rm H}}^{\rm T} + \hspace{0.05cm} \underline{e} \cdot { \boldsymbol{\rm H}}^{\rm T} = \hspace{0.05cm} \underline{e} \cdot { \boldsymbol{\rm H}}^{\rm T} \hspace{0.05cm}.\]
  • Bei hinreichend wenig Bitfehlern liefert s einen eindeutigen Hinweis auf die Fehlerpositionen und ermöglicht so eine vollständige Fehlerkorrektur.

: Ausgehend vom systematischen (7, 4, 3)–Hamming–Code erhält man beispielsweise für den Empfangsvektor y = (0, 1, 1, 1, 0, 0, 1) das folgende Ergebnis:

\[{ \boldsymbol{\rm H}} \cdot \underline{y}^{\rm T} = \begin{pmatrix} 1 &1 &1 &0 &1 &0 &0\\ 0 &1 &1 &1 &0 &1 &0\\ 1 &1 &0 &1 &0 &0 &1 \end{pmatrix} \cdot \begin{pmatrix} 0 \\ 1 \\ 1 \\ 1 \\ 0 \\ 0 \\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\ 1 \\ 1 \end{pmatrix} = \underline{s}^{\rm T} \hspace{0.05cm}.\]

Vergleicht man das Syndrom mit den Prüfgleichungen des Hamming–Codes, so erkennt man, dass

  • am wahrscheinlichsten das vierte Symbol (x4 = u4) des Codewortes verfälscht wurde,
  • der Codewortschätzer somit das Ergebnis z = (0, 1, 1, 0, 0, 0, 1) liefern wird.
  • die Entscheidung nur dann richtig ist, wenn bei der Übertragung nur ein Bit verfälscht wurde.

Nachfolgend sind die erforderlichen Korrekturen für den (7, 4, 3)–Hamming–Code angegeben, die sich aus dem errechneten Syndrom s entsprechend den Spalten der Prüfmatrix ergeben:

\[\underline{s} \hspace{-0.15cm} = \hspace{-0.15cm} (0, 0, 0) \hspace{0.10cm} \Rightarrow\hspace{0.10cm}{\rm keine\hspace{0.15cm} Korrektur}\hspace{0.05cm};\hspace{0.4cm}\underline{s} = (1, 0, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm}p_1{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\] \[\underline{s} \hspace{-0.15cm} = \hspace{-0.15cm}(0, 0, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} p_3{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 0, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_1{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\] \[\underline{s} \hspace{-0.15cm} = \hspace{-0.15cm}(0, 1, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} p_2{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 1, 0)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_3{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\]

\[\underline{s} \hspace{-0.15cm} = \hspace{-0.15cm}(0, 1, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_4{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm};\hspace{0.82cm}\underline{s} = (1, 1, 1)\hspace{0.10cm} \Rightarrow\hspace{0.10cm} u_2{\rm \hspace{0.15cm} invertieren}\hspace{0.05cm}. \]