www.wikidata.de-de.nina.az
Die arithmetische Kodierung ist eine Form der Entropiekodierung die bei der verlustfreien Datenkompression verwendet wird Sie erzielt Kompressionsraten die sehr nahe am theoretischen Limit der Entropie liegen Die Grundidee der arithmetischen Kodierung ist aus einer Folge von Eingabesymbolen und deren Auftrittswahrscheinlichkeiten eine einzelne moglichst kurze rationale Zahl zu bilden Aus dieser Zahl kann die ursprungliche Folge von Eingabesymbolen wiederhergestellt werden Inhaltsverzeichnis 1 Geschichte 2 Grundprinzip 3 Vorbereitung 4 Kodieralgorithmus 4 1 Beispiel 5 Dekodieralgorithmus 5 1 Beispiel 6 Varianten 7 Optimalitat 7 1 Vergleich zur Huffman Kodierung 8 Implementierung 9 Weblinks 10 EinzelnachweiseGeschichte BearbeitenAls Begrunder der arithmetischen Kodierung gilt Jorma Rissanen der ab 1976 bis Anfang der 1980er Jahre wesentliche Arbeiten zu diesem Teilgebiet der Informationstheorie leistete 1 Grundprinzip BearbeitenDie meisten Kodierungen teilen die Folge von Eingabezeichen in kurze Teile auf und kodieren jeden dieser Teile einzeln in Bits Dabei kommt es vor dass ein solcher kurzer Teil einen Informationsgehalt hat der sich nicht in ganzen Bits ausdrucken lasst Dadurch mussen unvollstandig genutzte Bits gespeichert werden und das sorgt dafur dass die kodierten Daten langer werden als unbedingt notig Die arithmetische Kodierung unterscheidet sich von diesen Kodierungen dadurch dass die Eingabezeichen nicht in kurze Teile unterteilt werden sondern alle zusammen zu einer einzigen rationalen Zahl Bruchzahl zusammengerechnet werden Dadurch werden die unvollstandig genutzten Bits in der Ausgabe vermieden Vorbereitung BearbeitenVor dem Kodieren oder Dekodieren mussen sich der Kodierer und der Dekodierer auf diese Dinge einigen das Alphabet aus dem die Zeichen der Zeichenfolge stammen die Reihenfolge der Zeichen im Alphabet die Auftrittswahrscheinlichkeiten der einzelnen Zeichen gemass dem Modell fur die Entropiekodierung das Intervall fur das Ergebnis des Kodierers ublicherweise 0 q lt 1 displaystyle 0 leq q lt 1 nbsp siehe 2 Kodieralgorithmus BearbeitenDer Kodierer bekommt als Eingabe eine Folge von Zeichen eine Tabelle die fur jedes Zeichen die Auftrittswahrscheinlichkeit festlegtEr erzeugt daraus eine rationale Zahl q displaystyle q nbsp im Bereich 0 q lt 1 displaystyle 0 leq q lt 1 nbsp die die Eingabezeichenfolge reprasentiert eine naturliche Zahl n displaystyle n nbsp die die Lange der Eingabezeichenfolge angibtAblauf Das Zielintervall fur q displaystyle q nbsp geht von der unteren Grenze u displaystyle u nbsp bis zur oberen Grenze o displaystyle o nbsp anfangs ist u 0 o 1 displaystyle u 0 o 1 nbsp Die Anzahl der eingelesenen Zeichen n displaystyle n nbsp beginnt mit n 0 displaystyle n 0 nbsp Fur jedes Zeichen z displaystyle z nbsp aus der Eingabe Erhohe die Anzahl der eingelesenen Zeichen n displaystyle n nbsp um 1 Bestimme die Auftrittswahrscheinlichkeit p z displaystyle p z nbsp fur das Zeichen z displaystyle z nbsp anhand der Wahrscheinlichkeitstabelle Bestimme die Auftrittswahrscheinlichkeit p v displaystyle p v nbsp fur alle Zeichen die im Alphabet vor z displaystyle z nbsp kommen indem die einzelnen Wahrscheinlichkeiten aufsummiert werden Schranke das Zielintervall so ein dass nur noch das Teilintervall das zu z displaystyle z nbsp gehort ubrig bleibt u n e u u p v o u displaystyle u neu u p v cdot o u nbsp o n e u u p v p z o u displaystyle o neu u p v p z cdot o u nbsp Wahle eine beliebige Zahl q displaystyle q nbsp aus dem Intervall u q lt o displaystyle u leq q lt o nbsp mit moglichst kurzer Schreibweise Beispiel Bearbeiten nbsp Intervallschachtelung beim Arithmetischen KodierenEingabe Das Alphabet besteht aus den Zeichen A B C in dieser Reihenfolge Die Auftrittswahrscheinlichkeiten sind p A 6 8 p B 1 8 p C 1 8 displaystyle p A frac 6 8 p B frac 1 8 p C frac 1 8 nbsp Die zu kodierende Zeichenfolge ist AAABAAAC Ablauf Schritt Aktion Anmerkungen1 u 0 o 1 displaystyle u 0 o 1 nbsp Das Zielintervall geht von 0 bis 1 2 n 0 displaystyle n 0 nbsp Es wurden noch keine Zeichen gelesen 3 z A displaystyle z textrm A nbsp Das erste Zeichen der Zeichenfolge ist ein A 3 1 n 0 1 1 displaystyle n 0 1 1 nbsp Das erste Zeichen wurde gelesen 3 2 p z 6 8 displaystyle p z dfrac 6 8 nbsp Die Wahrscheinlichkeit p A displaystyle p A nbsp fur das A 3 3 p v 0 8 displaystyle p v dfrac 0 8 nbsp In dem Alphabet gibt es keine Zeichen vor dem A 3 4 u 0 8 0 6 8 1 0 8 o 0 8 0 6 8 1 6 8 displaystyle begin array llll u amp dfrac 0 8 left 0 phantom dfrac 6 8 right cdot 1 amp dfrac 0 8 o amp dfrac 0 8 left 0 dfrac 6 8 right cdot 1 amp dfrac 6 8 end array nbsp 3 bis 3 3 z A n 2 p z 6 8 p v 0 8 displaystyle z textrm A n 2 p z frac 6 8 p v dfrac 0 8 nbsp das zweite Zeichen der Zeichenfolge ist ebenfalls A3 4 u 0 8 0 8 6 8 6 8 0 8 2 o 0 8 0 8 6 8 6 8 36 8 2 displaystyle begin array lllll u amp dfrac 0 8 amp left dfrac 0 8 phantom dfrac 6 8 right cdot dfrac 6 8 amp dfrac 0 8 2 o amp dfrac 0 8 amp left dfrac 0 8 dfrac 6 8 right cdot dfrac 6 8 amp dfrac 36 8 2 end array nbsp 3 bis 3 3 z A n 3 p z 6 8 p v 0 8 displaystyle z textrm A n 3 p z dfrac 6 8 p v dfrac 0 8 nbsp 3 4 u 0 8 2 0 8 6 8 36 8 2 0 8 3 o 0 8 2 0 8 6 8 36 8 2 216 8 3 displaystyle begin array llll u amp dfrac 0 8 2 left dfrac 0 8 phantom dfrac 6 8 right cdot dfrac 36 8 2 amp dfrac 0 8 3 o amp dfrac 0 8 2 left dfrac 0 8 dfrac 6 8 right cdot dfrac 36 8 2 amp dfrac 216 8 3 end array nbsp 3 bis 3 3 z B n 4 p z 1 8 p v 6 8 displaystyle z textrm B n 4 p z dfrac 1 8 p v dfrac 6 8 nbsp das vierte Zeichen der Eingabefolge ist ein B3 4 u 0 8 3 6 8 1 8 216 8 3 1296 8 4 o 0 8 3 6 8 1 8 216 8 3 1512 8 4 displaystyle begin array llll u amp dfrac 0 8 3 left dfrac 6 8 phantom dfrac 1 8 right cdot dfrac 216 8 3 amp dfrac 1296 8 4 o amp dfrac 0 8 3 left dfrac 6 8 dfrac 1 8 right cdot dfrac 216 8 3 amp dfrac 1512 8 4 end array nbsp das Intervall beginnt jetzt nicht mehr bei 0 3 weitere A werden eingelesen und verrechnet3 bis 3 3 z C n 8 p z 1 8 p v 7 8 displaystyle z textrm C n 8 p z dfrac 1 8 p v dfrac 7 8 nbsp das letzte Zeichen ist ein C3 4 u 663552 8 7 7 8 1 8 46656 8 7 5635008 8 8 o 663552 8 7 7 8 1 8 46656 8 7 5681664 8 8 displaystyle begin array llll u amp dfrac 663552 8 7 left dfrac 7 8 phantom dfrac 1 8 right cdot dfrac 46656 8 7 amp dfrac 5635008 8 8 o amp dfrac 663552 8 7 left dfrac 7 8 dfrac 1 8 right cdot dfrac 46656 8 7 amp dfrac 5681664 8 8 end array nbsp Die gesuchte Zahl q displaystyle q nbsp liegt im Bereich 5635008 8 8 q lt 5681664 8 8 displaystyle dfrac 5635008 8 8 leq q lt dfrac 5681664 8 8 nbsp 4 q 43 128 displaystyle q dfrac 43 128 nbsp Dies ist der kurzeste Bruch im gesuchten Intervall dessen Nenner eine Zweierpotenz ist Die Zweierpotenz bietet sich an um die Zahl q displaystyle q nbsp im Binarsystem zu kodieren Dekodieralgorithmus BearbeitenDer Dekodierer bekommt als Eingabe eine rationale Zahl q displaystyle q nbsp die Lange n displaystyle n nbsp der ursprunglichen EingabezeichenfolgeAblauf Wiederhole n displaystyle n nbsp mal Bestimme das Zeichen z displaystyle z nbsp in dessen Teilintervall die Zahl q displaystyle q nbsp liegt sowie die Grenzen u z displaystyle u z nbsp und o z displaystyle o z nbsp dieses Teilintervalls Gib das Zeichen z displaystyle z nbsp aus Transformiere die relative Position der Zahl q displaystyle q nbsp aus dem Intervall u z q lt o z displaystyle u z leq q lt o z nbsp ins Intervall 0 q lt 1 displaystyle 0 leq q lt 1 nbsp also q q u z o z u z displaystyle q frac q u z o z u z nbsp Beispiel Bearbeiten Der Dekodierer bekommt die Zahl q 43 128 displaystyle q dfrac 43 128 nbsp und die Anzahl der Zeichen n 8 displaystyle n 8 nbsp zum Dekodieren Um zu einer Position im Intervall das zugehorige Zeichen zu bestimmen wird die Tabelle vor dem eigentlichen Dekodieren berechnet Zeichen und ihre zugehorigen Intervalle Zeichen Untergrenze Obergrenze BreiteA 0 8 displaystyle dfrac 0 8 nbsp 6 8 displaystyle dfrac 6 8 nbsp 6 8 displaystyle dfrac 6 8 nbsp B 6 8 displaystyle dfrac 6 8 nbsp 7 8 displaystyle dfrac 7 8 nbsp 1 8 displaystyle dfrac 1 8 nbsp C 7 8 displaystyle dfrac 7 8 nbsp 8 8 displaystyle dfrac 8 8 nbsp 1 8 displaystyle dfrac 1 8 nbsp Das Dekodieren passiert in diesen Schritten Die Zahl 43 128 displaystyle dfrac 43 128 nbsp gehort zum Zeichen A mit u 0 8 displaystyle u dfrac 0 8 nbsp und o 6 8 displaystyle o dfrac 6 8 nbsp Das neue q displaystyle q nbsp ergibt sich zu 43 128 0 8 6 8 0 8 43 96 displaystyle dfrac frac 43 128 frac 0 8 frac 6 8 frac 0 8 dfrac 43 96 nbsp Die Zahl 43 96 displaystyle dfrac 43 96 nbsp gehort zum Zeichen A mit u 0 8 displaystyle u dfrac 0 8 nbsp und o 6 8 displaystyle o dfrac 6 8 nbsp Das neue q displaystyle q nbsp ergibt sich zu 43 96 0 8 6 8 0 8 43 72 displaystyle dfrac dfrac 43 96 frac 0 8 frac 6 8 frac 0 8 dfrac 43 72 nbsp Die Zahl 43 72 displaystyle dfrac 43 72 nbsp gehort zum Zeichen A mit u 0 8 displaystyle u dfrac 0 8 nbsp und o 6 8 displaystyle o dfrac 6 8 nbsp Das neue q displaystyle q nbsp ergibt sich zu 43 72 0 8 6 8 0 8 43 54 displaystyle dfrac dfrac 43 72 frac 0 8 frac 6 8 frac 0 8 dfrac 43 54 nbsp Die Zahl 43 54 displaystyle dfrac 43 54 nbsp gehort zum Zeichen B mit u 6 8 displaystyle u dfrac 6 8 nbsp und o 7 8 displaystyle o dfrac 7 8 nbsp Das neue q displaystyle q nbsp ergibt sich zu 43 54 6 8 7 8 6 8 10 27 displaystyle dfrac dfrac 43 54 frac 6 8 frac 7 8 frac 6 8 dfrac 10 27 nbsp Die Zahl 10 27 displaystyle dfrac 10 27 nbsp gehort zum Zeichen A mit u 0 8 displaystyle u dfrac 0 8 nbsp und o 6 8 displaystyle o dfrac 6 8 nbsp und so weiter bis alle 8 Zeichen dekodiert sind Varianten BearbeitenStatt dem Dekodierer die Anzahl der kodierten Symbole n displaystyle n nbsp mitzuteilen kann das Alphabet auch ein spezielles Zeichen mit der Bedeutung Ende enthalten Es gibt auch Varianten der arithmetischen Kodierung fur weniger Rechenaufwand die statt eines Bruchs nur eine einzelne beliebig lange naturliche Zahl zur Informationsdarstellung verwenden Generell ist die arithmetische Kodierung rechenintensiver als Kodierungen bei denen jedes kodierte Wort eine ganzzahlige Anzahl Bits hat 3 Das Verfahren Context Adaptive Binary Arithmetic Coding wird zum Komprimieren von Videodaten verwendet das Eingabealphabet besteht aus den beiden Binarziffern 0 und 1 und die Auftrittswahrscheinlichkeit der Bits wird wahrend der Kompression kontextabhangig angepasst Optimalitat BearbeitenArithmetisches Kodieren ist asymptotisch optimal 4 Nachdem das letzte Symbol verarbeitet wurde erhalt man ein Intervall r r s displaystyle r r s nbsp mit s i 1 N p x i displaystyle s prod i 1 N p x i nbsp Das entspricht der Wahrscheinlichkeit bei gegebenen Symbolwahrscheinlichkeiten p x i displaystyle p x i nbsp genau solch eine Sequenz zu erhalten Um nun binar einen Wert im Intervall r r s displaystyle r r s nbsp anzugeben benotigt man mindestens log 2 s log 2 s displaystyle lceil log 2 s rceil log 2 s nbsp Bits falls x 0 mod 2 log 2 s x r r s displaystyle exists x 0 mod 2 lceil log 2 s rceil x in r r s nbsp hochstens jedoch log 2 s 1 displaystyle lceil log 2 s rceil 1 nbsp Bits um das Intervall mit einer Genauigkeit von s 2 zu beschreiben was im Binarsystem gerade noch genugt um unterscheiden zu konnen ob der Wert innerhalb liegt Da log 2 s log 2 i 1 N p x i i 1 N log 2 p x i n H X displaystyle begin aligned log 2 s amp log 2 big prod i 1 N p x i big amp sum i 1 N log 2 p x i amp n cdot H X end aligned nbsp und log 2 s 1 lt log 2 s 2 displaystyle lceil log 2 s rceil 1 lt log 2 s 2 nbsp lasst sich die Lange l displaystyle l nbsp der arithmetisch kodierten Sequenz abschatzen n H X l lt n H X 2 displaystyle n cdot H X leq l lt n cdot H X 2 nbsp Das bedeutet man benotigt mindestens so viele Bits wie die Entropie hochstens jedoch zwei Bits mehr Die mittlere Lange l S y m l n displaystyle l Sym frac l n nbsp eines kodierten Symbols ist beschrankt auf H X l S y m lt H X 2 n displaystyle H X leq l Sym lt H X frac 2 n nbsp Fur lange Sequenzen verteilen sich diese hochstens zwei zusatzlichen Bits gleichmassig auf alle Symbole so dass die mittlere Lange eines kodierten Symbols dann asymptotisch gegen die wahre Entropie geht 5 lim n H X 2 n H X displaystyle lim n to infty Big H X frac 2 n Big H X nbsp Vergleich zur Huffman Kodierung Bearbeiten Wenn sich alle Symbolwahrscheinlichkeiten p i displaystyle p i nbsp in der Form p i 2 k i k i N displaystyle p i 2 k i k i in mathbb N nbsp darstellen lassen 6 dann erzeugen arithmetische Kodierung und Huffman Kodierung einen identisch langen Datenstrom und sind gleich d h optimal effizient In der Praxis ist dies aber so gut wie nie der Fall Implementierung BearbeitenBei einer konkreten Umsetzung ergibt sich die Schwierigkeit dass die Grenzen des Intervalls beliebig genaue Bruchzahlen sind Da das Rechnen mit grossen Zahlern und Nennern entsprechend lange dauert wird der Algorithmus fur die praktische Umsetzung etwas abgewandelt Um das Problem der grossen Zahler und Nenner Genauigkeit abzumildern werden zwei Schritte unternommen In der Tabelle mit den Auftrittswahrscheinlichkeiten wird eine Mindestgenauigkeit festgelegt auf die einzelnen Auftrittswahrscheinlichkeiten gerundet werden Durch dieses Runden stimmen die Intervallgrossen nicht mehr exakt mit den optimalen Wahrscheinlichkeiten uberein Das fuhrt zu einer Verschlechterung der Kompressionsrate Das Intervall muss ab und an wieder vergrossert werden da sonst nach einigen kodierten Zeichen die Genauigkeit der Zahlen unverhaltnismassig gross wird Deshalb werden hoherwertige Stellen die feststehen ausgegeben und aus den Zahlen entfernt Im Beispiel von oben kann man also nach dem Kodieren des Zeichens B sicher sagen dass die Ergebniszahl mit 0 3 beginnt Man kann also bereits hier 0 3 ausgeben und von den Intervallgrenzen abziehen Danach wird die Intervallgrenze mit 10 skaliert und es wird mit diesem Wert weitergerechnet Punkt 1 fuhrt eigentlich dazu dass der Algorithmus kein Arithmetischer Kodierer mehr ist sondern nur ahnlich Es gibt aber einige eigenstandige Algorithmen die vom Arithmetischen Kodierer abstammen diese sind Der Range Coder Dieser Kodierer ist eine relativ direkte Umsetzung des Arithmetischen Kodierers mit ganzen Zahlen Der Q Coder von IBM entwickelt und patentiert Dieser Kodierer vereinfacht zusatzlich das Alphabet auf nur zwei Zeichen Dieses Vorgehen erlaubt eine Annaherung der Intervallaufteilung mit Additionen anstatt Multiplikationen wie beim Range Coder Der ELS Coder Dieser Kodierer arbeitet auch nur mit zwei Zeichen ist aber effizienter bei relativ gleich wahrscheinlichen Zeichen wahrend beim Q Coder beide Zeichen moglichst unterschiedliche Wahrscheinlichkeiten haben sollten Trotz dieser Verfahren bleiben verschiedene Probleme mit der Arithmetischen Kodierung Geschwindigkeit Arithmetische Kodierer sind relativ aufwendig und langsam Fur jedes Zeichen muss beim Range Coder eine Division ausgefuhrt werden Die anderen Kodierer erfordern das mehrmalige Ausfuhren des Kodierprozesses fur alle Bits des Zeichens Patente Die meisten Softwarepatente im Bereich des arithmetischen Kodierens wurden in den 1980er und fruhen 1990er Jahren erteilt und sind mittlerweile ausgelaufen Der Q Coder ist zwar neben dem Huffman Coder fur JPEG zulassig wird aber fast nie verwendet da er von IBM patentiert war Kleiner Gewinn Mit verschiedenen Methoden lasst sich erreichen dass die viel schnellere Huffman Kodierung nur unwesentlich schlechtere Ergebnisse liefert als der aufwendige Arithmetische Kodierer Dazu gehort dass manchmal Zeichenketten als eigenstandige Zeichen behandelt werden Somit lasst sich der Verschnitt senken der dadurch entsteht dass jedes Zeichen mit einer ganzzahligen Bitlange dargestellt wird Weblinks BearbeitenAusarbeitung zu Grundlagen der arithmetischen Kodierung einschliesslich Quelltext E Bodden et al 2002 PDF Datei 568 kB Website des Range Coders Quellcode zum Download Das elektronische Buch Information Theory Inference and Learning Algorithms von David J C MacKay erklart in Kapitel 6 das arithmetische Kodieren Einzelnachweise Bearbeiten Jorma Rissanen Generalized Kraft inequality and arithmetic coding Hrsg IBM Journal of Research and Development Nr 20 IBM Firmenschrift 1976 S 198 203 Strutz Bilddatenkompression SpringerVieweg 2009 Khalid Sayood Introduction to Data Compression Morgan Kaufmann 2000 ISBN 978 1 55860 558 9 Chapter 4 Arithmetic Coding Guy E Blelloch Introduction to Data Compression PDF 408 kB S 18 2010 Amir Said Introduction to Arithmetic Coding Theory and Practice PDF 462 kB S 13 E Bodden et al Ausarbeitung zu Grundlagen der arithmetischen Kodierung einschliesslich Quelltext PDF 581 kB 2002 S 41 Abgerufen von https de wikipedia org w index php title Arithmetisches Kodieren amp oldid 232151192