Linjakoodi

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 28. tammikuuta 2021 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

Matematiikassa ja informaatioteoriassa viivakoodi  on eräänlainen lohkokoodi, jota käytetään virheenilmaisu- ja -korjauspiireissä. Lineaariset koodit mahdollistavat muihin koodeihin verrattuna tehokkaampien algoritmien toteuttamisen tiedon koodaamiseen ja dekoodaukseen.

Perusteet

Tietojen tallentamisessa ja tiedonsiirrossa viestintäverkkojen kautta tapahtuu väistämättä virheitä. Tietojen eheyden valvonta ja virheenkorjaus ovat tärkeitä tehtäviä monilla tiedon kanssa työskentelyn tasoilla (erityisesti OSI -mallin fyysisellä , tietolinkki- ja siirtokerroksella ).

Viestintäjärjestelmissä on useita strategioita virheiden käsittelemiseksi:

Virheiden havaitsemis- ja korjauskoodit

Korjauskoodit - koodit, joita käytetään havaitsemaan tai korjaamaan virheet, jotka tapahtuvat tiedonsiirron aikana häiriön vaikutuksen alaisena sekä sen tallennuksen aikana.

Tätä varten ne lisäävät hyödylliseen dataan kirjoitettaessa (lähetettäessä) erityisen strukturoitua redundanttia tietoa, jota luettaessa (vastaanottaessa) käytetään virheiden havaitsemiseen tai korjaamiseen. Luonnollisesti korjattavien virheiden määrä on rajallinen ja riippuu käytetystä koodista.

Virheenkorjauskoodeihin liittyvät läheisesti virheentunnistuskoodit . Toisin kuin edellinen, jälkimmäinen voi vain todeta virheen lähetetyssä tiedossa, mutta ei korjata sitä.

Itse asiassa käytetyt virheentunnistuskoodit kuuluvat samoihin koodiluokkiin kuin virheenkorjauskoodit. Itse asiassa mitä tahansa virheenkorjauskoodia voidaan käyttää myös virheiden havaitsemiseen (jolloin se pystyy havaitsemaan enemmän virheitä kuin se pystyi korjaamaan).

Datan kanssa työskentelytavan mukaan virheenkorjauskoodit jaetaan lohkokoodeihin , jotka jakavat tiedon vakiopituisiin fragmentteihin ja käsittelevät niitä erikseen, sekä konvoluutiokoodeihin , jotka toimivat datan kanssa jatkuvana virtana.

Estä koodit

Olkoon koodattu tieto jaettu bittipituisiksi fragmenteiksi, jotka muunnetaan bittipituisiksi koodisanoiksi . Tällöin yleensä merkitään vastaava lohkokoodi . Tässä tapauksessa numeroa kutsutaan koodinopeudeksi .

Jos koodi jättää alkuperäiset bitit ennalleen ja lisää tarkistuksia , tällaista koodia kutsutaan systemaattiseksi , muuten ei-systeemiseksi .

Voit asettaa lohkokoodin eri tavoilla, mukaan lukien taulukko, jossa jokainen tietobittijoukko liittyy koodisanan bittiin. Hyvän koodin tulee kuitenkin täyttää ainakin seuraavat kriteerit:

On helppo nähdä, että nämä vaatimukset ovat ristiriidassa keskenään. Siksi on olemassa suuri määrä koodeja, joista jokainen sopii tehtäviinsä.

Lähes kaikki käytetyt koodit ovat lineaarisia . Tämä johtuu siitä tosiasiasta, että epälineaarisia koodeja on paljon vaikeampi tutkia, ja niiden on vaikea tarjota hyväksyttävää helpotusta koodaukseen ja dekoodaukseen.

Lineaariset välilyönnit

Luodaan matriisia

Olkoon vektorit lineaariavaruuden perusta . _ Kantaman määritelmän mukaan mikä tahansa vektori voidaan esittää kantavektoreiden lineaarisena yhdistelmänä: , tai matriisimuodossa , kuten:

,

jossa kutsutaan lineaarisen avaruuden generaattorimatriisiksi .

Tämä relaatio muodostaa yhteyden kertoimien vektorien ja vektorien välille . Listaamalla kaikki kertoimien vektorit saat kaikki vektorit . Toisin sanoen matriisi muodostaa lineaarisen avaruuden.

Tarkista matriisi

Toinen tapa määritellä lineaariset avaruudet on kuvata niitä tarkistusmatriisin avulla.

Antaa olla  lineaarinen k-ulotteinen aliavaruus n-ulotteisen avaruuden yli äärellisen kentän ja  olla ortogonaalinen komplementti . Sitten yhden lineaarialgebran lauseen mukaan ulottuvuus on . Siksi sisällä on r kantavektoria . Olkoon pohja sisällä .

Sitten mikä tahansa vektori täyttää seuraavan lineaarisen yhtälöjärjestelmän :

Tai matriisimuodossa :

missä on tarkistusmatriisi.

Lineaarisen yhtälön pelkistettyä järjestelmää on pidettävä lineaarisen avaruuden kaikkien vektorien tarkistusjärjestelmänä, joten matriisia kutsutaan tarkistusmatriisiksi.

Muodollinen määritelmä

Lineaarinen koodi , jonka pituus on n ja arvo on k , on lineaarinen aliavaruus C , jonka dimensio on vektoriavaruudessa k , jossa  on q - elementtien äärellinen kenttä . Tällaista koodia, jossa on parametri q, kutsutaan q-arvoiseksi koodiksi (jos esimerkiksi q = 5, niin tämä on 5-arvoinen koodi). Jos q = 2 tai q = 3, koodi on vastaavasti binäärinen tai ternaarinen .

Lineaarinen (lohko)koodi  on sellainen koodi, jonka koodisanojen joukko muodostaa -ulotteisen lineaarisen aliavaruuden (kutsutaanko sitä ) -ulotteiseen lineaariavaruuteen , joka on isomorfinen -bittisten vektoreiden avaruuden kanssa .

Tämä tarkoittaa, että koodaustoiminto vastaa alkuperäisen bittivektorin kertomista ei-singulaarisella matriisilla , jota kutsutaan generaattorimatriisiksi .

Antaa olla  ortogonaalinen aliavaruus suhteessa , Ja  olla matriisi, joka määrittää tämän aliavaruuden perusteella . Sitten se on totta mille tahansa vektorille :

.

Ominaisuudet ja tärkeät lauseet

Minimietäisyys ja korjaava teho

Kahden koodisanan välinen Hamming-etäisyys ( Hamming -metriikka ) oneri bittien lukumäärä vastaavissa paikoissa, eli "yksiköiden" lukumäärä vektorissa.

Rivikoodin minimietäisyys on kaikkien koodisanaparien Hamming -etäisyyksien pienin .

Vektorin paino on   tämän vektorin ja nollavektorin välinen Hamming-etäisyys, toisin sanoen vektorin nollasta poikkeavien komponenttien lukumäärä.

Lause 1:

Rivikoodin vähimmäisetäisyys on yhtä suuri kuin nollasta poikkeavien koodisanojen Hamming-painot:

Todiste:

Kahden vektorin välinen etäisyys täyttää yhtälön , jossa  on vektorin Hamming - paino . Siitä tosiasiasta, että lineaarisen koodin minkä tahansa kahden koodisanan ero on myös lineaarisen koodin koodisana, lauseen väite seuraa:

Pienin Hamming-etäisyys on lineaarisen lohkokoodin tärkeä ominaisuus. Se määrittelee toisen, yhtä tärkeän ominaisuuden - korjaavan kyvyn :

, tässä kulmasulut tarkoittavat pyöristystä "alas".

Korjausteho määrittää, mikä on enimmäismäärä virheitä yhdessä koodisanassa, jonka koodi voidaan taata korjaavan.

Selitetäänpä esimerkillä. Oletetaan kaksi koodisanaa A ja B, joiden välinen Hamming-etäisyys on 3. Jos sana A lähetettiin ja kanava aiheutti virheen yhdessä bitissä, se voidaan korjata, koska tässäkin tapauksessa vastaanotettu sana on lähempänä koodisana A kuin B. Mutta jos kanava aiheutti kaksibittisiä virheitä, dekooderi voi olettaa, että sana B lähetettiin.

Havaittujen virheiden määrä on niiden virheiden lukumäärä, joissa dekooderi voi havaita virhetilanteen (ja esimerkiksi aloittaa viestin uudelleenlähetyksen). Tämä numero on

.

Lause 2 (ilman todistetta):

Jos jokin lineaarisen (n, k)-koodin tarkistusmatriisin H sarake on lineaarisesti riippumaton, niin minimikoodietäisyys on vähintään d. Jos lineaarisesti riippuvia sarakkeita on d, niin minimikoodietäisyys on täsmälleen d.

Lause 3 (ilman todistetta):

Jos lineaarisen (n, k) koodin minimietäisyys on d, niin kaikki tarkistusmatriisin H sarakkeet ovat lineaarisesti riippumattomia ja lineaarisesti riippuvia sarakkeita on d.

Hamming-koodit

Historiallisesti " Hamming-koodeja " pitäisi kutsua R. Fisher -koodeiksi ja ne otettiin käyttöön vuonna 1942 (Fisher RA Theory of confouding in factor to thr theory). Hamming-koodit  ovat yksinkertaisimpia lineaarisia koodeja, joiden vähimmäisetäisyys on 3, eli pystyvät korjaamaan yhden virheen. Hamming-koodi voidaan esittää siten, että oireyhtymä

, missä  on hyväksytty vektori,

on yhtä suuri kuin paikkanumero, jossa virhe tapahtui. Tämä ominaisuus tekee dekoodauksesta erittäin helppoa.

Reed-Muller koodi

Reed-Muller-koodi  on lineaarinen binäärilohkokoodi. Tietyllä rakennusmenetelmällä se voi olla systemaattista. Yleensä Reed-Muller-koodi ei ole syklinen. Reed-Muller-koodit annetaan seuraavilla parametreilla: mille tahansaja, joita kutsutaan koodijärjestykseksi, pienempi kuin:

koodisanan pituus tieto osan pituus testiosan pituus minimikoodietäisyys

Reed-Muller-koodi määritetään kantavektoreista koostuvan generaattorimatriisin avulla, joka on rakennettu seuraavan säännön mukaan:

olkoon  vektori, jonka kaikki komponentit ovat yhtä suuret kuin 1; Olkoon  matriisin rivit, joiden sarakkeet ovat pituudeltaan binäärijoukkoja

Kolmannen kertaluvun Reed-Muller-koodi sisältää vektorit ja kaikki komponenttitulot tai pienempi määrä näitä vektoreita.

Yleinen menetelmä rivikoodien koodaus

Lineaarinen koodi, jonka pituus on n ja jossa on k informaatiosymbolia, on k-ulotteinen lineaarinen aliavaruus, joten jokainen koodisana on lineaarinen yhdistelmä aliavaruuden kantavektoreista :

.

Tai käyttämällä generaattorimatriisia:

, missä

Tämä suhde on koodaussääntö , jonka mukaan tietosana kartoitetaan koodiin

Yleinen menetelmä virheiden havaitsemiseksi lineaarisessa koodissa

Mikä tahansa koodi (mukaan lukien epälineaarinen) voidaan dekoodata käyttämällä säännöllistä taulukkoa, jossa jokainen vastaanotetun sanan arvo vastaa todennäköisintä lähetettyä sanaa . Tämä menetelmä edellyttää kuitenkin valtavien taulukoiden käyttöä jo suhteellisen pienipituisille koodisanoille.

Lineaarisille koodeille tätä menetelmää voidaan yksinkertaistaa merkittävästi. Tässä tapauksessa jokaiselle vastaanotetulle vektorille lasketaan oireyhtymä . Koska , missä  on koodisana ja  virhevektori, niin . Sitten oireyhtymätaulukon avulla määritetään virhevektori, jonka avulla määritetään lähetetty koodisana. Tässä tapauksessa taulukko on paljon pienempi kuin edellistä menetelmää käytettäessä.

Lineaariset sykliset koodit

Huolimatta siitä, että virheenkorjaus lineaarisissa koodeissa on jo paljon helpompaa kuin useimmissa ei-lineaarisissa koodeissa, tämä prosessi on useimmille koodeille edelleen melko monimutkainen. Syklisillä koodeilla on yksinkertaisemman dekoodauksen lisäksi muita tärkeitä ominaisuuksia.

Syklinen koodi on lineaarinen koodi, jolla on seuraava ominaisuus: if on koodisana, niin sen syklinen permutaatio on myös koodisana.

Syklisen koodin sanat esitetään kätevästi polynomeina. Esimerkiksi koodisana esitetään polynomina . Tässä tapauksessa koodisanan syklinen siirto vastaa polynomin kertomista modulolla .

Jatkossa, ellei toisin mainita, oletetaan, että syklinen koodi on binäärinen , eli ... voi ottaa arvot 0 tai 1 .

Polynomin luominen

Voidaan osoittaa, että kaikki tietyn syklisen koodin koodisanat ovat tietyn generoivan polynomin kerrannaisia . Generaattoripolynomi on jakaja .

Generoivan polynomin avulla koodaus suoritetaan syklisellä koodilla. Erityisesti:

CRC-koodit

CRC - koodit (syklinen redundanssitarkistus - syklinen redundanttitarkistus) ovat systemaattisia koodeja, joiden tarkoituksena ei ole korjata virheitä, vaan havaita ne. He käyttävät edellä kuvattua systemaattista koodausmenetelmää: "tarkistussumma" lasketaan jakamalla luvulla . Koska virheenkorjausta ei tarvita, lähetyksen validointi voidaan tehdä samalla tavalla.

Näin ollen polynomin g(x) muoto määrittää tietyn CRC-koodin. Esimerkkejä suosituimmista polynomeista:

koodinimi tutkinnon polynomi
CRC-12 12
CRC-16 16
CRC- CCITT 16
CRC-32 32

BCH-koodit

Bose-Chowdhury-Hockwingham (BCH) -koodit ovat syklisten binäärikoodien alaluokka. Niiden erottuva piirre on kyky rakentaa BCH-koodi, jonka vähimmäisetäisyys on vähintään annettu. Tämä on tärkeää, koska yleisesti ottaen minimikoodietäisyyden määrittäminen on erittäin vaikea tehtävä.

Matemaattisesti BCH-koodien rakentamisessa ja niiden dekoodauksessa käytetään generoivan polynomin hajottamista tekijöiksi Galois-kentässä .

Reed-Solomon koodit

Reed-Solomon- koodit (RS-koodit) ovat itse asiassa ei- binaarisia BCH-koodeja, eli koodivektorin elementit eivät ole bittejä, vaan bittiryhmiä. Reed-Solomon-koodit ovat hyvin yleisiä, ja ne toimivat tavujen ( oktettien ) kanssa.

Linjakoodien edut ja haitat

+ Lineaarisuudesta johtuen kaikkien koodisanojen muistamiseksi tai luettelemiseksi riittää, että kooderin tai dekooderin muistiin tallennetaan huomattavasti pienempi osa niistä, nimittäin vain ne sanat, jotka muodostavat vastaavan lineaariavaruuden perustan. Tämä yksinkertaistaa huomattavasti koodaus- ja dekoodauslaitteiden toteutusta ja tekee lineaarisista koodeista erittäin houkuttelevia käytännön sovellusten kannalta.

— Vaikka lineaariset koodit yleensä selviävät hyvin harvinaisista, mutta suurista virhepurskeista , niiden tehokkuus toistuvien mutta pienten virheiden yhteydessä (esimerkiksi kanavalla, jossa on AWGN ) on pienempi.

Suorituskyvyn arviointi

Koodien tehokkuuden määräävät sen korjaamien virheiden määrä, lisättävän redundantin tiedon määrä sekä koodauksen ja dekoodauksen toteutuksen monimutkaisuus (sekä laitteisto että tietokoneohjelmisto ).

Hamming-sidotut ja täydelliset koodit

Olkoon binäärilohkokoodi, jolla on korjauskyky . Sitten pätee seuraava epäyhtälö (kutsutaan Hammingin rajoitukseksi ):

.

Koodeja, jotka täyttävät tämän tasa-arvorajan, sanotaan olevan täydellisiä . Täydellisiä koodeja ovat esimerkiksi Hamming-koodit. Käytännössä usein käytetyt suuren korjausvoiman omaavat koodit (kuten Reed-Solomon-koodit) eivät ole täydellisiä.

Energian lisäys

Lähetettäessä informaatiota viestintäkanavalla virhetodennäköisyys riippuu signaali-kohinasuhteesta demodulaattorin sisääntulossa, joten vakiokohinatasolla lähettimen teholla on ratkaiseva merkitys. Satelliitti- ja matkaviestinjärjestelmissä sekä muissa viestintätyypeissä energiansäästökysymys on akuutti. Lisäksi tietyissä viestintäjärjestelmissä (esim. puhelin) tekniset rajoitukset eivät salli signaalitehon rajatonta lisäystä.

Koska virheenkorjaava koodaus mahdollistaa virheenkorjauksen, sen sovellus voi vähentää lähettimen tehoa jättäen informaationopeuden ennalleen. Energian vahvistus määritellään erotuksena s/n-suhteiden välillä koodauksen läsnäollessa ja ilman sitä.

Sovellus

Linjakoodit ovat voimassa:

Kirjallisuus

Katso myös