Difference between revisions of "Channel Coding/The Basics of Product Codes"

From LNTwww
Line 8: Line 8:
 
== Grundstruktur eines Produktcodes ==
 
== Grundstruktur eines Produktcodes ==
 
<br>
 
<br>
Die Grafik zeigt den prinzipiellen Aufbau von Produktcodes, die bereits 1954 von [https://de.wikipedia.org/wiki/Peter_Elias Peter Elias] eingeführt wurden.  
+
Die Grafik zeigt den prinzipiellen Aufbau von Produktcodes, die bereits 1954 von&nbsp; [https://de.wikipedia.org/wiki/Peter_Elias Peter Elias]&nbsp; eingeführt wurden. Der hier dargestellte&nbsp; '''zweidimensionale Produktcode'''&nbsp; $\mathcal{C} = \mathcal{C}_1 &times; \mathcal{C}_2$&nbsp; basiert auf den beiden linearen und binären Blockcodes mit den Parametern&nbsp; $(n_1, \ k_1)$&nbsp; bzw.&nbsp; $(n_2, \ k_2)$. Die Codewortlänge ist&nbsp; $n = n_1 \cdot n_2$.  
[[File:P ID3000 KC T 4 2 S1 v1.png|right|frame|Grundstruktur eines Produktcodes|class=fit]]
+
 
<br><br><br><br>Der hier dargestellte '''zweidimensionale Produktcode''' $\mathcal{C} = \mathcal{C}_1 &times; \mathcal{C}_2$ basiert auf den beiden linearen und binären Blockcodes mit den Parametern $(n_1, \ k_1)$ bzw. $(n_2, \ k_2)$. Die Codewortlänge ist $n = n_1 \cdot n_2$.  
+
[[File:P ID3000 KC T 4 2 S1 v1.png|center|frame|Grundstruktur eines Produktcodes|class=fit]]
<br clear=all>
+
 
Diese $n$ Codebits lassen sich wie folgt gruppieren:
+
Diese&nbsp; $n$&nbsp; Codebits lassen sich wie folgt gruppieren:
*Die $k = k_1 \cdot k_2$ Informationsbits sind in der $k_2 &times; k_1$&ndash;Matrix $\mathbf{U}$ angeordnet. Die Coderate ist gleich dem Produkt der Coderaten der beiden Basiscodes:  
+
*Die&nbsp; $k = k_1 \cdot k_2$&nbsp; Informationsbits sind in der&nbsp; $k_2 &times; k_1$&ndash;Matrix&nbsp; $\mathbf{U}$&nbsp; angeordnet. Die Coderate ist gleich dem Produkt der Coderaten der beiden Basiscodes:  
 
:$$R = k/n = (k_1/n_1) \cdot (k_2/n_2) = R_1 \cdot R_2.$$
 
:$$R = k/n = (k_1/n_1) \cdot (k_2/n_2) = R_1 \cdot R_2.$$
  
*Die rechte obere Matrix $\mathbf{P}^{(1)}$ mit der Dimension $k_2 &times; m_1$ beinhaltet die Prüfbits (englisch: <i>Parity</i>) hinsichtlich des Codes $\mathcal{C}_1$. In jeder der $k_2$ Zeilen werden zu den $k_1$ Informationsbits $m_1 = n_1 \, &ndash;k_1$ Prüfbits hinzugefügt, wie in einem Kapitel am Beispiel der  [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Hamming.E2.80.93Codes_.282.29|Hamming&ndash;Codes]] beschrieben wurde.<br>
+
*Die rechte obere Matrix&nbsp; $\mathbf{P}^{(1)}$&nbsp; mit der Dimension&nbsp; $k_2 &times; m_1$&nbsp; beinhaltet die Prüfbits&nbsp; (englisch: &nbsp; <i>Parity</i>) hinsichtlich des Codes&nbsp; $\mathcal{C}_1$. In jeder der&nbsp; $k_2$&nbsp; Zeilen werden zu den&nbsp; $k_1$ Informationsbits&nbsp; $m_1 = n_1 - k_1$&nbsp; Prüfbits hinzugefügt, wie in einem früheren Kapitel am Beispiel der&nbsp; [[Kanalcodierung/Beispiele_bin%C3%A4rer_Blockcodes#Hamming.E2.80.93Codes_.282.29|Hamming&ndash;Codes]]&nbsp; beschrieben wurde.<br>
  
*Die linke untere Matrix $\mathbf{P}^{(2)}$ der Dimension $m_2 &times; k_1$ beinhaltet die Prüfbits für den zweiten Komponentencodes $\mathcal{C}_2$. Hier erfolgt die Codierung (und auch die Decodierung) zeilenweise: In jeder der $k_1$ Spalten werden die $k_2$ Informationsbits noch um $m_2 = n_2 \, &ndash;k_2$ Prüfbits ergänzt.<br>
+
*Die linke untere Matrix&nbsp; $\mathbf{P}^{(2)}$&nbsp; der Dimension&nbsp; $m_2 &times; k_1$&nbsp; beinhaltet die Prüfbits für den zweiten Komponentencodes&nbsp; $\mathcal{C}_2$. Hier erfolgt die Codierung (und auch die Decodierung) zeilenweise: &nbsp; In jeder der&nbsp; $k_1$&nbsp; Spalten werden die&nbsp; $k_2$&nbsp; Informationsbits noch um&nbsp; $m_2 = n_2 -k_2$&nbsp; Prüfbits ergänzt.<br>
  
*Die $m_2 &times; m_1$&ndash;Matrix $\mathbf{P}^{(12)}$ rechts unten bezeichnet man als <i>Checks&ndash;on&ndash;Checks</i>. Hier werden die vorher erzeugten Parity&ndash;Matrizen $\mathbf{P}^{(1)}$ und $\mathbf{P}^{(2)}$ entsprechend den Prüfgleichungen verknüpft.<br><br>
+
*Die&nbsp; $m_2 &times; m_1$&ndash;Matrix&nbsp; $\mathbf{P}^{(12)}$&nbsp; rechts unten bezeichnet man als&nbsp; <i>Checks&ndash;on&ndash;Checks</i>. Hier werden die beiden vorher erzeugten Parity&ndash;Matrizen&nbsp; $\mathbf{P}^{(1)}$&nbsp; und&nbsp; $\mathbf{P}^{(2)}$&nbsp; entsprechend den Prüfgleichungen verknüpft.<br><br>
  
 
{{BlaueBox|TEXT=   
 
{{BlaueBox|TEXT=   
 
$\text{Fazit:}$&nbsp;  Alle Produktcodes entsprechend obiger Grafik weisen folgende Eigenschaften auf:
 
$\text{Fazit:}$&nbsp;  Alle Produktcodes entsprechend obiger Grafik weisen folgende Eigenschaften auf:
*Bei linearen Komponentencodes $\mathcal{C}_1$ und $\mathcal{C}_2$ ist auch der Produktcode $\mathcal{C} = \mathcal{C}_1 &times; \mathcal{C}_2$ linear.<br>
+
*Bei linearen Komponentencodes&nbsp; $\mathcal{C}_1$&nbsp; und&nbsp; $\mathcal{C}_2$&nbsp; ist auch der Produktcode&nbsp; $\mathcal{C} = \mathcal{C}_1 &times; \mathcal{C}_2$&nbsp; linear.<br>
  
*Jede Zeile von $\mathcal{C}$ gibt ein Codewort von $\mathcal{C}_1$ wieder und jede Spalte ein Codewort von $\mathcal{C}_2$.<br>
+
*Jede Zeile von&nbsp; $\mathcal{C}$&nbsp; gibt ein Codewort von&nbsp; $\mathcal{C}_1$&nbsp; wieder und jede Spalte ein Codewort von&nbsp; $\mathcal{C}_2$.<br>
  
*Die Summe zweier Zeilen ergibt aufgrund der Linearität wieder ein Codewort von $\mathcal{C}_1$.<br>
+
*Die Summe zweier Zeilen ergibt aufgrund der Linearität wieder ein Codewort von&nbsp; $\mathcal{C}_1$.<br>
  
*Ebenso ergibt die Summe zweier Spalten ein gültiges Codewort von $\mathcal{C}_2$.<br>
+
*Ebenso ergibt die Summe zweier Spalten ein gültiges Codewort von&nbsp; $\mathcal{C}_2$.<br>
  
*Jeder Produktcodes beinhaltet auch das Nullwort $\underline{0}$ (ein Vektor mit $n$ Nullen).<br>
+
*Jeder Produktcodes beinhaltet auch das Nullwort&nbsp; $\underline{0}$&nbsp; (ein Vektor mit&nbsp; $n$&nbsp; Nullen).<br>
  
*Die minimale Distanz von $C$ ist $d_{\rm min} = d_1 \cdot d_2$, wobei $d_i$ die minimale Distanz von $\mathcal{C}_i$ angibt.}}
+
*Die minimale Distanz von&nbsp; $C$&nbsp; ist&nbsp; $d_{\rm min} = d_1 \cdot d_2$, wobei&nbsp; $d_i$&nbsp; die minimale Distanz von&nbsp; $\mathcal{C}_i$&nbsp; angibt.}}
  
 
== Iterative Syndromdecodierung von Produktcodes ==
 
== Iterative Syndromdecodierung von Produktcodes ==
 
<br>
 
<br>
Wir betrachten nun den Fall, dass ein Produktcode mit Matrix $\mathbf{X}$ über einen Binärkanal übertragen wird. Die Empfangsmatrix sei $\mathbf{Y} = \mathbf{X} + \mathbf{E}$, wobei $\mathbf{E}$ die Fehlermatrix bezeichnet. Alle Elemente der Matrizen $\mathbf{X}, \ \mathbf{E}$ und $\mathbf{Y}$ seien binär, also $0$ oder $1$.<br>
+
Wir betrachten nun den Fall, dass ein Produktcode mit Matrix&nbsp; $\mathbf{X}$&nbsp; über einen Binärkanal übertragen wird. Die Empfangsmatrix sei&nbsp; $\mathbf{Y} = \mathbf{X} + \mathbf{E}$, wobei&nbsp; $\mathbf{E}$&nbsp; die Fehlermatrix bezeichnet. Alle Elemente der Matrizen&nbsp; $\mathbf{X}, \ \mathbf{E}$&nbsp; und&nbsp; $\mathbf{Y}$ seien binär, also&nbsp; $0$&nbsp; oder&nbsp; $1$.<br>
 
 
Für die Decodierung der beiden Komponentencodes bietet sich die Syndromdecodierung entsprechend dem Kapitel [[Kanalcodierung/Decodierung_linearer_Blockcodes#Blockschaltbild_und_Voraussetzungen| Decodierung linearer Blockcodes]] an. Im zweidimensionalen Fall bedeutet dies:
 
*Man decodiert zunächst die $n_2$ Zeilen der Empfangsmatrix $\mathbf{Y}$, basierend auf der Prüfmatrix $\mathbf{H}_1$ des Komponentencodes $\mathcal{C}_1$. Eine Möglichkeit ist die Syndromdecodierung.<br>
 
 
 
*Dazu bildet man jeweils das sogenannte Syndrom $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$, wobei der Vektor $\underline{y}$ der Länge $n_1$ die aktuelle Zeile von $\mathbf{Y}$ angibt und &bdquo;T&rdquo; für &bdquo;transponiert&rdquo; steht.<br>
 
  
*Entsprechend dem berechneten $\underline{s}_{\mu}$ (mit $0 &#8804; \mu < 2^{n_1 \, &ndash;k_1}$) findet man dann in einer vorbereiteten Syndromtabelle das zugehörige wahrscheinliche Fehlermuster $\underline{e} = \underline{e}_{\mu}$ .<br>
+
Für die Decodierung der beiden Komponentencodes bietet sich die Syndromdecodierung entsprechend dem Kapitel&nbsp; [[Kanalcodierung/Decodierung_linearer_Blockcodes#Blockschaltbild_und_Voraussetzungen| Decodierung linearer Blockcodes]]&nbsp; an.  
  
*Bei nur wenigen Fehlern innerhalb der Zeile stimmt dann $\underline{y} + \underline{e}$ mit dem gesendeten Zeilenvektor $\underline{x}$ überein. Sind zu viele Fehler aufgetreten, so kommt es allerdings zu Fehlkorrekturen.<br>
+
Im zweidimensionalen Fall bedeutet dies:
 +
*Man decodiert zunächst die&nbsp; $n_2$&nbsp; Zeilen der Empfangsmatrix&nbsp; $\mathbf{Y}$, basierend auf der Prüfmatrix&nbsp; $\mathbf{H}_1$&nbsp; des Komponentencodes&nbsp; $\mathcal{C}_1$. Eine Möglichkeit hierfür ist die Syndromdecodierung.<br>
  
*Anschließend syndromdecodiert man die $n_1$ Spalten der (korrigierten) Empfangsmatrix $\mathbf{Y}'$, diesmal basierend auf der (transponierten) Prüfmatrix $\mathbf{H}_2^{\rm T}$ des Komponentencodes $\mathcal{C}_2$.<br>
+
*Dazu bildet man jeweils das sogenannte Syndrom&nbsp; $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$, wobei der Vektor&nbsp; $\underline{y}$&nbsp; der Länge&nbsp; $n_1$&nbsp; die aktuelle Zeile von&nbsp; $\mathbf{Y}$&nbsp; angibt und &bdquo;T&rdquo; für &bdquo;transponiert&rdquo; steht. Entsprechend dem berechneten&nbsp; $\underline{s}_{\mu}$&nbsp; $($mit&nbsp; $0 &#8804; \mu < 2^{n_1 -k_1})$&nbsp; findet man in einer vorbereiteten Syndromtabelle das zugehörige wahrscheinliche Fehlermuster&nbsp; $\underline{e} = \underline{e}_{\mu}$.<br>
  
*Hierzu bildet man das Syndrom $\underline{s} = \underline{y}' \cdot \mathbf{H}_2^{\rm T}$, wobei der Vektor $\underline{y}'$ der Länge $n_2$ die betrachtete Spalte von $\mathbf{Y}'$ bezeichnet.<br>
+
*Bei nur wenigen Fehlern innerhalb der Zeile stimmt dann&nbsp; $\underline{y} + \underline{e}$&nbsp; mit dem gesendeten Zeilenvektor&nbsp; $\underline{x}$&nbsp; überein. Sind zu viele Fehler aufgetreten, so kommt es allerdings zu Fehlkorrekturen.<br>
  
*Aus einer zweiten Syndromtabelle (gültig für  den Code $\mathcal{C}_2$) findet man für das berechnete $\underline{s}_{\mu}$ (mit $0 &#8804; \mu < 2^{n_2 \, &ndash;k_2}$) das wahrscheinliche Fehlermuster $\underline{e} = \underline{e}_{\mu}$ der bearbeiteten Spalte.<br>
+
*Anschließend &bdquo;syndromdecodiert&rdquo; man die&nbsp; $n_1$&nbsp; Spalten der (korrigierten) Empfangsmatrix&nbsp; $\mathbf{Y}\hspace{0.03cm}'$, diesmal basierend auf der (transponierten) Prüfmatrix&nbsp; $\mathbf{H}_2^{\rm T}$&nbsp; des Komponentencodes&nbsp; $\mathcal{C}_2$. Hierzu bildet man das Syndrom&nbsp; $\underline{s} = \underline{y}\hspace{0.03cm}' \cdot \mathbf{H}_2^{\rm T}$, wobei der Vektor&nbsp; $\underline{y}\hspace{0.03cm}'$&nbsp; der Länge&nbsp; $n_2$&nbsp; die betrachtete Spalte von&nbsp; $\mathbf{Y}\hspace{0.03cm}'$&nbsp; bezeichnet.<br>
  
*Nach Korrektur aller Spalten liegt die Marix $\mathbf{Y}$ vor. Nun kann man wieder eine Zeilen&ndash; und anschließend eine Spaltendecodierung vornehmen &nbsp;&#8658;&nbsp; zweite Iteration, und so weiter, und so fort.<br><br>
+
*Aus einer zweiten Syndromtabelle $($gültig für  den Code&nbsp; $\mathcal{C}_2)$&nbsp; findet man für das berechnete&nbsp; $\underline{s}_{\mu}$&nbsp; $($mit&nbsp; $0 &#8804; \mu < 2^{n_2 -k_2})$&nbsp; das wahrscheinliche Fehlermuster $\underline{e} = \underline{e}_{\mu}$ der bearbeiteten Spalte. Nach Korrektur aller Spalten liegt die Marix&nbsp; $\mathbf{Y}$&nbsp; vor. Nun kann man wieder eine Zeilen&ndash; und anschließend eine Spaltendecodierung vornehmen &nbsp; &#8658; &nbsp; zweite Iteration, und so weiter, und so fort.<br><br>
  
 
{{GraueBox|TEXT=   
 
{{GraueBox|TEXT=   
$\text{Beispiel 1:}$&nbsp;  Zur Verdeutlichung des Decodieralgorithmuses  betrachten wir wieder den $(42, 12)$ Produktcode, basierend auf
+
$\text{Beispiel 1:}$&nbsp;  Zur Verdeutlichung des Decodieralgorithmuses  betrachten wir wieder den&nbsp; $(42, 12)$ Produktcode, basierend auf
*dem Hammingcode $(7, 4, 3)$ &nbsp; &#8658; &nbsp; Code $\mathcal{C}_1$,<br>
+
*dem Hammingcode&nbsp; $\text{HC (7, 4, 3)}$ &nbsp; &#8658; &nbsp; Code&nbsp; $\mathcal{C}_1$,<br>
  
*dem verkürzten Hammingcode $(6, 3, 3)$ &nbsp;&#8658;&nbsp; Code $\mathcal{C}_2$.<br>
+
*dem verkürzten Hammingcode&nbsp; $\text{HC (6, 3, 3)}$ &nbsp; &#8658; &nbsp; Code&nbsp;  $\mathcal{C}_2$.<br>
  
  
Die linke Grafik zeigt die Empfangsmatrix $\mathbf{Y}$, Aus Darstellungsgründen wurde die Codermatrix $\mathbf{X}$ zu einer $6 &times; 7$&ndash;Nullmatrix gewählt, so dass die neun Einsen in $\mathbf{Y}$ gleichzeitig Übertragungsfehler darstellen.<br>
+
Die linke Grafik zeigt die Empfangsmatrix&nbsp; $\mathbf{Y}$. Aus Darstellungsgründen wurde die Codermatrix&nbsp; $\mathbf{X}$&nbsp; zu einer&nbsp; $6 &times; 7$&ndash;Nullmatrix gewählt, so dass die neun Einsen in&nbsp; $\mathbf{Y}$&nbsp; gleichzeitig Übertragungsfehler darstellen.<br>
[[File:P ID3014 KC T 4 2 S2a v1.png|right|frame|Zur Syndromdecodierung des $(42, 12)$–Produktcodes|class=fit]]
+
[[File:P ID3014 KC T 4 2 S2a v1.png|right|frame|Zur Syndromdecodierung des&nbsp; $(42, 12)$–Produktcodes|class=fit]]
  
<br>Die <b>zeilenweise Syndromdecodierung</b> geschieht über das Syndrom $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$
+
Die&nbsp; <b>zeilenweise Syndromdecodierung</b>&nbsp; geschieht über das Syndrom&nbsp; $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$&nbsp; mit
$$\text{mit} \hspace{0.5cm} \boldsymbol{\rm H}_1^{\rm T} =  
+
:$$\boldsymbol{\rm H}_1^{\rm T} =  
 
   \begin{pmatrix}
 
   \begin{pmatrix}
 
1 &0 &1 \\
 
1 &0 &1 \\
Line 78: Line 74:
 
0 &0 &1
 
0 &0 &1
 
\end{pmatrix}  \hspace{0.05cm}. $$
 
\end{pmatrix}  \hspace{0.05cm}. $$
 
+
<br clear=all>
 
+
Im Einzelnen:
Im Einzelnen:  
+
[[File:P ID3015 KC T 4 2 S2b v1.png|right|frame|Syndromtabelle für den Code $\mathcal{C}_1$]]
*<b>Zeile 1</b> &nbsp;&#8658;&nbsp; Einzelfehlerkorrektur ist erfolgreich (ebenso in den Zeilen 3, 4 und 6):  
+
*<b>Zeile 1</b> &nbsp;&#8658;&nbsp; Einzelfehlerkorrektur ist erfolgreich (ebenso in den Zeilen 3,&nbsp; 4 und 6):  
[[File:P ID3015 KC T 4 2 S2b v1.png|right|frame|Syndromtabelle für den Code $\mathcal{C}_1$]]
 
  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
Line 92: Line 87:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
*<b>Zeile 2</b> &nbsp;&#8658;&nbsp; Fehlkorrektur bezüglich Bit 5:
+
*<b>Zeile 2</b> &nbsp;(beinhaltet zwei Fehler) &nbsp; &#8658; &nbsp; Fehlkorrektur bezüglich Bit 5:
  
 
::<math>\underline{s} = \left ( 1, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
 
::<math>\underline{s} = \left ( 1, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
Line 102: Line 97:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
*<b>Zeile 5</b> &nbsp;&#8658;&nbsp; Fehlkorrektur bezüglich Bit 3:
+
*<b>Zeile 5</b> &nbsp;(beinhaltet ebenfalls zwei Fehler) &nbsp;&#8658;&nbsp; Fehlkorrektur bezüglich Bit 3:
  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T}  
Line 112: Line 107:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
Die <b>spaltenweisen Syndromdecodierung</b> entfernt alle Einzelfehler in den Spalten 1, 2, 3, 4, 6 und 7.  
+
Die <b>spaltenweisen Syndromdecodierung</b> entfernt alle Einzelfehler in den Spalten&nbsp; 1,&nbsp; 2,&nbsp; 3,&nbsp; 4&nbsp; und&nbsp; 7.  
 
[[File:P ID3019 KC T 4 2 S2c v1.png|right|frame|Syndromtabelle für den Code $\mathcal{C}_2$]]
 
[[File:P ID3019 KC T 4 2 S2c v1.png|right|frame|Syndromtabelle für den Code $\mathcal{C}_2$]]
*<b>Spalte 5</b> &nbsp;&#8658;&nbsp; Fehlkorrektur bezüglich Bit 4:
+
*<b>Spalte 5</b> &nbsp;(beinhaltet zwei Fehler) &nbsp; &#8658; &nbsp; Fehlkorrektur bezüglich Bit 4:
  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_2^{\rm T}  
 
::<math>\underline{s} = \left ( 0, \hspace{0.02cm} 1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_2^{\rm T}  
Line 131: Line 126:
 
\hspace{0.05cm}.</math>
 
\hspace{0.05cm}.</math>
  
Die verbliebenen drei Fehler werden durch zeilenweise Decodierung der <b>zweiten Iterationsschleife</b>  korrigiert.<br>
+
Die verbliebenen drei Fehler werden durch zeilenweise Decodierung der&nbsp; <b>zweiten Iterationsschleife</b>&nbsp; korrigiert.<br>
  
Ob alle Fehler eines Blockes korrigierbar sind, hängt vom Fehlermuster ab. <br>Hier verweisen wir auf die [[Aufgabe 4.7]].}}<br>
+
Ob alle Fehler eines Blockes korrigierbar sind, hängt vom Fehlermuster ab. Hier verweisen wir auf die&nbsp; [[Aufgaben:Aufgabe_4.7:_Decodierung_von_Produktcodes|Aufgabe 4.7]].}}<br>
  
 
== Leistungsfähigkeit der Produktcodes ==
 
== Leistungsfähigkeit der Produktcodes ==
 
<br>
 
<br>
Die 1954 eingeführten <i>Produktcodes</i> waren die ersten Codes, die auf rekursiven Konstruktionsregeln basierten und somit grundsätzlich für die iterative Decodierung geeignet waren. Der Erfinder Peter Elias hat sich diesbezüglich zwar nicht geäußert, aber in den letzten zwanzig Jahren hat dieser Aspekt und die gleichzeitige Verfügbarkeit schneller Prozessoren dazu beigetragen, dass inzwischen auch Produktcodes in realen Kommunikationssystemen eingesetzt werden, zum Beispiel  
+
Die 1954 eingeführten&nbsp; <i>Produktcodes</i>&nbsp; waren die ersten Codes, die auf rekursiven Konstruktionsregeln basierten und somit grundsätzlich für die iterative Decodierung geeignet waren. Der Erfinder Peter Elias hat sich diesbezüglich zwar nicht geäußert, aber in den letzten zwanzig Jahren hat dieser Aspekt und die gleichzeitige Verfügbarkeit schneller Prozessoren dazu beigetragen, dass inzwischen auch Produktcodes in realen Kommunikationssystemen eingesetzt werden, zum Beispiel  
 
*beim Fehlerschutz von Speichermedien, und  
 
*beim Fehlerschutz von Speichermedien, und  
 
*bei Glasfasersystemen mit sehr hoher Datenrate.<br>
 
*bei Glasfasersystemen mit sehr hoher Datenrate.<br>
  
  
Meist verwendet man sehr lange Produktcodes (großes $n = n_1 \cdot n_2$) mit folgender Konsequenz:
+
Meist verwendet man sehr lange Produktcodes&nbsp; $($großes&nbsp; $n = n_1 \cdot n_2)$&nbsp; mit folgender Konsequenz:
*Aus Aufwandsgründen ist hier die [[Kanalcodierung/Klassifizierung_von_Signalen#MAP.E2.80.93_und_ML.E2.80.93Kriterium_.282.29| Maximum&ndash;Likelihood&ndash;Decodierung auf Blockebene]] für die Komponentencodes $\mathcal{C}_1$ und $\mathcal{C}_2$ nicht anwendbar, auch nicht die [[Kanalcodierung/Decodierung_linearer_Blockcodes#Prinzip_der_Syndromdecodierung| Syndromdecodierung]], die ja eine Realisierungsform der ML&ndash;Decodierung darstellt.<br>
+
*Aus Aufwandsgründen ist hier die&nbsp; [[Kanalcodierung/Klassifizierung_von_Signalen#MAP.E2.80.93_und_ML.E2.80.93Kriterium_.282.29| Maximum&ndash;Likelihood&ndash;Decodierung auf Blockebene]]&nbsp; für die Komponentencodes&nbsp; $\mathcal{C}_1$&nbsp; und&nbsp; $\mathcal{C}_2$&nbsp; nicht anwendbar, auch nicht die&nbsp; [[Kanalcodierung/Decodierung_linearer_Blockcodes#Prinzip_der_Syndromdecodierung| Syndromdecodierung]], die ja eine Realisierungsform der ML&ndash;Decodierung darstellt.<br>
  
*Anwendbar ist dagegen auch bei großem $n$ die [[Kanalcodierung/Soft–in_Soft–out_Decoder#Symbolweise_Soft.E2.80.93in_Soft.E2.80.93out_Decodierung|iterative symbolweise MAP&ndash;Decodierung]]. Der Austausch von extrinsischer und Apriori&ndash;Information geschieht hier zwischen den beiden Komponentencodes. Genaueres hierüber findet man in [Liv15]<ref name='Liv15'>Liva, G.: ''Channels Codes for Iterative Decoding.'' Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.</ref>.<br>
+
*Anwendbar ist dagegen auch bei großem&nbsp; $n$&nbsp; die&nbsp; [[Kanalcodierung/Soft–in_Soft–out_Decoder#Symbolweise_Soft.E2.80.93in_Soft.E2.80.93out_Decodierung|iterative symbolweise MAP&ndash;Decodierung]]. Der Austausch von extrinsischer und Apriori&ndash;Information geschieht hier zwischen den beiden Komponentencodes. Genaueres hierüber findet man in&nbsp; [Liv15]<ref name='Liv15'>Liva, G.: ''Channels Codes for Iterative Decoding.'' Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.</ref>.<br>
  
Die Grafik zeigt für einen $(1024, 676)$&ndash;Produktcode, basierend auf dem <i>Extended Hammingcode</i> ${\rm eHC} \ (32, 26)$ als Komponentencodes,  
+
 
*links die AWGN&ndash;Bitfehlerwahrscheinlichkeit in Abhängigkeit der Iterationen $(I)$  
+
Die Grafik zeigt für einen&nbsp; $(1024, 676)$&ndash;Produktcode, basierend auf dem&nbsp; <i>Extended Hammingcode</i>&nbsp; ${\rm eHC} \ (32, 26)$&nbsp; als Komponentencodes,  
 +
*links die AWGN&ndash;Bitfehlerwahrscheinlichkeit in Abhängigkeit der Iterationen&nbsp; $(I)$  
 
*rechts die  Fehlerwahrscheinlichkeit der Blöcke (bzw. Codeworte).  
 
*rechts die  Fehlerwahrscheinlichkeit der Blöcke (bzw. Codeworte).  
  
[[File:P ID3020 KC T 4 2 S3 v4.png|center|frame|Bit– und Blockfehlerwahrscheinlichkeit eines $(1024, 676)$–Produktcodes bei AWGN|class=fit]]
+
 
 +
[[File:P ID3020 KC T 4 2 S3 v4.png|center|frame|Bit– und Blockfehlerwahrscheinlichkeit eines&nbsp; $(1024, 676)$–Produktcodes bei AWGN|class=fit]]
  
 
Hier noch einige ergänzende Bemerkungen:
 
Hier noch einige ergänzende Bemerkungen:
*Die Coderate beträgt $R = R_1 \cdot R_2 = 0.66$, womit sich die Shannon&ndash;Grenze zu $10 \cdot {\rm lg} \, (E_{\rm B}/N_0) \approx 1 \ \rm dB$ ergibt.<br>
+
*Die Coderate beträgt&nbsp; $R = R_1 \cdot R_2 = 0.66$, womit sich die Shannon&ndash;Grenze zu&nbsp; $10 \cdot {\rm lg} \, (E_{\rm B}/N_0) \approx 1 \ \rm dB$&nbsp; ergibt.<br>
  
*In der linken Grafik erkennt man den Einfluss der Iterationen. Beim Übergang von $I = 1$ auf $I=2$ gewinnt man ca. $2 \ \rm dB$ (bei der Bitfehlerrate $10^{&ndash;5}$) und mit $I = 10$ ein weiteres $\rm dB$.  Weitere Iterationen lohnen sich nicht.<br>
+
*In der linken Grafik erkennt man den Einfluss der Iterationen. Beim Übergang von&nbsp; $I = 1$&nbsp; auf&nbsp; $I=2$&nbsp; gewinnt man ca.&nbsp; $2 \ \rm dB$ $($bei der Bitfehlerrate&nbsp; $10^{-5})$&nbsp; und mit&nbsp; $I = 10$&nbsp; ein weiteres $\rm dB$.  Weitere Iterationen lohnen sich nicht.<br>
  
*Alle im Kapitel [[Kanalcodierung/Schranken_f%C3%BCr_die_Blockfehlerwahrscheinlichkeit#Distanzspektrum_eines_linearen_Codes_.281.29| Schranken für die Blockfehlerwahrscheinlichkeit]] genannten Schranken können hier ebenfalls angewendet werden, so auch die in der rechten Grafik gestrichelt eingezeichnete <i>Truncated Union Bound</i>:
+
*Alle im Kapitel&nbsp; [[Kanalcodierung/Schranken_f%C3%BCr_die_Blockfehlerwahrscheinlichkeit#Distanzspektrum_eines_linearen_Codes_.281.29| Schranken für die Blockfehlerwahrscheinlichkeit]]&nbsp; genannten Schranken können hier ebenfalls angewendet werden, so auch die in der rechten Grafik gestrichelt eingezeichnete&nbsp; <i>Truncated Union Bound</i>:
  
 
::<math>{\rm Pr(Truncated\hspace{0.15cm}Union\hspace{0.15cm} Bound)}= W_{d_{\rm min}} \cdot {\rm Q} \left ( \sqrt{d_{\rm min} \cdot {2R \cdot E_{\rm B}}/{N_0}} \right )  
 
::<math>{\rm Pr(Truncated\hspace{0.15cm}Union\hspace{0.15cm} Bound)}= W_{d_{\rm min}} \cdot {\rm Q} \left ( \sqrt{d_{\rm min} \cdot {2R \cdot E_{\rm B}}/{N_0}} \right )  
 
  \hspace{0.05cm}.</math>
 
  \hspace{0.05cm}.</math>
  
*Die minimale Distanz beträgt $d_{\rm min} = d_1 \cdot d_2 = 4 \cdot 4 = 16$. Mit der Gewichtsfunktion des ${\rm eHC} \ (32, 26)$,
+
*Die minimale Distanz beträgt&nbsp; $d_{\rm min} = d_1 \cdot d_2 = 4 \cdot 4 = 16$. Mit der Gewichtsfunktion des&nbsp; ${\rm eHC} \ (32, 26)$,
  
 
::<math>W_{\rm eHC(32,\hspace{0.08cm}26)}(X) = 1 + 1240 \cdot X^{4}  
 
::<math>W_{\rm eHC(32,\hspace{0.08cm}26)}(X) = 1 + 1240 \cdot X^{4}  
Line 169: Line 166:
 
330460 \cdot X^{8} + ...\hspace{0.05cm} + X^{32},</math>
 
330460 \cdot X^{8} + ...\hspace{0.05cm} + X^{32},</math>
  
:erhält man für den Produktcode $W_{d, \ \rm min} = 1240^2 = 15\hspace{0.05cm}376\hspace{0.05cm}000$. Damit ist die obere Gleichung bestimmt, deren numerische Auswertung der rechten Grafik zugrundeliegt.<br>
+
:erhält man für den Produktcode&nbsp; $W_{d, \ \rm min} = 1240^2 = 15\hspace{0.05cm}376\hspace{0.05cm}000$. Damit ergibt sich die in der rechten Grafik dargestellte Fehlerwahrscheinlichkeit.<br>
  
 
== Aufgaben zum Kapitel==
 
== Aufgaben zum Kapitel==

Revision as of 18:00, 5 July 2019

Grundstruktur eines Produktcodes


Die Grafik zeigt den prinzipiellen Aufbau von Produktcodes, die bereits 1954 von  Peter Elias  eingeführt wurden. Der hier dargestellte  zweidimensionale Produktcode  $\mathcal{C} = \mathcal{C}_1 × \mathcal{C}_2$  basiert auf den beiden linearen und binären Blockcodes mit den Parametern  $(n_1, \ k_1)$  bzw.  $(n_2, \ k_2)$. Die Codewortlänge ist  $n = n_1 \cdot n_2$.

Grundstruktur eines Produktcodes

Diese  $n$  Codebits lassen sich wie folgt gruppieren:

  • Die  $k = k_1 \cdot k_2$  Informationsbits sind in der  $k_2 × k_1$–Matrix  $\mathbf{U}$  angeordnet. Die Coderate ist gleich dem Produkt der Coderaten der beiden Basiscodes:
$$R = k/n = (k_1/n_1) \cdot (k_2/n_2) = R_1 \cdot R_2.$$
  • Die rechte obere Matrix  $\mathbf{P}^{(1)}$  mit der Dimension  $k_2 × m_1$  beinhaltet die Prüfbits  (englisch:   Parity) hinsichtlich des Codes  $\mathcal{C}_1$. In jeder der  $k_2$  Zeilen werden zu den  $k_1$ Informationsbits  $m_1 = n_1 - k_1$  Prüfbits hinzugefügt, wie in einem früheren Kapitel am Beispiel der  Hamming–Codes  beschrieben wurde.
  • Die linke untere Matrix  $\mathbf{P}^{(2)}$  der Dimension  $m_2 × k_1$  beinhaltet die Prüfbits für den zweiten Komponentencodes  $\mathcal{C}_2$. Hier erfolgt die Codierung (und auch die Decodierung) zeilenweise:   In jeder der  $k_1$  Spalten werden die  $k_2$  Informationsbits noch um  $m_2 = n_2 -k_2$  Prüfbits ergänzt.
  • Die  $m_2 × m_1$–Matrix  $\mathbf{P}^{(12)}$  rechts unten bezeichnet man als  Checks–on–Checks. Hier werden die beiden vorher erzeugten Parity–Matrizen  $\mathbf{P}^{(1)}$  und  $\mathbf{P}^{(2)}$  entsprechend den Prüfgleichungen verknüpft.

$\text{Fazit:}$  Alle Produktcodes entsprechend obiger Grafik weisen folgende Eigenschaften auf:

  • Bei linearen Komponentencodes  $\mathcal{C}_1$  und  $\mathcal{C}_2$  ist auch der Produktcode  $\mathcal{C} = \mathcal{C}_1 × \mathcal{C}_2$  linear.
  • Jede Zeile von  $\mathcal{C}$  gibt ein Codewort von  $\mathcal{C}_1$  wieder und jede Spalte ein Codewort von  $\mathcal{C}_2$.
  • Die Summe zweier Zeilen ergibt aufgrund der Linearität wieder ein Codewort von  $\mathcal{C}_1$.
  • Ebenso ergibt die Summe zweier Spalten ein gültiges Codewort von  $\mathcal{C}_2$.
  • Jeder Produktcodes beinhaltet auch das Nullwort  $\underline{0}$  (ein Vektor mit  $n$  Nullen).
  • Die minimale Distanz von  $C$  ist  $d_{\rm min} = d_1 \cdot d_2$, wobei  $d_i$  die minimale Distanz von  $\mathcal{C}_i$  angibt.

Iterative Syndromdecodierung von Produktcodes


Wir betrachten nun den Fall, dass ein Produktcode mit Matrix  $\mathbf{X}$  über einen Binärkanal übertragen wird. Die Empfangsmatrix sei  $\mathbf{Y} = \mathbf{X} + \mathbf{E}$, wobei  $\mathbf{E}$  die Fehlermatrix bezeichnet. Alle Elemente der Matrizen  $\mathbf{X}, \ \mathbf{E}$  und  $\mathbf{Y}$ seien binär, also  $0$  oder  $1$.

Für die Decodierung der beiden Komponentencodes bietet sich die Syndromdecodierung entsprechend dem Kapitel  Decodierung linearer Blockcodes  an.

Im zweidimensionalen Fall bedeutet dies:

  • Man decodiert zunächst die  $n_2$  Zeilen der Empfangsmatrix  $\mathbf{Y}$, basierend auf der Prüfmatrix  $\mathbf{H}_1$  des Komponentencodes  $\mathcal{C}_1$. Eine Möglichkeit hierfür ist die Syndromdecodierung.
  • Dazu bildet man jeweils das sogenannte Syndrom  $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$, wobei der Vektor  $\underline{y}$  der Länge  $n_1$  die aktuelle Zeile von  $\mathbf{Y}$  angibt und „T” für „transponiert” steht. Entsprechend dem berechneten  $\underline{s}_{\mu}$  $($mit  $0 ≤ \mu < 2^{n_1 -k_1})$  findet man in einer vorbereiteten Syndromtabelle das zugehörige wahrscheinliche Fehlermuster  $\underline{e} = \underline{e}_{\mu}$.
  • Bei nur wenigen Fehlern innerhalb der Zeile stimmt dann  $\underline{y} + \underline{e}$  mit dem gesendeten Zeilenvektor  $\underline{x}$  überein. Sind zu viele Fehler aufgetreten, so kommt es allerdings zu Fehlkorrekturen.
  • Anschließend „syndromdecodiert” man die  $n_1$  Spalten der (korrigierten) Empfangsmatrix  $\mathbf{Y}\hspace{0.03cm}'$, diesmal basierend auf der (transponierten) Prüfmatrix  $\mathbf{H}_2^{\rm T}$  des Komponentencodes  $\mathcal{C}_2$. Hierzu bildet man das Syndrom  $\underline{s} = \underline{y}\hspace{0.03cm}' \cdot \mathbf{H}_2^{\rm T}$, wobei der Vektor  $\underline{y}\hspace{0.03cm}'$  der Länge  $n_2$  die betrachtete Spalte von  $\mathbf{Y}\hspace{0.03cm}'$  bezeichnet.
  • Aus einer zweiten Syndromtabelle $($gültig für den Code  $\mathcal{C}_2)$  findet man für das berechnete  $\underline{s}_{\mu}$  $($mit  $0 ≤ \mu < 2^{n_2 -k_2})$  das wahrscheinliche Fehlermuster $\underline{e} = \underline{e}_{\mu}$ der bearbeiteten Spalte. Nach Korrektur aller Spalten liegt die Marix  $\mathbf{Y}$  vor. Nun kann man wieder eine Zeilen– und anschließend eine Spaltendecodierung vornehmen   ⇒   zweite Iteration, und so weiter, und so fort.

$\text{Beispiel 1:}$  Zur Verdeutlichung des Decodieralgorithmuses betrachten wir wieder den  $(42, 12)$ Produktcode, basierend auf

  • dem Hammingcode  $\text{HC (7, 4, 3)}$   ⇒   Code  $\mathcal{C}_1$,
  • dem verkürzten Hammingcode  $\text{HC (6, 3, 3)}$   ⇒   Code  $\mathcal{C}_2$.


Die linke Grafik zeigt die Empfangsmatrix  $\mathbf{Y}$. Aus Darstellungsgründen wurde die Codermatrix  $\mathbf{X}$  zu einer  $6 × 7$–Nullmatrix gewählt, so dass die neun Einsen in  $\mathbf{Y}$  gleichzeitig Übertragungsfehler darstellen.

Zur Syndromdecodierung des  $(42, 12)$–Produktcodes

Die  zeilenweise Syndromdecodierung  geschieht über das Syndrom  $\underline{s} = \underline{y} \cdot \mathbf{H}_1^{\rm T}$  mit

$$\boldsymbol{\rm H}_1^{\rm T} = \begin{pmatrix} 1 &0 &1 \\ 1 &1 &0 \\ 0 &1 &1 \\ 1 &1 &1 \\ 1 &0 &0 \\ 0 &1 &0 \\ 0 &0 &1 \end{pmatrix} \hspace{0.05cm}. $$


Im Einzelnen:

Syndromtabelle für den Code $\mathcal{C}_1$
  • Zeile 1  ⇒  Einzelfehlerkorrektur ist erfolgreich (ebenso in den Zeilen 3,  4 und 6):
\[\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T} \hspace{-0.05cm}= \left ( 0, \hspace{0.03cm} 1, \hspace{0.03cm}1 \right ) = \underline{s}_3\]
\[\Rightarrow \hspace{0.3cm} \underline{y} + \underline{e}_3 = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{0.05cm}.\]
  • Zeile 2  (beinhaltet zwei Fehler)   ⇒   Fehlkorrektur bezüglich Bit 5:
\[\underline{s} = \left ( 1, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T} \hspace{-0.05cm}= \left ( 1, \hspace{0.03cm} 0, \hspace{0.03cm}0 \right ) = \underline{s}_4\]
\[\Rightarrow \hspace{0.3cm} \underline{y} + \underline{e}_4 = \left ( 1, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}1 \right ) \hspace{0.05cm}.\]
  • Zeile 5  (beinhaltet ebenfalls zwei Fehler)  ⇒  Fehlkorrektur bezüglich Bit 3:
\[\underline{s} = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_1^{\rm T} \hspace{-0.05cm}= \left ( 0, \hspace{0.03cm} 1, \hspace{0.03cm}1 \right ) = \underline{s}_3\]
\[\Rightarrow \hspace{0.3cm} \underline{y} + \underline{e}_3 = \left ( 0, \hspace{0.02cm} 0, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}0, \hspace{0.02cm}0 \right ) \hspace{0.05cm}.\]

Die spaltenweisen Syndromdecodierung entfernt alle Einzelfehler in den Spalten  1,  2,  3,  4  und  7.

Syndromtabelle für den Code $\mathcal{C}_2$
  • Spalte 5  (beinhaltet zwei Fehler)   ⇒   Fehlkorrektur bezüglich Bit 4:
\[\underline{s} = \left ( 0, \hspace{0.02cm} 1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm}{ \boldsymbol{\rm H} }_2^{\rm T} \hspace{-0.05cm}= \left ( 0, \hspace{0.02cm} 1, \hspace{0.02cm}0, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}0 \right ) \hspace{-0.03cm}\cdot \hspace{-0.03cm} \begin{pmatrix} 1 &1 &0 \\ 1 &0 &1 \\ 0 &1 &1 \\ 1 &0 &0 \\ 0 &1 &0 \\ 0 &0 &1 \end{pmatrix} = \left ( 1, \hspace{0.03cm} 0, \hspace{0.03cm}0 \right ) = \underline{s}_4\]
\[\Rightarrow \hspace{0.3cm} \underline{y} + \underline{e}_4 = \left ( 0, \hspace{0.02cm} 1, \hspace{0.02cm}0, \hspace{0.02cm}1, \hspace{0.02cm}1, \hspace{0.02cm}0 \right ) \hspace{0.05cm}.\]

Die verbliebenen drei Fehler werden durch zeilenweise Decodierung der  zweiten Iterationsschleife  korrigiert.

Ob alle Fehler eines Blockes korrigierbar sind, hängt vom Fehlermuster ab. Hier verweisen wir auf die  Aufgabe 4.7.


Leistungsfähigkeit der Produktcodes


Die 1954 eingeführten  Produktcodes  waren die ersten Codes, die auf rekursiven Konstruktionsregeln basierten und somit grundsätzlich für die iterative Decodierung geeignet waren. Der Erfinder Peter Elias hat sich diesbezüglich zwar nicht geäußert, aber in den letzten zwanzig Jahren hat dieser Aspekt und die gleichzeitige Verfügbarkeit schneller Prozessoren dazu beigetragen, dass inzwischen auch Produktcodes in realen Kommunikationssystemen eingesetzt werden, zum Beispiel

  • beim Fehlerschutz von Speichermedien, und
  • bei Glasfasersystemen mit sehr hoher Datenrate.


Meist verwendet man sehr lange Produktcodes  $($großes  $n = n_1 \cdot n_2)$  mit folgender Konsequenz:

  • Anwendbar ist dagegen auch bei großem  $n$  die  iterative symbolweise MAP–Decodierung. Der Austausch von extrinsischer und Apriori–Information geschieht hier zwischen den beiden Komponentencodes. Genaueres hierüber findet man in  [Liv15][1].


Die Grafik zeigt für einen  $(1024, 676)$–Produktcode, basierend auf dem  Extended Hammingcode  ${\rm eHC} \ (32, 26)$  als Komponentencodes,

  • links die AWGN–Bitfehlerwahrscheinlichkeit in Abhängigkeit der Iterationen  $(I)$
  • rechts die Fehlerwahrscheinlichkeit der Blöcke (bzw. Codeworte).


Bit– und Blockfehlerwahrscheinlichkeit eines  $(1024, 676)$–Produktcodes bei AWGN

Hier noch einige ergänzende Bemerkungen:

  • Die Coderate beträgt  $R = R_1 \cdot R_2 = 0.66$, womit sich die Shannon–Grenze zu  $10 \cdot {\rm lg} \, (E_{\rm B}/N_0) \approx 1 \ \rm dB$  ergibt.
  • In der linken Grafik erkennt man den Einfluss der Iterationen. Beim Übergang von  $I = 1$  auf  $I=2$  gewinnt man ca.  $2 \ \rm dB$ $($bei der Bitfehlerrate  $10^{-5})$  und mit  $I = 10$  ein weiteres $\rm dB$. Weitere Iterationen lohnen sich nicht.
\[{\rm Pr(Truncated\hspace{0.15cm}Union\hspace{0.15cm} Bound)}= W_{d_{\rm min}} \cdot {\rm Q} \left ( \sqrt{d_{\rm min} \cdot {2R \cdot E_{\rm B}}/{N_0}} \right ) \hspace{0.05cm}.\]
  • Die minimale Distanz beträgt  $d_{\rm min} = d_1 \cdot d_2 = 4 \cdot 4 = 16$. Mit der Gewichtsfunktion des  ${\rm eHC} \ (32, 26)$,
\[W_{\rm eHC(32,\hspace{0.08cm}26)}(X) = 1 + 1240 \cdot X^{4} + 27776 \cdot X^{6}+ 330460 \cdot X^{8} + ...\hspace{0.05cm} + X^{32},\]
erhält man für den Produktcode  $W_{d, \ \rm min} = 1240^2 = 15\hspace{0.05cm}376\hspace{0.05cm}000$. Damit ergibt sich die in der rechten Grafik dargestellte Fehlerwahrscheinlichkeit.

Aufgaben zum Kapitel


Aufgabe 4.6: Generierung von Produktcodes

Aufgabe 4.6Z: Grundlagen der Produktcodes

Aufgabe 4.7: Decodierung von Produktcodes

Aufgabe 4.7Z: Zum Prinzip der Syndromdecodierung

Quellenverzeichnis

  1. Liva, G.: Channels Codes for Iterative Decoding. Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.