Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilAlžběta Ševčíková
1
8.3.2001SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Aritmetické kódování
2
8.3.2001SWI072 Algoritmy komprese dat2 Aritmetické kódování u C.Shannon (1948) u P.Elias (1960?), Jelinek(1968) u Pasco, Rissanen (1976) u Pennebaker, Mitchell,Langdon,Arps (198?) Q-kodér (IBM) u Witten,Neal,Cleary (1987)
3
8.3.2001SWI072 Algoritmy komprese dat3 Aritmetické kódování - příklad u Zakódujeme zprávu BILL GATES
4
ABEGILST 00.10.20.30.40.5 0.60.80.91
5
8.3.2001SWI072 Algoritmy komprese dat5 Kódování u d:=0 ; h:=1; read(znak) while znak EOF do délka-intervalu := h - d d := d + délka-intervalu * dolní-mez(znak) h := d + délka-intervalu * horní-mez(znak) read(znak) od u return d
6
8.3.2001SWI072 Algoritmy komprese dat6 Dekódování u d:=0 ; h:=1 u repeat u délka-intervalu := h - d najdi znak takový, aby dolní-mez(znak) (kod-d)/ délka-intervalu < horní-mez(znak) u output(znak) u d := d + délka-intervalu * dolní-mez(znak) u h := d + délka-intervalu * horní-mez(znak) u until není dekódováno celé vstupní slovo ABEGILST 00.10.20.30.40.5 0.60.80.91 kod = 0.2572167752
7
8.3.2001SWI072 Algoritmy komprese dat7 Implementace v celočíselné aritmetice interval 0.11111111 01 1.00000000 0.00000000 interval d h d, h-1
8
8.3.2001SWI072 Algoritmy komprese dat8 Implementace v celočíselné aritmetice u abeceda A = {1, 2,…, k} u f i = četnost i-tého znaku ve zprávě Z= z 1 z 2 … z n
9
8.3.2001SWI072 Algoritmy komprese dat9 Příklad - kódování u zakódujeme vstup acba
10
8.3.2001SWI072 Algoritmy komprese dat10 Příklad - kódování u zakódujeme vstup acba u w=8 d (0) = 0 = (00000000) 2 h (0) = 255 = (11111111) 2 0 255
11
8.3.2001SWI072 Algoritmy komprese dat11 Příklad - kódování u zakódujeme vstup acba u w=8 d (0) = 0 = (00000000) 2 h (0) = 255 = (11111111) 2 0 255 0 203 255
12
8.3.2001SWI072 Algoritmy komprese dat12 Příklad - kódování acba - 2.krok 0 203 255
13
8.3.2001SWI072 Algoritmy komprese dat13 Příklad - kódování acba - 2.krok 0 203 255 0 203 255 167
14
8.3.2001SWI072 Algoritmy komprese dat14 Příklad - kódování acba - 2.krok u output(1); d (2) <<= 1 d (2) = (01001110) 2 h (2) << 1; h (2) ++ h (2) = (10010111) 2 0 203 255 0 203 255 167 0 151 255 78
15
8.3.2001SWI072 Algoritmy komprese dat15 Příklad - kódování acba - 2.krok u d (2) = (01001110) 2 h (2) = (10010111) 2 0 151 255 78
16
8.3.2001SWI072 Algoritmy komprese dat16 Příklad - kódování acba - 2.krok u d (2) = (01001110) 2 h (2) = (10010111) 2 d (2) = (01111111) 2 h (2) = (10000000) 2 0 151 255 78 !
17
8.3.2001SWI072 Algoritmy komprese dat17 Příklad - kódování acba - 2.krok u d (2) = (01001110) 2 h (2) = (10010111) 2 d (2) = (01111111) 2 h (2) = (10000000) 2 d (2) = (01001110) 2 d (2) = (00011100) 2 = 28 h (2) = (10010111) 2 h (2) = (10101111) 2 = 175 u zavedeme čítač, inicializace čítač := 0 čítač ++ 0 151 255 78 !
18
8.3.2001SWI072 Algoritmy komprese dat18 Příklad - kódování acba - 3.krok u d (2) = (00011100) 2 = 28 h (2) = (10101111) 2 = 175 u 0 175 255 28 u output(1); d (3) <<= 1 d (3) = (00100100) 2 = 36 h (3) <<= 1; h (3) ++ h (3) = (00101001) 2 = 41 u output(0); čítač -- u output(0); d (3) <<= 1 d (3) = (01001000) 2 = 72 h (3) <<= 1; h (3) ++ h (3) = (01010011) 2 = 83
19
8.3.2001SWI072 Algoritmy komprese dat19 Příklad - kódování acba - 3.krok u d (3) = (01001000) 2 = 72 h (3) = (01010011) 2 = 83 u output(0); d (3) <<= 1 d (3) = (10010000) 2 = 144 h (3) <<= 1; h (3) ++ h (3) = (10100111) 2 = 167 u output(1); d (3) <<= 1 d (3) = (00100000) 2 = 32 h (3) <<= 1; h (3) ++ h (3) = (01001111) 2 = 79 u output(0); d (3) <<= 1 d (3) = (01000000) 2 = 64 h (3) <<= 1; h (3) ++ h (3) = (10011111) 2 = 159 u čítač ++ ;d (3) = (00000000) 2 = 0 h (3) = (10111111) 2 = 191
20
8.3.2001SWI072 Algoritmy komprese dat20 Příklad - kódování acba - 4.krok u d (3) = (00000000) 2 = 0 h (3) = (10111111) 2 = 191
21
8.3.2001SWI072 Algoritmy komprese dat21 Kódování - popis expanze intervalu E 1 : 0, 0.5) 0, 1) E 1 (x) = 2x 0 128 255 0 if d,h then output(0) while čítač >0 do output(1) čítač -- od d := 2d; h := 2h + 1 fi
22
8.3.2001SWI072 Algoritmy komprese dat22 Kódování - popis expanze intervalu E 2 : 0.5, 1) 0, 1) E 2 (x) = 2(x-0.5) 255 0 0 128 255 if d,h then output(1) while čítač >0 do output(0) čítač -- od d := 2d; h := 2h + 1 fi
23
8.3.2001SWI072 Algoritmy komprese dat23 Kódování - popis expanze intervalu E 3 : 0.25, 0.75) 0, 1) E 3 (x) = 2(x-0.25) 0 255 0 128 255 64 192 if d,h then čítač++ d := 2d - 2 w-1 ; h := 2h - 2 w-1 + 1 fi
24
8.3.2001SWI072 Algoritmy komprese dat24 Kódování v celočíselné aritmetice u d:=0 ; h:= 2 w -1; read(znak)
25
8.3.2001SWI072 Algoritmy komprese dat25 Kódování v celočíselné aritmetice u d:=0 ; h:= 2 w -1; read(znak) while znak EOF do while lze provést expanzi intervalu do expanze d, h+1) read(znak) od u return d
26
8.3.2001SWI072 Algoritmy komprese dat26 Dekódování v celočíselné aritmetice u Do kod načti w bitů kódového slova u d := O ; h := 2 w -1 u repeat u rozsah := h - d + 1 u index := ((kod - d +1) n - 1)/ rozsah u najdi znak takový, aby n(znak-1) index < n(znak) u output(znak) u aktualizuj d, h pomocí vzorců z procedury kódování (předchozí stránka) u while lze provést expanzi do expanze d, h, kodu (bitový posuv, na místo nejméně významného bitu se doplní 0 pro d, 1 pro h, na do kodu se načte další bit kódového slova) od u until není dekódováno celé vstupní slovo.
27
8.3.2001SWI072 Algoritmy komprese dat27 Implementační poznámky u Velikost četností –pracujeme v intervalu 0, 2 w ) –n - délka vstupu (=součet četností všech znaků) –1/4 2 w n u Ztráta přesnosti při celočíselných operacích Witten,Neal & Cleary uvádějí empirické údaje –zaokrouhlovací chyby prodlouží délku kódu o 10 -4 bitu/symbol 0,002% délky vstupu –škálování četností: pro vstup délky 10 5 až 10 6 B 0.25% délky vstupu
28
8.3.2001SWI072 Algoritmy komprese dat28 Implementační poznámky u Ukončení znakem EOF –zakóduj EOF –pro jednoznačnost output(01) nebo output(10) dle toho, zda (d,h obsahuje 2. či 3. čtvrtinu intervalu –doplň na hranici byte (max 7 bitů) Použití speciálního znaku EOF pro zakódování vstupu délky t při použití celočíselné aritmetiky v intervalu 0, N) prodlouží délku kódu celkem o < 8t/(N ln2) + log 2 N + 7 bitů.
29
8.3.2001SWI072 Algoritmy komprese dat29 Adaptivní verze u Aktualizace kumulovaných četností n(x) u Pro snížení počtu aktualizací je možno pole upořádat dle četností u Periodické škálování četností –interval 0, 8B –if n=2B then for all i do f i := f i /2
30
8.3.2001SWI072 Algoritmy komprese dat30 Další celočíselné implementace aritmetického kódování u Pennebaker, Mitchell,Langdon,Arps (1988) Q-kodér u P.G.Howard (1992) Kvaziaritmetické kódování
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.