Das Codieren von Golomb

Golomb, der codiert, ist eine lossless Datenkompressionsmethode mit einer Familie von Datenkompressionscodes, die von Solomon W. Golomb in den 1960er Jahren erfunden sind. Alphabete im Anschluss an einen geometrischen Vertrieb werden einen Golomb als ein optimaler Präfix-Code codieren lassen, Golomb machend, der hoch passend für Situationen codiert, in denen das Ereignis von kleinen Werten im Eingangsstrom bedeutsam wahrscheinlicher ist als große Werte.

Rice, der (erfunden von Robert F. Rice) codiert, zeigt das Verwenden einer Teilmenge der Familie von Codes von Golomb an, um einen einfacheren (aber vielleicht suboptimal) Präfix-Code zu erzeugen; Rice hat das in einem anpassungsfähigen Codierschema verwendet, obwohl "Sich Rice, der codiert" entweder auf dieses Schema oder auf bloß das Verwenden beziehen kann, das die Teilmenge von Golomb codiert. Wohingegen ein Code von Golomb einen stimmbaren Parameter hat, der jeder positive Wert sein kann, sind Codes von Rice diejenigen, in denen der stimmbare Parameter eine Macht zwei ist. Das macht Codes von Rice günstig für den Gebrauch auf einem Computer, da Multiplikation und Abteilung durch 2 effizienter in der binären Arithmetik durchgeführt werden können.

Das Reiscodieren wird als die Wärmegewicht-Verschlüsselungsbühne in mehrer lossless Bildkompression und Audiodatenkompressionsmethoden verwendet.

Übersicht

Aufbau von Codes

Golomb, der codiert, verwendet einen stimmbaren Parameter M, um einen Eingangswert in zwei Teile zu teilen: das Ergebnis einer Abteilung durch die M, und, der Rest. Der Quotient wird im unären Codieren gesandt, das vom Rest in der gestutzten binären Verschlüsselung gefolgt ist. Wenn das Golomb-Codieren zum unären Codieren gleichwertig ist.

Von

Codes von Golomb-Rice kann als Codes gedacht werden, die eine Zahl durch die Position des Behälters (q), und der Ausgleich innerhalb des Behälters (r) anzeigen. Die obengenannte Zahl zeigt die Position q und den Ausgleich r für die Verschlüsselung der ganzen Zahl N verwendender Parameter von Golomb-Rice M.

Formell werden die zwei Teile durch den folgenden Ausdruck gegeben, wo die Zahl ist, die wird verschlüsselt:

und

Das Endresultat ist ähnlich:

Bemerken Sie, dass das von einer unterschiedlichen Zahl von Bit sein kann, und spezifisch nur b Bit für den Code von Rice, ist

und Schalter zwischen b-1 und b Bit für den Code von Golomb (d. h. M ist nicht eine Macht 2): Lassen. Wenn

Die Parameter-M ist eine Funktion des entsprechenden Prozesses von Bernoulli, der durch die Wahrscheinlichkeit des Erfolgs in einer gegebenen Probe von Bernoulli parametrisiert wird. ist entweder die Mittellinie des Vertriebs oder die Mittellinie + /  1. Es kann durch diese Ungleichheit bestimmt werden:

:

Golomb stellt fest, dass, für die große M, es sehr wenig Strafe für die Auswahl gibt.

Der Golomb-Code für diesen Vertrieb ist zum Code von Huffman für dieselben Wahrscheinlichkeiten gleichwertig, wenn es möglich war, den Code von Huffman zu schätzen.

Das Schema von Golomb wurde entworfen, um Folgen von nichtnegativen Zahlen zu verschlüsseln. Jedoch wird es leicht erweitert, um Folgen zu akzeptieren, die negative Zahlen mit einem Übergreifen und Auslassungsschema enthalten, in dem alle Werte einer positiven Zahl auf eine einzigartige und umkehrbare Weise wiederzugeteilt werden. Die Folge beginnt: 0,-1, 1,-2, 2,-3, 3,-4, 4... Der n negative Wert (d. h.,-n) wird zur n ungeraden Zahl (2n-1) kartografisch dargestellt, und die M positiver Wert wird zur M gerade Zahl (2m) kartografisch dargestellt. Das kann mathematisch wie folgt ausgedrückt werden: Ein positiver Wert wird zu kartografisch dargestellt, und ein negativer Wert wird dazu kartografisch dargestellt (

Einfacher Algorithmus

Bemerken Sie darunter das ist der Rice-Golomb, der verschlüsselt, wo der Rest-Code einfache gestutzte binäre Verschlüsselung, auch genannt "Rice verwendet, der codiert" (andere unterschiedliche Länge, sind binäre encodings, wie Arithmetik oder Huffman encodings, für die Rest-Codes möglich, wenn der Statistikvertrieb von Rest-Codes, und namentlich wenn nicht alle möglichen Reste nicht flach ist, nachdem die Abteilung verwendet wird). In diesem Algorithmus, wenn die M Parameter eine Macht 2 ist, wird es gleichwertig dem einfacheren Rice, der verschlüsselt.

  1. Befestigen Sie den Parameter M zu einem Wert der ganzen Zahl.
  2. Für N, die zu verschlüsselnde Zahl, finden
  1. Quotient = q = interne Nummer [N/M]
  1. Rest = r = N modulo M
  2. Erzeugen Sie Kennwort
  1. Das Codeformat:
  1. Quotient-Code (im unären Codieren)
  1. Schreiben Sie eine Q-Länge-Schnur von 1 Bit
  1. Schreiben Sie 0 Bit
  1. Rest-Code (in der gestutzten binären Verschlüsselung)
  1. Wenn M Macht 2, Coderest als binäres Format ist. So sind Bit erforderlich. (Reiscode)
  1. Wenn M nicht eine Macht 2 ist, setzen Sie
  1. Wenn
  1. Wenn Code die Zahl in der einfachen binären Darstellung mit b Bit.

Beispiel

Satz M = 10. So. Die Abkürzung ist

|

| }\

Zum Beispiel, mit einer Verschlüsselung von Rice-Golomb des Parameters M=10, würde die Dezimalzahl 42 zuerst in q=4, r=2 gespalten, und würde als qcode (q), rcode (r) = qcode (4), rcode (2) = 11110,010 verschlüsselt (Sie brauchen das sich trennende Komma im Produktionsstrom nicht zu verschlüsseln, weil 0 am Ende des Q-Codes genug ist, um zu sagen, wenn Q-Enden und r beginnen; sowohl der qcode als auch rcode werden selbstabgegrenzt).

Beispiel-Code

Zeichen: Dieser grundlegende Code nimmt einen Code von Rice, d. h. ein mit der M gleich einer Macht 2 an; es führt den Fall nicht durch, wo die gestutzte Bit-Verschlüsselung von Abteilungsresten vorzuziehend sein wird (wenn M nicht eine Macht 2, wie im vorherigen Beispiel ist).

Verschlüsselung

Leere golombEncode (char* Quelle, char* dest, int M)

{\

IntReader intreader (Quelle);

BitWriter bitwriter (dest);

während (intreader.hasLeft )

{\

interne Nummer num = intreader.getInt ;

interne Nummer q = num / M;

für (interne Nummer i = 0; ich

Entzifferung

Leere golombDecode (char* Quelle, char* dest, int M)

{\

BitReader bitreader (Quelle);

IntWriter intwriter (dest);

interne Nummer q = 0;

interne Nummer nr = 0;

während (bitreader.hasLeft )

{\

nr = 0;

q = 0;

während (bitreader.getBit ) q ++;//potenziell gefährlich mit missgebildeten Dateien.

für (interne Nummer = 0; a

Verwenden Sie für die Verschlüsselung der Lauf-Länge

In Anbetracht eines Alphabetes von zwei Symbolen, oder eine Reihe zwei Ereignisse, P und Q, mit Wahrscheinlichkeiten p und (1 − p) beziehungsweise, wo p  1/2, das Codieren von Golomb verwendet, um Läufe der Null zu verschlüsseln, oder mehr Ps von einzelnem Qs getrennt werden kann. In dieser Anwendung, der besten Einstellung des Parameters ist M die nächste ganze Zahl dazu. Wenn p = 1/2, M = 1, und der Code von Golomb unär entspricht (n , ist 0 P durch einen Q gefolgt, wird als n verschlüsselt, die von einer Null gefolgt sind).

Anwendungen

Zahlreiches Signal codecs verwendet einen Code von Rice für Vorhersagerückstände.

In prophetischen Algorithmen neigen solche Rückstände dazu, in einen zweiseitigen geometrischen Vertrieb mit kleinen Rückständen zu fallen, die häufiger sind als große Rückstände, und der Code von Rice kommt nah dem Code von Huffman für solch einen Vertrieb ohne die Gemeinkosten der Notwendigkeit näher, den Tisch von Huffman zu übersenden.

Ein Signal, das keinen geometrischen Vertrieb vergleicht, ist eine Sinus-Welle, weil die Differenzialrückstände ein sinusförmiges Signal schaffen, dessen Werte keinen geometrischen Vertrieb schaffen (die höchsten und niedrigsten Rückstand-Werte haben ähnliche hohe Frequenz von Ereignissen, nur die negativen und positiven Mittelrückstände kommen weniger häufig vor).

Mehrere lossless Audiocodecs, solche, die, FLAC, Apple Lossless und MPEG-4 ALS Kürzer werden, verwenden einen Code von Rice nach dem geradlinigen Vorhersageschritt (genannt "anpassungsfähiger TANNE-Filter" im Apple Lossless).

Das Reiscodieren wird auch im FELICS lossless Image codec verwendet.

Der Codierer von Golomb-Rice wird in der Wärmegewicht-Codierbühne des gestützten lossless Images des Algorithmus von Reis codecs verwendet. Ein solches Experiment gibt einen Kompressionsverhältnis-Graphen nach, der unten gegeben ist. Sieh andere Einträge in dieser Kategorie an der Unterseite von dieser Seite. in denjenigen Kompression geben die progressiven Raumdifferenzialdaten ein Wechselgefolge von positiven und negativen Werten ungefähr 0 nach, die zu positiv-einzigen ganzen Zahlen kartografisch wiederdargestellt werden (durch die Verdoppelung des absoluten Werts und das Hinzufügen von demjenigen, wenn der Eingang negativ ist), und dann Rice-Golomb, der codiert, angewandt wird, indem er den Teiler ändert, der klein bleibt.

In jenen Ergebnissen kann der Rice, der codiert, sehr lange Folgen von einem Bit für den Quotienten schaffen; aus praktischen Gründen ist es häufig notwendig, die ganze Lauf-Länge von einem Bit zu beschränken, so besteht eine modifizierte Version des Rice-Golomb, der verschlüsselt, daraus, die lange Schnur von einem Bit durch die Verschlüsselung seiner Länge mit einem rekursiven Rice-Golomb zu ersetzen, der verschlüsselt; das verlangt, dass das Aufbewahren einiger Werte zusätzlich zum anfänglichen Teiler k die notwendige Unterscheidung erlaubt.


Al-Araber von Shatt / Comic-Codeautorität
Impressum & Datenschutz