Reed-Solomon Code | |
---|---|
Döpt efter | Irving Reed [d] och Gustav Solomon [d] |
Sorts | |
Blocklängd | |
Meddelandets längd | |
Distans | |
Alfabetets storlek | för enkelt , ofta |
Beteckning | |
Mediafiler på Wikimedia Commons |
Reed -Solomon-koder ( eng. Reed-Solomon-koder ) är icke-binära cykliska koder som låter dig korrigera fel i datablock. Elementen i kodvektorn är inte bitar, utan grupper av bitar (block). Reed-Solomon-koder är mycket vanliga och arbetar med bytes (oktetter).
Reed-Solomon-koden är ett specialfall av BCH-koden .
Det används för närvarande flitigt i dataåterställningssystem från CD- skivor , när man skapar arkiv med information för återställning vid skada, vid bruskorrigerande kodning .
-Solomon-koden uppfanns 1960 av Reid och Gustav Solomon Laboratory vid Massachusetts Institute of Idén att använda denna kod presenterades i artikeln "Polynomiala koder över vissa ändliga fält". Effektiva avkodningsalgoritmer föreslogs 1969 av Alvin Berlekamp och James Massey ( Berlekamp-Massey algorithm ) och 1977 av David Mandelbaum (metod som använder euklidalgoritmen [1] ). Den första användningen av Reed-Solomon-koden var 1982 i serieproduktionen av CD-skivor.
Reed-Solomon-koder är ett viktigt specialfall av en BCH -kod vars generatorpolynomrötter ligger i samma fält som koden är uppbyggd över ( ). Låt vara en del av ordningsområdet . Om är ett primitivt element, då är dess ordning , det vill säga . Sedan är det normaliserade polynomet med minsta grad över fältet vars rötter är konsekutiva potenser av elementet det genererande polynomet för Reed-Solomon-koden över fältet :
där är något heltal (inklusive 0 och 1), med hjälp av vilket det ibland är möjligt att förenkla kodaren. Vanligtvis ska det . Graden av polynomet är .
Längden på den resulterande koden , det minsta avståndet (är det minsta av alla Hamming-avstånd för alla par av kodord, se radkod ). Koden innehåller kontrollsymboler, där anger graden av polynomet; antal informationssymboler . Således är Reed-Solomon-koden också en separerbar kod med ett maximalt avstånd (den är optimal i betydelsen Singleton bound ).
Kodpolynomet kan erhållas från informationspolynomet , genom att multiplicera och :
Reed-Solomon-koden över , som korrigerar fel, kräver paritetssymboler och kan användas för att korrigera godtyckliga felpaket av längd eller mindre. Enligt Reigers gränssats är Reed-Solomon-koder optimala när det gäller förhållandet mellan paketlängden och möjligheten till felkorrigering - med hjälp av ytterligare kontrollsymboler korrigeras fel (och mindre).
Sats (Reiger bunden) . Varje linjär blockkod som korrigerar alla skurar av längd eller mindre måste innehålla åtminstone paritetssymboler.
En kod dubbel till en Reed-Solomon-kod är också en Reed-Solomon-kod. Den dubbla koden för en cyklisk kod är den kod som genereras av dess kontrollpolynom.
En matris genererar en Reed-Solomon-kod om och bara om någon minor i matrisen inte är noll.
När du punkterar eller förkortar Reed-Solomon-koden erhålls Reed-Solomon-koden igen. Punktering är en operation som tar bort ett kontrolltecken. Kodlängden reduceras med en, dimensionen bevaras. Kodavståndet måste minska med ett, annars skulle det raderade tecknet vara värdelöst. Förkortning - vi fixar en godtycklig kodkolumn och väljer bara de vektorer som innehåller 0. Denna uppsättning vektorer bildar ett delrum .
Reed-Solomon-koden är en av de mest kraftfulla koderna för att korrigera flera felskurar. Det används i kanaler där felskurar kan uppstå så ofta att de inte längre kan korrigeras med koder som korrigerar enstaka fel.
En Reed-Solomon - överfältskod med ett kodavstånd kan ses som en -fält-över-fältkod som kan korrigera valfri kombination av fel koncentrerade i eller färre block med m tecken. Det största antalet längdblock som kan påverkas av ett paket med längd , där , inte överstiger , så kod som kan korrigera felblock kan alltid korrigera valfri kombination av paket med total längd om .
Reed-Solomon-kodning kan implementeras på två sätt: systematisk och icke-systematisk (se [1] för en beskrivning av kodaren).
Med icke-systematisk kodning multipliceras informationsordet med något irreducerbart polynom i Galois-fältet. Det resulterande kodade ordet är helt annorlunda än det ursprungliga, och för att extrahera informationsordet måste du utföra en avkodningsoperation, och först då kan du kontrollera data för fel. Sådan kodning kräver mycket resurser endast för att extrahera informationsdata, medan de kan vara felfria.
Vid systematisk kodning tilldelas checksymboler till ett informationsblock av symboler, vid beräkning av varje checksymbol används alla symboler i originalblocket. I detta fall finns det ingen overhead vid extrahering av det ursprungliga blocket om informationsordet inte innehåller fel, men kodaren/avkodaren måste utföra additions- och multiplikationsoperationer för att generera paritetssymboler. Dessutom, eftersom alla operationer utförs i Galois-fältet, kräver själva kodnings-/avkodningsoperationerna mycket resurser och tid. En snabb avkodningsalgoritm baserad på Fast Fourier Transform körs i en tid av storleksordningen .
Under kodningsoperationen multipliceras informationspolynomet med det genererande polynomet. Multiplikation av det ursprungliga längdordet med ett irreducerbart polynom i systematisk kodning kan göras på följande sätt:
Kodaren är uppbyggd av skiftregister, adderare och multiplikatorer. Skiftregistret består av minnesceller, som var och en innehåller ett element i Galois-fältet.
Det finns ett annat kodningsförfarande (mer praktiskt och enklare). Låt vara ett primitivt element i fältet , och låt vara en vektor av informationssymboler, och därmed ett informationspolynom. Då är vektorn Reed-Solomon-kodvektorn som motsvarar informationsvektorn . Denna kodningsmetod visar att för PC-koden är det inte nödvändigt att känna till det genererande polynomet och den genererande matrisen för koden alls, det räcker att känna till fältets expansion i termer av det primitiva elementet och kodens dimension (kodens längd i detta fall definieras som ). Saken är den att det genererande polynomet och kodavståndet är helt dolda bakom skillnaden.
Avkodaren, som arbetar enligt den autoregressiva spektrala avkodningsmetoden, utför sekventiellt följande åtgärder:
Beräkningen av felsyndromet utförs av syndromavkodaren, som delar upp kodordet i ett generatorpolynom. Om det finns en rest under division, så finns det ett fel i ordet. Resten av divisionen är felsyndromet.
Konstruktion av felpolynometDet beräknade felsyndromet indikerar inte felens position. Graden av syndrompolynomet är , vilket är mycket mindre än graden av kodordet . För att få en överensstämmelse mellan ett fel och dess position i meddelandet konstrueras ett felpolynom. Felpolynomet implementeras med Berlekamp-Massey- algoritmen eller med Euklid-algoritmen. Euclids algoritm har en enkel implementering, men är resurskrävande. Därför används den mer komplexa, men mindre kostsamma Berlekamp-Massey-algoritmen oftare. Koefficienterna för det hittade polynomet motsvarar direkt koefficienterna för de felaktiga symbolerna i kodordet.
Hitta rötterI detta skede söker man efter rötterna till felpolynomet, vilka bestämmer positionen för de förvrängda symbolerna i kodordet. Det implementeras med Chens procedur, vilket motsvarar en uttömmande uppräkning. Alla möjliga värden ersätts sekventiellt i felpolynomet, när polynomet försvinner hittas rötterna.
Fastställande av felets natur och dess korrigeringBaserat på felsyndromet och de hittade polynomrötterna bestäms felets natur med hjälp av Forney-algoritmen och en mask av förvrängda symboler byggs upp. Men för RS-koder finns det ett enklare sätt att hitta felens natur. Som visas i [2] för RS-koder med en godtycklig uppsättning av på varandra följande nollor :
där är den formella derivatan med avseende på fellokaliseringspolynomet , och
Vidare, efter det att masken har hittats, överlagras den på kodordet med användning av XOR -operationen och de förvrängda tecknen återställs. Därefter kasseras kontrolltecknen och det återvunna informationsordet erhålls.
Sudans algoritmVid denna tidpunkt har fundamentalt nya avkodningsmetoder tillämpats, till exempel den algoritm som föreslogs 1997 av Madhu Sudan [3] .
RS-kodförlängning är en procedur där kodens längd och avstånd ökar (medan koden fortfarande är på Singleton-gränsen och kodalfabetet inte ändras), och antalet informationssymboler för koden inte ändras [4] . Denna procedur ökar kodens korrigeringsförmåga . Överväg att förlänga RS-koden med en symbol. Låta vara en RS-kodvektor vars genererande polynom är . Låt nu . Låt oss visa att om du lägger till en symbol i vektorn ökar dess vikt till , om . Polynomet som motsvarar kodvektorn kan skrivas som , men då, med hänsyn till uttrycket för , får vi . , eftersom 1 inte hör till listan över rötter för det genererande polynomet. Men också , eftersom i det här fallet , vilket skulle öka kodens avstånd i motsats till villkoret, betyder detta att kodens vikt har ökat, på grund av att ett nytt tecken lagts till . Nya kodparametrar , förlängd vektor . Kontrollmatrisen för en icke-sträckt kod har formen
Då blir kontrollmatrisen utökad med en symbol för PC-koden
Omedelbart efter uppkomsten (60-talet av XX-talet) började Reed-Solomon-koder användas som externa koder i kaskadstrukturer som används i satellitkommunikation. I sådana konstruktioner kodas de -e PC-symbolerna (det kan finnas flera av dem) av interna faltningskoder . I den mottagande sidan avkodas dessa symboler med en mjuk Viterbi-algoritm (effektiv i AWGN -kanaler ). En sådan avkodare kommer att korrigera enstaka fel i q-ary-symboler, men när skurfel uppstår och vissa paket med q-ary-symboler avkodas felaktigt, kommer den externa Reed-Solomon-avkodaren att korrigera skurarna av dessa fel. Därmed kommer den erforderliga tillförlitligheten för informationsöverföring att uppnås ( [5] ).
För närvarande har Reed-Solomon-koder ett mycket brett räckvidd på grund av deras förmåga att hitta och korrigera flera skurar av fel.
Reed-Solomon-koden används vid skrivning och läsning i RAM-kontroller, vid arkivering av data, skrivning av information till hårddiskar ( ECC ), skrivning till CD/DVD-skivor. Även om en betydande mängd information är skadad, skadas flera sektorer av diskmediet, då låter Reed-Solomon-koder dig återställa det mesta av den förlorade informationen. Används även när du skriver till media som magnetband och streckkoder.
Bränna till CD-ROMMöjliga fel när du läser från en disk visas redan vid diskproduktionsstadiet, eftersom det är omöjligt att göra en idealisk disk med modern teknik. Fel kan också orsakas av repor på skivans yta, damm etc. När du gör en läsbar CD används därför CIRC (Cross Interleaved Reed Solomon Code) korrigeringssystemet. Denna korrigering är implementerad i alla enheter som tillåter läsning av data från CD-skivor i form av ett chip med firmware. Feldetektering och korrigering baseras på redundans och interfoliering . Redundans - cirka 25% av den ursprungliga informationen.
Inspelning till ljud-CD-skivor använder Red Book -standarden . Felkorrigering sker på två nivåer, C1 och C2. Vid kodning i det första steget läggs kontrollsymboler till originaldatan, i det andra steget kodas informationen igen. Förutom kodning interfolieras även bytes ( interfolierade ) så att felblock under korrigering bryts upp i separata bitar som är lättare att korrigera. På den första nivån upptäcks och korrigeras felaktiga block på en och två byte långa (ett respektive två felaktiga tecken). Felblock på tre byte upptäcks och skickas till nästa lager. På den andra nivån detekteras och korrigeras 1 och 2 byte felblock som har sitt ursprung i C2. Upptäckten av tre felaktiga tecken är ett allvarligt fel och kan inte korrigeras.
Denna kodningsalgoritm används vid dataöverföring över WiMAX -nätverk , i optiska kommunikationslinjer , i satellit- och radioreläkommunikation . Metoden Forward Error Correction (FEC) är baserad på Reed-Solomon-koder.
Låt . Sedan
Graden är 4, och . Varje fältelement kan mappas till 4 bitar. Informationspolynomet är en sekvens av 11 tecken från , vilket motsvarar 44 bitar, och hela kodordet är en uppsättning av 60 bitar.
Låt . Sedan
Låt informationspolynomet ha formen:
Kodordet för en icke-systematisk kod kommer att skrivas som:
som är en sekvens av sju oktala tecken.
Låt oss konstruera Galois-fältet modulo polynomet . Låt dess rot, då ser fälttabellen ut så här:
Låt informationspolynomet och sedan göra motsvarande beräkningar på det konstruerade fältet får vi:
Som ett resultat konstruerades en RS-kodvektor med parametrar . Detta avslutar kodningen. Observera att med denna metod behövde vi inte ett genererande kodpolynom [4] .
Låt fältet genereras av ett primitivt element vars irreducible polynom är . Sedan . Låt . Då är det genererande polynomet för PC-koden lika med . Låt nu polynomet accepteras . Sedan . Då erhålls nyckelsystemet av ekvationer i formen:
Betrakta nu den euklidiska algoritmen för att lösa detta ekvationssystem.
Algoritmen stannar eftersom , därför följer det det
Vidare ger en fullständig sökning med Cheney-algoritmen oss positionerna för felen, det här är . Sedan får vi det genom formeln
Alltså den avkodade vektorn . Avkodning klar, två buggar fixade [6] .