5 Forráskódolás és hbavédő kódolás 51 Példa: forráskódolás Egy (szmbólumonként kódolt) forrás legtömörebb bnárs kódjában a kódszavak hossza rendre 2,3,3,3,3,4,4,4,5,5 a) Lehet-e ez a kód egyértelműen megfejthető kód? b) Mekkora a forrás entrópája, ha tudjuk, hogy egyenlő a kód átlagos szóhosszúságával? a) A Kraft egyenlőtlenség egyenlőséggel teljesül, tehát lehet 10 10 1 b) A feladat szövege szernt: p ld p l, ez vszont akkor bzonyosan 1 p 1 l teljesül, ha ld 1 p l,ha 1 10, azaz p 2 Így a kérdezett entrópa 49/16 Igényes megoldás megemlítené: ez (még) nem bzonyítja, hogy nncs más, ugyanlyen tulajdonságú valószínűségeloszlás 52 Shannon kód szerkesztése A forrásszmbólumokat valószínűségek szernt csökkenő sorba rendezzük, azaz p 1 p 2 p n Shannon szernt mármost az -edk szmbólumot megjelenítő kódszó az F [ 0, 1 ) szám l ld1 p btre csonkolt értéke, ahol Az alább táblázat egy 6 szmbólumos forrás kódjának elkészítését mutatja F 1 k 1 szmb/ x1/1 x2/2 x3/3 x4/4 x5/5 x6/6 p 04 025 012 01 008 005 l 2 2 4 4 4 5 F 00 04 065 077 087 095 bnárs F 000000 001100 010100 011000 011011 011110 kódszó 00 01 1010 1100 1101 11110 A Shannon kód gyakran rövdíthető Példánkban látható, hogy az utolsó szmbólumhoz tartozó kódszó utolsó eleme elhagyható, a kód ettől még prefx (mentes) marad Ha sort tudunk rá keríten - elég dőnk van - célszerű kszámítan a kód átlagos szóhosszát, s összevetn az entrópával [Az entrópa értéke 2235, az átlagos kódszóhossz pedg 275] Azt, hogy ezzel az eljárással prefx (azaz prefx-mentes) kódot állítunk elő, egyszerűen lehet bzonyítan A kódszavak elé egy bnárs pontot képzelve valamenny kódszó megfelel egy 0-1 között számnak Vegyük észre, hogy az l hosszú a szám (kódszó) csak azoknak a b kódszavaknak (számoknak) lehet az előtagja, amelyekre b a 2 l Az l -1 hosszúra csonkolt F -1 tehát csaks olyan számoknak lehet az előtagja, amelyekre l1 l1 b csonkolt ( F 1) 2 F 1 2 F 1 p 1 F Tehát: az l 1 hosszú -1-edk kódszó nem lehet előtagja sem az -edknek, sem pedg a többeknek Másrészről a magasabb ndexű kódszavak sem lehetnek előtagja alacsonyabb ndexűeknek, hszen a kódszavak hossza monoton nemcsökkenő sorozatot alkot p k 1
53 Jellegzetes zéhá példa Egy dszkrét, emlékezetnélkül, véletlen forrás szmbólumat a P = {05, 025, 015, 01} valószínűségeloszlás szernt szolgáltatja Pstke alkot egy kódot, amelyben a kódszavak a szmbólumok fent sorrendjében a következőek: (01), (10), (011), (1011) a) Egyértelműen dekódolható-e a fent kód? Indokolja válaszát! b) A fent kódhosszúságokkal lehet-e prefxmentes kódot konstruáln? c) Határozza meg a várható kódszóhosszat! Mlyen messze esk ez az érték a tömöríthetőség elv alsó határától? (Adja meg az eltérést %-ban!) a) Tekntve, hogy az első kódszó előtagja a harmadknak, s a másodk s a negyedknek, az a gyanúnk ébredhet, hogy az egyértelmű megfejthetőséggel s baj lehet Valóban, ha például az adó kétszer egymás után a harmadk kódszót adja: 011 011, akkor a kódolt jelnek ezt a szakaszát akár 01 1011-nek s olvashatjuk Pstke kódja tehát nem egyértelműen megfejthető kód Megjegyezzük, sok olyan kód létezk, am noha nem prefx (mentes), ennek ellenére egyértelműen megfejthető b) A Kraft egyenlőtlenség teljesül a 2, 2, 3, 4 számokra, hszen 1/4+1/4+1/8+1/16 < 1, ezért e szóhosszakkal lehet prefx kódot szerkeszten, pl (00), (01), (100), (1100) c) A várható kódszóhossz: L = 05 2 + 025 2+ 015 3+01 4 = 205 A tömöríthetőség alsó határát az eloszlás entrópája adja, ez most H(P) = 05 ld (1/ 05)+ 025 ld(1/ 0 25)+ 015 ld(1/ 015) + 01 ld(1/ 01) Nekem így 17428 jött k 54 Hbavédelem blokk kóddal Adott egy lneárs kód a kódszavaval: c 1 = 00000, c 2 = 10100, c 3 = 01110, c 4 = 11010 a) Adja meg a kód generátormátrxát! b) Határozza meg az egyhbás átvtelhez tartozó szndrómákat! c) Létrehozható -e egyetlen kódszó módosításával olyan lneárs kód, amely mnden egyhbát javít? a) Mvel a kódszavak száma 4, az üzenetvektorok mérete k=2, így a generátormátrxnak két sora (és természetesen 5 oszlopa) van Bázsvektornak csak c 1 nem választható, a többek közül bármelyk kettő megfelel Pl G = {c 2, c 3 }= {01110, 10100} Ez a generátormátrx ráadásul szsztematkus kódot állít elő b) Állítsuk elő a partásellenőrző mátrx transzponáltját: H T = {001, 010, 100, 110, 100} E mátrx sora éppen az egyhbás hbamntákhoz tartozó szndrómákat tartalmazzák Látható, hogy van két egyező sor, tehát van két olyan egyhbás helyzet, amelyeket ez a kód nem tud megkülönböztetn ( első és harmadk pozícó hbája) c) Nem A csupa nulla kódszó eleme kell legyen a kódnak, hszen a kód lneárs, tehát az nem módosítható A maradék három kódszó bármelykében bármt változtatunk, valamelyk másk kódszónak s változn kell, ha a kód lneartását meg akarjuk őrzn Ha pl a partásellenőrző mátrx transzponáltjának első sorát módosítjuk, legyen az most (101), akkor módosul c 2, új értéke c 2 = 10101, de változk c 3 s, hszen az c 1 és c 2 összege kell legyen 55 Példa: hbavédelem blokk kóddal A bnárs, lneárs és szsztematkus (23,12) Golay kód 6 hba jelzésére képes a) Mekkora lehet e kód mnmáls távolsága? 2
b) Hány hba javítására lehet alkalmas ez a kód? c) Hány kódszava van ennek a kódnak? d) Hányféle szndróma képződhet e kód alkalmazásánál? Hány szndróma jelez egy-, kétés háromhbás hbamntát? e) Felsmerhető-e, ha a valamelyk kódszót négy hba ér? f) Mely eleme hbásodhattak meg a kódszónak, ha a dekódolásnál számolt szndróma 1 2 3 4 5 6 7 8 9 10 11 s ( 0 01 0 0 0 0 01 0 0)? [A Golay-kód egy olyan perfekt kód, amely több hbát (nevezetesen 3-at) javít A Golaykódok kapcsán érdekességként érdemes megemlíten, hogy az 1977-bel Voyager expedícó (melynek célja a Jupter és a Szaturnusz vzsgálata volt), a G 24 bnárs Golaykódot használta A képet tt 800*800 darab 8 btes képpontra osztották A Voyager II szonda s a Golay-kóddal küldte képet, de több évvel elndulása után, mkor rájöttek, hogy a szondát továbbrányíthatják az Uránusz, majd a Neptunusz felé, akkor a CD -n és újabban a DVD-n s használt Reed-Solomon kódra tértek át Ezt azért tették, mert a még távolabbról jövő egyre gyengülő jelekhez több hba kjavítására volt szükség] a) 6 hba garantáltan akkor jelezhető, ha a kódtávolság (legalább) 7 b) Ha a kódtávolság 7, akkor 3 hba garantáltan javítható c) Az üzenetvektorok 12 btesek, tehát a kódszavak száma 2 12 4096 d) A szndróma 23-12=11 btes, tehát 2048 féle szndróma van 23 féle egyhbás helyzet lehetséges, 2322 / 2 253 féle kéthbás helyzet van, a háromhbás lehetőségek száma pedg 232221/ ( 23) 1771 [Láthatjuk, hogy az összes szndrómavektort elhasználtuk] e) A hbás kódszó ténye felsmerhető, az azonban, hogy a hbás kódszó négy vagy három hba következtében jött-e létre, már nem állapítható meg, ugyans ez a kód perfekt kód Ez azt jelent, hogy a legfeljebb három hbás kódszavak teljesen ktöltk a teret ( 123 2531771 2048), s így egy kódszó bármely negyedk szomszédja bztosan harmadk szomszédja valamelyk másk kódszónak [A perfekt kód jelentése az lenne, hogy a kódszava egyenlő távolságra vannak egymástól Tulajdonképpen ennek lesz a következménye az, hogy nem s tudunk négyhbás eseteket detektáln, hszen azok megfelelnek egy háromhbás esetnek] T f) Feltételezzük, hogy a partásellenőrző mátrx H B I alakú A szndróma úgy keletkezk, hogy a vett sorozatot szorozzuk e mátrx transzponáltjával, s ez végső soron egyenlő lesz az eh T szorzattal, ahol e a hbamnta Rá lehet jönn, ha a hbamnta 12+3=15 és 12+9=21 eleme 1 értékű, akkor éppen a megadott szndróma keletkezk, hszen ezeket az elemeket a mátrx egységmátrx almátrxa szorozza Megjegyzés: rá lehet mutatn arra s, hogy a partásellenőrző mátrx ezen megválasztása egy lehetőség, de nem szükségszerű Az a fontos tulajdonsága, hogy a kódszavakat transzponáltjával szorozva csupa nulla szndróma (tünetmentesség!) keletkezk, megmarad, ha a transzponált mátrx oszlopat csereberéljük Ekkor azonban nncs egységmátrx a megfelelő pozícókban [Továbbá egyértelmű, hogy a kódnak azon jellege matt, hogy a javítható hbákhoz tartozó szndrómák ktöltk a rendelkezésre álló teret, nem szabad lenne másk olyan javítható hbának, am ezt a szndrómát adja] 56 Hbajavítás lneárs kóddal Vzsgáljuk azt a bnárs (8,4) kódot, amelynek generátormátrxa 3
1 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 G 0 0 1 1 0 1 0 1 0 0 0 1 1 0 0 1 Állapítsuk meg, szsztematkus-e ez a kód, és állítsuk elő a partásellenőrző mátrxát! Próbáljuk meg ktaláln, hány hba jelzésére/javítására lehet alkalmas! Képezzük azt a generátormátrxot, amely szsztematkusan állítja elő ugyanezt a kódot! Képezzük az u 0 1 1 0 üzenethez tartozó kódszót, s tételezzük fel, hogy e kódszó első btje meghbásodk! Demonstráljuk a (táblázatos) hbajavítás folyamatát! A mátrx baloldalán elhelyezkedő almátrx nem egységmátrx, tehát a kód nem lehet szsztematkus A mátrx sora mnd kódszavak, s legtöbbjük csak három 1-es elemet tartalmaz (a súlyuk 3) E kódszavak távolsága a csupa 0-t tartalmazó kódszótól (amely mnden lneárs kódnak eleme) mndössze 3 Következésképpen e kód mnmáls távolsága sem lehet háromnál nagyobb Hogy nem s ksebb, ez csak akkor látszk, ha valamenny kódszót előállítjuk, s kkeressük közülük a mnmáls súlyút [Mvel ez lneárs kód, elegendő egy kválasztott kódszótól való távolságot vzsgáln, ez pedg legegyszerűbb a csupa 0 -t tartalmazó kódszóhoz képest tenn] Az a kód, amelynek a kódtávolsága 3, 2 hbát jelezn, 1 hbát javítan tud A mátrx két utolsó sorát összeadva a balodal egységmátrx létrehozható és ebből már könnyen megadhatjuk a partásellenőrző mátrxot: 1 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 0 G 0 1 1 0 0 1 0 0 sz H 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 Az u üzenethez tartozó kódszó: c( u) ug sz 0 1 1 0 1 0 1 0 A meghbásodott kódszó: c( u,e) 1 1 1 0 1 0 1 0 Ezt szorozzuk a partásellenőrző mátrx transzponáltjával, hogy előállítsuk a szndrómát: s c H T 0 0 1 1 Már csak az lehet kérdés, melyk egyhbás hbavektornak ez a szndrómája Természetesen annak, amelynek az első eleme 1 Érdemes megfgyeln, hogy az a kéthbás hbavektor, amelynek az utolsó két eleme 1, ugyanezt a szndrómát szolgáltatja 57 Hbajelzés polnomkóddal Tekntsük a (7,3) bnárs polnomkódot, amelynek generátorpolnomja 4 3 2 g( x) x x x 1! Állapítsuk meg, cklkus-e az a kód, amelyet ez a generátorpolnom állít elő! Kövessük végg a szsztematkus kód kódszavának előállítását, feltéve, hogy az üzenetvektor u 0 1 0! Vzsgáljuk meg a hbajelzés folyamatát s, a kódszó első btjének meghbásodását feltételezve! 4
A kód cklkussága tekntetében az a meghatározó, hogy a generátorpolnom osztója-e az x 7 1 polnomnak, vagy sem Az osztást elvégezve zérus a maradék (a hányados egyébként x 3 x 2 1), tehát a kód cklkus Az üzenetvektornak megfelelő polnom 2 1 0 u( x) x [pontosabban: 0 x 1 x 0 x ] A szsztematkus kódszavakat (kódpolnomokat) úgy képezzük, hogy a megfelelő mértékben "fel"tolt ( x nk -val megszorzott) üzenetpolnomot olyan függelékkel egészítjük k, amely bztosítja, hogy az eredmény osztható legyen a generátorpolnommal E függelék természetesen p x rem x nk u ( ( ) x ) g( x) 3 2 A számolást elvégezve p( x) 0x 1x 1x 1 adódk Így a keresett kódszó: c 0 1 0 0 1 1 1 Az első btjében hbás kódszónak megfelelő polnom: 6 5 2 c( x) x x x x 1 Képeznünk kell osztás maradékát a generátorpolnommal, s ez most 3 2 s( x) x x x 0 A szndróma nem zéruspolnom, tehát történt hba 58 Tömörítés a gyakorlatban A gyakorlatban alkalmazott tömörítő eljárások másként működnek, de hatékonyságukat aszmptotkusan esetükben s a forrás entrópája határozza meg Ennek bzonyítása nem túl egyszerű, így erről lemondunk, de az eljárások alapötletét smertetjük Tekntsük egy bnárs forrás valamely hosszú, n btes üzenetét! Tördeljük ezt az üzenetet balról jobbra haladva olyan szeletekre, amelyek valamelyk megelőző szelet és egyetlen követő bt együtteséből állanak, és nem egyeznek meg egyk megelőző szelettel sem! A szeleteket a sorszámukkal jelölve vlágos, hogy a dekódolás annyból fog állan, hogy az 1, 2, 3, stb sorszámú szeletekhez tartozó btsorozatokat egymás után másoljuk Az egyes szeleteknek megfelelő btsorozatokat egy táblázat adja meg, amely megmondja, hogy az egyes szeletek melyk szelet mlyen bttel való kegészítéseként keletkezett Maga a kódolt üzenet tkp éppen ez a táblázat Az, hogy eképpen az üzenetenket tömöríten lehet, azon múlk, mekkora a táblázat, hány szeletre tördelendő az üzenet Legyen ez a szám c( n)! Ekkor a táblázat eleme ld( c( n)) btes kódszavakkal azonosíthatóak, lletve a táblázat rovataban ld( c( n)) bttel egy korább szeletre, s egy bttel az aktuáls függelékre hvatkozunk Összesen tehát a táblázat rovataban c ( n) ld ( c( n)) 1 bt foglal helyet Bzonyították, hogy "tsztességes", H entrópájú források üzenetere c( n) ld ( c( n)) 1 H, n ha az üzenetek hossza tart a végtelenhez Példa: tekntsük a 00011100010001011110011010100010100000001 üzenetet! Végezzük el a szeletelést, állítsuk elő a kódolt szöveget jelentő táblázatot! 0 00 1 11 000 10 001 01 111 0011 010 100 0101 0000 0001 A táblázat: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 00 1 11 000 10 001 01 111 0011 010 100 0101 0000 0001 0,0 1,0 0,1 3,1 2,0 3,0 2,1 1,1 4,1 7,1 8,0 6,0 11,1 5,0 5,1 5
A kódolt üzenet tkp a táblázat harmadk sora A gyakorlatban persze még meg kell oldan néhány apró problémát (pl hogyan lehet ktaláln a kódolás elején, mekkora legyen a szeletazonosító kódszavak mérete, mt tegyünk az utolsó szelettel, stb), ezekre számos megoldás elképzelhető 6