Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung."—  Präsentation transkript:

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

2 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis2 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)

3 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis3 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

4 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis4 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*

5 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis5 Definition: Modell Modell: Abbildung A [0,1): a i P M (a i ) P M (a i ) ist angenommene Wahrscheinlichkeit Nicht zwingend gleich mit P(a i ), der korrekten Wahrscheinlichkeit Im Folgenden: Annahme eines einfachen Modells

6 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis6 Beispiel: Modell a6,51 %h4,76 %o2,51 %v0,67 % b1,89 %i7,55 %p0,79 %w1,89 % c3,06 %j0,27 %q0,02 %x0,03 % d5,08 %k1,21 %r7,00 %y0,04 % e17,40 %l3,44 %s7,27 %z1,13 % f1,66 %m2,53 %t6,15 % g3,01 %n9,78 %u4,35 %

7 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis7 Definition: Entropie Entropie H ist Maß für Informationsgehalt einer Sequenz S Definition: Beachte: [H] = Bits / Symbol

8 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis8 Definition: Modellabhängige Entropie Problem: Korrekte Wahrscheinlichkeiten nicht bekannt Also Differenzierung nötig Modellabhängige Entropie Definition:

9 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis9 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 P M )

10 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis10 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 P M )

11 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis11 Definition: Kodierer/Dekodierer Kodierer: Algorithmus, der eine gegebene Sequenz S kodiert Ausgabe: Code(S) Dekodierer: Algorithmus, der S wieder aus Code(S) herstellt

12 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis12 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)

13 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis13 Kodierung in R : Grundidee Intervallbildung Idee: Wahrscheinlichkeiten werden kumuliert Dies liefert Teilintervall von [0,1) für jedes Symbol des Alphabets

14 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis14 Kodierung in R : Kumulierte Wahrscheinlichkeiten Intervall aufteilen durch kumulierte Wahrscheinlichkeiten dazu Definition von K(a k ) für a k A:

15 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis15 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)

16 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis16 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:

17 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis17 Kodierung in R : Baumartige Partitionierung daraus resultiert: Baumartige Partitionierung von [0,1)

18 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis18 Kodierung in R : Beispiel (1)

19 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis19 Kodierung in R : Beispiel (2)

20 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis20 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) );

21 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis21 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

22 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis22 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

23 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis23 Dekodierung in R : Beispiel (1)

24 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis24 Dekodierung in R : Beispiel (2)

25 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis25 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);

26 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis26 Zusammenfassung Bisher: Kodierung über reellen Zahlen [0,1) in Teilintervalle aufteilen sukzessive Intervalle aufziehen Problem: unendliche Genauigkeit vorausgesetzt

27 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis27 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

28 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis28 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

29 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis29 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 );

30 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis30 Grenze

31 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis31 Beispiel: Kodierung a:Encode( 0, 4, 8 ); [Pa=4,Pb=2,Pc=1,Pd=1] mStep = ( mHigh - mLow + 1 ) / total; = ( ) / 8 = 128 / 8 = 16 mHigh = mLow + mStep * high_count - 1; = * = 64 – 1 = 63 mLow = mLow + mStep * low_count; = * 0 = 0

32 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis32 Der Dekodierer Interface: Wahrscheinlichkeitsintervall bestimmen uint Decode_Target( unsigned int total ); Encoder nachbilden void Decode( unsigned int low_count, unsigned int high_count );

33 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis33 Beispiel: Dekodierung (1) Decode_Target( 8 ); [Pa=4,Pb=2,Pc=1,Pd=1] mStep = ( mHigh - mLow + 1 ) / total; = ( ) / 8 = 128 / 8 = 16 value = ( mBuffer - mLow ) / mStep; = ( ) / 16 = 40 / 16 = 2 return value; // 2 [0,4) = a

34 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis34 Beispiel: Dekodierung (2) Decode( 0, 4 ); [Pa=4,Pb=2,Pc=1,Pd=1] mHigh = mLow + mStep * high_count - 1; = * = 64 – 1 = 63 mLow = mLow + mStep * low_count; = * 0 = 0

35 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis35 Problem: Begrenzt genaue Arithmetik Problem: Bei bisherigem Verfahren wird betrachtetes Intervall beliebig klein. Folge: total > mHigh – mLow also: (mHigh – mLow + 1) / total = 0

36 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis36 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

37 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis37 Definition: E1-Skalierung while( mHigh < g_Half ) { SetBit( 0 ); mLow = mLow * 2; mHigh = mHigh * 2 + 1; } * 2 entspricht Shift nach links

38 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis38 Definition: E2-Skalierung while( mLow >= g_Half ) { SetBit( 1 ); mLow = 2*(mLow-g_Half); mHigh = 2*(mHigh-g_Half)+1; }

39 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis39 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

40 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis40 Lösung Bei mittig liegendem Intervall: Intervall mittig aufziehen iterieren bis obere bzw. untere Hälfte festliegt Folge: E3-Skalierung

41 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis41 Definition: E3-Skalierung while( ( g_1Q <= mLow ) && ( mHigh < g_3Q ) ) { mScale++; mLow = 2*(mLow-g_1Q); mHigh= 2*(mHigh-g_1Q) + 1; }

42 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis42 Beispiel: E3-Skalierung E3, E3, E1

43 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis43 Beispiel: Gleichheit von E1 E3^n und E2^n E1 Anwendung von E1, E2, E2 (also 011)

44 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis44 Beweis der Gleichheit (1) Formalisierung dieser Gleichheit durch Hintereinanderausführung der Abbildungen:

45 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis45 Beweis der Gleichheit (2)

46 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis46 Beweis der Gleichheit (3)

47 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis47 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 ) ) { if( mHigh < g_Half ) // E1 { SetBit( 0 ); mLow = mLow * 2; mHigh = mHigh * 2 + 1; for(; mScale > 0; mScale-- ) SetBit( 1 ); // 1 == !0 }... }

48 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis48 Auflösung E3-Skalierung (2) while( ( mHigh = 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 }

49 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis49 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();

50 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis50 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.

51 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis51 Abschluß der Codesequenz if( mLow < g_1Q ) // mLow < 1Q < Half <= mHigh { SetBit( 0 ); // 1 + e3-Skalierung abbauen for( int i=0; i

52 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis52 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 );

53 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis53 Effizienzbetrachtung (1) Länge des Codes für jedes Symbol a i A kann wie folgt beschränkt werden: Im folgenden: Wahrscheinlichkeiten über Sequenzen anstatt Symbolen betrachten. l(x)

54 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis54 Effizienzbetrachtung (2)

55 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis55 Effizienzbetrachtung (3) Durchschnittliche Länge >= Entropie Also durchschnittliche Länge pro Symbol:

56 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis56 Effizienzbetrachtung (4) Entropie der Sequenz S (m) mit |S (m) |=m ist m-fache Entropie der Symbole x: Es folgt:

57 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis57 Effizienzbetrachtung – Vergleich Huffman Für Huffman bekannt: Für Extended Huffman:

58 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis58 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+P max )* H M (S) ] oder Wahrscheinlichkeiten von P(a)=2 n Arithmetische Kodierung i.a. etwas langsamer als Huffman

59 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis59 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

60 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis60 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

61 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis61 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

62 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis62 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

63 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis63 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 )

64 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis64 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

65 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis65 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

66 Proseminar Datenkompression Thema : Arithmetische Kodierung Eric Bodden, Malte Clasen, Joachim Kneis66 Implementierung Implementierung in C++ Einfacher Kodierer / Dekodierer Auswahl verschiedener Modelle möglich Visualisierung mit Kodierer als DLL Download möglich unter:


Herunterladen ppt "Proseminar Datenkompression Thema : Arithmetische Kodierung 18.03.2002Eric Bodden, Malte Clasen, Joachim Kneis1 Arithmetische Kodierung."

Ähnliche Präsentationen


Google-Anzeigen