Kanalcodierung/Fehlerkorrektur nach Reed–Solomon–Codierung: Unterschied zwischen den Versionen
Zeile 147: | Zeile 147: | ||
== Schritt (A): Auswertung des Syndroms beim BDD == | == Schritt (A): Auswertung des Syndroms beim BDD == | ||
<br> | <br> | ||
− | Wie im Abschnitt [[Kanalcodierung/Decodierung_linearer_Blockcodes#Prinzip_der_Syndromdecodierung|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: | + | Wie im Abschnitt [[Kanalcodierung/Decodierung_linearer_Blockcodes#Prinzip_der_Syndromdecodierung|Prinzip der Syndromdecodierung]] gezeigt wurde, 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: | ||
::<math>\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H }}^{\rm T}= | ::<math>\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H }}^{\rm T}= | ||
Zeile 154: | Zeile 156: | ||
\hspace{0.05cm}.</math> | \hspace{0.05cm}.</math> | ||
− | 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: | + | 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.<br> | + | *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.<br> |
− | *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.<br><br> | + | *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.<br><br> |
[[Datei:P ID2548 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | [[Datei:P ID2548 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | ||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
$\text{Beispiel 2:}$ | $\text{Beispiel 2:}$ | ||
− | Diesem und den folgenden Beispielen auf den nächsten Seiten liegt stets der Reed–Solomon–Code $\text{RSC (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: | + | Diesem und den folgenden Beispielen auf den nächsten Seiten liegt stets der Reed–Solomon–Code $\text{RSC (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: |
::<math>\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).</math> | ::<math>\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).</math> | ||
− | Mit der [[Kanalcodierung/Definition_und_Eigenschaften_von_Reed%E2%80%93Solomon%E2%80%93Codes#Generatormatrix_und_Pr.C3.BCfmatrix_.282.29| Prüfmatrix]] $\boldsymbol{\rm H }$ ergibt sich für das Syndrom: | + | Mit der [[Kanalcodierung/Definition_und_Eigenschaften_von_Reed%E2%80%93Solomon%E2%80%93Codes#Generatormatrix_und_Pr.C3.BCfmatrix_.282.29| Prüfmatrix]] $\boldsymbol{\rm H }$ ergibt sich für das Syndrom: |
::<math>\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H } }^{\rm T}= | ::<math>\underline {s} = \underline {y} \cdot { \boldsymbol{\rm H } }^{\rm T}= | ||
Zeile 186: | Zeile 188: | ||
(\alpha^5,\alpha^2,\alpha^3,\alpha^1) \hspace{0.05cm}.</math> | (\alpha^5,\alpha^2,\alpha^3,\alpha^1) \hspace{0.05cm}.</math> | ||
− | Das Empfangswort wurde also verfälscht. Andernfalls hätte sich $\underline{e}= \underline{0} = (0, 0, 0, 0)$ ergeben müssen.<br> | + | Das Empfangswort wurde also verfälscht. Andernfalls hätte sich $\underline{e}= \underline{0} = (0, 0, 0, 0)$ ergeben müssen.<br> |
− | Die Beschreibung des Decodiervorgangs beim $\text{RSC (7, 3, 5)}_8$ wird im [[Kanalcodierung/Fehlerkorrektur_nach_Reed–Solomon–Codierung#Schritt_.28B.29:_Aufstellen.2FAuswerten_des_ELP.E2.80.93Koeffizientenvektors|$\text{Beispiel 4}$]] fortgesetzt.}}<br> | + | Die Beschreibung des Decodiervorgangs beim $\text{RSC (7, 3, 5)}_8$ wird im [[Kanalcodierung/Fehlerkorrektur_nach_Reed–Solomon–Codierung#Schritt_.28B.29:_Aufstellen.2FAuswerten_des_ELP.E2.80.93Koeffizientenvektors|$\text{Beispiel 4}$]] fortgesetzt.}}<br> |
== Error Locator Polynom – Definition und Eigenschaften == | == Error Locator Polynom – Definition und Eigenschaften == | ||
<br> | <br> | ||
− | Nach der Syndromberechnung im Schritt $\rm (A)$ mit dem Ergebnis $\underline{s} \ne \underline{0}$ wissen wir, | + | Nach der Syndromberechnung im Schritt $\rm (A)$ mit dem Ergebnis $\underline{s} \ne \underline{0}$ wissen wir, |
− | *dass das Empfangswort $\underline{y}$ nicht mit dem Codewort $\underline{c}$ übereinstimmt, bzw.<br> | + | *dass das Empfangswort $\underline{y}$ nicht mit dem Codewort $\underline{c}$ übereinstimmt, bzw.<br> |
− | *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.<br><br> | + | *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.<br><br> |
− | 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.<br> | + | 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.<br> |
− | Einen Lösungsansatz für diese Aufgabe bietet das <i>Error Locator Polynom</i>, das von [https://de.wikipedia.org/wiki/W._Wesley_Peterson William Wesley Peterson] eingeführt wurde | + | Einen Lösungsansatz für diese Aufgabe bietet das so genannte <i>Error Locator Polynom</i>, das von [https://de.wikipedia.org/wiki/W._Wesley_Peterson William Wesley Peterson] eingeführt wurde ⇒ siehe [Pet60]<ref name =''Pet60>Peterson, W.W: ''Encoding and Error-correction Procedures for the Bose-Chaudhuri codes.'' IRE Transactions on Information Theory , IT-6:459{470), 1960.</ref>. Im Deutschen ist hierfür auch der Begriff „Schlüsselgleichung” üblich.<br> |
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
− | $\text{Definition:}$ Es sei bekannt, dass genau $r$ Elemente des Fehlervektors $\underline{e}$ ungleich Null sind, erkennbar am [[Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung|Hamming–Gewicht]] $w_{\rm H}(\underline{e}) = r$. Ebenfalls bekannt sei die Menge ${I}_{\rm FP}$ der Fehlerpositionen: | + | $\text{Definition:}$ Es sei bekannt, dass genau $r$ Elemente des Fehlervektors $\underline{e}$ ungleich Null sind, erkennbar am [[Kanalcodierung/Zielsetzung_der_Kanalcodierung#Einige_wichtige_Definitionen_zur_Blockcodierung|Hamming–Gewicht]] $w_{\rm H}(\underline{e}) = r$. |
+ | *Ebenfalls bekannt sei die Menge ${I}_{\rm FP}$ der Fehlerpositionen: | ||
::<math>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}.</math> | ::<math>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}.</math> | ||
− | Dann gilt für das '''Error Locator Polynom''' (ELP): | + | *Dann gilt für das '''Error Locator Polynom''' $\rm (ELP)$: |
::<math>{\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 ].</math>}}<br> | ::<math>{\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 ].</math>}}<br> | ||
− | Vom <i>Error Locator Polynom</i> wissen wir aufgrund der Definition: | + | Vom <i>Error Locator Polynom</i> wissen wir aufgrund der Definition: |
− | *Wegen des Faktors $x$ vor dem Produktzeichen ist ${\it \Lambda}(x= 0) = 0$.<br> | + | *Wegen des Faktors $x$ vor dem Produktzeichen ist ${\it \Lambda}(x= 0) = 0$.<br> |
− | *Weitere $r$ Nullstellen ergeben sich für $x = \alpha^{i}$ mit $i \in I_{\rm FP}$, das heißt, für alle Fehlerpositionen.<br> | + | *Weitere $r$ Nullstellen ergeben sich für $x = \alpha^{i}$ mit $i \in I_{\rm FP}$, das heißt, für alle Fehlerpositionen.<br> |
− | *Dagegen ergibt das <i>Error Locator Polynom</i> für $i ∉ I_{\rm FP}$ ⇒ $e_i = 0$ keine Nullstelle: ${\it \Lambda}(x= \alpha^{i}) \ne0$.<br><br> | + | *Dagegen ergibt das <i>Error Locator Polynom</i> für $i ∉ I_{\rm FP}$ ⇒ $e_i = 0$ keine Nullstelle: ${\it \Lambda}(x= \alpha^{i}) \ne0$.<br><br> |
− | 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)$.<br> | + | 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)$.<br> |
[[Datei:P ID2549 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | [[Datei:P ID2549 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | ||
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
$\text{Beispiel 3:}$ | $\text{Beispiel 3:}$ | ||
− | Es gelte $n=7$ ⇒ $q=8$, $r=2$ und $I_{\rm FP} = \{2, \hspace{0.05cm}4\}$: [[Datei:P ID2551 KC T 2 5 S5a.png]]<br> | + | Es gelte $n=7$ ⇒ $q=8$, $r=2$ und $I_{\rm FP} = \{2, \hspace{0.05cm}4\}$: [[Datei:P ID2551 KC T 2 5 S5a.png]]<br> |
− | Damit erhält man für das <i>Error Locator Poynom</i> aus ${\rm GF}(2^3)$: | + | Damit erhält man für das <i>Error Locator Poynom</i> aus ${\rm GF}(2^3)$: |
::<math>{\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 ] </math> | ::<math>{\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 ] </math> | ||
::<math>\Rightarrow \hspace{0.3cm} {\it \Lambda}(x)= x \cdot \big [\alpha^6 + \alpha \cdot x + x^2\big ]\hspace{0.05cm}.</math> | ::<math>\Rightarrow \hspace{0.3cm} {\it \Lambda}(x)= x \cdot \big [\alpha^6 + \alpha \cdot x + x^2\big ]\hspace{0.05cm}.</math> | ||
− | Die | + | Die weiteren Nullstellen $($außer bei $x = 0)$ ergeben sich hier natürlich für $x = \alpha^2$ und $x = \alpha^4$, wie eine Kontrollrechnung zeigt: |
::<math>{\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},</math> | ::<math>{\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},</math> | ||
::<math> {\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}.</math>}}<br> | ::<math> {\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}.</math>}}<br> | ||
− | + | Für die weitere Herleitung gehen wir stets vom $\text{RSC (7, 3, 5)}_8$ mit den folgenden Parameterwerten aus: | |
− | Für die weitere Herleitung gehen wir stets vom $\text{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 | + | :$$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})$: | + | 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})$: |
::<math>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},</math> | ::<math>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},</math> | ||
Zeile 246: | Zeile 248: | ||
::<math> 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}.</math> | ::<math> 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}.</math> | ||
− | 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)$: | + | 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)$: |
::<math>\underline {L}^{\rm T}=\begin{pmatrix} | ::<math>\underline {L}^{\rm T}=\begin{pmatrix} | ||
Zeile 274: | Zeile 276: | ||
\hspace{0.05cm}.</math> | \hspace{0.05cm}.</math> | ||
− | 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: | + | 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: | ||
::<math>\underline {L}^{\rm T} | ::<math>\underline {L}^{\rm T} | ||
Zeile 296: | Zeile 300: | ||
Damit haben wir erreicht: | Damit haben wir erreicht: | ||
− | *Aus der $7× 3$–Matrix wurde nun eine $7× 4$–Matrix. | + | *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. | *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 [[Kanalcodierung/Definition_und_Eigenschaften_von_Reed%E2%80%93Solomon%E2%80%93Codes#Generatormatrix_und_Pr.C3.BCfmatrix| Prüfmatrix]] des $\text{RSC (7, 3, 5)}_8$. | + | *Durch die hier gewählte Ergänzung erhält man die transponierte [[Kanalcodierung/Definition_und_Eigenschaften_von_Reed%E2%80%93Solomon%E2%80%93Codes#Generatormatrix_und_Pr.C3.BCfmatrix| Prüfmatrix]] des $\text{RSC (7, 3, 5)}_8$. |
* Somit kann man für die letzte Vektorgleichung schreiben: | * Somit kann man für die letzte Vektorgleichung schreiben: | ||
Zeile 305: | Zeile 309: | ||
\hspace{0.05cm}.</math> | \hspace{0.05cm}.</math> | ||
− | 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 <i>Error Locator Polynoms</i>: | + | 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 <i>Error Locator Polynoms</i>: |
::<math>\underline {L}^{\rm T} \cdot \underline {e}^{\rm T} = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} | ::<math>\underline {L}^{\rm T} \cdot \underline {e}^{\rm T} = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} | ||
Zeile 315: | Zeile 319: | ||
$\text{Wichtiges Zwischenergebnis:}$ | $\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. | + | 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 | + | *Hierbei bezeichnet $\underline {\it \Lambda }$ den $\rm ELP-Koeffizientenvektor$. |
− | * $\underline {s } = \underline {y }\cdot \boldsymbol{\rm H }^{\rm T} $ gibt das [[Kanalcodierung/Fehlerkorrektur_nach_Reed%E2%80%93Solomon%E2%80%93Codierung#Schritt_.28A.29:_Auswertung_des_Syndroms_beim_BDD| Syndrom]] an.}}<br> | + | * $\underline {s } = \underline {y }\cdot \boldsymbol{\rm H }^{\rm T} $ gibt das [[Kanalcodierung/Fehlerkorrektur_nach_Reed%E2%80%93Solomon%E2%80%93Codierung#Schritt_.28A.29:_Auswertung_des_Syndroms_beim_BDD| Syndrom]] an.}}<br> |
== Schritt (B): Aufstellen/Auswerten des ELP–Koeffizientenvektors == | == Schritt (B): Aufstellen/Auswerten des ELP–Koeffizientenvektors == | ||
<br> | <br> | ||
− | Bevor wir dieses Zwischenergebnis für den Schritt $\rm (B)$ berücksichtigen können, müssen noch einige Verallgemeinerungen vorgenommen werden. Der Grund hierfür ist: | + | Bevor wir dieses Zwischenergebnis für den Schritt $\rm (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.<br> | + | *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 einziges Symbol verfälscht wurde.<br> |
− | *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.<br><br> | + | *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.<br><br> |
− | Die Eigenschaft des [[Kanalcodierung/Fehlerkorrektur_nach_Reed–Solomon–Codierung#Error_Locator_Polynom_.E2.80.93_Definition_und_Eigenschaften|''Error Locator Polynoms'']], dass ${\it \Lambda}(\alpha^{i})$ nur für $e_i ≠ 0$ ( | + | Die Eigenschaft des [[Kanalcodierung/Fehlerkorrektur_nach_Reed–Solomon–Codierung#Error_Locator_Polynom_.E2.80.93_Definition_und_Eigenschaften|''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.<br> |
[[Datei:P ID2550 KC T 2 5 S3 v1.png|center|frame|Verschobene ELP–Koeffizientenvektoren|class=fit]] | [[Datei:P ID2550 KC T 2 5 S3 v1.png|center|frame|Verschobene ELP–Koeffizientenvektoren|class=fit]] | ||
Zeile 332: | Zeile 336: | ||
{{BlaueBox|TEXT= | {{BlaueBox|TEXT= | ||
$\text{Definition:}$ | $\text{Definition:}$ | ||
− | Die | + | Die $\text{verallgemeinerten ELP–Koeffizientenvektoren}$ $\underline {\it \Lambda }_l$ ergeben sich durch sukzessive Verschiebungen gegenüber $\underline {\it \Lambda }_l$: |
::<math>{\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}.</math> | ::<math>{\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}.</math> | ||
− | In dieser Definitionsgleichung entspricht $\underline {\it \Lambda }_1$ dem bisherigen $\underline {\it \Lambda }$.}} | + | 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 | + | 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=1$ im linken Bereich (mit blauer Hinterlegung), | ||
*$r=2$ im mittleren Bereich (mit roter Hinterlegung), | *$r=2$ im mittleren Bereich (mit roter Hinterlegung), | ||
Zeile 346: | Zeile 350: | ||
Man erkennt: | 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.<br> | + | *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.<br> |
− | *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$.<br> | + | *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$.<br> |
− | *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.<br> | + | *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.<br> |
− | *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.<br> | + | *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.<br> |
− | *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.<br> | + | *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.<br> |
{{GraueBox|TEXT= | {{GraueBox|TEXT= | ||
− | $\text{Beispiel 4:}$ Es gelten weiterhin die im [[Kanalcodierung/Fehlerkorrektur_nach_Reed%E2%80%93Solomon%E2%80%93Codierung#Schritt_.28A.29:_Auswertung_des_Syndroms_beim_BDD| $\text{Beispiel 2}$]] genannten Voraussetzungen: | + | $\text{Beispiel 4:}$ Es gelten weiterhin die im [[Kanalcodierung/Fehlerkorrektur_nach_Reed%E2%80%93Solomon%E2%80%93Codierung#Schritt_.28A.29:_Auswertung_des_Syndroms_beim_BDD| $\text{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}$. | + | *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$.<br> | + | *Nicht bekannt ist allerdings die tatsächliche Symbolfehleranzahl $r$.<br> |
− | Unter der Annahme eines einzigen falschen Symbols $(r= 1)$ erhält man folgendes Gleichungssystem (hier in Matrixform geschrieben): | + | Unter der Annahme eines einzigen falschen Symbols $(r= 1)$ erhält man folgendes Gleichungssystem (hier in Matrixform geschrieben): |
[[Datei:P ID2556 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | [[Datei:P ID2556 KC T 2 5 Darstellung v1.png|right|frame|$\rm GF(2^3)$–Darstellungen]] | ||
Zeile 385: | Zeile 389: | ||
\hspace{0.05cm}.</math> | \hspace{0.05cm}.</math> | ||
− | Dieses Gleichungssystem liefert drei unterschiedliche Lösungen für $\lambda_0$, was nicht zielführend ist:<br> | + | Dieses Gleichungssystem liefert drei unterschiedliche Lösungen für $\lambda_0$, was nicht zielführend ist:<br> |
::<math>\text{Zeile 1:}\hspace{0.5cm}\alpha^5 \cdot \lambda_0 + \alpha^2 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} | ::<math>\text{Zeile 1:}\hspace{0.5cm}\alpha^5 \cdot \lambda_0 + \alpha^2 = 0 \hspace{0.3cm} \Rightarrow \hspace{0.3cm} | ||
Zeile 394: | Zeile 398: | ||
\lambda_0 = \alpha^{1-3}= \alpha^{-2} = \alpha^{5} \hspace{0.05cm}.</math> | \lambda_0 = \alpha^{1-3}= \alpha^{-2} = \alpha^{5} \hspace{0.05cm}.</math> | ||
− | Deshalb stellen wir nun ein weiteres Gleichungssystem auf, und zwar unter der Annahme $r = 2$: | + | Deshalb stellen wir nun ein weiteres Gleichungssystem auf, und zwar unter der Annahme $r = 2$: |
::<math>\big ({ \boldsymbol{\it \Lambda } }_l \big) \cdot \underline {s} ^{\rm T}= | ::<math>\big ({ \boldsymbol{\it \Lambda } }_l \big) \cdot \underline {s} ^{\rm T}= | ||
Zeile 412: | Zeile 416: | ||
\end{pmatrix}\hspace{0.05cm}. </math> | \end{pmatrix}\hspace{0.05cm}. </math> | ||
− | Dies führt zu zwei Gleichungen für $\lambda_0$ und $\lambda_1$: | + | Dies führt zu zwei Gleichungen für $\lambda_0$ und $\lambda_1$: |
::<math>\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 = 0 \hspace{0.05cm}.</math> | ::<math>\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 = 0 \hspace{0.05cm}.</math> | ||
− | Dieses Gleichungssystem ist nun eindeutig lösbar. Man erhält $\lambda_0 = \alpha^2$ und $\lambda_1 = \alpha^6$. Das bedeutet: | + | 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.<br> | + | *Die Annahme, dass tatsächlich $r = 2$ Positionen des Empfangsvektors $\underline {y}$ verfälscht wurden, ist richtig.<br> |
− | *Man weiß aber noch nicht, welche Positionen verfälscht wurden. Soviel vorneweg: | + | *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 $\text{Beispiel 5}$ (nächste Seite) gezeigt wird.}}<br> | + | *Es sind nicht die Symbolpositionen 2 und 6, sondern die Positionen 0 und 2, wie im folgenden $\text{Beispiel 5}$ (nächste Seite) gezeigt wird.}}<br> |
Version vom 24. Mai 2019, 17:17 Uhr
Inhaltsverzeichnis
- 1 Blockschaltbild und Voraussetzungen zur RS–Fehlerkorrektur
- 2 Mögliche Codewortschätzer für die RS–Decodierung
- 3 Vorgehensweise beim „Bounded Distance Decoding”
- 4 Schritt (A): Auswertung des Syndroms beim BDD
- 5 Error Locator Polynom – Definition und Eigenschaften
- 6 Schritt (B): Aufstellen/Auswerten des ELP–Koeffizientenvektors
- 7 Schritt (C): Lokalisierung der Fehlerstellen
- 8 Schritt (D): Abschließende Fehlerkorrektur
- 9 Schnelle Reed–Solomon–Decodierung
- 10 Aufgaben zum Kapitel
- 11 Quellenverzeichnis
Blockschaltbild und Voraussetzungen zur RS–Fehlerkorrektur
Wie im Kapitel Decodierung beim Auslöschungskanal 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}\text{...} \hspace{0.05cm}, u_i, \hspace{0.05cm}\text{...} \hspace{0.05cm}, u_{k-1})\hspace{0.05cm}, \hspace{0.2cm} \underline {c} = (c_0, c_1, \hspace{0.05cm}\text{...} \hspace{0.05cm}, c_i, \hspace{0.05cm}\text{...} \hspace{0.05cm}, c_{n-1}) \hspace{0.05cm}.\]
Die Informationssymbole $u_i$ und auch die Codesymbole $C_i$ entstammen dem Körper ${\rm GF}(q)$ mit $q=n+1=2^m$; sie sind durch $m$ Binärsymbole (Bit) darstellbar.
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 bezü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 $\rm (CWF)$ war es, 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})$ war beim BEC ausgeschlossen.
- In diesem Kapitel wird nun der erste Decoderblock als Codewortschätzer $\rm (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 mehrere Symbolfehler das Empfangswort $\underline {y}$ zu einem gültigen Codewort verfälschen.
$\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. Exakter formuliert:
- \[{ \rm Pr(Blockfehler)} = { \rm Pr}( \underline{v} \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}.\]
Die zwei gelb hinterlegten Blöcke werden im Folgenden nicht weiter betrachtet. Im Mittelpunkt der Betrachtungen steht nun der rot hinterlegte Codewortschätzer $\rm (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.
Diese Aufgabenstellung soll durch ein Beispiel verdeutlicht werden.
$\text{Beispiel 1:}$ Alle Symbole seien 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 $\rm (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. Hierzu gibt es verschiedene Möglichkeiten:
- Hard Decision Maximum Likelihood Decoding $\text{(HD–MLD)}$,
- Bounded Distance Decoding $\text{(BDD)}$,
- Decodierung über die halbe Mindestdistanz.
Diese Decodierprinzipien werden im Folgenden beschrieben.
Hard Decision Maximum Likelihood Decoding $\text{(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{c}_{\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 $\text{(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 hin decodiert, die in einer Kugel um diesen mit Radius $t$ liegen.
- Andere Empfangsworte 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 $\text{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 Decoding 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.
$\rm (A)$ $\text{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 $\rm (B)$ weiter.
$\rm (B)$ $\text{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 $\text{ELP}$–Koeffizientenvektoren, wobei „$\text{ELP}$” für Error Locator Polynom steht, und $t$ die Korrekturfähigkeit des Codes angibt.
Für die Reed–Solomon–Codes gilt einheitlich $t = ⌊(n-k)/2 ⌋$.
- Gibt es eine eindeutige Lösung, dann mache mit Schritt $\rm (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 $\rm (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.
$\rm (C)$ $\text{Lokalisierung der }r \text{ 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^{i}) = 0$ ist.
$\rm (D)$ $\text{Bestimmung der }r \text{ 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 wurde, 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.
$\text{Beispiel 2:}$ Diesem und den folgenden Beispielen auf den nächsten Seiten liegt stets der Reed–Solomon–Code $\text{RSC (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}. \]
Diese Vektor–Matrix–Multiplikationen liefert das Ergebnis:
- \[\underline {s} \hspace{-0.05cm} = \hspace{-0.05cm} (\alpha^3 , \alpha^3 , \alpha^3 , \alpha^3) + (\alpha^1 , \alpha^2 , \alpha^3 , \alpha^4) + (0,0,0,0) \hspace{-0.05cm}+\hspace{-0.05cm} (\alpha^4,1,\alpha^3,\alpha^6)+(\alpha^6,\alpha^3,1,\alpha^4)\hspace{-0.05cm}+\hspace{-0.05cm}(\alpha^3,\alpha^1,\alpha^6,\alpha^4) \hspace{-0.05cm}+\hspace{-0.05cm} (\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 $\text{RSC (7, 3, 5)}_8$ wird im $\text{Beispiel 4}$ fortgesetzt.
Error Locator Polynom – Definition und Eigenschaften
Nach der Syndromberechnung im Schritt $\rm (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 so genannte 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 $\rm (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)$.
$\text{Beispiel 3:}$
Es gelte $n=7$ ⇒ $q=8$, $r=2$ und $I_{\rm FP} = \{2, \hspace{0.05cm}4\}$:
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 weiteren Nullstellen $($außer bei $x = 0)$ ergeben sich hier natürlich für $x = \alpha^2$ und $x = \alpha^4$, wie eine 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 $\text{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 $\text{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 $\rm ELP-Koeffizientenvektor$.
- $\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 $\rm (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 einziges 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.
$\text{Definition:}$ Die $\text{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 $\text{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):
- \[\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}\hspace{0.05cm}. \]
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 = 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 $\text{Beispiel 5}$ (nächste Seite) gezeigt wird.
Schritt (C): Lokalisierung der Fehlerstellen
Nach Abarbeitung von Schritt $\rm(B)$ sind bekannt:
- die Anzahl $r$ der Fehlerstellen $e_i ≠ 0$ im Vektor $\underline {e} = (e_0, \hspace{0.05cm}\text{... }\hspace{0.05cm}, e_i, \hspace{0.05cm}\text{... }\hspace{0.05cm}, e_{n-1})$,
- die Koeffizienten $\lambda_0, \hspace{0.05cm}\text{... }\hspace{0.05cm} , \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 $\text{Beispiel 4}$ wurde entsprechend den in $\text{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 folgendes 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}.\]
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 $\text{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 $\rm (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.
$\text{Beispiel 6:}$ Wir betrachten wieder den $\text{RSC (7, 3, 5)}_8$. Im $\text{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 $\text{Beispiel 5}$ lautet der Fehlervektor $\underline {e} = (e_0, 0, e_2, 0, 0, 0, 0)$.
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}.\]
Alle 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 $\text{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 $\text{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. Es war zu erkennen, dass schon 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 $\text{RSC (255, 223, 33)}_{256}$, der schon früh im ESA/NASA–Standard zur Satellitenübertragung genannt wurde, zur Decodierng eines einzigen Codewortes 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 $\rm (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 $\rm (BMA)$. Genauere Informationen finden Sie wieder in [Bos98][4] und [Fri96][3].
- Weitere effiziente Decodiermethoden von Reed–Solomon–Codes arbeiten im Frequenzbereich unter Verwendung der Diskreten Fouriertransformation $\rm (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
Aufgabe 2.12: Decodierung beim RSC (7, 4, 4) zur Basis 8
Aufgabe 2.12Z: Reed–Solomon–Syndromberechnung
Aufgabe 2.13: Decodierung beim RSC (7, 3, 5) zur Basis 8
Aufgabe 2.14: Petersen–Algorithmus
Quellenverzeichnis
- ↑ Reed, I.S.; Solomon, G.: Polynomial Codes over Certain Finite Fields. J. Siam, Vol. 8, pp. 300–304, 1960.
- ↑ Massey, J.L.: Shift Register Synthesis and BCH Decoding.. IEEE Trans. on Information Theory, vol. IT-15, pp. 122–127, Jan. 1969.
- ↑ 3,0 3,1 Friedrichs, B.: Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen. Berlin – Heidelberg: Springer, 1996.
- ↑ 4,0 4,1 Bossert, M.: Kanalcodierung. Stuttgart: B. G. Teubner, 1998.
- ↑ 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.