1 JOHDANTO VIRHEENKORJAAVAAN KOODAUKSEEN KANAVAKOODAUSMENETELMÄT
RESURSSIEN VÄLINEN KAUPANKÄYNTI 2 LÄHETYSTEHO KAISTANLEVEYS MONIMUTKAISUUS VIRHETODEN- NÄKÖISYYS
RESURSSIEN VÄLINEN KAUPANKÄYNTI 3 Resurssien käyttöä pyritään optimoimaan mm. koodaus- ja modulointimenetelmien valinnalla. Tavoitteet ovat usein ristiriitaisia. Lähetystehon pienentäminen pienentää lähettimen kokoa, mutta P E kasvaa, ellei kaistanleveyttä tai käytetyn koodaus- tai modulaatiomenetelmän monimutkaisuutta lisätä. Jotkut järjestelmät ovat sekä kaista- että tehorajoitettuja. Lähetysteho Signaali-kohinasuhde Monimutkaisuus KOODAUS MODULOINTI KANAVA DEKOODAUS DEMODULOINTI Monimutkaisuus Kaistanleveys Virhetodennäköisyys
KOODAUKSEN JA MODULAATION SUHDE 4 DIGITAALISET SIIRTOJÄRJESTELMÄT TEHORAJOITETUT JÄRJESTELMÄT SEKÄ TEHO- ETTÄ KAISTARAJOITETUT JÄRJESTELMÄT KAISTARAJOITETUT JÄRJESTELMÄT Signaalit kaukana toisistaan (kaistanleveys kasvaa, tarvitaan vähän lähetystehoa) Esim. Ortogonaaliset aaltomuodot MFSK, M>2 Esim. virheenkorjaava FEC koodaus (lohko- ja konvoluutiokoodit) YHDISTETTY KOODAUS JA MODULAATIO Esim. Trelliskoodattu modulaatio TCM Signaalit lähellä toisiaan signaaliavaruudessa (P E kasvaa, joten sen kompensoimiseksi tarvitaan lisää lähetystehoa) Esim. ASK & PSK-mod. yhdistelmä QAM = Quadrature Amplitude Modulation
VIRHEENKORJAAVA KANAVAKOODAUS 5 Perustuu systemaattisen redundanssin (pariteettibittien) lisäämiseen (lähteenkoodauksessa poistettiin epäsystemaattista redundanssia). Redundanssia käytetään virheiden paikantamiseen ja korjaamiseen. Redundanssi generoi muistiominaisuuden (matemaattisen kytkennän) bittien välille. Bittivirhe voidaan ilmaista ja mahdollisesti korjata, jos virheiden lukumäärä on koodin korjauskyvyn sisällä. Kanavakoodauksen suorituskyky muistuttaa aaltomuotoihin perustuvan ortogonaalisen MFSK -modulaation suorituskykyä, mutta tarvittava kaistanleveys on yleensä pienempi ja tarvittava ilmaisin yksinkertaisempi (koodin dekoodaus helppoa).
VIRHEENKORJAAVA KANAVAKOODAUS 6 Kaksi kanavakoodauksen toteutusperiaatetta: FEC (Forward Error Correction): ilmaistaan virheet ja korjataan, jos pystytään. Käytössä tehorajoitetuissa järjestelmissä. Reaaliaikainen toiminta (esim. puheen siirto). Ei tarvita paluukanavaa. ARQ (Automatic Repeat Request): ilmaistaan virheet ja pyydetään paluukanavalla virheellisen lohkon uudelleenlähetystä. Käytössä sekä teho- että kaistarajoitetuissa järjestelmissä. Toiminta ei ole reaaliaikainen, mikä rajoittaa käyttöä (soveltuu datapakettine siirtoon). Tarvitaan virheen ilmaiseva koodi. Ongelmana on paluukanavan järjestäminen.
FEC & ARQ -MENETELMIEN ERO 7 FEC käytössä tehorajoitetuissa järjestelmissä. ARQ soveltuu sekä teho- että kaistarajoitettuihin järjestelmiin. ARQ:ssa kuittaus: ACK, NAK = negative acknowledgement. KOODERI KANAVA FEC Virheenkorjaus KOODERI KANAVA ARQ PALUU- KANAVA ACK, NAK
ARQ-MENETELMÄN TOTEUTUSVAIHTOEHTOJA (S) 8
VIRHEEN KORJAAVIEN KOODIEN LUOKITTELU 9 Virheenkorjaavat koodit voidaan jakaa kahteen perusluokkaan: Lohkokoodit: informaatiota käsitellään lohkoittain. k-pituisen bittilohkon loppuun liitetään n k kpl pariteettibittejä, jolloin koodattu sana on n bittiä pitkä. Pariteettibitit lasketaan vain samaan lohkoon kuuluvien informaatiobittien perusteella. Redundanssin määrää kuvaa koodisuhde k/n. Konvoluutiokoodit (trelliskoodit tai puukoodit): kooderilla muistiominaisuus, eli pariteettibitteihin vaikuttavat useamman K:n peräkkäisen tulevan k-bitin lohkon informaatiobitit. Muistin pituus K on ns. vaikutuspituus (constraint length). Vaikka konvoluutiokoodaus on jatkuva prosessi, voidaan edelleenkin määritellä redundanssin määrää ja siten kaistan käytön tehokkuutta kuvaava koodisuhde k/n. 1 k KONVOLUUTIO- KOODERI 1 n Muistissa K 1 aikaisempaa lohkoa
VIRHEENKORJAAVIEN KOODIEN LUOKITTELU 10 Lohkokoodit voidaan nähdä konvoluutiokoodien erikoistapauksena, kun konvoluutiokoodin muistinpituus on yksi lohko (K = 1). KONVOLUUTIOKOODIT K > 1 LOHKOKOODIT K = 1
VIRHEENKORJAAVIEN KOODIEN LUOKITTELU 11 1 2 Lohkokoodi K n n n n n Konvoluutiokoodi K n kpl Konvoluutiokoodi on toisaalta lohkokoodin erikoistapaus, sillä konvoluutiokoodi on lohkokoodi, jossa lohkoja on vain yksi. Kyseisen tulkinnan mukaan myös konvoluutiokoodeille voidaan löytää ns. generoijamatriisi, vaikkakin sen käyttö on laskennallisesti hankalaa konvoluutiokoodien tapauksessa. Generoijamatriisin käsite esitellään myöhemmin lohkokoodien yhteydessä.
LOHKOKOODAUS PERIAATEKUVA 12 n bitin koodilohko n bitin koodilohko n bitin koodilohko k informaatiobittiä (n k) pariteettibittiä k informaatiobittiä (n k) pariteettibittiä k informaatiobittiä (n k) pariteettibittiä koodaus Lineaarisesta lohkokoodista käytetään merkintää: (n,k) -koodi, jossa n on koodatun sanan pituus ja k on informaatiobittien määrä. Pariteettibittejä on (n k) kpl. Koodisuhde k/n kuvaa informaatiobittien suhteellista osuutta kaikista lähetetyistä biteistä. Kooderi tuottaa 2 k kpl laillisia koodisanoja. Erilaisia vastaanotettuja sanoja 2 n >> 2 k kpl, virheellisiä sanoja 2 n 2 k kpl. Dekoodaus tapahtuu kahdessa vaiheessa: virheellinen lohko ilmaistaan, jonka jälkeen virheet korjataan, jos pystytään. Jotta dekooderi toimisi oikein, on kanavan dekoodamattoman virhesuhteen yleensä oltava: P E 10 2. Koodausvahvistus on saavutettava etu SNR-arvossa. koodaus koodaus
KOODAUSVAHVISTUS 13 Koodausvahvistus riippuu kiinnitetystä P E -arvosta ja se on suurempi pienillä P E -arvoilla. Kuvassa koodausvahvistus on 14 9 = 5 db, kun P E = 10 6. Modulaatiomenetelmän aikaansaama P E liian suuri (>10 2 ) ennen virheenkorjaavaa dekooderia, joka siksi generoi dekoodauksessa vain lisää virheitä, ja kasvattaa siten edelleen lopullista virhetodennäköisyyttä pienillä modulaation E B /N 0 arvoilla aiheutuu käyrien risteäminen. Koodausvahvistus 5 db, kun P B = 10-6 Vahvistus riippuu aina toimintapisteestä.
KONVOLUUTIOKOODAUS PERIAATEKUVA 14 Nuolet yrittävät piirtoteknisistä ongelmista huolimatta kuvata lohkojen vaikutusta seuraaviin lohkoihin (muistiominaisuutta). n bitin koodilohko n bitin koodilohko n bitin koodilohko n bitin koodilohko k informaatiobittiä (n k) pariteettibittiä k informaatiobittiä (n k) pariteettibittiä k informaatiobittiä (n k) pariteettibittiä k informaatiobittiä (n k) pariteettibittiä
YLEINEN KONVOLUUTIOKOODERI 15 Bittejä käsitellään k-bitin lohkoissa. Muistissa on kerrallaan K kpl (vaikutuspituus) k:n bitin lohkoja. Jokaisen k-lohkon tullessa sisään lähdöstä luetaan n koodattua bittejä. Lohkojen tullessa sisään siirtyy rekisterin sisältö k bittiä eteenpäin. Rekisterin muisti K k bittiä.
LOHKOKOODIT VS. KONVOLUUTIOKOODIT 16 Lohkokoodeilla on kehittynyt algebrallinen koodausteoria, joka perustuu äärellisten kuntien (finite fields) matematiikkaan. Koodaus- ja informaatioteoria ovat olleet hyvin läheisessä vuorovaikutuksessa jo 1950-luvulta lähtien. Richard W. Hamming (KT) ja Claude Shannon (IT) alan pioneereja Bellin laboratoriossa. Avaruustutkimus edisti koodauksen tutkimusta (esim. luotaimen pieni lähetysteho oli kompensoitava tehokkaalla koodauksella). Lohkokoodeja on kehitetty runsaasti (haastava tutkimusalue matemaatikoille). Niitä tosin käytetään paljon vähemmän kuin konvoluutiokoodeja, joille on löydettävissä tehokkaita prosessorilla toteutettavia dekoodausmenetelmiä (Viterbi-algoritmi). Löydettyjen tunnettujen lohkokoodien määrä on paljon suurempi kuin käytettävien määrä (esim. dekooderin toteutus monilla hankalaa). Konvoluutiokoodeilla on puolestaan vähemmän kehittynyt teoria, koska ne ovat matemaattisesti hankalammin käsiteltävissä. Niitä on haettu kokeellisesti tietokoneilla. Ovat monella tavalla hyviä (mm. Yksinkertainen kooderi, Viterbi-dekoodaus, suuri koodausvahvistus).
LOHKOKOODIT VS. KONVOLUUTIOKOODIT 17 Siirtorekisteritoteutuksessa lohkokoodissa koko 3 bitin lohko tulee kerralla sisälle, jonka jälkeen luetaan sisälle uusi 3 infobitin lohko. Konvoluutiokoodissa kerralla sisään tulevien bittien lukumäärä k K.
SATUNNAISVIRHEET VS. RYÖPPYVIRHEET 18 Virheenkorjaavat koodit voivat olla joko binäärisiä tai symbolikoodeja (ei-binäärisiä). Eniten käytetään binäärisiä koodeja. Symbolikoodeja ovat mm. Reed-Solomon-koodit, jotka lukeutuvat lineaarisiin lohkokoodeihin. Koodin korjauskyvyn kannalta ei ole merkitystä sillä syntyvätkö bittitai symbolivirheet informaatiobitteihin vai pariteettibitteihin! Binääriset lohko- ja konvoluutiokoodit korjaavat hyvin satunnaisvirheitä, ts. koodatun jonon peräkkäisten bittien oletetaan muuttuvan kanavassa toisistaan riippumattomasti ja samalla todennäköisyydellä kohinan, häirinnän, muiden käyttäjien aiheuttaman interferenssin, tms. seurauksena. Käytännössä bittivirheet esiintyvät satunnaisuuden sijasta virheryöppyinä (purskeina), esimerkiksi häipyvässä ja ISImonitiekanavassa. Siksi joudutaan käyttämään lähetettävien koodisanojen lomittelua (interleaving) virheiden satunnaistamiseksi.
RYÖPPYVIRHEIDEN LOMITTELU 19 T H E Y M U S T H E A R T H I S Perusidea yksinkertainen. Lähetetään viestin: THEY MUST HEAR THIS kirjaimet eri järjestyksessä, jolloin peräkkäisiin kirjaamiin kohdistuva virheryöppy jakaantuu pitemmälle aikavälille ja koodikielen redundanssiin perustuen viesti voidaan dekoodata. Kanavaan TMHT HUEH ESAI YTRS THXY MUXT HEXR THXS
RYÖPPYVIRHEIDEN LOMITTELU 20 Lomittelija laittaa peräkkäiset jo koodatut bitit eri järjestykseen jolloin peräkkäiset infobitit jakaantuvat pitemmälle aikavälille lähetystä varten. Virheryöppy jakaantuu vastalomittelijan jälkeen ennen dekooderia pitemmälle aikavälille usean koodilohkon yli, jotta satunnaisvirheitä korjaavat koodit pystyvät ne mahdollisesti korjaamaan.
RYÖPPYVIRHEIDEN LOMITTELU 21 Lomittelu tapahtuu vasta kanavakoodauksen jälkeen. Ilmaisussa suoritetaan vastalomittelu ennen bittivirheiden ilmaisua ja korjaamista, jotta informaatiobitit olisivat oikeassa järjestyksessä dekooderin lähdössä. Lomittelutaulukko kuvaa lomittelijan toimintaa. Lomittelusyvyys kuvaa lomittelutaulukon kokoa, ts. montako peräkkäistä lohkoa luetaan kerrallaan ennen seuraavaa taulukon uudellentäyttöä. Taulukon koon valintaan vaikuttaa mm. reaaliaikaisuusvaatimus (puhe, kontrollikanavat ja -bitit, tehonsäätöbitit, jne.). Usein järjestelmissä (esim. puheen ja videon siirto) on myös eri tärkeysluokan bittejä, jolloin niiden merkityksen mukaan saatetaan suorittaa korjauskyvyltään erilaista koodausta eri bittilohkoille.
RYÖPPYVIRHEIDEN LOMITTELUTAULUKKO 22 Lomitellut bitit sarakkeittain ulos modulaattorille ja kanavaan. Koodatut sanat tulevat riveittäin sisään lomittelijalle.
KETJUKOODAUS 23 Ketjukoodauksella (concatenated coding) tarkoitetaan yhdistettyä koodausta. Esim. kaksi peräkkäistä koodausta: sisäkoodaus ja ulkokoodaus, eli koodataan kertaalleen koodatut bitit/symbolit. Sisä- ja ulkokoodausmenetelmien ei tarvitse olla samoja. Tyypillisesti sisäkoodi on satunnaisvirheitä hyvin korjaava konvoluutiokoodi ja ulkokoodina on hyvin ryöppyvirheitä korjaava ei-binäärinen Reed- Solomon lohkokoodi.
KETJUKOODAUS & LOMITTELU 24 Ketjukoodauksella pyritään parantamaan virheensietokykyä, eli siirtämään koodatun järjestelmän P E -käyrää mahdollisimman lähelle Shannonin 1,6 db:n vesiputousrajaa. Ketjukoodauksenkin yhteydessä kannattaa käyttää myös lomittelua.
25 LOHKOKOODIEN KOODIAVARUUS JA KORJAUSKYKY Mitä peruskäsitteitä liittyy lohkokoodaukseen?
HAMMING-PAINO & -ETÄISYYS & MINIMIETÄISYYS 26 Koodaukseen liittyvät käsitteet: Hamming-paino (HW): sanan [1100100] Hamming-paino on {1}-bittien lukumäärän mukaan 3. Hamming-etäisyys (HE): Sanojen [1100100] ja [1100010] Hammingetäisyys on eroavien bittien lukumäärä sanojen välillä, eli 2. Etäisyys saadaan sanojen modulo-2 (XOR) summan Hamming-painon perusteella: [1100100] [1100010] = [0000110] paino 2 Lohkokoodin minimietäisyys on kaikkien sallittujen koodisanojen välisten Hamming -etäisyyksien pienin mahdollinen arvo Minimietäisyydestä riippuu virheenkorjauskyky: t = (d min 1)/2. Esim. koodi pystyy korjaamaan yhden virheen (t = 1), jos minimietäisyys d min = 3. Jos d min = 5 t = 2, ja d min = 7 t = 3 k-infobitin lohkosta matemaattisella koodausalgoritmilla laskettavien sallittujen n-pituisten lohkokoodien joukkoa kutsutaan koodausteoriassa koodiksi!
KOODIAVARUUDEN KOKO 27 Virheen korjaavan lohkokoodin sallittujen sanojen lukumäärä on V k, missä: V = lukujärjestelmän kantaluku k = informaatiobittien lkm koodisanassa Laillisten koodisanojen määrä on paljon pienempi kuin kaikkien mahdollisten n-pituisten sanojen määrä koodiavaruudessa. n-pituisia V-tilaisia mahdollisia sanoja on V n kpl esim. V = 2 ja n = 6, niin koko koodiavaruuden koko eli kaikkien mahdollisten sanojen määrä ko. pituudella on 2 6 = 64 2 128 = 3.4 10 38, 2 512 = 1.3 10 154, vrt. maailmankaikkeudessa arviolta noin 10 80 atomia! Virheellisesti vastaanotettuja mahdollisia sanoja: V n V k kpl, jotka vastaanotossa pyritään dekoodaamaan laillisiksi koodisanoiksi.
HAMMING-ETÄISYYS JA VIRHEENKORJAUSKYKY 28 Koodivektori x i lähetetty ja y = x i + e vastaanotettu. Virhevektorin e Hamming-paino HW(e) t. Olkoon x j joku muu laillinen koodisana. Kaksi t-säteistä ympyrää eivät leikkaa n-dim. koodiavaruudessa, jos sen sallittujen koodien välinen HE: d(x i,x j ) = w(x i x j ) 2t+1. Jos x i on lähetetty ja d(x i,y) t, niin y on yksikäsitteisesti lähempänä x i -vektoria kuin x j -vektoria. Jos sana y on pahoin virheellinen - HW(e) > t - se saattaa sijoittua pallojen väliin, eikä voida korjata, koska se ylittää peittosäteen t. Jos laillisten sanojen etäisyys d(x i,x j ) < 2t, niin tuolloin ei voida tehdä yksikäsitteistä dekoodausta sanasta y kummankaan laillisen sanan hyväksi (y kuuluu sekä x i :n että x j :n peittosäteen sisään).
HAMMING-ETÄISYYS JA VIRHEENKORJAUSKYKY Edellisen perusteella lineaarinen (n,k) -lohkokoodi kykenee siis korjaamaan kaikki korkeintaan t -painoiset virhesanat e, jos ja vain jos minimietäisyys d min = d(x i,x j ) 2t + 1 kaikilla x i ja x j. Sama toisin ilmaistuna: Minimietäisyyden d min omaava lineaarinen (n,k) -lohkokoodi pystyy korjaamaan korkeintaan t virhettä, jos ja vain jos t = (d min 1)/2 a = kokonaisluku, joka ei ole suurempi kuin a. Koodi saattaa kyetä korjaamaan joitakin yksittäisiä enemmän kuin t virhettä sisältäviä sanoja (ts., HW(e) > t), muttei kuitenkaan kaikkia. Lohkokoodin korjauskyky kuitenkin takaa, että kaikki HW(e) t painoiset virhesanat saadaan aina korjattua. 29
KOODISUUNNITTELUSTA 30 Matemaatikot suunittelevat tyypillisesti hyvän painojakauman omaavia uusia lohkokoodeja ja insinöörit miettivät mitkä löydetyistä koodeista soveltuvat parhaiten kuhunkin sovellukseen. Tunnettuja lohkokoodeja on paljon enemmän kuin käytännössä käytettyjä. Dekooderin toteutuksen monimutkaisuus saattaa estää koodivalinnan, vaikka koodin etäisyysominaisuudet olisivat hyvät (d min suuri). Koodausta käsittelevistä oppikirjoista löytyy runsaasti valmiita kooditaulukoita. Seuraavassa on tarkasteltu lineaarisilla lohkokoodeilla koodisuhteen k/n ja parametrien n, k ja t välistä riippuvuutta löydetyille koodeille.
PARAMETRIEN n, k, t JA k/n ESIMERKKEJÄ 31 (n,k,t,d min,k/n) = (5,2,1,3,0.4) (n,k,t,d min,k/n) = (10,4,3,7,0.4) Huomaa, että samalla koodisuhteella k/n vertailtavien koodien dekooderien toteuttavuudessa saattaa olla merkittäviä eroja, ts. taustalla oleva koodimatematiikka saattaa johtaa paljon monimutkaisempaan kooderin ja dekooderin rakenteeseen.
32 KOODIAVARUUS (S)
KOODIAVARUUS (S) 33 Mustat isot pisteet edustavat koodin sallittuja koodisanoja ja kaikki pisteet yhteensä koko koodiavaruutta kooltaan V n. Sallitut koodisanat muodostavat V n -kokoisen koodiavaruuden aliavaruuden kooltaan V k.
KOODIAVARUUDEN PAKKAAMINEN KOODEILLA (S) 34 Koodauksen kaistanleveystehokkutta kuvaa koodisuhde k/n (jollakin korjauskyvyllä t) ja se saa arvon väliltä 0...1. V n -avaruuteen pyritään siis pakkaamaan mahdollisimman paljon laillisia koodisanoja. Tällöin redundanssibittien määrä n-k on kuitenkin pieni (n k), eli koodaus on kaistanleveystehokasta. Lisääntynyt kaistanleveyden tarve syntyy siitä, että aikayksikössä on lähetettävä bittejä n/k -kertainen määrä. Korjauskyky t on kuitenkin huono, koska d min on tällöin pieni. Toisaalta koodisanojen olisi oltava mahdollisimman etäällä toisistaan, jotta d min ja siten korjauskyky t = (d min 1)/2 olisi arvoltaan mahdollisimman suuri, jotta mahdollisimman monta virhettä saadaan suurella todennäköisyydellä korjattua. Koodausteoriaa soveltaen pyritään löytämään koodeja, joiden d min on mahdollisimman suuri valitulle koodisuhteen k/n arvolle. Järjestelmäsuunnittelusta siis tarvittavasta datansiirtonopeudesta ja käytettävissä olevasta kaistanleveydestä seuraa reunaehto sallitulle koodisuhteen k/n minimiarvolle, jolle pyritään sitten löytämään mahdollisimman suuren d min :n ja t:n omaava koodi.
KOODIAVARUUS, PEITTOSÄDE JA KORJAUSKYKY (S) Kun siirrossa syntyy symbolivirhe, bittisana muuttuu joksikin koodiavaruudessa lähellä oikeaa sallittua sanaa olevaksi sanaksi. Jos virhevektorin HW ei ylitä koodin korjauskykyä HW(e) t = (d min 1)/2 sana voidaan dekoodauksessa korjata laskennallisella algoritmilla. Koodin virheenkorjauskyky t määrittelee siis koodiavaruudessa peittosäteen, jonka sisällä olevat sanat voidaan varmasti korjata. Peittosäteen ulkopuolelle jääviä ei voida korjata (jokunen saatetaan pystyä, mutta kaikkien korjaamista ei voida kuitenkaan taata). Koodin kahden laillisen koodisanan välinen pienin mahdollinen etäisyys on minimietäisyys d min, ja sen on oltava: d min 2t + 1. Sallitut koodisanat ovat siis vähintään kahden t -säteen suuruisen etäisyyden +1 päässä toisistaan kuvitteellisessa n -ulotteisessa koodiavaruudessa. 35
KOODIAVARUUS, PEITTOSÄDE JA KORJAUSKYKY (S) 36 C 1,...,C 5 ovat sallittuja koodisanoja. Näitä ei voida korjata (koodista riippuen ehkä joku yksittäinen lähellä pallon reunaa oleva pystytään, mutta ei kaikkia) Peittosäteen sisällä olevat virheelliset sanat voidaan korjata.
KOODISANOJEN VALINTAESIMERKKI (S) 37 Olkoon esimerkiksi (n,k) = (6,3) koodi. On olemassa 2 k = 2 3 = 8 mahdollista sanomavektoria ja koko avaruudessa V n = V 6 on 2 6 = 64 mahdollista 6-pituista koodisanaa. Taulukossa 8 koodisanaa muodostavat siis koodiavaruuden V 6 aliavaruuden V 3. Ko. lineaarisella koodilla on käytössä nollasana ja myös ominaisuus, että minkä tahansa kahden koodisanan modulo-2 (XOR) -summa on joku toinen aliavaruuden V 3 koodisana). Herää siis kysymys, miten sanat muodostettiin kullekkin kolmen informaatiobitin ryhmälle? Vastaus piilee lohkokoodien algebrassa.
KOODISANOJEN VALINTAESIMERKKI (S) 38 Koodisanat on generoitu edellä lineaarikombinaationa kolmesta lineaarisesti riippumattomasta 6-pituisesta vektorista. Ei kuitenkaan ole olemassa yksikäsitteistä valintaa, kuten toisaalta ei ole olemassa täydellistä valinnan vapauttakaan parittelun suhteen. Mahdollisimman etäällä toisistaan olevia koodisanoja voidaan analogisesti verrata ortogonaalisen MFSK-modulaation toteuttamiseen luotettavan siirron aikaansaamiseksi: k kpl informaatiobittejä valitsee yhden M:stä ortogonaalisesta aaltomuodosta M = 2 k -ulotteisessa signaaliavaruudessa. Haluamme toisaalta täyttää koodiavaruuden mahdollisimman monella laillisella koodisanalla (suuri koodisuhteen k/n vaatimus, mutta pieni t = (d min 1)/2 ), mutta toisaalta haluamme niiden olevan mahdollisimman etäällä toisistaan (hyvä korjauskyky t, mutta pieni k/n). Ristiriitaisia vaatimuksia siis. Kompromissi on jossain tuolla välillä. Esimerkkiin liittyvä seuraava 3D -kuva auttaa hahmottamaan hyvien koodien etsinnän tavoitetta koodausalgebran keinoin.
KOODISANOJEN VALINTAESIMERKKI (S) 39 Virheellisiä oikeaa sanaa lähellä olevia vastaanotettuja koodisanoja 8 sanaa/pallo 8 palloa x 8 sanaa = 64 mahdollista vastaanotettua sanaa Ei ole koodisana tämän koodipallon vaikutuspiirissä (tyhjä pallukka) Kuori Hammingetäisyydellä 1 koodisanasta 101001 Laillisia koodisanoja Kuori Hammingetäisyydellä 2 koodisanasta 101001