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

Aus LNTwww
Wechseln zu:Navigation, Suche
Zeile 71: Zeile 71:
 
Diese Decodierprinzipien werden auf der nächsten Seite ausführlicher behandelt.<br>
 
Diese Decodierprinzipien werden auf der nächsten Seite ausführlicher behandelt.<br>
  
 +
== Mögliche Codewortschätzer: HD–MLD bzw. BDD (2) ==
 +
<br>
 +
Aufgabe des Codewortschätzers (CWS) ist es, das zu <u><i>y</i></u> wahrscheinlichste Codewort <u><i>c</i></u><sub><i>i</i></sub> zu finden und sein Ergebnis <u><i>z</i></u> = <u><i>c</i></u><sub><i>i</i></sub> weiterzugeben. Hierfür gibt es mehrere Möglichkeiten:<br><br>
  
 +
<b>Hard Decision Maximum Likelihood Decoding</b> (HD&ndash;MLD):<br>
  
 +
Man wählt von allen möglichen Reed&ndash;Solomon&ndash;Codeworten <u><i>c</i></u><sub><i>i</i></sub> (hiervon gibt es insgesamt <i>q<sup>k</sup></i>) dasjenige mit der geringsten Hamming&ndash;Distanz zum Empfangswort <u><i>y</i></u> aus. Somit lautet das Ergebnis:
  
 +
:<math>\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}.</math>
  
 +
Die Entscheidung passiert hier auf der maximalen Rückschlusswahrscheinlichkeit Pr(<u><i>c</i></u><sub><i>i </i></sub>|<sub> </sub><u><i>y</i></u>) und führt zum bestmöglichen Ergebnis. Näheres siehe Kapitel 1.2. Es wird stets entschieden, selbst wenn die Anzahl  <i>r</i> der Symbolfehler größer ist als die Korrekturfähigkeit <i>t</i> des Codes. In einem solchen Fall ist allerdings das Decodierergebnis sehr unsicher.<br>
  
 +
Es sei nochmals erwähnt, dass bei ML&ndash;Decodierung immer entschieden wird. Ein Decodierversagen ist ausgeschlossen. Aber natürlich gibt es auch falsche Entscheidungen.<br><br>
  
 +
<b>Bounded Distance Decoding</b> (BDD):<br>
  
 +
Falls die Anzahl <i>r</i> der Symbolfehler im Empfangswort <u><i>y</i></u> nicht größer ist als die Korrekturfähigkeit <i>t</i> = &lfloor;(<i>d</i><sub>min</Sub> &ndash; 1)/2&rfloor; des Codes, kann man die <i>r</i> Symbolfehler vollständig korrigieren. Der Fall <i>r</i> > <i>t</i> 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 <i>t</i> liegen. Andere werden als undecodierbar markiert, zum Beispiel als <i>Erasure</i>.<br><br>
  
 +
<b>Decodierung über die halbe Mindestdistanz</b>:<br>
  
 +
Hier wird auch im Fall <i>r</i> > <i>t</i> versucht, das Codewort zu decodieren. Im Gegensatz zu HD&ndash;MLD, das ebenfalls über die halbe Mindestdistanz hinaus decodiert, ist hier aber ein Decodierversagen nicht per se ausgeschlossen.<br>
  
 +
Für den Rest dieses Kapitels beschäftigen wir uns ausschließlich mit <i>Bounded Distance Decoding</i>. Der Grund hierfür ist die enorme Komplexität der <i>Maximum Likelihood Detection</i> proportional zu <i>q</i><sup><i>n</i>&ndash;<i>k</i>.<br>
  
 +
== Vorgehensweise beim „Bounded Distance Decoding” ==
 +
<br>
 +
Im Folgenden werden die einzelnen Schritte des BDD&ndash;Algorithmuses kurz und rezeptartig beschrieben. Auf den nächsten Seiten werden dann die einzelnen Punkte genauer behandelt und die Vorgehensweise an typischen Beispielen verdeutlicht.<br>
  
 +
(A) Berechne das Syndrom <u><i>s</i></u> = <u><i>y</i></u> &middot; <b>H</b><sup>T</sup>:
 +
*Ergibt sich aus dem Empfangswort <u><i>y</i></u> und der Prüfmatrix <b>H</b> des Codes das Syndrom <u><i>s</i></u> = <u>0</u>, so setze den BDD&ndash;Ausgang <u><i>z</i></u> = <u><i>y</i></u> und beende den Decodiervorgang für dieses Empfangswort.<br>
  
 +
*Andernfalls setze den Parameter <i>r</i> = 1 und mache mit Schritt (B) weiter.<br><br>
 +
 +
(B) Bestimme die tatsächliche Symbolfehleranzahl <i>r</i>:
 +
*Erstelle und überprüfe die Gleichungen <u><i>&Lambda;</i></u><sub><i>l</i></sub> &middot; <u><i>s</i></u><sup>T</sup> = 0 für <i>l</i> = 1, ..., 2<i>t</i>&ndash;<i>r</i> unter der Annahme, dass das Empfangswort genau <i>r</i> Symbolfehler beinhaltet.<br>
 +
 +
*<u><i>&Lambda;</i></u><sub><i>l</i></sub> bezeichnet die verallgemeinerten ELP&ndash;Koeffizientenvektoren und <i>t</i> die Korrekturfähigkeit des Codes. Für die Reed&ndash;Solomon&ndash;Codes gilt einheitlich <i>t</i> = &lfloor;(<i>n</i> &ndash; <i>k</i>)/2&rfloor;.<br>
 +
 +
*Gibt es eine eindeutige Lösung, dann mache mit Schritt (C) weiter. Im Empfangsvektor <u><i>y</i></u> sind dann tatsächlich genau <i>r</i> Symbole verfälscht und im Fehlervektor <u><i>e</i></u> gibt es <i>r</i> Einträge ungleich 0.<br>
 +
 +
*Andernfalls erhöhe <i>r</i> um 1. Falls <i>r</i> &#8804; <i>t</i>, dann wiederhole Schritt (B) von Beginn an: Das bisher angenommene <i>r</i> war offensichtlich zu klein. Deshalb nun ein neuer Versuch mit größerem <i>r</i>.<br>
 +
 +
*Ist das neue <i>r</i> größer als die Korrekturfähigkeit <i>t</i> des Codes, so kann das aktuelle Empfangswort nicht decodiert werden. Beende den Decodierversuch mit einer Fehlermeldung.<br><br>
 +
 +
(C) Lokalisiere die <i>r</i> Fehlerpositionen:
 +
*Erstelle das <i>Error Locator Polynom</i> <i>&Lambda;</i>(<i>x</i>) und finde dessen <i>r</i> Nullstellen in GF(<i>q</i>)&nbsp;\&nbsp;{0}.<br>
 +
 +
*Ein Fehler an der Stelle <i>i</i> liegt immer dann vor, wenn <i>&Lambda;</i>(<i>&alpha;<sup>i</sup></i>) = 0 ist.<br><br>
 +
 +
(D) Bestimme die <i>r</i> Fehlerwerte <i>e<sub>i</sub></i> &ne; 0:
 +
*Bekannt sind die <i>r</i> Fehlerstellen. Ersetzt man im Empfangsvektor <u><i>y</i></u> die falschen Symbole durch Auslöschungen &nbsp;&#8658;&nbsp; <i>y<sub>i</sub></i> = E, falls <i>e<sub>i</sub></i> &ne; 0, so findet man das Ergebnis <u><i>z</i></u> entsprechend Kapitel 2.4.<br>
 +
 +
*Eine Alternative: Aus der Gleichung <u><i>e</i></u> &middot; <b>H</b><sup>T</sup> = <u><i>s</i></u> kommt man unter Ausnutzung der fehlerfreien Stellen (<i>e<sub>i</sub></i> = 0) zu einem linearen Gleichungssystem für die fehlerhaften Symbole (<i>e<sub>i</sub></i> &ne; 0).<br><br>
  
  

Version vom 14. Januar 2017, 19:06 Uhr

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).