www.wikidata.de-de.nina.az
Der Golomb Code ist eine Entropiekodierung fur alle nichtnegativen ganzen Zahlen die im Gegensatz zu anderen Codes der Quellenkodierung nur einen endlichen Bereich z B den Wertebereich 0 255 darstellen konnen Er wurde 1966 von Solomon W Golomb entwickelt 1 Der Code verwendet wenige Bits fur kleine und viele Bits fur grossere Zahlen Dabei kann er uber einen positiven ganzzahligen Parameter gesteuert werden Je grosser der Parameter desto langsamer wachst die Anzahl der zur Darstellung benotigten Bits aber desto grosser ist die Anzahl der minimal benotigten Bits fur die kleinen Zahlen Der Rice Code ist eine Variante des Golomb Codes bei dem der Steuerparameter eine Zweierpotenz ist Diese Einschrankung ist von Vorteil da insbesondere in der digitalen Verarbeitung die Multiplikation bzw Division von 2 sehr effizient implementiert werden kann Der Rice Code wurde 1971 von Robert F Rice und J Plaunt vorgestellt 2 Einige Varianten des Rice Codes werden auch als Exponentieller Golomb Code englisch Exponential Golomb Code bezeichnet Der Code kann im Bereich der verlustlosen Datenkompression verwendet werden wenn die Wahrscheinlichkeiten der zu kodierenden Quellendaten naherungsweise eine geometrische Verteilung bilden Typische Anwendungsbereiche sind als ein Teilverfahren neben anderen Algorithmen die Bildkompression und Audiodatenkompression Beispielsweise verwenden das Videokompressionsformat H 264 und das Audiokompressionsformat FLAC 3 je eine verschiedene Variante des exponentiellen Golomb Codes Inhaltsverzeichnis 1 Arbeitsweise 2 Beispiele 3 Anwendung 4 Rice Code 4 1 Exponentieller Golomb Code 4 1 1 Verallgemeinerung zu beliebiger Ordnung 4 2 Verallgemeinerung fur negative Zahlen 5 EinzelnachweiseArbeitsweise BearbeitenDer Code arbeitet mit der Idee die darzustellende Zahl n displaystyle n nbsp durch einen Quotienten q displaystyle q nbsp und den Rest r displaystyle r nbsp bei einer Division mit einem Parameter b displaystyle b nbsp zu ersetzen Die Zahl n displaystyle n nbsp mit n 0 displaystyle n geq 0 nbsp wird durch q n b displaystyle q left lfloor frac n b right rfloor nbsp und r n q b displaystyle r n qb nbsp beschrieben Zur besseren Beschreibung wird noch die Zahl c log 2 b displaystyle c left lceil log 2 b right rceil nbsp benotigt Als erstes wird q 1 unar ausgegeben d h es werden q displaystyle q nbsp 1 Bits gefolgt von einer 0 abgelegt Der Rest wird dann in einer abgeschnittenen binaren Darstellung Truncated Binary Encoding genannten Codierung abgelegt Diese Darstellung legt einen Teil der Werte falls moglich mit c 1 displaystyle c 1 nbsp Bits und den anderen Teil mit c displaystyle c nbsp Bits ab Die Anzahl der Werte die mit c 1 displaystyle c 1 nbsp Bits abgelegt werden konnen ist 2 c b displaystyle 2 c b nbsp Beispiele BearbeitenDie Darstellung der Zahl 10 mit einem Parameter 4 q 10 4 2 displaystyle q left lfloor frac 10 4 right rfloor 2 nbsp r 10 2 4 2 displaystyle r 10 2 cdot 4 2 nbsp c log 2 4 2 displaystyle c left lceil log 2 4 right rceil 2 nbsp Abhangig von c displaystyle c nbsp wird die Codierung vervollstandigt falls r displaystyle r nbsp lt 2 c b displaystyle 2 c b nbsp ist wird r displaystyle r nbsp als Binarcode mit der Lange c 1 displaystyle c 1 nbsp geschrieben falls r displaystyle r nbsp 2 c b displaystyle 2 c b nbsp ist wird r 2 c b displaystyle r 2 c b nbsp als Binarcode mit der Lange c displaystyle c nbsp geschrieben Daraus resultiert die Bitfolge 110 10 Das Leerzeichen zeigt den Ubergang vom Quotienten zum Rest Ein paar weitere Beispiele n 0 1 2 3 4 5 6 7 8 9 10b 3 0 0 0 10 0 11 10 0 10 10 10 11 110 0 110 10 110 11 1110 0 1110 10b 4 0 00 0 01 0 10 0 11 10 00 10 01 10 10 10 11 110 00 110 01 110 10b 5 0 00 0 01 0 10 0 110 0 111 10 00 10 01 10 10 10 110 10 111 110 00b 7 0 00 0 010 0 011 0 100 0 101 0 110 0 111 10 00 10 010 10 011 10 100Anwendung Bearbeiten nbsp Die beiden Grafiken zeigen die Redundanz des Golomb Codes pro Symbol Der Golomb Code kann angewendet werden wenn Zahlen unbekannter Grosse abgespeichert werden sollen doch das eigentliche Anwendungsgebiet liegt in der Datenkompression Wenn die Wahrscheinlichkeiten der Zahlen eine bestimmte Verteilung geometrische Verteilung aufweisen dann kann der Golomb Code ahnlich effizient wie der Huffman Code sein ist dabei aber sparsamer mit Speicher leichter zu implementieren und schneller in der Ausfuhrung Rice Code BearbeitenDer Rice Code ist eine Variante des Golomb Codes bei dem der Parameter b displaystyle b nbsp eine Potenz von 2 ist Diese Codes lassen sich sehr einfach mit Bitshiften und logischen Bitoperationen umsetzen Angenommen es gilt b 2 p displaystyle b 2 p nbsp Dann ist q n p displaystyle q n gg p nbsp und r n b 1 displaystyle r n land b 1 nbsp Das Symbol displaystyle gg nbsp steht dabei fur bitweises Verschieben nach rechts und displaystyle land nbsp fur bitweise Und Verknupfung r displaystyle r nbsp wird dabei immer mit genau p displaystyle p nbsp Bits und normal binar dargestellt Exponentieller Golomb Code Bearbeiten Der exponentielle Golomb Code ist eine weitere Variante des Rice Codes und gleichzeitig identisch zum Elias g Code wurde dort n 1 displaystyle n 1 nbsp statt n displaystyle n nbsp kodiert p displaystyle p nbsp wird fur jede Zahl genau als p log 2 n 1 displaystyle p left lceil log 2 n 1 right rceil nbsp gewahlt was der naturlichen Bitbreite von n 1 displaystyle n 1 nbsp entspricht Dann wird die unare Codierung von q displaystyle q nbsp nicht mit 1 Bits gefolgt von 0 sondern mit 0 Bits gefolgt von 1 umgesetzt Da die binar gespeicherte Zahl r displaystyle r nbsp immer an hochster Stelle eine 1 aufweist muss diese hochste 1 nicht doppelt gespeichert werden Die Enkodierung und Dekodierung vereinfachen sich somit zu folgenden Schritten Zum Kodieren von n displaystyle n nbsp Schreibe p displaystyle p nbsp viele 0 Bits danach schreibe n 1 displaystyle n 1 nbsp mit der naturlichen Anzahl Bits Zum Dekodieren von n displaystyle n nbsp Lese 0 Bits bis einschliesslich des ersten 1 Bits und lese so viele darauffolgende Bits wie zuvor 0 Bits gelesen wurden Das Ergebnis ist dieser hintere Teil der kodierten Zahl minus 1 Es zeigt sich dass eine separate Speicherung von p displaystyle p nbsp nicht notwendig ist da es selbst Teil der kodierten Zahl ist Verallgemeinerung zu beliebiger Ordnung Bearbeiten Die Kodierung kann mithilfe des Konzepts der Ordnung k displaystyle k nbsp verallgemeinert werden Das obige Schema entspricht der Ordnung k 0 displaystyle k 0 nbsp Bei hoheren Ordnungen geschieht eine Aufteilung der Zahl n displaystyle n nbsp nicht n 1 displaystyle n 1 nbsp in Quotient q displaystyle q nbsp und Rest r displaystyle r nbsp ahnlich zum normalen Rice Code Der Dividend ist nun 2 k displaystyle 2 k nbsp d h q n k displaystyle q n gg k nbsp und r n k 1 displaystyle r n land k 1 nbsp Bildlich gesprochen werden die Bits der Zahl in den festen unteren Teil r displaystyle r nbsp der immer k displaystyle k nbsp Bits hat und den variablen Teil q displaystyle q nbsp aufgeteilt Fur die finale Kodierung wird q displaystyle q nbsp im gewohnlichen exponentiellen Golomb Code kodiert d h Ordnung 0 wie oben und r displaystyle r nbsp wird mit k displaystyle k nbsp Bits die laut Definition immer ausreichen an das so kodierte q displaystyle q nbsp angehangt Eine kodierte Zahl umfasst also drei Teile hier dargestellt anhand k 5 displaystyle k 5 nbsp und der kodierten Zahl 489 489 0000 Bittiefe von q unar 10000 q 01001 r displaystyle 489 longmapsto underset text Bittiefe von q text unar underbrace 0000 underset q underbrace 10000 quad underset r underbrace 01001 nbsp Der Vorteil dieser Kodierung besteht darin dass der benotigte Speicherplatz fur grosse Zahlen weniger als die beim Rice Code benotigten 2 log 2 n 1 displaystyle 2 left lceil log 2 n 1 right rceil nbsp doppelt so viele Bits wie die Zahl selbst hat betragt Der Parameter k displaystyle k nbsp muss separat gewahlt und gespeichert werden Bei grossen Datensatzen eignet sich haufig nicht ein k displaystyle k nbsp fur alle Daten daher gibt es verschiedene Verfahren ein variables k displaystyle k nbsp zu wahlen Als einfachen Ansatz verwendet FLAC die Moglichkeit mehrere Blocke variabler Grosse mit einem jeweils eigenen k displaystyle k nbsp zu kodieren Der Melcode Algorithmus und seine Varianten passen k displaystyle k nbsp automatisch anhand eines einfachen Algorithmus an welcher symmetrisch auf Enkodier und Dekodierseite angewandt wird und ohne explizite Speicherung von k displaystyle k nbsp auskommt 4 5 Verallgemeinerung fur negative Zahlen Bearbeiten Rice Code und allgemeiner exponentieller Golomb Code konnen zwar 0 aber keine negativen Zahlen kodieren Dies wird durch eine der Zickzackkodierungen moglich gemacht welche die negativen auf die positiven Zahlen abbilden aber die Eigenschaften der Entropiekodierung erhalten d h betragsmassig kleine Zahlen werden weiterhin auf kleine Zahlen abgebildet Konkret bildet man eine Halfte der ganzen Zahlen auf die geraden naturlichen Zahlen ab und die andere Halfte auf die ungeraden naturlichen Zahlen n 2 x falls x 0 2 x 1 falls x lt 0 FLAC n 2 x falls x 0 2 x 1 falls x gt 0 H 264 displaystyle n begin cases 2x amp text falls x geq 0 2x 1 amp text falls x lt 0 end cases quad text FLAC quad quad n begin cases 2x amp text falls x leq 0 2x 1 amp text falls x gt 0 end cases quad text H 264 nbsp Danach folgt normale Rice Kodierung oder exponentielle Golomb Kodierung In der Praxis lassen sich sowohl De als auch Enkodierung dieses Formats durch Benutzung von Bitmasken und Shifts beschleunigen Einzelnachweise Bearbeiten Solomon W Golomb Run Length Encodings In IEEE Transactions on Information Theory IT 12 3 1966 S 399 401 abgerufen am 19 April 2013 Robert F Rice J Plaunt Adaptive Variable Length Coding for Efficient Compression of Spacecraft Television Data Hrsg IEEE Transactions on Communication Technology Band 19 Nr 6 California Institute of Technology Pasadena 1971 S 889 897 doi 10 1109 TCOM 1971 1090789 van Beurden amp Weaver Free Lossless Audio Codec 5 4 Residual Coding In Internet Draft Internet Engineering Task Force 11 Oktober 2022 abgerufen am 18 Oktober 2022 englisch Walter D Leon Salas Sina Balkir Khalid Sayood Nathan Schemm Michael W Hoffman A CMOS Imager With Focal Plane Compression Using Predictive Coding In IEEE Journal of Solid State Circuits Band 42 Nr 11 November 2007 ISSN 0018 9200 S 2555 2572 doi 10 1109 JSSC 2007 907191 ieee org abgerufen am 16 August 2023 M J Weinberger G Seroussi G Sapiro The LOCO I lossless image compression algorithm principles and standardization into JPEG LS In IEEE Transactions on Image Processing Band 9 Nr 8 August 2000 S 1309 1324 doi 10 1109 83 855427 ieee org abgerufen am 16 August 2023 Abgerufen von https de wikipedia org w index php title Golomb Code amp oldid 236466403