Die Reed-Muller-Codes sind eine Familie von linearen, fehlerkorrigierenden Codes, die im Bereich der Kanalcodierung zur gesicherten Datenübertragung und Datenspeicherung Verwendung finden. Diese Klasse von Codes wurden von Irving S. Reed und David E. Muller entwickelt.

Der binäre Reed-Muller-Code wurde von der NASA in den Mariner Expeditionen (1969 bis 1976) zum Mars benutzt, um die vom Mars gemachten Fotos an die Erde zu senden. Im Speziellen wurde bei Mariner 9 ein RM-Code (1, 5) ohne Kontrollmatrix als Hadamard-Code (32, 6, 16) verwendet, das bedeutet, dass sechs Informationsbits in 32 Bit langen Wörtern kodiert waren und das Minimalgewicht der Wörter mindestens 16 betrug, was eine Fehlerkorrektur von 7 Bits ermöglichte. Mit den   Codewörtern wurden Grauwerte eines Bildpunktes kodiert. Mehr dazu im nachfolgenden Beispiel 3 zur NASA Raumsonde Mariner 9.

Konstruktion

Bearbeiten

Im Folgenden wird beschrieben, wie man eine Erzeugermatrix eines Reed-Muller-Codes der Länge   konstruiert

 .

  ist eine Teilmenge der nichtnegativen ganzen Zahlen

 .

Wir definieren im n-dimensionalen Raum   die Indikatorvektoren :

 

auf Untermengen   durch:

 

und – ebenfalls in   – die binäre Operation:

 

die als Keil-Produkt bezeichnet wird.

  ist ein  -dimensionaler Vektorraum über  , deshalb ist es möglich zu schreiben:

 

Wir definieren im  -dimensionalen Raum   die folgenden Vektoren der Länge  

  und

 ,

wobei   Hyperebenen in   (mit Dimension  ) sind:

 

Der Reed-Muller RM(d, r)-Code der Ordnung   und der Länge   ist derjenige Code, der durch   und dem Keil-Produkt von bis zu   der   erzeugt wird (wobei nach Vereinbarung ein Keil-Produkt von weniger als einem Vektor gleich der Identität für diesen Operator ist).

Eigenschaften

Bearbeiten

Es gelten die folgenden Eigenschaften

  1. Die Menge aller möglichen Keil-Produkte von bis zu d der   bilden eine Basis von  .
  2. Der RM(d, r)-Code hat den Rang:  
  3. Es gilt  , wobei   das Bar-Product zweier Codes bezeichnet
  4. RM(d, r) hat die minimale Hamming-Distanz  .

Beispiel 1

Bearbeiten

Sei  . Dann  , und

 

und

 

Der RM(3,1)-Code wird erzeugt durch die Menge

 

oder genauer durch die Zeilen der Matrix

 

Beispiel 2

Bearbeiten

Der RM(3,2)-Code wird erzeugt durch die Menge

 

oder genauer durch die Zeilen der Matrix

 

Beispiel 3: NASA Raumsonde Mariner 9

Bearbeiten

Bei der NASA Raumsonde Mariner 9 aus dem Jahre 1971 wurde ein Reed-Muller-Code (1, 5) mit fehlender Kontrollmatrix genutzt, der einen Spezialfall allgemeiner Reed-Muller Codes darstellt. Dieser Code war schlussendlich ein Hadamard-Code mit den Parametern (32, 6, 16). Mit diesem RM-Code (32, 6, 16) wurden 32 Bit lange Codewörter übertragen, die   Werte kodierten, wobei die Codewörter untereinander einen Hamming-Abstand von 16 aufwiesen. Diese Parameter wurden aufgrund der Kanalcharakteristik, der Bildauflösung und der Aufnahme- und Übertragungszeiten gewählt, die eine Wortlänge von reichlich 30 Bit sinnvoll machten.

Aufgrund der großen Entfernung zwischen Mars und Erde, und den damals im Vergleich zu heute unfortschrittlichen Übertragungsgeräten, lag die angenommene Bit-Fehlerwahrscheinlichkeit bei 5 %. Daraus ergibt sich aufgrund der Kodierung von einem Grauwert in 6 Bit ohne zusätzliche Fehlerkorrekturmechanismen eine Grauwert-Fehlerwahrscheinlichkeit von 26 %. Das heißt, ca. ein Viertel eines übertragenen Bildes kommt fehlerhaft beim Empfänger an. Durch den Einsatz des RM-Code (32, 6, 16) konnte bei gleicher Bit-Fehlerwahrscheinlichkeit von 5 % die Grauwert-Fehlerwahrscheinlichkeit auf 0,01 % reduziert werden.

Konstruktion

Bearbeiten
 
Matrix des Hadamard-Code (32, 6, 16) für den Reed-Muller-Code (1,5) der NASA Raumsonde Mariner 9 (1971/1972). Die Farbe Schwarz kodiert die Binärziffer 1, und die Farbe Weiß kodiert die Binärziffer 0.

Der verwendete RM-Code (32, 6, 16) basiert auf einer Hadamard-Matrix  .

Die Konstruktion von   erfolgt rekursiv aus der Hadamard-Matrix

 

und der Erzeugungsregel

 

Diese Konstruktion nach Sylvester erzeugt die sogenannten Walsh Matrizen

 

die normalisierte Hadamard-Matrizen vom Grad   darstellen.

Wenn man nun die Hadamard-Matrix   als Bitmuster interpretiert (bei dem eine 1 für die Binärziffer 1, und eine   für die Binärziffer 0 steht), dann erhält man 32 Codewörter mit 32 Bit Länge. Jedes dieser Codewörter weist zu jedem anderen Codewort einen Hamming-Abstand von 16 oder 32 auf. Durch Kombination der Hadamard-Matrix   mit der dazu inversen Hadamard-Matrix   erhält man 64 Codewörter mit 32 Bit Länge, bei denen jedes Codewort zu jedem anderen Codewort einen Hamming-Abstand von 16 aufweist. Diese Kombination von   und   definiert dabei einen Hadamard-Code, mit dem sich   Werte kodieren lassen, indem ein Wert   der  -ten Zeile des Codes entspricht. Die nebenstehende Abbildung zeigt den vollständigen Hadamard-Code für RMC (32, 6, 16), wobei die Farbe Schwarz für die Binärziffer 1 und die Farbe Weiß für die Binärziffer 0 steht.

Alternative Charakterisierung

Bearbeiten

Die Klasse der Reed-Muller-Codes kann man auch mit einer Menge von Abbildungen identifizieren. Betrachte hierzu die Menge

 .

Eine Abbildung   wird durch ihre   Bilder eindeutig bestimmt, sofern deren Reihenfolge bekannt ist. Daher kann man   auch durch den zugehörigen Bildvektor   darstellen, wobei die Argumente   die  -adische Entwicklung der Elemente aus dem Definitionsbereich   sind. Auf   kann man eine komponentenweise Addition und Multiplikation gemäß den Rechenoperationen in   definieren. Genau genommen gibt es einen Ringisomorphismus zwischen der Menge der Abbildungen   und der Menge der Bildvektoren  , weshalb man eine Abbildung auch mit seinem Bildvektor identifizieren kann:  . In   liegen spezielle Abbildungen, die sogenannten Koordinatenfunktionen  .

Diese sind wie folgt definiert:

  für  .

In der oben eingeführten Vektordarstellung lassen sich die Koordinatenfunktionen auch schreiben als

 .

Nun gilt:

  1. Das System der Monome   ( ) ist eine Basis von  .
  2. Die Teilmenge   entspricht dem Reed-Muller-Code RM(r, m). Hierbei ist   der höchste Monomgrad der Koordinatenfunktionen, als deren Summe   gemäß 1. geschrieben werden kann.

Dekodierung

Bearbeiten

Die Idee ist wie folgt: Jedes Codewort des Reed-Muller-Codes RM(r,m) kann gemäß der obigen alternativen Charakterisierung als Funktion   aus   aufgefasst werden – mit Basisdarstellung in entgegengesetzten Koordinatenfunktionen, d. h. mit eindeutig bestimmten Koeffizienten   wobei   die Menge der Koordinatenfunktionen-Indizes ist. Die Funktion   wird als Bildvektor   durch den gestörten Kanal geschickt. Der Empfänger dekodiert das mit Fehler   behaftete Codewort  , indem er sukzessive die Koeffizienten   rekonstruiert. Dabei beginnt er mit den Koeffizienten, die zum Monom höchsten Grades   gehören. Hierzu berechnet er das Skalarprodukt von   mit den s.g. charakteristischen Funktionen des Monoms. Dies sind alle Abbildungen vom Grad  , wobei die erzeugenden Koordinatenfunktionen auch entgegengesetzt vorkommen können. Der Wert, der mehrheitlich durch die Skalarprodukte berechnet wird, ist der ursprüngliche Monomkoeffizient. Das Verfahren wird mit den Monomen vom Grad   wiederholt und man erhält hierdurch schließlich   – vorausgesetzt der Fehler   ist nicht zu groß.

Zusammenfassung

Bearbeiten

Codierungs- und Decodierungsprozess mittels Reed-Muller-Codes im Überblick:

  1. Nachricht   wird in Codewort   übersetzt.
  2. Codewort   kann mit Abbildung   identifiziert werden.
  3. Abbildung   kann auch als Bildvektor   dargestellt werden.
  4. Übermittle anstelle der Monomkoeffizienten von   den zugehörigen Bildvektor. Dies liefert Redundanz, die die gewünschte Fehlerkorrektur ermöglicht.
  5. Sende den Bildvektor durch den gestörten Kanal. Es ergibt sich   mit Fehlervektor  .
  6. Empfange den Bildvektor   und gewinne durch Skalarmultiplikationen mit den Koordinatenfunktionen   die ursprünglichen Monomkoeffizienten.
  7. Durch die Monomkoeffizienten berechnet man die/das ursprüngliche Abbildung/Codewort   und damit  .
Bearbeiten
  • Rekursive Codes mit der Plotkin-Konstruktion (PDF; 1,7 MB) Dissertation zur Konstruktion und Decodierung von Reed-Muller Codes und deren Untercodes (Achtung: Angabe über den RM-Code (32, 6, 16) der Mariner 9 Mission sind nicht korrekt, da nur eine Mächtigkeit des Codes von   Werten angegeben und erläutert wird.)