Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

8.3.2001SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Aritmetické kódování.

Podobné prezentace


Prezentace na téma: "8.3.2001SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Aritmetické kódování."— Transkript prezentace:

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í


Stáhnout ppt "8.3.2001SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Aritmetické kódování."

Podobné prezentace


Reklamy Google