Reed-Solomon-fejlkorrektion: Principper, anvendelser og eksempler
Reed-Solomon-fejlkorrektion: forstå principper, praktiske anvendelser og konkrete eksempler — fra cd/dvd til DSL, WiMAX og broadcast for robust dataintegritet.
Reed-Solomon-fejlkorrektion er en fremadrettet fejlkorrektionskode. Den fungerer ved at oversample et polynomium, der er konstrueret ud fra dataene. Polynomiet evalueres på flere punkter, og disse værdier sendes eller registreres. Ved at prøve polynomiet oftere end nødvendigt bliver polynomiet overbestemt. Så længe modtageren modtager "mange" af punkterne korrekt, kan modtageren genfinde det oprindelige polynomium, selv om der er "få" dårlige punkter til stede.
Reed-Solomon-koder anvendes i mange forskellige kommercielle applikationer, f.eks. i cd'er, dvd'er og Blu-ray-diske, i datatransmissionsteknologier som DSL og WiMAX og i radio- og tv-systemer som DVB og ATSC.
Principper — hvordan det virker i praksis
Reed-Solomon (RS) er en blokkode, der arbejder med symbolske enheder (fx bytes) snarere end enkelte bits. Man vælger et felt GF(q) (ofte GF(2^m) for digitale systemer) og tænker på data som koefficienterne i et polynomium P(x) af grad mindre end k, hvor k er antallet af datasymsboler. Koden skabes ved at evaluere P(x) i n forskellige, forudbestemte feltepunkter og sende eller gemme disse n symboler. Resultatet er en (n,k)-kode med n−k kontrolsymboler (paritet).
Fordelen er, at hvis nogle symboler bliver ændret (fejl) eller forsvinder (erasurer), kan modtageren rekonstruere P(x) — og dermed de oprindelige data — så længe antallet af ukendte fejl ikke overstiger kodens kapacitet.
Kodeparametre og kapacitet
- n: antal symbolske positioner i kodeordet (maksimalt q for et felt med q elementer).
- k: antal datasymsboler (grad(P) < k).
- n − k: antal redundante symboler (paritet).
- t: maksimum antal tilfældige symbolfejl, der kan rettes, hvor t = floor((n − k)/2).
- Erasures (kendte positioner): hvis positionerne af fejl er kendt, kan op til n − k erasures rettes.
Matematisk baggrund (kort)
RS-koder bygger på polynomier over et endeligt felt GF(q). Givet data c0,...,c_{k−1} definerer man P(x) = c0 + c1 x + ... + c_{k−1} x^{k−1}. Kodeordet er så (P(a1), P(a2), ..., P(an)) for n forskellige, kendte elementer a1,...,an i feltet.
Decodning kræver typisk at finde en fejl-lokatorpolynomium og en fejl-værdi-polynomium fra de modtagne symboler — dette gøres ved hjælp af syndromberegning og algoritmer som Berlekamp–Massey, Euklidisk algoritme og Forneys algoritme. Der findes også alternative metoder som Gao's algoritme.
En lille illustrativ eksempel (forståelsesformål)
Tænk enkelt: vælg et lille felt GF(5) (restklasser modulo 5). Lad k = 3 og vælg data som koefficienter i P(x) = 2 + 3x + 1x^2. Hvis vi evaluerer i n = 5 punkter x = 0,1,2,3,4 får vi kodeordet:
- P(0) = 2
- P(1) = 2 + 3 + 1 = 6 ≡ 1 (mod 5)
- P(2) = 2 + 6 + 4 = 12 ≡ 2 (mod 5)
- P(3) = 2 + 9 + 9 = 20 ≡ 0 (mod 5)
- P(4) = 2 + 12 + 16 = 30 ≡ 0 (mod 5)
Hvis ét af disse symboler bliver beskadiget under overførsel, kan modtageren ud fra de resterende korrekte symboler (her: mindst k = 3 korrekte) rekonstruere P(x) ved interpolation (fx Lagrange-interpolation) og hente de oprindelige koefficienter tilbage. Dette illustrerer principperne — i praksis bruges større felter og mere effektive dekoderalgoritmer.
Dekodningsmetoder (oversigt)
- Berlekamp–Massey: finder fejl-lokatorpolynomiet ud fra syndromsekvensen.
- Euklidisk algoritme: kan anvendes til at løse nøgleligninger i dekodningen.
- Forney's algoritme: beregner fejlværdierne, når fejl-lokatorpolynomiet er fundet.
- Gao-algoritmen: alternativ metode, der kan være enklere at implementere i visse tilfælde.
Anvendelsesdetaljer og praktiske teknikker
- Interleaving: For at beskytte mod sammenhængende (burst) fejl anvendes ofte interleaving, hvor kodeord blandes så burst-fejl fordeles på flere kodeord og dermed gøres retteselige.
- Symbolstørrelse: Ofte benyttes GF(2^8) så ét symbol er én byte — det giver typisk n ≤ 255 (ofte RS(255,k)).
- Hardware vs. software: Finite field-operatorer (multiplikation, inversion) kan implementeres med log/antilog tabeller i software eller som specialiseret hardware for høj gennemstrømning.
- Erasures vs. errors: Kendskab til fejlpositioner (fx ved checksum eller manglende pakke) øger korrektionskapaciteten væsentligt.
Fordele og begrænsninger
- Fordele: Fremragende ved at rette symbolfejl og burst-fejl; velafprøvet og bredt understøttet i hardware og protokoller.
- Begrænsninger: Højere kompleksitet end simple bit-koder; redundans koster kapacitet; dekodning kan være beregningsmæssigt tung ved meget lange blokke eller høje krav til latenstid.
Praktiske eksempler og varianter
Ud over lagringsmedier (CD, DVD, Blu-ray) og broadcast-systemer bruges RS-koder i stregkoder og 2D-koder (fx QR-koder), i satellit- og dybderumskommunikation, i mobiltelefoni- og trådløse standarder samt i RAID-løsninger og andre former for datalagring. Mange systemer kombinerer RS med andre codes (f.eks. convolutional codes eller LDPC) i en kæde for at opnå bedre samlet ydeevne.
Implementeringsråd
- Brug eksisterende biblioteker til finite field-aritmetik for at undgå fejl i implementeringen.
- Overvej tabeller (log/antilog) til multiplikation i GF(2^m) for at få hurtig softwarenkoding/dekodning.
- Optimér for de konkrete fejlmodeller: hvis burst-fejl er dominerende, planlæg interleaving og passende bloklængder.
Reed-Solomon-koder er derfor en fundamental teknologi i moderne digital kommunikation og lagring: de kombinerer et solidt matematisk fundament med praktisk anvendelighed og fleksibilitet til mange forskellige fejl- og kanalmodeller.
Oversigt
Reed-Solomon-koder er blokkoder. Det betyder, at en fast blok af inddata behandles til en fast blok af uddata. I tilfældet med den mest almindeligt anvendte R-S-kode (255, 223) - 223 Reed-Solomon-indgangssymboler (hver otte bit lang) kodes til 255 udgangssymboler.
- De fleste R-S ECC-ordninger er systematiske. Det betyder, at en del af udgangskodeordet indeholder inputdataene i deres oprindelige form.
- Der blev valgt en Reed-Solomon-symbolstørrelse på otte bit, fordi dekodere til større symbolstørrelser ville være vanskelige at implementere med den nuværende teknologi. Dette designvalg tvinger den længste kodeordslængde til at være 255 symboler.
- Reed-Solomon-standardkoden (255, 223) er i stand til at korrigere op til 16 Reed-Solomon-symbolfejl i hvert kodeord. Da hvert symbol faktisk består af otte bit, betyder det, at koden kan korrigere op til 16 korte fejlbølger som følge af den indre konvolutionelle dekoder.
Reed-Solomon-koden er ligesom den konvolutionelle kode en gennemsigtig kode. Det betyder, at hvis kanalsymbolerne er blevet omvendt et eller andet sted på linjen, vil dekoderne stadig fungere. Resultatet vil være komplementet til de oprindelige data. Reed-Solomon-koden mister imidlertid sin gennemsigtighed, hvis der anvendes virtuel nuludfyldning. Derfor er det obligatorisk, at dataenes betydning (dvs. sand eller komplementeret) skal opløses før Reed-Solomon-dekodning.
I Voyager-programmets tilfælde opnår R-S-koder næsten optimal ydeevne, når de sammenkædes med den indre (7, 1/2)-konvolutionelle (Viterbi)-kode. Da der kræves to kontrolsymboler for hver fejl, der skal korrigeres, resulterer dette i i alt 32 kontrolsymboler og 223 informationssymboler pr. kodeord.
Desuden kan Reed-Solomon-kodeordene interleaved på symbolbasis, inden de konvolutionelt kodes. Da dette adskiller symbolerne i et kodeord, bliver det mindre sandsynligt, at et burst fra Viterbi-dekoderen forstyrrer mere end ét Reed-Solomon-symbol i et kodeord.
Grundlæggende idé
Den centrale idé bag en Reed-Solomon-kode er, at de kodede data først visualiseres som et polynomium. Koden er baseret på en sætning fra algebra, der siger, at k forskellige punkter entydigt bestemmer et polynomium af højst k-1 grad.
Afsenderen bestemmer et polynomium af grad k - 1 {\displaystyle k-1} over et endeligt felt, som repræsenterer de k {\displaystyle k}
datapunkter. Polynomiet "indkodes" derefter ved at evaluere det i forskellige punkter, og disse værdier er det, der rent faktisk sendes. Under transmissionen kan nogle af disse værdier blive ødelagt. Derfor sendes der faktisk mere end k punkter. Så længe der modtages tilstrækkeligt mange værdier korrekt, kan modtageren udlede, hvad det oprindelige polynomium var, og afkode de oprindelige data.
På samme måde som man kan korrigere en kurve ved at interpolere forbi et hul, kan en Reed-Solomon-kode bygge bro over en række fejl i en blok data for at genvinde koefficienterne i det polynomium, der tegnede den oprindelige kurve.
Historie
Koden blev opfundet i 1960 af Irving S. Reed og Gustave Solomon, som dengang var medlemmer af MIT Lincoln Laboratory. Deres grundlæggende artikel havde titlen "Polynomial Codes over Certain Finite Fields". Da den blev skrevet, var den digitale teknologi ikke tilstrækkelig avanceret til at implementere konceptet. Den første anvendelse i 1982 af RS-koder i masseprodukter var compact disc'en, hvor der anvendes to RS-koder med krydsede RS-koder. En effektiv afkodningsalgoritme for RS-koder over store afstande blev udviklet af Elwyn Berlekamp og James Massey i 1969. I dag anvendes RS-koder i harddisk, DVD, telekommunikation og digitale radio- og tv-protokoller.
Søge