Fehlerkorrektur nach Reed–Solomon–Codierung

Aus LNTwww
Wechseln zu:Navigation, Suche

Blockschaltbild und Voraussetzungen zu Kapitel 2.5


Wie im Kapitel 2.4 betrachten wir ein Übertragungssystem mit Reed–Solomon–Codierung, das durch die beiden Codeparameter n = 2m – 1 und k gekennzeichnet ist. Mit der Generatormatrix G lautet der Zusammenhang zwischen dem Informationswort u und dem Codewort 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 ui als auch die Codesymbole ci entstammen dem Körper GF(q) mit q = n + 1 = 2m, 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 Modell zu Kapitel 2.4 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 ci wird der Binary Symmetric Channel (BSC) angewandt. Ist auch nur ein Bit innerhalb des Codesymbols verfälscht, so ist yici.
  • Im Kapitel 2.4 sind unsichere Bit bereits durch Auslöschungen E (Erasures) markiert. Aufgabe des Codewortfinders (CWF) ist es deshalb, aus dem verstümmelten Empfangswort y das Decodierergebnis z zu rekonstruieren. Ist die Anzahl e der Auslöschungen kleiner als die minimale Distanz dmin, so gelingt dies und man erhält z = c. Andernfalls meldet der CWF, dass er das aktuelle Empfangswort y nicht decodieren kann. Eine Fehlentscheidung (zc) 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 (zc) unvermeidlich sind, nämlich dann, wenn durch mehrere Symbolfehler das Empfangswort y zu einem gültigen Codewort verfälscht wurde.

Aufgabe des Decoders ist es, seinen Ausgangsvektor υ so zu bestimmen, dass er „möglichst gut” mit dem Informationswort 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 c = enc(u) und υ = enc–1(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: HD–MLD bzw. BDD (1)


Die rechte Skizze der nachfolgenden Grafik verdeutlicht nochmals die Aufgabenstellung, wobei hier das Kanalmodell „m–BSC” durch den additiven Fehlervektor e = yc ersetzt ist. Die linke Skizze verdeutlicht den Zusammenhang zwischen diesen drei Vektoren.

Zur Definition des Fehlervektors e

Diese Aufgabenstellung soll durch ein Beispiel verdeutlicht werden.

:
Drei Darstellungsformen für GF(23)
Alle nachfolgend genannten Symbole sind Elemente von GF(23) = {0, 1, α1, α2, α3, α4, α5, α6}. Zur Umrechnung zwischen der Koeffizientendarstellung (mit der Reihenfolge k2, k1, k0) und der Exponentendarstellung (als Potenzen des primitiven Elements α) kann die nebenstehende Tabelle verwendet werden.

Codewort und Empfangswort lauten in Koeffizientendarstellung:

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

Damit ergibt sich für den Fehlervektor e = yc:

\[\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} \hspace{-0.15cm} = \hspace{-0.15cm} \Big ( \alpha^1, 1, \alpha^2,\alpha^1,\alpha^2,\alpha^5,\alpha^5\Big )\hspace{0.05cm},\]

\[\underline{y} \hspace{-0.15cm} = \hspace{-0.15cm} \Big ( \alpha^3, 1, \hspace{0.09cm}0\hspace{0.09cm},\alpha^1,\alpha^2,\alpha^5,\alpha^5\Big ) \hspace{0.3cm} \Rightarrow \hspace{0.3cm}\underline{e} = \Big ( \hspace{0.05cm}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\hspace{0.05cm}\Big )\hspace{0.05cm}.\]


Aufgabe des Codewortschätzers (CWS) ist es, das zu y wahrscheinlichste Codewort ci zu finden und sein Ergebnis z = ci 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 auf der nächsten Seite ausführlicher behandelt.

Mögliche Codewortschätzer: HD–MLD bzw. BDD (2)


Aufgabe des Codewortschätzers (CWS) ist es, das zu y wahrscheinlichste Codewort ci zu finden und sein Ergebnis z = ci weiterzugeben. Hierfür gibt es mehrere Möglichkeiten:

Hard Decision Maximum Likelihood Decoding (HD–MLD):

Man wählt von allen möglichen Reed–Solomon–Codeworten ci (hiervon gibt es insgesamt qk) dasjenige mit der geringsten Hamming–Distanz zum Empfangswort 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 Pr(ci | y) und führt zum bestmöglichen Ergebnis. Näheres siehe Kapitel 1.2. 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 ML–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 y nicht größer ist als die Korrekturfähigkeit t = ⌊(dmin – 1)/2⌋ des Codes, kann man die r Symbolfehler vollständig korrigieren. 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 qnk.

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) Berechne das Syndrom s = y · HT:

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

(B) Bestimme die tatsächliche Symbolfehleranzahl r:

  • Erstelle und überprüfe die Gleichungen Λl · sT = 0 für l = 1, ..., 2tr unter der Annahme, dass das Empfangswort genau r Symbolfehler beinhaltet.
  • Λl bezeichnet die verallgemeinerten ELP–Koeffizientenvektoren und t die Korrekturfähigkeit des Codes. Für die Reed–Solomon–Codes gilt einheitlich t = ⌊(nk)/2⌋.
  • Gibt es eine eindeutige Lösung, dann mache mit Schritt (C) weiter. Im Empfangsvektor y sind dann tatsächlich genau r Symbole verfälscht und im Fehlervektor e gibt es r Einträge ungleich 0.
  • Andernfalls erhöhe r um 1. Falls rt, 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) Lokalisiere die r Fehlerpositionen:

  • Erstelle das Error Locator Polynom Λ(x) und finde dessen r Nullstellen in GF(q) \ {0}.
  • Ein Fehler an der Stelle i liegt immer dann vor, wenn Λ(αi) = 0 ist.

(D) Bestimme die r Fehlerwerte ei ≠ 0:

  • Bekannt sind die r Fehlerstellen. Ersetzt man im Empfangsvektor y die falschen Symbole durch Auslöschungen  ⇒  yi = E, falls ei ≠ 0, so findet man das Ergebnis z entsprechend Kapitel 2.4.
  • Eine Alternative: Aus der Gleichung e · HT = s kommt man unter Ausnutzung der fehlerfreien Stellen (ei = 0) zu einem linearen Gleichungssystem für die fehlerhaften Symbole (ei ≠ 0).

Schritt (A): Auswertung des Syndroms beim BDD


Wie in Kapitel 1.5 gezeigt, kann zur Decodierung eines linearen Codes das Syndrom s herangezogen werden. Mit dem Empfangswort y gleich Codewort c plus Fehlervektor e gilt für dieses:

\[\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 c · HT = 0 gilt, folgt aus s = 0 auch e · HT = 0. Das heißt:

  • Mit sehr großer Wahrscheinlichkeit kann aus s = 0 auch auf e = 0 und damit auch auf das richtige Decodierergebnis z = y geschlossen werden. Der Decodiervorgang wäre damit abgeschlossen.
  • Es gibt aber auch Fehlermuster e0, die zum Syndrom s = 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.

A:
Drei Darstellunsformen für GF(23)
Diesem und den folgenden Beispielen auf den nächsten Seiten liegt stets der Reed–Solomon–Code (7, 3, 5)8 zugrunde, so dass die hier angegebenen Umrechnungen in GF(23) 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 H ergibt sich für das Syndrom:

\[\underline {s} \hspace{-0.15cm} = \hspace{-0.15cm} \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} = \] \[ \hspace{-0.15cm} = \hspace{-0.15cm}(\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)+\] \[\hspace{0.15cm} + \hspace{0.15cm} (\alpha^6,\alpha^3,1,\alpha^4)+(\alpha^3,\alpha^1,\alpha^6,\alpha^4) + (\alpha^4,\alpha^3,\alpha^2,\alpha^1)= ... \hspace{0.05cm}= (\alpha^5,\alpha^2,\alpha^3,\alpha^1) \hspace{0.05cm}.\]

Das Empfangswort wurde also verfälscht. Andernfalls hätte sich s = 0 = (0, 0, 0, 0) ergeben müssen.

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


Error Locator Polynom – Definition und Eigenschaften (1)


Nach der Syndromberechnung mit dem Ergebnis s ≠ 0 wissen wir,

  • dass das Empfangswort y nicht mit dem Codewort c übereinstimmt, bzw.
  • dass der Fehlervektor e = (e0, e1, ... , en–1) auch Elemente ungleich 0 beinhaltet.

Wir wissen allerdings nicht, wie viele Symbole verfälscht wurden (0 < rn) und wir können auch nicht die Positionen der Fehlerstellen (ei ≠ 0) im Fehlervektor e nennen.

Einen Lösungsansatz für diese Aufgabe bietet das Error Locator Polynom, das von W. W. Peterson eingeführt wurde. Siehe [Pet60][1]. Im Deutschen ist hierfür auch der Begriff Schlüsselgleichung üblich.

: Es sei bekannt, dass genau r Elemente des Fehlervektors e ungleich 0 sind, erkennbar am Hamming–Gewicht wH(e) = r. Ebenfalls bekannt sei die Menge IFP 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}.\]

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 Λ(x = 0) = 0.
  • Weitere r Nullstellen ergeben sich für x = αi mit iIFP, das heißt, für alle Fehlerpositionen.
  • Dagegen ergibt das Error Locator Polynom für iIFPei = 0 keine Nullstelle: Λ(x = αi) ≠ 0.

Wir suchen also die r nichttrivialen Nullstellen von Λ(x) mit dem Argument x ∈ GF(q) \ {0}. Gelingt uns dies, so kennen wir die r Fehlerpositionen, jedoch noch nicht die tatsächlichen Fehlerwerte ei ∈ GF(q).

:
Drei Darstellunsformen für GF(23)
Es gelte n = 7 ⇒ q = 8, r = 2 und IFP = {2, 4}:

P ID2551 KC T 2 5 S5a.png

Damit erhält man für das Error Locator Poynom aus GF(23):

\[{\it \Lambda}(x)\hspace{0.15cm} = \hspace{0.15cm}x \cdot (x-\alpha^2) \cdot (x-\alpha^4)=\] \[ \hspace{1.1cm} = \hspace{0.15cm} x \cdot (x+\alpha^2) \cdot (x+\alpha^4) =\] \[ \hspace{1.1cm} = \hspace{0.15cm}x \cdot \big [x^2 + (\alpha^2 + \alpha^4) \cdot x + \alpha^6\big ] =\] \[ \hspace{1.1cm} = \hspace{0.15cm} 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 = α2 und x = α4, wie die folgende Kontrollrechnung zeigt:

\[{\it \Lambda}(x = \alpha^2)\hspace{-0.15cm} = \hspace{-0.15cm} 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)\hspace{-0.15cm} = \hspace{-0.15cm} 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}.\]











Quellenverzeichnis

  1. Peterson, W.W: Encoding and Error-correction Procedures for the Bose-Chaudhuri codes. IRE Transactions on Information Theory , IT-6:459{470), 1960.