320 likes | 455 Views
Kódelmélet. Adattovábbító csatorna. Adókészülék. Vevőkészülék. Adó-Információs csatorna-Vevő A={a 1 ,…,a n } ábécé (véges szimbólumkészlet) Elsődleges közlés: a i1 ,…,a in jelsorozat. Adatátviteli csatorna. Kapacitása (Jelkészlete): K={k 1 , k 2 ,…k n }, általában |K|<|A|
E N D
Kódelmélet Adattovábbító csatorna Adókészülék Vevőkészülék • Adó-Információs csatorna-Vevő • A={a1,…,an} ábécé (véges szimbólumkészlet) • Elsődleges közlés: ai1,…,ain jelsorozat
Adatátviteli csatorna • Kapacitása (Jelkészlete): K={k1, k2,…kn}, általában |K|<|A| • A jelkészlet átvitelének fizikai megvalósítása Adó-készülék Kódoló Modulátor Demodulátor Dekódoló Vevő-készülék Fizikai jelek Kódolt jelek Elsődleges közlés
Kétirányú adattovábbítás Adókészülék+kódoló+modulátor Vevőkészülék+dekódoló+demodulátor Vevőkészülék+dekódoló+demodulátor Adókészülék+kódoló+modulátor • Adó+vevő=adóvevő • Kódoló+dekódoló=kodek • Modulátor+demodulátor=modem • Def: ha a kódoló "aÎA elsődleges betűhöz a K halmazból vett Ka=<ka1, ka2,…, kan,> sorozatot rendel, akkor azt betű szerinti kódolásnak nevezzük. • Bináris modell: K={0,1}
Def: Ka=<ka1, ka2,…, kan> sorozat: kódszó, {Ka} halmaz: kód, a az elsődleges közlésnek megfelelő kódszavak konkatenáltja pedig kódolt közlés • Példa: A={a,b,c,d}, kód={00, 01, 100, 101}dac 10100100 a betű szerinti kódolása • Def: H:A*{0,1}* kódolás, az A sorozataiból a K sorozataiba vivő függvény • Def: H-1: {0,1}* A* dekódolás, a K sorozataiból az A sorozataiba vivő függvény • Feltétele: ne legyen két olyan közlés, amit H ugyanabba a kódolt közlésbe visz át, vagyis H egy-egyértelmű • Példa: A={a,b,c,d}, kód={00, 01, 11, 0001} nem egy-egyértelmű, mert ab0001, és d0001 • Def: Ha H-1 létezik, azt mondjuk: a kód felbontható
Mikor felbontható egy kód: • Ha a kódszavak hossza egyforma a kód felbontható • Def: Egy kódot prefix kódnak nevezünk akkor, ha egyik kódszó sem valódi kezdőszelete a másiknak • Tétel: a prefix kód felbontható • Biz: Tfh. a K= {k1, k2,…, kn} kód nem felbontható. Ekkor létezik egy olyan S=<s1,s2,…,sn> sorozat, ami kétféleképpen <ak1,ak2,…,akn> és <al1,al2,…,alm> módon felbontható (dekódolható). Tfh. a két sorozat első különböző tagja az aki ill. az alj elemek, amelyekhez tehát ugyanaz a kód tartozik. A |H(aki)|<|H(alj)|, akkor aki alj valódi kezdőszelete, egyébként fordítva ellentmondás…
McMillan-féle egyenlőtlenség • Tétel: Ha a K={k1,k2,…,kn} kód felbontható i=1Σn2-li<=1, ahol li a ki kódszó hossza. • Biz: Emeljük fel az összeget a t-ik hatványra.(i=1Σn2-li)t=(i1=1Σn2-li1)*(i2=1Σn2-li2)*…*(it=1Σn2-lit)=(i1,i2,…,it=1Σn 2 –(li1+li2+…+lit))…, ahol 1<=ij<=n és 1<=j<=tAz li1+li2+…+lit hossz-sorozat nem más, mint az {ai1,ai2,…,ait} t hosszú elsődleges közlés kódolásának hossza. Jelöljük ezt L(ai1,ai2,…,ait)-vel.…=(ai1,ai2,…,ait=1Σn 2 –L(ai1,ai2,…,ait)), vagyis az összes t hosszú elsődleges közlésre összegzünk. • Jelölje N(t,r) azoknak a t hosszúságú elsődleges közléseknek a számát, amelyre L(ai1,ai2,…,ait)=r (kódhossz), és legyen M a K beli kódszavak hosszának a maximuma. Ekkor • t<=L(ai1,ai2,…,ait)<=M*t
(ai1,ai2,…,aitΣ2 –L(ai1,ai2,…,ait))=(r=tΣM*t N(t,r)*2–r)…(áttérünk kódszó-bithossz szerinti összegzésre) • Másrészt: N(t,r)<=2r, hiszen 2r-nél több szimbólum felbontható módon nem kódolható le r bittel. Ezért: • …<=(r=tΣM*t 2r*2–r)=(r=tΣM*t 1)=(r=tΣM*t 1)=(M-1)*t+1 • Vagyis tetszőleges t-re: (i=1Σn2-li)t<=(M-1)*t+1 • Ha (i=1Σn2-li)>1 lenne igaz, akkor eléggé nagy t-re a fenti egyenlőtlenség nem állhatna fenn. • Tehát (i=1Σn2-li)<=1 áll fenn.
0 1 c a b f e d Kódfa • Olyan bináris fa, amely csomópontjaihoz vezető út megfelel a kódszavaknak. (pl. jobbra=0, balra=1) • Prefix kód: csak a falevelekhez van kódszó rendelve • Pl: A={a,b,c,d,e,f},H(A)={10,11,01,0011,0010,000} • Dekódolás: a bejövő bitektől függően gyalogolunk a fán. • Minden prefix kódhoz lehet kódfát létrehozni.
Optimális kódok • Legyen A egy adatforrás ábécéje, amely az egyes jeleket egymástól függetlenül adja ki. Legyen a P={p1,p2,…pn} a kibocsátott jelek valószínűségeinek halmaza. Világos, hogy pi<1, és i=1Σn pi=1. • Pl: magyar szövegre: pe<pq.Az e-t elég lenne kevesebb bittel kódolni, mint a q-t. • Legyen L={l1,l2,…ln} a K kódkészlet kódhosszainak a vektora. • (Csökkenthető-e) egy m hosszú közlés átlagos hossza: • Lm=m*p1l1+m*p2l2+…+m*pnln=m*i=1Σm pi li • Def: a L(K)=i=1Σm pi li összeget a K kód F forrás melletti költségének nevezzük. • Rögzített F forrás mellett többféle K kód is létrehozható. • Def: optimálisnak nevezzük a Ko kódot a F forrásra nézve, ha L(Ko)<=L(K)
Shannon-féle entrópia • Tétel: Tetszőleges F forráshoz létezik optimális prefix kód L(Ko). ???De melyik az??? • Def: Az F forráshoz tartozó H(F)=i=1Σn pi*log(1/pi) összeget az F forrás (Shannon-féle) entrópiájának nevezzük. • Tétel: Az F forráshoz tartozó bármely felbontható K kódra L(K)>=H(F). • Biz: H(F)-L(K)=i=1Σnpi*log(1/pi)-i=1Σnpili=i=1Σnpi(log(1/pi)-li)=i=1Σnpi(log(1/pi)-log(2li))=i=1Σnpi(log(2-li/pi)) • ((ismert: ln(x)<=x-1 log(x)<=(x-1)/ln(2))) • H(F)-L(K)=i=1Σnpi(log(2-li/pi))<= i=1Σnpi/ln(2)*(2-li/pi-1)=1/ln(2)(i=1Σn 2-li-1)<=0
0 1 d c a b • Megjegyzés: Ha az eloszlás egyenletes (pi=1/n), akkor H(F)= i=1Σn 1/n*log(n)=log(n) • ilyenkor az optimális kódfa egyenletes, magassága a kód költsége=log(1/n)
Egy kis filozófia • Barkochba: kód: egy fogalom kitalálásához vezető kérdések száma. Mikor jók a kérdések? • egy halmaz elemeinek a kiválasztásához szükséges információmennyiség • szürke halmazokra (ha nincs előzetes információnk) költséges • egyéniséggel rendelkező halmazelemek esetén (ha van előzetes információnk) olcsóbb • ha nem készülünk fel (nem gyűjtünk előzetes infót), akkor többe kerül a kiválasztási művelet… • kódfageneráláskor az igen/nem vlszségnek közel 50-50% kell lennie.
0 1 0.2 0.2 0.19 0.12 0.11 0.09 0.09 Optimális kód konstrukciója(Shannon-Fanno szuboptimális) • Állítsuk sorba az elemeket és a vlszségeket. • A Shannon-Fanno kódfa „oldalra nyomott” lesz (rövidebb kódokat kapnak a nagyobb vlszségű elemek, hosszabbakat a kisebbek) • Shannon-Fanno: A fát a gyökerénél kezdjük építeni, osszuk fel a vlszségi listát kb. 50-50% arányban (stb. rekurzíve).
Az optimális kód Huffman féle konstrukciója • Tétel: Az F jelforráshoz (A={a1,a2,…,an} ábécéhez és P={p1>=p2 >= … >= pn} eloszláshoz) létezik legalább egy K= {k1, k2,…, kn} optimális prefix kód, hogy l1<=l2<=…<=ln-1=ln, és az utolsó két kódszó a0, ill.a1, alakú. • Biz: legyen Ko egy olyan optimális kód, amelyre az állítás nem igaz, vagyis létezik i<j pár, hogy pi>=pj, de li>lj.- Ha éppen pi=pj lenne, akkor a két elemet kicserélve egy másik olyan optimális kódot kapunk, amelyre eggyel kevesebb li>lj pár létezik.- Ha viszont pi>pj lenne, akkor ez és li-lj>0 összeszorzásával pi*(li-lj)>pj*(li-lj) pi*li+pj*lj> pj*li+ pi*ljvagyis a helycserével alacsonyabb költségű kódot kapnánk, ami viszont ellentmond a feltételnekÁLLÍTÁS első fele
Tfh. (indirekt) ln-1<ln, vagyis a 2 leghosszabb kód nem egyforma hosszú. Legyen b az an ln-1 hosszú kezdőszelete. b nem lehet a kezdőszelete egyetlen más kódszónak, mert nem rövidebb. Ezek sem lehetnek b kezdőszeletei, mert akkor an kezdőszeletei is lennének. Ha ekkor kicserélnénk an-t b-ra, akkor egy olcsóbb kódot kapnánk, ami ellentmond a feltételnek a két leghosszabb kód egyforma hosszú, és csak az utolsó bitben tér el. • Tétel: Legyen F jelforrás (A={a1,a2,…,an} ábécével és P={p1>=p2 >= … >= pn} eloszlással), és K={k1, k2,…,kn} optimális prefix kód. Tfh. pi= q1+q2. Ekkor a K’={k1, k2,…,ki-1,ki+1,…,kn,ki0 ,ki1} szintén optimális prefix kód lesz A={a1,a2,…,an,an+1} ábécével és P={p1>=p2>=pi-1 >=pi+1…>=pn>=q1>=q2} eloszlással. • Biz: HF
Huffmann algoritmusa • vlszlista sorbaállításaDO WHILE kételeműnél hosszabb a lista két legkisebb vlsz. összevonása összevont vlsz. BeillesztéseLOOPa két elem a kódfa gyökereDO WHILE van összevont elem az összevont elemnél a kódfát felhasítjukLOOP
0 1 0.2 0.2 0.6, 0.4 0.19 0.12 0.11 0.4, 0.37, 0.23 0.09 0.09 0.37, 0.23, 0.2, 0.2 HF: kiszámolni, hogy tényleg olcsóbb-e a Huffmann fa, mint a Shannon-Fanno. 0.2, 0.2, 0.23, 0.19, 0.18 0.2, 0.2, 0.19, 0.18, 0.12, 0.11 0.2, 0.2, 0.19, 0.12, 0.11, 0.09, 0.09
Zajos csatorna. Hibajavító kódolás • Fix méretű kódszavakat (blokkokat), felbontható (prefix) kódokat vizsgálunk. a közlés mérete többszöröse a kódméretnek. • Def: A csatorna legfeljebb t egyedi hibát okoz, ha a egy blokkban max ennyi hibás bit fordulhat elő. • Pl: ha a legfeljebb 1 hiba fordulhat elő, akkor a kódolásban megduplázhatjuk a bitekethibafelismerő kódolás. Ha megtriplázzukhibajavító kódolás… • Def: Legyen K={k1, k2,…,km} n blokkméretű kód. A log(m)/n arányt a kód sűrűségének nevezzük. • Def: Az a és b n szélességű bitvektorok Hamming-távolságán a és b egymástól eltérő bitjeinek a számát értjük. Jelölése r(a, b). • Példa: r(001, 111)=2
A Hamming távolság tulajdonságai Háromszög egyenlőtlenség • 1. r(a,b)>=0 • 2. r(a,b)=0 a=b • 3. r(a,b)=r(b,a) • 4. r(a,b)<=r(a,g)+r(g,b) Biz: Jelölje P(a,b) azoknak a pozícióknak a halmazát, amelyekben a és b egymástól eltérnek. Ekkor P(a,b)=P(a,g) U P(g,b)ÁLLÍTÁS • Az 1-4. Tulajdonságokat metrikának nevezzük. A Hamming távolság tehát metrika a bináris számok felett.
Def: Kódtávolságnak nevezzük és d(K)-val jelöljük egy K kód-beli szavak távolságának a minimumát. • Példa: hibafelfedés nélkül: 1, hibafelfedéssel (dupla): 2, hibajavítással (tripla): 3. • Tétel: Egy K kód akkor alkalmas t db. hiba felismerésére ha d(K)>=t+1 • Biz: tfh. az aÎK kódszóban legfeljebb t db hiba keletkezik, és így a b szót kapjuk. r(a,b)<=t, viszont a d(K)>t bÏK. Vagyis a hiba úgy ismerhető fel, hogy a beolvasott szó nem eleme a K kódnak.Indirekt: Ha d(K)<=t, akkor létezhet r(a,b)<=t. Ilyenkor viszont, ha a csatorna legfeljebb t hibát okoz, nem dönthető el, hogy b vételekor tényleg b-t adtak le, vagy a-ból változott azzá.
Példa: Álljon a B kód az n hosszú, páros számú 1-t tartalmazó kódokból. d(B)=2 1 hiba felfedésére alkalmas. Elnevezés: paritásellenőrző kód. • Def: Jelölje St(a) azon b szavak halmazát, amelyekre r(a,b)<=t. Ezt nevezzük a középpontú, t sugarú gömbnek. • Ha St(a)ÇSt(b)<>Æ r(a,b)<=2t. • Tétel: a K kóddal akkor lehet hibát javítani, ha d(K)>=2t+1. • Biz: Rajzoljunk a kódszavak köré t sugarú gömböt. Ezek nem metszhetik egymást. Legyen g egy olyan kódszó, amely a-ból legfeljebb t változtatással keletkezett. G mindenképpen beleesik egy St(a) gömbbe, és a diszjunktság miatt csak egybe eshet. A feladat tehát meghatározni a gömb középpontját.Indirekt: tfh. d(K)<=2t. Ekkor van olyan St(a) és St(b), amelyek nem diszjunktak, legyen a közös pont g. Ennek vétele esetén nem dönthető el, hogy a küldött szó a vagy b volt, vagyis nem tudjuk kijavítani a hibát.
Lineáris kódok • Legyenek a={a1,a2,…,an} és b={b1,b2,…,bn} bináris n-esek. • Def: Az a és b vektorok összege alatt a a+b={a1+b1, a2+b2,…,an+bn} vektort értjük. • Def: Az a és b vektorok skaláris szorzata alatt a a1Çb1+a2Çb2+…+anÇbn szorzatösszeget értjük. (az összeg mod 2 értendő) • Def: Ha q bináris konstans (0 vagy 1), akkor az a vektor q-val vett szorzata alatt a qa={qa1,qa2,…,qan} vektort értjük. (1*a=a, 0*a=0). • Def: az a vektor w(a) súlya alatt az a vektorban levő nem nulla elemek számát értjük. • Példa: w({1,0,0,1,1})=3, w({0,0,1,0,1})=2
Látható, hogy a Hamming távolságra: r(a,b)= w(a+b) • Def: Egy K kódot akkor nevezünk lineárisnak, ha a,bÎK esetén a+bÎK is teljesül. • Köv: A 0 kódszó minden lineáris kódnak eleme. • Biz: az a+a 0-t ad ki. • Def: Egy K kód w(K) súlya alatt a nem nulla kódszavainak a minimumát értjük. • Tétel: Lineáris kódokra d(K)=w(K). • Biz: Legyen a és b olyan kódszavak, amelyekre d(K)=r(a,b)=w(a+b)>=w(K)Másrészt, legyen gÎK olyan kódszó, amelyre w(K)=w(g). Ekkor:w(K)=w(g)=w(g+0)=r(g,0)>=d(K)
Egy kis lineáris algebra • A lineáris kódok nem mások, mint a Bn n dimenziós vektortér alterei a kételemű (0,1 Boolean) test felett, ahol az összeadás mod 2 érvényes, és a skalárszorzás a konjunkciónak felel meg. • Ha K n hosszúságú lineáris kód, akkor létezik k<=n szám, és léteznek a1,a2,…,ak vektorok, hogy tetszőleges K-beli a kódszó felírható, mint az ai vektorok lineáris kombinációja, vagyis a=g1a1+ g2a2+… +gkak . ai-k helyett másik bi vektorrendszert választva a k szám nem változik. • Biz: nélkül
Az ilyen tulajdonságú ai-k a K kód egy bázisát alkotják, k-t pedig a K kód dimenziójának nevezzük. • Az ily módon kapott gi–k egyértelműek • Az ai–k egymástól függetlenek, vagyis egyik sem írható fel a többi lineáris kombinációjaként. • Ilyenkor |K|=2k. • A K kód sűrűsége=k/n • A K kód egy bázisát alkotó ai vektorokból képzett G=(a1/a2/…/ak) mátrixot a K kód generátormátrixának nevezzük. • Tehát a K kód tetszőleges szava megkapható a generátormátrix alkalmas kombinációjaként.
Ha két vektor skaláris szorzata=0, akkor azt mondjuk, hogy merőlegesek (ortogonálisak) egymásra. • Tétel: Legyen K egy m dimenziós, de n elemű lineáris kód. Ekkor léteznek olyan (b1,b2,…,bn-m) egymástól független vektorok, hogy egy aÎBnpontosan akkor aÎK is, ha (a, bi )=0 a fenti vektorokra. • Vagyis: K az n-dimenziós Bn tér egy altere (síkja). Ilyenkor a síknak léteznek normálisvektorai, amelyek elemei a Bn térnek, de nem elemei a K kódnak (mert merőlegesek rá).
Jelöljük K^-sel (K-duálissal) a (b1,b2,…,bn-m) bázis által kifeszített kódot. • K^ dimenziója n-m • K^ független a (b1,b2,…,bn-m) bázis konkrét megválasztásától • Ha bi=(bi1,bi2,…,bin), akkor a belőle felépíthetőH=(b1/b2/…/bn-m)=((bi1,bi2,…,bin)/…/(bn-m1,bn-m2, …,bn-m n)) mátrix a K^ kód generátormátrixa. Ezt (a duális kód generátormátrixát) a K kód ellenőrző mátrixának is hívjuk. • Azért ellenőrző, mert ilyenkor egy aÎK ha H*aT=((bi1,bi2,…,bin)/…/(bn-m1,bn-m2,…,bn-m n)) *(a1/a2/…/bn)=(0/…/0)
H*aT=a1*(b11/b21/…/bn-m 1)+…+an*(b12/b22/…/bn-m 2) =(0/…/0) • Vagyis, ha az aÎK a<>0 kódszó súlya t, akkor a H mátrixban van t összefüggő oszlopvektor, és fordítva: ha van a H mátrixban t összefüggő oszlopvektor, akkor van t súlyú kódszó (ennek elemei: a kiválasztott pozíciókon 1, máshol 0). • Ha ennél többet választunk ki, akkor azok már bizonyosan összefüggők lesznek. • Vagyis: d(K)>t ha a K kód ellenőrző mátrixából tetszőlegesen kiválasztva t oszlopot, ezek lineárisan függetlenek.
Hamming kódok • Tétel: egy K lineáris kóddal pontosan akkor lehet t hibát kijavítani, ha a K ellenőrző mátrixában tetszőlegesen kiválasztva 2t oszlopot, ezek lineárisan függetlenek lesznek. • Legyen a K kód blokkmérete n=2l-1. Álljon a K kód ellenőrző mátrixa az összes l hosszú, <>0 vektorból. Ilyenkor semelyik 2 oszlop nem lineárisan összefüggő, vagyis a kódtávolság d(K)>2, vagyis legalább 1 hibát javítani tudunk. Az ilyen kódokat Hamming kódoknak nevezzük. • A Hamming kód dimenziója: n-l= 2l-l-1. • A Hamming kód sűrűsége: (2l-l-1)/=2l=1-(l+1)/2l»1-log(n)/n Ez lényegesen jobb, mint a korábbi példa
Példa: Legyen l=3, a blokkméret=23-1=7Az ellenőrző mátrix: H=(0/0/1,0/1/0,0/1/1,1/0/0,1/0/1,1/1/0,1/1/1) • Kódtávolság: 2 oszlop mindig független 3 nem mindig, hiszen 0/0/1+0/1/0=0/1/1. a legkisebb súlyú kódszó a legkevesebb számú összefüggő oszlopvektord(K)=3.1 hibát javíthatunk vele. • Dimenzió: n-l, az össz dimenzió-a duális kód dimenziója (=ellenőrző mátrix sorainak száma), =7-3=4 • Kódsűrűség: log(|K|)/n=log(2n-l)/n=(n-l)/n=(2l-1-l)/(2l-1)=(23-3-1)/(23-1)=4/7
Tfh aÎK, vagyis H*aT=0. Változtassuk most meg az a kódszó egy bitjét. Tfh az eredmény b=a+e, ahol e egyetlen 1 bitet tartalmaz a változtatás helyén. Ellenőrizzük, hogy b benne van-e K-ban?H*bT=H*(a+e)T=H*aT+H*eT=H*eTEz utóbbi nem más, mint a H mátrix annyiadik oszlopa, mint ahol a változás történt. • Pl. legyen a=(0,0,0,1,1,1,1), e=(0,0,0,1,0,0,0).H*bT=H*(0/0/0/1/1/1/1)+H*(0/0/0/1/0/0/0)=(0/0/0)+(1/0/0)=(1/0/0)Vagyis: ha a beolvasott kódszót megszorozzuk az ellenőrző mátrixxal, az eredmény közvetlenül megadja a hibás bit sorszámát
Példa: legyen K egy l=4 dimenziójú Hamming kód: • Adjuk meg a kód következő jellemzőit: kódszóhossz, ellenőrző mátrix, kódtávolság, hibajavító képesség, dimenzió, kódsűrűség