KOODAUS- JA INFORMAATIOTEORIA. Keijo Ruohonen



Samankaltaiset tiedostot
Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014

a b 1 c b n c n

Teema 4. Homomorfismeista Ihanne ja tekijärengas. Teema 4 1 / 32

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

1 Lineaariavaruus eli Vektoriavaruus

802320A LINEAARIALGEBRA OSA I

7. Olemassaolo ja yksikäsitteisyys Galois n kunta GF(q) = F q, jossa on q alkiota, määriteltiin jäännösluokkarenkaaksi

7 Vapaus. 7.1 Vapauden määritelmä

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

ja jäännösluokkien joukkoa

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

2017 = = = = = = 26 1

Koodausteoria, Kesä 2014

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

Lineaarikuvauksen R n R m matriisi

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Vapaus. Määritelmä. jos c 1 v 1 + c 2 v c k v k = 0 joillakin c 1,..., c k R, niin c 1 = 0, c 2 = 0,..., c k = 0.

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

Esimerkki A1. Jaetaan ryhmä G = Z 17 H = 4 = {1, 4, 4 2 = 16 = 1, 4 3 = 4 = 13, 4 4 = 16 = 1}.

Liite 2. Ryhmien ja kuntien perusteet

Ominaisarvot ja ominaisvektorit 140 / 170

Mitään muita operaatioita symbolille ei ole määritelty! < a kaikilla kokonaisluvuilla a, + a = kaikilla kokonaisluvuilla a.

Insinöörimatematiikka D

14. Juurikunnat Määritelmä ja olemassaolo.

Koodausteoria, Kesä 2014

Avaruuden R n aliavaruus

9 Matriisit. 9.1 Matriisien laskutoimituksia

PERUSASIOITA ALGEBRASTA

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 6 (8 sivua) OT. 1. a) Määritä seuraavat summat:

a 2 ba = a a + ( b) a = (a + ( b))a = (a b)a, joten yhtälö pätee mielivaltaiselle renkaalle.

1 Matriisit ja lineaariset yhtälöryhmät

Ortogonaalisen kannan etsiminen

2.2.1 Ratkaiseminen arvausta sovittamalla

802118P Lineaarialgebra I (4 op)

Ominaisarvo ja ominaisvektori

Lineaarialgebra ja matriisilaskenta I, HY Kurssikoe Ratkaisuehdotus. 1. (35 pistettä)

Laajennetut Preparata-koodit

R : renkaan R kääntyvien alkioiden joukko; R kertolaskulla varustettuna on

1 Kannat ja kannanvaihto

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

MS-A0402 Diskreetin matematiikan perusteet

Neljän alkion kunta, solitaire-peli ja

Matematiikan ja tilastotieteen laitos Algebra I - Kesä 2009 Ratkaisuehdoituksia harjoituksiin 8 -Tehtävät sivua Heikki Koivupalo ja Rami Luisto

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

802320A LINEAARIALGEBRA OSA III

Kokonaislukuoptimointi

rm + sn = d. Siispä Proposition 9.5(4) nojalla e d.

k=1 b kx k K-kertoimisia polynomeja, P (X)+Q(X) = (a k + b k )X k n+m a i b j X k. i+j=k k=0

Lineaarialgebra ja matriisilaskenta I

Kanta ja dimensio 1 / 23

HN = {hn h H, n N} on G:n aliryhmä.

Lineaarialgebra ja matriisilaskenta II Syksy 2009 Laskuharjoitus 1 ( ) Ratkaisuehdotuksia Vesa Ala-Mattila

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Ortogonaalinen ja ortonormaali kanta

Insinöörimatematiikka D

Tekijäryhmiä varten määritellään aluksi sivuluokat ja normaalit aliryhmät.

4. Ryhmien sisäinen rakenne

Kuvauksista ja relaatioista. Jonna Makkonen Ilari Vallivaara

Äärellisesti generoitujen Abelin ryhmien peruslause

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Vektoreiden virittämä aliavaruus

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 5 / vko 48

Määritelmä 1. Olkoot V ja W lineaariavaruuksia kunnan K yli. Kuvaus L : V. Termejä: Lineaarikuvaus, Lineaarinen kuvaus.

1 Algebralliset perusteet

Jäännösluokat. Alkupala Aiemmin on tullut sana jäännösluokka vastaan. Tarkastellaan

H = : a, b C M. joten jokainen A H {0} on kääntyvä matriisi. Itse asiassa kaikki nollasta poikkeavat alkiot ovat yksiköitä, koska. a b.

6 Vektoriavaruus R n. 6.1 Lineaarikombinaatio

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 9 (6 sivua) OT

Koodausteoria, Kesä 2014

Lineaarialgebra ja differentiaaliyhtälöt Laskuharjoitus 1 / vko 44

(d) 29 4 (mod 7) (e) ( ) 49 (mod 10) (f) (mod 9)

Kantavektorien kuvavektorit määräävät lineaarikuvauksen

Ominaisvektoreiden lineaarinen riippumattomuus

MS-C1340 Lineaarialgebra ja

kaikille a R. 1 (R, +) on kommutatiivinen ryhmä, 2 a(b + c) = ab + ac ja (b + c)a = ba + ca kaikilla a, b, c R, ja

1 Määrittelyjä ja aputuloksia

Esko Turunen Luku 3. Ryhmät

Insinöörimatematiikka D

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Similaarisuus. Määritelmä. Huom.

Ennakkotehtävän ratkaisu

Renkaat ja modulit. Tässä osassa käsiteltävät renkaat ovat vaihdannaisia, ellei toisin mainita. 6. Ideaalit

JAKSO 2 KANTA JA KOORDINAATIT

koska 2 toteuttaa rationaalikertoimisen yhtälön x 2 2 = 0. Laajennuskunnan

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m )

R 1 = Q 2 R 2 + R 3,. (2.1) R l 2 = Q l 1 R l 1 + R l,

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Lineaariavaruudet. Span. Sisätulo. Normi. Matriisinormit. Matriisinormit. aiheita. Aiheet. Reaalinen lineaariavaruus. Span. Sisätulo.

Reedin ja Solomonin koodit Katariina Huttunen

Tensorialgebroista. Jyrki Lahtonen A = A n. n=0. I n, I = n=0

6*. MURTOFUNKTION INTEGROINTI

Lineaarialgebra ja matriisilaskenta I

Kertausta: avaruuden R n vektoreiden pistetulo

Liittomatriisi. Liittomatriisi. Määritelmä 16 Olkoon A 2 M(n, n). Matriisin A liittomatriisi on cof A 2 M(n, n), missä. 1) i+j det A ij.

Transkriptio:

KOODAUS- JA INFORMAATIOTEORIA Keijo Ruohonen 1999

Sisältöluettelo i 1 I LINEAARISET KOODIT 1 1. Lohkokoodit 3 2. Ekskursio: Alkukunnat 5 3. Lineaariset koodit 8 4. Systemaattinen koodaus 9 5. Standardidekoodauskaavio 10 6. Hamming-koodit 13 II SYKLISET KOODIT 13 1. Syklinen koodi 13 2. Ekskursio: Polynomirenkaat ja äärellinen z-muunnos 15 3. Syklinen koodi polynomi-ihanteena 18 4. Syklisen koodin systemaattinen koodaus 18 5. Syklisen koodin generoija- ja tarkistusmatriisit 20 6. Meggitt-dekoodaus 21 7. Golay-koodit 22 III BCH-KOODIT 22 1. Ekskursio: Äärelliset kunnat 28 2. BCH-koodit 32 3. Dekoodaus Berlekamp Massey-algoritmi 38 4. Reed Solomon-koodit 39 5. Pyyhkiymien korjaus 43 IV PURSKEVIRHEIDEN KORJAUS 43 1. Yleistä 46 2. Tulokoodit 51 3. Kiedotut koodit 53 4. Katenoidut koodit 55 5. Fire-koodit 59 V KOODIRAJOJA 59 1. Yleistä 60 2. Ylärajoja Plotkin-raja Hamming-raja Muita ylärajoja 64 3. Alarajoja Gilbert-raja Varshamov-raja 66 4. Rajojen vertailua 70 VI KONVOLUUTIOKOODAUS 70 1. Ekskursio: Lineaariset järjestelmät 74 2. Konvoluutiokoodaus 79 3. Viterbi-dekoodaus 80 4. Jonodekoodaus m-algoritmi Pinoalgoritmi Monipinoalgoritmi Fano-algoritmi

86 VII INFORMAATIO JA ENTROPIA 86 1. Ekskursio: Diskreetti todennäköisyys 90 2. Informaatio 90 3. Entropia 93 4. Ehdollinen entropia. Keskinäisinformaatio 98 5. Kolme tapausjärjestelmää: Data Processing-lause 101 6. Entropian yksikäsitteisyys 106 7. Jatkuvan satunnaismuuttujan entropia ii 108 VIII LÄHTEEN KOODAUS 108 1. Yleistä 108 2. Muistiton lähde, lohkokoodi 114 3. Muistiton lähde, vaihtuvapituinen koodi 117 4. Optimikoodaus 120 5. Huffman-koodaus 122 6. Muita koodausmenettelyjä Juoksulukukoodaus Aritmeettinen koodaus 124 7. Muistillinen lähde 125 IX KANAVAKOODAUS 125 1. Muistiton kanava. Kanavan kapasiteetti 126 2. Kanavakoodauslause 127 3. Binäärinen symmetrinen kanava 129 X MAKSIMIENTROPIAPERIAATE 129 1. Yleistä 130 2. Maksimientropiajakaumat 133 KIRJALLISUUTTA 134 HAKEMISTO Esipuhe Käsillä oleva moniste muodostaa TTKK:n matematiikan kurssien Koodausteoria ja Informaatioteoria luentorungon. Moniste on tarkoitus täydentää luennoilla esimerkein sekä lisäyksin. Mainitut kurssit on tarkoitettu tukemaan lähinnä signaalien käsittelyyn, tietoliikennetekniikkaan sekä elektroniikkaan liittyviä kursseja. Koska kurssit Koodausteoria ja Informaatioteoria luennoidaan erikseen ja jälkimmäinen ei suinkaan pelkästään ole tarkoitettu tukemaan edellistä, on informaatioteorian osuus kirjoitettu paljolti erilleen koodausteoriasta, toisin kuin monissa kirjoissa. Itseopiskelijalle suositellaan monisteen ohella käytettäväksi joitain runsaasti esimerkkejä sisältäviä kirjoja (esim. ANDERSON & MOHAN, SWEENEY ja YAGLOM & YAGLOM). Keijo Ruohonen

1 I LUKU LINEAARISET KOODIT 1. Lohkokoodit Viestiä lähetettäessä on käytössä tietyt symbolit, ns. viestisymbolit. Viesti jaetaan tasapituisiin osiin, ns. lohkoihin eli viestisanoihin. Koodattaessa kukin viestin lohko korvataan ns. koodisymboleista muodostetulla koodisanalla. Kahta eri lohkoa ei saa vastata sama koodisana, mikä takaa koodatun viestin dekoodautuvuuden. Usein koodisymbolit ovat samat kuin viestisymbolit. Jos kaikki koodisanat ovat samanpituisia, on kyseessä ns. lohkokoodi. Yhteinen koodisanojen pituus on ns. koodin pituus. (Koodausteoria käyttää nimenomaan lohkokoodeja.) Kaikki koodisanat muodostavat joukkona koodin. Jos koodisymboleja on kaksi (yleensä bitit 0 ja 1) puhutaan binäärikoodista. Koodauksen tarkoitus on saada aikaan mahdollisuus dekoodattaessa paljastaa ja korjata tietty määrä tiedonsiirrossa tai -talletuksessa syntyviä virheitä koodisanaa kohti. Jatkossa merkitään viesti- ja koodilohkoja lihavalla: Esimerkiksi m = m 1 m 2 m k on viestisana, jonka symbolit ovat m 1,m 2,,m k ja jonka pituus on k. Viestisanojen pituutta merkitään jatkossa useimmiten k:lla ja koodin pituutta n:llä. Luku n k on ns. redundanssi. ESIMERKKI. Yksinkertainen tapa saada aikaan virheiden paljastamis/korjaamiskyky on käyttää toistokoodausta. Tällöin viestisanaa m vastaava koodisana on c = m r = m m 2 Lm k Lm 1 m 2 Lm 1444442444443 k. r kertaa Tällainen koodaus pystyy joko paljastamaan r 1 virhettä tai korjaamaan (r 1)/2 virhettä. Jos siis r = 2, voidaan yhden virheen esiintyminen havaita, mutta sitä ei pystytä korjaamaan.

2 Kahden koodisanan c 1 ja c 2 ns. (Hamming-)etäisyys d(c 1,c 2 ) on niissä olevien erojen lukumäärä. Koodin C ns. minimietäisyys, merkitään d min (C ), on pienin esiintyvä kahden eri koodisanan etäisyys. ESIMERKKI. Jos binäärikoodin koodisymbolit ovat bitit 0 ja 1, niin koodisanojen c 1 = 001001100 ja c 2 = 101101100 etäisyys on d(c 1,c 2 ) = 2. Koodin pituus on tässä 9. ESIMERKKI. Valitaan toistokoodauksessa viestisymboleiksi 0 ja 1, viestisanan pituudeksi 3 ja vielä r = 3. Saadun binäärikoodin C pituus on 9, koodisanoja on 2 3 = 8 kpl ja d min (C ) = 3. Koodia on tapana ajatella geometrisesti pistejoukkona kaikkien mahdollisten koodisymboleista muodostettujen n:n (= koodin pituus) pituisten sanojen muodostamassa avaruudessa. Etäisyys d on geometrisen vastineensa kaltainen sikälikin, että se noudattaa kolmioepäyhtälöä, ts. d(c 1,c 2 ) d(c 1,c 3 ) + d(c 3,c 2 ) (helppo todeta). Jos c on koodisana, niin c-keskinen R-säteinen pallo on B(c,R) = {d d(c,d) R}. Seuraava perustulos on aivan yksinkertaisesti pääteltävissä: LAUSE 1. (i) Koodi C korjaa t virhettä tarkalleen silloin, kun d min (C ) 2t + 1 (eli silloin, kun koodisanakeskiset t-säteiset pallot eivät leikkaa toisiaan). (ii) Koodi C paljastaa s virhettä tarkalleen silloin, kun d min (C ) s + 1 (eli silloin, kun mikään koodisana ei ole toisen koodisanan s-säteisessä pallossa). HUOM! Jos koodin C halutaan samanaikaisesti korjaavan t virhettä ja paljastavan s virhettä, tarvitaan toisenlainen ehto. Tietysti s t. (Eo. Esimerkissä oleva 9-pituinen toistokoodi ei ilmeisestikään pysty yhtaikaiseen yhden virheen korjaamiseen ja kahden virheen paljastukseen.) Geometrisesti esitettynä ehto on seuraava: Jokaiselle koodisanalle c C jokaisen toisen C :n koodisanan etäisyys pallon B(c,s) sanoista on suurempi kuin t. Kolmioepäyhtälöä käyttäen voi todeta, että tämä on sama kuin ehto d min (C ) t + s + 1 (jätetään lukijalle). Koodi C on täydellinen t virhettä korjaava koodi, jos

(1) d min (C ) 2t + 1 (ks. Lause 1i) ja 3 (2) U B(c,t) käsittää kaikki koodiaakkoston sanat, ts. jokainen koodiaakkoston sana kuuluu johonkin koodisanakeski- c C seen t-säteiseen palloon. Täydellinen (t virhettä korjaava) koodi toimii ekonomisesti, mutta se korjaa väärin tilanteet, joissa lohkossa on virheitä enemmän kuin t kpl. Pyyhkiymä on virhe, jossa symbolin paikalle ei tule toinen symboli, vaan symboli katoaa kokonaan. Näin ollen pyyhkiymien kohdat ovat välittömästi saatavissa, mutta eivät pois pyyhkiytyneet symbolit. Aivan ilmeisesti koodi C korjaa p pyyhkiymää tarkalleen silloin, kun d min (C ) p + 1. Yleisemmin koodi C korjaa p pyyhkiymää ja t tavallista virhettä tarkalleen silloin, kun d min (C ) 2t + p + 1. 2. Ekskursio: Alkukunnat Lineaarisen koodin koodisanat käsitetään symboliensa muodostamiksi vektoreiksi (jotka vielä muodostavat lineaarisen aliavaruuden). Jotta tällainen olisi mahdollista, pitää koodisymboleille määritellä tutut laskutoimitukset +,, ja / siten, että tavalliset laskusäännöt pitävät paikkansa. Jos joukossa F on määritelty yhteenlasku + ja kertolasku sekä nolla-alkio 0 ja ykkösalkio 1 siten, että (1) + ja ovat liitännäiset sekä vaihdannaiset, (2) osittelulait pätevät, (3) jokaisella alkiolla a on vasta-alkio a, ts. a + ( a) = 0, (4) jokaisella muulla alkiolla a paitsi 0 :lla on käänteisalkio a 1, ts. a a 1 = 1, ja (5) 0 ja 1 käyttäytyvät kuten pitää, ts. a + 0 = a ja a 1 = a, (ja lisäksi vielä 1 0), niin näillä laskuoperaatioilla varustettuna F on ns. kunta. Tuttuja kuntia ovat reaalilukujen kunta R, rationaalilukujen kunta Q ja kompleksilukujen

4 kunta C. Nämä ovat kuitenkin äärettömiä eivätkä tule kysymykseen koodisymbolien joukkoina. Koodisymbolien joukoksi sopivan kunnan pitääkin olla joukkona äärellinen, ns. äärellinen kunta eli Galois n kunta. Yksinkertaisia äärellisiä kuntia ovat ns. alkukunnat eli jäännösluokkien modulo alkuluku p muodostamat kunnat (p = 2,3,5,7, ). Merkitään Z m :llä jäännösluokkia modulo m. Z m :n alkiot ovat 0 = { km k = 0,±1,±2, }, 1 = { km + 1 k = 0,±1,±2, }, 2 = { km + 2 k = 0,±1,±2, }, m 1 = { (k + 1)m 1 k = 0,±1,±2, }. Jäännösluokkaa i voidaan merkitä ja se voidaan antaa minkä tahansa edustajansa avulla, ts. i = km + i. Erityisesti 0 = m ja 1 = m 1. Laskuoperaatiot määritellään nyt seuraavasti: i + j = i + j ja i j=ij. On helppo todeta, että operaatiot on näin hyvin määritelty eli tulos ei riipu siitä mitkä edustajat i ja j jäännösluokista valitaan. Nolla-alkio on luonnollisesti 0 ja ykkösalkio 1, edelleen i = i. Yleisesti 0 :n lisäksi Z m :ssä voi olla muitakin alkioita, joilla ei ole käänteisalkiota. Jos m = p on alkuluku, niin muilla kuin 0 :lla on kuitenkin aina käänteisalkio (ks. kurssi 73265 Symbolinen analyysi 1). Näin saadut kunnat Z p eli GF(p) ovat ns. alkukunnat. ESIMERKKI. Yksinkertaisin alkukunta on binäärikunta Z 2 eli GF(2), jonka alkioita 0 ja 1 voidaan pitää bitteinä 0 ja 1. Laskuoperaatiot saadaan tauluista + 0 1 0 1 0 0 1 ja 0 0 0 1 1 0 1 0 1 Kaikki tavalliset lineaarialgebran käsitteet kuten vektorit ja matriisit sekä näiden laskuoperaatiot *, determinantit, ortogonaalisuus, lineaarinen riippumattomuus ja riippuvuus, dimensio, kanta, vektorijoukon virittämä aliavaruus ja sen ortogonaalinen komplementti, matriisin rangi ym. voidaan nyt määritellä vektoreille, joiden alkiot ovat jonkin alkukunnan al- * Koodausteoriassa vektorit kirjoitetaan yleensä vaakavektoreiksi v = (v 1,,v n ) ja vektori kerrotaan matriisilla oikealta.

5 kioita. (Huomaa kuitenkin, ettei vektorien pistetulolla varsinaisesti ole mitään tekemistä vektorien välisen kulman kanssa, eikä ominaisarvoja ja -vektoreita yleisesti tarvita.) Koska nämä käsitteet ovat tuttuja peruskursseilta reaalilukukunnan tapauksessa ja ovat alkukuntien tapauksessa hyvin samankaltaisia, ei niitä tässä sen tarkemmin määritellä. Kaikkien (alku)kunnan F alkioista muodostettujen n-ulotteisten vektorien joukkoa merkitään F n :llä. HUOM! On muitakin äärellisiä kuntia kuin alkukunnat ja näitäkin tarvitaan tehokkaissa koodausmenetelmissä. Asiaan palataan myöhemmin III.1:ssä. 3. Lineaariset koodit Kun koodisymbolien joukoksi valitaan alkukunta F (tai yleisesti äärellinen kunta), voidaan sanat ja vektorit täydellisesti samaistaa: c = c 1 c 2 c n = (c 1,c 2,,c n ). Koodia C F n sanotaan lineaariseksi koodiksi, jos se on F n :n lineaarinen aliavaruus, ts. (i) (ii) jos c 1 ja c 2 ovat koodisanoja, niin samoin on c 1 + c 2 (vektorien yhteenlasku) ja jos c on koodisana ja f on kunnan F alkio, niin fc on koodisana. Näin ollen nollavektori 0 on aina lineaarisen koodin koodisana ja samoin on kunkin koodisanan c vastavektori c. (Huomaa, että alkukunnille F ehto (ii) seuraa (i):stä ja on siis itse asiassa tarpeeton, sillä jos i on positiivinen kokonaisluku, niin ic = c+l+c 12 4 34.) i kpl Lineaarista koodia, jonka pituus on n ja dimensio k (lineaarisena aliavaruutena), sanotaan (n,k)-koodiksi. Vektorin v Hamming-pituus eli Hamming-paino w(v) on siinä olevien nollaalkiosta 0 eroavien komponenttien lukumäärä. Näin ollen d(v 1,v 2 ) = w(v 1 v 2 ) ja w(v) = d(v,0) ja lineaarisen koodin C minimietäisyys d min (C ) on pienin positiivinen koodisanan paino.

6 ESIMERKKI. F:n alkioita symboleina käyttäen muodostetut toistokoodit ovat lineaarisia. Koska lineaarinen koodi C on lineaarinen aliavaruus, sillä on kanta g 1,g 2,,g k (itse asiassa tietysti useampiakin kantoja, mutta ei äärettömän monta). Koodisanan c valinta tarkoittaakin sen kantaesityksessä tarvittavien lineaariyhdelmän c = d 1 g 1 + d 2 g 2 + + d k g k kerrointen d 1,d 2,,d k valintaa. Koodattaessa pitää siis kutakin viestisanaa m kohti määrittää vastaavan koodisanan kantaesityksen kertoimet. Yksinkertaisesti tämä käy, mikäli valitaan viestisymbolien joukoksi myös F ja kertoimiksi viestisymbolit itse. Jos siis viestisana on m = m 1 m 2 m k = (m 1,m 2,,m k ), niin koodauksessa tulee sitä vastaamaan koodisana c = m 1 g 1 + m 2 g 2 + + m k g k. Huomaa, että viestisanoja on nyt tarkalleen yhtä paljon kuin koodisanoja, ts. q k kpl, missä q on kunnan F alkioiden lukumäärä. Valitsemalla eri kantoja saadaan erilaisia koodauksia. Viestisanat muodostavat viestiavaruuden F k ja koodaus voidaan käsittää lineaarikuvaukseksi F k :lta C :lle. Tällainen lineaarikuvaus voidaan suorittaa matriisia, ns. generoijamatriisia, käyttäen: missä c = mg, g 1 g G = 2 M g k g 11 g 12 L g 1n g = 21 g 22 L g 2n. M M O M g k1 g k2 L g kn Matriisin G (oikea) nolla-avaruus muodostuu niistä vektoreista h, joille Gh T = 0 k T. Tunnetusti nolla-avaruus on F n :n lineaarinen aliavaruus, ja sen dimensio on n k. Näin ollen nolla-avaruudessa on q n k vektoria. Valitaan nolla-avaruuden kanta h 1,h 2,,h n k ja muodostetaan niistä matriisi h 1 h H = 2 M h n k h 11 h 12 L h 1n h = 21 h 22 L h 2n, M M O M h n k,1 h n k,2 L h n k,n

7 ns. tarkistusmatriisi. (Valitusta kannasta riippuen mahdollisia tarkistusmatriiseja on useita.) Silloin GH T = O k (n k) ja HG T = O (n k) k. g 1,g 2,,g k puolestaan muodostavat näin H:n nolla-avaruuden kannan ja mainittu nolla-avaruus on siis C. Näin ollen koodisanat ovat tarkalleen ne sanat c, jotka toteuttavat ns. tarkistusyhtälön ch T = 0 n k. Tämä onnistuu Maple-ohjelmistollakin (ensin annetaan latauskäsky with(linalg)): > G:=array([[1,0,1,1,0],[0,1,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0]]); 1 0 1 1 0 0 1 1 0 1 G := 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 > Nullspace(G) mod 2; {[ 10010,,,, ], [ 01001,,,, ]} Dekoodaus olisi helppoa, jos pitäisi vain löytää kutakin koodisanaa vastaava viestisana, mutta dekoodauksessa pitää myös korjata tai paljastaa haluttu määrä syntyneitä virheitä. Jos saatu (mahdollisesti) virheellinen sana on r ja vastaava koodisana c, niin e = r c on virhesana eli virhevektori. Virheiden lukumäärä on virhesanan paino w(e). Dekoodauksen tarkoitus on löytää virhesana, jolloin oikea koodisana c saadaan välittömästi r:stä: c = r e. Binäärikoodin tapauksessa riittää itse asiassa löytää vain virhekohdat. Dekoodauksessa on usein käyttökelpoinen saadun sanan r = c + e (koodisana + virhesana), ns. syndromi s = rh T = (c + e)h T = eh T. Koodisanan syndromi on aina 0 ja vastaanotetun sanan r syndromi on sama kuin virheen e syndromi. Näin ollen syndromi sisältää koodisanasta c riippumatonta tietoa virheestä e. APULAUSE. Jos jonkin koodisanan paino on d, niin tarkistusmatriisissa H on d lineaarisesti riippuvaa saraketta. Todistus. Valitaan koodisana c = (c 1,,c n ), jonka paino on d. Näin ollen c:ssä on tarkalleen d nolla-alkiosta eroavaa komponenttia c i1,,c id. Koska c on koodisana, on ch T = 0 n k.

8 LAUSE 2. Lineaarisen koodin C minimietäisyys on vähintään d tarkalleen silloin, kun mitkä tahansa d 1 tarkistusmatriisin H saraketta ovat lineaarisesti riippumattomat. Todistus. Jos d min (C ) d, niin mitkään d 1 tarkistusmatriisin H eri saraketta f i1,,f T T id 1 eivät voi olla lineaarisesti riippuvat. Muussa tapauksessa olisi sellaiset kertoimet c i1,,c id 1, jotka kaikki eivät ole nolla-alkioita, että c i1 f i1 + + c id 1 f id 1 = 0 n k ja näin ollen sellainen koodisana c 0, että w(c) d 1. Jos taas mitkä tahansa d 1 tarkistusmatriisin H saraketta ovat lineaarisesti riippumattomat, niin Apulauseen nojalla d min (C ) d. 4. Systemaattinen koodaus Jos generoijamatriisi on muotoa G = ( I k P), missä I k on k k-identiteettimatriisi ja P on k (n k)-matriisi, kyseessä on ns. systemaattinen koodaus. Systemaattisessa koodauksessa k ensimmäistä symbolia muodostavat viestisanan ja loput symbolit ovat tarkistussymboleja. (Usein tosin toisin päin, ks. II.4.) HUOM! Binäärikunnan Z 2 tapauksessa tarkistus on ns. pariteetintarkistus ja puhutaan pariteetintarkistusmatriisista, pariteetintarkistussymboleista, jne.. ( ) (syste- LAUSE 3. Jos lineaarisen koodin generoijamatriisi on G = I k P maattinen koodaus), niin H = ( P T I n k ) on vastaava tarkistusmatriisi. Vastaavasti, jos lineaarisen koodin tarkistusmatriisi on H = ( QI n k ), niin G = I k Q T ( ) on vastaava (systemaattinen) generoijamatriisi. Todistus. Näytetään vain ensimmäinen toteamus (toinen menee vastaavasti). H on (n k) n-matriisi, jonka vaakarivit ovat lineaarisesti riippumattomat. Edelleen ( ) GH T = I k P P I n k = P + P = O k (n k). ESIMERKKI. Toistokoodin (ks. Esimerkki s. 1) generoijamatriisi on ( ) G = I k I k L I 1442443 k. r kpl Kyseessä on systemaattinen koodaus. Lauseen 2 mukaan vastaava tarkistusmatriisi on

I k I H = k I M n k. I k 9 (Koska n = rk, niin n k = (r 1)k.) 5. Standardidekoodauskaavio Joukkoja e + C = { e + c c C }, missä e on mielivaltainen virhesana, kutsutaan sivuluokiksi. Sivuluokka e + C sisältää ne sanat, joiksi virhe e muuntaa koodisanat. Erityisesti C = 0 + C. APULAUSE. Jos kahden sivuluokan leikkaus ei ole tyhjä, niin ne ovat samat. Todistus. Jos (e 1 + C ) (e 2 + C ) ei ole tyhjä, niin on olemassa sana e 1 + c 1 = e 2 + c 2, missä c 1,c 2 C. Näin ollen e 1 e 2 + C ja e 2 e 1 + C, joten sivuluokat sisältyvät toisiinsa ja ovat siis samat. Jokainen sana v F n kuuluu johonkin sivuluokkaan ja sivuluokat ovat samankokoiset. Näin ollen sivuluokassa on q k sanaa ja sivuluokkia on q n k kpl (eli sama määrä kuin generoijamatriisin nolla-avaruuden alkioita). (q on F:n alkioluku.) Standardidekoodauskaavio muodostetaan seuraavalla tavalla: (1) Järjestetään koodisanat jonoksi aloittaen 0:sta: c 1 = 0,c 2,c 3,,c q k. Näin saadaan kaavion ensimmäinen rivi. (2) Etsitään kustakin sivuluokasta painoltaan pienin alkio (mahdollisuuksia voi olla useita). Näin saadaan ns. sivuluokkien johtajat e 1 = 0,e 2,e 3,,e q n k.

10 Näistä muodostetaan kaavion ensimmäinen sarake. (C :n johtaja on tietysti 0.) (3) Kaavion i:nnen rivin ja j:nnen sarakkeen alkio on e i + c j. ESIMERKKI. Binäärikoodin C (kaavion ylin rivi) standardidekoodauskaavio on johtaja sivuluokka 00000 10010 01010 00101 11000 10111 01111 11101 10000 00010 11010 10101 01000 00111 11111 01101 00001 10011 01011 00100 11001 10110 01110 11100 10001 00011 11011 10100 01001 00110 11110 01100 Standardidekoodauskaaviota käytetään dekoodauksessa seuraavasti: Etsitään kaaviosta saatu sana r ja dekoodataan se vastaavan sarakkeen ylimmäksi sanaksi c C. Tulos on luonnollisesti vastaava oikea viestisana vain siinä tapauksessa, että virhe e oli r:n sisältävän sivuluokan johtaja. Menettely on näin käyttökelpoinen lähinnä vain binäärikoodien tapauksessa ja silloin, kun sivuluokkien johtajiksi on saatu edustava kokoelma virheitä. Täydellinen kaavio sisältää q n k riviä ja q k saraketta, mikä on yleensä liian paljon. Syndromeja käyttäen saadaan tilantarvetta pienennettyä. Sivuluokan alkioilla on nimittäin sama syndromi ja eri sivuluokkien alkioilla eri syndromit, kuten helposti voi todeta. Koska saadusta sanasta r on helposti laskettavissa sen syndromi s = rh T, riittää muodostaa syndromien luettelo ja liittää kuhunkin syndromiin vastaavan sivuluokan johtaja. Dekoodattaessa lasketaan ensin saadun sanan r syndromi s ja etsitään luettelosta vastaava sivuluokan johtaja e. r dekoodataan sitten r e:ksi. Tämäkään menettely ei ole kovin käyttökelpoinen, jos n k on suuri. 6. Hamming-koodit Tarkistusmatriisi määrittelee lineaarisen koodin siinä kun generoijamatriisikin. Lauseen 2 nojalla lineaarisen koodin C minimietäisyys on vähintään 3 tarkalleen silloin, kun sen tarkistusmatriisin H mitkään kaksi saraketta eivät ole lineaarisesti riippuvat. Lineaarinen koodi on Hammingkoodi, jos sen tarkistusmatriisi sisältää suurimman mahdollisen määrän parittain lineaarisesti riippumattomia sarakkeita eli suurimman mahdollisen määrän sarakkeita, joita ei saada toisistaan vakiolla (eli kunnan F alkiolla) kertomalla. Paljonko sitten Hamming-koodin tarkistusmatriisissa on sarakkeita? Ilmeisesti voidaan olettaa, että kunkin sarakkeen ylhäältälukien ensimmäinen nolla-alkiosta eroava alkio on ykkösalkio. Sarakkeita, joissa ylin alkio on ykkösalkio, on selvästi q n k 1 kpl (q on kunnan F alkioluku). Edelleen sarakkeita, joiden ylin alkio on nolla-alkio ja toiseksi ylin alkio ykkösalkio, on q n k 2 kpl, jne.. Kaiken kaikkiaan sarakkeita on siis

q n k 1 + q n k 2 + + q + 1 = qn k 1 q 1 = n 11 kpl. Merkitään n k = r. Silloin Hamming-koodin pituus ja viestisanan pituus ovat n = qr 1 q 1 ja k = qr 1 q 1 r. Samalla tuli esille eräs tapa muodostaa Hamming-koodin tarkistusmatriisi H, joka ei ole sen huonompi kuin muutkaan. Voidaankin olettaa, että H saadaan juuri tällä tavalla. Vastaavan generoijamatriisin saa vaikkapa käyttämällä Lausetta 3. Huomaa, että H:ssa on mukana kaikki r sellaista saraketta, joissa yksi alkioista on ykkösalkio ja muut nolla-alkioita, ts. koodaus on olennaisesti systemaattinen. Näin ollen H kannattaa kirjoittaa muotoon H = ( Q T I r ). Triviaalien tapausten poissulkemiseksi oletetaan, että n 3. Kuten todettiin, Lauseesta 2 seuraa, että Hamming-koodin minimietäisyys on ainakin 3. Itse asiassa se on tarkalleen 3, sillä yo. tavalla saatu H sisältää aina lineaarisesti riippuvat kolme saraketta 1 1 0 0 1 1 0, 0, 0. M M M 0 0 0 LAUSE 4. Hamming-koodi on täydellinen yhden virheen korjaava koodi. Todistus. 1-säteiset koodisanakeskiset pallot ovat erilliset ja niitä on q k kpl. Kussakin tällaisessa pallossa on ilmeisesti n(q 1) + 1 alkiota. Siispä mainituissa palloissa on yhteensä q k (n(q 1) + 1) = q n alkiota eli ne peittävät koko F n :n. Yhden virheen korjaava dekoodaus Hamming-koodilla on helppoa. Jos saadussa sanassa r = c + e on yksi virhe, ts. e = ae i, missä e i on vektori, jonka i:s alkio on ykkösalkio ja muut nolla-alkioita, niin syndromi on s = eh T = ae i H T = af i, missä f i T on H:n i:s sarake. Koska H:n sarakkeet ovat erilaisia, paljastuu näin syndromista virheen paikka i ja virhe a (= ensimmäinen s:n nolla-alkiosta eroava komponentti). Dekoodaus tuottaa oikean koodisanan

c = r ae i. 12 Jos taas syndromi on 0, ei virhettä ole tapahtunut eikä mitään korjausta tarvita. ESIMERKKI. Binäärisen Hamming-koodin pituus on n = 2 r 1 ja viestisanan pituus k = 2 r r 1. Näin ollen binäärinen Hamming-koodi on (2 r 1,2 r r 1)-koodi. Pariteetintarkistusmatriisin H sarakkeina esiintyvät kaikki 2 r 1 kpl r:n pituisia bittivektoreita paitsi nollavektori. Jos nämä kirjoitetaan H:ssa sellaiseen järjestykseen, että i:nnen sarakkeen bitit muodostavat luvun i binääriesityksen, on dekoodaus todella helppoa: Syndromi nimittäin on virheen paikan binääriesitys! (Itse virhe on ilmeinen, sillä virheen sattuessa 0 vaihtuu 1:ksi tai 1 vaihtuu 0:ksi.) Valitettavasti vain H ei tällöin ole muotoa ( Q T I r ) ja generoijamatriisin etsiminen ei mene aivan suoraan Lausetta 3 käyttäen. Systemaattinen koodaus saadaan kuitenkin myös pariteetintarkistusyhtälöä käyttäen. Yhtälöstä ch T = 0 r voidaan nimittäin ratkaista esimerkiksi c k + 1,,c n lausuttuna ensimmäisten koodisymbolien c 1,,c k avulla. Näin voidaan c 1 c 2 c k valita viestisanaksi m ja loput koodisymbolit ovat pariteetintarkistussymboleja. Esimerkiksi valitaan r = 3, jolloin saadaan (7,4)-Hamming-koodi ja pariteetintarkistusmatriisi on H = 0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1. Ratkaistaan yhtälö ch T = 0 3 Maplella (näin pieni menisi toki käsipelissäkin): > solve({c4+c5+c6+c7=0,c2+c3+c6+c7=0,c1+c3+c5+c7=0},{c5,c6,c7}): > " mod 2; { c6 = c4+ c1+ c3, c7 = c2+ c4+ c1, c5 = c3+ c2+ c4} Systemaattisessa koodauksessa valitaan c 1 c 2 c 3 c 7 = m ja loput koodisymbolit lasketaan näistä yhtälöistä. (Menettelyä voi käyttää myös muille kuin binäärisille Hamming-koodeille.) Binäärisiä Hamming-koodeja ja niiden variantteja käytetään paljon tiedon talletuksessa, ks. RAO & FUJIWARA.

13 II LUKU SYKLISET KOODIT 1. Syklinen koodi Lineaarinen koodi on syklinen, jos aina kun c 1 c n 1 c n on koodisana, niin samoin on c n c 1 c n 1. Syklisen koodin koodisanan c 1 c n 1 c n kaikki sykliset siirrot c n i c n c 1 c n i 1 (i = 0,,n 2) ovat näin ollen myös koodisanoja. Syklinen koodi on luonnollinen valinta, mikäli koodausta ajatellaan operaationa, joka toteutetaan lineaarisen järjestelmän avulla. Koodisana c = c 1 c 2 c n samaistetaan paitsi vektoriin (c 1,c 2,,c n ) myös sen (äärelliseen) z-muunnokseen c(z) = c 1 + c 2 z + + c n z n 1. c(z) on formaalinen * enintään astetta n 1 oleva z:n polynomi, ns. koodipolynomi, jonka kertoimet ovat kunnan F alkioita. Koodaus taajuustasolla tapahtuu kertomalla viestin (äärellinen) z-muunnos m(z) siirtofunktiolla g(z), joka sekin on formaalinen enintään astetta n 1 oleva z:n polynomi, ns. generoijapolynomi. Jottei asteluku nousisi yli sallitun n 1:n, pitää tulosta vielä redusoida korvaamalla z n jokaisessa esiintymässään 1 :llä, ts. merkitsemällä z n 1 = 0. Asia on parhaiten esitettävissä polynomialgebraa käyttäen. 2. Ekskursio: Polynomirenkaat ja äärellinen z-muunnos Algebrallisena käsitteenä rengas määritellään samaan tyyliin kuin kunta (ks. I.2), mutta jättäen pois joitain vaatimuksia. Jos joukossa M on määritelty yhteenlasku + ja kertolasku sekä nolla-alkio 0 ja ykkösalkio 1 siten, että * Formaalinen polynomi ei ole sama kuin sen antama polynomikuvaus. Esimerkiksi polynomin 1 + z + z 2 antama Z 2 :n kuvaus on vakiofunktio 1.

(1) + ja ovat liitännäiset sekä vaihdannaiset, 14 (2) osittelulait pätevät, (3) jokaisella alkiolla a on vasta-alkio a, ts. a + ( a) = 0, ja (4) 0 ja 1 käyttäytyvät kuten pitää, ts. a + 0 = a ja a 1 = a, niin näillä laskuoperaatioilla varustettuna M on ns. rengas. HUOM! Tarkemmin sanoen tällainen M on ns. vaihdannainen 1-rengas, varsinainen rengas on algebrallisesti vieläkin yleisempi käsite. Ks. kurssi 73115 Algebra 1. Jatkossa renkaasta puhuttaessa kyseessä on siis aina juuri tällainen vaihdannainen 1-rengas. Jokainen kunta on myös rengas. Tuttuja renkaita, jotka eivät ole kuntia, ovat mm. kokonaislukujen rengas Z sekä erilaiset polynomirenkaat, esimerkiksi rationaali-, reaali-, kompleksi- ja kokonaiskertoimisten polynomien renkaat Q[z], R[z], C[z] ja Z[z]. Myös Z m eli jäännösluokat modulo m muodostavat renkaan. Polynomit, jotka muodostetaan formaalisesti käyttäen kunnan F alkioita kertoimina, muodostavat ns. F:n polynomirenkaan F[z]. Koodausteoriassa tarvitaan nimenomaan äärellisten kuntien polynomirenkaita. Tavalliseen tapaan F[z]:n nollapolynomi samaistetaan F:n nolla-alkioon 0 ja vakiopolynomit vastaaviin F:n alkioihin. Polynomin p(z) aste deg(p(z)) määritellään edelleen tavalliseen tapaan korkeimman esiintyvän z:n potenssin eksponentiksi. Nollapolynomin asteeksi voidaan sopia vaikkapa 1. Kunnan polynomirenkaan polynomeille a(z) ja b(z) 0 on määritelty yksikäsitteinen osamäärä q(z) ja jakojäännös j(z), ts. voidaan kirjoittaa a(z) = q(z)b(z) + j(z), deg(j(z)) < deg(b(z)). (Käytännössä tällainen jakolasku voidaan suorittaa pitkänä jakolaskuna paperilla, myös esimerkiksi Maple-ohjelmisto osaa jakaa polynomeja äärellisissä kunnissa.) j(z):n sanotaan olevan a(z):n jäännös modulo b(z), merkitään a(z), vrt. vastaava käsite kokonaisluvuille I.2:ssa. b(z) on ns. moduli. Kaikki jäännökset modulo b(z) muodostavat ns. jäännösluokkarenkaan eli tekijärenkaan F[z]/ b(z). On helppo nähdä, samaan tapaan kuin kokonaisluvuille, että jäännökset modulo b(z) voidaan voidaan antaa ja niillä voidaan laskea edustajan välityksellä, ts. a 1 (z)+ a 2 (z) = a 1 (z)+ a 2 (z) ja a 1 (z) a 2 (z) = a 1 (z)a 2 (z). (Jakojäännöstä j(z) vastaavan jäännösluokan edustajia ovat ne polynomit a(z), joiden jäännös modulo b(z) on j(z). Jäännösluokka voidaan myös sa-

15 maistaa edustajiensa muodostamaan joukkoon.) Näin ollen F[z]/ b(z) on todellakin rengas. Vektorin v = (v 1,v 2,,v n ) F n äärellinen z-muunnos on F[z]:n polynomi v(z) = v 1 + v 2 z + + v n z n 1, mutta samaistettuna jäännösluokkaan modulo S(z) = z n 1. Itse asiassa äärelliset z-muunnokset ovat siis jäännösluokat modulo z n 1 ja niillä lasketaan redusoiden aina z n ykkösalkioksi, sillä z n 1 = 0 eli z n = 1. 3. Syklinen koodi polynomi-ihanteena Ellei sekaannusta satu, ts. deg(v(z)) < n, samaistetaan polynomi v(z), sen edustama jäännösluokka v(z), vektori v = (v 1,v 2,,v n ) ja sana v = v 1 v 2 v n täysin. Koodisanan c(z) = c 1 + + c n 1 z n 2 + c n z n 1 syklinen siirto tapahtuu silloin z:lla eli koodisanalla 0 1 0L0 kertomalla: Joukkoa zc(z) = c n + c 1 z + + c n 1 z n 1. f(z) = { v(z)f (z) v(z) F[z]/ S(z) } kutsutaan f(z):n generoimaksi ihanteeksi eli ideaaliksi. Huomaa. että tällainen ihanne on kaikkien niiden tulosten joukko, jotka saadaan operoimalla siirtofunktiolla f(z) äärellisiin z-muunnoksiin v(z). Aivan ilmeisesti koodina f(z) on syklinen koodi, mutta f(z) ei (välttämättä) ole sen generoijapolynomi. LAUSE 5. Koodi on syklinen n-pituinen koodi täsmälleen silloin, kun se on muotoa { v(z)g(z) v(z) F[z]/ S(z), deg(v(z)) < n deg(g(z)) } = g(z), missä g(z) on S(z):n (eli z n 1 :n) tekijä, ns. generoijapolynomi. Todistus. Todetaan ensin, että { v(z)g(z) v(z) F[z]/ S(z), deg(v(z)) < n deg(g(z)) } todellakin on tällöin g(z):n generoima ihanne g(z) ja näin ollen syklinen koodi. Aivan ilmeisesti se sisältyy mainittuun ihanteeseen g(z). Jos g(z) on S(z):n tekijä, voidaan kirjoittaa S(z) = g(z)h (z) ja deg(h (z)) = n

16 deg(g(z)). Valitaan mielivaltainen v(z) F[z]/ S(z), tulkitaan se F[z]:n polynomiksi ja jaetaan h(z):lla: v(z) = q(z)h(z) + j(z), deg(j(z)) < n deg(g(z)). Modulo S(z) on v(z)g(z) näin ollen sama kuin j(z)g(z) ja v(z):n asteen voidaan siis olettaa olevan pienempi kuin n deg(g(z)). Oletetaan sitten, että C on syklinen koodi ja valitaan sen asteeltaan pienin nollapolynomista eroava koodipolynomi g(z). Syklisyydestä ja lineaarisuudesta johtuen myös polynomit v(z)g(z), v(z) F[z]/ S(z), ovat koodipolynomeja, sillä jos v(z) = v 1 + v 2 z + + v n z n 1, niin Jaetaan S(z) g(z):llä: v(z)g(z) = v 1 g(z) + v 2 zg(z) + + v n z n 1 g(z). S(z) = q(z)g(z) + j(z), deg(j(z)) < deg(g(z)). Modulo S(z) on j(z) näin ollen sama kuin q(z)g(z) ja on siis koodipolynomi. g(z):n asteen minimaalisuudesta johtuen pitää j(z):n olla nollapolynomi, jolloin g(z) on S(z):n tekijä. Samaan tapaan voidaan jakolaskulla todeta, että g(z) on jokaisen C :n koodipolynomin tekijä. C on näin ollen esitettyä muotoa. Syklisen koodin * koodaus voidaan suorittaa generoijapolynomilla g(z) kertomalla, kunhan viestisana m = m 1 m 2 m k samaistetaan viestipolynomiksi m(z) = m 1 + m 2 z + + m k z k 1, missä k = n deg(g(z)): c(z) = m (z)g(z). ESIMERKKI. Lineaarinen toistokoodi (ks. Esimerkki s. 1) on syklinen ja sen koodaus voidaan suorittaa generoijapolynomilla 1 + z k + z 2k + + z (r 1)k. Koska syklisen koodin generoijapolynomi g(z) on S(z):n tekijä, voidaan kirjoittaa S(z) = g(z)h(z), missä h(z) on ns. tarkistuspolynomi. Nimi on sattuva (vrt. tarkistusmatriisi), sillä modulo S(z) on g(z)h(z) näin 0. Edelleen saadaan * Muidenkin koodien kuin syklisten koodien koodaus voidaan suorittaa tällä tavoin, mutta koodipolynomit eivät tällöin muodosta lineaarisen järjestelmän koko tulosjoukkoa ja koodaus on tietyssä mielessä tehotonta. Esimerkiksi (lineaarisen) koodin {000,101} koodaus voidaan suorittaa polynomilla 1 + z 2 (joka ei ole 1 + z 3 :n tekijä).

17 LAUSE 6. Jos syklisen koodin tarkistuspolynomi on h(z), niin c(z) on koodipolynomi täsmälleen silloin, kun c(z)h(z) on nollapolynomi modulo S(z). Todistus. Jos c(z) on koodipolynomi, niin se on muotoa m(z)g(z), missä g(z) on tarkistuspolynomia h(z) vastaava generoijapolynomi. Näin ollen tällöin c(z)h(z) = m(z)g(z)h(z) = m(z)s(z) on nollapolynomi modulo S(z). Oletetaan sitten, että c(z)h(z) on nollapolynomi modulo S(z). Jaetaan c(z) generoijapolynomilla g(z): c(z) = q(z)g(z) + j(z), deg(j(z)) < deg(g(z)). Silloin myös j(z)h(z) on nollapolynomi modulo S(z), ts. muotoa p(z)s(z). Mutta astelukuja ajatellen tämä on mahdollista vain, jos j(z) on itse nollapolynomi, jolloin c(z) = q(z)g(z) on koodisana. Yleensä generoijapolynomi g(z) valitaan pääpolynomiksi, ts. siinä valitaan z n k :n kerroin ykkösalkioksi. Tämä ei mitenkään rajoita tilannetta. Seurauksena myös vastaava tarkistuspolynomi on pääpolynomi. Analogisesti aikaisemmin esillä olleen syndromin määritelmän mukaisesti polynomia r(z)h(z) = s(z) kutsutaan saadun sanan r(z) syndromipolynomiksi. Syndromipolynomi määräytyy vain virhesanasta eikä riipu koodisanasta. Jos s(z) 0, tiedetään virheen sattuneen. Vaihtoehtoisesti virhe voitaisiin paljastaa jakamalla r(z) g(z):lla, jolloin jakojäännös on syndromipolynomi. Jos jakojäännös ei ole nollapolynomi, tiedetään virheen tapahtuneen. Jos syklisen koodin C 1 generoijapolynomi g 1 (z) on toisen syklisen koodin C 2 generoijapolynomin g 2 (z) tekijä, niin C 2 sisältyy C 1:een. Syklistä koodia sanotaankin maksimaaliseksi, jos sen generoijapolynomi g(z) on jaoton, ts. (vakiopolynomien lisäksi) g(z):llä ei ole muita tekijöitä kuin se itse. ESIMERKKI. Valitaan n = 7 ja F = Z 2. Polynomin z 7 1 eli z 7 + 1 jaottomat tekijät ovat 1 + z, 1 + z + z 3 ja 1 + z 2 + z 3, kuten kokeilemalla voi havaita. Nämä kukin generoivat maksimaalisen syklisen koodin. Koodissa 1 + z on 2 6 koodisanaa, 1 + z + z 3 :ssa 2 4 = 16 koodisanaa ja samoin koodissa 1 + z 2 + z 3. Kaikki mahdolliset sykliset 7-pituiset binäärikoodit saadaan etsimällä vielä muut generoijapolynomit: (1 + z)(1 + z + z 3 ) = 1 + z 2 + z 3 + z 4 ((7,3)-koodi), (1 + z)(1 + z 2 + z 3 ) = 1 + z + z 2 + z 4 ((7,3)-koodi), (1 + z + z 3 )(1 + z 2 + z 3 ) = 1 + z + z 2 + z 3 + z 4 + z 5 + z 6 ((7,1)-koodi).