Kódovanie prenosu I. Ján Karabáš KM FPV UMB 20. november 2012 J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 1 / 13
Definície Abeceda, slovo, kódovanie Abeceda je konečná postupnosť symbolov (znakov), A = {a 1, a 2,..., a n}. Binárna abeceda: A = {0, 1}; ternárna abeceda A = {0, 1, 2}; slovenská abeceda A = {a, á,..., Ž} (44/46 znakov); ASCII 256 znakov. Slovo je konečná neprázdna postupnosť, w A +, znakov z danej abecedy. Dĺžka slova w = k > 0. Abeceda mohutnosti n obsahuje n slov dĺžky 1, n 2 slov dĺžky 2, n 3 slov dĺžky 3... Skladanie slov je nekomutatívna operácia w, v A + : w.v = w 1w 2... w k v 1v 2... v l ; wv A +. Kódovanie je zobrazenie f : A B. Predpokladáme, že f je prostá funkcia. A zdrojová abeceda (pozostáva zo zdrojových znakov); B kódová abeceda (pozostáva z kódových znakov). Množinu {f (a) : a A} nazývame kód. Jednoznačne dekódovateľné kódovanie nech f : A B je kódovanie. Kódovanie f je jednoznačne dekódovateľné, ak f : B A je prostá funkcia. Kódovanie správ platí f (w) = f (w 1).f (w 2)... f (w k ) slová kódujeme po znakoch. Navyše, kódovanie rozširujeme na skladanie: f (wv) = f (w).f (v). J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 2 / 13
Definície Blokové vs. prefixové kódovanie Blokové kódovanie je kódovanie f také, že a A : f (a) = k. Napr. ASCII, kódovanie čísel v pamäti počítača... Prefixové kódovanie je kódovanie f také, že a A b A : f (a) = f (b).w, w B. Napr. Huffmanov kód, n-árne kódy získané cez pestované n-árne stromy... a f 1(a) 0 00110000 1 00110001 2 00110010 3 00110011 4 00110100 5 00110101 6 00110110 7 00110111 8 00111000 9 00111001 a f 2(a) 0 000 1 100 2 001 3 101 4 010 5 110 6 0110 7 1110 8 0111 9 1111 a f (a) 0 000 1 001 2 002 3 010 4 011 5 012 6 020 7 021 8 022 9 100 a f (a) 0 00 1 01 2 02 3 10 4 11 5 12 6 20 7 21 8 220 9 221 ASCII Prefixový binárny kód Ternárny kód Prefixový ternárny kód J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 3 / 13
Najkratší prefixový kód Existencia a realizovateľnosť prefixového kódu Majme kódovanie f : A B, kde A = k a B = n. Označme l p = f (a p). Usporiadajme zdrojové znaky tak, že a 1 a 2... a k l 1 l 2... l k. Pri konštrukcii prefixového kódu zvolíme slovo w 1 = f (a 1). Pokračujeme voľbou slova w 2 = f (a 2) tak, že w 2 neobsahuje w 1 ako prefix. Zakázaných je celkovo n l 2 l 1 slov dĺžky l 2. Pri výbere slova w 3 = f (a 3), dĺžky l 3 nemožno použiť n l 3 l 1 + n l 3 l 2 slov dĺžky l 3. Naopak, ak existuje prefixový kód, potom n l 3 l 1 + n l 3 l 2 + 1 n l 3. Analogicky iterujeme túto nerovnosť pre l 4,..., ł k. Veta 1 (O existencii prefixového kódu) Nech f : A B je kódovanie a nech B = n. Prefixové kódovanie f je prosté ak pre dĺžky kódových slov l 1, l 2,..., l k platí Kraftova nerovnosť k n l i 1. i=1 Veta 2 (McMillan, O realizovateľnosti prefixového kódu) Pre každé jednoznačne dekódovateľné kódovanie platí Kraftova nerovnosť. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 4 / 13
Najkratší prefixový kód Najkratší prefixový kód Redukovaná abeceda Nech A je abeceda, potom ak p i je pravdepodobnosť výskytu znaku a i v správe A A 0, 1 = {(a i, p i) : a i A, p i 0, 1 }. Priemerná dĺžka slova l(w) = a i w aipi. Najkratšie kódovanie nad n-znakovou abecedou je f : A B také, že l(w) = minw B { l(g(w)) : g je ľubovoľné kódovanie A B }. Veta 3 Nech f : A B je kódovanie a g : A B je kódovanie redukovanej abecedy g : (a i, p i) f (a i). Ak g je najkratšie kódovanie redukovanej abecedy A, potom f je najkratšie kódovanie abecedy A. Veta 4 Huffmanov kód je najkratší prefixový binárny kód. Rozšírené Huffmanovo kódovanie Majme redukovanú abecedu A. Zostrojíme pestovaný orientovaný strom stupňa k: Koreň stromu nemá žiadnu prichádzajúcu hranu; každý iný vrchol má práve jednu prichádzajúcu hranu; z každého vrchola vedie najviac k 1 odchádzajúcich hrán. Ľubovoľnému vrcholu priradíme ohodnotenie rovné súčtu pravdepodobností jeho potomkov. Každý list je ohodnotený (a i, p i). Takéto kódovanie je špeciálnym prípadom aritmetického kódovania (range coding). J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 5 / 13
Detekcia chýb prenosu Vplyv šumu Šum prostredia je náhodná funkcia n taká, že pre dané kódovanie f : A B dochádza 1 k zámene n(f (a)) = f (b), k deštrukcii kódu, tj. x A : n(f (a)) f (x), alebo 2 k poruche synchronizácie kód n(x) bol prijatý, hoci f (a) nebol odoslaný a naopak. Chyby detegujúci kód (detekčný kód) dokáže objaviť chyby spôsobené šumom. Takéto kódy možno použiť v situácii, keď správu možno vyslať opakovane. Samoopravný kód dokáže eliminovať vplyvy šumu spôsobujúce zámeny znakov. Napríklad vyslané slovo jasno sme prijali ako jaano. Čo však s prijatým slovom jasnn? Formálne jazyky neumožňujú semantickú opravu, túto vlastnosť musíme do nášho kódu pridať. Cenou je zvýšenie redundancie správy. Samoopravné kódy sú zvyčajne menej efektívne ako detekčné kódy. Detegujúce a samoopravné kódy budú exkluzívne blokové. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 6 / 13
Detekcia chýb prenosu Detekcia chýb Nech f : A B je kódovanie. Množina B k = {b 1b 2... b k : b i B, i = 1, 2,..., k} je množina vsšetkých slov dĺžky k nad abecedou B. Množina (blokových) kódových slov je K = Im(f ) B k. Množina B k K je množina nekódových slov. Chyba nastane, ak prijmeme slovo z w B k K. Ak také slovo prijmeme, hovoríme, že sme objavili chybu. V opačnom prípade k chybe buď nedošlo, alebo sme ju neobjavili (!). t-násobná chyba vzniká, ak sa slovo w líši od vyslaného slova w v t znakoch. Kód K deteguje t-násobné chyby, ak pri vzniku ľubovoľnej t-násobnej chyby na slove w je slovo w B k K. Kód ( 5 2) je binárny kód dĺžky 5, K {0, 1} 5 taký, že každý kód obsahuje práve dve jednotky a f (a) a f (a) 0 00011 5 10100 1 00101 6 11000 2 00110 7 10001 3 01010 8 10010 4 01100 9 10100 Kód ( 5 2) deteguje jednoduché chyby (1-násobné chyby). J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 7 / 13
Detekcia chýb prenosu Hammingova vzdialenosť Hammingova vzdialenosť je pre slová w, v B k definovaná ako h(k) = w, v = {i : w i v i, i 1, 2,..., k}. Kód ( 5 2) má pre ľubovoľné dve kódové slová K Hammingovu vzdialenosť h(k) = 2. Pozorovanie 5 Blokový kód s minimálnou Hammingovou vzdialenosťou d(k) deteguje t-násobné chyby pre všetky t < d, ale nie je schopný detegovať všetky d-násobné chyby. Paritný kód je bežný binárny kód, kde ku kódu znaku pridávame paritný bit tak, aby parita (parita počtu jedničiek) výsledného slova bola nulová a f (a) a f (a) 0 00000 5 01010 1 00011 6 01100 2 00101 7 01111 3 00110 8 10001 4 01001 9 10010 Paritný kód má minimálnu Hammingovu vzdialenosť d(k) = 2; je schopný detegovať len jednoduché chyby. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 8 / 13
Detekcia chýb prenosu Repetičný a koktavý kód V prípade veľkého šumu každý znak abecedy B zopakujeme n-krát. Touto konštrukciou dostávame n-repetičný kód. Hammingova vzdialenosť dvoch slov v n-repetičnom kóde K je h(k) = n. Minimálna Hammingova vzdialenosť n-repetičného kódu d(k) = n. Dôsledok 6 n-repetičný kód dokáže detegovať (n 1)-násobné chyby. 2-repetičný kód nazývame koktavý kód. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 9 / 13
Oprava chýb Metrické vlastnosti Hammingovej vzdialenosti Binárna funkcia δ : M 2 R je metrika ak 1 δ(x, y) 0 pre všetky x, y M ; špeciálne δ(x, x) = 0; 2 δ(x, y) = δ(y, x); 3 x, y, z M : δ(x, z) δ(x, y) + δ(y, z). Hammingova vzdialenosť h(k) je metrika na množine B k. Kód K opravuje t-násobné chyby, ak pri vyslaní ľubovoľného kódovaného slova w má prijaté kódové slovo v, pri t-násobnej chybe Hammingovu vzdialenosť h(v, w) < d(k). Tj. w K, v B k : h(v, w) < h(x, w); x K, x w. Pozorovanie 7 Blokový kód K s minimálnou (Hammingovou) vzdialenosťou d = d(k) opravuje t-násobné chyby pre všetky t < d 2. ( ) t < d, h(w, v) = t < d a x K : h(w, x) d. Potom 2 2 h(w, x) h(w, v) + h(v, x), tj. h(x, v) h(x, w) h(w, v) d h(w, v) d. 2 ( ) Majme slová w, w K, h(w, w ) = d. Skonštruujme slovo v = v 1v 2... v k, kde v i = w i, ak i je párne, inak v i = w i. Ak v = 2l, potom h(w, v) = d d 1, inak h(w, v) =. 2 2 J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 10 / 13
Oprava chýb Príklady samoopravných kódov 5-repetičný kód opravuje dvojnásobné chyby. Pokiaľ vyšleme slovo w = aaaaa a nastane chyba na dvoch miestach, nadpolovičná väčšina znakov slova určuje jeho kód a slovo w dekódujeme ako a. Všeobecne, k-repetičné kódy opravujú t-násobné chyby pre t < k 2. Z dôvodu zachovania ostrej nerovnosti je vhodné voliť nepárne k pre k-repetičné kódy. Paritný binárny kód neopravuje ani jednoduché chyby; pokiaľ zistíme paritu 1, vieme, že doško k poškodeniu slova, ale nemáme informáciu o mieste vzniku chyby. 2D-paritný binárny kód je binárna matica (a i,j) k+1,l+1, kde stĺpec a k+1,1 nesie paritný bit i-teho znaku a riadok a 1,l+1 nesie paritný bit j-teho stĺpca. Bit a l+1,k+1 nesie paritu prenášanej správy. A 0x41 0 1 0 0 0 0 0 1 0 h 0x68 0 1 1 0 1 0 0 0 1 o 0x6f 0 1 1 0 1 1 1 1 0 j 0x6a 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 0 0 1 2D-paritný binárny kód je schopný opraviť jednoduché chyby. Ak dôjde k preklopeniu bitu a p,q, potom sa zmení parita p-teho stĺpca a q-tho riadku. Tak isto sa zmení celková parita kódu. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 11 / 13
Efektivita samoopravných kódov Informačné a kontrolné znaky Nech K B n je blokový kód dĺžky n. Ak existuje prosté zobrazenie ϕ : B k K, k < n, hovoríme, že K má k informačných a n k kontrolných znakov. Zobrazenie ϕ sa nazýva kódovanie informačných znakov. Blokový kód K B n sa nazýva systematický, pokiaľ exituje k < n také, že ϕ : a 1a 2... a k a 1a 2... a k a k+1... a n je dobre definované prosté zobrazenie. Kódovanie ϕ : B k K sa nazýva systematické kódovanie. Pozorovanie 8 Minimálna Hammingova vzdialenosť d systematického kódu nemôže prekročiť počet n k kontrolných znakov viac ako o jeden, tj. d n k + 1. Nech K B n. Zvoľme ľubovoľný prefix w = a 1a 2... a k 1 a označme K 0 = {w : w K, w = w x}. Potom minimálna vzdialenosť d 0 dvoch kódov z K 0 je d 0 n (k 1), pretože ľubovoľné slová majú aspoň k 1 spoločných znakov. Keďže K 0 K d d 0. Pri tvorbe samoopravných kódov sa pre zafixovanú dĺžku kódového slova stretávame s dvomi protichodnými požiadavkami: potrebujeme maximalizovať d, aby sme dokázali opraviť čo najviac chýb vs. potrebujeme maximalizovať k, tj. kapacitu kódu. Informačný pomer kódu je R(K) = k ; pre optimálny kód sa pohybuje R(K) blízko 1. n J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 12 / 13
Efektivita samoopravných kódov Informačné a kontrolné znaky Kód ( 5 2) nemá oddelené informačné a kontrolné znaky; nie je systematický. p-repetičný kód má 1 informačný znak a p 1 kontrolných znakov; je systematický (k = 1). Paritný kód má k 1 informačných znakov a 1 kontrolný znak; je systematický (k = n 1) 2D-paritný kód má l.k informačných znakov a l + k + 1 kontrolných znakov; nie je systematický. J. Karabáš (FPV UMB) Bezpečnostné kódy Kodo ZS 12/13 13 / 13