Inhaltsverzeichnis
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 C=C1×C2 basiert auf den beiden linearen und binären Blockcodes mit den Parametern (n1, k1) bzw. (n2, k2). Die Codewortlänge ist n=n1⋅n2.
Diese n Codebits lassen sich wie folgt gruppieren:
- Die k=k1⋅k2 Informationsbits sind in der k2×k1–Matrix U angeordnet. Die Coderate ist gleich dem Produkt der Coderaten der beiden Basiscodes:
- R=k/n=(k1/n1)⋅(k2/n2)=R1⋅R2.
- Die rechte obere Matrix P(1) mit der Dimension k2×m1 beinhaltet die Prüfbits (englisch: Parity) hinsichtlich des Codes C1. In jeder der k2 Zeilen werden zu den k1 Informationsbits m1=n1−k1 Prüfbits hinzugefügt, wie in einem früheren Kapitel am Beispiel der Hamming–Codes beschrieben wurde.
- Die linke untere Matrix P(2) der Dimension m2×k1 beinhaltet die Prüfbits für den zweiten Komponentencodes C2. Hier erfolgt die Codierung (und auch die Decodierung) zeilenweise: In jeder der k1 Spalten werden die k2 Informationsbits noch um m2=n2−k2 Prüfbits ergänzt.
- Die m2×m1–Matrix P(12) rechts unten bezeichnet man als Checks–on–Checks. Hier werden die beiden vorher erzeugten Parity–Matrizen P(1) und P(2) entsprechend den Prüfgleichungen verknüpft.
Fazit: Alle Produktcodes entsprechend obiger Grafik weisen folgende Eigenschaften auf:
- Bei linearen Komponentencodes C1 und C2 ist auch der Produktcode C=C1×C2 linear.
- Jede Zeile von C gibt ein Codewort von C1 wieder und jede Spalte ein Codewort von C2.
- Die Summe zweier Zeilen ergibt aufgrund der Linearität wieder ein Codewort von C1.
- Ebenso ergibt die Summe zweier Spalten ein gültiges Codewort von C2.
- Jeder Produktcodes beinhaltet auch das Nullwort 0_ (ein Vektor mit n Nullen).
- Die minimale Distanz von C ist dmin=d1⋅d2, wobei di die minimale Distanz von Ci angibt.
Iterative Syndromdecodierung von Produktcodes
Wir betrachten nun den Fall, dass ein Produktcode mit Matrix X über einen Binärkanal übertragen wird. Die Empfangsmatrix sei Y=X+E, wobei E die Fehlermatrix bezeichnet. Alle Elemente der Matrizen X, E und 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 n2 Zeilen der Empfangsmatrix Y, basierend auf der Prüfmatrix H1 des Komponentencodes C1. Eine Möglichkeit hierfür ist die Syndromdecodierung.
- Dazu bildet man jeweils das sogenannte Syndrom s_=y_⋅HT1, wobei der Vektor y_ der Länge n1 die aktuelle Zeile von Y angibt und „T” für „transponiert” steht. Entsprechend dem berechneten s_μ (mit 0≤μ<2n1−k1) findet man in einer vorbereiteten Syndromtabelle das zugehörige wahrscheinliche Fehlermuster e_=e_μ.
- Bei nur wenigen Fehlern innerhalb der Zeile stimmt dann y_+e_ mit dem gesendeten Zeilenvektor x_ überein. Sind zu viele Fehler aufgetreten, so kommt es allerdings zu Fehlkorrekturen.
- Anschließend „syndromdecodiert” man die n1 Spalten der (korrigierten) Empfangsmatrix Y′, diesmal basierend auf der (transponierten) Prüfmatrix HT2 des Komponentencodes C2. Hierzu bildet man das Syndrom s_=y_′⋅HT2, wobei der Vektor y_′ der Länge n2 die betrachtete Spalte von Y′ bezeichnet.
- Aus einer zweiten Syndromtabelle (gültig für den Code C2) findet man für das berechnete s_μ (mit 0≤μ<2n2−k2) das wahrscheinliche Fehlermuster e_=e_μ der bearbeiteten Spalte. Nach Korrektur aller Spalten liegt die Marix Y vor. Nun kann man wieder eine Zeilen– und anschließend eine Spaltendecodierung vornehmen ⇒ zweite Iteration, und so weiter, und so fort.
Beispiel 1: Zur Verdeutlichung des Decodieralgorithmuses betrachten wir wieder den (42,12) Produktcode, basierend auf
- dem Hammingcode HC (7, 4, 3) ⇒ Code C1,
- dem verkürzten Hammingcode HC (6, 3, 3) ⇒ Code C2.
Die linke Grafik zeigt die Empfangsmatrix Y. Aus Darstellungsgründen wurde die Codermatrix X zu einer 6×7–Nullmatrix gewählt, so dass die acht Einsen in Y gleichzeitig Übertragungsfehler darstellen.
Die zeilenweise Syndromdecodierung geschieht über das Syndrom s_=y_⋅HT1 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:
- 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.
- 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:
- Aus Aufwandsgründen ist hier die Maximum–Likelihood–Decodierung auf Blockebene für die Komponentencodes \mathcal{C}_1 und \mathcal{C}_2 nicht anwendbar, auch nicht die Syndromdecodierung, die ja eine Realisierungsform der ML–Decodierung darstellt.
- 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).
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.
- Alle im Kapitel Schranken für die Blockfehlerwahrscheinlichkeit genannten Schranken können hier ebenfalls angewendet werden, so auch die in der rechten Grafik gestrichelt eingezeichnete Truncated Union Bound:
- {\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
- ↑ Liva, G.: Channels Codes for Iterative Decoding. Vorlesungsmanuskript, Lehrstuhl für Nachrichtentechnik, TU München und DLR Oberpfaffenhofen, 2015.