Die Reed‑Solomon‑Fehlerkorrektur ist ein weit verbreiteter Vorwärtsfehlerkorrekturcode (FEC). Ihr Grundgedanke ist intuitiv: Aus den Daten wird ein Polynom konstruiert, dieses Polynom wird an mehreren Stellen ausgewertet und die Auswertewerte werden gesendet oder abgespeichert. Wenn das Polynom an mehr Stellen als unbedingt nötig abgetastet wird, ist das System überbestimmt. Solange der Empfänger ausreichend viele der Punkte korrekt empfängt, kann er das ursprüngliche Polynom auch dann wiederherstellen, wenn einige Punkte fehlerhaft sind oder fehlen. Dadurch lassen sich einzelne Symbole oder ganze Fehlerburst‑Blöcke zuverlässig korrigieren.

Grundprinzip und Parameter

Reed‑Solomon‑Codes arbeiten typischerweise über endlichen Körpern (Galois‑Feldern) GF(2^m). In der Praxis ist m oft 8, sodass ein Symbol ein Byte (0…255) ist. Ein RS‑Code wird durch die Parameter (n, k) beschrieben:

  • n = Länge des Codeworts (Anzahl der Symbole, z. B. ≤ 2^m − 1)
  • k = Anzahl der Datensymbole (Nachrichtensymbole)
  • n − k = Anzahl der Paritätsymbole

Die Fähigkeit zur Fehlerkorrektur wird oft mit t bezeichnet: t = ⌊(n − k)/2⌋. Das bedeutet: Ein RS‑Code kann bis zu t falsche Symbole (Errors) oder bis zu n − k bekannte Fehlstellen (Erasures) korrigieren.

Codierung — zwei gebräuchliche Sichtweisen

Es gibt zwei gleichwertige Beschreibungen der Codierung:

  • Evaluation eines Polynoms: Die Nachricht wird als Polynom M(x) vom Grad < k interpretiert. Dieses Polynom wird an n verschiedenen Feldstellen ausgewertet; die Auswertewerte bilden das Codewort.
  • Systematische Codierung mit Generatorpolynom: Man multipliziert M(x) mit x^(n−k) und reduziert durch ein Generatorpolynom g(x), um die Paritätsanteile zu berechnen; diese werden an das Ende der Nachricht angehängt, so dass die ursprünglichen k Symbole unverändert im Codewort erhalten bleiben.

Decodierung — kurz erklärt

Beim Empfänger werden aus dem empfangenen Codewort zuerst die Syndrome berechnet (Auswertungen an bestimmten Feldstellen). Die Syndrome geben Hinweise auf Position und Wert der Fehler. Die gebräuchlichsten Schritte sind:

  • Syndromberechnung
  • Bestimmung des Error‑Locator‑Polynoms (z. B. mit dem Berlekamp‑Massey‑Algorithmus oder dem erweiterten euklidischen Algorithmus)
  • Bestimmung der Fehlerpositionen (Chien‑Search)
  • Berechnung der Fehlerwerte (z. B. Forney‑Algorithmus) und Korrektur der Symbole

Praktische Implementierungen nutzen Lookup‑Tabellen für GF‑Multiplikationen und oft Hardwarebeschleunigung für hohe Durchsätze. Für bekannte Fehlerstellen (Erasures) ist die Korrektur effizienter — bekannte Positionen gelten wie zusätzliche Information und erhöhen die korrigierbare Fehleranzahl.

Eigenschaften und Grenzen

  • RS‑Codes sind symbolorientiert, nicht bitorientiert – ein Symbolfehler kann mehrere Bits betreffen, wird aber als ein Symbolfehler gezählt.
  • Maximale Codewortlänge ist durch das gewählte Feld begrenzt: n ≤ 2^m − 1.
  • Bei starken Burstfehlern werden RS‑Codes oft mit Interleaving kombiniert, um zusammenhängende Fehlstellen über mehrere Codeworte zu verteilen.
  • Die Rechenkomplexität ist höher als bei einfachen Prüfverfahren, dafür ist die Fehlerkorrekturstärke sehr groß.

Anwendungen

Reed‑Solomon‑Codes finden sich in vielen realen Systemen, u. a.:

  • CDs (CIRC – Cross‑Interleaved Reed‑Solomon Coding), wo Auslesefehler und Kratzer kompensiert werden
  • DVDs und Blu‑ray Discs, die ähnliche RS‑basierte Verfahren verwenden
  • Datenübertragungstechnologien wie DSL & WiMAX sowie Rundfunksysteme wie DVB und ATSC
  • QR‑Codes und andere 2D‑Barcodes
  • Satelliten‑ und Deep‑Space‑Kommunikation, RAID‑Systeme und andere Speicherlösungen

Praxis‑Hinweise

  • Bei der Wahl von m (z. B. 8) und (n, k) muss man Abwägungen treffen zwischen Redundanz (Speicher/Übertragungsaufwand) und Korrekturleistung.
  • In vielen Standards sind Parameter und Interleaving vorgegeben; dadurch entsteht ein robustes System auch bei Burstfehlern.
  • Die meisten Algorithmen und Implementationen sind heute patentfrei und in vielen Bibliotheken verfügbar.

Zusammenfassend: Reed‑Solomon‑Codes sind ein flexibles, leistungsfähiges Werkzeug zur Fehlerkorrektur in vielen Speicher‑ und Übertragungssystemen. Durch die Modellierung von Daten als Polynome und die Überabtastung (Mehrfachauswertung) lässt sich das Original zuverlässig rekonstruieren, solange die Anzahl der beschädigten oder fehlenden Symbole innerhalb der Korrekturgrenze liegt.