Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen,...

66
18.03.200 2 Eric Bodden, Malte Clasen, Joachim Kneis 1 Proseminar Datenkompression Thema : Arithmetische Kodierung Arithmetische Kodierung

Transcript of Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen,...

Page 1: Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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