-
Die
vorliegende Erfindung betrifft ein Verfahren und eine Vorrichtung
zur Datenkomprimierung im Allgemeinen und insbesondere ein Verfahren
und eine Vorrichtung zur Ausführung
einer adaptiven Datenkomprimierung. Insbesondere betrifft die vorliegende
Erfindung ein Verfahren und eine Vorrichtung zur Bereitstellung
einer verbesserten Datenkomprimierungsleistung für einen adaptiven Datenkomprimierer
(adaptive data compressor).
-
Die
Art von Daten, die einem Komprimierungsalgorithmus zur Komprimierung
vorgelegt werden, kann enorm variieren. Deshalb werden die meisten
Komprimierungsalgorithmen von der Art her adaptiv ausgelegt, um
eine bessere Komprimierungsleistung über einen weiten Bereich von
Datenarten zu erreichen. Sowohl der klassische Lempel-Ziv 1 (LZ_1)
als auch der Komprimierungsalgorithmus Lempel-Ziv 2 (LZ_2)
verkörpern
dieses Konzept zu einem gewissen Grad.
-
Im
Falle des LZ_1 wird jedes verarbeitete Byte in einen Ereignis-Puffer
(history-buffer) verschoben, der zu Beginn leer ist. Diesen Ereignis-Puffer
kann man sich als ein Schieberegister mit einer Breite von einem Byte
vorstellen, und sobald der Ereignis-Puffer vollständig gefüllt ist,
ersetzt jedes neue eingehende Datenbyte das älteste Datenbyte in dem Ereignis-Puffer.
Der aktuelle Inhalt des Ereignis-Puffers
wird mit den eingehenden Daten verglichen, um alle Zeichenketten
oder Sequenzen eingehender Datenbytes, die mit früher vorhandenen
noch immer in dem Ereignis-Puffer verbleibenden übereinstimmen, zu identifizieren.
Diese eingehende Datensequenz wird dann in eine kompaktere Form
codiert, wodurch der Startpunkt der übereinstimmenden Zeichenkette
innerhalb des Ereignis-Puffers und die Länge der übereinstimmenden Zeichenkette
definiert werden, und dies bildet die Grundlage des LZ_1 Komprimierungsalgorithmus.
-
Ein
LZ_1 Dekomprimierer (decompressor) pflegt einen Ereignis-Puffer mit einer
identischen Datenvorgeschichte wie der Ereignis-Puffer innerhalb
des LZ_1 Komprimierers und kopiert lediglich solche Zeichenketten
als dessen Ausgabe, wenn er einen Verweis decodiert.
-
Im
Falle des LZ_2 wird ein Verzeichnis von Datensequenzen gepflegt,
und Verweise auf diese Verzeichniseinträge bilden die Grundlage des
LZ_2 Komprimierungsalgorithmus. Es ist nicht nötig, eine Länge zu decodieren, wenn die
eingehenden Daten mit einem der Verzeichniseinträge übereinstimmen, da die Länge ebenfalls
in dem Verzeichnis gespeichert ist. Deshalb besteht eine komprimierte
Datenausgabe von einem LZ_2 Komprimierungsalgorithmus normalerweise
lediglich aus einer Sequenz von Zahlen, die Verzeichniseinträge darstellen.
Adaptive LZ_2-Ausführungen
fügen kontinuierlich
auf Basis der eingehenden Daten neue Verzeichniseinträge hinzu.
Wie im Falle von LZ_1 beginnen sowohl der LZ_2 Komprimierer als
auch der LZ_2 Dekomprimierer mit einer identischen Struktur und
behalten diese bei, obwohl im Falle von LZ_2 unterschiedliche Verwaltungsstrategien
verwendet werden, wenn das Verzeichnis voll wird.
-
Üblicherweise
werden in einem zu komprimierenden Datenstrom häufig Sequenzen von identischen Zeichen
gefunden, allgemein als „Läufe" (runs) bekannt.
Ausführbarer
Code enthält
zum Beispiel häufig
signifikante Läufe
von „00" Zeichen. Ebenso
erzeugen Code-Kompilierer häufig
Leerdaten zur Initialisierung von Datenelementen (arrays) oder Variablen
in einen bekannten Zustand. Des Weiteren ordnet eine Datenbanksoftware
häufig
Datenfelder zu, die entweder vollständig leere oder ausschließlich aus
Nullen bestehende Zeichen aufweisen.
-
Außerdem enthalten
binäre
Bitmapbilderdaten häufig
ziemlich viele „Leerstellen" (whitespaces), üblicherweise „00"-Zeichen, die acht
Pixel darstellen, die alle leer sind. Im Übrigen können Grauskala- oder Farbbilderdaten,
besonders die unter Verwendung eines Bytes pro Pixel codiert sind,
ebenfalls lange Läufe
identischer Datenbytes enthalten.
-
Diese
Arten von Läufen
können
zu überflüssigen und
unproduktiven Anpassungen innerhalb eines Datenkomprimierers führen. Des
Weiteren dauert es eine Weile, bis der Datenkomprimierer sein optimales
Komprimierungsverhältnis
nach dem Lauf wieder aufnimmt, da ein Ereignis-Puff er in LZ_1 oder
ein Verzeichnis in LZ_2 leicht mit identischen Datenbytes aus einem
Lauf zum Überlaufen
gebracht werden kann. Folglich wäre es
wünschenswert,
ein Verfahren und eine Vorrichtung bereitzustellen, um einem Datenkomprimierer
eine bessere Datenkomprimierungsleistung zu bieten, so dass es dem
Datenkomprimierer möglich
sein kann, seine optimale Komprimierungsleistung nach dem Auftreten
eines Laufs schneller wieder aufzunehmen.
-
Abdat
M, u.a. offenbaren in „Adaptive
limitation of the dictionary size in LZW data compression", Proceedings of
1995 IEEE International Symposium on Information Theory, Seite 18,
1995, eine Lauflängencodierung
(run-length encoding) kombiniert mit dem LZW-Algorithmus. Die Lauflängencodierung
entfernt die wiederholten Symbole aus den Eingabedaten. Die Zahl
N der Wiederholungen muss größer als
ein vordefinierter Schwellwert sein, um einen Lauflängencode
auszugeben.
-
Angesichts
des Vorangehenden ist es deshalb eine Aufgabe der vorliegenden Erfindung,
ein verbessertes Verfahren und eine verbesserte Vorrichtung zur
Komprimierung von Daten bereitzustellen.
-
Es
ist eine weitere Aufgabe der vorliegenden Erfindung, ein verbessertes
Verfahren und eine verbesserte Vorrichtung zur Durchführung einer
adaptiven Datenkomprimierung bereitzustellen.
-
Es
ist eine weitere Aufgabe der vorliegenden Erfindung, ein verbessertes
Verfahren und eine verbesserte Vorrichtung zur Bereitstellung einer
besseren Datenkomprimierungsleistung für einen adaptiven Datenkomprimierer
bereitzustellen.
-
In Übereinstimmung
mit einem Verfahren der vorliegenden Erfindung wird ein unkomprimierter
Datenstrom an eine Datenkomprimiereinheit gesendet. Aber bevor der
unkomprimierte Datenstrom an die Datenkomprimiereinheit gesendet
wird, wird zunächst
ein eingehendes Datenbyte aus dem unkomprimierten Datenstrom mit
dem vorhergehenden Datenbyte aus dem unkomprimierten Datenstrom
verglichen. Ein erster Zählerwert
wird als Reaktion auf eine Übereinstimmung
zwischen dem eingehenden Datenbyte und dem vorhergehenden Datenbyte
erhöht.
Ein zweiter Zählerwert
wird dann als Reaktion auf nachfolgende Übereinstimmungen zwischen einem
eingehenden Datenbyte und dessen vorhergehendem Datenbyte erhöht, nachdem der
erste Zählerwert
einen voreingestellten Wert erreicht hat. Der zweite Zählerwert
wird schließlich
nach Beendung eines Laufs des eingehenden Datenbytes als Ersatz
für einen
Teil des Laufs an die Datenkomprimiereinheit gesendet, so dass die
Datenkomprimiereinheit ihr optimales Komprimierungsverhältnis schnell
Wiederaufnehmen kann, nachdem der Lauf innerhalb des unkomprimierten
Datenstroms aufgetreten ist.
-
Die
Erfindung versteht man am Besten unter Bezugnahme auf die folgende
ausführliche
Beschreibung eines erläuternden
Ausführungsbeispiels,
wenn diese in Verbindung mit den beigefügten Zeichnungen gelesen wird,
in denen:
-
1a ein
Blockschaltbild einer Datenkomprimiereinheit darstellt, in der ein
bevorzugtes Ausführungsbeispiel
der vorliegenden Erfindung enthalten sein kann;
-
1b ein
Blockschaltbild einer Datendekomprimiereinheit darstellt, in der
ein bevorzugtes Ausführungsbeispiel
der vorliegenden Erfindung enthalten sein kann;
-
2 ein
Blockschaltbild eines Datenvorkomprimierers (data pre-compressor)
zur Bereitstellung einer verbesserten Komprimierungsleistung für eine Datenkomprimiereinheit
in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung darstellt;
-
3 ein
Zustandsdiagramm eines Verfahrens zur Bereitstellung einer verbesserten
Datenkomprimierungsleistung für
einen Datenvorkomprimierer in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung darstellt; und
-
4 ein
Zustandsdiagramm eines Verfahrens zur Bereitstellung einer verbesserten
Datenkomprimierungsleistung für
einen Datennachkomprimierer (data post-compressor) in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung darstellt.
-
Die
vorliegende Erfindung kann zusammen mit vielen Arten von adaptiven
Datenkomprimierungsalgorithmen umgesetzt werden, zum Beispiel Lempel-Ziv 1,
Lempel-Ziv 2 usw. Fachleute werden verstehen, dass die
vorliegende Erfindung entweder in Hardware oder in Software ausgeführt werden
kann.
-
Unter
Bezugnahme auf die Zeichnungen, und insbesondere auf 1a,
ist ein Blockschaltbild einer Datenkomprimiereinheit abgebildet,
in der eine bevorzugte Ausführungsform
der vorliegenden Erfindung enthalten sein kann. Wie gezeigt, ist
die Komprimiereinheit (compressor unit) 10 mit einer Steuereinheit
(Controller) 11 und einem Direktzugriffsspeicher (RAM)
oder einem inhaltsadressierbaren Speicher (contentaddressable memory", CAM) 12 gekoppelt.
-
Jede
Art adaptiver Komprimierungsalgorithmen kann innerhalb der Komprimiereinheit 10 realisiert werden.
Zu Beispiele für
adaptive Komprimierungsalgorithmen gehören klassische Algorithmen
wie zum Beispiel Lempel-Ziv 1 und Lempel-Ziv 2,
die den Fachleuten bekannt sind, oder ein aktuellerer Algorithmus
wie zum Beispiel „Adaptive
Lossless Data Compression" (ALDC),
beschrieben in „QIC
Development Standard QIC-154",
Revision A, 10. März
1994, Quarter-Inch Cartridge Drive Standards, Inc. Alle dem gewählten Komprimierungsalgorithmus
zugeordnete Datenstrukturen wie zum Beispiel ein Ereignis-Puffer
für Lempel-Ziv 1 oder
ein Verzeichnis für
Lempel-Ziv 2 werden innerhalb des RAM/CAM 12 behalten.
Deshalb hängt
die optimale Größe des RAM/CAM 12 von
der Art des innerhalb der Komprimiereinheit 10 verwendeten
Komprimierungsalgorithmus ab. Während
des Betriebs empfängt
die Komprimiereinheit 10 zunächst einen unkomprimierten
Datenstrom von einer Datenquelle 13. Nach der Datencodierung
wird ein komprimierter Datenstrom an eine Datensenke 14 übertragen.
-
Unter
Bezugnahme auf 1b ist ein Blockschaltbilds
einer Datendekomprimiereinheit abgebildet, in der eine bevorzugtes
Ausführungsform
der vorliegenden Erfindung enthalten sein kann. Wie gezeigt, ist
die Dekomprimiereinheit (decompressor unit) 15 mit einer
Steuereinheit 16 und einem RAM 17 verbunden. Ähnlich wie
bei RAM 12 werden alle Datenstrukturen für die Dekomprimiereinheit 15 innerhalb
des RAM 17 behalten, und die Größe des RAM 17 hängt von
der Art des innerhalb der Komprimiereinheit 10 verwendeten
Komprimierungsalgorithmus ab.
-
Während des
Betriebs empfängt
die Dekomprimiereinheit 15 zunächst einen komprimierten Datenstrom
von der Datenquelle 19. Nach der Datendecodierung wird
ein unkomprimierter Datenstrom von der Dekomprimiereinheit 15 an
eine Datensenke 18 übertragen.
-
Unter
Bezugnahme auf 2 wird ein Blockschaltbild eines
Datenvorkomprimierers zur Bereitstellung einer verbesserten Komprimierungsleistung
für die
Datenkomprimiereinheit 10 aus 1a in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung dargestellt. Die Vorkomprimiereinheit 20 ist
vorzugsweise zwischen der Datenquelle 13 und der Komprimiereinheit 10 geschaltet.
Wie gezeigt enthält
die Vorkomprimiereinheit 20 ein erstes Register 22,
ein zweites Register 23, einen Komparator 24,
einen ersten Zähler 25,
einen zweiten Zähler 26 und
einen Multiplexer 21.
-
Während des
Betriebs wird jedes eingehende Datenbyte von einem unkomprimierten
Datenstrom zunächst
in dem ersten Register 22 gespeichert.
-
Dieses
eingehende Datenbyte wird nach Ankunft eines weiteren eingehenden
Datenbyte von dem unkomprimierten Datenstrom an das zweite Register 23 gesendet.
Somit hält
das zweite Register 23 den Wert eines vorhergehenden (d.h.
unmittelbar vorhergehenden) Datenbyte von dem unkomprimierten Datenstrom. Das
in dem ersten Register 22 gespeicherte eingehende Datenbyte
wird dann unter Verwendung des Komparators 24 mit dem in
dem zweiten Register 23 gespeicherten vorhergehenden Datenbyte
verglichen. Der erste Zähler 25 wird
anfänglich
auf Null zurückgestellt,
aber der erste Zähler 25 wird
jedes Mal dann erhöht,
wenn es eine durch Komparator 24 angezeigte Übereinstimmung
zwischen dem in dem ersten Register 22 gespeicherten Datenbyte
und dem in dem zweiten Register 23 gespeicherten Datenbyte
gibt.
-
Sonst
wird der erste Zähler 25 wieder
zurückgestellt,
wenn es keine Übereinstimmung
zwischen dem in dem ersten Register 22 gespeicherten Datenbyte
und dem in dem zweiten Register 23 gespeicherten Datenbyte
gibt. Ebenfalls wird das eingehende Datenbyte von dem unkomprimierten
Datenstrom an die Komprimiereinheit 10 über den Multiplexer 21 gesendet,
wenn es keine Übereinstimmung
zwischen dem in dem ersten Register 22 gespeicherten Datenbyte
(d.h. dem eingehenden Datenbyte) und dem in dem zweiten Register 23 gespeicherten
Datenbyte gibt.
-
Dem
ersten Zähler 25 ist
ein voreingestellter Wert zugeordnet, und sobald dieser voreingestellte
Wert erreicht wird, wird jedes zusätzliche eingehende Datenbyte
von dem unkomprimierten Datenstrom, das immer noch mit dessen vorhergehendem
Datenbyte von dem unkomprimierten Datenstrom übereinstimmt, verworfen.
-
Dies
bedeutet ein Auftreten eines Laufzustands innerhalb des unkomprimierten
Datenstroms. An diesem Punkt wird stattdessen der zweite Zähler 26 für jegliche übereinstimmende
Zustände
zwischen einem eingehenden Datenbyte und dessen vorhergehendem Datenbyte
erhöht.
Wenn schließlich
zwischen einem eingehenden Datenbyte und dessen vorhergehendem Datenbyte
keine Übereinstimmung
mehr auftritt, wird der in dem zweiten Zähler 26 gespeicherte
Zählerwert
an die Komprimiereinheit 10 weitergegeben, gefolgt von dem
nicht übereinstimmenden
eingehenden Datenbyte.
-
Der
voreingestellte Wert für
den ersten Zähler 25 sollte
ziemlich klein sein, und ein Wert von drei, entsprechend einer Lauflänge von
vier, wird als ziemlich optimal für die meisten unkomprimierten
Datenströme angesehen.
Somit werden alle Datenbytes von einem unkomprimierten Datenstrom,
die Läufe
mit weniger als dem vorgegebenen Wert von vier enthalten, einfach
an die Komprimiereinheit 10 zur weiteren Bearbeitung gemäß dem darin
verwendeten Komprimierungsalgorithmus weitergegeben.
-
Da
die meisten adaptiven Komprimierungsalgorithmen auf Zeichen beruhen,
sollten die Zähler 25, 26 vorzugsweise
dieselbe Größe wie ein
Zeichen aufweisen, üblicherweise
acht Bit. Wenn der Lauf exakt dieselbe Länge wie der vorgegebene Wert
hat, wird ein Zählerwert
von „00" an die Komprimiereinheit 10 weitergegeben. Wenn
der Lauf ein Byte länger
als der vorgegebene Wert ist, wird ein Zählerwert von „01" an die Komprimiereinheit 10 weitergegeben
usw. Wenn 8-Bit-Zeichen verwendet werden, wird der höchste Wert
als Zählfortsetzungszeichen
verwendet.
-
Unter
Bezugnahme auf 3 ist ein Zustandsdiagramm eines
Verfahrens zur Bereitstellung einer verbesserten Datenkomprimierungsleistung
für einen
Datenvorkomprimierer in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung dargestellt. Ausgehend von Zustand (00)
werden Verfügbar_Flag
(Available_Flag), Erster_Zähler
(First_Counter), Zweiter_Zähler
(Second_Counter) auf Null zurückgestellt,
gehe dann zu Zustand (01). In Zustand (01) wartet der Vorkomprimierer
auf eine Daten_Byte (Data_Byte) Eingabeanforderung. In Zustand (02)
wird festgestellt, ob Verfügbar_Flag
auf 0 gesetzt ist; wenn ja, gehe zu Zustand (04); wenn nein, gehe
zu Zustand (03).
-
In
Zustand (03) wird ein vorher gespeichertes neues Daten_Byte an den
Komprimierer geliefert. In Zustand (04) wird ein Daten_Byte von
der Datenquelle abgerufen, gehe dann zu Zustand (05). In Zustand
(05) wird festgestellt, ob Erster_Zähler den Voreingestellten_Grenzwert
(Preset_Limit) erreicht hat; wenn ja, gehe zu Zustand (08); wenn
nein, gehe zu Zustand (07).
-
In
Zustand (06) wird festgestellt, ob das neue Daten_Byte identisch
mit dem „Vorhergehenden_Byte" (Previous_Byte)
ist; wenn ja, gehe zu Zustand (08); wenn nein, gehe zu Zustand (07).
-
In
Zustand (07) wird Erster_Zähler
auf Null zurückgestellt,
gehe dann zu Zustand (09). In Zustand (08) wird Erster_Zähler um
1 erhöht,
gehe dann zu Zustand (09). In Zustand (10) wird das neue Daten_Byte
an den Komprimierer geliefert, gehe dann zu Zustand (01).
-
In
Zustand (10) wird festgestellt, ob das neue Daten_Byte identisch
mit dem „Vorhergehenden_Byte" ist; wenn ja, gehe
zu Zustand (13); wenn nein, gehe zu Zustand (11). In Zustand (12)
wird Verfügbar_Flag
auf 1 gesetzt, gehe dann zu Zustand (01).
-
In
Zustand (13) wird Zweiter_Zähler
um 1 erhöht,
gehe dann zu Zustand (14). In Zustand (14) wird festgestellt, ob
Zweiter_Zähler
seinen Maximalwert erreicht hat; wenn ja, gehe zu Zustand (15);
wenn nein, gehe zu Zustand (04).
-
In
Zustand (15) wird der Wert von Zweiter_Zähler an den Komprimierer geliefert,
gehe dann zu Zustand (16). In Zustand (16) wird der Wert von Zweiter_Zähler auf „01" zurückgestellt,
gehe dann zu Zustand (01).
-
Unter
Bezugnahme auf 4 ist ein Übersichts-Zustandsdiagramm für den entsprechenden Datennachkomprimierer
in Übereinstimmung
mit einer bevorzugten Ausführungsform
der vorliegenden Erfindung dargestellt. Ausgehend von Zustand (00)
werden Erweiterungs_Flag (Extension_Flag), Erster_Zähler, Zweiter_Zähler auf
Null zurückgestellt,
gehe dann zu Zustand (01).
-
In
Zustand (01) wird auf ein Daten_Byte von dem Dekomprimierer gewartet.
In Zustand (02) wird festgestellt, ob Erweiterungs_Flag auf 0 gesetzt
ist; wenn ja, gehe zu Zustand (13); wenn nein, gehe zu
Zustand (03).
-
In
Zustand (03) wird ein neuer Daten_Byte Wert in Zweiter_Zähler geladen.
In Zustand (04) wird festgestellt, ob Zweiter_Zähler seinen Maximalwert erreicht
hat; wenn ja, gehe zu Zustand (09); wenn nein, gehe zu Zustand (05).
-
In
Zustand (05) wird das Erweiterungs_Flag auf Null zurückgestellt,
gehe dann zu Zustand (06). In Zustand (06) wird festgestellt, ob
der Wert von Zweiter_Zähler
bei 0 liegt; wenn ja, gehe zu Zustand (00); wenn nein, gehe zu Zustand
(07). In Zustand (08) wird das vorhergehende Daten_Byte an die Ausgabe
geliefert, gehe dann zu Zustand (08). In Zustand (08) wird Zweiter_Zähler um
1 verringert, gehe dann zu Zustand (06).
-
In
Zustand (09) wird Erweiterungs_Flag auf 1 gesetzt, gehe dann zu
Zustand (10). In Zustand (10) wird das vorhergehende Daten_Byte
an die Ausgabe geliefert, gehe dann zu Zustand (11). In Zustand
(11) wird Zweiter_Zähler
um 1 verringert, gehe dann zu Zustand (12). In Zustand (12) wird
festgestellt, ob der Wert von Zweiter_Zähler größer als 1 ist; wenn ja, gehe
zu Zustand (10); wenn nein, gehe zu Zustand (01).
-
In
Zustand (13) wird festgestellt, ob Erster_Zähler einen Voreingestellten
Grenzwert erreicht hat; wenn ja, gehe zu Zustand (03); wenn nein,
gehe zu Zustand (14).
-
In
Zustand (14) wird der neue Daten_Byte Wert an die Ausgabe geliefert,
gehe dann zu Zustand (15). In Zustand (15) wird festgestellt, ob
das neue Daten_Byte identisch mit dem Vorhergehenden_Byte ist; wenn ja,
gehe zu Zustand (17); wenn nein, gehe zu Zustand (16). In Zustand
(16) wird der Wert von Erster_Zähler auf
Null zurückgestellt,
gehe dann zu Zustand (01). In Zustand (17) wird Erster_Zähler um
1 erhöht,
gehe dann zu Zustand (01).
-
Tabelle
I ist ein Beispiel, das die Ergebnisse von der Vorkomprimiereinheit
20 auf
der Grundlage des eingehenden Datenstroms in Übereinstimmung mit einer bevorzugten
Ausführungsform
der Erfindung darstellt. In diesem Beispiel wird der voreingestellte
Wert auf drei gesetzt, und ein 8-Bit-Symbol (ein Byte) wird verwendet.
EINGABEDATENSTROM | EINGABE
AN KOMPRIMIERER |
C3
02 02 02 A7 | C3
02 02 20 A7 |
96
FF FF FF FF A2 | 96
FF FF FF FF 00 A2 |
31
30 30 30 30 30 39 | 31
30 30 30 30 01 39 |
OA
40 .. (ein Lauf von 9) .. 40 C3 | 4A
40 40 40 40 05 C3 |
64
00 .. (ein Lauf von 258) .. 00 32 | 64
00 04 00 00 FE 32 |
98
00 .. (ein Lauf von 259) .. 00 8D | 9B
00 00 04 00 FF 00 8D |
20
40 .. (ein Lauf von 260) .. 40 20 | 20
40 44 40 40 FF 01 20 |
-
Tabelle I
-
Wie
beschrieben wurde, stellt die vorliegende Erfindung ein Verfahren
und eine Vorrichtung zur Bereitstellung einer verbesserten Datenkomprimierungsleistung
für eine
Komprimiereinheit bereit.
-
Obwohl
der Veranschaulichung halber während
der gesamten Beschreibung eine Komprimiereinheit verwendet wird,
werden die Fachleute verstehen, dass ein so beschriebener Vorkomprimierer
auch einen entsprechenden Nachdekomprimierer verwenden muss. Ein
solcher Nachdekomprimierer ist vorzugsweise zwischen der Dekomprimiereinheit 15 und
der Datensenke 18 aus 1b geschaltet.
-
Ein
Nachdekomprimierer führt
die umgekehrte Funktion wie ein Vorkomprimierer aus. Jedes von einer Dekomprimiereinheit
ausgegebene Datenbyte wird mit dessen vorhergehendem Datenbyte verglichen,
und ein Zähler
wird erhöht
oder zurückgestellt.
Wenn der Zähler
den voreingestellten Wert erreicht, wird das nächste Datenbyte als ein Zählerwert
betrachtet, der darstellt, wie viele zusätzliche Kopien des letzten
ausgegebenen Werts die Fortsetzung eines Laufs darstellen, und er
muss herauskopiert werden, bevor jegliche weitere komprimierte Datenbytes
decodiert werden.
-
Sowohl
für einen
Vorkomprimierer als auch für
einen Nachdekomprimierer wird der maximale Zählersymbolwert dazu verwendet,
einen Zählerwert
mit diesem Wert zu kennzeichnen, aber dass dieser Zählerwert für das nächste Symbol
fortgesetzt wird, das gemäß derselben
Regel zu verarbeiten ist. Die Verwendung von Zählfortsetzungszeichen auf diese
Art gestattet die Codierung von Läufen beliebiger Länge, mit
einem Abzug von einem Symbol für
Läufe mit
einer Länge,
die exakt mit dem voreingestellten Schwellwert übereinstimmen.
-
Was
die Hardware angeht, benötigt
die vorliegende Erfindung lediglich ein zusätzliches Register zur Speicherung
des vorhergehenden Datensymbols, einen Komparator und einen Zähler zusammen
mit einer kleinen Steuerlogik. Tatsächlich ist das Register für einen
auf inhaltsadressierbarem Speicher (content-addressable memory,
CAM) beruhenden Komprimierer bereits in der Hardware vorhanden,
aber auf jeden Fall ist die für
die Umsetzung der vorliegenden Erfindung beanspruchte Siliziumfläche vernachlässigbar.
-
Außerdem kann
die vorliegende Erfindung für
jede Art von Komprimierungsalgorithmen angewendet werden und für lange
Läufe von
Daten fraglos eine beachtliche Komprimierung bereitstellen (mehr
als 250:1 für
8-Bit-Symbole). Im Falle von adaptiven Universalkomprimierungsalgorithmen
stellt dies einen erheblichen Vorteil dar, da sich solche Komprimierungsalgorithmen
allgemein anpassen, unabhängig
davon, ob ein Strom von eingehenden Daten zur Anpassung des Komprimierungsalgorithmus
verwendet werden soll oder nicht. Ein Algorithmus Lempel_Ziv 1 kann
zum Beispiel lediglich ein maximales Komprimierungsverhältnis von
etwa 90:1 für
einen langen Lauf von identischen Daten erreichen.
-
Während die
Erfindung insbesondere unter Bezugnahme auf eine bevorzugte Ausführungsform
gezeigt und beschrieben wurde, werden die Fachleute verstehen, dass
verschiedene Änderungen
der Form und der Einzelheiten darin vorgenommen werden können, ohne
von dem wie in den Ansprüchen
definierten Umfang der Erfindung abzuweichen.