Reed-Solomon kode | |
---|---|
Opkaldt efter | Irving Reed [d] og Gustav Solomon [d] |
Type |
|
Blok længde | |
Beskedens længde | |
Afstand | |
Alfabet størrelse | for simpelt , ofte |
Betegnelse | |
Mediefiler på Wikimedia Commons |
Reed -Solomon-koder ( eng. Reed-Solomon-koder ) er ikke-binære cykliske koder , der giver dig mulighed for at rette fejl i datablokke. Kodevektorens elementer er ikke bit, men grupper af bit (blokke). Reed-Solomon-koder er meget almindelige, der arbejder med bytes (oktetter).
Reed-Solomon-koden er et specialtilfælde af BCH-koden .
Det er i øjeblikket meget udbredt i datagendannelsessystemer fra cd'er , ved oprettelse af arkiver med information til gendannelse i tilfælde af skade, i støjkorrigerende kodning .
Solomon-koden blev opfundet i 1960 af Reid og Gustav Solomon Laboratory ved Massachusetts Institute of Ideen om at bruge denne kode blev præsenteret i artiklen "Polynomiale koder over visse endelige felter". Effektive afkodningsalgoritmer blev foreslået i 1969 af Alvin Berlekamp og James Massey ( Berlekamp-Massey algorithm ) og i 1977 af David Mandelbaum (metode ved hjælp af Euklid-algoritmen [1] ). Den første brug af Reed-Solomon-koden var i 1982 i serieproduktionen af cd'er.
Reed-Solomon-koder er et vigtigt specialtilfælde af en BCH-kode, hvis generatorpolynomiske rødder ligger i det samme felt , som koden er bygget over ( ). Lad være et element i ordensområdet . Hvis er et primitivt element, så er dets rækkefølge , dvs. Så er det normaliserede polynomium af minimumsgrad over feltet, hvis rødder er konsekutive potenser af elementet , det genererende polynomium af Reed-Solomon-koden over feltet :
hvor er et eller andet heltal (inklusive 0 og 1), ved hjælp af hvilket det nogle gange er muligt at forenkle indkoderen. Normalt skal det . Graden af polynomiet er .
Længden af den resulterende kode , minimumsafstanden (er minimum af alle Hamming-afstande for alle par kodeord, se linjekode ). Koden indeholder check-symboler, hvor betegner graden af polynomiet; antal informationssymboler . Reed-Solomon-koden er således også en adskillelig kode med en maksimal afstand (den er optimal i betydningen Singleton bound ).
Kodepolynomiet kan fås fra informationspolynomiet , , ved at multiplicere og :
Reed-Solomon-koden over , som retter fejl, kræver paritetssymboler og kan bruges til at rette vilkårlige fejlpakker af længde eller mindre. Ifølge Reiger-grænsesætningen er Reed-Solomon-koder optimale i forhold til forholdet mellem pakkelængden og muligheden for fejlkorrektion - ved hjælp af yderligere check-symboler korrigeres fejl (og færre).
Sætning (Reiger bundet) . Hver lineær blokkode, der korrigerer alle bursts af længde eller mindre, skal mindst indeholde paritetssymboler.
En kode dual til en Reed-Solomon-kode er også en Reed-Solomon-kode. Den dobbelte kode for en cyklisk kode er den kode, der genereres af dens kontrolpolynomium.
En matrix genererer en Reed-Solomon-kode, hvis og kun hvis en mindre af matrixen ikke er nul.
Når man punkterer eller forkorter Reed-Solomon-koden, opnås Reed-Solomon-koden igen. Punktering er en operation, der fjerner ét afkrydsningstegn. Kodelængden reduceres med én, dimensionen bevares. Kodeafstanden skal mindskes med én, ellers ville det slettede tegn være ubrugeligt. Forkortning - vi fikserer en vilkårlig kodesøjle og vælger kun de vektorer, der indeholder 0 i denne kolonne. Dette sæt vektorer danner et underrum .
Reed-Solomon-koden er en af de mest kraftfulde koder til at korrigere flere fejludbrud. Det bruges i kanaler, hvor udbrud af fejl kan forekomme så hyppigt, at de ikke længere kan rettes ved hjælp af koder, der retter enkeltfejl.
En Reed-Solomon over-felt- kode med en kodeafstand kan opfattes som en -field-over-field- kode , der kan rette enhver kombination af fejl koncentreret i eller færre blokke af m tegn. Det største antal blokke af længde , der kan blive påvirket af en pakke af længde , hvor , ikke overstiger , så kode, der kan rette fejlblokke, kan altid rette enhver kombination af pakker af total længde, hvis .
Reed-Solomon-kodning kan implementeres på to måder: systematisk og ikke-systematisk (se [1] for en beskrivelse af indkoderen).
Med ikke-systematisk kodning ganges informationsordet med et eller andet irreducerbart polynomium i Galois-feltet. Det resulterende kodede ord er helt anderledes end det originale, og for at udtrække informationsordet skal du udføre en afkodningsoperation, og først derefter kan du kontrollere dataene for fejl. Sådan kodning kræver kun mange ressourcer til at udtrække informationsdata, mens de kan være fejlfrie.
Ved systematisk kodning tildeles kontrolsymboler til en informationsblok af symboler; ved beregning af hvert kontrolsymbol bruges alle symboler i den oprindelige blok. I dette tilfælde er der ingen overhead ved udtrækning af den oprindelige blok, hvis informationsordet ikke indeholder fejl, men koderen/dekoderen skal udføre additions- og multiplikationsoperationer for at generere paritetssymboler. Da alle operationer udføres i Galois-feltet, kræver selve indkodnings-/afkodningsoperationerne mange ressourcer og tid. En hurtig afkodningsalgoritme baseret på Fast Fourier Transform kører i en tid af størrelsesordenen .
Under indkodningsoperationen multipliceres informationspolynomiet med det genererende polynomium. Multiplikation af det oprindelige længdeord med et irreducerbart polynomium i systematisk kodning kan udføres som følger:
Encoderen er bygget af skifteregistre, addere og multiplikatorer. Skifteregisteret består af hukommelsesceller, som hver indeholder ét element i Galois-feltet.
Der er en anden kodningsprocedure (mere praktisk og enklere) . Lade være et primitivt element i feltet , og lad være en vektor af informationssymboler, og dermed et informationspolynomium. Så er vektoren Reed-Solomon-kodevektoren svarende til informationsvektoren . Denne kodningsmetode viser, at for PC-koden er det slet ikke nødvendigt at kende det genererende polynomium og kodens genererende matrix, det er nok at kende udvidelsen af feltet i form af det primitive element og kodens dimension (længden af koden er i dette tilfælde defineret som ). Sagen er, at det genererende polynomium og kodeafstanden er fuldstændig skjult bag forskellen.
Dekoderen, der arbejder i henhold til den autoregressive spektrale afkodningsmetode, udfører sekventielt følgende handlinger:
Beregningen af fejlsyndromet udføres af syndromdekoderen, som opdeler kodeordet i et generatorpolynomium. Hvis der er en rest under division, så er der en fejl i ordet. Resten af delingen er fejlsyndromet.
Konstruktion af fejlpolynomietDet beregnede fejlsyndrom angiver ikke fejlens position. Graden af syndrompolynomiet er , hvilket er meget mindre end graden af kodeordet . For at opnå en overensstemmelse mellem en fejl og dens position i meddelelsen konstrueres et fejlpolynomium. Fejlpolynomiet implementeres ved hjælp af Berlekamp-Massey- algoritmen eller ved hjælp af Euclid-algoritmen. Euclids algoritme har en simpel implementering, men er ressourcekrævende. Derfor bruges den mere komplekse, men mindre omkostningskrævende, Berlekamp-Massey-algoritme oftere. Koefficienterne for det fundne polynomium svarer direkte til koefficienterne for de fejlagtige symboler i kodeordet.
Find rødderPå dette trin søges der efter rødderne af fejlpolynomiet, som bestemmer placeringen af de forvrængede symboler i kodeordet. Det implementeres ved hjælp af Chens procedure, som svarer til udtømmende opregning. Alle mulige værdier substitueres sekventielt i fejlpolynomiet, når polynomiet forsvinder, findes rødderne.
Bestemmelse af fejlens art og dens rettelseBaseret på fejlsyndromet og de fundne polynomiale rødder bestemmes fejlens art ved hjælp af Forney-algoritmen, og der bygges en maske af forvrængede symboler. For RS-koder er der dog en nemmere måde at finde fejlens art. Som vist i [2] for RS-koder med et vilkårligt sæt af på hinanden følgende nuller :
hvor er den formelle afledte med hensyn til fejlfinderpolynomiet , og
Yderligere, efter at masken er fundet, overlejres den på kodeordet ved hjælp af XOR -operationen, og de forvrængede tegn gendannes. Derefter kasseres kontroltegnene, og det gendannede informationsord opnås.
Sudans algoritmePå dette tidspunkt er fundamentalt nye afkodningsmetoder blevet anvendt, for eksempel den algoritme, der blev foreslået i 1997 af Madhu Sudan [3] .
RS-kodeforlængelse er en procedure, hvor kodens længde og afstand øges (mens koden stadig er på Singleton-grænsen , og kodealfabetet ikke ændres), og antallet af informationssymboler i koden ikke ændres [4] . Denne procedure øger kodens korrigerende evne . Overvej at forlænge RS-koden med ét symbol. Lade være en RS-kodevektor, hvis genererende polynomium er . Lad nu . Lad os vise, at tilføjelse af et symbol til vektoren vil øge dens vægt til , hvis . Polynomiet svarende til kodevektoren kan skrives som , men under hensyntagen til udtrykket for , får vi . , da 1 ikke hører til listen over rødder for det genererende polynomium. Men også , da i dette tilfælde , hvilket ville øge afstanden til koden i modsætning til betingelsen, betyder det, at kodens vægt er steget, på grund af tilføjelsen af et nyt tegn . Nye kodeparametre , forlænget vektor . Kontrolmatrixen for en ikke-strakt kode har formen
Så vil tjekmatrixen udvidet med ét symbol af pc-koden være
Umiddelbart efter fremkomsten (60'erne af det XX århundrede) begyndte Reed-Solomon-koder at blive brugt som eksterne koder i kaskadestrukturer, der blev brugt i satellitkommunikation. I sådanne konstruktioner er de -th PC-symboler (der kan være flere af dem) kodet af interne foldningskoder . I den modtagende ende afkodes disse symboler med en blød Viterbi-algoritme (effektiv i AWGN -kanaler ). En sådan dekoder vil rette enkelte fejl i q-ary-symboler, men når burst-fejl opstår, og nogle pakker af q-ary-symboler er dekodet forkert, så vil den eksterne Reed-Solomon-dekoder rette bursts af disse fejl. Dermed vil den nødvendige pålidelighed af informationstransmission blive opnået ( [5] ).
I øjeblikket har Reed-Solomon-koder et meget bredt anvendelsesområde på grund af deres evne til at finde og rette flere fejludbrud.
Reed-Solomon-koden bruges ved skrivning og læsning i RAM-controllere, ved arkivering af data, skrivning af information til harddiske ( ECC ), skrivning til CD/DVD-diske. Selvom en betydelig mængde information er beskadiget, er flere sektorer af diskmediet beskadiget, så giver Reed-Solomon-koder dig mulighed for at gendanne det meste af den tabte information. Bruges også ved skrivning til medier såsom magnetbånd og stregkoder.
Brænder til cd-romMulige fejl ved læsning fra en disk vises allerede på diskproduktionsstadiet, da det er umuligt at lave en ideel disk med moderne teknologier. Fejl kan også være forårsaget af ridser på diskens overflade, støv osv. Når man laver en læsbar cd, bruges CIRC-korrektionssystemet (Cross Interleaved Reed Solomon Code). Denne korrektion er implementeret i alle enheder, der tillader læsning af data fra cd'er i form af en chip med firmware. Fejldetektering og korrektion er baseret på redundans og interleaving . Redundans - cirka 25% af den oprindelige information.
Optagelse til lyd-cd'er bruger Red Book- standarden . Fejlretning sker på to niveauer, C1 og C2. Ved indkodning i det første trin tilføjes kontrolsymboler til de originale data, i det andet trin kodes informationen igen. Ud over kodning er bytes også interleaved ( interleaved ), så fejlblokke under korrektion brydes op i separate bits, der er nemmere at rette. På det første niveau bliver fejlagtige blokke på en og to bytes lange (henholdsvis et og to fejlagtige tegn) detekteret og rettet. Fejlblokke på tre bytes detekteres og sendes til næste lag. På det andet niveau detekteres og korrigeres 1 og 2 byte fejlblokke, der stammer fra C2. Detekteringen af tre fejlagtige tegn er en fatal fejl og kan ikke rettes.
Denne kodningsalgoritme bruges i datatransmission over WiMAX -netværk , i optiske kommunikationslinjer , i satellit- og radiorelækommunikation . Metoden Forward Error Correction (FEC) er baseret på Reed-Solomon-koder.
Lad . Derefter
Graden er 4, og . Hvert feltelement kan kortlægges til 4 bit. Informationspolynomiet er en sekvens på 11 tegn fra , hvilket svarer til 44 bit, og hele kodeordet er et sæt på 60 bit.
Lad . Derefter
Lad informationspolynomiet have formen:
Kodeordet for en ikke-systematisk kode vil blive skrevet som:
som er en sekvens af syv oktale tegn.
Lad os konstruere Galois-feltet modulo polynomiet . Lad dens rod, så , felttabellen ser sådan ud:
Lad informationspolynomiet , og lav derefter de tilsvarende beregninger på det konstruerede felt, får vi:
Som et resultat blev en RS-kodevektor med parametre konstrueret . Dette fuldender kodningen. Bemærk, at med denne metode behøvede vi ikke et genererende kodepolynomium [4] .
Lad feltet være genereret af et primitivt element, hvis irreducible polynomium er . Så . Lad . Så er det genererende polynomium af PC-koden lig med . Lad nu polynomiet blive accepteret . Så . Derefter opnås nøglesystemet af ligninger i formen:
Overvej nu den euklidiske algoritme til løsning af dette ligningssystem.
Algoritmen stopper fordi , derfor følger det
Yderligere giver en komplet søgning ved hjælp af Cheney-algoritmen os placeringen af fejlene, dette er . Så ved formlen får vi det
Altså den afkodede vektor . Afkodning afsluttet, to fejl rettet [6] .