proseminar datenkompression thema : arithmetische kodierung 18.03.2002eric bodden, malte clasen,...
TRANSCRIPT
![Page 1: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/1.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 1
Proseminar DatenkompressionThema : Arithmetische Kodierung
Arithmetische Kodierung
![Page 2: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/2.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 2
Proseminar DatenkompressionThema : Arithmetische Kodierung
Motivation
Ziel des Verfahrens:• beliebige Daten verlustfrei komprimieren
Mittel und Weg:• Sequenzen durch Codes ersetzen
Methode:• Symbole durch Codes ersetzen (Huffman)• Sequenzen durch Codes ersetzen (Arithmetische
Kodierung)• Kodierung im Intervall [0,1)
![Page 3: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/3.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 3
Proseminar DatenkompressionThema : Arithmetische Kodierung
Geschichte
• 1960: Elias, Abramson – Erste Ansätze
• 1976: Pasco, Rissanen – Beweis, das endlich genaue Arithmetik ausreicht
• 1980: Rubin, Guazzo, Rissanen, Langdon - Erster praktikabler Algorithmus• Scaling• FIFO-Prinzip• Erste hardwarenahe Realisierungen
![Page 4: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/4.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 4
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: Alphabet, Symbol, Sequenz
Alphabet:• endliche, nichtleere Menge
z.B. A = {a,b,c,d}
Symbol:• Element des Alphabets
z.B. a A
Sequenz:• Symbolfolge
z.B. S = abaabcda A*
![Page 5: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/5.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 5
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: Modell
Modell:
• Abbildung A [0,1): ai PM(ai)
• PM(ai) ist angenommene Wahrscheinlichkeit
• Nicht zwingend gleich mit P(ai), der korrekten Wahrscheinlichkeit
• Im Folgenden: Annahme eines einfachen Modells
![Page 6: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/6.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 6
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Modell
a 6,51 % h 4,76 % o 2,51 % v 0,67 %
b 1,89 % i 7,55 % p 0,79 % w 1,89 %
c 3,06 % j 0,27 % q 0,02 % x 0,03 %
d 5,08 % k 1,21 % r 7,00 % y 0,04 %
e 17,40 % l 3,44 % s 7,27 % z 1,13 %
f 1,66 % m 2,53 % t 6,15 %
g 3,01 % n 9,78 % u 4,35 %
![Page 7: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/7.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 7
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: Entropie
Entropie H ist Maß für Informationsgehalt einer Sequenz S
Definition:
Beachte: [H] = Bits / Symbol
![Page 8: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/8.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 8
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: Modellabhängige Entropie
Problem: Korrekte Wahrscheinlichkeiten nicht bekannt
Also Differenzierung nötig
Modellabhängige Entropie
Definition:
![Page 9: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/9.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 9
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Entropie (1)
Angepaßte Entropie der Sequenz „abaabcda“ unter dem Modell
a=50%, b=25%, c=12,5%, d=12,5%. (Modell mit korrektem PM)
![Page 10: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/10.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 10
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Entropie (2)
Angepaßte Entropie der Sequenz „abaabcda“ unter dem Modell
a=12,5%, b=12,5%, c=50%, d=25% (Modell mit schlechtem PM)
![Page 11: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/11.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 11
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: Kodierer/Dekodierer
Kodierer:
• Algorithmus, der eine gegebene Sequenz S kodiert
• Ausgabe: Code(S)
Dekodierer:
• Algorithmus, der S wieder aus Code(S) herstellt
![Page 12: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/12.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 12
Proseminar DatenkompressionThema : Arithmetische Kodierung
Einführung: Kodierung
• Relative Häufigkeiten aller Symbole über Alphabet A ergeben addiert 1
• Einzelne relative Häufigkeiten können als Teilintervalle von [0,1) aufgefasst werden
• Logische Konsequenz: Überschneidungsfreies Verteilen der Teilintervalle über das Gesamtintervall
• Resultat: Partition von [0,1)
![Page 13: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/13.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 13
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Grundidee Intervallbildung
Idee: Wahrscheinlichkeiten werden kumuliert
Dies liefert Teilintervall von [0,1) für jedes Symbol des Alphabets
a cb d
0 0,5 0,75 0,875 1
![Page 14: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/14.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 14
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Kumulierte Wahrscheinlichkeiten
Intervall aufteilen durch kumulierte Wahrscheinlichkeiten
dazu Definition von K(ak) für ak A:
![Page 15: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/15.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 15
Proseminar DatenkompressionThema : Arithmetische Kodierung
Intervallschachtelung
• Für das erste Symbol ordnen wir diesem ein Teilintervall zu
• Für das zweite betrachten wir dann dieses Teilintervall und partitionieren dies
• Iterieren bis Sequenzende...
• Ergebnis: Teilintervall von [0,1)
![Page 16: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/16.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 16
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Die Grenzen low und high
Bezeichnung der Intervallgrenzen:
•untere Grenze: low
•obere Grenze: high
Grenzen werden im weiteren Verlauf nach dem Lesen jeden Symbols aktualisiert:
![Page 17: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/17.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 17
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Baumartige Partitionierung
daraus resultiert: Baumartige Partitionierung von [0,1)
a
b c
d
ab c
d ab c
d ab c
d ab c
d
0 1
. . .. . . . . . . . .
s1
s2
s3...
![Page 18: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/18.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 18
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Beispiel (1)
0
1
0,5
d
c
b
a
d
c
b
a
0
0,5
0,25
d
c
b
a
0,25
0,3125
0,375d
c
b
a
0,25
0,28125
0,3125d
c
b
a
0,25
0,265625
0,28125
Eingabe a Eingabe b Eingabe a Eingabe a
![Page 19: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/19.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 19
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Beispiel (2)
d
c
b
a
0,25
0,265625
0,28125d
c
b
a
0,265625
0,26953125
0,2734375d
c
b
a
0,271484375
0,2719726563
0,2724609375d
c
b
a
0,2723388672
0,2723999024
0,2724609375
0,2723388672
0,2723693848
0,2723999024
Zie
linte
rva
ll
d
c
b
a
Eingabe b Eingabe c Eingabe d Eingabe a
![Page 20: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/20.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 20
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung in R: Algorithmus in Pseudocode
low =0;
high=1;
do {
temp = lies_zeichen();
low‘ = Modell-> untere_Grenze(temp,low,high);
high‘ = Modell-> obere_Grenze (temp,low,high);
low = low‘;
high = high‘;
} while ( !ende_der_sequenz() );
return( wert_im_intervall(low,high) );
![Page 21: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/21.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 21
Proseminar DatenkompressionThema : Arithmetische Kodierung
Abschluß der Codesequenz
Sequenzende muß dem Dekodierer mitgeteilt werden
Möglichkeiten:
• Intervallgrenzen übertragen
• Länge der Sequenz übertragen
• Endsymbol mit minimaler Wahrscheinlichkeit im Modell bereitstellen
![Page 22: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/22.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 22
Proseminar DatenkompressionThema : Arithmetische Kodierung
Einführung: Dekodierung
• Idee: Schritte des Kodierers nachvollziehen
• Schritte laufen genau parallel zum Kodierungsvorgang
• Eingabe: Code in Form einer Zahl aus dem Zielintervall des Kodierers
• Verfahren: Überprüfen, in welches Teilintervall diese Zahl fällt, Teilintervall neu aufteilen und iterieren bis Sequenzende erreicht
![Page 23: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/23.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 23
Proseminar DatenkompressionThema : Arithmetische Kodierung
Dekodierung in R: Beispiel (1)
0
1
0,5
d
c
b
a
d
c
b
a
0
0,5
0,25
d
c
b
a
0,25
0,3125
0,375d
c
b
a
0,25
0,28125
0,3125d
c
b
a
0,25
0,265625
0,28125
Ausgabe a Ausgabe b Ausgabe a Ausgabe a
![Page 24: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/24.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 24
Proseminar DatenkompressionThema : Arithmetische Kodierung
Dekodierung in R: Beispiel (2)
d
c
b
a
0,25
0,265625
0,28125d
c
b
a
0,265625
0,26953125
0,2734375d
c
b
a
0,271484375
0,2719726563
0,2724609375d
c
b
a
0,2723388672
0,2723999024
0,2724609375
0,2723388672
0,2723693848
0,2723999024
Zie
linte
rva
ll
d
c
b
a
Ausgabe b Ausgabe c Ausgabe d Ausgabe a
![Page 25: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/25.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 25
Proseminar DatenkompressionThema : Arithmetische Kodierung
Dekodierung in R: Algorithmus in Pseudocode
Eingabe: „Zahl“
seq ='';low =0;high =1;do{
low‘ = modell->untere_grenze(Zahl,low,high);high‘ = modell->obere_grenze (Zahl,low,high);low = low‘;high = high‘;seq .= modell->symbol_zu_intervall(low,high);
}while ( !ende_der_sequenz() );return(seq);
![Page 26: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/26.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 26
Proseminar DatenkompressionThema : Arithmetische Kodierung
Zusammenfassung
Bisher:
• Kodierung über reellen Zahlen
• [0,1) in Teilintervalle aufteilen
• sukzessive Intervalle aufziehen
Problem:
• unendliche Genauigkeit vorausgesetzt
![Page 27: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/27.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 27
Proseminar DatenkompressionThema : Arithmetische Kodierung
Kodierung mittels Integers (Implementierung)
Warum Integers?• keine unendlichen reellen Zahlen im Rechner• Integer in einfachen CPU schneller als Float• geringer Speicherbedarf
Konsequenz• diskretes Intervall: [0,max_int] , max_int N• max_int: größter darstellbarer Integerwert
![Page 28: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/28.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 28
Proseminar DatenkompressionThema : Arithmetische Kodierung
Die Wahrscheinlichkeitsgrenzen low_count und high_count
Wahrscheinlichkeitsgrenzen entsprechend anpassen:
low_count = low * total
high_count = high * total
total = Summe der
Häufigkeiten der Symbole
1
0
low
high
total
0
low_count
high_count
![Page 29: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/29.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 29
Proseminar DatenkompressionThema : Arithmetische Kodierung
Der Kodierer
3 statische Variablen• mLow = untere Grenze (0)• mHigh = obere Grenze (max_int)• mStep = Schrittweite
Interface
void Encoder( unsigned int low_count,
unsigned int high_count,
unsigned int total );
![Page 30: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/30.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 30
Proseminar DatenkompressionThema : Arithmetische Kodierung
Grenze
0
m Low
m H ighm ax_ in t
0
low _count
h igh_count
tota l
a
b
c
0
m Low
m H igh
m ax_ in t
d
![Page 31: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/31.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 31
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Kodierung
„a“:Encode( 0, 4, 8 ); [Pa=4,Pb=2,Pc=1,Pd=1]
mStep = ( mHigh - mLow + 1 ) / total;= ( 127 - 0 + 1) / 8= 128 / 8 = 16
mHigh = mLow + mStep * high_count - 1;= 0 + 16 * 4 - 1= 64 – 1 = 63
mLow = mLow + mStep * low_count;= 0 + 16 * 0 = 0
![Page 32: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/32.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 32
Proseminar DatenkompressionThema : Arithmetische Kodierung
Der Dekodierer
Interface:
Wahrscheinlichkeitsintervall bestimmen
uint Decode_Target( unsigned int total );
Encoder nachbilden
void Decode( unsigned int low_count,
unsigned int high_count );
![Page 33: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/33.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 33
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Dekodierung (1)
Decode_Target( 8 ); [Pa=4,Pb=2,Pc=1,Pd=1]
mStep = ( mHigh - mLow + 1 ) / total;= ( 127 - 0 + 1 ) / 8= 128 / 8 = 16
value = ( mBuffer - mLow ) / mStep;= ( 40 - 0 ) / 16= 40 / 16 = 2return value; // 2 [0,4) = „a“
![Page 34: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/34.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 34
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Dekodierung (2)
Decode( 0, 4 ); [Pa=4,Pb=2,Pc=1,Pd=1]
mHigh = mLow + mStep * high_count - 1;= 0 + 16 * 4 - 1= 64 – 1 = 63
mLow = mLow + mStep * low_count;= 0 + 16 * 0 = 0
![Page 35: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/35.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 35
Proseminar DatenkompressionThema : Arithmetische Kodierung
Problem: Begrenzt genaue Arithmetik
Problem:
• Bei bisherigem Verfahren wird betrachtetes Intervall beliebig klein.
• Folge: total > mHigh – mLow
• also: (mHigh – mLow + 1) / total = 0
![Page 36: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/36.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 36
Proseminar DatenkompressionThema : Arithmetische Kodierung
Lösung: Skalierung des Intervalls
Aber:• Führende Stellen von mHigh und mLow gleich, also
unveränderlich
Also:• Führende Stellen schon senden/speichern• Intervall entsprechend vergrößern
Mittel dazu:• Skalierungsfunktionen
![Page 37: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/37.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 37
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: E1-Skalierung
while( mHigh < g_Half )
{
SetBit( 0 );
mLow = mLow * 2;
mHigh = mHigh * 2 + 1;
}
* 2 entspricht Shift nach links0
1
0,5
0
0,5
0,25
![Page 38: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/38.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 38
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: E2-Skalierung
while( mLow >= g_Half )
{
SetBit( 1 );
mLow = 2*(mLow-g_Half);
mHigh = 2*(mHigh-g_Half)+1;
}
0
1
0,5
0,5
1
0,75
![Page 39: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/39.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 39
Proseminar DatenkompressionThema : Arithmetische Kodierung
Problem: Was tun bei Intervallmitte?
Problem bei mittig liegendem Intervall:
• führende Stellen von mLow und mHigh bleiben längere Zeit invers zueinander
• Folge: E1/E2-Skalierung nicht anwendbar
• Also: gleiches Problem wie zuvor
![Page 40: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/40.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 40
Proseminar DatenkompressionThema : Arithmetische Kodierung
Lösung
Bei mittig liegendem Intervall:• Intervall mittig aufziehen• iterieren bis obere bzw. untere Hälfte festliegt
Folge:• E3-Skalierung
![Page 41: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/41.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 41
Proseminar DatenkompressionThema : Arithmetische Kodierung
Definition: E3-Skalierung
while( ( g_1Q <= mLow ) && ( mHigh < g_3Q ) )
{
mScale++;
mLow = 2*(mLow-g_1Q);
mHigh= 2*(mHigh-g_1Q) + 1;
}
0
1
0,5
0,25
0,75
0,5
![Page 42: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/42.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 42
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: E3-Skalierung
0
1
0,5
0,25
0,75
0,5
0,375
0,625
0,5
0,375
0,5
0,4375
Schritt 1 Schritt 2 Schritt 3
E3, E3, E1
![Page 43: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/43.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 43
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beispiel: Gleichheit von E1 E3^n und E2^n E1
0
1
0,5
0
0,5
0,25
0,25
0,5
0,375
0,375
0,5
0,4375
Schritt 1 Schritt 2 Schritt 3
Anwendung von E1, E2, E2 (also 011)
![Page 44: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/44.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 44
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beweis der Gleichheit (1)
Formalisierung dieser Gleichheit durch Hintereinanderausführung der Abbildungen:
![Page 45: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/45.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 45
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beweis der Gleichheit (2)
![Page 46: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/46.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 46
Proseminar DatenkompressionThema : Arithmetische Kodierung
Beweis der Gleichheit (3)
![Page 47: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/47.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 47
Proseminar DatenkompressionThema : Arithmetische Kodierung
Auflösung E3-Skalierung (1)
Bisher nur E3-Skalierungen mitgezählt.
Nun, wo die Hälfte feststeht, noch entsprechende Bits ausgeben:while( ( mHigh < g_Half ) || ( mLow >= g_Half ) ) {
if( mHigh < g_Half ) // E1{
SetBit( 0 );mLow = mLow * 2;mHigh = mHigh * 2 + 1;for(; mScale > 0; mScale-- )SetBit( 1 ); // 1 == !0
}...}
![Page 48: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/48.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 48
Proseminar DatenkompressionThema : Arithmetische Kodierung
Auflösung E3-Skalierung (2)
while( ( mHigh < g_Half ) || ( mLow >= g_Half ) ) {
...
else if(mLow >= g_Half ) // E2
{
SetBit( 1 );
mLow = 2 * ( mLow - g_Half );
mHigh = 2 * ( mHigh - g_Half ) + 1;
for(; mScale > 0; mScale-- )
SetBit( 0 ); // 0 == !1
}
}
![Page 49: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/49.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 49
Proseminar DatenkompressionThema : Arithmetische Kodierung
Dekodierer: Buffer auch skalieren
Im Dekoder muß der Buffer noch nachskaliert werden:
// E1
mBuffer = 2 * mBuffer + GetBit();
// E2
mBuffer = 2 * (mBuffer-g_Half) + GetBit();
// E3
mBuffer = 2 * (mBuffer-g_1Q) + GetBit();
![Page 50: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/50.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 50
Proseminar DatenkompressionThema : Arithmetische Kodierung
Zusammenfassung Kodierer
Kodierer:
void Encode( unsigned int low_count, unsigned int high_count, unsigned int total );
void EncodeFinish();
EncodeFinish() schließt die Sequenz korrekt ab.
![Page 51: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/51.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 51
Proseminar DatenkompressionThema : Arithmetische Kodierung
Abschluß der Codesequenz
if( mLow < g_1Q ) // mLow < 1Q < Half <= mHigh{
SetBit( 0 ); // 1 + e3-Skalierung abbauen
for( int i=0; i<mScale+1; i++ ) SetBit( 1 );}else // mLow < Half < 3Q <= mHigh{ SetBit( 1 ); // der Decoder fügt die Nullen automatisch an}
![Page 52: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/52.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 52
Proseminar DatenkompressionThema : Arithmetische Kodierung
Zusammenfassung Dekodierer
Dekodierer:
void DecodeStart()=
for( int i=0; i<31; i++ )
mBuffer = ( mBuffer << 1 ) | GetBit();
uint DecodeTarget(unsigned int total );
void Decode(unsigned int low_count, unsigned int high_count );
![Page 53: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/53.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 53
Proseminar DatenkompressionThema : Arithmetische Kodierung
Effizienzbetrachtung (1)
Länge des Codes für jedes Symbol ai A kann wie folgt beschränkt werden:
Im folgenden: Wahrscheinlichkeiten über Sequenzen anstatt
Symbolen betrachten. l(x)
![Page 54: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/54.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 54
Proseminar DatenkompressionThema : Arithmetische Kodierung
Effizienzbetrachtung (2)
![Page 55: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/55.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 55
Proseminar DatenkompressionThema : Arithmetische Kodierung
Effizienzbetrachtung (3)
Durchschnittliche Länge >= Entropie
Also durchschnittliche Länge pro Symbol:
![Page 56: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/56.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 56
Proseminar DatenkompressionThema : Arithmetische Kodierung
Effizienzbetrachtung (4)
Entropie der Sequenz S(m) mit |S(m)|=m ist m-fache Entropie der Symbole x:
Es folgt:
![Page 57: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/57.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 57
Proseminar DatenkompressionThema : Arithmetische Kodierung
Effizienzbetrachtung – Vergleich Huffman
Für Huffman bekannt:
Für Extended Huffman:
![Page 58: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/58.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 58
Proseminar DatenkompressionThema : Arithmetische Kodierung
Nachteile gegenüber der Huffman-Kodierung
Nachteil bei sequentieller Kodierung:Wird ein Bit falsch empfangen, so ist der gesamte nachfolgende Code nicht korrekt dekodierbar.
Huffman unter Umständen speicher-effizienter bei:
• großen Alphabeten und kurzen Sequenzen[(0,086+Pmax)* HM(S) ] oder
• Wahrscheinlichkeiten von P(a)=2n
Arithmetische Kodierung i.a. etwas langsamer als Huffman
![Page 59: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/59.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 59
Proseminar DatenkompressionThema : Arithmetische Kodierung
Vorteile gegenüber der Huffman-Kodierung
• Meist höhere Speichereffizienz,auch in Bezug auf Arbeitsspeicher
• Grund: Vergabe unganzzahliger Bitlängen sowie Nutzung konstant großen Arbeitsspeichers
• Noch effizienter für kleine Alphabete
• Leichtes Aufsetzen verschiedener Modelle möglich
• Adaptive Modelle leichter zu implementieren
![Page 60: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/60.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 60
Proseminar DatenkompressionThema : Arithmetische Kodierung
Alternative Modelle
• Statische Modelle• Feste angenommene Wahrscheinlichkeitsverteilung
• Adaptive Modelle• Wahrscheinlichkeiten werden beim Lesen jedes
Symbols neu berechnet• Vorteile:
Modell muss nicht übertragen werden Modell passt sich den Daten an
![Page 61: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/61.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 61
Proseminar DatenkompressionThema : Arithmetische Kodierung
Order-n-Modelle
Betrachtung der Wahrscheinlichkeiten im Kontext der letzten n Symbole
Beispiel:
„u“ an sich: Wahrscheinlichkeit 4,35 %
„u“ nach „q“: Wahrscheinlichkeit 99 %
genauere Vorhersage durch Kontext
![Page 62: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/62.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 62
Proseminar DatenkompressionThema : Arithmetische Kodierung
PPM
Order „0..n“
• Symbol in Order-n-Kontext: Kodiere Symbol
• Sonst: Wechsel zu n-1-Kontext
• Order -1: Speichere Symbole in Gleichverteilung
Für jeden Kontext eigene Verteilung
![Page 63: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/63.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 63
Proseminar DatenkompressionThema : Arithmetische Kodierung
PPM (2)
Probleme
• Order-Wechsel für Decoder kennzeichnen
• hoher Speicherbedarf
Vorteile
• praktisch bestmögliche Kompression (neben BWT)
• gut auch bei kleinen Dateien ( < 1 Mb )
![Page 64: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/64.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 64
Proseminar DatenkompressionThema : Arithmetische Kodierung
Zusammenfassung
Arithmetische Kodierung ist zur Kompression geeignet
Implementierung mit Integers oder Floats möglich
Sequentielles Arbeiten ist möglich und sinnvoll
Dazu Methode des Scaling erforderlich
Verfahren sehr effizient für realistische Quellen
Möglichkeit des modularen Austauschs von Modellen
Sehr gut für adaptive Modelle, Erweiterungen wie PPM
![Page 65: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/65.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 65
Proseminar DatenkompressionThema : Arithmetische Kodierung
Ausblicke
Range Coder:
• Benutzt ganze Bytes statt Bits für Skaling-Methoden
• Resultat: Bis zu 50% schneller bei nur 0,01% längerem Code
In Zukunft:
• aufgrund schnellerer Float-Operationen (z.B. Itanium)eher Entwicklung in diese Richtung, weg von Integer-Arithmetik
![Page 66: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d7d49795902118cd818/html5/thumbnails/66.jpg)
18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis 66
Proseminar DatenkompressionThema : Arithmetische Kodierung
Implementierung
Implementierung in C++
• Einfacher Kodierer / Dekodierer
• Auswahl verschiedener Modelle möglich
• Visualisierung mit Kodierer als DLL
• Download möglich unter:http://ac.bodden.de