Reed-Solomon-Code: Fehlerkorrektur erklärt – Funktion & Anwendungen

Reed‑Solomon‑Code erklärt: Funktionsweise der Reed‑Solomon‑Fehlerkorrektur, praktische Anwendungen (CD, DVD, Blu‑ray, DSL, DVB) und Einsatzgebiete kurz & verständlich.

Autor: Leandro Alegsa

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.

Übersicht

Reed-Solomon-Codes sind Blockcodes. Das bedeutet, dass ein fester Block von Eingabedaten in einen festen Block von Ausgabedaten verarbeitet wird. Im Falle des am häufigsten verwendeten R-S-Codes (255, 223) werden 223 Reed-Solomon-Eingangssymbole (jeweils acht Bits lang) in 255 Ausgangssymbole kodiert.

  • Die meisten R-S ECC-Systeme sind systematisch. Das bedeutet, dass ein Teil des Ausgabe-Codeworts die Eingabedaten in ihrer ursprünglichen Form enthält.
  • Es wurde eine Reed-Solomon-Symbolgröße von acht Bits gewählt, weil die Decoder für größere Symbolgrößen mit der derzeitigen Technologie schwer zu implementieren wären. Diese Designwahl zwingt die längste Codewortlänge auf 255 Symbole.
  • Der Standard (255, 223) Reed-Solomon-Code ist in der Lage, bis zu 16 Reed-Solomon-Symbol-Fehler in jedem Codewort zu korrigieren. Da jedes Symbol eigentlich aus acht Bits besteht, bedeutet dies, dass der Code aufgrund des inneren Faltungsdecoders bis zu 16 kurze Fehlerbursts korrigieren kann.

Der Reed-Solomon-Code ist wie der Faltungscode ein transparenter Code. Das bedeutet, dass die Decoder auch dann noch funktionieren, wenn die Kanalsymbole irgendwo entlang der Linie invertiert wurden. Das Ergebnis wird die Ergänzung der Originaldaten sein. Der Reed-Solomon-Code verliert jedoch seine Transparenz, wenn eine virtuelle Nullauffüllung verwendet wird. Aus diesem Grund ist es zwingend erforderlich, dass der Sinn der Daten (d.h. wahr oder ergänzt) vor der Reed-Solomon-Dekodierung aufgelöst wird.

Im Fall des Voyager-Programms erreichen R-S-Codes nahezu optimale Leistung, wenn sie mit dem (7, 1/2) inneren Faltungscode (Viterbi) verkettet werden. Da für jeden zu korrigierenden Fehler zwei Prüfsymbole erforderlich sind, ergibt sich eine Gesamtzahl von 32 Prüfsymbolen und 223 Informationssymbolen pro Codewort.

Darüber hinaus können die Reed-Solomon-Kodewörter auf Symbolbasis verschachtelt werden, bevor sie faltend kodiert werden. Da dies die Symbole in einem Codewort voneinander trennt, wird es unwahrscheinlicher, dass ein Burst des Viterbi-Decoders mehr als ein Reed-Solomon-Symbol in einem Codewort stört.

Grundidee

Die Schlüsselidee hinter einem Reed-Solomon-Code ist, dass die kodierten Daten zunächst als Polynom visualisiert werden. Der Code stützt sich auf ein Theorem aus der Algebra, das besagt, dass alle k verschiedenen Punkte ein Polynom mit einem Grad von höchstens k-1 eindeutig bestimmen.

Der Absender bestimmt ein {\displaystyle k-1}Polynom vom Grad k - 1 {\Anzeigestil k-1} über ein endliches Feld, das die k kDatenpunkte vom Typ {\Anzeigestil k} repräsentiert. Das Polynom wird dann durch seine Auswertung an verschiedenen Punkten "kodiert", und diese Werte sind das, was tatsächlich gesendet wird. Während der Übertragung können einige dieser Werte verfälscht werden. Daher werden tatsächlich mehr als k Punkte gesendet. Solange genügend Werte korrekt empfangen werden, kann der Empfänger ableiten, was das ursprüngliche Polynom war, und die ursprünglichen Daten dekodieren.

Im gleichen Sinne, wie man eine Kurve durch Interpolation an einer Lücke vorbei korrigieren kann, kann ein Reed-Solomon-Code eine Reihe von Fehlern in einem Datenblock überbrücken, um die Koeffizienten des Polynoms wiederherzustellen, das die ursprüngliche Kurve gezeichnet hat.

Geschichte

Der Code wurde 1960 von Irving S. Reed und Gustave Solomon erfunden, die damals Mitglieder des MIT-Lincoln-Labors waren. Ihr bahnbrechender Artikel trug den Titel "Polynomial Codes over Certain Finite Fields". Als er geschrieben wurde, war die digitale Technologie noch nicht weit genug fortgeschritten, um das Konzept umzusetzen. Die erste Anwendung von RS-Codes in Massenprodukten im Jahre 1982 war die Compact Disc, bei der zwei verschachtelte RS-Codes verwendet werden. Ein effizienter Dekodieralgorithmus für RS-Codes mit großen Abständen wurde 1969 von Elwyn Berlekamp und James Massey entwickelt. Heute werden RS-Codes in Festplatten-, DVD-, Telekommunikations- und digitalen Rundfunkprotokollen verwendet.



Suche in der Enzyklopädie
AlegsaOnline.com - 2020 / 2025 - License CC3