Kanalcodierung/Fehlerkorrektur nach Reed–Solomon–Codierung: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
Zeile 511: Zeile 511:
 
== Schnelle Reed–Solomon–Decodierung ==
 
== Schnelle Reed–Solomon–Decodierung ==
 
<br>
 
<br>
Die Klasse der Reed&ndash;Solomon&ndash;Codes wurde bereits im Jahre 1960 durch die Veröffentlichung [RS60]<ref>Reed, I.S.; Solomon, G.: ''Polynomial Codes over Certain Finite Fields.'' J. Siam, Vol. 8, pp. 300–304, 1960.</ref> eingeführt. Ihre effiziente Decodierung war jedoch erst ein bis zwei Jahrzehnte später möglich.<br>
+
Die Klasse der Reed&ndash;Solomon&ndash;Codes wurde bereits im Jahre 1960 durch die Veröffentlichung [RS60]<ref name='RS60'>Reed, I.S.; Solomon, G.: ''Polynomial Codes over Certain Finite Fields.'' J. Siam, Vol. 8, pp. 300–304, 1960.</ref> eingeführt. Ihre effiziente Decodierung war jedoch erst ein bis zwei Jahrzehnte später möglich.<br>
  
Auf den letzten Seiten haben wir den so genannten Petersen&ndash;Algorithmus inklusive der Chien&ndash;Suche am Beispiel des RSC (7, 3, 5)<sub>8</sub> demonstriert, der bis zu <i>t</i> = 2 Fehler korrigieren kann. Im Mittelpunkt des Decodiervorgangs stand dabei das Aufstellen und Lösen der Schlüsselgleichung (englisch: <i>Error Locator Polynom</i>), wobei die Nullstellen eines Grad&ndash;2&ndash;Polynoms in GF(7) gefunden werden mussten. Sie konnten erkennen, dass diese algebraische Decodierung mit großem Aufwand verbunden ist.<br>
+
Auf den letzten Seiten haben wir den so genannten Petersen&ndash;Algorithmus inklusive der Chien&ndash;Suche am Beispiel des RSC (7, 3, 5)<sub>8</sub> demonstriert, der bis zu $t = 2$ Fehler korrigieren kann. Im Mittelpunkt des Decodiervorgangs stand dabei das Aufstellen und Lösen der Schlüsselgleichung (englisch: <i>Error Locator Polynom</i>), wobei die Nullstellen eines Grad&ndash;2&ndash;Polynoms im Körper $\rm GF(7)$ gefunden werden mussten. Sie konnten erkennen, dass diese algebraische Decodierung mit großem Aufwand verbunden ist.<br>
  
Bei den in Praxis eingesetzten Codes mit großer Codewortlänge <i>n</i> und hoher Korrekturfähigkeit <i>t</i> würde der Decodieraufwand explodieren, wenn nicht schnellere Decodieralgorithmen gefunden worden wären. So müssen beim Reed&ndash;Solomon&ndash;Code (255, 223, 33)<sub>256</sub>, der schon früh im ESA/NASA&ndash;Standard zur Satellitenübertragung genannt wurde, zur Decodierng eines einzigen Codewortes die bis zu <i>t</i> = 16 Nullstellen im GF(255) gefunden werden, und das auch noch in Echtzeit.<br>
+
Bei den in Praxis eingesetzten Codes mit großer Codewortlänge $n$ und hoher Korrekturfähigkeit $t$ würde der Decodieraufwand explodieren, wenn nicht schnellere Decodieralgorithmen gefunden worden wären. So müssen beim Reed&ndash;Solomon&ndash;Code RSC (255, 223, 33)<sub>256</sub>, der schon früh im ESA/NASA&ndash;Standard zur Satellitenübertragung genannt wurde, zur Decodierng eines einzigen Codewortes die bis zu $t = 16$ Nullstellen im Körper $\rm GF(255)$ gefunden werden, und das auch noch in Echtzeit.<br>
  
 
Ab Ende der 1960er Jahre haben sich viele Wissenschaftler um schnellere Decodieralgorithmen für  Reed&ndash;Solomon&ndash;Codes bemüht:
 
Ab Ende der 1960er Jahre haben sich viele Wissenschaftler um schnellere Decodieralgorithmen für  Reed&ndash;Solomon&ndash;Codes bemüht:
  
*Beim <span style="font-weight: bold;">Berlekamp&ndash;Massey&ndash;Algorithmus</span> (BMA) wird die Schlüsselgleichung <u><i>&Lambda;</i></u> &middot; <u><i>s</i></u><sup>T</sup> = 0 als rückgekoppeltes Schieberegister dargestellt, siehe zum Beispiel [Mas69]<ref>Massey, J.L.: ''Shift Register Synthesis and BCH Decoding.''. IEEE Trans. on Information Theory, vol. IT-15, pp. 122–127, Jan. 1969.</ref>, [Fri96]<ref>Friedrichs, B.: ''Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen.'' Berlin – Heidelberg: Springer, 1996.</ref> und [Bos98]<ref>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref>. Das Problem wird damit auf die Synthese eines autoregressiven Filters zurückgeführt. Dieser Algorithmus arbeitet wesentlich schneller als der (leichter durchschaubare) Petersen&ndash;Algorithmus.<br>
+
*Beim [https://de.wikipedia.org/wiki/Berlekamp-Massey-Algorithmus Berlekamp&ndash;Massey&ndash;Algorithmus] (BMA) wird die Schlüsselgleichung $\underline {\it \Lambda}  \cdot  \underline{s }^{\rm T} = 0$ als rückgekoppeltes Schieberegister dargestellt, siehe zum Beispiel [Mas69]<ref name ='Mas69'>Massey, J.L.: ''Shift Register Synthesis and BCH Decoding.''. IEEE Trans. on Information Theory, vol. IT-15, pp. 122–127, Jan. 1969.</ref>, [Fri96]<ref name ='Fri96'>Friedrichs, B.: ''Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen.'' Berlin – Heidelberg: Springer, 1996.</ref> und [Bos98]<ref name ='Bos98'>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref>. Das Problem wird damit auf die Synthese eines autoregressiven Filters zurückgeführt. Dieser Algorithmus arbeitet wesentlich schneller als der (leichter durchschaubare) Petersen&ndash;Algorithmus.<br>
  
*Etwas später wurde in [SK+75]<ref>Sugiyama, Y.; Kashara, M.; Hirasawa, S.; Namekawa, T.: ''A Method for Solving Key Equation for Decoding Goppa Codes.'' Information and Control, Vol. 27, pp. 87–99, 1975.</ref> ein Decodierverfahren vorgeschlagen, das auf dem <span style="font-weight: bold;">Euklidischen Algorithmus</span> basiert. Dieser liefert den größten gemeinsamen Teiler zweier ganzer Zahlen, was zur Decodierung genutzt wird. Der Euklidische Algorithmus ist vergleichbar schnell wie der BMA. Genauere Informationen finden Sie wieder in [Bos98]<ref>Bossert, M.: ''Kanalcodierung.'' Stuttgart: B. G. Teubner, 1998.</ref> und [Fri96]<ref>Friedrichs, B.: ''Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen.'' Berlin – Heidelberg: Springer, 1996.</ref>.<br>
+
*Etwas später wurde in [SK+75]<ref name='SK+75'>Sugiyama, Y.; Kashara, M.; Hirasawa, S.; Namekawa, T.: ''A Method for Solving Key Equation for Decoding Goppa Codes.'' Information and Control, Vol. 27, pp. 87–99, 1975.</ref> ein Decodierverfahren vorgeschlagen, das auf dem [https://de.wikipedia.org/wiki/Euklidischer_Algorithmus Euklidischen Algorithmus] basiert. Dieser liefert den größten gemeinsamen Teiler zweier ganzer Zahlen, was zur Decodierung genutzt wird. Der Euklidische Algorithmus ist vergleichbar schnell wie der BMA. Genauere Informationen finden Sie wieder in [Bos98]<ref name ='Bos98'></ref> und [Fri96]<ref name ='Fri96'></ref>.<br>
  
*Weitere effiziente Decodiernethoden von Reed&ndash;Solomon&ndash;Codes arbeiten im <b>Frequenzbereich</b> unter Verwendung der [http://www.lntwww.de/Signaldarstellung/Diskrete_Fouriertransformation_(DFT)#Argumente_f.C3.BCr_die_diskrete_Realisierung_der_FT Diskreten Fouriertransformation] (DFT) im Körper GF(<i>n</i>).<br><br>
+
*Weitere effiziente Decodiernethoden von Reed&ndash;Solomon&ndash;Codes arbeiten im <i>Frequenzbereich</i> unter Verwendung der [[Signaldarstellung/Diskrete_Fouriertransformation_(DFT)#Argumente_f.C3.BCr_die_diskrete_Realisierung_der_FT| Diskreten Fouriertransformation]] (DFT) im Körper ${\rm GF}(n)$.<br><br>
  
 
Die Grundzüge der Reed&ndash;Solomon&ndash;Fehlerkorrektur wurden bereits in den 1960er Jahren entwickelt. Aber bis in die heutige Zeit (2013) ist die (möglichst schnelle) algebraische Decodierung dieser Codes ein hochaktuelles Forschungsgebiet.
 
Die Grundzüge der Reed&ndash;Solomon&ndash;Fehlerkorrektur wurden bereits in den 1960er Jahren entwickelt. Aber bis in die heutige Zeit (2013) ist die (möglichst schnelle) algebraische Decodierung dieser Codes ein hochaktuelles Forschungsgebiet.

Version vom 27. November 2017, 11:45 Uhr

Blockschaltbild und Voraussetzungen zur RS–Fehlerkorrektur


Wie im Kapitel Decodierung_beim_Ausl%C3%B6schungskanal betrachten wir ein Übertragungssystem mit Reed–Solomon–Codierung, das durch die beiden Codeparameter $n=2^m-1$ und $k$ gekennzeichnet ist. Mit der Generatormatrix $\boldsymbol{\rm G}$ lautet der Zusammenhang zwischen dem Informationswort $\underline {u}$ und dem Codewort $\underline {c}$:

\[\underline {c} = {\rm enc}(\underline {u}) = \underline {u} \cdot { \boldsymbol{\rm G}} \hspace{0.3cm} {\rm mit} \hspace{0.3cm}\underline {u} = (u_0, u_1, ... \hspace{0.05cm}, u_i, ...\hspace{0.05cm}, u_{k-1})\hspace{0.05cm}, \hspace{0.2cm} \underline {c} = (c_0, c_1, ... \hspace{0.05cm}, c_i, ...\hspace{0.05cm}, c_{n-1}) \hspace{0.05cm}.\]

Sowohl die Informationssymbole $u_i$ als auch die Codesymbole $C_i$ entstammen dem Körper ${\rm GF}(q)$ mit $q=n+1=2^m$, und sind somit durch $m$ Binärsymbole (Bit) darstellbar.

Übertragungssystem mit Reed–Solomon–Codierung/Decodierung und m–BSC

Ein Vergleich dieses Blockschaltbildes mit dem entsprechenden Blockschaltbild zur RS Fehlererkennung zeigt:

  • Der wesentliche Unterschied liegt im verwendeten diskreten Kanalmodell (grün hinterlegt). Anstelle des Auslöschungskanals („$m$–BEC”) wird nun der $m$–BSC betrachtet. Für jedes einzelne Bit des Codesymbols $c_i$ wird der Binary Symmetric Channel (BSC) angewandt. Ein Bitfehler vezüglich des $i$–Bits ergibt $y_i \ne c_i$.
  • Im letzten Kapitel waren unsichere Bits bereits durch Auslöschungen $\rm E$ (Erasures) markiert. Aufgabe des Codewortfinders (CWF)war es deshalb, aus dem verstümmelten Empfangswort $\underline {y}$ das Decodierergebnis $\underline {z}$ zu rekonstruieren. Ist dabei die Anzahl $e$ der Auslöschungen kleiner als die minimale Distanz $d_{\rm min}$, so gelingt dies und man erhält $\underline {z} = \underline {c}$. Andernfalls meldet der Codewortfinder, dass er das aktuelle Empfangswort $\underline {y}$ nicht decodieren kann. Eine Fehlentscheidung $(\underline {z} \ne \underline {c})$ ist ausgeschlossen.
  • In diesem Kapitel wird nun der erste Decoderblock als Codewortschätzer (CWS) bezeichnet. Die Namensgebung soll deutlich machen, dass aufgrund des $m$–BSC–Modells Fehlentscheidungen $(\underline {z} \ne \underline {c})$ unvermeidlich sind, nämlich dann, wenn durch mehrere Symbolfehler das Empfangswort $\underline {y}$ zu einem gültigen Codewort verfälscht wurde.

$\text{Fazit:}$  Aufgabe des Decoders ist es, seinen Ausgangsvektor $\underline {v}$ so zu bestimmen, dass er „möglichst gut” mit dem Informationswort $\underline {u}$ übereinstimmt. Oder etwas genauer formuliert:

\[{ \rm Pr(Blockfehler)} = { \rm Pr}( \underline{\upsilon} \ne \underline{u}) \stackrel{!}{=} { \rm Minimum}\hspace{0.05cm}.\]

Aufgrund des deterministischen Mappings $\underline{c} = {\rm enc}(\underline{u})$ und $\underline{v} = {\rm enc}^{-1}(\underline{z})$ gilt in gleicher Weise:

\[{ \rm Pr(Blockfehler)} = { \rm Pr}( \underline{z} \ne \underline{c}) \stackrel{!}{=} { \rm Minimum}\hspace{0.05cm}.\]


Deshalb werden im Folgenden die zwei gelb hinterlegten Blöcke nicht weiter betrachtet. Im Mittelpunkt der Betrachtungen steht vielmehr der rot hinterlegte Codewortschätzer (CWS).

Mögliche Codewortschätzer für die RS–Decodierung


Die rechte Skizze der nachfolgenden Grafik verdeutlicht nochmals die Aufgabenstellung, wobei hier das Kanalmodell „$m$–BSC” durch den additiven Fehlervektor $\underline{e} = \underline{y} - \underline{c}$ ersetzt ist. Die linke Skizze verdeutlicht den Zusammenhang zwischen diesen drei Vektoren.

Zur Definition des Fehlervektors $\underline{e}$

Diese Aufgabenstellung soll durch ein Beispiel verdeutlicht werden.

Drei Darstellungsformen für $\rm GF(2^3)$

$\text{Beispiel 1:}$  Alle nachfolgend genannten Symbole sind Elemente von $\rm GF(2^3) \in \{0, 1, \alpha^1, \alpha^2, \alpha^3, \alpha^4, \alpha^5, \alpha^6\}$. Zur Umrechnung zwischen der Koeffizientendarstellung (mit der Reihenfolge $k_2$, $k_1$, $k_0$) und der Exponentendarstellung (als Potenzen des primitiven Elements$\alpha$) kann die nebenstehende Tabelle verwendet werden.

Codewort und Empfangswort lauten in diesem Beispiel in Koeffizientendarstellung:

\[\underline{c} = \Big ( (010), (001), (100),(010),(100),(111),(111)\Big )\hspace{0.05cm},\]
\[\underline{y} =\Big ( (011), (001), (000),(010),(100),(111),(111)\Big )\hspace{0.05cm}.\]

Damit ergibt sich für den Fehlervektor $\underline{e} = \underline{y} - \underline{c}$:

\[\underline{e} \hspace{0.05cm} = \hspace{0.05cm} \Big ( (001), (000), (100), (000),(000),(000),(000)\Big )\hspace{0.05cm}.\]

Umgewandelt in die Exponentendarstellung erhält man:

\[\underline{c} = \Big ( \alpha^1, \hspace{0.09cm}1\hspace{0.09cm}, \alpha^2,\alpha^1,\alpha^2,\alpha^5,\alpha^5\Big )\hspace{0.05cm},\]
\[\underline{y} =\Big ( \alpha^3, \hspace{0.09cm}1\hspace{0.09cm}, \hspace{0.09cm}0\hspace{0.09cm},\alpha^1,\alpha^2,\alpha^5,\alpha^5\Big )\hspace{0.05cm},\]
\[\underline{e} = \Big ( \hspace{0.09cm}1\hspace{0.09cm}, \hspace{0.09cm}0\hspace{0.09cm}, \hspace{0.05cm}\alpha^2,\hspace{0.12cm}0\hspace{0.12cm},\hspace{0.12cm}0\hspace{0.12cm},\hspace{0.12cm}0\hspace{0.12cm},\hspace{0.12cm}0\hspace{0.12cm}\Big )\hspace{0.05cm}.\]



Aufgabe des Codewortschätzers (CWS) ist es, das zu $\underline{y}$ wahrscheinlichste Codewort $\underline{c}_i$ zu finden und sein Ergebnis $\underline{z} = \underline{c}_i$ an das nachfolgende Mapping weiterzugeben. Es gibt verschiedene Möglichkeiten:

  • Hard Decision Maximum Likelihood Decoding (HD–MLD),
  • Bounded Distance Decoding (BDD),
  • Decodierung über die halbe Mindestdistanz.

Diese Decodierprinzipien werden im Folgenden beschrieben.


Hard Decision Maximum Likelihood Decoding (HD–MLD):

Man wählt von allen möglichen Reed–Solomon–Codeworten $\underline{c}_i$ (hiervon gibt es insgesamt$q^k$) dasjenige mit der geringsten Hamming–Distanz zum Empfangswort $\underline{y}$ aus. Somit lautet das Ergebnis:

\[\underline{z} = {\rm arg} \min_{\underline{x}_{\hspace{0.03cm}i} \hspace{0.05cm} \in \hspace{0.05cm} \mathcal{C}_{\rm RS}} \hspace{0.1cm} d_{\rm H}(\underline{y} \hspace{0.05cm}, \hspace{0.1cm}\underline{c}_{\hspace{0.03cm}i})\hspace{0.05cm}.\]

Die Entscheidung passiert hier auf der maximalen Rückschlusswahrscheinlichkeit ${\rm Pr}(\underline{c}_i\hspace{0.05cm}|\hspace{0.05cm}\underline{y})$ und führt zum bestmöglichen Ergebnis. Näheres siehe ML–Entscheidung beim BSC–Kanal. Es wird stets entschieden, selbst wenn die Anzahl $r$ der Symbolfehler größer ist als die Korrekturfähigkeit $t$ des Codes. In einem solchen Fall ist allerdings das Decodierergebnis sehr unsicher.

  • Es sei nochmals erwähnt, dass bei Maximum–Likelihood–Decodierung immer entschieden wird.
  • Ein Decodierversagen ist ausgeschlossen.
  • Aber natürlich gibt es auch falsche Entscheidungen.

Bounded Distance Decoding (BDD):

Falls die Anzahl $r$ der Symbolfehler im Empfangswort $\underline{y}$ nicht größer ist als die Korrekturfähigkeit $t = ⌊(d_{\rm min}- 1)/2⌋$ des Codes, kann man die $r$ Symbolfehler vollständig korrigieren. Allerdings gilt auch:

  • Der Fall $r > t$ führt zu einem Abbruch des Decodiervorgangs ohne Ergebnis.
  • Anders ausgedrückt: Es werden nur diejenigen Empfangsworte zum Kugelmittelpunkt decodiert, die in einer Kugel um diesen mit Radius $t$ liegen.
  • Andere werden als undecodierbar markiert, zum Beispiel als Erasure.

Decodierung über die halbe Mindestdistanz:

Hier wird auch im Fall $r > t$ versucht, das Codewort zu decodieren. Im Gegensatz zu HD–MLD, das ebenfalls über die halbe Mindestdistanz hinaus decodiert, ist hier aber ein Decodierversagen nicht per se ausgeschlossen.

Für den Rest dieses Kapitels beschäftigen wir uns ausschließlich mit Bounded Distance Decoding. Der Grund hierfür ist die enorme Komplexität der Maximum Likelihood Detection proportional zu $q^{n-k}$.

Vorgehensweise beim „Bounded Distance Decoding”


Im Folgenden werden die einzelnen Schritte des BDD–Algorithmuses kurz und rezeptartig beschrieben. Auf den nächsten Seiten werden dann die einzelnen Punkte genauer behandelt und die Vorgehensweise an typischen Beispielen verdeutlicht.

(A)  Berechnung und Auswertung des Syndroms     Detaillierte Beschreibung

  • Berechne aus dem Empfangswort $\underline{y}$ und der Prüfmatrix $\boldsymbol{\rm H }$ des Codes das Syndrom $\underline {s} = \underline {y} \cdot \boldsymbol{\rm H }^{\rm T}$.
  • Ergibt sich $\underline {s} =\underline {0}$, so setze den BDD–Ausgang $\underline {z} =\underline {y}$ und beende den Decodiervorgang für dieses Empfangswort.
  • Andernfalls setze den Parameter $r = 1$ und mache mit Schritt (B) weiter.

(B)  Bestimmung der tatsächlichen Symbolfehleranzahl r    Detaillierte Beschreibung

  • Erstelle und überprüfe die Gleichungen $\underline {\it \Lambda} _l \cdot\underline {s}^{\rm T} = 0$ für $l = 1,$ ... , $2 \cdot t -r$ unter der Annahme, dass das Empfangswort genau $r$ Symbolfehler beinhaltet.
  • $\underline {\it \Lambda} _l $ bezeichnet die verallgemeinerten ELP–Koeffizientenvektoren, wobei „ELP” für Error Locator Polynom steht, und $t$ die Korrekturfähigkeit des Codes. Für die Reed–Solomon–Codes gilt einheitlich $t = ⌊(n-k)/2 ⌋$.
  • Gibt es eine eindeutige Lösung, dann mache mit Schritt (C) weiter. Im Empfangsvektor $\underline{y}$ sind dann tatsächlich genau $r$ Symbole verfälscht und im Fehlervektor $\underline{e}$ gibt es $r$ Einträge ungleich $0$.
  • Andernfalls erhöhe $r$ um $1$. Falls $r ≤ t$, dann wiederhole Schritt (B) von Beginn an: Das bisher angenommene $r$ war offensichtlich zu klein. Deshalb nun ein neuer Versuch mit größerem $r$.
  • Ist das neue $r$ größer als die Korrekturfähigkeit $t$ des Codes, so kann das aktuelle Empfangswort nicht decodiert werden. Beende den Decodierversuch mit einer Fehlermeldung.

(C)  Lokalisierung der r  Fehlerpositionen    Detaillierte Beschreibung

  • Erstelle das Error Locator Polynom ${\it \Lambda}(x)$ und finde dessen $r$ Nullstellen in ${\rm GF}(q) \hspace{-0.05cm}\setminus \hspace{-0.05cm} \{0\}$.
  • Ein Fehler an der Stelle $i$ liegt immer dann vor, wenn ${\it \Lambda}(\alphaî) = 0$ ist.

(D)  Bestimmung der r  Fehlerwerte und Korrektur    Detaillierte Beschreibung

  • Bekannt sind nun die $r$ Fehlerstellen. Ersetzt man im Empfangsvektor $\underline{y}$ die falschen Symbole durch Auslöschungen   ⇒   $y_i = \rm E$, falls $e_i ≠ 0$, so findet man das Ergebnis $\underline{y}$ entsprechend dem Kapitel Reed–Solomon–Decodierung beim Auslöschungskanal.
  • Eine Alternative: Aus der Gleichung $\underline {e} \cdot \boldsymbol{\rm H }^{\rm T} \underline {s}$kommt man unter Ausnutzung der fehlerfreien Stellen $(e_i = 0)$ zu einem linearen Gleichungssystem für die fehlerhaften Symbole $(e_i \ne 0)$.

Schritt (A): Auswertung des Syndroms beim BDD


Wie im Abschnitt Prinzip der Syndromdecodierung gezeigt, kann zur Decodierung eines linearen Codes das Syndrom $\underline{s}$ herangezogen werden. Mit dem Empfangswort $\underline{y}$ gleich Codewort $\underline{c}$ plus Fehlervektor $\underline{e}$ gilt:

\[\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H }}^{\rm T}= \underline {c} \cdot { \boldsymbol{\rm H }}^{\rm T}+ \underline {e} \cdot { \boldsymbol{\rm H }}^{\rm T} \hspace{0.05cm}.\]

Da stets $\underline {c} \cdot { \boldsymbol{\rm H }}^{\rm T} =\underline {0}$ gilt, folgt aus $\underline{s}= \underline{0}$ auch $\underline {e} \cdot { \boldsymbol{\rm H }}^{\rm T} =\underline {0}$. Das heißt:

  • Mit sehr großer Wahrscheinlichkeit kann aus $\underline{s}= \underline{0}$ auch auf $\underline{e}= \underline{0}$und damit auch auf das richtige Decodierergebnis $\underline{z}= \underline{y}$ geschlossen werden. Der Decodiervorgang wäre damit abgeschlossen.
  • Es gibt aber auch Fehlermuster $\underline{e} \ne \underline{0}$, die zum Syndrom $\underline{s}= \underline{0}$ führen. Solche Muster beinhalten sicher mehr als $t$ Symbolfehler, so dass auch hier der Abbruch des Decodiervorgangs sinnvoll ist. Alle nachfolgenden Berechnungen würden auch nicht zum Erfolg führen.

Drei Darstellunsformen für $\rm GF(2^3)$

$\text{Beispiel 2:}$  Diesem und den folgenden Beispielen auf den nächsten Seiten liegt stets der Reed–Solomon–Code RS (7, 3, 5)8 zugrunde, so dass die in der Grafik angegebenen Umrechnungen in $\rm GF(2^3)$ genutzt werden können. Das Empfangswort lautet:

\[\underline{y}=\big (\alpha^3,\hspace{0.05cm} 1,\hspace{0.05cm} 0, \hspace{0.05cm}\alpha^1, \hspace{0.05cm} \alpha^2, \hspace{0.05cm} \alpha^5, \hspace{0.05cm} \alpha^5 \big).\]

Mit der Prüfmatrix $\boldsymbol{\rm H }$ ergibt sich für das Syndrom:

\[\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H } }^{\rm T}= \begin{pmatrix} \alpha^3, \hspace{0.05cm}1, \hspace{0.05cm}0, \hspace{0.05cm}\alpha^1, \hspace{0.05cm}\alpha^2, \hspace{0.05cm}\alpha^5, \hspace{0.05cm}\alpha^5 \end{pmatrix}\cdot \begin{pmatrix} 1 & 1 & 1 & 1 \\ \alpha^1 & \alpha^2 & \alpha^3 & \alpha^4 \\ \alpha^2 & \alpha^4 & \alpha^6 & \alpha^1 \\ \alpha^3 & \alpha^6 & \alpha^2 & \alpha^5 \\ \alpha^4 & \alpha^1 & \alpha^5 & \alpha^2 \\ \alpha^5 & \alpha^3 & \alpha^1 & \alpha^6 \\ \alpha^6 & \alpha^5 & \alpha^4 & \alpha^3 \end{pmatrix} \]
\[\Rightarrow \hspace{0.3cm} \underline {s} = (\alpha^3 , \alpha^3 , \alpha^3 , \alpha^3) + (\alpha^1 , \alpha^2 , \alpha^3 , \alpha^4) + (0,0,0,0) + (\alpha^4,1,\alpha^3,\alpha^6)+(\alpha^6,\alpha^3,1,\alpha^4)+(\alpha^3,\alpha^1,\alpha^6,\alpha^4) + (\alpha^4,\alpha^3,\alpha^2,\alpha^1)\]
\[\Rightarrow \hspace{0.3cm} \underline {s} = \text{...} \hspace{0.05cm}= (\alpha^5,\alpha^2,\alpha^3,\alpha^1) \hspace{0.05cm}.\]

Das Empfangswort wurde also verfälscht. Andernfalls hätte sich $\underline{e}= \underline{0} = (0, 0, 0, 0)$ ergeben müssen.

Die Beschreibung des Decodiervorgangs beim RSC (7, 3, 5)8 wird im Koeffizientenvektors|Beispiel 4 fortgesetzt.


Error Locator Polynom – Definition und Eigenschaften


Nach der Syndromberechnung im Schritt (A) mit dem Ergebnis $\underline{s} \ne \underline{0}$ wissen wir,

  • dass das Empfangswort $\underline{y}$ nicht mit dem Codewort $\underline{c}$ übereinstimmt, bzw.
  • dass der Fehlervektor $\underline{e} = (e_0, \hspace{0.05cm}e_1, \hspace{0.05cm}\text{ ...}\hspace{0.05cm} , e_{n-1})$ mit Sicherheit auch Elemente ungleich $0$ beinhaltet.

Wir wissen allerdings nicht, wie viele Symbole verfälscht wurden$ (0 < r ≤ n)$ und wir können auch nicht die Positionen der Fehlerstellen $(e_i ≠ 0)$ im Fehlervektor $\underline{c}$ benennen.

Einen Lösungsansatz für diese Aufgabe bietet das Error Locator Polynom, das von William Wesley Peterson eingeführt wurde. Siehe [Pet60]Referenzfehler: Ungültige Verwendung von <ref>: Der Parameter „name“ ist ungültig oder zu lang.. Im Deutschen ist hierfür auch der Begriff Schlüsselgleichung üblich.

$\text{Definition:}$ Es sei bekannt, dass genau $r$ Elemente des Fehlervektors $\underline{e}$ ungleich Null sind, erkennbar am Hamming–Gewicht $w_{\rm H}\underline{e} = r$ . Ebenfalls bekannt sei die Menge ${I}_{\rm FP}$ der Fehlerpositionen:

\[I_{\rm FP} = \{ i \hspace{0.1cm}\vert \hspace{0.1cm} e_i \ne 0,\hspace{0.1cm} 0 \le i < n \}\hspace{0.05cm}.\]

Dann gilt für das Error Locator Polynom (ELP):

\[{\it \Lambda}(x)=x \cdot \prod_{i\hspace{0.05cm}\in \hspace{0.05cm} I_{\rm FP} }(x-\alpha^i) =x \cdot \big [{\it \lambda}_0 + \lambda_1 \cdot x+\ldots+{\it \lambda}_{r-1} \cdot x^{r-1}+x^r \big ].\]


Vom Error Locator Polynom wissen wir aufgrund der Definition:

  • Wegen des Faktors $x$ vor dem Produktzeichen ist ${\it \Lambda}(x= 0) = 0$.
  • Weitere $r$ Nullstellen ergeben sich für $x = \alpha^{i}$ mit $i \in I_{\rm FP}$, das heißt, für alle Fehlerpositionen.
  • Dagegen ergibt das Error Locator Polynom für $i ∉ I_{\rm FP}$   ⇒   $e_i = 0$ keine Nullstelle:   ${\it \Lambda}(x= \alpha^{i}) \ne0$.

Wir suchen also die $r$ nichttrivialen Nullstellen von ${\it \Lambda}(x)$ mit dem Argument $x ∈ {\rm GF}(q) \hspace{-0.05cm}\setminus \hspace{-0.05cm} \{0\}$. Gelingt uns dies, so kennen wir die $r$ Fehlerpositionen, jedoch noch nicht die tatsächlichen Fehlerwerte $e_i ∈ {\rm GF}(q)$.

Drei Darstellunsformen für ${\rm GF}(2^3)$

$\text{Beispiel 3:}$  Es gelte $n=7$   ⇒   $q=8$, $r=2$ und $I_{\rm FP} = \{2, \hspace{0.05cm}4\}$:  P ID2551 KC T 2 5 S5a.png

Damit erhält man für das Error Locator Poynom aus ${\rm GF}(2^3)$:

\[{\it \Lambda}(x)=x \cdot (x\hspace{-0.05cm}-\hspace{-0.05cm}\alpha^2) \cdot (x\hspace{-0.05cm}-\hspace{-0.05cm}\alpha^4)= x \cdot (x\hspace{-0.05cm}+\hspace{-0.05cm}\alpha^2) \cdot (x\hspace{-0.05cm}+\hspace{-0.05cm}\alpha^4) =x \cdot \big [x^2 \hspace{-0.05cm}+ \hspace{-0.05cm}(\alpha^2 + \alpha^4) \cdot x + \alpha^6\big ] \]
\[\Rightarrow \hspace{0.3cm} {\it \Lambda}(x)= x \cdot \big [\alpha^6 + \alpha \cdot x + x^2\big ]\hspace{0.05cm}.\]

Die beiden Nullstellen (außer bei $x = 0$) ergeben sich hier natürlich für $x = \alpha^2$ und $x = \alpha^4$, wie die folgende Kontrollrechnung zeigt:

\[{\it \Lambda}(x = \alpha^2)= x \cdot \big [\alpha^6 + \alpha \cdot \alpha^2 + (\alpha^2)^2\big ] = x \cdot \big [\alpha^6 + \alpha^3 + \alpha^4 \big ]= 0\hspace{0.05cm},\]
\[ {\it \Lambda}(x = \alpha^4)= x \cdot \big [\alpha^6 + \alpha \cdot \alpha^4 + (\alpha^4)^2\big ] =x \cdot \big [\alpha^6 + \alpha^5 + \alpha \big ]= 0\hspace{0.05cm}.\]



Für die weitere Herleitung gehen wir stets vom RSC (7, 3, 5)8 mit den folgenden Parameterwerten aus:

$$n=7, \hspace{0.3cm}k = 3, \hspace{0.3cm}d_{\rm min} = 5 \ \Rightarrow t = (d_{\rm min} -1/2) = 2.$$

Die Anzahl der Symbolfehler sei $r = t = 2$. Damit lautet das zu lösende Gleichungssystem mit den Hilfsgrößen $L_i = {\it \Lambda}(\alpha^{i})$:

\[L_0 = {\it \Lambda }(\alpha^0) = \alpha^0 \cdot \left [ {\it \lambda}_0 + {\it \lambda}_1 \cdot (\alpha^0)^1 + (\alpha^0)^2 \right ] = {\it \lambda}_0 \cdot 1 + {\it \lambda}_1 \cdot 1 + 1 \hspace{0.05cm},\]
\[L_1 = {\it \Lambda }(\alpha^1) =\alpha^1 \cdot \left [ {\it \lambda}_0 + {\it \lambda}_1 \cdot (\alpha^1)^1 + (\alpha^1)^2 \right ] = {\it \lambda}_0 \cdot \alpha^1+ {\it \lambda}_1 \cdot \alpha^2 + \alpha^3 \hspace{0.05cm},\]
\[...\]
\[ L_6 = {\it \Lambda }(\alpha^6) = \alpha^6 \cdot \left [ {\it \lambda}_0 + {\it \lambda}_1 \cdot (\alpha^6)^1 + (\alpha^6)^2 \right ] = {\it \lambda}_0 \cdot \alpha^6 + {\it \lambda}_1 \cdot \alpha^{12} + \alpha^{18} \hspace{0.05cm}.\]

In Vektorform lautet dieses Gleichungssystem mit dem Hilfsvektor $\underline{L} = (L_0, \hspace{0.05cm}L_1, \hspace{0.05cm}L_2,\hspace{0.05cm}L_3,\hspace{0.05cm}L_4,\hspace{0.05cm}L_5,\hspace{0.05cm}L_6)$:

\[\underline {L}^{\rm T}=\begin{pmatrix} L_0\\ L_1\\ L_2\\ L_3\\ L_4\\ L_5\\ L_6 \end{pmatrix} \hspace{0.15cm} = \hspace{0.15cm} \begin{pmatrix} 1 & 1 & 1 \\ \alpha^1 & \alpha^2 & \alpha^3 \\ \alpha^2 & \alpha^4 & \alpha^6 \\ \alpha^3 & \alpha^6 & \alpha^9 \\ \alpha^4 & \alpha^8 & \alpha^{12}\\ \alpha^5 & \alpha^{10} & \alpha^{15}\\ \alpha^6 & \alpha^{12} & \alpha^{18} \end{pmatrix} \hspace{0.15cm}\cdot \hspace{0.15cm} \begin{pmatrix} {\lambda}_0\\ {\lambda}_1\\ 1 \end{pmatrix} \hspace{0.05cm}.\]

Wir erweitern nun den ELP–Koeffizientenvektor $\underline {\it \Lambda }$ durch Anhängen von Nullen auf die Länge $n-k$. Im betrachteten Beispiel erhält man somit ${\it \Lambda } = ( \lambda_0,\hspace{0.05cm}\lambda_1,\hspace{0.05cm}1, \hspace{0.05cm}0)$ und folgende Vektorgleichung:

\[\underline {L}^{\rm T} \hspace{0.15cm} = \hspace{0.15cm} \begin{pmatrix} 1 & 1 & 1 & 1 \\ \alpha^1 & \alpha^2 & \alpha^3 & \alpha^4\\ \alpha^2 & \alpha^4 & \alpha^6 & \alpha^8\\ \alpha^3 & \alpha^6 & \alpha^9 & \alpha^{12}\\ \alpha^4 & \alpha^8 & \alpha^{12} & \alpha^{16}\\ \alpha^5 & \alpha^{10} & \alpha^{15} & \alpha^{20}\\ \alpha^6 & \alpha^{12} & \alpha^{18} & \alpha^{24} \end{pmatrix} \hspace{0.15cm}\cdot \hspace{0.15cm} \begin{pmatrix} {\lambda}_0\\ {\lambda}_1\\ 1\\ 0 \end{pmatrix} \hspace{0.05cm}.\]

Damit haben wir erreicht:

  • Aus der $7× 3$–Matrix wurde nun eine $7× 4$–Matrix.
  • Die vierte Spalte kann eigentlich beliebig gefüllt werden, da alle Elemente mit Nullen multipliziert werden.
  • Durch die hier gewählte Ergänzung erhält man die transponierte Prüfmatrix des RSC (7, 3, 5)8.
  • Somit kann man für die letzte Vektorgleichung schreiben:
\[\underline {L}^{\rm T} = { \boldsymbol{\rm H }}^{\rm T} \cdot \underline {\it \Lambda }^{\rm T} \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline {L} = \underline {\it \Lambda } \cdot { \boldsymbol{\rm H }} \hspace{0.05cm}.\]

Da aber für die Fehlerstellen $(e_i ≠ 0)$ stets $L_i = {\it \Lambda}(\alpha^{i}) = 0$ gilt, ist das Produkt $L_i \cdot e_i \equiv 0$ und man erhält als Bestimmungsgleichung für die Nullstellen des Error Locator Polynoms:

\[\underline {L}^{\rm T} \cdot \underline {e}^{\rm T} = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \underline {\it \Lambda } \cdot { \boldsymbol{\rm H }} \cdot \underline {e}^{\rm T} = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \underline {\it \Lambda } \cdot \underline {s}^{\rm T} = 0 \hspace{0.05cm}.\]

$\text{Wichtiges Zwischenergebnis:}$ 

Die nichttrivialen Nullstellen (ungleich 0) $\lambda_0$, $\lambda_1$, ... des Error Locator Polynoms ${\it \Lambda}(x)$ müssen stets der Vektorgleichung $\underline {\it \Lambda } \cdot \underline {s}^{\rm T} = 0 $ genügen.

  • Hierbei bezeichnet $\underline {\it \Lambda }$ den ELP–Koeffizientenvektor, und
  • $\underline {s } = \underline {y }\cdot \boldsymbol{\rm H }^{\rm T} $ gibt das Syndrom an.


Schritt (B): Aufstellen/Auswerten des ELP–Koeffizientenvektors


Bevor wir dieses Zwischenergebnis für den Schritt (B) berücksichtigen können, müssen noch einige Verallgemeinerungen vorgenommen werden. Der Grund hierfür ist:

  • Die Gleichung $\underline {\it \Lambda } \cdot \underline {s}^{\rm T} = 0 $ liefert nur eine einzige Bestimmungsgleichung. Damit kann das Problem für $r = 1$ gelöst werden, wenn man sicher ist, dass tatsächlich nur ein Symbol verfälscht wurde.
  • Ist man sich dessen nicht sicher, führt aber die Berechnung trotzdem für $r = 1$ durch, so braucht man noch eine zweite Gleichung (oder auch mehrere), um die Annahme zu verifizieren.

Die Eigenschaft des Error Locator Polynoms, dass ${\it \Lambda}(\alpha^{i})$ nur für $e_i ≠ 0$ ($i$–tes Symbol verfälscht) gleich Null ist, bleibt erhalten, wenn man ${\it \Lambda}(x)$mit beliebigen Potenzen von $x$ multipliziert. Jede Multiplikation mit $x$ bedeutet für den ELP–Koeffizientenvektor eine Verschiebung um eine Stelle nach rechts.

Verschobene ELP–Koeffizientenvektoren

$\text{Definition:}$  Die verallgemeinerten ELP–Koeffizientenvektoren $\underline {\it \Lambda }_l$ ergeben sich durch sukzessive Verschiebungen gegenüber $\underline {\it \Lambda }_l$:

\[{\it \Lambda}_l(x)=x^l \cdot \prod_{i\hspace{0.05cm}\in \hspace{0.05cm} I_{\rm FP} }(x-\alpha^i) =x^l \cdot \big [{\it \lambda}_0 + \lambda_1 \cdot x+\ldots+{\it \lambda}_{r-1} \cdot x^{r-1}+x^r \big ]\hspace{0.05cm}.\]

In dieser Definitionsgleichung entspricht $\underline {\it \Lambda }_1$ dem bisherigen $\underline {\it \Lambda }$.


Die Grafik zeigt die Belegung unter der Annahme von $r$ Fehlerstellen im Fehlervektor$\underline {e}$ für

  • $r=1$ im linken Bereich (mit blauer Hinterlegung),
  • $r=2$ im mittleren Bereich (mit roter Hinterlegung),
  • $r=3$ im rechten Bereich (mit grüner Hinterlegung),


Man erkennt:

  • Die Länge aller $\underline {\it \Lambda }_l$ ist stets $n-k$. Jeder Vektor beinhaltet jeweils $r$ Koeffizienten $\lambda_0$, $\lambda_1$, ... , $\lambda_{r-1}$   ⇒   $0 ≤ i < r$ und eine Eins. Der Rest eines jeden Vektors ist mit Nullen aufgefüllt.
  • Für jedes $r$ gibt es genau $n-k-r$ Koeffizientenvektoren $\underline {\it \Lambda }_l$, wobei sich $\underline {\it \Lambda }_l$ aus $\underline {\it \Lambda }_{l-1}$ stets durch Rechtsverschiebung um eine Position ergibt. Der Vektor $\underline {\it \Lambda }_{n-k-r}$ endet immer mit einer $1$.
  • Das Gleichungssystem $\underline {\it \Lambda }_l \cdot \underline {s}^{\rm T} = 0 $ führt deshalb zu $n-k-r$ Gleichungen. Der gewählte Ansatz für $r$ ist nur dann richtig, wenn alle Gleichungen zu den gleichen Ergebnissen für $\lambda_0$, ... , $\lambda_{r-1}$ führen.
  • Ist dies nicht der Fall, so muss man $r$ erhöhen und damit ein neues Gleichungssystem bearbeiten, und zwar solange, bis sich aus allen Gleichungen für das aktuelle $r$ eine eindeutige Lösung ergibt.
  • Ist schließlich $r$ größer als die Korrekturfähigkeit $t$ des Codes, so kann die Berechnung beendet werden. Das anstehende Empfangswort $\underline {y}$ ist dann nicht decodierbar.


$\text{Beispiel 4:}$  Es gelten weiterhin die im Beispiel 2 genannten Voraussetzungen:

  • Dort wurde aufgrund des Syndroms $\underline {s} = (\alpha^5,\alpha^2,\alpha^3,\alpha^1) ≠ \underline {0}$ auch nachgewiesen, dass der Empfangsvektor $\underline {y}$ verfälscht wurde   ⇒   Fehlervektor $\underline {e} \ne \underline {0}$.
  • Nicht bekannt ist allerdings die tatsächliche Symbolfehleranzahl $r$.


Unter der Annahme eines einzigen falschen Symbols $(r= 1)$ erhält man folgendes Gleichungssystem (hier in Matrixform geschrieben):

Drei Darstellunsformen für $\rm GF(2^3)$
\[\big ({ \boldsymbol{\it \Lambda } }_l \big) \cdot \underline {s} ^{\rm T}= \begin{pmatrix} \lambda_0 & 1 & 0 & 0 \\ 0 & \lambda_0 & 1 & 0 \\ 0 & 0 & \lambda_0 & 1 \end{pmatrix} \cdot \begin{pmatrix} \alpha^5\\ \alpha^2\\ \alpha^3\\ \alpha \end{pmatrix} \stackrel{!}{=} \begin{pmatrix} 0\\ 0\\ 0 \end{pmatrix} \hspace{0.05cm}.\]

Dieses Gleichungssystem liefert drei unterschiedliche Lösungen für $\lambda_0$, was nicht zielführend ist:

\[\text{Zeile 1:}\hspace{0.5cm}\alpha^5 \cdot \lambda_0 + \alpha^2 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \lambda_0 = \alpha^{2-5}= \alpha^{-3}= \alpha^{4}\hspace{0.05cm},\]
\[\text{Zeile 2:}\hspace{0.5cm}\alpha^2 \cdot \lambda_0 + \alpha^3 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \lambda_0 = \alpha^{3-2}= \alpha\hspace{0.05cm},\]
\[\text{Zeile 3:}\hspace{0.5cm}\alpha^3 \cdot \lambda_0 + \alpha^1 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \lambda_0 = \alpha^{1-3}= \alpha^{-2} = \alpha^{5} \hspace{0.05cm}.\]

Deshalb stellen wir nun ein weiteres Gleichungssystem auf, und zwar unter der Annahme $r = 2$:

\[\big ({ \boldsymbol{\it \Lambda } }_l \big) \cdot \underline {s} ^{\rm T}= \begin{pmatrix} \lambda_0 & \lambda_1 & 1 & 0 \\ 0 & \lambda_0 & \lambda_1 & 1 \end{pmatrix} \cdot \begin{pmatrix} \alpha^5\\ \alpha^2\\ \alpha^3\\ \alpha \end{pmatrix} \stackrel{!}{=} \begin{pmatrix} 0\\ 0 \end{pmatrix} \]

Dies führt zu zwei Gleichungen für $\lambda_0$ und $\lambda_1$:

\[\alpha^5 \cdot \lambda_0 + \alpha^2 \cdot \lambda_1 + \alpha^3 = 0 \hspace{0.05cm},\hspace{0.5cm}\alpha^2 \cdot \lambda_0 + \alpha^3 \cdot \lambda_1 + \alpha^1 \hspace{-0.15cm} = \hspace{-0.15cm} 0 \hspace{0.05cm}.\]

Dieses Gleichungssystem ist nun eindeutig lösbar. Man erhält $\lambda_0 = \alpha^2$ und $\lambda_1 = \alpha^6$. Das bedeutet:

  • Die Annahme, dass tatsächlich $r = 2$ Positionen des Empfangsvektors $\underline {y}$ verfälscht wurden, ist richtig.
  • Man weiß aber noch nicht, welche Positionen verfälscht wurden. Soviel vorneweg:
  • Es sind nicht die Symbolpositionen 2 und 6, sondern die Positionen 0 und 2, wie im folgenden Beispiel 5 gezeigt wird.



Schritt (C): Lokalisierung der Fehlerstellen


Nach Abarbeitung von Schritt (B) sind bekannt:

  • die Anzahl $r$ der Fehlerstellen $e_i ≠ 0$ im Vektor $\underline {e} = (e_0, \text{... }, e_i, \text{... }, e_{n-1})$
  • die Koeffizienten $\lambda_0, \text{... } , \lambda_{r-1}$ des Error Locator Polynoms.

Zu bestimmen ist nun noch die Menge der Fehlerpositionen:   $I_{\rm FP} = \{ i \hspace{0.1cm}| \hspace{0.1cm} e_i \ne 0,\hspace{0.1cm} 0 \le i < n \}\hspace{0.05cm}.$

Hierzu gibt es zwei Möglichkeiten (beide Verfahren werden im folgenden Beispiel angewendet.):

  • die so genannte Chien–Suche, in dem man durch Einsetzen der möglichen Codesymbole außer dem Nullsymbol $(\alpha^0, \text{... }, \alpha^i, \text{... },\alpha^{n-1})$ in das Error Locator Polynom dessen Nullstellen ermittelt,
  • die Auswertung der Gleichung $\underline {L} = (L_0, \text{... }, L_i, \text{... },L_{n-1} ) = \underline {\it \Lambda } \cdot { \boldsymbol{\rm H }}$ mit der Abkürzung $L_i = {\it \Lambda}(\alpha^i)$.

$\text{Beispiel 5:}$  Im Beispiel 4 wurde entsprechend den in Beispiel 2 genannten Randbedingungen ermittelt, dass

  • $r= 2$ Symbolfehler vorliegen, und
  • die ELP–Koeffizienten $\lambda_0 = \alpha^2$ und $\lambda_1 = \alpha^6$ lauten. Damit ergibt sich das Error Locator Polynom:
\[{\it \Lambda}(x)=x \cdot \big [{\it \lambda}_0 + \lambda_1 \cdot x+x^2 \big ] =x \cdot \big [\alpha^2 + \alpha^6 \cdot x+x^2 \big ]\hspace{0.05cm}.\]
Drei Darstellunsformen für $\rm GF(2^3)$

Entsprechend der Chien–Suche erhält man

\[{\it \Lambda}(\alpha^0)\hspace{0.15cm} = \hspace{0.15cm}\alpha^0 \cdot \big [ \alpha^2 + \alpha^6 \cdot 1 + 1 \big ] = \alpha^2 + (\alpha^2 + 1) + 1 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm}{ \boldsymbol{\rm Nullstelle} }\hspace{0.05cm},\]
\[{\it \Lambda}(\alpha^1)\hspace{0.15cm} = \hspace{0.15cm}\alpha^1 \cdot \big [\alpha^2 + \alpha^6 \cdot \alpha^1 + \alpha^2\big ]= \alpha^1 \hspace{0.3cm} \Rightarrow \hspace{0.3cm}{\rm Keine\hspace{0.15cm} Nullstelle}\hspace{0.05cm},\]
\[{\it \Lambda}(\alpha^2)\hspace{0.15cm} = \hspace{0.15cm}\alpha^2 \cdot \big [ \alpha^2 + \alpha^6 \cdot \alpha^2 + \alpha^4 \big ] =\alpha^4 + \alpha^{10} + \alpha^6 = \text{...} = \hspace{0.15cm}0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm}{ \boldsymbol{\rm Nullstelle} }\hspace{0.05cm}.\]

Damit sind die beiden Fehlerpositionen mit $i = 0$ und $i = 2$ gefunden   ⇒   der Fehlervektor lautet: $\underline {e} = (e_0, 0, e_2, 0, 0, 0, 0)$ .


Die Vektorgleichung $\underline {L} = \underline {\it \Lambda } \cdot { \boldsymbol{\rm H } }$ liefert das gleiche Ergebnis in kompakterer Form:

\[\underline {L} = \underline{\it \Lambda} \cdot { \boldsymbol{\rm H } } = (\alpha^2, \alpha^6, 1, 0) \cdot \begin{pmatrix} 1 & \alpha^1 & \alpha^2 & \alpha^3 & \alpha^4 & \alpha^5 & \alpha^6 \\ 1 & \alpha^2 & \alpha^4 & \alpha^6 & \alpha^1 & \alpha^3 & \alpha^5 \\ 1 & \alpha^3 & \alpha^6 & \alpha^3 & \alpha^5 & \alpha^1 & \alpha^4 \\ 1 & \alpha^4 & \alpha^1 & \alpha^5 & \alpha^2 & \alpha^6 & \alpha^3 \end{pmatrix} \]
\[ \Rightarrow \hspace{0.3cm} \underline {L} = (\alpha^2,\alpha^3,\alpha^4,\alpha^5,\alpha^6,1 ,\alpha^1) + (\alpha^6,\alpha^1,\alpha^3,\alpha^5,1 ,\alpha^2,\alpha^4)+(1, \alpha^3,\alpha^6,\alpha^3,\alpha^5,\alpha^1,\alpha^4) \]
\[ \Rightarrow \hspace{0.3cm} \underline {L} = (0,\alpha^1,0,\alpha^3,\alpha^3,\alpha^5,\alpha^1)\hspace{0.3cm} \Rightarrow \hspace{0.3cm} L_0 = L_2 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} \underline {e} = (e_0, 0, e_2, 0, 0, 0, 0)\hspace{0.05cm}.\]

Das Beispiel wird mit dem Beispiel 6 auf der nächsten Seite fortgesetzt.


Schritt (D): Abschließende Fehlerkorrektur


Im letzten Schritt müssen nun nur noch die $r$ Symbolfehler korrigiert werden, deren Positionen nach Beendigung von Schritt (C) bekannt sind:

  • Markiert man die Fehlerpositionen im Empfangswort $\underline {y}$ als Auslöschungen $\rm E$ (Erasures), so kann das zugehörige Codewort $\underline {z}$ entsprechend der Beschreibung im Kapitel Reed–Solomon–Decodierung beim Auslöschungskanal gefunden werden.
  • Eine zweite Möglichkeit bietet die Bestimmung des Fehlervektors $\underline {e}$ aus der Gleichung $\underline {e} \cdot \boldsymbol{\rm H }^{\rm T} = \underline {s}$ und die Korrektur entsprechend $\underline {z} = \underline {y} - \underline {e} $ . Dieses Verfahren liegt dem folgenden Beispiel zugrunde.

$\rm GF(2^3)$–Darstellunsformen

$\text{Beispiel 6:}$  Im Beispiel 2 wurde

  • das Empfangswort mit $\underline{y}=\big (\alpha^3,\hspace{0.05cm} 1,\hspace{0.05cm} 0, \hspace{0.05cm}\alpha^1, \hspace{0.05cm} \alpha^2, \hspace{0.05cm} \alpha^5, \hspace{0.05cm} \alpha^5 \big)$ vorgegeben, und
  • daraus das Syndrom $\underline{s}=\big (\alpha^5,\hspace{0.05cm}\alpha^2, \hspace{0.05cm} \alpha^3, \hspace{0.05cm} \alpha^1\big)$


ermittelt. Nach den Berechnungen im Beispiel 5 lautet der Fehlervektor $\underline {e} = (e_0, 0, e_2, 0, 0, 0, 0)$.
Diese Angaben gelten für den RSC (7, 3, 5)8.

Aus $\underline {e} \cdot \boldsymbol{\rm H }^{\rm T} = \underline {s}$ erhält man nun folgende Bestimmungsgleichungen für die Fehlerwerte $e_0$ und $e_2$:

\[\underline {e} \cdot \boldsymbol{\rm H }^{\rm T}= \begin{pmatrix} e_0 & 0 & e_2 & 0 & 0 & 0 & 0 \end{pmatrix}\cdot \begin{pmatrix} 1 & 1 & 1 & 1 \\ \alpha^1 & \alpha^2 & \alpha^3 & \alpha^4\\ \alpha^2 & \alpha^4 & \alpha^6 & \alpha^1\\ \alpha^3 & \alpha^6 & \alpha^2 & \alpha^{5}\\ \alpha^4 & \alpha^1 & \alpha^{5} & \alpha^{2}\\ \alpha^5 & \alpha^{3} & \alpha^{1} & \alpha^{6}\\ \alpha^6 & \alpha^{5} & \alpha^{4} & \alpha^{3} \end{pmatrix} \stackrel{!}{=} \underline {s} = \begin{pmatrix} \alpha^5 & \alpha^2 & \alpha^3 & \alpha^1 \end{pmatrix} \]
\[\Rightarrow \hspace{0.3cm}e_0 \cdot (1, 1, 1, 1) + e_2 \cdot ( \alpha^2, \alpha^4, \alpha^6, \alpha^1)\stackrel{!}{=} ( \alpha^5, \alpha^2, \alpha^3, \alpha^1)\]
\[\Rightarrow \hspace{0.3cm} e_0 + e_2 \cdot \alpha^2 = \alpha^5\hspace{0.05cm},\hspace{0.2cm} e_0 + e_2 \cdot \alpha^4 = \alpha^2\hspace{0.05cm},\hspace{0.2cm} e_0 + e_2 \cdot \alpha^6 = \alpha^3\hspace{0.05cm},\hspace{0.2cm} e_0 + e_2 \cdot \alpha^1 = \alpha^1\hspace{0.05cm}.\]


Diese Gleichungen führen zum Ergebnis $e_0 = 1$ und $e_2 =\alpha^2$. Damit lautet das korrigierte Codewort mit $\underline {y} = (\alpha^3,\hspace{0.05cm} 1,\hspace{0.05cm} 0,\hspace{0.05cm} \alpha^1,\hspace{0.05cm} \alpha^2,\hspace{0.05cm} \alpha^5,\hspace{0.05cm} \alpha^5)$ und $\underline {e}= (1,\hspace{0.05cm} 0,\hspace{0.05cm} \alpha^2,\hspace{0.05cm} 0,\hspace{0.05cm} 0,\hspace{0.05cm} 0,\hspace{0.05cm} 0)$:

\[\underline {z} = \underline {y} - \underline {e} = \underline {y} + \underline {e}= (\alpha^1,\hspace{0.03cm} 1,\hspace{0.03cm} \alpha^2,\hspace{0.03cm} \alpha^1,\hspace{0.03cm} \alpha^2,\hspace{0.03cm} \alpha^5,\hspace{0.03cm} \alpha^5)\hspace{0.05cm}. \]

Dieses ist ein gültiges Codewort von RSC (7, 3, 5)8.


Schnelle Reed–Solomon–Decodierung


Die Klasse der Reed–Solomon–Codes wurde bereits im Jahre 1960 durch die Veröffentlichung [RS60][1] eingeführt. Ihre effiziente Decodierung war jedoch erst ein bis zwei Jahrzehnte später möglich.

Auf den letzten Seiten haben wir den so genannten Petersen–Algorithmus inklusive der Chien–Suche am Beispiel des RSC (7, 3, 5)8 demonstriert, der bis zu $t = 2$ Fehler korrigieren kann. Im Mittelpunkt des Decodiervorgangs stand dabei das Aufstellen und Lösen der Schlüsselgleichung (englisch: Error Locator Polynom), wobei die Nullstellen eines Grad–2–Polynoms im Körper $\rm GF(7)$ gefunden werden mussten. Sie konnten erkennen, dass diese algebraische Decodierung mit großem Aufwand verbunden ist.

Bei den in Praxis eingesetzten Codes mit großer Codewortlänge $n$ und hoher Korrekturfähigkeit $t$ würde der Decodieraufwand explodieren, wenn nicht schnellere Decodieralgorithmen gefunden worden wären. So müssen beim Reed–Solomon–Code RSC (255, 223, 33)256, der schon früh im ESA/NASA–Standard zur Satellitenübertragung genannt wurde, zur Decodierng eines einzigen Codewortes die bis zu $t = 16$ Nullstellen im Körper $\rm GF(255)$ gefunden werden, und das auch noch in Echtzeit.

Ab Ende der 1960er Jahre haben sich viele Wissenschaftler um schnellere Decodieralgorithmen für Reed–Solomon–Codes bemüht:

  • Beim Berlekamp–Massey–Algorithmus (BMA) wird die Schlüsselgleichung $\underline {\it \Lambda} \cdot \underline{s }^{\rm T} = 0$ als rückgekoppeltes Schieberegister dargestellt, siehe zum Beispiel [Mas69][2], [Fri96][3] und [Bos98][4]. Das Problem wird damit auf die Synthese eines autoregressiven Filters zurückgeführt. Dieser Algorithmus arbeitet wesentlich schneller als der (leichter durchschaubare) Petersen–Algorithmus.
  • Etwas später wurde in [SK+75][5] ein Decodierverfahren vorgeschlagen, das auf dem Euklidischen Algorithmus basiert. Dieser liefert den größten gemeinsamen Teiler zweier ganzer Zahlen, was zur Decodierung genutzt wird. Der Euklidische Algorithmus ist vergleichbar schnell wie der BMA. Genauere Informationen finden Sie wieder in [Bos98][4] und [Fri96][3].
  • Weitere effiziente Decodiernethoden von Reed–Solomon–Codes arbeiten im Frequenzbereich unter Verwendung der Diskreten Fouriertransformation (DFT) im Körper ${\rm GF}(n)$.

Die Grundzüge der Reed–Solomon–Fehlerkorrektur wurden bereits in den 1960er Jahren entwickelt. Aber bis in die heutige Zeit (2013) ist die (möglichst schnelle) algebraische Decodierung dieser Codes ein hochaktuelles Forschungsgebiet.

Aufgaben zum Kapitel


A2.12 Decodierung beim RSC(7, 4, 4)(Base 8)

Zusatzaufgaben:2.12 Reed–Solomon–Syndromberechnung

A2.13 Nun RSC (7, 3, 5)(Base 8)–Decodierung

A2.14 Petersen–Algorithmus

Quellenverzeichnis

  1. Reed, I.S.; Solomon, G.: Polynomial Codes over Certain Finite Fields. J. Siam, Vol. 8, pp. 300–304, 1960.
  2. Massey, J.L.: Shift Register Synthesis and BCH Decoding.. IEEE Trans. on Information Theory, vol. IT-15, pp. 122–127, Jan. 1969.
  3. 3,0 3,1 Friedrichs, B.: Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen. Berlin – Heidelberg: Springer, 1996.
  4. 4,0 4,1 Bossert, M.: Kanalcodierung. Stuttgart: B. G. Teubner, 1998.
  5. Sugiyama, Y.; Kashara, M.; Hirasawa, S.; Namekawa, T.: A Method for Solving Key Equation for Decoding Goppa Codes. Information and Control, Vol. 27, pp. 87–99, 1975.