DPCM/RLE/VLI - Grundlegendes

In diesem Kapitel werden die Grundlagen der DPCM, der VLI und der RLE erläutert

Differential Pulse Code Modulation (DPCM)

Bei diesem Verfahren macht man sich die Tatsache zunutze, daß die DC-Koeffizienten normalerweise nur sehr gering vom vorhergehenden Wert abweichen und die Werte im Schnitt ziemlich groß sind. Deshalb kodiert man nur beim ersten DC-Wert den Wert selbst und bei den nachfolgenden immer die Differenz zum Vorgänger. Diese Differenz (die normalerweise wesentlich kleiner ist als der tatsächliche Wert) wird dann mit einem Variable Length Integer kodiert und spart somit Platz.

Variable Length Integer (VLI)

Beim VLI-Schritt werden jetzt für jeden Wert (AC und DC) nur so viele Bits verwendet, wie tatsächlich benötigt werden. Bei Werten von -3 bis 3 währen das also 2 Bits (siehe Tabelle). Dadurch wird nochmals eine (verlustfreie) Kompression erreicht.
Bits Amplitude
1 -1,1
2 -3,-2,2,3
3 -7..-4,4..7
4 -15..-8,8..15
5 -31..-16,16..31
6 -63..-32,32..63
7 -127..-64,64..127
8 -255..-128,128..255
9 -511..-256,256..511
10 -1023..-512,512..1023


Run Length Encoding (RLE)

Hier macht man sich längere Nullketten, die dann von einem von Null verschiedenen AC-Koeffizienten gefolgt werden, zu Nutzen. Anstatt nämlich jeden Koeffizenten einzeln zu speichern, wird jeder AC-Koeffizient, der nicht Null ist, in Kombination mit der Anzahl der Nullen, die ihm vorausgegangen sind, angegeben. Dies geschieht mit Hilfe von 2 Symbolen:
Symbol 1: (Länge, Größe)
Symbol 2: (Wert)

Das erste Symbol enthält die Länge der Nullfolge und die Anzahl der Bits, die benötigt werden, um Symbol 2 darzustellen.
In Symbol 2 ist dann der AC-Koeffizient als VLI gespeichert.

ähnlich wird auch die Kodierung des DC-Koeffizienten, bzw. der errechneten Differenz vorgenommen.

Symbol 1: (Größe)
Symbol 2: (Wert)


Zu beachten ist noch, daß nur maximal 15 Nullen hintereinander in einem Symbol kodiert werden, nämlich als (15,0) und die restlichen dann in neuen Symbolen. Eine weitere Ausnahme ist wenn nur noch Nullen übrig sind, dann wir das EOB Symblo gesetzt ((0,0)).