1 KONVOLUUTIOKOODIT
KONVOLUUTIOKOODERIN PERUSIDEA 2 Konvoluutiokoodi on lohkoton koodi. Pariteettibitit lasketaan liukuen informaatiobittijonon yli. Muistin pituudesta K käytetään nimitystä vaikutuspituus (constraint length & span). Konvouluutiokoodille voidaan myöskin määritellä koodisuhde k/n. Siirtorekisterin sisään syötetään kerralla k bitin lohko. Kun rekisteriä on siirretty K kertaa eteenpäin, informaatiobittilohko ei enää vaikuta pariteettibittien laskentaan, eli ne ovat liukuneet koodin vaikutuspituuden ulkopuolelle.
KONVOLUUTIOKOODERIN PERUSIDEA 3 Z&T:ssä oletaan yksinkertaistaen, että vaikutuspituus on k (ts. vain yksi bitti menee k-bitin lohkon sijasta k-pituiseen rekisteriin, joten yksi bitti vaikuttaa vain k:n siirron verran) ja koodisuhde on siten 1/v. t = d free 2 1 Summainkytkennöillä on suuri merkitys virheenkorjauskykyyn t. Hyviä kytkentöjä on haettu tietokoneilla. Koodausalgebra ei ole lähellekkään niin kehittynyt kuin lohkokoodeilla. Suorituskykyyn vaikuttaa ns. vapaa etäisyys (free distance d free ), joka on kahden äärettömän pitkän koodatun sekvenssin pienin Hammingetäisyys (http://en.wikipedia.org/wiki/convolutional_code)
ESIMERKKEJÄ KONVOLUUTIOKOODEREISTA (S) 4 Vaikutuspituus 4, koska 4 muistiyksikköä vaikuttaa lähtöön Vaikutuspituus 3, koska 2 muistialkiota ja 1 tulobitti vaikuttaa lähtöön Vaikutuspituus 2, koska 1 rinnakkainen muistialkio ja 2 tulobittiä kerralla vaikuttaa lähtöön
SYSTEMAATTINEN VS. EPÄSYSTEMAATTINEN KOODI 5 Systemaattisella konvoluutiokoodilla, kuten systemaattisella lohkokoodillakin, informaatiobitit on erotettavissa sellaisenaan koodatusta bittijonosta (ts. jotkut kooderin lähtöbitit eivät ole lainkaan muiden informaatiobittien funktioita). Lohkokoodeilla koodin muuttaminen epäsystemaattisesta systemaattiseksi ei muuta koodisanojen etäisyysominaisuuksia, mutta konvoluutiokoodilla se vaikuttaa vapaata etäisyyttä pienentävästi, eli koodin korjauskykyä (P E suorituskykyä) heikentävästi. Kooderin lähtobitti ei ole funktio (esim. modulo-2 summa) useasta informaatiobitistä. Kooderin lähtöbitti on useamman informaatiobittien funktio.
SYSTEMAATTINEN VS. EPÄSYSTEMAATTINEN KOODI 6 Suuremmilla K:n arvoilla suurimman mahdollisen saavutettavan vapaan etäisyyden erot ovat vieläkin suurempia kuin mitä alla voidaan nähdä. Intuitiivisesti voidaan ajatella, että epäsystemaattiset koodijonot ovat enemmän koodattuja kuin systemaattiset koodit ( sekoittuneet ortogonalisoituneet ja siis etäämmällä toisistaan). t = d free 2 1
1/n-KONVOLUUTIOKOODEREITA 7 Ohessa on esitetty parhaimmat tunnetut 1/n- konvoluutiokooderit. Alla olevan (½,3)-kooderin kytkentäpolynomit: g 1 = 111 = g 1 (X) = 1+X+X 2 g 2 = 101 = g 2 (X) = 1+X 2
8 KONVOLUUTIOKOODEJA HAVAINNOLLISTAVAT ESITYSTAVAT JA DEKOODAUSMENETELMÄT
1/3 -KOODERI TILA- JA SIIRTYMÄTAULUKKO 9 Sekventiaalinen äärellinen tilakone (finite state machine), joka askeltaa tilasta toiseen. Toiminnan tarkastelun pohjana aina tila- ja siirtymätaulukko. Tilasiirtymä riippuu aiemmasta tilasta ja tuloinformaatiosta. v 1 = S 1 S 2 S 3, v 2 = S 1, v 3 = S 1 S 2 Tulo: 1 0 1 0 0 1... Lähtö: 111 101 011 101 100 111...
1/3 -KOODERI KOODIPUU 10 Kooderin toimintaa koodauksessa ja dekoodauksessa voidaan kuvata ja havainnollistaa: koodipuu (code tree) tiladiagrammi (state diagram), trellis-diagrammi eli ristikkodiagrammi Dekoodausmenetelmät: Puuhaku Viterbi-algoritmi Sekventiaalinen dekoodaus Kooderin tulobitti Dekoodaustulos Kooderin lähtöbittikolmikko
1/3 -KOODERI PUUHAKUDEKOODAUS 11 Etsitään Hamming- etäisyyden mukaan lähinnä vastaanotettua bittijonoa oleva polku (periaatteena yksinkertainen). Kaikki oksan haarat käydään läpi systemaattisesti, mikä kertoo menetelmän eksponentiaalisesta monimutkaisuudesta & muistista. Esimerkiksi vastaanotettu jono 110 101 011 111 dekoodataan jonoksi 1010, kun lähetetty jono on 111 101 011 101, jolloin virheet korjautuu 3 ja 11 bittipaikassa.
1/3 -KOODERI PUUHAKUDEKOODAUS 12 Puuhaun täydellinen toteuttaminen ei ole mahdollista, koska N- pituisella infobittijonolla on 2 N kpl puun haaroja (esim. 2 512 = 1.3 10 154, maailmassa atomeja vain n. 10 80 kpl), joiden kaikkien säilöminen muistiin on mahdotonta. Koko puuta & polkuja ei voida pitää kooltaan eksponentiaalisesti kasvavassa muistissa, joten täytyy suorittaa jossain vaiheessa sekvenssin katkaisu alusta lukien. Katkaisu tapahtuu tyypillisesti esim. viiden vaikutuspituuden päässä, eli puskurimuistissa on kerrallaan puuta vain viiden vaikutuspituuden mittaiselta matkalta (muisti liukuu), jonka yli H-etäisyyttä lasketaan. Katkaisu perustuu ajatukseen, että dekoodattu jono alkaa alkupäästä lähtien konvergoimaan kohden lähetettyä jonoa, kun etäisyyksiä lasketaan sopivan ikkunan yli (jollei ole tapahtunut paljon virheitä) ja siksi riittävän viipeen päästä voidaan tehdä lopullinen päätös alkupään todennäköisimmästä informaatiobittijonosta. Kooderin tilasiirrokset havainnollistuvat tilataulukon sijaan kompaktimmassa muodossa tiladiagrammista.
1/3 -KOODERI TILADIAGRAMMI 13 Koodien kuvaamisen perustana on aina tila- ja siirtymätaulukko.
1/3 -KOODERI TRELLISDIAGRAMMI 14 Trellis-dekoodauksen idea perustuu havaintoon, että koodipuu alkaa toistamaan itseään K:n haaran jälkeen (K on vaikutuspituus). Se on nähtävissä kuvan 11.25 koodipuusta, jolle K = 3. Neljännen tulobitin jälkeen on luotu 16 oksaa. Kooderin lähtö siis riippuu kolmesta viimeisimmästä tulobitistä (K = 3). Kun 4 bitti on tullut, on aivan sama oliko ensiksi tullut bitti {1} vai {0}, koska lähtö riippuu vain biteistä 2., 3. ja 4..
1/3 -KOODERI TRELLISDIAGRAMMI 15 Kooderin tilaksi määritellään rekisteristä kiikkujen 1 ja 2 tila S 1 S 2 ennen uuden bitin sisään tuloa. Digitaalitekniikasta tutun sekventiaalisen tilakoneen perusidean mukaisesti nykytila ja tulobitti yhdessä määräävät koneen (kooderin) seuraavan tilan sekä sen lähtöbitit. Edellisellä 1/3-kooderilla on trellis-diagrammissa 2 2 = 4 erilaista mahdollista tilaa, koska kaksi rekisterin bittiä S 1 S 2 määrittelevät kunkin hetkisen tilan Viterbi-algoritmi (keksijä Andrew Viterbi) perustuu trellisdiagrammin älykkääseen hyväksikäyttöön. Trellisdiagrammia kutsutaan myös ristikkodiagrammiksi.
1/3 -KOODERI TRELLISDIAGRAMMI 16 Trellis-diagrammi on siis koodipuu paljon kompaktimmassa muodossa, josta eksponentiaalinen kasvu on jäänyt pois (kasvu lineaarista). Alla esim. tiloihin A ja C voidaan päätyä vain tiloista A ja B.
1/3 -KOODERI TRELLISDIAGRAMMI 17 Trellis (ristikko) saadaan muodostettua tiladiagrammista. Aluksi kooderi on tilassa A (000). Tulobitti {0} saa kooderin pysymään tilassa A ja se osoitetaan katkoviivalla, kun taas tulobitti {1} aiheuttaa ehjällä viivalla kuvatun siirtymän C-tilaan. Mikä tahansa neljästä tilasta saadaan määriteltyä kahdella peräkkäisellä tulobitillä. 3. tulobitin jälkeen tämä trellis alkaa toistua.
18 VITERBI-ALGORITMI (S)
VITERBI-ALGORITMI (S) 19 Tarkastellaan vastaanotettua bittijonoa: 110 101 011 111, kun lähetetty jono oli: 111 101 011 101 (virheet paikoissa 3 ja 11). 1. askeleessa lasketaan alkusolmun (A-tila) ja kunkin neljän tilan HE:t kolmen tilan (vaikutuspit.) syvyydeltä. Koska kuhunkin tilaan voidaan tulla vain kahdesta mahdollisesta edellisestä tilasta (solmusta), lasketaan kahdeksan (2 4) eri polun etäisyydet vastaanotetusta jonosta. HE:t on alla laskettu 3 3 = 9 tulobitin matkalta.
VITERBI-ALGORITMI (S) 20 Kun etäisyydet K:n mittaiselta matkalla on laskettu, säilytetään muistissa vain kuhunkin tilaan tuleva H-etäisyydeltään pienimmän arvon omaava jono, jota kutsutaan selviytyjäksi (survivor). Seuraavasta tilasta saatavat selviytyjät ovat aina edellisten selviytyjien jatkeita, koska muut jo hylätyt polut trelliksessä eivät voi enää olla etäisyydeltään lähempänä. Joka tilajaksossa pudotetaan siis puolet siihen astisista kaikista mahdollisista poluista pois, mikä pienentää sekvenssimuistin tarvetta logaritmisesti. Jos tilaan tulee kaksi saman H-etäisyyden selviytyjää, voidaan jompi kumpi tilaan tulevista poluista hylätä, koska oikea polku löytyy myöhemmin (prosessi konvergoi lopulta oikeaan polkuun). Seuraavaksi otetaan käsittelyyn seuraava kolmen bitin lohko (111) liitettäväksi jonoon 110 101 011, jolle lasketaan etäisyydet uudestaan ja valitaan selviytyjät. Tulos on esitetty taulukossa 11.8.
VITERBI-ALGORITMI (S) 21 Dekoodaustulos: 1010 (sama kuin aiemmin puuhaussa)
VITERBI-ALGORITMI (S) 22 Lopulta, esim. viiden vaikutuspituuden jälkeen, täytyy tehdä päätös vastaanotetun jonon alkupäästä kuten puudekoodauksessakin. Tuolloin selviytyjät ovat jo tn. yhtyneet diagrammin alkupäässä. Kuvattua prosessia jatketaan, kunnes kaikki tulobitit on prosessoitu. Bittijonon loputtua täytyy vielä neljästä jäljellä olevasta selviytyjästä jättää jäljelle vain yksi. Se tehdään syöttämällä algoritmille kaksi dummy-nollaa infosekvenssin lopuksi (kahden peräkkäisen tilan verran, eli tässä 6 bittiä), jolloin algoritmi palautuu takaisin tilaan A.
VITERBI-ALGORITMI (S) 23 Vastaanotettua jonoa lähimmän jonon etsintä saadaan siis palasteltua pienempiin helposti prosessorilla toteutettaviin osiin: aiemmat talletetut välitulokset liitetään tämänhetkisiin uusiin tuloksiin. Näin kattavan haun eksponentiaalisesti kasvava muistin tarve saadaan pienennettyä lineaariseksi jonon pituuden funktiona, kun kussakin tilassa hylätään aina puolet niihin tulevista poluista ja tehdään viiveellä päätös alkupään jonosta. Laskennallinen kompleksisuus ja muistin tarve on puolestaan eksponentiaalisesti (edellä 2 2 =4) verrannollinen kooderin tilojen määrään (tilojen määrä on tietenkin paljon pienempi kuin koko jonon pituus). Siksi tilojen määrä on pidettävä pienenä parametrien n, k ja K valinnalla. Prosessoritoteutuksessa täytyy siis muistaa tilat, niihin tulevat selviytyjät sekä niiden Hamming-etäisyydet. Viterbi-algoritmi on laskennallisesti tehokkain ja käytetyin konvoluutiokoodien dekoodausmenetelmä, jonka vuoksi konvoluutiokoodeja suositaan järjestelmäratkaisuissa.
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 1 (S) 24
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 1 (S) 25 Trelliskoodauksen tutoriaalianimaatio: http://www.invocom.et.put.poznan.pl/~invocom/courses/p1-7/index.htm
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 1 (S) 26
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 1 (S) Oletetaan, että on lähetetty datajono: 0000000000... ja on vastaanotettu kaksi virhettä sisältävä jono 0100010000... Huomataan, että lopulta algoritmi löytää pienimmän etäisyyden omaavan polun. 27
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 1 (S) 28 Tämä polku on lähimpänä lähetettyä Nämä polut hylättäisiin seuraavassa vaiheessa.
VITERBI-ALGORITMI ½-KOODILLE ESIMERKKI 2 (S) Lähetetty datajono: 0000000000... On vastaanotettu kolme lähekkäin toisiaan sijaitsevaa virhettä (virheryöppy) sisältävä jono 1100010000... Esim. 1 verrattuna virheitä on nyt liikaa 10 bitin matkalla, joten algoritmi ei kykene korjaamaan niitä, ja valitsee väärän polun. Dekoodauksessa siis hylätään etäisyyden perusteella oikea polku, jota ei enää myöhemmin kyetä löytämään. Syntyy siis dekoodausvirhe virheryöpystä johtuen. 29
30 SEKVENTIAALINEN DEKOODAUS
SEKVENTIAALINEN DEKOODAUS ½-KOODILLE 31 Ideana on vaeltaa yrityksen ja erehdyksen periaatteella puussa ja laskea jatkuvasti H- etäisyyttä puun juuresta lukien. Kun etäisyys kasvaa nopeasti, on se merkki siitä, että ollaan tn. väärällä polulla ja siksi täytyy palata takaisin johonkin aiempaan välipisteeseen ja jatkaa arvauksen perusteella jotain toista polkua pitkin. Menetelmä on tehokkaampi kuin systemaattinen puun läpikäynti, sillä oikea polku löytyy todennäköisesti nopeammin. Tarvitaan välttämättä väärän polun hylkäyskynnys. Voi verrata analogisesti autolla ajamiseen kartan kanssa. Niin kauan kuin autoilija tunnistaa kartalla näkyviä maamerkkejä matkan varrella, hän jatkaa eteenpäin, mutta kääntyy takaisin kun mielestään ei enää ole kartalla.
SEKVENTIAALINEN DEKOODAUS ½-KOODILLE 32
33 KONVOLUUTIOKOODIEN SUORITUSKYKYVERTAILUT
KONVOLUUTIOKOODIEN VERTAILU (S) 34
KONVOLUUTIOKOODIEN VERTAILU (S) 35 t = d free 2 1
KONVOLUUTIOKOODIEN VERTAILU (S) 36
KONVOLUUTIOKOODIEN VERTAILU (S) 37 Konvoluutiokoodin suorituskykyyn vaikuttaa vapaa etäisyys (free distance), joka on kahden äärettömän pitkän koodatun sekvenssin pienin Hamming-etäisyys. Vapaan etäisyyden avulla voidaan laskea yläraja saavutettavissa olevalle suorituskyvylle P E (siis koodausvahvistukselle) kuten myös arvo korjauskyvylle t = (d free -1)/2.