Reed-Solomon foutcorrectie is een voorwaartse foutcorrectiecode. Het werkt door oversampling van een polynoom die uit de gegevens is geconstrueerd. De polynoom wordt op verschillende punten geëvalueerd, en deze waarden worden verzonden of opgenomen. Door de polynoom vaker te bemonsteren dan nodig is, wordt de polynoom overgedetermineerd. Zolang de ontvanger "veel" punten correct ontvangt, kan hij de oorspronkelijke polynoom herstellen, zelfs in aanwezigheid van "enkele" slechte punten.

Wat is een Reed-Solomon code?

Een Reed-Solomon-code is een type foutcorrectiecode die werkt op symbolen (meestal bytes) in plaats van op individuele bits. De code wordt vaak beschreven met parameters (n, k), waarbij k het aantal informatie-symbolen is en n het totale aantal symbolen na codering (informatie + pariteit). De extra pariteitsymbolen geven redundantie waarmee fouten kunnen worden opgespoord en gecorrigeerd.

Belangrijkste eigenschappen

  • Foutcorrectiecapaciteit: Een Reed-Solomon-code met parameters (n, k) kan maximaal t = (n − k) / 2 willekeurige symbolen corrigeren (fouten), of n − k gekende posities herstellen (erasures).
  • Veldstructuur: RS-codes werken meestal over eindige velden GF(2^m). Voor m = 8 werkt men vaak met bytes (256 elementen), wat veel praktische toepassingen mogelijk maakt.
  • Systematisch karakter: Veel implementaties zijn systematisch: de originele gegevens verschijnen ongewijzigd in de codewoord, met daaraan toegevoegd pariteitsymbolen.
  • Interleaving: Door codewoorden te interleaven kunnen RS-codes beter omgaan met lange burstfouten (aaneengesloten foutblokken).

Hoe codering en decodering werken (globale beschrijving)

Codering:

  • De informatie-symbolen worden geïnterpreteerd als coëfficiënten van een polynoom P(x) van graad < k.
  • De encoder evalueert P(x) op n verschillende punten in het veld en verstuurt die n waarden als het codewoord. Een alternatieve systematische methode is P(x) * x^(n−k) mod g(x) berekenen en de rest (pariteit) toevoegen.

Decodering (globaal):

  • De ontvanger meet het ontvangen codewoord; sommige symbolen kunnen corrupt zijn of ontbreken.
  • Een foutlokalisatie-algoritme vindt de posities met fouten (foutlocators) en bepaalt vervolgens de foutwaarden.
  • Veel gebruikte algoritmen zijn de Berlekamp–Massey-algoritme, het Euclidische algoritme voor polynoomgrootste gemene deler en Forney's algoritme voor foutwaarden.

Verschil tussen fouten en erasures

Een fout is een symbool met onbekende locatie en onbekende waarde; een erasure is een symbool waarvan de locatie bekend is maar de waarde ontbreekt (bijvoorbeeld vanwege detectie van een beschadigd blok). Erasures zijn gemakkelijker te corrigeren: een RS-code kan tot n − k erasures herstellen, of een combinatie van e erasures en f fouten zolang 2f + e ≤ n − k.

Decoderingstechnieken kort uitgelegd

  • Syndroomberekening: Bereken syndromen uit het ontvangen woord om te bepalen of en waar fouten zijn.
  • Foutlokatie: Gebruik Berlekamp–Massey of het Euclidische algoritme om het foutlokatorpolynoom te vinden.
  • Foutwaarde-berekening: Forney's algoritme berekent voor elk gevonden foutlocatie de juiste correctiewaarde.

Praktische voorbeelden en toepassingen

Reed-Solomon-codes worden veel toegepast in opslag en transmissie omdat ze robuust zijn tegen symbol- of blokfouten. Voorbeelden:

  • CD's gebruiken een vorm van interleaved Reed-Solomon-codering (CIRC) om krassen en fouten te corrigeren.
  • DVD's en Blu-ray Discs gebruiken uitgebreide foutcorrectieschema's waarin RS-codes een rol spelen (samen met andere technieken).
  • Datacommunicatieprotocollen zoals DSL en WiMAX gebruiken RS-codes in combinatie met andere codes of interleaving.
  • Omroepsystemen zoals DVB en ATSC gebruiken RS-codes als onderdeel van hun fysieke laag foutcorrectie.
  • QR-codes en veel barcodes gebruiken Reed-Solomon-codering om beschadigde of gedeeltelijk bedekte symbolen te herstellen.
  • In opslagsystemen en RAID-achtige constructies worden RS-achtige technieken gebruikt om dataverlies bij schijfuitval te beperken.

Praktische overwegingen

  • Symbolgrootte: De keuze van m (zodat het veld GF(2^m) grootte 2^m) bepaalt de maximale n (≤ 2^m − 1) en de symbolgrootte (bijv. m = 8 → byte-symbolen, n ≤ 255).
  • Complexiteit: Decodering vergt rekenkracht; voor realtime toepassingen zijn efficiënte implementaties en soms hardwareversnelling nodig.
  • Combinatie met andere codes: Moderne systemen combineren RS met convolutionele codes, turbo-codes of LDPC voor betere prestaties onder verschillende kanaalomstandigheden.

Kort voorbeeld

Een veelgebruikte code in praktijk is RS(255,223) over GF(256). Hier is n = 255, k = 223, dus n − k = 32 pariteitsymbolen; de code kan daarmee maximaal t = 16 willekeurige symbolen corrigeren. Zulke parameters zijn populair omdat ze werken op bytes en geschikt zijn voor veel storage- en transmissietoepassingen.

Samenvattend

Reed-Solomon-foutcorrectie gebruikt polynoomevaluaties over eindige velden om redundantie toe te voegen waarmee fouten en uitval van symbolen hersteld kunnen worden. Door de goede eigenschappen voor symbolfouten, de mogelijkheid om erasures efficiënt te verwerken en de flexibiliteit in parameters, zijn RS-codes wijdverspreid in media-opslag en communicatiesystemen. Voor implementaties is begrip van veldalgebra, syndromen en decoderingstechnieken zoals Berlekamp–Massey en Forney essentieel.