Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

Definition und Eigenschaften von Reed–Solomon–Codes

Aus LNTwww
Wechseln zu:Navigation, Suche

Codierprinzip und Codeparameter


Ein  "Reed–Solomon–Code"  – im Folgenden manchmal auch verkürzt als  "RS–Code"  bezeichnet – ist ein  "linearer Blockcode",  der

Linearer (n,k)–Blockcode
  • 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


Im Kapitel  Zielsetzung der Kanalcodierung  wurde der Informationsblock mit  u_=(u1, ... , uk)  und das Codewort mit  x_=(x1, ... , xn)  bezeichnet.

Die Nomenklaturänderung   x_c_   (siehe Grafik) wurde vorgenommen,  um Verwechslungen mit dem Argument von Polynomen auszuschließen und die Beschreibung der RS–Codes zu vereinfachen.


Alle im Abschnitt  "Lineare Codes und zyklische Codes"  genannten Eigenschaften linearer zyklischer Blockcodes gelten auch für einen Reed–Solomon–Code.  Zusätzlich gilt:

  • Konstruktion und Decodierung von Reed–Solomon–Codes basieren auf der Arithmetik eines Galoisfeldes  GF(q),  wobei wir uns hier auf binäre Erweiterungskörper mit  q=2m  Elementen  beschränken:
GF(2m)={0,α0,α1,α2,...,αq2}.
  • Prinzipiell unterschiedlich zum ersten Kapitel ist,  dass die Koeffizienten  u0u1, ... ,  uk1  nun nicht mehr einzelne Informationsbits  (0  oder  1)  angeben,  sondern ebenfalls Elemente aus  GF(2m)  sind.  Jedes der  n  Symbole steht für  m  Bit.
  • Bei den Reed–Solomon–Codes ist der Parameter  n  (Codelänge)  stets gleich der Anzahl der Elemente des Galoisfeldes ohne das Nullwort:   n=q1.
    Wir verwenden hierzu folgende Nomenklatur:
GF(2m){0}={α0,α1,α2,...,αn1}.
  • Die  k  Koeffizienten  uiGF(2m)  des Informationsblocks  u_,  wobei für den Index  0i<k  gilt,  kann man formal auch durch ein Polynom  u(x)  ausdrücken.  Der Grad des Polynoms ist dabei  k1:
u(x)=k1i=0uixi=u0+u1x+u2x2+...+uk1xk1,uiGF(2m).
  • Die  n  Symbole des zugehörigen Codewortes  c_=(c0,c1, ... , cn1)  ergeben sich mit diesem Polynom  u(x)  zu
c0=u(α0),c1=u(α1),...,cn1=u(αn1).
  • Meist werden die Codesymbole  ciGF(2m)  vor der Übertragung wieder in Binärform   ⇒   GF(2)  gebracht,  wobei dann jedes Symbol durch  m  Bit dargestellt wird.


Wir fassen diese Aussagen kurz zusammen:

Definition:  Ein  (n, k)–Reed–Solomon–Code  für das Galoisfeld  GF(2m)  wird festgelegt durch

  • die  n=2m1  Elemente von  GF(2m){0}={α0,α1,...,αn1},  wobei  α  ein  "primitives Element"  von  GF(2m)  bezeichnet,
  • ein an den Informationsblockt  u_  angepasstes  "Polynom"  vom Grad  k1  der Form
u(x)=k1i=0uixi=u0+u1x+u2x2+...+uk1xk1,uiGF(2m).

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

CRS={c_=(u(α0),u(α1),...,u(αn1))|u(x)=k1i=0uixi,uiGF(2m)}.


Die bisherigen Angaben sollen nun an zwei einfachen Beispielen verdeutlicht werden.

Beispiel 1:  Wir betrachten die folgenden Codeparametern:

GF(22)  in drei verschiedenwn Darstellungen:
Exponenten–, Polynom– und Koeffizientenform
k=2,n=3u_=(u0,u1),c_=(c0,c1,c2),
q=n+1=4GF(q)=GF(2m)m=2.

Ausgehend von der Bedingungsgleichung   p(α)=α2+α+1=0   ⇒   α2=α+1  erhält man die Zuordnungen zwischen

  • der Exponentendarstellung,
  • der Polynomdarstellung und
  • der Koeffizientendarstellung


von  GF(22)  gemäß obiger Tabelle.  Daraus ist ersichtlich:

  1. Der Koeffizientenvektor wird durch das Polynom  u(x)=u0+u1x  ausgedrückt.  Der Polynomgrad ist  k1=1.
  2. Für  u0=α1  und  u1=α2  erhält man beispielsweise das Polynom  u(x)=α+α2x  und damit
c0=u(x=α0)=u(x=1)=α+α21=α+(α+1)=1,
c1=u(x=α1)=α+α2α=α+α3=α+α0=α+1=α2,
c2=u(x=α2)=α+α2α2=α+α4=α+α1=0.

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

u_=(α1, α2)c_=(1, α2, 0),u_bin=(1, 0, 1, 1)c_bin=(0, 1, 1, 1, 0, 0).


Codetabelle des  RSC (3, 2, 2)4

Beispiel 2:  Rechts ist die Codetabelle des  RSC (3, 2, 2)4  genannten Reed–Solomon–Codes angegeben.

  • Die Bezeichnung bezieht sich auf die Parameter  n=3k=2dmin=2  und  q=4.
  • In den Spalten 1 bis 3 erkennt man den Zusammenhang  u_  u(x)  c_.
  • In den beiden letzten Spalten ist die Codiervorschrift  u_bin  c_bin angegeben.


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

u(x)=u0+u1x=α0+α2x.

Daraus ergeben sich folgende Codesymbole:

c0=u(x=α0)=1+α21=1+(1+α)=α,
c1=u(x=α1)=1+α2α=1+(1+α)α=1+α+α2=0,
c2=u(x=α2)=1+α2α2=1+α=α2.

Hinweise:

  • 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=αα2  zutrifft.  Siehe Abschnitt   "Primitive Polynome" – Beispiel 5.
  • Aus der Koeffizientendarstellung im  Beispiel 1  geht vielmehr eindeutig hervor,  dass   GF(22)  zweidimensional ist,  wobei die Achsen der zweidimensionalen Darstellung mit  α0=1  und  α1=α  zu beschriften sind.


Generatormatrix der Reed–Solomon–Codes


Da es sich beim Reed–Solomon–Code um einen linearen Blockcode handelt,  ist der Zusammenhang zwischen dem Informationswort  u_  und dem Codewort  c_  durch die  "Generatormatrix"  \boldsymbol{\rm 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  "Allgemeine Beschreibung linearer Blockcodes" 

  • sind nun aber die Elemente der Generatormatrix nicht mehr binär  (0  oder  1),
  • sondern entstammen dem Galoisfeld  {\rm GF}(2^m) \hspace{-0.05cm}\setminus \hspace{-0.05cm} \{0\} .


\text{Beispiel 3:}  Wir betrachten wie im  \text{Beispiel 2}  (vorherige Seite)  den  \text{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  \boldsymbol{\rm G}  gibt das Codewort für das Informationswort  \underline {u}_1 = (1, 0)  an bzw. für die Polynomfunktion  u_1(x) = 1.  Damit erhält man die Matrixelemente der ersten Zeile zu
g_{00} = u_{1}(\alpha^{0}) = 1\hspace{0.05cm},
g_{01} = u_{1}(\alpha^{1}) = 1\hspace{0.05cm},
g_{02} = u_{1}(\alpha^{2}) = 1\hspace{0.05cm}.
  • Die zweite Zeile ist gleich dem Codewort für das Informationswort  \underline {u}_2 = (0,\ 1)   ⇒   u_2(x) = x.  Die Matrixelemente der zweiten Zeile lauten somit:
g_{10} = u_{2}(\alpha^{0}) = \alpha^{0} = 1\hspace{0.05cm},
g_{11} = u_{2}(\alpha^{1}) = \alpha \hspace{0.05cm},
g_{12} = u_{2}(\alpha^{2}) = \alpha^{2}\hspace{0.05cm}.
  • Somit lautet die komplette Generatormatrix:
{ \boldsymbol{\rm G} } = \begin{pmatrix} 1 & 1 & 1\\ 1 & \alpha & \alpha^2 \end{pmatrix}\hspace{0.05cm}.
Codetabelle des  \text{RSC (3, 2, 2)}_4  auf Symbolebene
  • Für das Informationswort  \underline {u}= (u_0, \ u_1)  mit den Symbolen
u_0, \ u_1 ∈ \{0, \ \alpha^0, \ \alpha^1 = \alpha, \ \alpha^2\}

erhält man unter Berücksichtigung der beiden Gleichungen   \alpha^2 = \alpha + 1   sowie   \alpha^3 = \alpha^0 = 1   wiederum die Codetabelle des  \text{RSC (3, 2, 2)}_4  auf Symbolebene.

  1. Man erhält natürlich mit der gleichen Generatormatrix genau die gleiche Codetabelle  \underline {u}   ↔   \underline {c}  wie nach der Berechnung über die Funktion  u(x).
  2. Die entsprechende Codetabelle auf Bitebene  (siehe  \text{Beispiel 2}  auf der vorherigen Seite)  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


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

⇒   Diee  "Generatormatrix"  \boldsymbol{\rm G}  (k Zeilen,  n Spalten)  und  "Prüfmatrix"  \boldsymbol{\rm H}  (n-k Zeilen,  n  Spalten) müssen gemeinsam folgende Gleichung erfüllen:

{\boldsymbol{\rm G} } \cdot { \boldsymbol{\rm H } }^{\rm T}= { \boldsymbol{\rm 0} }\hspace{0.05cm}.
  • Hierbei bezeichnet  "\boldsymbol{\rm 0}"  eine Nullmatrix:  (alle Elemente gleich 0)  mit  k  Zeilen und  n-k  Spalten.


\text{Beispiel 4:}  Wir betrachten den  \text{RSC (7, 3, 5)}_8.

  • odeparameter  n= 7k= 3,
  • basierend auf dem Galoisfeld  \rm GF(2^3 = 8) 
  • mit der Nebenbedingung  \alpha^3 =\alpha + 1.


Beachten Sie hinsichtlich der Codebezeichnung:

  1. Der dritte Parameter der für Blockcodes üblichen Nomenklatur nennt die freie Distanz  d_{\rm min}= 5.
  2. Anders als bei den im Kapitel  "Beispiele binärer Blockcodes"  behandelten binären Codes  (Single Parity–check Code,  Repetition Code,  Hamming Code)  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}\hspace{0.05cm},

entstammen dem Galoisfeld  {\rm GF}(2^3) \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},\hspace{0.1cm} \alpha^{3} \hspace{0.05cm},\hspace{0.1cm}\alpha^{4}\hspace{0.05cm},\hspace{0.1cm} \alpha^{5} \hspace{0.05cm},\hspace{0.1cm} \alpha^{6} \hspace{0.05cm}\big \}. 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.1cm} \cdot \hspace{0.1cm} \big [1 + \alpha^1 + \alpha^2 + \alpha^3 + \alpha^4 + \alpha^5 + \alpha^6 \big ] = 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.1cm} \cdot \hspace{0.1cm} 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= 1 + \alpha^6 + \alpha^5 + \alpha^{11} + \alpha^{3}+ \alpha^{9}+ \alpha^{8} =
\hspace{1.5cm} = \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  \underline {c}_i  und  \underline {c}_j.

  • Die Reed–Solomon–Codes gehören zur Klasse der  linearen und  zyklischen  Codes.  Bei diesen kann man vom Nullwort  \underline {c}_0 = (0, 0, \hspace{0.05cm} \text{...} \hspace{0.05cm}, 0)  als Bezugsgröße ausgehen.
  • Aus der Anzahl der Nullen in den anderen Codeworten  \underline {c}_j ≠ \underline {c}_0  lässt sich das  "Distanzspektrum"  \{ \hspace{0.05cm}W_j\hspace{0.05cm}\}  angeben.


\text{Beispiel 5:}  Die Tabelle verdeutlicht die Bestimmung des Distanzspektrums für den  \text{RSC (3, 2, 2)}_4.

  • Gegenüber den bisherigen Grafiken wird die Symbolmenge vereinfachend mit  \{0,\ 1,\ 2,\ 3\}  anstelle von \{0,\ \alpha^0,\ \alpha^1,\ \alpha^2\}  bezeichnet.
  • Die Distanz  d  zwischen  \underline {c}_j  und dem Nullwort  \underline {c}_0  ist identisch dem  "Hamming–Gewicht"  w_{\rm H}(\underline {c}_j).
Zur Herleitung des Distanzspektrums für den  \text{RSC (3, 2, 2)}_4

⇒   Aus der oberen Tabelle kann unter anderem abgelesen werden:

  • Neun Codeworte unterscheiden sich vom Nullwort in zwei Symbolen und sechs Codeworte in drei Symbolen:  
W_2 = 9,\ \ W_3 = 6.
  • Es gibt kein einziges Codewort mit nur einer Null. Das heißt:   Die minimale Distanz beträgt hier 
d_{\rm min} = 2.

⇒   Aus der unteren Tabelle erkennt man, dass auch für die Binärdarstellung  d_{\rm min} = 2  gilt.


Dieses empirische Ergebnis soll nun verallgemeinert werden:

\text{Ohne Beweis:} 

  1. Die  "minimale Distanz"  eines jeden  (n, k)–Reed–Solomon–Codes ist   d_{\rm min} =n-k+1   ⇒   es lassen sich   e = d_{\rm min} -1 =n-k   Symbolfehler erkennen.
  2. Bei  "fehlerkorrigierenden Codes"  wählt man meist  d_{\rm min}   ungeradzahlig   ⇒   n-k  geradzahlig.
  3. Bei Reed–Solomon–Codes können dann bis zu   t =(n-k)/2  Symbolfehler korrigiert werden.
  4. Die  "Singleton–Schranke"  besagt,  dass für alle linearen Codes  d_{\rm min} \le n-k+1  gilt.
  5. Reed–Solomon–Codes erreichen diese Schranke mit Gleichheit;  sie sind so genannte  "MDS–Codes"  ("Maximum Distance Separable").
  6. Das  "Distanzspektrum"  setzt sich zusammen aus  W_0 = 1  sowie weiteren Gewichtsfaktoren  W_i  mit  d ≤ i ≤ n,  wobei in der folgenden Gleichung  d_{\rm min}  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 \bigg [\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} \bigg ]\hspace{0.05cm}.

Codebezeichnung und Coderate


Die übliche Bezeichnung für die Reed–Solomon–Codes ist  {\rm RSC} \ \ (n,\ k, \ d_{\rm min})_q  mit

  • der Länge  n  des Codes  (Symbolanzahl eines Codewortes),
  • der Dimension  k  des Codes  (Symbolanzahl eines Informationswortes),
  • der minimalen Distanz  d_{\rm min} = n-k+1,  maximal entsprechend der  "Singleton–Schranke",  und
  • der Größe  q = 2^m  des Galoisfeldes  {\rm GF}(q).

⇒   Alle Elemente  u_i  des Informationswortes   \underline{u}= (u_0, \hspace{0.05cm}\text{...} \hspace{0.05cm}, u_i, \hspace{0.05cm}\text{...} \hspace{0.05cm}, u_{k-1})   und alle Elemente  c_i  des Codewortes   \underline{c}= (c_0, \hspace{0.05cm}\text{...} \hspace{0.05cm}, c_i, \hspace{0.05cm}\text{...} \hspace{0.05cm}, c_{n-1})   sind nicht binäre Symbole und entstammen dem Galoisfeld  {\rm GF}(q).

⇒   Für die Realisierung werden diese Symbole stets auch binär dargestellt und man kommt zum äquivalenten binären Reed–Solomon–Code  {\rm RSC} \ \ (n_{\rm bin},\ k_{\rm bin}, \ d_{\rm min})_2  mit

  • n_{\rm bin} = n \cdot m   Bit eines Codewortes,
  • k_{\rm bin} = k \cdot m   Bit eines Informationswortes.

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

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

⇒   Ebenso ändert sich durch den Übergang von  {\rm GF}(q)  auf  {\rm GF}(2)  nichts an der minimalen Distanz  d_{\rm min}.

\text{Beispiel 6:}  Wie im  \text{Beispiel 5}  (vorherige Seite)  betrachten wir wieder den  \text{RSC (3, 2, 2)}_4

Herleitung der Distanzspektren von  \text{RSC (3, 2, 2)}_4  und  \text{RSC (6, 4, 2)}_2
  1. Wir geben dessen  "Distanzspektrum"  \{ \hspace{0.05cm}W_j\hspace{0.05cm}\}  nochmals an  (obere Tabelle).
  2. Die untere Tabelle gilt für den äquivalenten binären Reed–Solomon–Code  \text{RSC (6, 4, 2)}_2.


Man erkennt aus diesen Zahlenwerten:

  • Beide Codes haben die gleiche Coderate  R = k/n =2/3 
  • Beide Codes auch die gleiche minimale Distanz  d_{\rm min} = 2.
  • Die beiden Codes unterscheiden sich jedoch hinsichtlich des Distanzspektrums  \{ \hspace{0.05cm}W_j\hspace{0.05cm}\}  und der  Gewichtsfunktion  W(X):
\text{RSC (3, 2, 2)}_4\text{:} \hspace{0.3cm} W_0 = 1\hspace{0.05cm}, \hspace{0.2cm}W_2 = 9\hspace{0.05cm}, \hspace{0.2cm}W_3 = 6
\Rightarrow\hspace{0.3cm}W(X) = 1 + 9 \cdot X^2 + 6 \cdot X^3\hspace{0.05cm}.
\text{RSC (6, 4, 2)}_2\text{:} \hspace{0.3cm} 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 \hspace{0.3cm}\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  \text{RSC (3, 2, 2)}_4  konnten wir viele Eigenschaften der Reed–Solomon–Codes in überschaubarem Rahmen kennenlernen.

  • Praxisrelevant ist dieser Code allerdings nicht,  da wegen  d_{\rm min} = 2  kein einziger Fehler korrigiert und auch nur ein einziger Fehler erkannt werden kann.
  • Schon der nächstgrößere Code  \text{RSC (7, 3, 5)}_8,  der bis zu  t = 2  Fehler korrigieren kann,  weist bereits eine Codetabelle mit   8^3 = 512   Einträgen auf und ist zu Demonstrationszwecken ungeeignet.


In der Praxis werden meist sehr große Reed–Solomon–Codes eingesetzt,  zum Beispiel der  \text{RSC (255, 223, 33)}_{256}  mit folgenden Eigenschaften:

  1. Der Code basiert auf dem Galoisfeld  \rm GF(2^8).  Jedes Symbol entspricht somit einem Byte.  Die Coderate ist mit  R = 0.8745  relativ groß.
  2. Trotz dieser großen Coderate  (also geringe Redundanz)  können mit diesem Code bis zu  e = 32  Fehler innerhalb eines Blocks aus  255  Symbolen erkannt und  t = 16  Fehler korrigiert werden.
  3. Die Codetabelle würde allerdings   2^{8 \hspace{0.05cm}\cdot \hspace{0.05cm} 223}= 2^{ \hspace{0.05cm} 1784} ≈ 10^{537}   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:

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

Aufgaben zum Kapitel


Aufgabe 2.7: Reed–Solomon–Code (7, 3, 5) zur Basis 8

Aufgabe 2.7Z: Reed–Solomon–Code (15, 5, 11) zur Basis 16

Aufgabe 2.8: Generatorpolynome für Reed-Solomon

Aufgabe 2.8Z: „Plus” und „Mal” in GF(2 hoch 3)

Aufgabe 2.9: Reed–Solomon–Parameter

Aufgabe 2.10: Fehlererkennung bei Reed–Solomon

Aufgabe 2.10Z: Coderate und minimale Distanz

Quellenverzeichnis

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