1 / 15

Aritmetické kódování

Komprimace dat a kryptologie. Aritmetické kódování. Myšlenka: Jak zakódovat vstupní data do jediného čísla? Data se zakódují do zlomku n , 0 ≤ n < 1, n ∊R Bezztrátová komprese. Princip.

zena
Download Presentation

Aritmetické kódování

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Komprimace dat a kryptologie Aritmetické kódování

  2. Myšlenka: Jak zakódovat vstupní data do jediného čísla? Data se zakódují do zlomku n, 0 ≤ n < 1, n∊R Bezztrátová komprese Princip

  3. Podle pravděpodobnosti výskytu znaku je každému znaku přiřazena poměrná část intervalu <0,1). To je interval rozdělení znaků. Princip Kódování

  4. Potom postupně upřesňujeme počáteční interval <0,1), dokud není vyprázdněn vstup. Číslo n leží ve vypočítaném intervalu. • Zavedeme symboliku: • Horní hodnota intervalu … high • Spodní hodnota intervalu … low • Rozpětí intervalu … range Princip kódování

  5. Výpočet nových hranic intervalu pro jednotlivé znaky: high = low+ range*horní hodnota intervalu znaku low = low+ range* spodní hodnotaintervalu znaku Výpočet probíhá pro všechny symboly na vstupu. Princip kódování

  6. Číslo, které kóduje vstupní řetězec může být libovolné číslo z výsledného intervalu. Obvykle se bere to, které má nejkratší binární zápis. Princip kódování

  7. Chceme zakódovat řetězec „ace“. Máme např. abecedu se znaky a,b,c,d,e. Provedeme rozdělení pravděpodobnosti výskytu znaků do intervalu znaků <0,1). Příklad kódování

  8. Výpočet nových hranic intervalu pro každý znak. Výsledný interval: <0.195,0.210) Jako výslednou hodnotu vybereme např. n=0.20 Příklad kódování

  9. Při dekódování není potřeba předávat výsledný interval, stačí jen zvolené číslo n. Musíme mít ale k dispozici pravděpodobnosti výskytu znaků abecedy. Číslo n postupně upravujeme a při každém kroku k němu najdeme příslušný znak podle intervalu, ve kterém právě leží n. Nová hodnota n se vypočítá podle vztahu: n = (n – low) / range low, high … hodnoty intervalu, do kterého patří n Opakujeme tak dlouho, dokud není celý řetězec dekódován. Princip dekódování

  10. n = 0.20 Stanovíme jednotlivé znaky: Výsledný řetězec: „ace“ Příklad dekódování

  11. Problém: nekonečně dlouhý řetězec povede na interval s nekonečně velkou přesností. • Je potřeba nekonečně mnoho bitů pro uložení. • Řešení: • V proměnných low a high se ukádá jen několik posledních desetinných míst, zbytek je zapsán na výstupu. • V době kdy se rovnají MSB (nejvýznamnější bity) horní i dolní hranice intervalu, vypíšeme hotnotu na výstup a posuneme vlevo obě proměnné o jeden bit. Aspekty implementace

  12. Pokud se MSB nerovnají, může nastat další další problém – podtečení. V situaci, kdy jsou hranice intervalu velmi blízko a stále nemají stejný MSB, mění se dále už jen ostatní bity, nikoli MSB – nedojde k posunu bitů vlevo a přesnost se ztratí. Podtečení nastává v případě, že dva MSB v low a se liší od jejich protějšků v high. Podtečení

  13. Řešení: • Posun bitů vlevo od druhého bitu. • Např.: • low = 0111010111001101high= 1011001001001100 podtečení posun: low = 0110101110011010high= 1110010010011001 podtečení

  14. begin spočti četnosti zdrojových jednotek output(četnosti) interval I := nový interval 0..1 rozděl I podle četnosti jednotek readSymbol(X) while (X!=EOF) do begin if (MSB(low) == MSB(high)) then begin output(MSB) případné zahozené číslice na výstup shiftlefthighi low end else begin if (nebezpečí podtečení) then begin shiftlefthighi lowod druhé pozice end end spočti nové low a high readSymbol(X) end output(zbytek) end Pseudokód

  15. Srovnatelné s Huffmanovým kódováním Komprese trvá déle, ale má lepší kompresní poměr. JPEG JBIG2 Použití

More Related