Vilniaus universitetas Matematikos ir informatikos fakultetas Informatikos katedra. Gintaras Skersys. Mokymo priemonė

Σχετικά έγγραφα
Matematika 1 4 dalis

Vilniaus universitetas. Edmundas Gaigalas A L G E B R O S UŽDUOTYS IR REKOMENDACIJOS

Vilius Stakėnas. Kodavimo teorija. Paskaitu. kursas

Matematika 1 3 dalis

X galioja nelygyb f ( x1) f ( x2)

Dviejų kintamųjų funkcijos dalinės išvestinės

I dalis KLAUSIMŲ SU PASIRENKAMUOJU ATSAKYMU TEISINGI ATSAKYMAI

Temos. Intervalinės statistinės eilutės sudarymas. Santykinių dažnių histogramos brėžimas. Imties skaitinių charakteristikų skaičiavimas

Algoritmai. Vytautas Kazakevičius

Elektronų ir skylučių statistika puslaidininkiuose

Įžanginių paskaitų medžiaga iš knygos

1 Įvadas Neišspręstos problemos Dalumas Dalyba su liekana Dalumo požymiai... 3

MATEMATINĖ LOGIKA. Įžanginių paskaitų medžiaga iš knygos

FDMGEO4: Antros eilės kreivės I

SIGNALAI TELEKOMUNIKACIJŲ SISTEMOSE

1 TIES ES IR PLOK TUMOS

LIETUVOS JAUNŲ J Ų MATEMATIKŲ MOKYKLA

ATSITIKTINIAI PROCESAI. Alfredas Račkauskas. (paskaitų konspektas 2014[1] )

ELEMENTARIOJI TEORIJA

Specialieji analizės skyriai

VIII. FRAKTALINĖ DIMENSIJA. 8.1 Fraktalinės dimensijos samprata. Ar baigtinis Norvegijos sienos ilgis?

Matematinės analizės konspektai

AIBĖS, FUNKCIJOS, LYGTYS

III. MATRICOS. DETERMINANTAI. 3.1 Matricos A = lentele žymėsime taip:

4.1 Skaliarinė sandauga erdvėje R n Tarkime, kad duota vektorinė erdvė R n. Priminsime, kad šios erdvės elementai yra vektoriai vektoriu

Spalvos. Šviesa. Šviesos savybės. Grafika ir vizualizavimas. Spalvos. Grafika ir vizualizavimas, VDU, Spalvos 1

ANALIZINĖ GEOMETRIJA III skyrius (Medžiaga virtualiajam kursui)

1 Tada teigini Ne visi šie vaikinai yra studentai galima išreikšti formule. 2 Ta pati teigini galima užrašyti ir taip. 3 Formulė U&B C reiškia, kad

IV. FUNKCIJOS RIBA. atvira. intervala. Apibrėžimas Sakysime, kad skaičius b yra funkcijos y = f(x) riba taške x 0, jei bet kokiam,

1.4. Rungės ir Kuto metodas

eksponentinės generuojančios funkcijos 9. Grafu

I.4. Laisvasis kūnų kritimas

FUNKCIJOS. veiksmu šioje erdvėje apibrėžkime dar viena. a = {a 1,..., a n } ir b = {b 1,... b n } skaliarine sandauga

Diskrečioji matematika

DISKREČIOJI MATEMATIKA

TIKIMYBIU TEORIJA HAMLETAS MARK AITIS MYKOLO ROMERIO UNIVERSITETAS 2010

VILNIAUS UNIVERSITETAS MATEMATIKOS IR INFORMATIKOS FAKULTETAS PROGRAMŲ SISTEMŲ KATEDRA. Algoritmų teorija. Paskaitų konspektas

Specialieji analizės skyriai

EKONOMETRIJA 1 (Regresinė analizė)

KADETAS (VII ir VIII klasės)

1. Individualios užduotys:

2.5. KLASIKINĖS TOLYDŽIŲ FUNKCIJŲ TEOREMOS

4.3. Minimalaus dengiančio medžio radimas

Matematinė logika. 1 skyrius Propozicinės formulės. žodį, Graikiškas žodis logos (λóγoς) reiškia

2015 M. MATEMATIKOS VALSTYBINIO BRANDOS EGZAMINO UŽDUOTIES VERTINIMO INSTRUKCIJA Pagrindinė sesija. I dalis

Atsitiktinių paklaidų įvertinimas

Laboratorinis darbas Nr. 2

2008 m. matematikos valstybinio brandos egzamino VERTINIMO INSTRUKCIJA Pagrindinė sesija

Rinktiniai informacijos saugos skyriai. 3. Kriptografija ir kriptografijos protokolai: Klasikinė kriptografija

5 klasė. - užduotys apie varniuką.

0.1. Bendrosios sąvokos

Remigijus Leipus. Ekonometrija II. remis

2009 m. matematikos valstybinio brandos egzamino VERTINIMO INSTRUKCIJA Pagrindinė sesija 1 6 uždavinių atsakymai

MONTE KARLO METODAS. Gediminas Stepanauskas IVADAS Sistemos Modeliai Modeliavimas ir Monte-Karlo metodas...

TEORIJA. RINKTINIAI MATEMATIKOS SKYRIAI (Informatikos spec., 2 srautas, magistrantūra, 1 semestras) PROGRAMA. su skaidžia savybe skaičiu

Paprastosios DIFERENCIALINĖS LYGTYS

06 Geometrin e optika 1

Ekonometrija. Trendas ir sezoninė laiko eilutės komponentė

Paprastosios DIFERENCIALINĖS LYGTYS

1. Vektoriu veiksmai. Vektoriu skaliarinė, vektorinė ir mišrioji sandaugos

Paprastosios DIFERENCIALINĖS LYGTYS

Statistinė termodinamika. Boltzmann o pasiskirstymas

Vilniaus universitetas Matematikos ir informatikos fakultetas. Algirdas Ma iulis. Duomenu tyrimas. Paskaitu konspektas

2 laboratorinis darbas. TIKIMYBINIAI MODELIAI

Modalumo logikos S4 kai kurios išsprendžiamos klasės

1. Klasifikavimo su mokytoju metodai

04 Elektromagnetinės bangos

1 iš 15 RIBOTO NAUDOJIMO

TEORIJOS PRADMENYS PROGRAMA

JONAS DUMČIUS TRUMPA ISTORINĖ GRAIKŲ KALBOS GRAMATIKA

II dalis Teisingas atsakymas į kiekvieną II dalies klausimą vertinamas 1 tašku g/mol

0.1. Bendrosios sąvokos

Integriniai diodai. Tokio integrinio diodo tiesiogin įtampa mažai priklauso nuo per jį tekančios srov s. ELEKTRONIKOS ĮTAISAI 2009

Vilijandas Bagdonavi ius. Julius Jonas Kruopis MATEMATIN E STATISTIKA

Dirbtiniai neuroniniai tinklai

Analizės uždavinynas. Vytautas Kazakevičius m. lapkričio 1 d.

Įvadas į laboratorinius darbus

Pav1 Žingsnio perdavimo funkcija gali būti paskaičiuota integruojant VIPF. Paskaičiavus VIPF FFT gaunamo amplitudinė_dažninė ch_ka.

V skyrius ĮVAIRŪS PALŪKANŲ APSKAIČIAVIMO KLAUSIMAI

EUROPOS CENTRINIS BANKAS

PNEUMATIKA - vožtuvai

5 paskaita. 5.1 Kompaktiškosios aibės Sąvokos

KLASIKIN E MECHANIKA

TERMODINAMIKA. 1. Pagrindinės sąvokos ir apibrėžimai

ĮVADAS Į FINANSŲ SISTEMĄ

Turininga informatikos mokymosi medžiaga pradinukams ir vyresniems

FRANKO IR HERCO BANDYMAS

LIETUVOS RESPUBLIKOS ÐVIETIMO IR MOKSLO MINISTERIJA NACIONALINIS EGZAMINØ CENTRAS 2014 METŲ MATEMATIKOS VALSTYBINIO BRANDOS EGZAMINO REZULTATŲ

BRANDUOLINĖS ENERGETIKOS FIZIKINIAI PAGRINDAI

DISPERSINĖ, FAKTORINĖ IR REGRESINĖ ANALIZĖ Laboratorinis darbas Nr. 2

Arenijaus (Arrhenius) teorija

Taikomieji optimizavimo metodai

Vilniaus universitetas Gamtos mokslų fakultetas Kartografijos centras. Giedrė Beconytė. Mokomoji knyga geomokslų specialybių studentams

9. KEVALŲ ELEMENTAI. Pavyzdžiai:

1. Pirštu atspaudu atpažinimas

Papildomo ugdymo mokykla Fizikos olimpas. Mechanika Dinamika 1. (Paskaitų konspektas) 2009 m. sausio d. Prof.

Gabija Maršalkaitė Motiejus Valiūnas. Astronomijos pratybų užduočių komplektas

1. Įvadas į sistemas ir signalus. 1. Signalas, duomenys, informacija ir žinios

Skalbimo mašina Vartotojo vadovas Πλυντήριο Ρούχων Εγχειρίδιο Χρήστη Mosógép Használati útmutató Automatická pračka Používateľská príručka

Donatas Surgailis Finansų matematika

Transcript:

Vilniaus universitetas Matematikos ir informatikos fakultetas Informatikos katedra Gintaras Skersys Klaidas taisančių kodų teorija Mokymo priemonė Vilnius 2005

I dalis Pagrindinės savokos 1 Įvadas Panagrinėkime tokią schemą. Kažkokį pranešimą M norime kažkam perduoti. Perduodant pranešimą, galimas jo iškraipymas. Tai galima pavaizduoti grafiškai šitaip: M kanalas M (galb ūt M) Pranešimas M perduodamas nepatikimu ryšio kanalu, t.y. kanale jį gali iškraipyti triukšmas. Iš kanalo išėjęs pranešimas M gali skirtis nuo M. Ką daryti, kad iškraipymo tikimybė b ūtų kuo mažesnė? Keli kanalų pavyzdžiai: 1. Telefono linija (informacija gali b ūti iškraipyta dėl triukšmo ir t.t.). 2. Kosminis zondas siunčia Marso nuotraukas į Žemę. 3. Ląstelių dalijimasis motininės ląstelės DNR perduoda informaciją dukterinės ląstelės DNR (dėl radiacijos ir kt. poveikio gali mutuoti). 4. Informacijos laikmena, pavyzdžiui, kietas diskas informacija užrašoma, o po kurio laiko nuskaitoma. Paskutinis pavyzdys rodo, kad kanalas neb ūtinai reiškia, kad informacija perkeliama iš vienos vietos į kitą. Mes užrašome failą į diską ir jį nuskaitome paprastai toje pačioje vietoje, bet skirtingu laiku. O per tą laiką jis galėjo b ūti iškraipytas. Visi šitie ryšio kanalai yra nepatikimi, nes gali iškraipyti 1 informaciją. Norėtųsi turėti tokį ryšio kanalą, kuriame informacijos iškraipymo tikimybė b ūtų lygi nuliui, arba bent jau tokia artima nuliui, kad praktikoje ją galėtume laikyti lygia nuliui. Ką daryti? Fizinis sprendimas b ūtų bandyti pagerinti kanalo fizines charakteristikas,tačiau tada išauga perdavimo kaštai. Kodavimo teorijos si ūlomas sprendimas priimame kanalą tokį, koks jis yra, bet, perduodami juo informaciją, naudojame tam tikrus metodus, padedančius aptikti ir ištaisyti kanale padarytas klaidas. Tam informacija prieš siunčiant į kanalą yra koduojama, o išėjusi iš kanalo dekoduojama: M C C šaltinis kodavimas kanalas M dekodavimas gavėjas triukšmas Kodavimo metu prie pradinio pranešimo M prijungiama papildoma informacija, leisianti aptikti ir ištaisyti tam tikrą skaičių kanale padarytų klaidų. Gaunamas užkoduotas pranešimas C, kuris yra didesnės apimties nei M. Pranešimas C siunčiamas ryšio kanalu, kur galb ūt yra kažkiek iškraipomas. Dekodavimo metu iš kanalo gautame pranešime C, naudojantis kodavimo metu pridėta informacija, yra ištaisomos 1 Čia turima omenyje, kad iškraipymai įvyksta ne dėl kieno nors piktos valios, o dėl gamtinių sąlygų, technikos netobulumo ir pan. atsiradusio kanalo triukšmo. Piktavalius iškraipymus nagrinėja kriptografija. 2

klaidos ir gaunamas pradinis pranešimas M. Paprastai, naudojant tokią sistemą, tikimybė, kad M skirsis nuo M, žymiai sumažėja, užtat išauga informacijos kiekis, siunčiamas kanalu. Taigi, fiziškai didinant kanalo patikimumą, jo kaina išauga, o naudojant kodavimą, vieninteliai kaštai yra papildomi skaičiavimai koduojant ir dekoduojant bei didesnis kanalo apkrovimas. Informacijos teorija nagrinėja tokių sistemų teorines ribas ir galimybes. Klaidas taisančių kodų teorija (trumpiau dar kartais vadinama kodavimo teorija), kurios pradmenys ir bus pateikti šiame kurse, kuria praktinius kodavimo ir dekodavimo b ūdus. 2 Paprasti klaidas aptinkančių ir taisančių kodų pavyzdžiai Ką galima pridėti prie pradinio pranešimo, kad b ūtų galima aptikti ir ištaisyti kanalo padarytas klaidas? Šiame skyriuje pateiksime kelis paprastus pavyzdžius. Tarkime, pradinis pranešimas M yra dvinaris vektorius (0 ir 1 seka). 2.1 Pakartojimo kodas R n Tarkime, n 1 sveikasis skaičius. Paprasčiausias kodavimo b ūdas - pakartoti kiekvieną siunčiamą ženklą (0 arba 1) n kartų. Pavyzdys. n = 3, M = (1 0 1 1) pradinis pranešimas; C = (1 1 1 0 0 0 1 1 1 1 1 1) siunčiamas pranešimas; C = (1 0 1 0 0 1 0 1 0 1 1 1) gautas pranešimas (kanale padarytos 4 klaidos); E = C C (mod 2) = (0 1 0 0 0 1 1 0 1 0 0 0) klaidų vektorius skirtumas tarp gauto ir išsiųsto vektorių. Jei kuri nors klaidų vektoriaus koordinatė nelygi nuliui, reiškia, toje pozicijoje įvyko klaida; jei lygi nuliui klaidos ten nėra. Čia (mod 2) reiškia, kad skaičiavimas vyksta moduliu 2, t.y., skirtumo C C koordinatės dalinamos iš 2 ir imama liekana. Pastebėsime, kad, skaičiuojant moduliu 2, -1=1 ir 2=0. Dekoduodami ženklų seką išskaidome į blokus po n = 3 simbolius. Kiekvieną bloką keičiame ženklu, kuris dažniausiai kartojasi tame bloke. M = (1 0 0 1) - dekoduotas pranešimas (M M). Bendru atveju, kiekviename bloke galime ištaisyti n 1 2 klaidų, kur x yra skaičiaus x sveikoji dalis (didžiausias sveikasis skaičius, mažesnis už x). Pavyzdžiui, kai n = 3, kiekviename bloke galime ištaisyti 3 1 2 = 1 = 1 klaidą, o kai n = 4, tai irgi 4 1 2 = 1.5 = 1 klaidą (jei įvyktų dvi klaidos, nulių ir vienetų gautume po lygiai, todėl negalėtume pasakyti, ar užkoduotas nulis, ar vienetas). Tai reiškia, kad naudodami pavyzdyje nurodytą dekodavimo proced ūrą mes tikrai galėsime ištaisyti visas padarytas klaidas, jei jų skaičius neviršija n 1 2. Jei šis skaičius viršytas, tai galime dekoduoti klaidingai (bet galime ir teisingai). Šis kodas yra n 1 klaidą aptinkantis kodas. Iš tikro, jei padaroma n 1 ar mažiau klaidų, iš kanalo gausime bloką, kuriame ne visi simboliai bus vienodi, iš ko ir nuspręsime, kad buvo klaidų. Bet jei klaidų buvo n, tai gausime bloką, kur vėl visi simboliai bus vienodi, ir negalėsime nuspręsti, ar klaidų buvo. Kodo koeficientu vadinsime pradinio ir persiunčiamo pranešimų ilgių santykį. Jis parodo, kuri į kanalą pasiųstų simbolių dalis yra naudinga informacija, o kuri tik pridėta klaidų aptikimui ir ištaisymui. Kuo jis didesnis, tuo geriau, nes tuo daugiau naudingos informacijos yra siunčiamame pranešime. 3

Pakartojimo kodo R n koeficientas yra mažas, tik 1 (iš n kanalu persiųstų simbolių tik vienas yra n pradinio pranešimo simbolis). Užtat klaidų jis ištaiso daug beveik pusė simbolių gali b ūti klaidingi, vistiek kodas dekoduos teisingai. 2.2 Kontrolinio simbolio kodas (lyginių svorių kodas) Šis kodas skirtas ne ištaisyti, o kuo greičiau ir paprasčiau surasti perdavimo klaidą. Pradinį pranešimą M = (m 1, m 2,...,m k ) užkoduojame vektoriumi C = (m 1,..., m k, m k+1 ), kur kontrolinis simbolis m k+1 prirašomas taip, kad vektoriuje C b ūtų lyginis vienetų skaičius. Nesunku pastebėti, kad m k+1 tenkina tokią formulę: m k+1 = k m i (mod 2) = i=1 { 0, jei vienetų skaičius vektoriuje M lyginis; 1, jei vienetų skaičius vektoriuje M nelyginis. Pavyzdys. Jei M = (1 0 1 1 ), tai C = (1 0 1 1 1). Vektorius C turi tenkinti lygybę: k+1 m i 0 (mod 2) i=1 Dekodavimas: patikriname gautame kode vienetų skaičių, jei vienetų skaičius lyginis, tai padarome išvadą, kad klaidų nėra, jei nelyginis - yra. Šis kodas klaidų neištaiso, jis tik aptinka jas, jei jų skaičius - nelyginis. k Informacijos perdavimo lygis yra labai aukštas = 1 1 bet kodas labai silpnas, nes neištaiso k+1 k+1 klaidų. 2.3 Knygų numeracijos sistema ISBN (International Standard Book Numbering) Kiekviena išleista knyga užkoduojama devyniais dešimtainiais skaitmenimis a 1,...,a 9. Šis kodas aptinka dažniausias renkant skaičius pasitaikančias klaidas: 1. vietoje vieno simbolio įvedamas kitas; 2. du gretimi simboliai sukeičiami vietomis. Kontrolinis simbolis a 10 pridedamas pagal taisyklę: a 10 9 ia i (mod 11) (jei gauname a 10 = 10, tai užrašome X) (1) i=1 Pavyzdys. ISBN 1 56592 127 5. Daugiau pavyzdžių rasite pavartę bet kokias knygas. 2.1 teiginys. Lygybė (1) nebegalioja, jei padaroma viena klaida arba transpozicija (greta stovinčių simbolių sukeitimas vietomis). Jei padaromos dvi klaidos lygybe (1) gali išlikti teisinga. 4

2.4 Asmens kodas Lietuvos gyventojų asmens kodo strukt ūra: }{{} L Y 1 Y 2 M 1 M 2 D 1 D 2 X }{{} 1 X 2 X }{{} 3 }{{} K Lytis Gimimo data Asmens eilės nr. L gali įgyti reikšmę nuo 1 iki 6: 1. vyras gimęs XIXa. 2. moteris gimusi XIXa. 3. vyras gimęs XXa. 4. moteris gimusi XXa. 5. vyras gimęs XXIa. 6. moteris gimusi XXIa. Kontrolinis simbolis Kontrolinis skaičius K apskaičiuojamas taip: S = L 1 + Y 1 2 + Y 2 3 + M 1 4 + M 2 5 + D 1 6 + D 2 7 + X 1 8 + X 2 9 + X 3 1 (mod 11) Jei S 10 tai K = S. Jei S = 10, tai skaičiuojame taip: S = L 3 + Y 1 4 + Y 2 5 + M 1 6 + M 2 7 + D 1 8 + D 2 9 + X 1 1 + X 2 2 + X 3 3 (mod 11) Jei S 10 tai K = S, jei S = 10 tai K = 0. 2.5 Kodas [t 2 + 2t, t 2 ] Grįžkime vėl prie bitų sekos. Tarkime turime bitų seką, kurią reikia perduoti. Ją skaidome į t 2 ilgio vektorius. Surašome į lentelę t t. Tada užkoduojame: kiekvienai eilutei ir kiekvienam stulpeliui, prirašome papildomą simbolį tokiu b ūdu, kad vienetų skaičius kiekvienoje eilutėje ir kiekviename stulpelyje pasidarytų lyginis. Gautą lentelę užrašome vektoriumi-eilute. Pavyzdys. M = (1 1 0 1) 1 1 0 0 1 1 1 0 C = (1 1 0 0 1 1 1 0) Bendru atveju vektorius, kurį koduojame turi t 2 simbolių, o C ilgis t 2 + 2t. Informacijos perdavimo t lygis 2. t 2 +2t Dekodavimo algoritmas: C surašome i lentelę ir patikrinam vienetų skaičių. Jei padaryta viena klaida, tame stulpelyje ir eilutėje, kur padaryta klaida, vienetų skaičius yra nelyginis, taip nustatoma kur padaryta klaida. 5

Pavyzdys. Jei klaida buvo antroj pozicijoj, pirmoje eilutėje ir antrame stulpelyje vienetų skaičius bus nelyginis: 1 0 0 0 1 1 1 0 Jei padarytos dvi klaidos, tai dekoduojant tokiu b ūdu arbadekoduojama neteisingai arba dekodavimas nėra vienareikšmis. 2.6 [7,4] Hemingo (Hamming) kodas m = (m 1, m 2, m 3, m 4 ) užkoduojame taip, kad vienetų skaičius visuose apskritimuose b ūtų lyginis. c 5 m 1 m 2 m 3 c 7 m 4 c 6 C = (m 1, m 2, m 3, m 4, C 5, C 6, C 7 ) Pavyzdys. m = (1, 0, 0, 0) 1 1 0 0 1 0 0 C = (1, 0, 0, 0, 1, 0, 1) 6

Dekodavimas: Tarkime, padaryta viena klaida. Tarkime, klaidinga šešta pozicija, t.y. C 6 = 1. Matome, kad tokiu atveju vienetų skaičius nelyginis tik viename apskritime (dešiniajame), todėl nuspręsime, kad klaida padaryta b ūtent toje vietoje, kuri įeina į dešinįjį apskritimą, bet neįeina į kitus apskritimus. Tokia vieta tėra viena, todėl klaidą aptinkame. Tarkime, kad padaryta klaida m 2 = 1. Tada vienetų skaičius bus nelyginis dviejuose skrituliuose (viršutiniame ir dešiniajame), todėl nuspręsime, kad klaida įvyko toje vietoje, kuri priklauso tiems dviems skrituliams ir nepriklauso trečiajam. Tokia vieta tėra viena, todėl klaidą galėsim rasti ir ištaisyti. Taip pat klaidą galėsim ištaisyti, jei ji yra pozicijoje, kuri priklauso visiems skrituliams (m 3 = 1). Tarkime padarytos dvi klaidos: C 5 = 0, m 4 = 1. Tada manome, kad reikia taisyti m 3 ir taip gauname dar vieną klaidą. 2.2 teiginys. Įvykus dviems klaidoms, [7,4] Hemingo kodas su šiuo dekodavimo metodu visada dekoduos klaidingai. Informacijos perdavimo lygis 4 7. B ūtent šis kodas kartu su kontrolinio simbolio kodu yra naudojamas kompiuterių kietiems diskams apsaugoti. 3 Kanalai ir Šenono teorema 3.1 apibrėžimas. Diskretus be atminties kanalas - tai trejetas (A, B, Π), kur 1. A - aibė vadinama įėjimo abėcėle. Pvz.: A = {a 1,...,a s } 2. B - aibė vadinama išėjimo abecėle. Pvz.: B = {b 1,...,b t } p 11... p 1t 3. Π =..... - s t matrica, tenkinanti savybes: p s1... p st a) p ij 0, 1 i s, 1 i t b) t j=1 p ij = 1, 1 i s Π - vadinama tikimybine matrica. Pastaba. Kanalu siunčiame simbolius iš įėjimo abėcėlės A. Iš kanalo išėję simboliai priklauso išėjimo abėcėlei B. Dažniausiai A = B. Matrica Π interpretuojama taip: Siuntėją sutapatiname su atsitiktiniu dydžiu X, įgyjančiu reikšmes iš abėcėlės A, o gavėją su atsitiktiniu dydžiu Y, įgyjančiu reikšmes iš abėcėlės B. Tada matricos elementą p ij interpretuojame kaip tikimybę, kad jei į kanalą pasiųstas simbolis a i (t.y. jei X įgyja reikšmę a i ), tai iš kanalo išėjo simbolis b j (t.y. Y įgijo reikšmę b j ), t.y. p ij - tai sąlyginė tikimybė p ij = P(Y = b j X = a i ). Trumpiau ją žymėsime P(b j a i ) tikimybė, kad iš kanalo išeis b j, jei į kanalą įėjo a i. Apibrėžime be atminties reiškia, kad Π yra nekintamas dydis (nekinta laiko atžvilgiu). Diskretus reiškia, kad įėjimo ir išėjimo aibės yra diskrečios. Kanalą galima pavaizduoti grafiškai: 7

A B a 1 b 1 p i1 a 2 b 2 p i2.. a i p ij b j. p it. a s b t 3.2 apibrėžimas. Dvinaris simetrinis kanalas su iškraipymo tikimybe p - tai diskretus be atminties kanalas, kuriame A = B = {0, 1} ir P(1 0) = P(0 1) = p, P(0 0) = P(1 1) = 1 p, čia 0 < p < 1. 0 1 p p 0 1 p 1 p 1 3.3 apibrėžimas. q-naris simetrinis kanalas su iškraipymo tikimybe p (q 2, 0 < p < 1) - diskretus be atminties kanalas, kuriame A = B, A = q ir { 1 p, jei a = b; P(b a) = p, jei a b. q 1 1 p 0 0 1 1. p q 1 p q 1 q 1 q 1. 3.4 apibrėžimas. Dvinaris simetrinis trinantis kanalas su iškraipymo tikimybe p ir ištrynimo tikimybe r (0 < p < 1, 0 < r < 1) - diskretus be atminties kanalas, kuriame A = {0, 1}, B = {0, 1,?} ir P(0 0) = P(1 1) = 1 p r, P(1 0) = P(0 1) = p, P(? 0) = P(? 1) = r. 8

Čia klaustukas žymi, kad pasiųstas simbolis išsitrynė. Yra tik žinoma, kad toje vietoje buvo kažkoks simbolis, o kuris ar nulis, ar vienetas, neaišku. 1 p r 0 0 r p? p r 1 1 1 p r 3.5 apibrėžimas. Kanala vadinsime adityviu, jei A = B ir A - baigtinė Abelio grupė sudėties atžvilgiu, t.y. a, b, c A: a + b A a + b = b + a (a + b) + c = a + (b + c) 0 A : a + 0 = 0 + a = a ( a) : a + ( a) = 0 Paprastai laikysime, kad kanalas adityvus. 3.6 apibrėžimas. Tarkime, į kanala įeina vektorius x A n, o išeina vektorius y A n. Tada vektorių e = y x vadinsime klaidų vektoriumi. Klaidų padėtimis vadinsime vektoriaus e nenulinių koordinačių pozicijas. Prisiminkime, kad kodavimas vyksta pagal tokią schemą: M C C = C + E C, E, M šaltinis kodavimas kanalas dekodavimas gavėjas E - klaidų vektorius Norimą perduoti informaciją verčiame k ilgio vektoriais iš abėcėlės A simbolių. Kiekvieną tokį vektorių M užkoduojame, pridėdami papildomų simbolių gauname n ilgio užkoduotą vektorių C. Jį siunčiame kanalu, kur galimi iškraipymai. Iš kanalo išeina n ilgio vektorius C. Dekoduojant paprastai randami 3 dydžiai: klaidų vektorius E, pataisyti užkoduotas vektorius C ir pradinis pranešimas M. Taigi, norėdami perduoti k informacijos simbolių, iš tikro perduodame n simbolių. Santykį k/n vadiname kodo koeficientu. Kuo daugiau koduodami pridedame papildomų simbolių, t.y. kuo kodo koeficientas mažesnis, tuo labiau galime sumažinti klaidingo dekodavimo tikimybę, bet tuo pačiu tuo labiau apkrauname kanalą (reikia persiųsti daugiau simbolių). Taigi, norime sumažinti tą tikimybę, tuo pačiu išlaikydami kodo koeficientą pakankamai aukštą. 1948 m. Šenonas įrodė tokią teoremą: 3.7 teorema. (Šenono teorema) Kiekvienam diskrečiam be atminties kanalui egzistuoja tokia konstanta C, vadinama kanalo talpa, kad: 1. ǫ > 0 ir R < C egzistuoja tokios kodavimo ir dekodavimo taisyklės, kad kodo koeficientas k n R ir dekodavimo klaidos tikimybė yra mažesnė už ǫ; 9

2. Tegu R > C, tada ǫ > 0 toks, kad kokias bepaimtume kodavimo ir dekodavimo taisykles, kurių kodo koeficientas k R, dekodavimo klaidos tikimybė bus nemažesnė už ǫ. n Šenono teorema rodo, kad klaidingo dekodavimo tikimybę galime padaryti kiek norime mažą, tuo pačiu išlaikydami kodo koeficientą gana aukštą artimą kanalo talpai. Deja, šios teoremos įrodymas nėra konstruktyvus, jis neparodo, kaip sudaryti tuos gerus kodus. Juos gauti ir yra klaidas taisančių kodų teorijos tikslas. 4 Blokinių ir konvoliucinių kodų pristatymas ir palyginimas Klaidas taisančius kodus galima suskirstyti į dvi grupes: blokinius ir konvoliucinius (sąs ūkos). 4.1 Blokiniai kodai Informaciją skaidome į k ilgio blokus ir kiekvieną jų, nepriklausomai vieną nuo kito, užkoduojame n ilgio blokais: k simb.... informacija n simb. k simb....... koduota seka dekoduota seka 4.2 Konvoliuciniai kodai Turime informacijos srautą, kuriame bet kuriuo laiko momentu užkoduota informacija priklauso nuo k paskutinių informacijos simbolių: k simb. n simb. informacija koduota seka 4.3 Palyginimas Konvoliucinių kodų privalumai: 1. Greitas kodavimas ir dekodavimas, vykstantys vienu metu su informacijos siuntimu ir gavimu; 2. Nekyla problemų dėl sinchronizacijos (išskyrus pačią perdavimo pradžią); 3. Kodavimo ir dekodavimo schemos labai paprastos, tuo tarpu blokiniam kodui sunku rasti efektyvius dekodavimo algoritmus. 10

Konvoliucinių kodų tr ūkumai: 1. Mažesnės klaidų ištaisymo galimybės nei blokiniame kodavime; 2. Jų strukt ūra mažiau ištyrinėta, tuo tarpu blokinių kodų strukt ūra yra įvairesnė ir geriau išstudijuota, nes blokiniai kodai yra artimesni tradicinėms, gerai ištyrinėtoms matematinėms strukt ūroms. 4.4 Konvoliucinio kodo pavyzdys Kodavimas Tarkime turime begalinę dvinarę matricą G: 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 0 0 0 G = 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0............ Begalinį informacijos vektorių m užkoduojame daugindami iš matricos G. Pavyzdžiui, jei tai jis užkoduojamas vektoriumi m = (1 0 1 1 0 0...), c = m G = (1 1 0 1 1 1 1 0 0 1 0 0...). Tokį kodavimą paprasčiau galime realizuoti, naudodami registrus su poslinkiu. M ūsų pavyzdžio atveju gauti c galime naudodami tokį registrą: 1 0 2 Čia stačiakampis yra atmintis, užlaikanti įrašytą reikšmę vieną laiko momentą. Pradiniu laiko momentu jos reikšmė yra nulis. Į šią schemą rodyklės kryptimi įėjus vienam simboliui, išeina du. Pirmasis iš jų yra lygus įėjusiam (matome, kad kas tik įeina, tuoj viršutine atšaka ir išeina). Antrasis yra suma (moduliu 2) įėjusio simbolio ir iš atminties išėjusio simbolio, t.y. simbolio, įėjusio prieš tai. Taigi, antrasis yra paskutinio ir priešpaskutinio įėjusių simbolių suma. Be to, ėjęs simbolis nukeliauja ir į atmintį (vidurinė atšaka), iš kurios išeis kitu laiko momentu (įėjus kitam simboliui). Panagrinėkime, kaip iš m gauname c naudodami duotą schemą. Brėžiniuose parodoma, kokie simboliai išeina, priklausomai nuo to, kas įėjo ir kas buvo atminty. Matom, kad pradžioje įeina 1, atminty yra 0, todėl išeina 11. Tada įeina 0, atminty 1, išeina 01. Toliau kartojasi pirma situacija: įeina 1, atminty 0, išeina 11. Tada įeina 1, atminty 1, išeina 10. Tuomet vėl kartojasi: įeina 0, atminty 1, išeina 01. Tada įeina 0, atminty 0, išeina 00. Ir t.t. 11

1 0 1 0 1 0 1 1 1 0 1 1 0 0 0 0 Gauname: c = (}{{} 1 1 }{{} 0 1 }{{} 1 1 }{{} 1 0 }{{} 0 1 }{{} 0 0 Matome, kad naudodami registrą su poslinkiu, gavome lygiai tokį patį vektorių c, kaip ir daugindami iš matricos G. Kodėl taip yra? Matricos G nelyginiuose stulpeliuose yra vienetiniai (turintys vienetą vienoje iš pozicijų ir nulius visose kitose) vektoriai, o lyginiuose stulpeliuose yra lygiai po du vienetus (išskyrus antrą stulpelį), vadinasi jei m = (m 1, m 2, m 3,...), tai vektorius c, gautas sudauginus m su G, bus toks: kur k 0, o m 0 = 0. Kaip matėme, duotas registras su poslinkiu konstruoja b ūtent tok i vektorių c. B ūsenu diagrama...) { c2k 1 = m k ; c 2k = m k 1 + m k ;, Galima nubrėžti konvoliucinio kodo b ūsenų diagramą. Konvoliucinio kodo b ūsenavadinsime jo registro su poslinkiu atminties turinį. Tarkime, kodo b ūsena yraa, į schemą įeina koks nors simbolis b, išeina simboliai c ir d, b ūsena keičiasi į b. Tai žymėsime tokiu b ūdu: Tada duoto kodo b ūsenų diagrama b ūtų tokia: a b/ cd 0/ 00 b 0 1/ 11 0/ 01 1 1/ 10 Šita diagrama leidžia lengvai koduoti. Užkoduota seka atitinka kelią šiame grafe. 12

Dekodavimas B ūsenų diagramą išplečiame laike. Gauname: 00 00 00 00 0 0 0 0 0 01 01 01 01 11 11 11 11 10 10 10 10 1 1 1 1 1 Jei persiunčiant nepadaroma klaidų lengvai grafe galima atsekti kelią ir dekoduoti žodį, pradedant nuo nulinės b ūsenos ir einant briaunomis, kurios atitinka iš kanalogautą vektorių c. O kaip ištaisyti padarytas klaidas? Iš anksto pasirenkame m 1, ir imame m blokų iš eilės, lyginame su galimais keliais ir renkamės tą, kuris mažiausiai skiriasi. Imkime pavyzdį. Tegu c = (}{{} 1 1 1 }{{} 0 1 0 }{{} 1 1 1 }{{} 1 0 1 Tarkime, klaida padaryta antrojoje vektoriaus pozicijoje, t.y. }{{} 0 1 0 c = (1 0 0 1 1 1 1 0 0 1...) Tegu m = 2. Imkime pirmus m blokų, t.y. vektorių - u = (1 0 0 1), ir randame atstumą (t.y. besiskiriančių koordinačių skaičių) iki kiekvieno galimo vektoriaus, gauto iš b ūsenų diagramos (išplėstos laike). Iš b ūsenų diagramos matome, kad galimi 4 vektoriai (einame iš nulinės b ūsenos ir ži ūrime, kokie vektoriai galėjo b ūti gauti koduojant): (0 0 0 0) 2 (0 0 1 1) 2 (1 1 0 1) 1 (1 1 1 0) 3 Čia prie kiekvieno vektoriaus nurodytas jo atstumas iki u. Mažiausias atstumas yra trečiojo iš galimų vektorių, todėl juo keičiame u. Tada dekoduojam pirmąjį bloką, t.y. 11. Dekodavę gauname 1. Dabar kartojame viską su nauju u. Vėl imame m blokų: u = 0111. B ūsenų diagramoje esame antro laiko momento b ūsenoje1. Iš ten irgi yra keturi keliai, iš kurių renkamės artimiausią (šiuo atveju 0111) ir dekoduojame antrąjį bloką 01 į 0. Ir t.t. Taigi, vieną klaidą ištaisė. Dabar tarkime, kad yra dvi klaidos antroje ir ketvirtoje vektoriaus pozicijose, t.y. c = (1 0 0 0 1 1 1 0 0 1...)...) 13

Imame pirmąjį vektorių u = (1 0 0 0) ir randame atstumą iki kiekvieno galimo vektoriaus. Pagal b ūsenų diagramą galimi vektoriai bei atstumai nuo u iki kiekvieno iš jų yra: (0 0 0 0) 1 (0 0 1 1) 3 (1 1 0 1) 2 (1 1 1 0) 2 Mažiausias atstumas yra iki pirmojo iš galimų vektorių, todėl juo keičiame pirmąjį vektorių. Gautą pirmąjį bloką 00 dekoduojame 0. Toliau imame antrąjį vektorių u = (0 0 1 1), jis yra tarp galimų vektorių, todėl antrojo vektoriaus nekeičiame, antrą bloką 00 dekoduojame 0. Taip pat nekeičiame ir tolimesnių vektorių, dekuoduojame: c = (}{{} 1 0 0 }{{} 0 0 0 }{{} 1 1 1 }{{} 1 0 1 }{{} 0 1 0 Dekodavome klaidingai. Taigi, dviejų klaidų jau nebeištaisė. Toliau nagrinėsime tik blokinius kodus....) 5 Bendrosios savokos 5.1 apibrėžimas. Abėcėle vadinsime baigtinę netuščia aibę. Tarkime, turime abėcėlę A. Jos elementų skaičių paprastai žymėsime q. Jei q = 2, tai paprastai laikysime, kad A = {0, 1}. Tarkime 1 k n. Kaip įprasta, A n žymėsime aibę visų n ilgio vektorių, kurių koordinatės priklauso aibei A: A n = {(c 1,...,c n ) c i A i}. 5.2 apibrėžimas. Aibės A n poaibį C, sudaryta iš M 0 vektorių, vadinsime blokiniu kodu virš A arba tiesiog kodu. Vektorius, priklausančius kodui, vadinsime kodo žodžiais. Parametra n vadinsime kodo ilgiu, o M - kodo dydžiu. Tokį koda žymėsime (n, M). Jei q = 2, koda vadinsime dvinariu. Pavyzdys. A = {0, 1}, n = 5, C = {(0, 0, 0, 0, 0), (1, 1, 0, 0, 0), (0, 1,1, 1,1)} Laikome, kad informacija, kurią norime persiųsti nepatikimu ryšių kanalu, yra abėcėlės A simbolių seka. Ją skaidome į k ilgio informacijos vektorius m. Tarkime, C yra (n, M) kodas, kur M q k. Be to, tarkime, turime kokią nors injekciją c : A k C (tokia injekcija egzistuoja, nes M q k ). Naudodami šią injekciją, užkoduosime vektorius m A k, t.y. vektorių m A k užkoduosime vektoriumi x = c(m) C. Paprastai laikysime, kad c yra bijekcija, t.y. c(a k ) = C. Tokiu atveju egzistuos atvirkštinė funkcija c 1 : C A k, kurią galėsime naudoti dekodavimo metu. Matome, kad kodo dydis M turi b ūti kuo didesnis, kad juo b ūtų galima užkoduoti kuodaugiau informacijos vektorių (t.y. kuo M didesnis, tuo didesnį k, tenkinantį q k M, galime parinkti). Tačiau, kuo daugiau žodžių kode, tuo mažiau jie skiriasi vienas nuo kito ir tuo sunkiau nustatyti, kuris vektorius buvo pasiųstas, ir surasti klaidos pozicijas. Reikia rinktis tokį kodą, kurio ir dydis, ir atstumai tarp kodo žodžių yra kuo didesni. Tai prieštaraujančios viena kitai sąlygos. Parenkant kodus, ieškoma kompromiso tarp šių dviejų dalykų. 14

5.3 apibrėžimas. Jei x = (x 1,...,x n ),y = (y 1,...,y n ) A n, tai Hemingo atstumas tarp vektorių x ir y, žymimas d(x, y), yra koordinačių, kuriose jie skiriasi, skaičius: d(x, y) = {i : 1 i n, x i y i } = 1 i n, x i y i 1 Įsitikinkite patys, kad Hemingo atstumas yra metrika, t.y. x, y, z A n tenkina šias savybes: 1. d(x, y) 0. Be to, d(x, y) = 0 tada ir tik tada, kai x = y. 2. d(x, y) = d(y, x) 3. d(x, y) d(x, z) + d(z, y) (trikampio nelygybė) 5.4 apibrėžimas. Tarkime, kad abėcėlė A yra Abelio grupė sudėties atžvilgiu. Vektoriaus x A n Hemingo svoris, žymimas w(x), yra jo nenulinių koordinačių skaičius: Lengvai galime įsitikinti, kad: 1. w(x) = d(x, 0) 2. d(x, y) = w(x y) = w(y x) w(x) = {i : 1 i n, x i 0} 3. w(x + y) w(x) + w(y) (trikampio nelygybė) Taigi, visą informaciją, kurią norime išsiųsti, skaidome į k ilgio vektorius m A k, kiekvieną vektorių užkoduojame n ilgio kodo žodžiu x = c(m) C ir siunčiame į kanalą. Iš kanalo gauname iškraipytą vektorių y A n, kuris gali nebepriklausyti kodui C, t.y. y yra bet kuris vektorius iš aibės A n. Dekodavimo metu vektoriui y priskiriamas vektorius m A k. Dekodavimas paprastai vykdomas dviem etapais: pirmiausiai vektoriui y priskiriame kodo žodį x C, o tada pasinaudojame bijekcijos c atvirkštine funkcija c 1 : C A k, kad žodžiui x C priskirtume m A k. Pirmame etape naudojama funkcija f : A n C vadinama dekodavimo taisykle. Pavyzdys. Prisiminkime pakartojimo kodą R 3. Dekodavimas yra toks: kokių simbolių gautame žodyje daugiau, tokiu simboliu ir dekoduojame, pavyzdžiui, jei y = 101, tai jį dekoduojame 1, nes vektoriuje y yra du vienetai ir tik vienas nulis. Kitaip sakant, dekoduojame imdami artimiausią (matuojant Hemingo atstumu) kodo žodį, ir tada imdami informacijos vektorių, atitinkantį tą kodo žodį. Pvz, atstumas tarp 101 ir 000 yra du, tarp 101 ir 111 yra vienas, tai pasirenkame 111, nes jis arčiau 101, nei 000, ir dekoduojame 1, nes jis atitinka 111. Tarkime, ryšio kanalu gavome vektorių y A n. Koks kodo žodis x C buvo išsiųstas? Norėtųsi rasti tokį kodo žodį x, kurio išsiuntimo tikimybė yra didžiausia, žinant, kad gavome vektorių y. Dekodavimo taisyklė, kai iš kanalo gautą vektorių y dekoduojame kodo žodžiu x C, maksimizuojančiu tikimybę P(x y) (taip žymėsime sąlyginę tikimybę, kad į kanalą buvo išsiųstas x, jei žinome, kad iš kanalo gautas y), vadinama idealaus stebėtojo taisykle. T.y., dekoduojame tokiu kodo žodžiu x, kad P(x y) = max x C P(x y). Be abejo, šią dekodavimo taisyklę sunku naudoti praktikoje, nes nėra aišku, kaip tas tikimybes skaičiuoti. Įrodysime, kad esant išpildytoms tam tikroms sąlygoms, ši dekodavimo taisyklė sutampa su minimalaus atstumo dekodavimo taisykle: dekoduojame tuo kodo žodžiu, kuris yra artimiausias gautam vektoriui y, matuojant Hemingo atstumu, t.y. gavę y A n, jį dekoduojame tokiu kodo žodžiu x C, kad d(x, y) = min x C d(x, y). 15

5.5 teorema. Jei naudojame q-narį simetrinį kanala su simbolių iškraipymo tikimybe p < q 1, ir jei visi q kodo C žodžiai į kanala perduodami su vienodomis tikimybėmis, tai idealaus stebėtojo ir minimalaus atstumo dekodavimo taisyklės duoda ta patį rezultata. Įrodymas. Tarkime, x = (x 1,...,x n ) C, y = (y 1,...,y n ) A n, w = d(x, y). Teoremą įrodysime, jei parodysime, kad w yra minimalus tada ir tik tada, kai sąlyginė tikimybė P(x y) - maksimali. Pagal sąlyginių tikimybių savybes P(x y) = P(y x)p(x). Kadangi visi kodo C žodžiai į kanalą perduodami su vienodomis tikimybėmis, tai P(x) = 1, kur P(x) kodo žodžio x išsiuntimo į kanalą P(y) M tikimybė, o M kodo C dydis. Taigi, P(x y) = P(y x). Kadangi y - fiksuotas, tai P(x y) - maksimali MP(y) P(y x) - maksimali. Naudojamas kanalas yra be atminties, todėl kiekvieno išsiųsto simbolio gavimo tikimybė yra nepriklausoma nuo kitų simbolių tikimybių. Kadangi w = d(x, y), tai buvo padaryta lygiai w klaidų. Todėl P(y x) = Bet p < q 1 q, todėl p (1 p)(q 1) n i=1 p (1 p)(q 1) ( ) w ( ) w p P(y i x i ) = (1 p) n w = (1 p) n p. q 1 (1 p)(q 1) < 1. Iš tikro, q 1 < 1 p < (1 p)(q 1) = q 1 pq + p pq < q 1 p <. q Taigi, kuo w mažesnis, tuo P(y x) yra didesnė, nes p (1 p)(q 1) < 1. Ką ir reikėjo įrodyti. Pastaba. p < q 1 1 p > p - t.y. teoremos sąlygos reikalavimas ekvivalentus reikalavimui, kad q q 1 neklaidos tikimybė b ūtų didesnė už bet kokios klaidos tikimybę. Dekodavimą naudojant minimalaus atstumo dekodavimo taisyklę grafiškai galima pavaizduoti taip: x Čia didysis skritulys su taškais yra aibė visų vektorių iš A n, pajuodinti taškai priklauso kodui C A n. Iš kanalo gautas vektorius y gali b ūti bet kuris taškas. Paži ūrime, kuris kodo žodis (pajuodintas taškas) yra arčiausiai, juo ir dekoduojame. Pavyzdžiui, pasirinkime kurį nors kodo žodį x. Tarkime, artimiausias kitas kodo C žodis yra atstumu h nuo x. Tai reiškia, kad jei y yra nutolęs nuo x mažesniu atstumu, nei h/2, tai jis tikrai bus dekoduotas žodžiu x, nes šis kodo C žodis yra arčiausiai. Taigi, apie x galime apibrėžti spindulio h/2 skritulį, ir visi jam priklausantys taškai bus dekoduojami to skritulio centru kodo žodžiu x. 16

5.6 apibrėžimas. Tarkime, C yra (n, M) kodas ir M > 1 (kodas C sudarytas iš bent dviejų žodžių). Kodo C minimalus atstumas d yra mažiausias Hemingo atstumas tarp dviejų skirtingų kodo C žodžių, t.y. d = min x,y C, x =y d(x, y). (n, M) koda, kurio minimalus atstumas yra d, žymėsime (n, M, d). Tai jei apie kiekvieną kodo žodį apibrėšime spindulio d/2 skritulį, skritulyje esantys taškai bus dekoduojami skritulio centru. Tarkime, į kanalą pasiuntėme žodį x, ir kanale jame buvo padaryta t klaidų. Iš kanalo išėjo vektorius y, esantis atstumu t nuo x. Jei t < d/2, tai y priklausys žodžio x skrituliui, todėl dekoduosime žodžiu x, t.y. ištaisysime kanalo padarytas klaidas. Jei t > d/2, tai y gali atsidurti jau kito kodo žodžio skritulyje, ir tokiu atveju bus dekoduotas neteisingai. Jei t = d/2, tai y gali priklausyti dviems skrituliams (gali b ūti ant dviejų skritulių krašto), ir nežinosime, kurio rutulio centru dekoduoti. Jei y neatsiduria jokio kodo žodžio skritulyje, tai, jį dekoduodami artimiausiu kodo žodžiu, galime dekoduoti teisingai, o galime ir klaidingai. Taigi, jei t d/2, nesame garantuoti dėl dekodavimo teisingumo. Apibrėžimas. Jei, naudojant minimalaus atstumo dekodavimo taisyklę, dekoduojama visada teisingai, kai siųstame žodyje yra ne daugiau kaip t klaidų, tai koda C vadiname t klaidų taisančiu kodu. t klaidų taisantį koda vadiname tiksliai t klaidų taisančiu kodu, jei jis nėra t+1 klaida taisantis kodas. Teorema. Kodas C yra tiksliai [(d 1)/2] klaidų taisantis kodas, kur d yra kodo C minimalus atstumas, o [a] yra skaičiaus a sveikoji dalis, t.y. didžiausias sveikas skaičius, mažesnis arba lygus už a. Įrodymas. Kaip matėme, kodas C yra t klaidų taisantis kodas, jei t < d/2. Dėl to jis yra tiksliai t klaidų taisantis kodas, jei t yra didžiausias sveikas skaičius, mažesnis už d/2. Jei d yra lyginis, tai didžiausias sveikas skaičius, mažesnis už d/2, yra d/2 1 = (d 2)/2 = [(d 1)/2]. Jei d yra nelyginis, tai didžiausias sveikas skaičius, mažesnis už d/2, yra d/2 1/2 = (d 1)/2 = [(d 1)/2]. Abiem atvejais gauname pageidaujamą rezultatą. Todėl stengiamasi sudaryti tokius kodus, kurių minimalus atstumas d b ūtų kuo didesnis, kad kodas ištaisytų kuo daugiau klaidų. Kartais svarbu ne tik tai, kiek klaidų kodas ištaiso, bet ir kiek jų aptinka. Kadangi į kanalą siunčiame tik kodo žodžius, tai, jei iš kanalo išeina ne kodo žodis, reiškia, buvo padaryta klaidų. Todėl t klaidų aptinkantis kodas gali b ūti apibrėžiamas taip: Apibrėžimas. Koda C vadiname t klaidų aptinkančiu kodu, jei bet kuriame kodo žodyje įvykus ne daugiau kaip t klaidų, gautas vektorius nepriklauso kodui C. t klaidų aptinkantį koda vadiname tiksliai t klaidų aptinkančiu kodu, jei jis nėra t+1 klaida aptinkantis kodas. Jei įvyko d iškraipymų, tai gali b ūti, kad gavome kitą kodo žodį, todėl kodas C yra t klaidų aptinkantis kodas, jei t < d. Gauname tokį rezultatą: Teorema. Kodas C yra tiksliai d 1 klaida aptinkantis kodas, kur d yra kodo C minimalus atstumas. Taigi, jei norime sukonstruoti gerą kodą, tai stengiamės, kad ir jo dydis, ir minimalus atstumas b ūtų kuo didesni. Tai vienas kitam prieštaraujančios sąlygos, todėl ieškoma kompromiso. 17

6 Ekvivalent ūs kodai Kai užkoduojame pranešimą ir siunčiame kodo žodį kanalu be atminties, tai nėra skirtumo, kuria tvarka persiunčiame to kodo žodžio simbolius. Taigi, šiuo poži ūriu kodai, kurie skiriasi tik simbolių eilės tvarka, iš esmės nesiskiria. Tokius kodus vadinsime ekvivalenčiais. Kad galėtume duoti formalų ekvivalenčių kodų apibrėžimą, prisiminkime keitinio (perstatos) sąvoką. Tarkime, turime baigtinę aibę I = {1,..., n}. Abipusiškai vienareikšmį atvaizdį (bijekciją) σ : I I vadina keitiniu (arba perstata). Pavyzdžiui, jei n = 5, tai σ : I I, apibrėžta taip: σ(1) = 2, σ(2) = 3, σ(3) = 4, σ(4) = 5, σ(5) = 1, yra perstata. Perstata dažnai užrašoma tokiu pavidalu: σ = ( 1... n σ(1)... σ(n) Pavyzdžiui, paskutinio pavyzdžio perstata galėtų b ūti užrašyta taip: ( ) 1 2 3 4 5 σ =. 2 3 4 5 1 Perstatas galime naudoti vektorių koordinačių keitimui vietomis. Laikysime, kad I vektoriaus x indeksų aibė. Tada sukeičiame vektoriaus x koordinates taip, kaip liepia perstata σ, t.y. pirmą koordinatę perkeliame į σ(1) vietą, antrą į σ(2) vietą ir t.t. Gautą vektorių žymėsime σ(x). Pavyzdžiui, jei x = (x 1, x 2, x 3, x 4, x 5 ), tai panaudoję paskutinio pavyzdžio perstatą σ, gausime vektorių σ(x) = (x 5, x 1, x 2, x 3, x 4 ). Iš tiesų, pirmą koordinatę x 1 perkeliame į antrą poziciją ir t.t., o pirmoje vietoje atsiduria x 5, nes σ(5) = 1. Nesunku pastebėti, kad jei x = (x 1,...,x n ), tai ). σ(x) = (x σ 1 (1),..., x σ 1 (n)), (2) kur σ 1 atvirkštinė σ perstata, t.y. tokia perstata, kad σ 1 (σ(i)) = i i. Pavyzdžiui, paskutinio pavyzdžio perstatos σ atvirkštinė perstata yra tokia perstata: ( ) 1 2 3 4 5 σ 1 =. 5 1 2 3 4 Taigi, perstata σ : I I apibrėžia funkciją σ : A n A n, užduotą (2) lygybe. Ši funkcija tiesiog sukeičia vektoriaus koordinates vietomis. Jei C yra kodas, žymėsime σ(c) = {σ(x) : x C}, t.y. σ(c) bus kodas, gautas sukeitus visų kodo C žodžių koordinates pagal tą pačią perstatą σ. 6.1 apibrėžimas. Du ilgio n kodai C ir C vadinami ekvivalenčiais, jei egzistuoja tokia indeksų aibės {1,..., n} perstata σ, kad σ(c) = C. Nesunku parodyti, kad ekvivalenčių kodų ilgiai, dydžiai, minimal ūs atstumai, žodžių svorių pasiskirstymai sutampa (nes sukeitus vektoriaus koordinates vietomis, vektoriaus ilgis bei svoris išlieka tokie patys). Pavyzdys. Nustatykime, ar dvinariai kodai C = {1010, 1101, 0011, 1001} ir C = {1010, 1100, 0110, 1011} 18

yra ekvivalent ūs, ir jei yra, raskime tokią perstatąσ, kad C = σ(c). Yra sukurta įvairių taisyklių, padedančių rasti tokią perstatą arba leidžiančių parodyti, kad tokia perstata neegzistuoja. Pasinaudosime paprasčiausiomis iš jų. Visų pirma panagrinėkime abiejų kodų žodžius. Matome, kad abiejų kodų žodžių svorių pasiskirstymai sutampa: kodai turi po tris svorio 2 žodžius ir po vieną svorio 3 žodį. Jei nesutaptų, iškart galėtume tvirtinti, kad kodai neekvivalent ūs. Kadangi turi tik po vieną svorio 3 žodį, tai aišku, jog jei tokia perstata σ egzistuoja, tai jinai žodį 1101 atvaizduoja į 1011. Iš čia iškart gauname, kad jei σ egzistuoja, tai σ(3) = 2, nes nulis iš trečios žodžio 1101 pozicijos perkeliamas į antrą žodžio 1011 poziciją. Taigi, gavome šiek tiek informacijos apie σ. Toliau galime suskaičiuoti, kiek vienetų stovi pirmo kodo žodžių kiekvienoje pozicijoje, ir palyginti su antro kodo vienetų skaičiumi. Kad aiškiau matytųsi, užrašykime kodo žodžius stulpeliu: C = 1010 1101 0011 1001 ir C = 1010 1100 0110 1011 Perstatant kodo žodžių koordinates, šie stulpeliai yra perkeliami į kitą vietą, taigi, vienetų skaičius juose išlieka toks pat. Kodo C pirmame stulpelyje yra 3 vienetai, antrame 1, trečiame 2, ketvirtame 3. Kodo C atitinkamai 3,2,3,1. Vėlgi, matome, pasiskirstymas sutampa jei nesutaptų, kodai neb ūtų ekvivalent ūs. Matome, kad antras kodo C stulpelis, kuriame yra 1 vienetas, b ūtinai keliauja į ketvirtą poziciją (t.y. jei kodai ekvivalent ūs ir perstataσ egzistuoja, tai σ(2) = 4), ir trečias į antrą (tą mes jau matėme, palyginę kodo žodžių svorius). Taigi, jau žinome dvi perstatos σ reikšmes: σ(2) = 4 ir σ(3) = 2. Yra tik dvi perstatos su tokiomis reikšmėmis: σ = ( 1 2 3 4 1 4 2 3 ) ir σ =. ( 1 2 3 4 3 4 2 1 Patikriname jas ir gauname, kad jos abi tinka, t.y. abi jos kodo C koordinates sukeičia taip, kad gauname kodą C. Iš tikro, σ (C) = {1100, 1011, 0110, 1010} = C ir σ (C) = {0110, 1011, 1100, 1010} = C. ) Taigi, kodai ekvivalent ūs. II dalis Tiesiniai kodai 1 Kai kurių algebrinių strukt ūrų priminimas 1.1 K ūnas ir tiesinė erdvė Grupė (B, ) tai algebrinė strukt ūra, kuri tenkina savybes: asociatyvumo: (a b) c = a (b c) 19

egzistuoja neutralus elementas i B: a i = a a B, a B : a a = i Komutatyvumas: a b = b a. K ūnas(kartais vadinamas lauku) (A, +, ) tai algebrinė strukt ūra, kuri tenkina savybes: (A, +) komutatyvi grupė (A\{0}, ) grupė galioja distributyvumo dėsniai: a (b + c) = a b + a c, (a + b) c = a c + b c. Tegu A k ūnas,n 1 sveikasis skaičius. Aibė V A n vadinama tiesine erdve virš A, jei v, u V av + bu V a, b A. Tiesinės erdvės V vektorių rinkinys u 1,...,u s vadinamas tiesiškai nepriklausomu, jei (a 1 u 1 + + a s u s = 0, a i A i) (a 1 = = a s = 0) Tiesinės erdvės V tiesiškai nepriklausomų vektorių rinkinys u 1,...,u s vadinamas erdvės V baze, jei kiekvieną erdvės V vektorių galima išreikšti vektorių u 1,...,u s tiesine kombinacija, t.y. v V a 1,...,a s A : v = a 1 u 1 + + a s u s. Teorema. Tarkime, V A n yra tiesinė erdvė. Tada V turi bazę, sudaryta iš ne daugiau kaip n vektorių. Jei ji sudaryta iš s vektorių, tai: 1. Bet kokia s + 1 vektoriaus iš V aibė yra tiesiškai priklausoma. 2. Kiekviena V bazė yra sudaryta iš s vektorių. 3. Bet kurie s tiesiškai nepriklausomi V vektoriai sudaro V bazę. 4. Kiekvienas tiesinės erdvės V vektorius vienareikšmiškai išreiškiamas bazės vektorių tiesine kombinacija. Erdvės V dimensija, žymima dim V, yra bazės vektorių skaičius. 20

1.2 Baigtiniai k ūnai Šiame skyrelyje prisiminsime baigtinių k ūnų (dar vadinamų Galua k ūnais, angl. finite fields, Galois fields) pagrindines sąvokas, nes ateityje nagrinėsime kodus, apibrėžtus virš baigtinės abėcėlės, turinčios k ūno strukt ūrą. K ūną, turintį baigtinį skaičių elementų, vadinsime baigtiniu k ūnu. Baigtinį k ūną, turintįq elementų, žymėsime F q (kartais jis dar žymimas GF(q)). Sveikųjų skaičių moduliu p (p - pirminis skaičius) aibė sudaro baigtinį k ūną išp elementų F p = {0, 1, 2,..., p 1}, vadinamą pirminiu k ūnu. Jame operacijos atliekamos moduliu p. Pavyzdžiui, dvinariame k ūne F 2 = {0, 1} gauname, kad 1 + 1 = 0. Jei p nėra pirminis, sveikųjų skaičių moduliu p aibė nėra k ūnas. Baigtinis k ūnas išq elementų egzistuoja tada ir tik tada, kai q = p m, kur p pirminis, m 1. Visi baigtiniai k ūnai, turintysq elementų, yra izomorfiški, todėl galima laikyti, kad toks k ūnas yra vienintelis. Visi baigtiniai k ūnai yra komutatyv ūs, t.y. daugyba yra komutatyvi. Skaičius p yra k ūnof p m charakteristika, t.y. mažiausias toks sveikas skaičius s, kad 1 } + {{ + 1 } = s 0. Jei p yra k ūnok charakteristika, tai pβ = 0 visiems β K. Pavyzdžiui, 2β = 0 visiems β F 2. Be viso kito, tai reiškia, kad Pagal indukciją gauname (β + γ) p = β p + γ p β, γ F p m. (β + γ) pi = β pi + γ pi β, γ F p m i 1. K ūnas F p = {0, 1, 2,..., p 1} yra k ūno F p m poaibis. K ūnas F p m yra tiesinė erdvė virš F p, dim F p m = m. Jei β 0, β 1,,β m 1 yra erdvės F p m bazė virš F p, tai F p m = {a 0 β 0 + a 1 β 1 + + a m 1 β m 1 a i F p i}. Aibė F q = F q \ {0} yra ciklinė multiplikacinė grupė, t.y. α F q : F q = {1, α, α 2,, α q 2 }, α q 1 = 1. Toks α yra vadinamas primityviu k ūno F q elementu (jis neb ūtinai yra vienintelis). Ši baigtinio k ūno elementų išraiška leidžia lengvai dauginti ir dalinti: dauginant (dalinant) du ciklinės grupės elementus pakanka sudėti (atimti) jų laipsnių rodiklius (moduliu q 1). 21

Jei α F p m yra primityvus elementas, tai {1, α, α 2,, α m 1 } yra k ūnof p m bazė virš F p, todėl F p m = {a 0 + a 1 α + + a m 1 α m 1 a i F p i}. Ši baigtinio k ūno elementų išraiška leidžia lengvai sudėti ir atimti: sudedame (atimame) panariui koeficientus prie α laipsnių. Koeficientus sudėti (atimti) mokame, nes jie priklauso k ūnuif p. Praktikoje į elementą a 0 +a 1 α+ +a m 1 α m 1 patogu ži ūrėti kaip į vektorių (a 0, a 1,...,a m 1 ) F m p, ir veiksmus atlikti su vektoriais. Jei galėtume nesunkiai pereiti nuo vienos baigtinio k ūno elementų išraiškos prie kitos, tai galėtume elementus ir sudėti (atimti), ir dauginti (dalinti). Netrukus pamatysime, kaip tai padaryti. Bet prieš tai dar viena baigtinio k ūno elementų išraiška. Jei f(x) yra pirminis m-tojo laipsnio polinomas virš F p, tai F p m yra izomorfiškas faktoržiedžiui F p [x]/(f(x)) (prisiminkime, kad faktoržiedis F p [x]/(f(x)) yra polinomų virš F p dalybos iš f(x) liekanų aibė, kurioje veiksmai atliekami moduliu f(x)). Taigi, galime laikyti, kad ir veiksmai atliekami modf(x). F p m = {g(x) = g 0 + g 1 x + + g m 1 x m 1 g i F p i}, Visiems p pirminiams ir m 1 egzistuoja toks pirminis m-tojo laipsnio polinomas f(x) F p [x], kurio šaknis yra k ūno F p m primityvus elementas α, t.y. f(α) = 0. Toks polinomas vadinamas primityviu polinomu (jis neb ūtinai yra vienintelis). Primityvus polinomas f(x) leidžia susieti dvi baigtinio k ūnof p m elementų išraiškas, tiksliau, leidžia primityvaus elemento laipsnius α m, α m+1,..., α pm 2 išreikšti bazės 1, α, α 2, α 3,...,α m 1 vektorių tiesine kombinacija. Iš tikro, tegu f(x) = f 0 + f 1 x + + f m x m, f i F p i. Kadangi f(α) = 0, tai f 0 +f 1 α+ +f m α m = 0. Iš čia gauname, kad α m = 1 f m (f 0 +f 1 α+ +f m 1 α m 1 ) išreiškėme bazės vektorių tiesine kombinacija. Aukštesnius α laipsnius išreiškiame taip pat, pavyzdžiui, α m+1 = α m α, įstatome gautą α m išraišką ir t.t. Nors primityvių polinomų yra ne vienas ir visi jie gali b ūti naudojami veiksmams su baigtinio k ūno elementais, yra tam tikri standartiniai primityv ūs polinomai, kurie paprastai ir yra naudojami. 1 lentelėje pateikiame kelis jų pavyzdžius mažiems p ir m. 1.1 pavyzdys. Sudarykime k ūną F 8. Matome, kad p = 2, m = 3 (nes 8 = 2 3 ). Žinome, kad F 8 = {1, α, α 2,, α 6 }, α 7 = 1, kur α yra k ūnof 8 primityvus elementas. Tai leidžia dauginti k ūnof 8 elementus, pavyzdžiui, α 2 α 3 = α 5, α 3 α 6 = α 9 = α 7 α 2 = α 2 (kad α 9 = α 2, galėjome pasakyti iš karto, nes rodiklių skaičiavimai vyksta moduliu q 1, t.y. mod7). Be abejo, 0 α i = 0 i. Be to, žinome, kad {1, α, α 2 } yra k ūnof 8 bazė virš F 2, todėl F 8 = {a 0 + a 1 α + a 2 α 2 a i F 2 i} = {0, 1, α, 1 + α, α 2, 1 + α 2, α + α 2, 1 + α + α 2 }. Tai leidžia lengvai sudėti ir atimti, pavyzdžiui, (1 + α) + (α + α 2 ) = 1 + 2α + α 2 = 1 + α 2 (nes k ūnof 8 charakteristika yra p = 2, t.y. 1 + 1 = 2 = 0 ir 1 = 1). Kad galėtume pereiti nuo vienos išraiškos prie kitos, pasinaudosime primityviu polinomu iš 1 lentelės. Matome, kad, kai p = 2 ir m = 3, galime naudoti primityvų polinomą f(x) = x 3 + x + 1. Primityvus 22

p Primityv ūs polinomai p Primityv ūs polinomai 2 x + 1 3 x 4 + x 3 + 2 x 2 + x + 1 x 5 + x 4 + x 2 + 1 x 3 + x + 1 x 6 + x 5 + 2 x 4 + x + 1 5 x 2 + x + 2 x 5 + x 2 + 1 x 3 + x 2 + 2 x 6 + x + 1 x 4 + x 3 + x + 3 x 7 + x + 1 7 x 2 + x + 3 x 8 + x 4 + x 3 + x 2 + 1 x 3 + x 2 + x + 2 x 9 + x 4 + 1 11 x 2 + x + 7 x 10 + x 3 + 1 13 x 2 + x + 2 3 x + 1 17 x 2 + x + 10 x 2 + x + 2 19 x 2 + x + 2 x 3 + 2x 2 + 1 23 x 2 + 22x + 19 Lentelė 1: Primityv ūs polinomai elementas α yra jo šaknis, t.y. f(α) = 0, todėl α 3 +α+1 = 0. Iš čia α 3 = α 1 = α+1 išreiškėme bazės vektorių tiesine kombinacija. Tada α 4 = α 3 α = (α + 1)α = α 2 + α, α 5 = α 4 α = (α 2 + α)α = α 3 + α 2 = α + 1 + α 2, α 6 = α 5 α = (α + 1 + α 2 )α = α 2 + α + α 3 = α 2 + α + α + 1 = α 2 + 1. Žinome, kad α 7 = 1. Patikrinkime, ar iš tikrųjų: α 7 = α 6 α = (α 2 + 1)α = α 3 + α = α + 1 + α = 1. Taigi, dabar, atlikdami veiksmus su k ūnof 8 elementais, lengvai galime pereiti nuo vienos išraiškos prie kitos. Pavyzdžiui, α 4 + α 6 = (α 2 + α) + (α 2 + 1) = α + 1 = α 3. Kaip buvo pastebėta, į elementą a 0 + a 1 α + a 2 α 2 patogu ži ūrėti kaip į vektorių (a 0, a 1, a 2 ) F 3 2, ir veiksmus atlikti su vektoriais. Pavyzdžiui, elementą α 2 + α atitinka vektorius 011. Programuojant veiksmus su nedideliais baigtiniais k ūnais, patogu pasidaryti lentelę, kuri susietų primityvaus elemento α laipsnius su tokiais vektoriais. Tada du elementai bus sudauginami, sudedant jų laipsnių rodiklius, o norint sudėti du elementus, lentelėje bus surandami juos atitinkantys vektoriai, sudedami (moduliu p), o rezultatas vėl paverčiamas α laipsniu. Pavyzdžiui, α 4 + α 6 011 + 101 = 110 α 3. Reziumuodami 2 lentelėje pateikiame k ūnof 8 elementų išraiškas. Pirmame stulpelyje yra primityvaus elemento α laipsnis, antrame jo išraiška bazės {1, α, α 2 } vektorių tiesine kombinacija, ir trečiame atitinkamas vektorius iš F 3 2. 1.2 pavyzdys. Panagrinėkime k ūną F 9. Kadangi 9 = 3 2, tai p = 3 ir m = 2. Taigi, F 3 = {0, 1, 2} yra k ūno F 9 poaibis (2 + 2 = 4 = 1, 3 = 0, 1 = 2, 2 = 1). Taip pat žinome, kad F 9 = {1, α, α 2,, α 7 }, α 8 = 1, kur α yra k ūno F 9 primityvus elementas. Be to, {1, α} yra k ūno F 9 bazė virš F 3, todėl F 9 = {a 0 + a 1 α a i F 3 i} = {0, 1, 2, α, α + 1, α + 2, 2α, 2α + 1, 2α + 2}. 23

0 0 000 1 1 100 α α 010 α 2 α 2 001 α 3 1 + α 110 α 4 α + α 2 011 α 5 1 + α + α 2 111 α 6 1 + α 2 101 Lentelė 2: K ūnof 8 elementai 0 0 00 1 1 10 α α 01 α 2 1 + 2α 12 α 3 2 + 2α 22 α 4 2 20 α 5 2α 02 α 6 2 + α 21 α 7 1 + α 11 Lentelė 3: K ūnof 9 elementai Primityvus polinomas (iš 1 lentelės) b ūtųf(x) = x 2 +x+2, taigi, α 2 +α+2 = 0 ir α 2 = α 2 = 2α+1. Toliau α 3 = α 2 α = (2α + 1)α = 2α 2 + α = 2(2α + 1) + α = 4α + 2 + α = 2α + 2, α 4 = α 3 α = (2α + 2)α = 2α 2 + 2α = 2(2α + 1) + 2α = 4α + 2 + 2α = 2, α 5 = α 4 α = 2α, α 6 = α 5 α = 2α 2 = 2(2α + 1) = α + 2, α 7 = α 6 α = (α + 2)α = α 2 + 2α = 2α + 1 + 2α = α + 1. Dabar galime atlikti veiksmus su k ūnof 9 elementais. Pavyzdžiui, α 3 α 6 = α 9 = α, (α 2 ) 1 = α 2 = α 6 (nes rodiklių veiksmai atliekami moduliu 8), α 6 α 3 = (α+2) (2α+2) = α+2 2α 2 = α = 2α = α 5, ir pan. 3 lentelėje pateikiame k ūnof 9 elementus. 2 Tiesinio kodo apibrėžimas ir savybės 2.1 Tiesinio kodo apibrėžimas Nuo šiol abėcėlė bus A = F q, q = p m, p pirminis, m 1. Tegu n 1. Apibrėžimas. Koda C F n q vadinsime tiesiniu, jei C yra tiesinis erdvės Fn q dimensijos k ir ilgio n santykį k vadinsime tiesinio kodo koeficientu. n poerdvis. Tiesinio kodo 24

Jei tiesinio kodo C ilgis yra n, dimensija k, minimalus atstumas d, tai visas kodas žymimas C[n, k, d] arba tiesiog [n, k, d]. Jei minimalus atstumas nesvarbus arba nežinomas, žymima C[n, k] arba [n, k]. 2.1 pavyzdys. Imkime tiesinį erdvės F 3 2 poerdvį C, generuotą vektorių 110 ir 101. Tai reiškia, kad šie vektoriai sudaro poerdvio bazę, o visi kiti išreiškiami kaip jų tiesinės kombinacijos: 0 110 + 0 101 = 000, 1 110 + 0 101 = 110, 0 110 + 1 101 = 101, 1 110 + 1 101 = 011. Taigi, tiesinis kodas C = {000, 110, 101, 011}. Teorema. Tiesiniam kodui C[n, k, d] virš F q galioja tokios savybės: 1. C = q k. 2. Minimalus atstumas d yra lygus kodo C nenulinių vektorių minimaliam svoriui, t.y. d = min c C, c 0 w(c). Teoremos įrodymas paliekamas skaitytojui kaip pratimas. 2.2 Generuojanti matrica Tegu C[n, k] yra tiesinis kodas virš F q. Kad jis b ūtų visiškai apibrėžtas, neb ūtina išrašyti visus q k jo žodžius. Pakanka nurodyti jo bazę. Apibrėžimas. Tiesinio kodo C[n, k] virš F q generuojančia matrica vadiname k n matrica virš F q, kurios eilutės sudaro kodo C bazę. Pavyzdys. 2.1 pavyzdžio kodo generuojanti matrica yra ( ) 1 1 0 G =. 1 0 1 Pastaba. Generuojančios matricos eilučių skaičius lygus kodo dimensijai. Tiesinis kodas gali turėti kelias generuojančias matricas. Jei turime kokio nors tiesinio kodo C[n, k] virš F q generuojančią matricą G, tai visus kodo C žodžius ir tiktai juos gausime imdami generuojančios matricos G eilučių tiesines kombinacijas. Nesunku pastebėti, kad matricos G eilučių tiesinė kombinacija su koeficientais x 1, x 2,...,x k yra lygi vektoriaus-eilutės x = (x 1, x 2,...,x k ) ir matricos G sandaugai xg. Pavyzdys. (x 1, x 2 ) ( ) 1 1 0 = x 1 0 1 1 (110) + x 2 (101) = (x 1 + x 2, x 1, x 2 ). 25

Todėl C = {xg x F k q}. Atvaizdis x xg apibrėžia abipusiškai vienareikšmę erdvės F k q ir tiesinio kodo C žodžių atitiktį. Todėl šį atvaizdį galima interpretuoti kaip šaltinio informacijos, pateikiamos erdvės F k q žodžiais, kodavimą kodo C žodžiais. Taigi, kodavimas tiesiniu kodu visai paprastas ilgio k informacijos vektorių x virš F q dauginame iš kodo C generuojančios matricos G ir gauname užkoduotą žodį xg C. Pavyzdys. Kodavimui naudojame dvinarį tiesinį [4, 3] kodą, kurio generuojanti matrica yra 1 1 0 0 G = 0 1 1 1. 1 0 1 0 Tarkime, šaltinis perduoda tokį dvinarį srautą: 110 010 001 111 101 010 (čia patogumo dėlei srautą iškart suskaidome ilgio k = 3 vektoriais). Tada užkoduota seka, kurią siųsime kanalu, bus tokia: 1011 0111 1010 0001 0110 0111 Kadangi generuojančios matricos G eilutės yra tiesiškai nepriklausomos, tai jos rangas yra lygus eilučių skaičiui k. Taigi, iš matricos galime išrinkti tokius k stulpelių, iš kurių sudarytos kvadratinės matricos determinantas b ūtų nelygus 0. Tarkime,s 1, s 2,...,s k yra tokių stulpelių numeriai, išrikiuoti didėjančia tvarka. Tada 1) sukeisdami matricos G eilutes vietomis, 2) daugindami jas iš nelygių nuliui k ūnof q elementų, 3) pridėdami prie kai kurių G eilučių kitą G eilutę, padaugintą iš k ūnof q elemento, galime gauti tokio pavidalo matricą: 1 0 0 0 0 1 0 0 G = 0 0 1 0....... 0 0 0 1 (3) Čia vienetinės matricos stulpelius gauname b ūtents 1, s 2,..., s k pozicijose. Gautoji matrica taip pat yra kodo C generuojanti matrica, nes atliekant išvardintas matricų operacijas jos rangas nesumažėja ir jos eilutės išlieka kode C. Pavyzdys. ( ) 1 1 0 1 0 1 ( ) 1 1 0 0 1 1 ( ) 1 0 1 0 1 1 Čia pirmos matricos pirmą eilutę pridėjome prie antros, kad gautume pirmame stulpelyje pirmą vienetinės matricos stulpelį (žr. antrą matricą). Tada antrą antros matricos eilutę pridėjome prie pirmos, kad gautume antrame stulpelyje antrą vienetinės matricos stulpelį (žr. trečią matricą). Taigi, vienetinę matricą gauname pirmame ir antrame stulpeliuose. 26

Teiginys. Du tiesiniai [n, k] kodai virš F q yra lyg ūs tada ir tik tada, kai jų generuojančias matricas galima suvesti į ta pačia (3) lygybės pavidalo matrica su vienetinės matricos stulpeliais tose pačiose pozicijose s 1,...,s k. Įrodykite šį teiginį savarankiškai. Tai b ūdas patikrinti, ar, esant duotoms dviems generuojančioms matricoms, jos generuoja tą patį kodą ar ne. Užtenka pasirinkti s 1,...,s k, suvesti matricas į (3) lygybės pavidalą ir patikrinti, ar gauname tą pačią matricą. Pavyzdys. Tegu G = ( ) 1 0 1 1 1 0 ir G = ( ) 1 1 0. 0 1 1 Na, matrica G jau turi vienetinę matricą antrame ir trečiame stulpeliuose, užtenka tik sukeisti eilutes: ( ) 1 1 0 G. 1 0 1 Pabandykime ir matricos G antrame ir trečiame stulpeliuose gauti vienetinę matricą. Tam pridėkime pirmą G eilutę prie antros: ( ) 1 1 0 G =. 1 0 1 Gavome tą pačią matricą. Taigi, matricos G ir G generuoja tą patį tiesinį kodą. Apibrėžimas. Matrica vadinsime standartinio pavidalo matrica. 1 0 0 0 1 0...... 0 0 1 Tai k n matrica (k n), kurios pirmuose k stulpelių stovi vienetinė matrica, o likusi matricos dalis yra bet kokia. Standartinio pavidalo matricą paprastai žymėsime taip: G = (I A), čia I vienetinė k k matrica, A kažkokia k (n k) matrica. Teorema. Bet koks tiesinis kodas yra ekvivalentus tiesiniam kodui, turinčiam standartinio pavidalo generuojančia matrica. Įrodymas. Kaip matėme, bet kurią generuojančią matricą galime suvesti į (3) lygybės pavidalą. Paskui sukeičiame gautos matricos stulpelius taip, kad kiekvienam i s i -tasis stulpelis atsidurtų i-tojoje pozicijoje, kad gautume standartinio pavidalo matricą. Gauta standartinio pavidalo matrica jau galb ūt nebebus pradinio kodo generuojanti matrica, bet jinai bus ekvivalentaus kodo generuojanti matrica, nes jinai generuos kodą, kuris nuo pradinio skirsis tik koordinačių perstata. Ši teorema tvirtina, kad paprastai užtenka nagrinėti kodus, turinčius standartinio pavidalo generuojančią matricą, nes visi kiti kodai yra jiems ekvivalent ūs. 27