Kanalcodierung/Definition und Eigenschaften von Reed–Solomon–Codes: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
Zeile 70: Zeile 70:
 
[[Datei:P ID2517 KC T 2 3 S1b v3.png|GF(2<sup>2</sup>) in Exponenten–, Polynom– und Koeffizientenform |class=fit]]<br>
 
[[Datei:P ID2517 KC T 2 3 S1b v3.png|GF(2<sup>2</sup>) in Exponenten–, Polynom– und Koeffizientenform |class=fit]]<br>
  
Der Koeffizientenvektor wird durch das Polynom <i>u</i>(<i>x</i>) = <i>u</i><sub>0</sub> + <i>u<sub>i</sub></i> &middot; <i>x</i> ausgedrückt. Der Polynomgrad ist <nobr><i>k</i> &ndash; 1 = 1.</nobr> Für <i>u</i><sub>0</sub> = <i>&alpha;</i><sup>1</sup> und <i>u</i><sub>1</sub> = <i>&alpha;</i><sup>2</sup> erhält man beispielsweise das Polynom <i>u</i>(<i>x</i>)&nbsp;=&nbsp;<i>&alpha;</i>&nbsp;+&nbsp;<i>&alpha;</i><sup>2</sup>&nbsp;&middot;&nbsp;<i>x</i> und damit
+
Der Koeffizientenvektor wird durch das Polynom <i>u</i>(<i>x</i>) = <i>u</i><sub>0</sub> + <i>u<sub>i</sub></i> &middot; <i>x</i> ausgedrückt. Der Polynomgrad ist <i>k</i> &ndash; 1 = 1. Für <i>u</i><sub>0</sub> = <i>&alpha;</i><sup>1</sup> und <i>u</i><sub>1</sub> = <i>&alpha;</i><sup>2</sup> erhält man beispielsweise das Polynom <i>u</i>(<i>x</i>)&nbsp;=&nbsp;<i>&alpha;</i>&nbsp;+&nbsp;<i>&alpha;</i><sup>2</sup>&nbsp;&middot;&nbsp;<i>x</i> und damit
  
 
:<math>c_0 \hspace{-0.15cm}  =  \hspace{-0.15cm} u (x = \alpha^0) = u (x = 1) =  \alpha + \alpha^2 \cdot 1 = \alpha + (\alpha + 1) =1 \hspace{0.05cm},</math>
 
:<math>c_0 \hspace{-0.15cm}  =  \hspace{-0.15cm} u (x = \alpha^0) = u (x = 1) =  \alpha + \alpha^2 \cdot 1 = \alpha + (\alpha + 1) =1 \hspace{0.05cm},</math>
Zeile 222: Zeile 222:
 
::<math> \hspace{0.15cm}  =  \hspace{0.15cm} 1 + \alpha^6 + \alpha^5 + \alpha^{4} + \alpha^{3}+ \alpha^{2}+ \alpha^{1} =0 \hspace{0.05cm}.</math>{{end}}<br>
 
::<math> \hspace{0.15cm}  =  \hspace{0.15cm} 1 + \alpha^6 + \alpha^5 + \alpha^{4} + \alpha^{3}+ \alpha^{2}+ \alpha^{1} =0 \hspace{0.05cm}.</math>{{end}}<br>
  
 +
== Singleton–Schranke und minimale Distanz ==
 +
<br>
 +
Eine wichtige Kenngröße eines jeden Blockcodes ist die minimale  Distanz zwischen zwei beliebigen Codeworten <u><i>c</i></u><sub><i>i</i></sub> und <u><i>c</i></u><sub><i>j</i></sub>. Die Reed&ndash;Solomon&ndash;Codes gehören zur Klasse der <i>linearen</i> und <i>zyklischen</i> Codes. Bei diesen kann man vom Nullwort <u><i>c</i></u><sub>0</sub> = (0 0 ... 0) als Bezugsgröße ausgehen. Aus der Anzahl der Nullen in den anderen Codeworten <u><i>c</i></u><sub><i>j</i></sub> &ne; <u><i>c</i></u><sub>0</sub> lässt sich das Distanzspektrum {<i>W<sub>i</sub></i>} angeben.<br>
 +
 +
{{Beispiel}}''':''' Die Grafik zeigt die Bestimmung des Distanzspektrums für den RSC (3, 2, 2)<sub>4</sub>. Gegenüber den bisherigen Grafiken sind die Symbole mit 0, 1, 2, 3 anstelle von 0, <i>&alpha;</i><sup>0</sup>,  <i>&alpha;</i><sup>1</sup>, <i>&alpha;</i><sup>2</sup> bezeichnet. Die Distanz <i>d</i>  zwischen <u><i>c</i></u><sub><i>j</i></Sub> und dem Nullwort <u><i>c</i></u><sub>0</sub> ist identisch dem Hamming&ndash;Gewicht <i>w</i><sub>H</sub> (<u><i>c</i></u><sub><i>j</i></sub>).<br>
 +
 +
[[Datei:P ID2520 KC T 2 3 S3 v1.png|Zur Herleitung des Distanzspektrums für den RSC (3, 2, 2)<sub>4</sub>|class=fit]]<br>
  
 +
Neun der Codeworte unterscheiden sich vom Nullwort in zwei Symbolen und sechs Codeworte in drei Symbolen: <i>W</i><sub>2</Sub> = 9, <i>W</i><sub>3</Sub> = 6. Es gibt kein einziges Codewort mit nur einer Null. Das heißt: Die minimale Distanz beträgt hier <i>d</i><sub>min</sub> = 2. <br>
  
 +
Aus der zweiten Tabelle erkennt man, dass auch für die Binärdarstellung <i>d</i><sub>min</sub> = 2 gilt.{{end}}<br>
  
 +
Dieses empirische Ergebnis soll nun ohne Beweis verallgemeinert werden:
 +
*Die <i>minimale Distanz</i> eines jeden (<i>n</i>, <i>k</i>)&ndash;Reed&ndash;Solomon&ndash;Codes beträgt <b><i>d</i><sub>min</sub> = <i>n</i> &ndash; <i>k</i> + 1</b>. Damit lassen sich <i>e</i> = <i>d</i><sub>min</sub> &ndash; 1 = <i>n</i> &ndash; <i>k</i> Symbolfehler erkennen.<br>
  
 +
*Bei <i>fehlerkorrigierenden Codes</i> wählt man meist ein <i>d</i><sub>min</sub> ungeradzahlig &#8658;&nbsp; <i>n</i> &ndash; <i>k</i> geradzahlig. Bei RS&ndash;Codes können dann bis zu <i>t</i> = (<i>n</i> &ndash; <i>k</i>)/2 Symbolfehler korrigiert werden.<br>
  
 +
*Die <span style="font-weight: bold;">Singleton&ndash;Schranke</span> besagt, dass für alle linearen Codes <i>d</i><sub>min</sub> &#8804; <i>n</i> &ndash; <i>k</i> + 1 gilt. RS&ndash;Codes erreichen die Schranke mit Gleichheit; sie sind <b>MDS&ndash;Codes</b> (<i>Maximum Distance Separable</i>).
  
 +
*Das Distanzspektrum setzt sich zusammen aus <i>W</i><sub>0</sub> = 1 sowie weiteren Gewichtsfaktoren <i>W<sub>i</sub></i> mit <i>d</i> &#8804; <i>i</i> &#8804; <i>n</i>, wobei in der folgenden Gleichung <i>d</i><sub>min</sub> mit <i>d</i> abgekürzt ist:
  
 +
::<math>W_i =  {n \choose i} \cdot \sum_{j = 0}^{i-d}\hspace{0.15cm}(-1)^j \cdot {i \choose j} \cdot \big  [\hspace{0.03cm}q^{i\hspace{0.03cm}-\hspace{0.03cm}j\hspace{0.03cm}-\hspace{0.03cm}d\hspace{0.03cm}+\hspace{0.03cm}1}-1 \hspace{0.03cm} \big ]\hspace{0.05cm}.</math>
  
 +
== Codebezeichnung und Coderate ==
 +
<br>
 +
Die übliche Bezeichnung für die Reed&ndash;Solomon&ndash;Codes ist &nbsp;<b>RSC&nbsp;(<i>n</i>,&nbsp;<i>k</i>,&nbsp;<i>d</i><sub>min</sub>)<sub><i>q</i></sub></b>&nbsp; mit
 +
*der Länge <i>n</i> des Codes (Symbolanzahl eines Codewortes),<br>
  
 +
*der Dimension <i>k</i> des Codes (Symbolanzahl eines Informationswortes),<br>
  
 +
*der minimalen Distanz <i>d</i><sub>min</sub> = <i>n</i> &ndash; <i>k</i> + 1, maximal entsprechend der Singleton&ndash;Schranke, und<br>
  
 +
*der Größe <i>q</i> = 2<sup><i>m</i></sup> des Galoisfeldes &#8658; GF(<i>q</i>).<br><br>
  
 +
Alle Elemente <i>u<sub>i</sub></i> des Informationswortes <u><i>u</i></u> = (<i>u</i><sub>0</sub>, ..., <i>u<sub>i</sub></i>, ..., <i>u<sub>k</sub></i><sub>&ndash;1</sub>) und alle Elemente <i>c<sub>i</sub></i> des Codewortes <u><i>c</i></u>&nbsp;=&nbsp;(<i>c</i><sub>0</sub>,&nbsp;...,&nbsp;<i>c<sub>i</sub></i>,&nbsp;...,&nbsp;<i>c<sub>n</sub></i><sub>&ndash;1</sub>) sind nicht binäre Symbole und entstammen dem Galoisfeld GF(<i>q</i>).<br>
  
 +
Für die Realisierung werden diese Symbole stets auch binär dargestellt &nbsp;&#8658;&nbsp; <i>u<sub>i</sub></i>, <i>x<sub>i</sub></i> &#8712; GF(2), und man kommt zum äquivalenten binären Code &nbsp;<b>RSC (<i>n</i><sub>bin</sub>, <i>k</i><sub>bin</sub>, <i>d</i><sub>min</sub>)<sub>2</sub> </b>&nbsp; mit
 +
*<i>n</i><sub>bin</sub> = <i>n</i> &middot; <i>m</i> Bit eines Codewortes,<br>
  
 +
*<i>k</i><sub>bin</sub> = <i>k</i> &middot; <i>m</i> Bit eines Informationswortes.<br><br>
  
 +
Die Coderate wird durch diese Maßnahme nicht verändert:
 +
 +
:<math>R = \frac{k}{n}= \frac{k_{\rm bin}}{n_{\rm bin}} = \frac{k \cdot m}{n \cdot m} = \frac{k}{n}
 +
\hspace{0.05cm}.</math>
 +
 +
Ebenso ändert sich durch den Übergang von GF(<i>q</i>) auf GF(2) nichts an der minimalen Distanz <i>d</i><sub>min</sub>.<br>
 +
 +
{{Beispiel}}''':''' Beim RSC (3, 2, 2)<sub>4</sub> ist die Coderate <i>R</i> = <i>k</i>/<i>n</i> = 2/3 und die minimale Distanz <i>d</i><sub>min</sub> = 2. Für das <b>Distanzspektrum</b> {<i>W<sub>i</sub></i>} und die <b>Gewichtsfunktion</b> <i>W</i>(<i>X</i>) gilt nach Kapitel 1.6 (siehe Tabelle):
 +
 +
:<math>W_0 =  1\hspace{0.05cm}, \hspace{0.2cm}W_2 =  9\hspace{0.05cm}, \hspace{0.2cm}W_3 =  6\hspace{0.3cm}\Rightarrow\hspace{0.3cm}W(X) = 1 + 9 \cdot X^2 + 6 \cdot X^3\hspace{0.05cm}.</math>
 +
 +
[[Datei:P ID2521 KC T 2 3 S3 v1.png|Herleitung der Distanzspektren von RSC (3, 2, 2) <sub>4</sub> und RSC (6, 4, 2)<sub>2</sub>|class=fit]]<br>
 +
 +
Die binäre Repräsentation des Codes  RSC (3, 2, 2)<sub>4</sub> führt zum RSC (6, 4, 2)<sub>2</sub>, ebenfalls mit der Rate <i>R</i>&nbsp;=&nbsp;4/6&nbsp;=&nbsp;2/3 und der Minimaldistanz <i>d</i><sub>min</sub> = 2. Es ergibt sich allerdings ein anderes Distanzspektrum:
 +
 +
:<math>W_0 =  1\hspace{0.05cm}, \hspace{0.2cm}W_2 =  3\hspace{0.05cm}, \hspace{0.2cm}W_3 =  8
 +
\hspace{0.05cm}, \hspace{0.2cm}W_4 =  3\hspace{0.05cm}, \hspace{0.2cm}W_6 =  1</math>
 +
 +
:<math>\Rightarrow\hspace{0.3cm}W(X) = 1 + 3 \cdot X^2 + 8 \cdot X^3 + 4 \cdot X^4 + X^6 \hspace{0.05cm}.</math>{{end}}<br>
 +
 +
== Bedeutung der Reed–Solomon–Codes ==
 +
<br>
 +
Anhand des hier oft beispielhaft betrachteten RSC&nbsp;(3,&nbsp;2,&nbsp;2)<sub>4</sub> konnten wir viele Eigenschaften der Reed&ndash;Solomon&ndash;Codes in überschaubarem Rahmen kennenlernen. Praxisrelevant ist dieser Code nicht, da wegen <i>d</i><sub>min</sub> = 2 kein einziger Fehler korrigiert und auch nur ein einziger Fehler erkannt werden kann. Schon der nächstgrößere Code RSC&nbsp;(7,&nbsp;3,&nbsp;5)<sub>8</sub>, der bis zu <i>t</i> = 2 Fehler korrigieren kann, weist bereits eine Codetabelle mit  8<sup>3</sup> = 512 Einträgen auf und ist zu Demonstrationszwecken weniger gut geeignet.<br>
 +
 +
In der Praxis werden meist größere RS&ndash;Codes eingesetzt, zum Beispiel der RSC (255, 223, 33)<sub>256</sub> mit den folgenden Eigenschaften:
 +
*Der Code basiert auf dem Galoisfeld GF(2<sup>8</sup>). Jedes Symbol entspricht somit einem Byte. Die Coderate ist mit <i>R</i> = 0.8745 relativ groß.<br>
 +
 +
*Trotz dieser großen Coderate (geringen Redundanz) können mit diesem Code bis zu <i>e</i> = 32 Fehler innerhalb eines Blocks aus 255 Symbolen erkannt und <i>t</i> = 16 Fehler korrigiert werden.<br>
 +
 +
*Die Codetabelle würde allerdings 2<sup>8 &middot; 223</sup> = 2<sup>1784</sup> &asymp; 10<sup>537</sup> Einträge aufweisen und wird deshalb wahrscheinlich auch von niemanden tatsächlich erstellt.<br><br>
 +
 +
Der große Vorteil der Reed&ndash;Solomon&ndash;Codes (und einer ganzen Reihe davon abgeleiteter weiterer Codes) ist zum einen, dass sie analytisch geschlossen konstruiert werden können, zum anderen ihre große Flexibilität hinsichtlich der Codeparameter. Meist geht man wie folgt vor:
 +
*Man gibt die Korrekturfähigkeit in Form des Parameters <i>t</i> vor. Daraus ergibt sich die minimale Distanz <i>d</i><sub>min</sub> = 2<i>t</i> + 1 und die Differenz <i>n</i> &ndash; <i>k</i> = 2<i>t</i> entsprechend der Singleton&ndash;Schranke. Einen besseren Wert gibt es nicht.<br>
 +
 +
*Ein weiterer Entwurfsparameter ist die Coderate <i>R</i> = <i>k</i>/<i>n</i>, wobei die Codewortlänge <i>n</i> = 2<sup><i>m</i></sup> &ndash; 1 nicht völlig frei wählbar ist. Durch Erweiterung, Verkürzung und Punktierung &ndash; siehe Aufgabe Z1.9 &ndash; kann die Vielzahl an möglichen Codes weiter vergrößert werden.<br>
 +
 +
*Bei Reed&ndash;Solomon&ndash;Codes ist die Gewichtsverteilung exakt bekannt und es ist eine Anpassung an die Fehlerstruktur des Kanals möglich. Sie sind insbesondere für Bündelfehlerkanäle gut geeignet, die bei mobilen Funksystemen aufgrund von temporären Abschattungen häufig vorliegen.<br>
 +
 +
*Im Falle statistisch unabhängiger Fehler sind BCH&ndash;Codes (von Bose&ndash;Chaudhuri&ndash;Hocquenghem) besser geeignet. Diese sind eng verwandt mit den RS&ndash;Codes, allerdings erfüllen sie nicht immer das Singleton&ndash;Kriterium. Eine ausführliche Beschreibung finden Sie in [Fri96]<ref>Friedrichs, B.: ''Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen.'' Berlin – Heidelberg: Springer, 1996.</ref>.<br>
 +
 +
*Die Decodierung nach dem BDD&ndash;Prinzip (<i>Bounded Distance Decoding</i>) kann rechentechnisch sehr einfach erfolgen, zum Beispiel mit dem Berlekamp&ndash;Massey&ndash;Algorithmus. Zudem kann im Decoder ohne wesentlichen Mehraufwand auch <i>Soft&ndash;Decision&ndash;Information</i> verarbeitet werden.<br>
 +
 +
== Aufgaben ==
 +
<br>
 +
[[Aufgaben:2.7 Reed–Solomon–Code (7, 3, 5)(Base 8)|A2.7 Reed–Solomon–Code (7, 3, 5)(Base 8)]]
  
 +
[[Zusatzaufgaben:2.7 Reed–Solomon–Code (15, 5, 11)(Base 16)]]
  
 +
[[Aufgaben:2.8 RS–Generatorpolynome|A2.8 RS–Generatorpolynome]]
  
 +
[[Zusatzaufgaben:2.8 „Plus” und „Mal” in GF(2^3)]]
  
 +
[[Aufgaben:2.9 Reed–Solomon–Parameter|A2.9 Reed–Solomon–Parameter]]
  
 +
[[Aufgaben:2.10 Fehlererkennung bei RSC|A2.10 Fehlererkennung bei RSC]]
  
 +
[[Zusatzaufgaben:2.10 Coderate und minimale Distanz]]
  
 +
==Quellenverzeichnis==
 +
<references/>
  
 
{{Display}}
 
{{Display}}

Version vom 13. Januar 2017, 15:48 Uhr

Konstruktion von Reed–Solomon–Codes (1)


Ein Reed–Solomon–Code – im Folgenden manchmal auch verkürzt als RS–Code bezeichnet – ist ein linearer Blockcode, der einem Informationsblock u mit k Symbolen ein entsprechendes Codewort c mit n > k Symbolen zuordnet. Diese noch heute vielfach eingesetzten Codes wurden bereits Anfang der 1960er Jahre von Irving Stoy Reed und Gustave Solomon erfunden.

Linearer (n, k)–Blockcode

In Kapitel 1.1 wurde der Informationsblock mit u = (u1, ... , uk) und das Codewort mit x = (x1, ... , xn) bezeichnet. Die Nomenklaturänderung gemäß obiger Grafik wurde vorgenommen, um Verwechslungen mit dem Argument von Polynomen auszuschließen und die Beschreibung der RS–Codes zu vereinfachen.

Alle in Kapitel 1.4 genannten Eigenschaften linearer zyklischer Blockcodes gelten auch für einen Reed–Solomon–Code. Zusätzlich gilt:

  • Konstruktion und Decodierung von RS–Codes basieren auf der Arithmetik eines Galoisfeldes GF(q), wobei wir uns hier auf binäre Erweiterungskörper mit q = 2m Elementen beschränken:
\[{\rm GF}(2^m) = \big \{\hspace{0.05cm}0\hspace{0.05cm},\hspace{0.1cm} \alpha^{0} ,\hspace{0.05cm}\hspace{0.1cm} \alpha^{1}\hspace{0.05cm},\hspace{0.1cm} \alpha^{2}\hspace{0.05cm},\hspace{0.1cm}...\hspace{0.1cm}, \alpha^{q-2}\hspace{0.05cm} \big \}\hspace{0.05cm}. \]
  • Prinzipiell unterschiedlich zum ersten Kapitel ist, dass die Koeffizienten u0, u1, ... , uk–1 nun nicht mehr einzelne Informationsbits (0 oder 1) angeben, sondern ebenfalls Elemente aus GF(2m) sind. Jedes der m Symbole steht vielmehr für m Bit.
  • Bei den Reed–Solomon–Codes ist der Parameter n (Codelänge) gleich der Anzahl der Elemente des Galoisfeldes ohne das Nullwort: n = q – 1. Wir verwenden hierzu folgende Nomenklatur:
\[{\rm GF}(2^m) \hspace{-0.05cm}\setminus \hspace{-0.05cm} \{0\} = \big \{\hspace{0.05cm} \alpha^{0} ,\hspace{0.05cm}\hspace{0.1cm} \alpha^{1}\hspace{0.05cm},\hspace{0.1cm} \alpha^{2}\hspace{0.05cm},\hspace{0.1cm}...\hspace{0.1cm}, \alpha^{n-1}\hspace{0.05cm} \big \}\hspace{0.05cm}. \]
  • Die k Koeffizienten ui ∈ GF(2m) des Informationsblocks u ( 0 ≤ i < k) kann man formal auch durch ein Polynom u(x) ausdrücken. Der Grad des Polynoms ist dabei k–1:
\[u(x) = \sum_{i = 0}^{k-1} u_i \cdot x^{i} = u_0 + u_1 \cdot x + u_2 \cdot x^2 + \hspace{0.1cm}... \hspace{0.1cm}+ u_{k-1} \cdot x^{k-1} \hspace{0.05cm},\hspace{0.4cm} u_i \in {\rm GF}(2^m) \hspace{0.05cm}.\]
  • Die n Symbole c0, ... , cn–1 des zugehörigen Codewortes c = (c0, c1, ... , cn–1) ergeben sich mit diesem Polynom u(x) zu
\[c_0 = u(\alpha^{0}) \hspace{0.05cm},\hspace{0.3cm} c_1 = u(\alpha^{1})\hspace{0.05cm},\hspace{0.1cm}...\hspace{0.1cm},\hspace{0.3cm} c_{n-1}= u(\alpha^{n-1}) \hspace{0.05cm}.\]
  • Meist werden die Codesymbole ci ∈ GF(2m) vor der Übertragung wieder in Binärform ⇒ GF(2) gebracht, wobei dann jedes Symbol durch m Bit dargestellt wird.

Konstruktion von Reed–Solomon–Codes (2)


Fassen wir die Aussagen der letzten Seite kurz zusammen:

: Ein (n, k)–Reed–Solomon–Code für das Galoisfeld GF(2m) wird festgelegt durch
  • die n = 2m–1 Elemente von GF(2m)\{0} = {α0, α1, ... , αn–1}, wobei α ein primitives Element von GF(2m) bezeichnet,
  • ein an den Informationsblockt u angepasstes Polynom vom Grad k–1 der Form
\[u(x) = \sum_{i = 0}^{k-1} u_i \cdot x^{i} = u_0 + u_1 \cdot x + u_2 \cdot x^2 + \hspace{0.1cm}... \hspace{0.1cm}+ u_{k-1} \cdot x^{k-1} \hspace{0.05cm},\hspace{0.4cm} u_i \in {\rm GF}(2^m) \hspace{0.05cm}.\]

Damit lässt sich der (n, k)–Reed–Solomon–Code beschreiben als

\[C_{\rm RS} = \Big \{ \underline {c} = \big ( u(\alpha^{0}) \hspace{0.05cm},\hspace{0.1cm} u(\alpha^{1})\hspace{0.05cm},\hspace{0.1cm}...\hspace{0.1cm}, u(\alpha^{n-1})\hspace{0.1cm} \big ) \hspace{0.1cm} \big | \hspace{0.2cm} u(x) = \sum_{i = 0}^{k-1} u_i \cdot x^{i}\hspace{0.05cm},\hspace{0.2cm} u_i \in {\rm GF}(2^m) \Big \} \hspace{0.05cm}.\]


Die bisherigen Angaben sollen nun an einem einfachen Beispiel verdeutlicht werden.

: Wir gehen von den folgenden Codeparametern aus:

\[k = 2 \hspace{0.05cm},\hspace{0.15cm}n = 3 \hspace{0.5cm} \Rightarrow \hspace{0.5cm} \underline {u} = (u_0, u_1)\hspace{0.05cm},\hspace{0.15cm} \underline {c} = (c_0, c_1, c_2)\hspace{0.05cm},\]

\[q = n+1 = 4 \hspace{0.45cm} \Rightarrow \hspace{0.5cm} {\rm GF} (q) = {\rm GF} (2^m) \hspace{0.5cm} \Rightarrow \hspace{0.5cm} m = 2\hspace{0.05cm}.\]

Ausgehend von der Bedingungsgleichung p(α) = α2 + α + 1 = 0  ⇒  α2 = α + 1 erhält man folgende Zuordnungen zwischen der Exponenten–, der Polynom– und der Koeffizientendarstellung von GF(22):

GF(22) in Exponenten–, Polynom– und Koeffizientenform

Der Koeffizientenvektor wird durch das Polynom u(x) = u0 + ui · x ausgedrückt. Der Polynomgrad ist k – 1 = 1. Für u0 = α1 und u1 = α2 erhält man beispielsweise das Polynom u(x) = α + α2 · x und damit

\[c_0 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^0) = u (x = 1) = \alpha + \alpha^2 \cdot 1 = \alpha + (\alpha + 1) =1 \hspace{0.05cm},\] \[c_1 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^1) = \alpha + \alpha^2 \cdot \alpha = \alpha + \alpha^3 = \alpha + \alpha^0 = \alpha + 1 = \alpha^2 \hspace{0.05cm},\] \[c_2 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^2) = \alpha + \alpha^2 \cdot \alpha^2 = \alpha + \alpha^4 = \alpha + \alpha^1 = 0 \hspace{0.05cm}.\]

Daraus ergeben sich folgende Zuordnungen auf Symbol– bzw. Bitebene:

\[\underline {u} \hspace{-0.15cm} = \hspace{-0.15cm} (\alpha^1, \alpha^2)\hspace{0.57cm}\leftrightarrow\hspace{0.3cm} \underline {c} = (1, \alpha^2, 0)\hspace{0.05cm},\]

\[\underline {u}_{\rm bin} \hspace{-0.15cm} = \hspace{-0.15cm} (1,0,1,1)\hspace{0.3cm}\leftrightarrow\hspace{0.3cm} \underline {c}_{\rm bin} = (0,1,1,1,0,0)\hspace{0.05cm}.\]


Konstruktion von Reed–Solomon–Codes (3)


Die folgende Grafik zeigt die Codetabelle dieses RSC (3, 2, 2)4 genannten Reed–Solomon–Codes. Die Bezeichnung bezieht sich auf die Parameter n = 3, k = 2, dmin = 2 und q = 4. In den Spalten 1 bis 3 erkennt man den Zusammenhang uu(x) → c, in den beiden letzten die Codiervorschrift ubincbin.

Codetabelle des RSC (3, 2, 2)4




Zur Verdeutlichung nochmals der Eintrag für (α0, α2):

\[u(x) = u_0 + u_1 \cdot x = \alpha^0 + \alpha^2 \cdot x. \]

Daraus ergeben sich folgende Codesymbole:

\[c_0 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^0) = 1 + \alpha^2 \cdot 1 =\] \[ = \hspace{-0.15cm}1 + (1+\alpha ) =\alpha \hspace{0.05cm},\] \[c_1 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^1) = 1 + \alpha^2 \cdot \alpha =\] \[ = \hspace{-0.15cm}1 + (1+\alpha ) \cdot \alpha = 1 + \alpha + \alpha^2 = 0 \hspace{0.05cm},\] \[c_2 \hspace{-0.15cm} = \hspace{-0.15cm} u (x = \alpha^2) = 1 + \alpha^2 \cdot \alpha^2 =\] \[ = \hspace{-0.15cm}1 + \alpha = \alpha^2 \hspace{0.05cm}.\]







Hinweis: Aus der Elementenmenge {0, α0 = 1, α1, α2} sollte nicht geschlossen werden, dass für diesen Code die 3D–Darstellung mit den Achsen α0 = 1, α1 und α2 zutrifft. Aus der Koeffizientendarstellung geht vielmehr eindeutig hervor, dass GF(22) ein zweidimensionaler Code ist, wobei die Achsen der 2D–Darstellung mit α0 = 1 und α1 = α zu beschriften sind.

Generatormatrix und Prüfmatrix (1)


Da es sich beim Reed–Solomon–Code um einen linearen Blockcode handelt, ist der Zusammenhang zwischen Informationswort u und Codewort c durch die Generatormatrix G gegeben:

\[\underline {c} = \underline {u} \cdot { \boldsymbol{\rm G}} \hspace{0.05cm}.\]

Wie bei jedem linearen (n, k)–Blockcode besteht die Generatormatrix aus k Zeilen und n Spalten. Im Gegensatz zum Kapitel 1.4 sind nun aber die Elemente der Generatormatrix nicht mehr binär (0 oder 1), sondern entstammen dem Galoisfeld GF(2m) \ {0}.

: Wir betrachten wie auf der letzten Seite wieder den RSC (3, 2, 2)4, dessen Generatormatrix folgende Form hat:

\[ { \boldsymbol{\rm G}} = \begin{pmatrix} g_{00} & g_{01} & g_{02}\\ g_{10} & g_{11} & g_{12} \end{pmatrix}\hspace{0.05cm},\hspace{0.3cm} g_{ij} \in {\rm GF}(2^2) \hspace{-0.01cm}\setminus \hspace{-0.01cm} \{0\} = \big \{\hspace{0.05cm} \alpha^{0} \hspace{0.05cm},\hspace{0.1cm} \alpha^{1}\hspace{0.05cm},\hspace{0.1cm} \alpha^{2} \hspace{0.05cm}\big \}\hspace{0.05cm}. \]

Daneben gilt:

  • Die erste Zeile von G gibt das Codewort für das Informationswort u1 = (1, 0) an bzw. für die Polynomfunktion u1(x) = 1. Damit erhält man die Matrixelemente der ersten Zeile zu
\[g_{00} = u_{1}(\alpha^{0}) = 1\hspace{0.05cm},\hspace{0.3cm} g_{01} = u_{1}(\alpha^{1}) = 1\hspace{0.05cm},\hspace{0.3cm} g_{02} = u_{1}(\alpha^{2}) = 1\hspace{0.05cm}.\]
  • Die zweite Zeile ist gleich dem Codewort für das Informationswort u2 = (0, 1)  ⇒  u2(x) = x. Die Matrixelemente der zweiten Zeile lauten somit:
\[g_{10} = u_{2}(\alpha^{0}) = \alpha^{0} = 1\hspace{0.05cm},\hspace{0.3cm} g_{11} = u_{2}(\alpha^{1}) = \alpha \hspace{0.05cm},\hspace{0.3cm} g_{12} = u_{2}(\alpha^{2}) = \alpha^{2}\hspace{0.05cm}.\]
\[\Rightarrow\hspace{0.3cm} { \boldsymbol{\rm G}} = \begin{pmatrix} 1 & 1 & 1\\ 1 & \alpha & \alpha^2 \end{pmatrix}\hspace{0.05cm}.\]

Für das Informationswort u = (u0, u1) mit den Symbolen u0, u1 ∈ {0, α0, α1, α2} erhält man unter Berücksichtigung der beiden Gleichungen α2 = α + 1 sowie α3 = α0 = 1 wiederum die Codetabelle des RSC (3, 2, 2)4 auf Symbolebene.

Codetabelle des RSC (3, 2, 2)4 auf Symbolebene

Man erhält natürlich mit der Generatormatrix genau die gleiche Codetabelle uc wie nach der Berechnung über die Funktion u(x). Die entsprechende Codetabelle auf Bitebene ergibt sich wieder, wenn man die Elemente nicht in Exponentendarstellung angibt, sondern in Koeffizientenform:

\[(0, \hspace{0.1cm}\alpha^{0}, \hspace{0.1cm}\alpha^{1}, \hspace{0.1cm}\alpha^{2}) \hspace{0.3cm}\Leftrightarrow\hspace{0.3cm}(00, \hspace{0.1cm}01, \hspace{0.1cm}10, \hspace{0.1cm}11) \hspace{0.05cm}. \]


Generatormatrix und Prüfmatrix (2)


Wir verallgemeinern nun das Ergebnis der letzten Seite für einen Reed–Solomon–Code mit

  • der Dimension k (Symbolanzahl pro Informationsblock),
  • der Codewortlänge n (Symbolanzahl pro Codewort).

Die Generatormatrix G (mit k Zeilen und n Spalten) und die Prüfmatrix H (nk Zeilen, n Spalten) müssen folgende Gleichung erfüllen:

\[{ \boldsymbol{\rm G}} \cdot { \boldsymbol{\rm H }}^{\rm T}= { \boldsymbol{\rm 0}}\hspace{0.05cm}.\]

Hierbei bezeichnet 0 eine Nullmatrix (alle Elemente gleich 0) mit k Zeilen und nk Spalten.

: Wir betrachten den RSC (7, 3, 5)8  ⇒  Codeparameter n = 7, k = 3, basierend auf dem Galoisfeld GF(23 = 8) mit der Nebenbedingung α3 = α + 1. Beachten Sie hinsichtlich der Bezeichnung:
  • Der dritte Parameter der für Blockcodes üblichen Nomenklatur nennt die freie Distanz dmin = 5.
  • Anders als bei den in Kapitel 1.3 behandelten binären Codes (SPC, RC, HC) wird bei den Reed–Solomon–Codes noch der Hinweis q zum Galoisfeld hinzugefügt (hier: q = 8).

Alle Elemente der Generatormatrix und der Prüfmatrix

\[{ \boldsymbol{\rm G}} = \begin{pmatrix} 1 & 1 & 1 & 1 & 1 & 1 & 1\\ 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} \end{pmatrix}\hspace{0.05cm},\hspace{0.4cm} { \boldsymbol{\rm H}} = \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^2 & \alpha^{5} & \alpha^{1} & \alpha^{4}\\ 1 & \alpha^4 & \alpha^1 & \alpha^{5} & \alpha^{2} & \alpha^{6} & \alpha^{3} \end{pmatrix} \]

entstammen dem Galoisfeld GF(23) \ {0} = {α0, α1, α2, α3, α4, α5, α6}. Für das Matrixprodukt gilt:

\[{ \boldsymbol{\rm G}} \cdot { \boldsymbol{\rm H }}^{\rm T}= \begin{pmatrix} 1 & 1 & 1 & 1 & 1 & 1 & 1\\ 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} \end{pmatrix} \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} = \begin{pmatrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix} \hspace{0.05cm}.\]

Dies soll hier nur für zwei Elemente nachgewiesen werden:

  • Erste Zeile, erste Spalte:
\[1 \hspace{0.15cm} \cdot \hspace{0.15cm} \big [1 + \alpha^1 + \alpha^2 + \alpha^3 + \alpha^4 + \alpha^5 + \alpha^6 \big ] =\]
\[\hspace{0.15cm} = \hspace{0.15cm} 1 + \alpha + \alpha^2 + (\alpha + 1) + (\alpha^2 + \alpha)+ (\alpha^2 + \alpha +1)+ (\alpha^2 + 1) = 0 \hspace{0.05cm}, \]
  • Letzte Zeile, letzte Spalte:
\[1 \hspace{0.15cm} \cdot \hspace{0.15cm} 1 + \alpha^2 \cdot \alpha^4 + \alpha^4 \cdot \alpha^1 + \alpha^6 \cdot \alpha^5+ \alpha^1 \cdot \alpha^2+ \alpha^3 \cdot \alpha^6+ \alpha^5 \cdot \alpha^3=\]
\[\hspace{0.15cm} = \hspace{0.15cm} 1 + \alpha^6 + \alpha^5 + \alpha^{11} + \alpha^{3}+ \alpha^{9}+ \alpha^{8} =\]
\[ \hspace{0.15cm} = \hspace{0.15cm} 1 + \alpha^6 + \alpha^5 + \alpha^{4} + \alpha^{3}+ \alpha^{2}+ \alpha^{1} =0 \hspace{0.05cm}.\]


Singleton–Schranke und minimale Distanz


Eine wichtige Kenngröße eines jeden Blockcodes ist die minimale Distanz zwischen zwei beliebigen Codeworten ci und cj. Die Reed–Solomon–Codes gehören zur Klasse der linearen und zyklischen Codes. Bei diesen kann man vom Nullwort c0 = (0 0 ... 0) als Bezugsgröße ausgehen. Aus der Anzahl der Nullen in den anderen Codeworten cjc0 lässt sich das Distanzspektrum {Wi} angeben.

: Die Grafik zeigt die Bestimmung des Distanzspektrums für den RSC (3, 2, 2)4. Gegenüber den bisherigen Grafiken sind die Symbole mit 0, 1, 2, 3 anstelle von 0, α0, α1, α2 bezeichnet. Die Distanz d zwischen cj und dem Nullwort c0 ist identisch dem Hamming–Gewicht wH (cj).

Zur Herleitung des Distanzspektrums für den RSC (3, 2, 2)4

Neun der Codeworte unterscheiden sich vom Nullwort in zwei Symbolen und sechs Codeworte in drei Symbolen: W2 = 9, W3 = 6. Es gibt kein einziges Codewort mit nur einer Null. Das heißt: Die minimale Distanz beträgt hier dmin = 2.

Aus der zweiten Tabelle erkennt man, dass auch für die Binärdarstellung dmin = 2 gilt.


Dieses empirische Ergebnis soll nun ohne Beweis verallgemeinert werden:

  • Die minimale Distanz eines jeden (n, k)–Reed–Solomon–Codes beträgt dmin = nk + 1. Damit lassen sich e = dmin – 1 = nk Symbolfehler erkennen.
  • Bei fehlerkorrigierenden Codes wählt man meist ein dmin ungeradzahlig ⇒  nk geradzahlig. Bei RS–Codes können dann bis zu t = (nk)/2 Symbolfehler korrigiert werden.
  • Die Singleton–Schranke besagt, dass für alle linearen Codes dminnk + 1 gilt. RS–Codes erreichen die Schranke mit Gleichheit; sie sind MDS–Codes (Maximum Distance Separable).
  • Das Distanzspektrum setzt sich zusammen aus W0 = 1 sowie weiteren Gewichtsfaktoren Wi mit din, wobei in der folgenden Gleichung dmin mit d abgekürzt ist:
\[W_i = {n \choose i} \cdot \sum_{j = 0}^{i-d}\hspace{0.15cm}(-1)^j \cdot {i \choose j} \cdot \big [\hspace{0.03cm}q^{i\hspace{0.03cm}-\hspace{0.03cm}j\hspace{0.03cm}-\hspace{0.03cm}d\hspace{0.03cm}+\hspace{0.03cm}1}-1 \hspace{0.03cm} \big ]\hspace{0.05cm}.\]

Codebezeichnung und Coderate


Die übliche Bezeichnung für die Reed–Solomon–Codes ist  RSC (nkdmin)q  mit

  • der Länge n des Codes (Symbolanzahl eines Codewortes),
  • der Dimension k des Codes (Symbolanzahl eines Informationswortes),
  • der minimalen Distanz dmin = nk + 1, maximal entsprechend der Singleton–Schranke, und
  • der Größe q = 2m des Galoisfeldes ⇒ GF(q).

Alle Elemente ui des Informationswortes u = (u0, ..., ui, ..., uk–1) und alle Elemente ci des Codewortes c = (c0, ..., ci, ..., cn–1) sind nicht binäre Symbole und entstammen dem Galoisfeld GF(q).

Für die Realisierung werden diese Symbole stets auch binär dargestellt  ⇒  ui, xi ∈ GF(2), und man kommt zum äquivalenten binären Code  RSC (nbin, kbin, dmin)2   mit

  • nbin = n · m Bit eines Codewortes,
  • kbin = k · m Bit eines Informationswortes.

Die Coderate wird durch diese Maßnahme nicht verändert:

\[R = \frac{k}{n}= \frac{k_{\rm bin}}{n_{\rm bin}} = \frac{k \cdot m}{n \cdot m} = \frac{k}{n} \hspace{0.05cm}.\]

Ebenso ändert sich durch den Übergang von GF(q) auf GF(2) nichts an der minimalen Distanz dmin.

: Beim RSC (3, 2, 2)4 ist die Coderate R = k/n = 2/3 und die minimale Distanz dmin = 2. Für das Distanzspektrum {Wi} und die Gewichtsfunktion W(X) gilt nach Kapitel 1.6 (siehe Tabelle):

\[W_0 = 1\hspace{0.05cm}, \hspace{0.2cm}W_2 = 9\hspace{0.05cm}, \hspace{0.2cm}W_3 = 6\hspace{0.3cm}\Rightarrow\hspace{0.3cm}W(X) = 1 + 9 \cdot X^2 + 6 \cdot X^3\hspace{0.05cm}.\]

Herleitung der Distanzspektren von RSC (3, 2, 2) 4 und RSC (6, 4, 2)2

Die binäre Repräsentation des Codes RSC (3, 2, 2)4 führt zum RSC (6, 4, 2)2, ebenfalls mit der Rate R = 4/6 = 2/3 und der Minimaldistanz dmin = 2. Es ergibt sich allerdings ein anderes Distanzspektrum:

\[W_0 = 1\hspace{0.05cm}, \hspace{0.2cm}W_2 = 3\hspace{0.05cm}, \hspace{0.2cm}W_3 = 8 \hspace{0.05cm}, \hspace{0.2cm}W_4 = 3\hspace{0.05cm}, \hspace{0.2cm}W_6 = 1\]

\[\Rightarrow\hspace{0.3cm}W(X) = 1 + 3 \cdot X^2 + 8 \cdot X^3 + 4 \cdot X^4 + X^6 \hspace{0.05cm}.\]


Bedeutung der Reed–Solomon–Codes


Anhand des hier oft beispielhaft betrachteten RSC (3, 2, 2)4 konnten wir viele Eigenschaften der Reed–Solomon–Codes in überschaubarem Rahmen kennenlernen. Praxisrelevant ist dieser Code nicht, da wegen dmin = 2 kein einziger Fehler korrigiert und auch nur ein einziger Fehler erkannt werden kann. Schon der nächstgrößere Code RSC (7, 3, 5)8, der bis zu t = 2 Fehler korrigieren kann, weist bereits eine Codetabelle mit 83 = 512 Einträgen auf und ist zu Demonstrationszwecken weniger gut geeignet.

In der Praxis werden meist größere RS–Codes eingesetzt, zum Beispiel der RSC (255, 223, 33)256 mit den folgenden Eigenschaften:

  • Der Code basiert auf dem Galoisfeld GF(28). Jedes Symbol entspricht somit einem Byte. Die Coderate ist mit R = 0.8745 relativ groß.
  • Trotz dieser großen Coderate (geringen Redundanz) können mit diesem Code bis zu e = 32 Fehler innerhalb eines Blocks aus 255 Symbolen erkannt und t = 16 Fehler korrigiert werden.
  • Die Codetabelle würde allerdings 28 · 223 = 21784 ≈ 10537 Einträge aufweisen und wird deshalb wahrscheinlich auch von niemanden tatsächlich erstellt.

Der große Vorteil der Reed–Solomon–Codes (und einer ganzen Reihe davon abgeleiteter weiterer Codes) ist zum einen, dass sie analytisch geschlossen konstruiert werden können, zum anderen ihre große Flexibilität hinsichtlich der Codeparameter. Meist geht man wie folgt vor:

  • Man gibt die Korrekturfähigkeit in Form des Parameters t vor. Daraus ergibt sich die minimale Distanz dmin = 2t + 1 und die Differenz nk = 2t entsprechend der Singleton–Schranke. Einen besseren Wert gibt es nicht.
  • Ein weiterer Entwurfsparameter ist die Coderate R = k/n, wobei die Codewortlänge n = 2m – 1 nicht völlig frei wählbar ist. Durch Erweiterung, Verkürzung und Punktierung – siehe Aufgabe Z1.9 – kann die Vielzahl an möglichen Codes weiter vergrößert werden.
  • Bei Reed–Solomon–Codes ist die Gewichtsverteilung exakt bekannt und es ist eine Anpassung an die Fehlerstruktur des Kanals möglich. Sie sind insbesondere für Bündelfehlerkanäle gut geeignet, die bei mobilen Funksystemen aufgrund von temporären Abschattungen häufig vorliegen.
  • Im Falle statistisch unabhängiger Fehler sind BCH–Codes (von Bose–Chaudhuri–Hocquenghem) besser geeignet. Diese sind eng verwandt mit den RS–Codes, allerdings erfüllen sie nicht immer das Singleton–Kriterium. Eine ausführliche Beschreibung finden Sie in [Fri96][1].
  • Die Decodierung nach dem BDD–Prinzip (Bounded Distance Decoding) kann rechentechnisch sehr einfach erfolgen, zum Beispiel mit dem Berlekamp–Massey–Algorithmus. Zudem kann im Decoder ohne wesentlichen Mehraufwand auch Soft–Decision–Information verarbeitet werden.

Aufgaben


A2.7 Reed–Solomon–Code (7, 3, 5)(Base 8)

Zusatzaufgaben:2.7 Reed–Solomon–Code (15, 5, 11)(Base 16)

A2.8 RS–Generatorpolynome

Zusatzaufgaben:2.8 „Plus” und „Mal” in GF(2^3)

A2.9 Reed–Solomon–Parameter

A2.10 Fehlererkennung bei RSC

Zusatzaufgaben:2.10 Coderate und minimale Distanz

Quellenverzeichnis

  1. Friedrichs, B.: Kanalcodierung – Grundlagen und Anwendungen in modernen Kommunikations- systemen. Berlin – Heidelberg: Springer, 1996.