Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

Klaidas taisani kod teorija

Paskait konspektai
Gintaras Skersys
VU MIF
2005 m. ruduo
Dkoju Justui Kranauskui ir Andriui Unguriui u pradinio konspekt varianto surinkim.
I dalis
Pagrindins svokos
1 vadas
Panagrinkime toki schem. Kakok praneim M norime kakam perduoti. Perduodant praneim,
galimas jo ikraipymas. Tai galima pavaizduoti grafikai itaip:
M kanalas M

(galbt = M)
Praneimas M perduodamas nepatikimu ryio kanalu, t.y. kanale j gali ikraipyti triukmas. I kanalo
ijs praneimas M

gali skirtis nuo M. K daryti, kad ikraipymo tikimyb bt kuo maesn?


Keli kanal pavyzdiai:
1. Telefono linija (informacija gali bti ikraipyta dl triukmo ir t.t.).
2. Kosminis zondas siunia Marso nuotraukas em.
3. Lsteli dalijimasis motinins lstels DNR perduoda informacij dukterins lstels DNR (dl
radiacijos ir kt. poveikio gali mutuoti).
4. Informacijos laikmena, pavyzdiui, kietas diskas informacija uraoma, o po kurio laiko nuskai-
toma.
Paskutinis pavyzdys rodo, kad kanalas nebtinai reikia, kad informacija perkeliama i vienos vietos
kit. Mes uraome fail disk ir j nuskaitome paprastai toje paioje vietoje, bet skirtingu laiku. O per
t laik jis galjo bti ikraipytas.
1
Visi itie ryio kanalai yra nepatikimi, nes gali ikraipyti
1
informacij. Nortsi turti tok ryio
kanal, kuriame informacijos ikraipymo tikimyb bt lygi nuliui, arba bent jau tokia artima nuliui, kad
praktikoje j galtume laikyti lygia nuliui. K daryti?
Fizinis sprendimas bt bandyti pagerinti kanalo fizines charakteristikas, taiau tada iauga perdavimo
katai.
Kodavimo teorijos silomas sprendimas priimame kanal tok, koks jis yra, bet, perduodami juo
informacij, naudojame tam tikrus metodus, padedanius aptikti ir itaisyti kanale padarytas klaidas. Tam
informacija prie siuniant kanal yra koduojama, o ijusi i kanalo dekoduojama:
altinis kodavimas kanalas dekodavimas
gavjas
triukmas
M C C

Kodavimo metu prie pradinio praneimo M prijungiama papildoma informacija, leisianti aptikti ir
itaisyti tam tikr skaii kanale padaryt klaid. Gaunamas ukoduotas praneimas C, kuris yra didesns
apimties nei M. Praneimas C siuniamas ryio kanalu, kur galbt yra kakiek ikraipomas. Dekodavimo
metu i kanalo gautame praneime C

, naudojantis kodavimo metu pridta informacija, yra itaisomos


klaidos ir gaunamas pradinis praneimas M

. Paprastai, naudojant toki sistem, tikimyb, kad M

skirsis
nuo M, ymiai sumaja, utat iauga informacijos kiekis, siuniamas kanalu.
Taigi, fizikai didinant kanalo patikimum, jo kaina iauga, o naudojant kodavim, vieninteliai katai
yra papildomi skaiiavimai koduojant ir dekoduojant bei didesnis kanalo apkrovimas.
Informacijos teorija nagrinja toki sistem teorines ribas ir galimybes.
Klaidas taisani kod teorija (trumpiau dar kartais vadinama kodavimo teorija), kurios pradmenys ir
bus pateikti iame kurse, kuria praktinius kodavimo ir dekodavimo bdus.
2 Paprasti klaidas aptinkani ir taisani kod pavyzdiai
K galima pridti prie pradinio praneimo, kad bt galima aptikti ir itaisyti kanalo padarytas klaidas?
iame skyriuje pateiksime kelis paprastus pavyzdius. Tarkime, pradinis praneimas M yra dvinaris
vektorius (0 ir 1 seka).
2.1 Pakartojimo kodas R
n
Tarkime, n 1 sveikasis skaiius. Paprasiausias kodavimo bdas - pakartoti kiekvien siuniam
enkl (0 arba 1) n kart.
Pavyzdys. n = 3, M = (1 0 1 1) pradinis praneimas;
C = (1 1 1 0 0 0 1 1 1 1 1 1) siuniamas praneimas;
C

= (1 0 1 0 0 1 0 1 0 1 1 1) gautas praneimas (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 isisto vektori. Jei kuri nors klaid vektoriaus koordinat nelygi nuliui, reikia, toje pozicijoje vyko
klaida; jei lygi nuliui klaidos ten nra. ia (mod 2) reikia, kad skaiiavimas vyksta moduliu 2, t.y.,
1
ia turima omenyje, kad ikraipymai vyksta ne dl kieno nors piktos valios, o dl gamtini slyg, technikos netobulumo
ir pan. atsiradusio kanalo triukmo. Piktavalius ikraipymus nagrinja kriptografija.
2
skirtumo C

C koordinats dalinamos i 2 ir imama liekana. Pastebsime, kad, skaiiuojant moduliu 2,


-1=1 ir 2=0.
Dekoduodami enkl sek iskaidome blokus po n = 3 simbolius. Kiekvien blok keiiame enklu,
kuris daniausiai kartojasi tame bloke.
M

= (1 0 0 1) - dekoduotas praneimas (M

= M).
Bendru atveju, kiekviename bloke galime itaisyti
_
n1
2
_
klaid, kur x yra skaiiaus x sveikoji dalis
(didiausias sveikasis skaiius, maesnis u x). Pavyzdiui, kai n = 3, kiekviename bloke galime itaisyti
_
31
2
_
= 1 = 1 klaid, o kai n = 4, tai irgi
_
41
2
_
= 1.5 = 1 klaid (jei vykt dvi klaidos, nuli
ir vienet gautume po lygiai, todl negaltume pasakyti, ar ukoduotas nulis, ar vienetas). Tai reikia,
kad naudodami pavyzdyje nurodyt dekodavimo procedr mes tikrai galsime itaisyti visas padarytas
klaidas, jei j skaiius nevirija
_
n1
2
_
. Jei is skaiius virytas, tai galime dekoduoti klaidingai (bet galime
ir teisingai).
is kodas yra n 1 klaid aptinkantis kodas. I tikro, jei padaroma n 1 ar maiau klaid, i kanalo
gausime blok, kuriame ne visi simboliai bus vienodi, i ko ir nusprsime, kad buvo klaid. Bet jei klaid
buvo n, tai gausime blok, kur vl visi simboliai bus vienodi, ir negalsime nusprsti, ar klaid buvo.
Kodo koeficientu vadinsime pradinio ir persiuniamo praneim ilgi santyk. Jis parodo, kuri kanal
pasist simboli dalis yra naudinga informacija, o kuri tik pridta klaid aptikimui ir itaisymui. Kuo jis
didesnis, tuo geriau, nes tuo daugiau naudingos informacijos yra siuniamame praneime.
Pakartojimo kodo R
n
koeficientas yra maas, tik
1
n
(i n kanalu persist simboli tik vienas yra
pradinio praneimo simbolis). Utat klaid jis itaiso daug beveik pus simboli gali bti klaidingi,
vistiek kodas dekoduos teisingai.
2.2 Kontrolinio simbolio kodas (lygini svori kodas)
is kodas skirtas ne itaisyti, o kuo greiiau ir paprasiau surasti perdavimo klaid.
Pradin praneim M = (m
1
, m
2
, . . . , m
k
) ukoduojame vektoriumi C = (m
1
, . . . , m
k
, m
k+1
), kur
kontrolinis simbolis m
k+1
priraomas taip, kad vektoriuje C bt lyginis vienet skaiius. Nesunku pa-
stebti, kad m
k+1
tenkina toki formul:
m
k+1
=
k

i=1
m
i
(mod 2) =
_
0, jei vienet skaiius vektoriuje M lyginis;
1, jei vienet skaiius vektoriuje M nelyginis.
Pavyzdys. Jei M = (1 0 1 1 ), tai C = (1 0 1 1 1).
Vektorius C turi tenkinti lygyb:
k+1

i=1
m
i
0 (mod 2)
Dekodavimas:
patikriname gautame kode vienet skaii, jei vienet skaiius lyginis, tai padarome ivad, kad klaid
nra, jei nelyginis - yra. is kodas klaid neitaiso, jis tik aptinka jas, jei j skaiius - nelyginis.
Informacijos perdavimo lygis yra labai auktas
k
k+1
= 1
1
k+1
bet kodas labai silpnas, nes neitaiso
klaid.
3
2.3 Knyg numeracijos sistema ISBN (International Standard Book Numbering)
Kiekviena ileista knyga ukoduojama devyniais deimtainiais skaitmenimis a
1
, . . . , a
9
. is kodas aptinka
daniausias renkant skaiius pasitaikanias klaidas:
1. vietoje vieno simbolio vedamas kitas;
2. du gretimi simboliai sukeiiami vietomis.
Kontrolinis simbolis a
10
pridedamas pagal taisykl:
a
10

9

i=1
ia
i
(mod 11) (jei gauname a
10
= 10, tai uraome X) (1)
Pavyzdys. ISBN 1 56592 127 5. Daugiau pavyzdi rasite pavart bet kokias knygas.
2.1 teiginys. (1) lygyb nebegalioja, jei padaroma viena klaida arba transpozicija (greta stovini sim-
boli sukeitimas vietomis). Jei padaromos dvi klaidos, (1) lygyb gali ilikti teisinga.
Uduotis. rodyti teigin.
Uduotis. Paimkite bet kuri knyg ir patikrinkite, ar tikrai jos ISBN tenkina (1) lygyb.
2.4 Asmens kodas
Lietuvos gyventoj asmens kodo struktra:
L
..
Lytis
Y
1
Y
2
M
1
M
2
D
1
D
2
. .
Gimimo data
X
1
X
2
X
3
. .
Asmens eils nr.
K
..
Kontrolinis simbolis
L gali gyti reikm nuo 1 iki 6:
1. vyras gims XIXa.
2. moteris gimusi XIXa.
3. vyras gims XXa.
4. moteris gimusi XXa.
5. vyras gims XXIa.
6. moteris gimusi XXIa.
Kontrolinis skaiius K apskaiiuojamas 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 skaiiuojame 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.
Uduotis. Patikrinkite, ar tikrai js amens kodo kontrolinis skaiius tenkina toki lygyb.
4
2.5 Kodas [t
2
+ 2t, t
2
]
Grkime vl prie bit sekos. Tarkime turime bit sek, kuri reikia perduoti. J skaidome t
2
ilgio
vektorius. Suraome lentel t t. Tada ukoduojame: kiekvienai eilutei ir kiekvienam stulpeliui, prira-
ome papildom simbol tokiu bdu, kad vienet skaiius kiekvienoje eilutje ir kiekviename stulpelyje
pasidaryt lyginis. Gaut lentel uraome 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
lygis
t
2
t
2
+2t
.
Dekodavimo algoritmas:
C

suraome i lentel ir patikrinam vienet skaii. Jei padaryta viena klaida, tame stulpelyje ir
eilutje, kur padaryta klaida, vienet skaiius yra nelyginis, taip nustatoma kur padaryta klaida.
Pavyzdys. Jei klaida buvo antroj pozicijoj, pirmoje eilutje ir antrame stulpelyje vienet skaiius bus
nelyginis:
1 0 0
0 1 1
1 0

Jei padarytos dvi klaidos, tai dekoduojant tokiu bdu arba dekoduojama neteisingai arba dekodavimas
nra vienareikmis.
Uduotis. rodyti paskutins pastraipos teigin.
Uduotis. Nustatyti, kiek klaid toks kodas aptinka.
2.6 [7,4] Hemingo (Hamming) kodas
m = (m
1
, m
2
, m
3
, m
4
) ukoduojame taip, kad vienet skaiius visuose apskritimuose bt lyginis.
m
1
m
2
m
3
m
4
c
5
c
6
c
7
5
C = (m
1
, m
2
, m
3
, m
4
, C
5
, C
6
, C
7
)
Pavyzdys. m = (1, 0, 0, 0)
1 0
0
0
1
0 1
C = (1, 0, 0, 0, 1, 0, 1)
Dekodavimas:
Tarkime, padaryta viena klaida. Tarkime, klaidinga eta pozicija, t.y. C
6
= 1. Matome, kad tokiu
atveju vienet skaiius nelyginis tik viename apskritime (deiniajame), todl nusprsime, kad klaida pa-
daryta btent toje vietoje, kuri eina deinj apskritim, bet neeina kitus apskritimus. Tokia vieta tra
viena, todl klaid aptinkame.
Tarkime, kad padaryta klaida m
2
= 1. Tada vienet skaiius bus nelyginis dviejuose skrituliuose
(virutiniame ir deiniajame), todl nusprsime, kad klaida vyko toje vietoje, kuri priklauso tiems dviems
skrituliams ir nepriklauso treiajam. Tokia vieta tra viena, todl klaid galsim rasti ir itaisyti.
Taip pat klaid galsim itaisyti, 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.
Uduotis. rodyti teigin.
Informacijos perdavimo lygis
4
7
.
Btent is kodas kartu su kontrolinio simbolio kodu yra naudojamas kompiuteri kietiems diskams
apsaugoti.
3 Kanalai ir enono teorema
3.1 apibrimas. Diskretus be atminties kanalas - tai trejetas (A, B, ), kur
1. A - aib vadinama jimo abcle. Pvz.: A = {a
1
, . . . , a
s
}
2. B - aib vadinama ijimo abecle. Pvz.: B = {b
1
, . . . , b
t
}
6
3. =
_
_
_
p
11
. . . p
1t
.
.
.
.
.
.
.
.
.
p
s1
. . . p
st
_
_
_
- s t matrica, tenkinanti savybes:
a) p
ij
0, 1 i s, 1 j t
b)

t
j=1
p
ij
= 1, 1 i s
- vadinama tikimybine matrica.
Pastaba. Kanalu siuniame simbolius i jimo abcls A. I kanalo ij simboliai priklauso ijimo
abclei B. Daniausiai A = B. Matrica interpretuojama taip:
Siuntj sutapatiname su atsitiktiniu dydiu X, gyjaniu reikmes i abcls A, o gavj su atsi-
tiktiniu dydiu Y , gyjaniu reikmes i abcls B. Tada matricos element p
ij
interpretuojame kaip
tikimyb, kad jei kanal pasistas simbolis a
i
(t.y. jei X gyja reikm a
i
), tai i kanalo ijo simbolis b
j
(t.y. Y gijo reikm b
j
), t.y. p
ij
- tai slygin tikimyb p
ij
= P(Y = b
j
|X = a
i
). Trumpiau j ymsime
P(b
j
|a
i
) tikimyb, kad i kanalo ieis b
j
, jei kanal jo a
i
.
Apibrime be atminties reikia, kad yra nekintamas dydis (nekinta laiko atvilgiu). Diskretus
reikia, kad jimo ir ijimo aibs yra diskreios.
Kanal galima pavaizduoti grafikai:
A B


.
.
.
.
.
.

.
.
.
.
.
.

a
1 b
1
a
2 b
2
a
i
b
j
a
s b
t
p
i1
p
i2
p
ij
p
it
3.2 apibrimas. Dvinaris simetrinis kanalas su ikraipymo tikimybe p - tai diskretus be atminties kana-
las, 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 0
1 1
1 p
p
p
1 p
7
3.3 apibrimas. q-naris simetrinis kanalas su ikraipymo tikimybe p (q 2, 0 < p < 1) - diskretus be
atminties kanalas, kuriame A = B, |A| = q ir
P(b|a) =
_
1 p , jei a = b;
p
q1
, jei a = b.


.
.
.
.
.
.

0 0
1 1
q 1 q 1
1 p
p
q1
p
q1
3.4 apibrimas. Dvinaris simetrinis trinantis kanalas su ikraipymo tikimybe p ir itrynimo 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.
ia klaustukas ymi, kad pasistas simbolis isitryn. Yra tik inoma, kad toje vietoje buvo kakoks
simbolis, o kuris ar nulis, ar vienetas, neaiku.


0 0
?
1 1
1 p r
r
p
p
r
1 p r
3.5 apibrimas. Kanal vadinsime adityviu, jei A = B ir A - baigtin Abelio grup sudties atvilgiu,
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 apibrimas. Tarkime, kanal eina vektorius x A
n
, o ieina vektorius y A
n
. Tada vektori
e = y x vadinsime klaid vektoriumi. Klaid padtimis vadinsime vektoriaus e nenulini koordinai
pozicijas.
8
Prisiminkime, kad kodavimas vyksta pagal toki schem:
altinis kodavimas kanalas dekodavimas
gavjas
E - klaid vektorius
M C C

= C + E
C, E, M
Norim perduoti informacij veriame k ilgio vektoriais i abcls A simboli. Kiekvien tok vek-
tori M ukoduojame, priddami papildom simboli gauname n ilgio ukoduot vektori C. J
siuniame kanalu, kur galimi ikraipymai. I kanalo ieina n ilgio vektorius C

. Dekoduojant paprastai
randami 3 dydiai: klaid vektorius E, pataisyti ukoduotas vektorius C ir pradinis praneimas M.
Taigi, nordami perduoti k informacijos simboli, i tikro perduodame n simboli. Santyk k/n va-
diname kodo koeficientu. Kuo daugiau koduodami pridedame papildom simboli, t.y. kuo kodo koefi-
cientas maesnis, tuo labiau galime sumainti klaidingo dekodavimo tikimyb, bet tuo paiu tuo labiau
apkrauname kanal (reikia persisti daugiau simboli). Taigi, norime sumainti t tikimyb, tuo paiu
ilaikydami kodo koeficient pakankamai aukt. 1948 m. enonas rod toki teorem:
3.7 teorema. (enono teorema) Kiekvienam diskreiam be atminties kanalui egzistuoja tokia konstanta
C, vadinama kanalo talpa, kad:
1. > 0 ir R < C egzistuoja tokios kodavimo ir dekodavimo taisykls, kad kodo koeficientas
k
n
R ir dekodavimo klaidos tikimyb yra maesn u ;
2. Tegu R > C, tada > 0 toks, kad kokias bepaimtume kodavimo ir dekodavimo taisykles, kuri
kodo koeficientas
k
n
R, dekodavimo klaidos tikimyb bus nemaesn u .
enono teorema rodo, kad klaidingo dekodavimo tikimyb galime padaryti kiek norime ma, tuo
paiu ilaikydami kodo koeficient gana aukt artim kanalo talpai.
Deja, ios teoremos rodymas nra konstruktyvus, jis neparodo, kaip sudaryti tuos gerus kodus. Juos
gauti ir yra klaidas taisani kod teorijos tikslas.
4 Blokini ir konvoliucini kod pristatymas ir palyginimas
Klaidas taisanius kodus galima suskirstyti dvi grupes: blokinius ir konvoliucinius (sskos).
4.1 Blokiniai kodai
Informacij skaidome k ilgio blokus ir kiekvien j, nepriklausomai vien nuo kito, ukoduojame n ilgio
blokais:
informacija
koduota seka
dekoduota seka
k simb.
n simb.
k simb.
. . .
. . .
. . .
`
`
`

`
`
`
`

>
>
>
>
>.
9
4.2 Konvoliuciniai kodai
Turime informacijos sraut, kuriame bet kuriuo laiko momentu ukoduota informacija priklauso nuo k
paskutini informacijos simboli:
`
`

informacija
koduota seka
k simb.
n simb.
4.3 Palyginimas
Konvoliucini kod privalumai:
1. Greitas kodavimas ir dekodavimas, vykstantys vienu metu su informacijos siuntimu ir gavimu;
2. Nekyla problem dl sinchronizacijos (iskyrus pai perdavimo pradi);
3. Kodavimo ir dekodavimo schemos labai paprastos, tuo tarpu blokiniamkodui sunku rasti efektyvius
dekodavimo algoritmus.
Konvoliucini kod trkumai:
1. Maesns klaid itaisymo galimybs nei blokiniame kodavime;
2. J struktra maiau ityrinta, tuo tarpu blokini kod struktra yra vairesn ir geriau istudijuota,
nes blokiniai kodai yra artimesni tradicinms, gerai ityrintoms matematinms struktroms.
4.4 Konvoliucinio kodo pavyzdys
Kodavimas
Tarkime turime begalin dvinar matric G:
G =
_
_
_
_
_
_
_
1 1 0 1 0 0 0 0 0
0 0 1 1 0 1 0 0 0
0 0 0 0 1 1 0 1 0
0 0 0 0 0 0 1 1 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
_
_
_
_
_
_
_
Begalin informacijos vektori m ukoduojame daugindami i matricos G. Pavyzdiui, jei
m = (1 0 1 1 0 0 . . .),
tai jis ukoduojamas vektoriumi
c = m G = (1 1 0 1 1 1 1 0 0 1 0 0 . . .).
Tok kodavim paprasiau galime realizuoti, naudodami registrus su poslinkiu. Ms pavyzdio atveju
gauti c galime naudodami tok registr:
10
0
1
2

ia staiakampis yra atmintis, ulaikanti rayt reikm vien laiko moment. Pradiniu laiko mo-
mentu jos reikm yra nulis.
i schem rodykls kryptimi jus vienam simboliui, ieina du. Pirmasis i j yra lygus jusiam
(matome, kad kas tik eina, tuoj virutine ataka ir ieina). Antrasis yra suma (moduliu 2) jusio simbolio
ir i atminties ijusio simbolio, t.y. simbolio, jusio prie tai. Taigi, antrasis yra paskutinio ir priepas-
kutinio jusi simboli suma. Be to, js simbolis nukeliauja ir atmint (vidurin ataka), i kurios ieis
kitu laiko momentu (jus kitam simboliui).
Panagrinkime, kaip i m gauname c naudodami duot schem. Briniuose parodoma, kokie simbo-
liai ieina, priklausomai nuo to, kas jo ir kas buvo atminty. Matom, kad pradioje eina 1, atminty yra 0,
todl ieina 11. Tada eina 0, atminty 1, ieina 01. Toliau kartojasi pirma situacija: eina 1, atminty
0, ieina 11. Tada eina 1, atminty 1, ieina 10. Tuomet vl kartojasi: eina 0, atminty 1, ieina 01. Tada
eina 0, atminty 0, ieina 00. Ir t.t.
0 1
1
1

1 0
0
1

1 1
1
0

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. Kodl taip yra?
Matricos G nelyginiuose stulpeliuose yra vienetiniai (turintys vienet vienoje i pozicij ir nulius vi-
sose kitose) vektoriai, o lyginiuose stulpeliuose yra lygiai po du vienetus (iskyrus antr stulpel), vadinasi
jei m = (m
1
, m
2
, m
3
, . . .), tai vektorius c, gautas sudauginus m su G, bus toks:
_
c
2k1
= m
k
;
c
2k
= m
k1
+ m
k
;
,
kur k 0, o m
0
= 0.
Kaip matme, duotas registras su poslinkiu konstruoja btent tok vektori c.
Bsen diagrama
Galima nubrti konvoliucinio kodo bsen diagram. Konvoliucinio kodo bsena vadinsime jo registro
su poslinkiu atminties turin.
11
Tarkime, kodo bsena yra a, schem eina koks nors simbolis b, ieina simboliai c ir d, bsena keiiasi
b. Tai ymsime tokiu bdu:
a
b
b/
cd
Tada duoto kodo bsen diagrama bt tokia:
0
1
0/
00
1/
10
1/
11
0/
01
ita diagrama leidia lengvai koduoti. Ukoduota seka atitinka keli iame grafe.
Dekodavimas
Bsen diagram ipleiame laike. Gauname:
0 0 0 0 0
1 1 1 1 1

00
11
00
11
00
11
00
11
10
01
10
01
10
01
10
01
Jei persiuniant nepadaroma klaid lengvai grafe galima atsekti keli ir dekoduoti od, pradedant
nuo nulins bsenos ir einant briaunomis, kurios atitinka i kanalo gaut vektori c

.
O kaip itaisyti padarytas klaidas?
I anksto pasirenkame m 1, ir imame m blok i eils, lyginame su galimais keliais ir renkams t,
kuris maiausiai skiriasi.
Imkime pavyzd. Tegu
c = ( 1 1
..
1
0 1
..
0
1 1
..
1
1 0
..
1
0 1
..
0
. . .)
Tarkime, klaida padaryta antrojoje vektoriaus pozicijoje, t.y.
c

= (1 0 0 1 1 1 1 0 0 1 . . .)
12
Tegu m = 2. Imkime pirmus m blok, t.y. vektori - u = (1 0 0 1), ir randame atstum (t.y.
besiskiriani koordinai skaii) iki kiekvieno galimo vektoriaus, gauto i bsen diagramos (iplstos
laike). I bsen diagramos matome, kad galimi 4 vektoriai (einame i nulins bsenos ir irime, kokie
vektoriai galjo bti 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. Maiausias atstumas yra treiojo i galim
vektori, todl juo keiiame u.
Tada dekoduojam pirmj blok, t.y. 11. Dekodav gauname 1.
Dabar kartojame visk su nauju u. Vl imame m blok: u = 0111. Bsen diagramoje esame antro
laiko momento bsenoje 1. I ten irgi yra keturi keliai, i kuri renkams artimiausi (iuo atveju 0111) ir
dekoduojame antrj blok 01 0. Ir t.t.
Taigi, vien klaid itais.
Dabar tarkime, kad yra dvi klaidos antroje ir ketvirtoje vektoriaus pozicijose, t.y.
c

= (1 0 0 0 1 1 1 0 0 1 . . .)
Imame pirmj vektori u = (1 0 0 0) ir randame atstum iki kiekvieno galimo vektoriaus. Pagal bsen
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
Maiausias atstumas yra iki pirmojo i galim vektori, todl juo keiiame pirmj vektori. Gaut
pirmj blok 00 dekoduojame 0. Toliau imame antrj vektori u = (0 0 1 1), jis yra tarp galim
vektori, todl antrojo vektoriaus nekeiiame, antr blok 00 dekoduojame 0. Taip pat nekeiiame 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 nebeitais.
Toliau nagrinsime tik blokinius kodus.
5 Bendrosios svokos
5.1 apibrimas. Abcle vadinsime baigtin netui aib.
Tarkime, turime abcl A. Jos element skaii paprastai ymsime q. Jei q = 2, tai paprastai
laikysime, kad A = {0, 1}.
Tarkime 1 k n. Kaip prasta, A
n
ymsime aib vis n ilgio vektori, kuri koordinats priklauso
aibei A:
A
n
= {(c
1
, . . . , c
n
) | c
i
A i}.
13
5.2 apibrimas. Aibs A
n
poaib C, sudaryt i M 0 vektori, vadinsime blokiniu kodu vir A arba
tiesiog kodu. Vektorius, priklausanius kodui, vadinsime kodo odiais. Parametr n vadinsime kodo
ilgiu, o M - kodo dydiu. Tok kod ymsime (n, M). Jei q = 2, kod 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 persisti nepatikimu ryi kanalu, yra abcls 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, ukoduosime vektorius m A
k
, t.y. vektori m A
k
ukoduosime vektoriumi x = c(m) C.
Paprastai laikysime, kad c yra bijekcija, t.y. c(A
k
) = C. Tokiu atveju egzistuos atvirktin funkcija
c
1
: C A
k
, kuri galsime naudoti dekodavimo metu.
Matome, kad kodo dydis M turi bti kuo didesnis, kad juo bt galima ukoduoti kuo daugiau infor-
macijos vektori (t.y. kuo M didesnis, tuo didesn k, tenkinant q
k
M, galime parinkti). Taiau, kuo
daugiau odi kode, tuo maiau jie skiriasi vienas nuo kito ir tuo sunkiau nustatyti, kuris vektorius buvo
pasistas, ir surasti klaidos pozicijas.
Reikia rinktis tok kod, kurio ir dydis, ir atstumai tarp kodo odi yra kuo didesni. Tai prietarau-
janios viena kitai slygos. Parenkant kodus, iekoma kompromiso tarp i dviej dalyk.
5.3 apibrimas. 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 koordinai, kuriose jie skiriasi, skaiius:
d(x, y) = |{i : 1 i n, x
i
= y
i
}| =

1in, 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 apibrimas. Tarkime, kad abcl A yra Abelio grup sudties atvilgiu. Vektoriaus x A
n
He-
mingo svoris, ymimas w(x), yra jo nenulini koordinai skaiius:
w(x) = |{i : 1 i n, x
i
= 0}|
Lengvai galime sitikinti, kad:
1. w(x) = d(x, 0)
2. d(x, y) = w(x y) = w(y x)
3. w(x + y) w(x) + w(y) (trikampio nelygyb)
14
Kadangi iame kurse naudosime tik Hemingo atstum ir svor, tai juos paprastai vadinsime tiesiog
atstumu ir svoriu.
Taigi, vis informacij, kuri norime isisti, skaidome k ilgio vektorius m A
k
, kiekvien vektori
ukoduojame n ilgio kodo odiu x = c(m) C ir siuniame kanal. I kanalo gauname ikraipyt
vektori y A
n
, kuris gali nebepriklausyti kodui C, t.y. y yra bet kuris vektorius i aibs A
n
. Dekodavi-
mo 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 atvirktine funk-


cija c
1
: C A
k
, kad odiui 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, pavyzdiui, 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 ariau 101, nei 000, ir dekoduojame
1, nes jis atitinka 111.
Tarkime, ryio kanalu gavome vektori y A
n
. Koks kodo odis x C buvo isistas? Nor-
tsi rasti tok kodo od x, kurio isiuntimo tikimyb yra didiausia, inant, kad gavome vektori y.
Dekodavimo taisykl, kai i kanalo gaut vektori y dekoduojame kodo odiu x C, maksimizuojan-
iu tikimyb P(x|y) (taip ymsime slygin tikimyb, kad kanal buvo isistas x, jei inome, kad
i kanalo gautas y), vadinama idealaus stebtojo taisykle. T.y., dekoduojame tokiu kodo odiu x, kad
P(x|y) = max
x

C
P(x

|y).
Be abejo, i dekodavimo taisykl sunku naudoti praktikoje, nes nra aiku, kaip tas tikimybes skai-
iuoti. rodysime, kad esant ipildytoms tam tikroms slygoms, i dekodavimo taisykl sutampa su mi-
nimalaus atstumo dekodavimo taisykle: dekoduojame tuo kodo odiu, kuris yra artimiausias gautam
vektoriui y, matuojant Hemingo atstumu, t.y. gav y A
n
, j dekoduojame tokiu kodo odiu x C, kad
d(x, y) = min
x

C
d(x

, y).
5.5 teorema. Jei naudojame q-nar simetrin kanal su simboli ikraipymo tikimybe p <
q1
q
, ir jei visi
kodo C odiai kanal perduodami su vienodomis tikimybmis, tai idealaus stebtojo ir minimalaus
atstumo dekodavimo taisykls duoda t pat rezultat.
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 slygin tikimyb P(x|y)
- maksimali.
Pagal slygini tikimybi savybes P(x|y) =
P(y|x)P(x)
P(y)
. Kadangi visi kodo C odiai kanal perduo-
dami su vienodomis tikimybmis, tai P(x) =
1
M
, kur P(x) kodo odio x isiuntimo kanal tikimyb,
o M kodo C dydis. Taigi, P(x|y) =
P(y|x)
MP(y)
. Kadangi y - fiksuotas, tai P(x|y) - maksimali P(y|x)
- maksimali.
Naudojamas kanalas yra be atminties, todl kiekvieno isisto simbolio gavimo tikimyb yra nepri-
klausoma nuo kit simboli tikimybi. Kadangi w = d(x, y), tai buvo padaryta lygiai w klaid. Todl
P(y|x) =
n

i=1
P(y
i
|x
i
) = (1 p)
nw
_
p
q 1
_
w
= (1 p)
n
_
p
(1 p)(q 1)
_
w
.
15
Bet p <
q1
q
, todl
p
(1p)(q1)
< 1. I tikro,
p
(1 p)(q 1)
< 1 p < (1 p)(q 1) = q 1 pq + p pq < q 1 p <
q 1
q
.
Taigi, kuo w maesnis, tuo P(y|x) yra didesn, nes
p
(1p)(q1)
< 1. K ir reikjo rodyti.
Pastaba. p <
q1
q
1 p >
p
q1
- t.y. teoremos slygos reikalavimas ekvivalentus reikalavimui, kad
neklaidos tikimyb bt didesn u bet kokios klaidos tikimyb.
Dekodavim naudojant minimalaus atstumo dekodavimo taisykl grafikai galima pavaizduoti taip:

x
ia didysis skritulys su takais yra aib vis vektori i A
n
, pajuodinti takai priklauso kodui C A
n
.
I kanalo gautas vektorius y gali bti bet kuris takas. Pairime, kuris kodo odis (pajuodintas takas)
yra ariausiai, juo ir dekoduojame. Pavyzdiui, pasirinkime kur nors kodo od x. Tarkime, artimiausias
kitas kodo C odis yra atstumu h nuo x. Tai reikia, kad jei y yra nutols nuo x maesniu atstumu, nei
h/2, tai jis tikrai bus dekoduotas odiu x, nes is kodo C odis yra ariausiai. Taigi, apie x galime
apibrti spindulio h/2 skritul, ir visi jam priklausantys takai bus dekoduojami to skritulio centru
kodo odiu x.
5.6 apibrimas. Tarkime, C yra (n, M) kodas ir M > 1 (kodas C sudarytas i bent dviej odi).
Kodo C minimalus atstumas d yra maiausias Hemingo atstumas tarp dviej skirting kodo C odi,
t.y. d = min
x,yC, x=y
d(x, y). (n, M) kod, kurio minimalus atstumas yra d, ymsime (n, M, d).
Tai jei apie kiekvien kodo od apibrime spindulio d/2 skritul, skritulyje esantys takai bus deko-
duojami skritulio centru.
Tarkime, kanal pasiuntme od x, ir kanale jame buvo padaryta t klaid. I kanalo ijo vektorius
y, esantis atstumu t nuo x. Jei t < d/2, tai y priklausys odio x skrituliui, todl dekoduosime odiu x,
t.y. itaisysime kanalo padarytas klaidas. Jei t > d/2, tai y gali atsidurti jau kito kodo odio skritulyje,
ir tokiu atveju bus dekoduotas neteisingai. Jei t = d/2, tai y gali priklausyti dviems skrituliams (gali bti
ant dviej skrituli krato), ir neinosime, kurio rutulio centru dekoduoti. Jei y neatsiduria jokio kodo
odio skritulyje, tai, j dekoduodami artimiausiu kodo odiu, galime dekoduoti teisingai, o galime ir
klaidingai. Taigi, jei t d/2, nesame garantuoti dl dekodavimo teisingumo.
Apibrimas. Jei, naudojant minimalaus atstumo dekodavimo taisykl, dekoduojama visada teisingai,
kai sistame odyje yra ne daugiau kaip t klaid, tai kod C vadiname t klaid taisaniu kodu.
t klaid taisant kod vadiname tiksliai t klaid taisaniu kodu, jei jis nra t+1 klaid taisantis kodas.
Teorema. Kodas C yra tiksliai [(d 1)/2] klaid taisantis kodas, kur d yra kodo C minimalus atstumas,
o [a] yra skaiiaus a sveikoji dalis, t.y. didiausias sveikas skaiius, maesnis arba lygus u a.
16
rodymas. Kaip matme, kodas C yra t klaid taisantis kodas, jei t < d/2. Dl to jis yra tiksliai t klaid
taisantis kodas, jei t yra didiausias sveikas skaiius, maesnis u d/2. Jei d yra lyginis, tai didiausias
sveikas skaiius, maesnis u d/2, yra d/2 1 = (d 2)/2 = [(d 1)/2]. Jei d yra nelyginis, tai
didiausias sveikas skaiius, maesnis u d/2, yra d/2 1/2 = (d 1)/2 = [(d 1)/2]. Abiem atvejais
gauname pageidaujam rezultat.
Todl stengiamasi sudaryti tokius kodus, kuri minimalus atstumas d bt kuo didesnis, kad kodas itai-
syt kuo daugiau klaid.
Kartais svarbu ne tik tai, kiek klaid kodas itaiso, bet ir kiek j aptinka. Kadangi kanal siuniame
tik kodo odius, tai, jei i kanalo ieina ne kodo odis, reikia, buvo padaryta klaid. Todl t klaid
aptinkantis kodas gali bti apibriamas taip:
Apibrimas. Kod C vadiname t klaid aptinkaniu kodu, jei bet kuriame kodo odyje vykus ne dau-
giau kaip t klaid, gautas vektorius nepriklauso kodui C.
t klaid aptinkant kod vadiname tiksliai t klaid aptinkaniu kodu, jei jis nra t+1 klaid aptinkantis
kodas.
Jei vyko d ikraipym, tai gali bti, kad gavome kit kodo od, todl kodas C yra t klaid aptinkantis
kodas, jei t < d. Gauname tok rezultat:
Teorema. Kodas C yra tiksliai d 1 klaid aptinkantis kodas, kur d yra kodo C minimalus atstumas.
Taigi, jei norime sukonstruoti ger kod, tai stengiams, kad ir jo dydis, ir minimalus atstumas bt
kuo didesni. Tai vienas kitam prietaraujanios slygos, todl iekoma kompromiso.
6 Ekvivalents kodai
Kai ukoduojame praneim ir siuniame kodo od kanalu be atminties, tai nra skirtumo, kuria tvarka
persiuniame to kodo odio simbolius. Taigi, iuo poiriu kodai, kurie skiriasi tik simboli eils tvarka,
i esms nesiskiria. Tokius kodus vadinsime ekvivaleniais.
Kad galtume duoti formal ekvivaleni kod apibrim, prisiminkime keitinio (perstatos) svok.
Tarkime, turime baigtin aib I = {1, . . . , n}. Abipusikai vienareikm atvaizd (bijekcij) : I I
vadina perstata (arba keitiniu). Pavyzdiui, jei n = 5, tai : I I, apibrta taip: (1) = 2, (2) = 3,
(3) = 4, (4) = 5, (5) = 1, yra perstata. Perstata danai uraoma tokiu pavidalu:
=
_
1 . . . n
(1) . . . (n)
_
.
Pavyzdiui, paskutinio pavyzdio perstata galt bti urayta taip:
=
_
1 2 3 4 5
2 3 4 5 1
_
.
Perstatas galime naudoti vektori koordinai keitimui vietomis. Laikysime, kad I vektoriaus
x = (x
1
, . . . , x
n
) indeks aib. Tada sukeiiame vektoriaus x koordinates taip, kaip nurodo perstata ,
t.y. pirm koordinat x
1
perkeliame (1) viet, antr (2) viet ir t.t. Gaut vektori ymsime
(x). Pavyzdiui, jei x = (x
1
, x
2
, x
3
, x
4
, x
5
), tai panaudoj paskutinio pavyzdio perstat , gausime
17
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 pastebti, kad jei x = (x
1
, . . . , x
n
), tai
(x) = (x

1
(1)
, . . . , x

1
(n)
), (2)
kur
1
atvirktin perstata, t.y. tokia perstata, kad
1
((i)) = i i. Pavyzdiui, paskutinio
pavyzdio perstatos atvirktin perstata yra tokia perstata:

1
=
_
1 2 3 4 5
5 1 2 3 4
_
.
Taigi, perstata : I I apibria funkcij : A
n
A
n
, uduot (2) lygybe. i funkcija tiesiog
sukeiia vektoriaus koordinates vietomis.
Jei C yra kodas, ymsime (C) = {(x) : x C}, t.y. (C) bus kodas, gautas sukeitus vis kodo
C odi koordinates pagal t pai perstat .
6.1 apibrimas. Du ilgio n kodai C ir C

vadinami ekvivaleniais, jei egzistuoja tokia indeks aibs


{1, . . . , n} perstata , kad (C) = C

.
Nesunku parodyti, kad ekvivaleni kod ilgiai, dydiai, minimals atstumai, odi svori pasi-
skirstymai sutampa (nes sukeitus vektoriaus koordinates vietomis, vektoriaus ilgis bei svoris ilieka tokie
patys).
Pavyzdys. Nustatykime, ar dvinariai kodai
C = {1010, 1101, 0011, 1001} ir C

= {1010, 1100, 0110, 1011}


yra ekvivalents, ir jei yra, raskime toki perstat , kad C

= (C).
Yra sukurta vairi taisykli, padedani rasti toki perstat arba leidiani parodyti, kad tokia per-
stata neegzistuoja. Pasinaudosime paprasiausiomis i j.
Vis pirma panagrinkime abiej kod odius. Matome, kad abiej kod odi svori pasiskirsty-
mai sutampa: kodai turi po tris svorio 2 odius ir po vien svorio 3 od. Jei nesutapt, ikart galtume
tvirtinti, kad kodai neekvivalents. Kadangi turi tik po vien svorio 3 od, tai aiku, jog jei tokia per-
stata egzistuoja, tai jinai od 1101 atvaizduoja 1011. I ia ikart gauname, kad jei egzistuoja,
tai (3) = 2, nes nulis i treios odio 1101 pozicijos perkeliamas antr odio 1011 pozicij. Taigi,
gavome iek tiek informacijos apie .
Toliau galime suskaiiuoti, kiek vienet stovi pirmo kodo odi kiekvienoje pozicijoje, ir palyginti
su antro kodo vienet skaiiumi. Kad aikiau matytsi, uraykime kodo odius stulpeliu:
C =
_

_
1010
1101
0011
1001
_

_
ir C

=
_

_
1010
1100
0110
1011
_

_
.
Perstatant kodo odi koordinates, ie stulpeliai yra perkeliami kit viet, taigi, vienet skaiius juose
ilieka toks pat. Kodo C pirmame stulpelyje yra 3 vienetai, antrame 1, treiame 2, ketvirtame
3. Kodo C

atitinkamai 3,2,3,1. Vlgi, matome, pasiskirstymas sutampa jei nesutapt, kodai nebt
ekvivalents. Matome, kad antras kodo C stulpelis, kuriame yra 1 vienetas, btinai keliauja ketvirt
18
pozicij (t.y. jei kodai ekvivalents ir perstata egzistuoja, tai (2) = 4), ir treias antr (t mes jau
matme, palygin kodo odi svorius).
Taigi, jau inome dvi perstatos reikmes: (2) = 4 ir (3) = 2. Yra tik dvi perstatos su tokiomis
reikmmis:

=
_
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 sukeiia taip, kad gauname
kod C

. I tikro,

(C) = {1100, 1011, 0110, 1010} = C

ir

(C) = {0110, 1011, 1100, 1010} = C

.
Taigi, kodai ekvivalents.
19

You might also like