Reed-Solomon-koodit: miten polynomipohjainen virheenkorjaus toimii

Reed–Solomon-virheenkorjaus: miten polynominäytteistä palautetaan data virheistä — käytännön selitys CD/DVD/Blu-ray-, DSL- ja lähetysjärjestelmissä.

Tekijä: Leandro Alegsa

Reed-Solomon-virheenkorjaus on eteenpäin suuntautuva virheenkorjauskoodi. Se toimii ylinäytteistämällä datasta muodostettua polynomia. Polynomi arvioidaan useissa pisteissä, ja nämä arvot lähetetään tai tallennetaan. Jos polynomista otetaan näytteitä useammin kuin on tarpeen, polynomi on ylideterminoitu. Kunhan vastaanotin vastaanottaa "monet" pisteet oikein, se voi palauttaa alkuperäisen polynomin, vaikka "muutama" piste olisi huono.

Reed-Solomon-koodeja käytetään monissa erilaisissa kaupallisissa sovelluksissa, esimerkiksi CD-, DVD- ja Blu-ray-levyissä, tiedonsiirtotekniikoissa, kuten DSL- ja WiMAX-verkoissa, sekä lähetysjärjestelmissä, kuten DVB ja ATSC.

Miten Reed–Solomon toimii käytännössä

Perusidea on yksinkertainen ja intuitiivinen: datasta muodostetaan polynomi P(x), jonka aste on pienempi kuin k (datasymbolien määrä). Polynomi arvioidaan n eri pisteessä (eri x-arvoilla) ja saadut arvot muodostavat koodisanan, jonka pituus on n. Vastaanottaja yrittää rekonstruoida alkuperäisen polynomin näiden pisteiden perusteella. Koska pisteitä on enemmän kuin tarvitaan, pieni määrä virheellisiä pisteitä ei estä alkuperäisen polynomin palauttamista.

Teknisesti operaatiot tehdään äärellisessä kentässä, yleensä GF(2^m), eli symbolit ovat tavallisesti tavun (8 bitin) kokoisia kun m = 8. Yleinen merkintä on RS(n, k), jossa n on koodisanan pituus symboleina ja k alkuperäisten datasyMBOLien määrä. Usein pätevä vaatimus on n ≤ 2^m − 1.

Virheenkorjauskapasiteetti

  • Virheiden korjaus: Reed–Solomon voi korjata enintään t = floor((n − k) / 2) symbolivirhettä (eli virheellisiä symboleja tuntemattomissa paikoissa).
  • Puuttuvien symbolien (erasure) korjaus: Jos vastaanottaja tietää, missä paikoissa symbolit ovat kadonneet tai epäluotettavia, voidaan korjata jopa n − k erasurea.
  • Esimerkki: RS(255,223) -koodissa on 32 pariteettisymbolia, joten se voi korjata enintään 16 symbolivirhettä tai 32 tunnetuksi ilmoitettua puuttuvaa symbolia.

Osa-algoritmeja ja toteutus

Rekonstruktion käytännön algoritmeja ovat muun muassa Berlekamp–Massey- ja Eukleideen algoritmi virhesijaintien löytämiseksi sekä Forneyn kaava virheinformaatioiden laskemiseen. Nykyisempiä tai erikoistapauksia ovat Gao-algoritmi ja listadekoodaukseen liittyvät Guruswami–Sudan -menetelmät, jotka voivat löytää useampia ehdokkaita tapauksissa, joissa virheitä on enemmän kuin t.

Käytännössä toteutus vaatii äärellisen kentän laskutoimituksia (lisäys, kertolasku, käänteislasku), jotka on optimoitu taulukoinnilla tai erikoisrutiineilla sulautetuissa järjestelmissä. Monet ohjelmisto- ja laitteistokirjastot tarjoavat valmiita RS-implementaatioita.

Ominaisuudet ja käyttötarkoitukset

  • Reed–Solomon on erityisen hyvä käsittelemään symboli- eli ryhmävirheitä, joten se soveltuu erinomaisesti tilanteisiin, joissa virheet tulevat peräkkäisinä "burst"-tyyppisinä, kuten optisissa levyissä tai kanavan kohinan aiheuttamina bittiryppäinä.
  • Sitä käytetään laajasti digitaalisessa tallennuksessa ja lähetyksessä: esimerkiksi optisilla levyillä RS-koodit yhdessä interleaving-menetelmien kanssa hajauttavat bittivirheitä, jolloin yksittäiset virheet eivät riko pitkiä tietojaksoja.
  • Reed–Solomonin rinnalla käytetään nykyaikaisissa järjestelmissä myös tehokkaampia koodeja (esim. LDPC, turbo-koodit) erityisesti pitkissä blokkikoodeissa ja lähetyksissä, mutta RS pysyy suosittuna kun tarvitaan luotettavaa symbolipohjaista korjausta ja yksinkertaista determinististä käyttäytymistä.

Käytännön esimerkki (yksinkertaistettu)

Ajatellaan kolmesta datasybolista muodostettua polynomia P(x) = a0 + a1 x + a2 x^2 (aste < 3). Arvioidaan tämä polynomi viidessä pisteessä x = 1,2,3,4,5 ja lähetetään arvot. Vastaanottaja saa viisi symbolia, joista korkeintaan yksi voi olla virheellinen. Koska vastaanottaja tarvitsee vain kolme oikeaa pistettä polynomin interpolointiin, hän voi tunnistaa ja korjata yhden virheen ja rekonstruoida alkuperäiset a0,a1,a2.

Rajoituksia ja huomioita

  • Reed–Solomon käsittelee symboleja kerrallaan, ei yksittäisiä bittejä — tämä tekee siitä tehokkaan ryppäiden korjauksessa mutta vähemmän tehokkaan erittäin korkean bittivirhesuhteen tilanteissa ilman muita mekanismeja (kuten bittitason koodaus tai interleaving).
  • Koodin tehokkuus ja virheenkorjauskapasiteetti riippuvat valituista n ja k -arvoista sekä symbolikentän koosta.
  • Suurempi korjauskyky vaatii lisää pariteettisymboleja, mikä kasvattaa ylikuormaa (overhead).

Yhteenvetona Reed–Solomon on vahva ja monipuolinen symbolipohjainen virheenkorjausmenetelmä, joka perustuu polynomien arviointiin ja interpolaatioon äärellisissä kentissä. Se tarjoaa ennustettavan ja tehokkaan tavan korjata sekä satunnaisia että ryppävirheitä ja siksi sitä käytetään edelleen laajalti tallennus- ja tiedonsiirtotekniikoissa.

Yleiskatsaus

Reed-Solomon-koodit ovat lohkokoodeja. Tämä tarkoittaa sitä, että kiinteä tulotietolohko jalostetaan kiinteäksi tulotietolohkoksi. Yleisimmin käytetyn R-S-koodin (255, 223) tapauksessa 223 Reed-Solomon-sisääntulosymbolia (kukin kahdeksan bittiä pitkä) koodataan 255 lähtösymboliksi.

  • Useimmat R-S ECC-järjestelmät ovat järjestelmällisiä. Tämä tarkoittaa, että jokin osa ulostulokoodisanasta sisältää syöttötiedot alkuperäisessä muodossaan.
  • Reed-Solomon-symbolin koko valittiin kahdeksan bittiä, koska suurempien symbolien dekooderit olisi vaikea toteuttaa nykytekniikalla. Tämä suunnitteluvalinta pakottaa pisimmän koodisanan pituudeksi 255 symbolia.
  • Normaali (255, 223) Reed-Solomon-koodi pystyy korjaamaan enintään 16 Reed-Solomon-symbolin virhettä kussakin koodisanassa. Koska kukin symboli on itse asiassa kahdeksan bittiä, tämä tarkoittaa, että koodi voi korjata jopa 16 lyhyttä virhepätkää, jotka johtuvat sisäisestä konvoluutiodesektorista.

Reed-Solomon-koodi on konvoluutiokoodin tavoin läpinäkyvä koodi. Tämä tarkoittaa sitä, että jos kanavasymbolit on käännetty jossain vaiheessa, dekooderit toimivat edelleen. Tulos on alkuperäisen datan komplementti. Reed-Solomon-koodi menettää kuitenkin läpinäkyvyytensä, jos käytetään virtuaalista nollatäyttöä. Tästä syystä on pakollista, että datan merkitys (ts. tosi tai täydennetty) ratkaistaan ennen Reed-Solomon-dekoodausta.

Voyager-ohjelman tapauksessa R-S-koodit saavuttavat lähes optimaalisen suorituskyvyn, kun ne yhdistetään (7, 1/2) konvoluutiokoodin (Viterbi) kanssa. Koska jokaista korjattavaa virhettä kohti tarvitaan kaksi tarkistussymbolia, saadaan koodisanaa kohti yhteensä 32 tarkistussymbolia ja 223 informaatiosymbolia.

Lisäksi Reed-Solomon-koodisanat voidaan lomittaa symbolikohtaisesti ennen konvoluutiokoodausta. Koska näin koodisanan symbolit erotetaan toisistaan, on epätodennäköisempää, että Viterbi-dekooderin purske häiritsee useampaa kuin yhtä Reed-Solomon-symbolia yhdessä koodisanassa.

Perusajatus

Reed-Solomon-koodin keskeinen idea on, että koodattu tieto esitetään ensin polynomina. Koodi perustuu algebran lauseeseen, jonka mukaan k eri pistettä määrittää yksikäsitteisesti enintään k-1-asteisen polynomin.

Lähettäjä määrittää äärellisen kentän yli k - 1 asteen {\displaystyle k-1}{\displaystyle k-1} polynomin, joka edustaa k {\displaystyle k}k datapistettä. Polynomi "koodataan" sen jälkeen arvioimalla se eri pisteissä, ja nämä arvot ovat se, mitä todella lähetetään. Lähetyksen aikana jotkin näistä arvoista voivat korruptoitua. Tämän vuoksi lähetetään todellisuudessa enemmän kuin k pistettä. Kunhan tarpeeksi monta arvoa vastaanotetaan oikein, vastaanottaja voi päätellä, mikä alkuperäinen polynomi oli, ja purkaa alkuperäisen datan.

Samaan tapaan kuin käyrää voidaan korjata interpoloimalla aukon ohi, Reed-Solomon-koodi voi kuroa umpeen sarjan virheitä tietolohkossa ja palauttaa alkuperäisen käyrän piirtäneen polynomin kertoimet.

Historia

Koodin keksivät vuonna 1960 Irving S. Reed ja Gustave Solomon, jotka kuuluivat tuolloin MIT:n Lincolnin laboratorioon. Heidän uraauurtava artikkelinsa oli nimeltään "Polynomial Codes over Certain Finite Fields". Kun artikkeli kirjoitettiin, digitaalitekniikka ei ollut vielä tarpeeksi kehittynyttä käsitteen toteuttamiseksi. Ensimmäinen RS-koodien sovellus massatuotteissa vuonna 1982 oli CD-levy, jossa käytetään kahta lomitettua RS-koodia. Elwyn Berlekamp ja James Massey kehittivät tehokkaan dekoodausalgoritmin suurten etäisyyksien RS-koodeille vuonna 1969. Nykyään RS-koodeja käytetään kiintolevyissä, DVD-levyissä, televiestinnässä ja digitaalisten lähetysten protokollissa.



Etsiä
AlegsaOnline.com - 2020 / 2025 - License CC3