DE4340591C2 - Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete - Google Patents
Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf NetzwerkpaketeInfo
- Publication number
- DE4340591C2 DE4340591C2 DE4340591A DE4340591A DE4340591C2 DE 4340591 C2 DE4340591 C2 DE 4340591C2 DE 4340591 A DE4340591 A DE 4340591A DE 4340591 A DE4340591 A DE 4340591A DE 4340591 C2 DE4340591 C2 DE 4340591C2
- Authority
- DE
- Germany
- Prior art keywords
- code
- compression
- character
- dictionary
- run
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/005—Statistical coding, e.g. Huffman, run length coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Reduction Or Emphasis Of Bandwidth Of Signals (AREA)
Description
Diese Erfindung bezieht sich im allgemeinen auf die Kompres
sion und Dekompression von digitalen Daten und insbesondere
auf Ausführungen eines verlustfreien Kompressions- und De
kompressions-Verfahrens und einer verlustfreien Kompres
sions- und Dekompressions-Vorrichtung unter Verwendung eines
Wörterbuches, um Kompressionsdaten zu speichern, und auf An
wendungen von Kompressions-/Dekompressions-Techniken auf
Netzwerkpaketkommunikationen.
Eine Hauptklasse von Kompressionsschemata kodieren Mehr-Zei
chen-Folgen unter Verwendung binärer Sequenzen oder "Kode
wörter", die ansonsten nicht verwendet werden, um einzelne
Zeichen zu kodieren. Die Folgen sind aus einem "Alphabet",
oder aus Einzel-Zeichen-Folgen gebildet. Dieses Alphabet
stellt den kleinsten, einheitlichen Teil an Informationen
dar, den der Kompressor verarbeitet. Folglich hat ein Al
gorithmus, der acht Bit verwendet, um seine Zeichen darzu
stellen, 256 eindeutige Zeichen in seinem Alphabet. Bis zu
dem Grad, bei dem die Mehr-Zeichen-Folgen, die in dem Ko
dierungsschema dargestellt sind, in einer gegebenen Datei
des Datenstromes angetroffen werden, ist die Kompression
wirksam. Als Analogie zu zweisprachigen Wörterbüchern, die
verwendet werden, um zwischen menschlichen Sprachen zu über
setzen, wird das Gerät, das die Abbildung zwischen einem un
komprimierten Kode und einem komprimierten Kode ausführt,
herkömmlicherweise als "Wörterbuch" bezeichnet.
Im wesentlichen hängt die Nützlichkeit eines Kompressions
schemas, das auf einem Wörterbuch basiert, von der Frequenz
ab, mit der die Wörterbucheinträge für Mehr-Zeichen-Folgen
verwendet werden. Wenn ein festes Wörterbuch für einen
Dateityp optimiert ist, ist es unwahrscheinlich, daß es für
einen weiteren optimiert ist. Für ein Wörterbuch, das eine
große Anzahl von Zeichenkombinationen, die wahrscheinlich in
Zeitungstextdateien gefunden werden, einschließt, ist es
z . B. unwahrscheinlich, Datenbankdateien, Tabellenkalku
lationsdateien, Rastergraphikdateien, CAD-Dateien (CAD =
Computer-Aided-Design = Rechner-gestützte Entwicklung), etc.
wirksam zu komprimieren.
Anpassungsfähige Kompressionsschemata, bei denen das Wörter
buch, das verwendet wird, um gegebene Eingabedaten zu kom
primieren, erzeugt wird, während diese Eingabedaten kom
primiert werden, sind bekannt. Kodewörter, die jedes ein
zelne Zeichen, das in den unkomprimierten Eingabedaten mög
lich ist, darstellen, werden in das Wörterbuch eingefügt.
Zusätzliche Einträge werden zu dem Wörterbuch hinzugefügt,
wenn Mehr-Zeichen-Folgen in der Datei angetroffen werden.
Die zusätzlichen Wörterbucheinträge werden verwendet, um das
nachfolgende Auftreten von Mehr-Zeichen-Folgen zu kodieren.
Die Übereinstimmung von derzeitigen Eingabemustern wird z. B.
lediglich gegenüber Ausdrücken durchgeführt, die derzeitig
in dem Wörterbuch vorhanden sind. Nach jeder fehlge
schlagenen Übereinstimmung wird dem Wörterbuch ein neuer
Ausdruck hinzugefügt. Der neue Ausdruck wird durch Erwei
terung des übereinstimmenden Ausdrucks durch ein Symbol
(z. B. das Eingabesymbol, das die Übereinstimmung "bricht")
gebildet. Die Kompression wird in dem Naß ausgeführt, in dem
die Mehr-Zeichen-Folgen, die in der Datei am häufigsten auf
treten, angetroffen werden, wenn sich das Wörterbuch ent
wickelt bzw. wenn dieses aufgebaut wird.
Während der Dekompression wird das Wörterbuch auf ähnliche
Art gebaut. Wenn ein Kodewort für eine Zeichenfolge in der
komprimierten Datei angetroffen wird, enthält das Wörterbuch
folglich die notwendigen Informationen, um die entsprechende
Zeichenfolge wieder herzustellen. Weit verbreitete Kompres
sionsalgorithmen, die ein Wörterbuch verwenden, um Kompres
sions- und Dekompressionsinformationen zu speichern, sind
das erste und das zweite Verfahren von Lempel und Ziv, ge
nannt LZ1 bzw. LZ2. Der Lempel-Ziv (LZ) Algorithmus wurde
ursprünglich von Lempel und Ziv in "On the Complexity of
Finite Sequences", IEEE Transactions on Information Theory,
IT-22: 75-81, Januar 1976, in "A Universal Algorithm for
Sequential Data Compression", IEEE Transactions on Informa
tion Theory, IT-23: 337-343, Mai 1977, und in "Compression of
Individual Sequences via Variable Rate Coding", IEEE Trans
actions on Information Theory, IT-24: 530-536 beschrieben.
Die Verwendung von Wörterbüchern wird ebenfalls im US-Patent
Nr. 4,464,650 offenbart und verschiedene Verbesserungen des
Algorithmus werden im US-Patent Nr. 4,558,302 und im
US-Patent Nr. 4,814,746 offenbart.
Beim Arbeiten mit einer praktischen Ausführung ist der Spei
cherplatz, der für eine Kompression/Dekompression vorhanden
ist, endlich. Deshalb ist die Anzahl der Einträge in das
Wörterbuch endlich und die Länge der Kodewörter, die ver
wendet werden, um die Einträge zu kodieren, ist begrenzt.
Typischerweise variiert die Länge der Kodewörter zwischen 12
und 16 Bit. Wenn die Eingabedatenfolge ausreichend lang ist,
wird sich das Wörterbuch schließlich "auffüllen". Verschie
dene Handlungen sind an diesem Punkt möglich. Das Wörterbuch
kann z. B. in seinem derzeitigen Zustand eingefroren werden
und für den Rest der Eingabefolge verwendet werden. Bei
einem zweiten Ansatz wird das Wörterbuch zurückgesetzt und
ein neues Wörterbuch wird aus dem Nichts erzeugt. Bei einem
dritten Ansatz wird das Wörterbuch für einige Zeit einge
froren, bis sich das Kompressionsverhältnis verschlechtert,
dann wird das Wörterbuch zurückgesetzt. Andere Strategien
zum Rücksetzen des Wörterbuchs sind
in "Practical Dicitionary
Management for Hardware Data Compression" Communications of
the ACH, 35: 95-104, Januar 1992, beschrieben.
Beim LZW-Verfahren muß das Wörterbuch für die Einzel-Zei
chen-Folgen, die verwendet werden, um das Kompressionswör
terbuch aufzubauen, initialisiert werden. Diesen Zeichen
werden eindeutige Kodes innerhalb des Kompressions-/Dekom
pressions-Systems zugeordnet. Dies bedeutet, daß die Anzahl
von Bits in jeglichem zusätzlichen Ausgabekode, der durch
den Kodierer gesendet wird (z. B. Kodes, die Mehr-Zeichen-
Folgen darstellen) durch die Anzahl der Einzel-Zeichen-Fol
gen gesteuert sind. Die kürzeste Bitlänge für eine Mehr-
Zeichen-Folge ist z. B. durch die Anzahl von Einzel-Zeichen-
Folgen festgelegt. Die Anzahl von Bits in nachfolgenden
Kodes, die mehrere Zeichen darstellen, nehmen in der Länge
jedesmal um ein Bit zu, wenn die Anzahl von Einträgen in dem
Wörterbuch die nächste Potenz von 2 erreicht. Die Verwendung
mehrerer Bits, um Einzel-Zeichen-Kodewörter darzustellen,
reduziert entsprechend das Gesamt-Kompressionsverhalten.
Die Initialisierung von einzelnen Eingabezeichen, wie oben
beschrieben, ist für Eingabedaten mit einer großen Alpha
betgröße oder wenn lediglich erwartet wird, daß eine unbe
kannte Teilmenge des Alphabets in den Eingabedaten auftritt,
ineffizient. Wenn das "natürliche" Alphabet für die Eingabe
daten z. B. aus 16-Bit Symbolen besteht, würde die anfäng
liche Wörterbuchgröße 65,536 Einträge haben. Die minimale
Länge jeglichen erzeugten Ausgabekodes ist deshalb zusätz
lich zu den Zeichen des "natürlichen" Alphabets (z. B. Kodes,
die Mehr-Zeichen-Folgen darstellen) mindestens 17 Bit. Wenn
der Block von Eingabedaten (d. h. die Daten, die komprimiert
werden sollen) relativ zu der Alphabetgröße klein ist, gibt
es auf der anderen Seite einen unnötig hohen Aufwand bezüg
lich der Zeit, dem Speicherplatz und dem Kompressionsver
hältnis, die von der Initialisierung, der Speicherung bzw.
der Kodierung von Einzel-Zeichen-Folgen aus den Eingabedaten
herrührt.
Um dieses Problem zu überwinden, verwenden einige Varianten
des LZ-Algorithmus ein anfänglich leeres Wörterbuch. Wenn
ein neues Eingabezeichen angetroffen wird, gibt der Kompres
sor einen bestimmten Kode aus, der von einer Kopie des neuen
Zeichens gefolgt ist. Dies gestattet dem Dekompressor, einer
Teilmenge des Eingabealphabets, das tatsächlich verwendet
wird, auf der Spur zu bleiben, wobei gestattet ist, daß das
Dekodieren normal durchgeführt wird. Das Hauptproblem bei
dieser Strategie liegt in den hohen Kosten der Kodierung
neuer Zeichen. Für kurze Dateien gegenüber großen Alpha
beten, können diese Gesamtkosten unakzeptabel hoch werden.
Mit 8-Bit-Symbolen und 12-Bit-Ausgabekodes sind z. B. 20 Bit
erforderlich, um dem Dekodierer mitzuteilen, daß ein neues
Zeichen aufgetreten ist. Zusätzlich gibt es oft eine Redun
danz innerhalb der kodierten Zeichenfolgen, die durch den
LZ-Algorithmus ausgegeben werden. Eine Folge der gleichen
Eingabezeichen (d. h. ein "Lauf") erzeugt z. B. eine Folge von
kodierten Folgen mit einer vorhersagbaren und redundanten
Struktur. Diese Redundanz wird derzeitig nicht zum Vorteil
ausgenützt, um das Kompressionsverhältnis von Standard-Kom
pressionsalgorithmen weiter zu erhöhen.
Entsprechend bleibt ein Bedarf an einem Datenkompressions-
Initialisierungs-Verfahren, das auf verschiedene Arten von
Eingabedaten und verschiedene Datenstrukturen anpaßbar ist,
um das Datenkompressionsverhältnis zu erhöhen und den
Speicherplatz, der in einem Kompressions-/Dekompressions-
System, das auf einem Wörterbuch basiert, erforderlich ist,
zu reduzieren.
Es ist die Aufgabe der vorliegenden Erfindung, die Kompres
sion und die Dekompression von digitalen Daten in einem
System, das auf einem Wörterbuch basiert, zu verbessern.
Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1, ein
Verfahren gemäß Anspruch 15 und durch eine Schaltung gemäß
Anspruch 19 gelöst.
Es ist ein Vorteil der Erfindung, daß das Datenkompressions
verhältnis für Kompressions-/Dekompressions-Schemata durch
Reduzierung der Anzahl der Bits, die beim Darstellen ko
dierter Zeichenfolgen verwendet werden, erhöht wird.
Ein weiterer Vorteil der Erfindung ist es, daß die Gesamt
kosten des Initialisierens eines Wörterbuchs in einem Kom
pressions- und Dekompressions-System, das auf einem Wörter
buch basiert, reduziert werden.
Ein weiterer Vorteil der Erfindung ist es, daß digitale Da
ten, die entweder in kleinen Dateien auftreten oder die
durch eine Teilmenge eines großen Einzel-Zeichenalphabets
dargestellt sind, wirksamer komprimiert werden.
Ein weiterer Vorteil der Erfindung ist es, daß kodierte Zei
chenfolgen, die Eingabedatenzeichenläufe darstellen, erneut
komprimiert werden, um das Kompressionsverhältnis eines Kom
pressions-/Dekompressions-Systems weiter zu erhöhen.
Die Erfindung betrifft ein auf einem Wörterbuch basierendes
Initialisierungsschema, das auf Veränderungen der Art und
der Struktur der Eingabedaten anpaßbar ist. Das Initiali
sierungsschema erhöht das Kompressionsverhältnis durch Mini
mieren der Anzahl von Dateneinträgen um Einzel-Zeichen-Da
tenfolgen darzustellen, die in einem Kompressions-/Dekom
pressions-System, das auf einem Wörterbuch basiert, ver
wendet werden. Die reduzierte Anzahl von Dateneinträgen re
duziert die Bit-Länge der Kodewörter in einer komprimierten
Datenfolge. Die Reduzierung der Kodewort-Bit-Länge in der
komprimierten Datenfolge erhöht das Gesamt-Kompressionsver
hältnis.
Die Erfindung verwendet eine veränderliche Anzahl von Spe
zial-Kodes. Die gesamte Anzahl von Spezial-Kodes wird
typischerweise ausgewählt, um kleiner zu sein als die ge
samte Anzahl von Zeichenkodes, die zur Darstellung von
Einzel-Zeichen in dem Eingabedatenarray verwendet werden.
Jeder Spezial-Kode trägt einen Teil der Informationen eines
neuen Zeichens. Zusätzliche Bits, die ein neues Zeichen fer
ner identifizieren, werden dann in einem getrennten, Teil-
Zeichen übermittelt. Dieses Verfahren reduziert die "Kosten"
(d. h. die Bandbreite und den Speicherplatz) der Übertragung
eines neuen Symbols. Das Verfahren ist auf Verfahren anpaß
bar, die irgendwo zwischen einem Nicht-Initialisierungs-Ver
fahren (z. B. ein anfänglich leeres Wörterbuch) und einer
Voll-Alphabet-Initialisierung liegen, bei der jedem
eindeutigen Zeichen in dem Alphabet ein Eintrag in dem Wör
terbuch zugeordnet wird.
Die Anzahl der Spezial-Kodes ist auf die Anwendung anpaßbar,
die derzeitig durchgeführt wird. Folglich wird die Anzahl
der Spezial-Kodes für bestimmte Arten von Daten vorbestimmt,
um das Kompressionsverhältnis zu maximieren. Dieses Ver
fahren gestattet es, daß das Wörterbuch weniger Einträge als
die Alphabetgröße hat. Folglich ist eine Kompression mit
sehr kleinen Wörterbüchern, die sehr wenig Speicher er
fordern, möglich. Dies ist besonders bei Anwendungen, bei
denen die Eingabedatenblöcke kurz sind und bei denen jeder
Block unabhängig komprimiert werden muß, besonders sinnvoll.
Das Initialisierungsschema sieht ebenfalls eine Kompression
von Datenquellen mit großen Alphabetgrößen (z. B. 16-Bit Sym
bole) vor, während eine moderate Größe der Wörterbücher bei
behalten wird.
Ein weiterer Aspekt der Erfindung führt eine Art von Lauf
längen-Kodierung in der LZ-Methodik (LZE) ein. Bei herkömm
lichen LZ2-Datenkompressionen, wird ein Lauf, der eine Folge
wiederholten Auftretens desselben Zeichens in den Eingabe
daten ist, als Serie von Kodes kodiert. Jeder nachfolgende
Kode wird auf dem vorhergehenden Kode aufgebaut, gefolgt von
einem Kode für den Rest oder den Schwanz des Laufs. Der De
kompressor empfängt und dekodiert dann jeden dieser Kodes
der Reihe nach. Das System sendet eine gekürzte Folge durch
Übertragen eines einzelnen Kodes (der den größten Teil des
Zeichenlaufs darstellt) und den vorangehenden Kode und den
Schwanzkode.
Das vorangegangene LZE-Verfahren wird allein oder in Kombi
nation mit anderen Verfahren verwendet, um ein Kompressions
schema zu bilden, das besonders bei der Übertragung von
Netzwerkpaketen nützlich ist. Bei dem kombinierten System
wird das LZE-Kompressionsschema auf einen Eingabedatenstrom
parallel mit einem oder mehreren anderen Datenkompressions
verfahren angewendet. Ein Kodierungsschema für variable
Längen nach Huffman oder ein unkomprimiertes Übertragungs
schema zum Beispiel. Die Ausgabe des Verfahrens, das das
beste Kompressionsverhältnis schafft, wird dann für die
Datenübertragung und -speicherung verwendet. Eine hohe
Kompressionsrate wird für echte Netzwerkpaketdaten erreicht,
die Pakete mit einer breiten Verteilung der Längen ent
halten. Das hohe Kompressionsverhältnis wird über den ge
samten Bereich der Paketlängen, sogar bei Daten, die einen
großen Anteil an kurzen Paketen haben, einheitlich beibe
halten.
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung
werden nachfolgend unter Bezugnahme auf die beiliegenden
Zeichnungen näher erläutert. Es zeigen:
Fig. 1 ein verallgemeinertes Blockdiagramm eines Kompres
sions-/Dekompressions-Systems, bei dem die Verbes
serungen der vorliegenden Erfindung ausgeführt
sind;
Fig. 2 ein Diagramm, das die grundsätzlichen Prinzipien
der LZ-Kompression darstellt;
Fig. 3 ein Diagramm, das die Übertragung von neuen Zeichen
bei einer herkömmlichen LZ-Kompression mit einem
anfänglich leeren Wörterbuch darstellt;
Fig. 4 ein Diagramm, das die Übertragung eines neuen
Zeichens mit einer verbesserten LZ-Kompression
unter Verwendung einer Zwischenwörterbuchinitiali
sierung gemäß der vorliegenden Erfindung zeigt;
Fig. 5 ein Flußdiagramm des grundsätzlichen LZE-Zwischen
initialisierungsverfahrens;
Fig. 6 ein Flußdiagramm des Kodierungsunterverfahrens für
ein "neues Zeichen" aus Fig. 5;
Fig. 7 ein funktionsmäßiges Blockdiagramm der Schaltung
zur Ausführung des Kodierungsunterverfahrens aus
Fig. 6 in dem Kompressions-Untersystem aus Fig. 1;
Fig. 8 ein Flußdiagramm eines Dekodierungsunterverfahrens
für ein "neues Zeichen" zur Dekodierung von Kodes,
die durch das Unterverfahren aus Fig. 6 erzeugt
wurden;
Fig. 9 ein funktionsmäßiges Blockdiagramm einer Schaltung
zur Ausführung des Dekodierunterverfahrens aus Fig.
8 in dem Dekompressionsuntersystem aus Fig. 1;
Fig. 10 eine Tabelle, die die Kompressionsergebnisse für
verschiedene Initialisierungsschemata gemäß der
vorliegenden Erfindung zeigt;
Fig. 11 ein Blockdiagramm eines herkömmlichen Datenkompres
sionssystems;
Fig. 12 ein Blockdiagramm einer Schaltung für die Ausfüh
rung eines verbesserten Lempel-Ziv Lauflängen-
Kodierungsschemas in dem Kompressions-Untersystem,
das in Fig. 1 gezeigt ist;
Fig. 13 ein Flußdiagramm, das ein Verfahren zur Ausführung
eines verbesserten Lempel-Ziv Lauflängen-Kodie
rungsverfahrens gemäß der vorliegenden Erfindung
zeigt;
Fig. 14 ein Blockdiagramm eines herkömmlichen Datendekom
pressionssystems;
Fig. 15 ein Blockdiagramm einer Schaltung zur Ausführung
einer verbesserten Lempel-Ziv Lauflängen-Dekodie
rung in dem Dekompressions-Untersystem aus Fig. 1
gemäß der vorliegenden Erfindung;
Fig. 16 ein Flußdiagramm des verbesserten Lempel-Ziv Lauf
längen-Dekodierungsverfahrens gemäß der vor
liegenden Erfindung;
Fig. 17A und 17B eine graphische Darstellung des Verfahrens
zum Durchführen einer Zwischeninitialisierung und
einer Lauflängen-Kodierung;
Fig. 18A eine Tabelle, die optimale Huffmann-kodierte Zuord
nungen zeigt;
Fig. 18B eine Darstellung der Kompressionsverhältnisse für
Huffmann-kodierte Daten;
Fig. 19 eine Tabelle, die die Verteilungswahrscheinlich
keiten für verschiedene Bit-Längen zeigt;
Fig. 20 ein Blockdiagramm eines parallelen "der Beste ge
winnt" Kompressionssystems gemäß der Erfindung;
Fig. 21 eine Tabelle, die die Kompressionsergebnisse für
verschiedene Netzwerkpaketdaten zeigt;
Fig. 22 ein Graph des Kompressionsverhältnisses gegenüber
der Zeit, unter Anwendung des Systems aus Fig. 20
auf echte Netzwerkpaketkarten;
Fig. 23 ein Graph, der die Verteilung der Daten in Fig. 22
bezüglich der Paketlängen zeigt; und
Fig. 24 ein Graph des Kompressionsverhältnisses der Daten
in Fig. 22 als Funktion der Paketlänge.
Die allgemeine Anordnung und der allgemeine Betrieb des
Lempel-Ziv Kompressions-/Dekompressions-Systems sind gut be
kannt und werden deshalb lediglich in allgemeiner Form mit
Bezug auf Fig. 1 und 2 beschrieben. Das System 22 in Fig. 1
schließt ein Kompressions-Untersystem 24 und ein Dekompres
sions-Untersystem 26 ein, die durch einen digitalen Daten
kommunikationskanal 28 (oder Speicher) verbunden sind. In
der Praxis werden beide Anschlüsse eines Systems sowohl Kom
pressions- als auch Dekompressions-Untersysteme ein
schließen, und die Hardware ist typischerweise entworfen, um
austauschbar wirksam zu sein, um Daten zu komprimieren/sen
den oder zu empfangen/dekomprimieren.
Jedes Untersystem schließt, zusätzlich zu bekannten Kommuni
kations-(oder Speicher)Schaltungen (nicht gezeigt), eine
Kompressionsmaschine 30, die den grundsätzlichen Lempel-Ziv
Kompressionsalgorithmus ausführt, einen Speicher 32, der ein
oder mehrere Wörterbücher ausführt, in denen Dateneinträge,
die die Zeichenfolgendaten kodieren, gespeichert sind, und
Unterstützungs-Schaltungen, die die Verbesserungen aus
führen, die im folgenden beschrieben werden, ein. Die Unter
stützungs-Schaltungen schließen den Zwischeninitiali
sierungskodierer 34 und den entsprechenden Dekodierer 36,
die in Fig. 7 und 9 genauer beschrieben werden, und die Ko
dierer-Lauf-Verbesserungsmaschine 38 und die entsprechende
Dekodierer-Lauf-Verbesserungsmaschine 40 ein, die in Fig. 12
und 15 gezeigt sind.
Fig. 2 stellt den Lempel-Ziv Algorithmus (LZ-Algorithmus)
für die verlustfreie Kompression von digitalen Daten (d. h.
die ursprünglichen Daten sind aus ihren komprimierten Ab
bildungen vollständig wiederherstellbar) dar. Das LZ-Ver
fahren paßt ein derzeitiges Muster in einem
Eingabedatenstrom auf Muster, die vorher auftreten, an. Ein
derzeitiges Muster 42 (ABC) im Eingabestrom 46 ist z. B. das
gleiche wie ein Muster 44 (ABC), das vorher übertragen
wurde. Das Kompressions-Untersystem 24 (Fig. 1) ersetzt die
übereinstimmenden Eingabesymbole (ABC) durch eine Be
schreibung (ein Kodewort) der maximalen Übereinstimmung. Das
Dekompressions-Untersystem 26 (Fig. 1) kann dann die ur
sprünglichen Symbole aus dem übereinstimmenden Kodewort und
aus vorherigen dekomprimierten Datensegmenten wiederher
stellen. Bei redundanten Datenquellen tendieren die Be
schreibungen oder die Kodewörter, die eine Übereinstimmung
mehrerer Zeichen beschreiben, dazu, kürzer zu sein, als die
übereinstimmenden Muster, folglich wird eine Datenkompres
sion erreicht.
Das Hauptmerkmal des LZ2 ist eine stufenartige syntaktische
Analyse. Die Eingabedatenfolge wird in Ausdrücken analy
siert, die in einem Wörterbuch gesammelt werden. Eine maxi
male Übereinstimmung des derzeitigen Eingabemusters wird
lediglich gegenüber den Ausdrücken in dem Wörterbuch, wie
oben beschrieben, durchgeführt. Nach jeder Übereinstimmung
wird ein neuer Ausdruck durch Erweiterung des übereinstim
menden Ausdrucks mit dem Eingabesymbol, das die Übereinstim
mung "bricht", gebildet. Diese und andere Varianten des
Algorithmus sind asymptotisch optimal (d. h. sie erreichen in
ihren Grenzen das beste Kompressionsverhältnis, das theo
retisch möglich ist). Der Algorithmus ist ebenfalls sehr
anpassungsfähig, wobei die statischen Charakteristika der
Eingabedaten "während des Ablaufs" gelernt werden. Beim LZ2
wird dieses "Wissen" in dem Wörterbuch gespeichert, dessen
Einträge die Eingabedatenfolgen syntaktisch analysieren.
Die Kompressorausführung beim LZ2 kann einfach wie folgt
beschrieben werden:
- 1. Ein Wörterbuch wird mit allen Einzel-Buchstabenwörtern, die in dem Eingabealphabet existieren (z. B. die 256 1-Bit-Folgen) initialisiert und ein eigenes Index kodewort wird dann jedem Einzel-Buchstabenwort zugeord net.
- 2. Ein derzeitiger Ausdruck wird mit dem ersten Zeichen aus einem Eingabedatenstrom initialisiert.
- 3. Zeichen aus dem Eingabedatenstrom werden kontinuierlich gelesen, wobei der derzeitige Ausdruck erweitert wird, solange ein übereinstimmender Ausdruck in dem Wörterbuch existiert.
- 4. Das Verfahren wird angehalten, wenn der derzeitige Aus druck in der Form Wa ist, wobei "a" das letzte Zeichen ist, das aus dem Eingabedatenstrom gelesen wird, W ist ein Ausdruck in dem Wörterbuch ist, während Wa nicht mit einem Eintrag in dem Ausdruckswörterbuch übereinstimmt.
- 5. Das Kodewort für W wird ausgegeben.
- 6. Wa wird zu dem Wörterbuch hinzugefügt, wobei ihm das nächste vorhandene Kodewort zugeordnet wird.
- 7. Der derzeitige Ausdruck wird auf "a" gesetzt und das Verfahren an den Schritt 3 zurückgegeben.
Diese Ausführung ist bekannt als LZW.
Bei dem Dekompressions-Untersystem 26 in Fig. 1 wird ein
ähnliches Ausdruckswörterbuch aufgebaut. Der Dekompressor
wird, wie im Schritt 1 oben, zuerst initialisiert und neue
Ausdrücke werden zum Wörterbuch dann hinzugefügt, wenn die
Daten dekomprimiert werden. Wenn der Dekompressor einen Kode
für einen Ausdruck W, gefolgt von einem Kode für einen Aus
druck, der mit dem Zeichen "a" beginnt, empfängt, addiert er
den Ausdruck Wa zu dem Wörterbuch und ordnet ihm den nächs
ten erhältlichen Kode zu. Folglich kann der Dekompressor das
Wörterbuch, das durch den Kompressor aufgebaut wurde, rekon
struieren, ohne daß letzterer das Wörterbuch zusammen mit
den komprimierten Daten senden muß.
Bei einer praktischen Ausführung ist der Speicherplatz, der
für den Kodierer vorhanden ist (und auf ähnliche Weise für
den Dekodierer), beschränkt. Die Anzahl der Ausdrücke in dem
Wörterbuch ist deshalb ebenfalls beschränkt und die Ausgabe
kodes haben eine beschränkte Länge. Typischerweise liegt die
obere Grenze des Kodes zwischen 12 und 16 Bit. Wenn die Ein
gabedatenfolge ausreichend lang ist, wird sich das Wörter
buch schließlich "auffüllen". Zu diesem Zeitpunkt wird das
LZW-Wörterbuch entweder "eingefroren" oder "reinitial
isiert".
Stufe 1 in dem oben beschriebenen LZW-Kompressions-Verfahren
ruft die Initialisierung des Wörterbuchs mit allen Einzel-
Zeichen-Folgen auf. Es bezeichne m die Größe, in Bits, der
Einzel-Zeichen der Eingabedatenfolge (z. B. m = 8, oder 1
Byte, in dem herkömmlichsten Fall). Den anfänglichen Aus
drücken in dem Wörterbuch werden die Kodes c₀, c₀ + 1, c₀ +
2, . . . ., c₀ + (2m -1) für eine anfängliche nicht-negative
Zahl c₀ zugeordnet. Dies bedeutet, daß der erste Kode, der
durch den Kodierer gesendet wird (d. h. der erste Kode, der
eine Mehr-Zeichen-Folge darstellt) mindestens m+1 Bits lang
sein muß. Bei praktischen Ausführungen ist es üblich, zu Be
ginn des Kompressionsverfahrens Ausgabekodes mit einer Länge
von m+1 zu verwenden und nachfolgend die Länge der Ausgabe
kodes jedesmal, wenn die Anzahl der Einträge in dem Wörter
buch die nächste Potenz von 2 erreicht, um 1 Bit zu erhöhen.
Daher variiert die Länge der Ausgabekodes zwischen m+1 und
b, wobei 2b die maximale Größe des Wörterbuchs ist und b < =
m+1 ist. Der Einfachheit halber wird angenommen, daß die
maximale Wörterbuchgröße eine Potenz von 2 ist. Dies ist bei
den meisten praktischen Ausführungen der Fall, obwohl es
keine notwendige Anforderung ist. Die Länge der Ausgabekodes
hat offensichtlich einen direkten Einfluß auf das Kompres
sionsverhältnis. Im besonderen gilt, je kürzer die Ausgabe
kodes sind, desto besser ist das Kompressionsverhältnis.
Die Initialisierung beim obigen Schritt 1 arbeitet bei
vielen Anwendungen gut, ist jedoch bei Anwendungen, bei
denen die Alphabetgröße groß ist, ineffizient. Dieses
Initialisierungsverfahren ist ebenfalls ineffizient, wenn
lediglich erwartet wird, daß eine unbekannte Teilmenge des
Eingabealphabets in den zu komprimierenden Daten auftreten.
Bei einer Anwendung, bei der z. B. das "natürliche" Alphabet
für die Eingabedaten aus 16-Bit Symbolen besteht, hat das
anfängliche Wörterbuch eine Größe von 65,536 Einträgen und
die minimale Länge eines Ausgabekodes beträgt 17 Bit. Bei
einer Anwendung, bei der der Block von zu komprimierenden
Daten relativ zu der Alphabetgröße klein ist, ist es oft
unnötig, jede mögliche Einzel-Zeichen-Folge zu kodieren.
Um diese Probleme zu überwinden, verwenden einige Variatio
nen des LZ-Algorithmus ein anfängliches leeres Wörterbuch.
Wenn ein neues Eingabezeichen angetroffen wird, gibt der
Kompressor einen Spezial-Kode aus, gefolgt von einer Kopie
des neuen Zeichens. Bei diesem Verfahren verfolgt der De
kompressor die Teilmenge des Eingabealphabets, die tatsäch
lich verwendet wird und die Dekodierung erfolgt wie gewöhn
lich. Das Hauptproblem bei diesem Verfahren ist der hohe
Aufwand beim Kodieren neuer Zeichen. Für kurze Dateien ge
genüber langen Alphabeten wird dieser Gesamtaufwand un
akzeptabel hoch. In Fig. 3 sind z. B. sowohl ein Zeichenkode
46 als auch ein Spezial-Kode 48 erforderlich, um der Dekom
pressionsmaschine 30 (Fig. 1) anzuzeigen, daß ein neues
Zeichen aufgetreten ist. Wird eine Zeichenlänge von 8 Bit
und eine derzeitige Kodelänge von 12 Bit angenommen, dann
muß eine Gesamtlänge von 20 Bit an den Dekodierer übertragen
werden, um jedes neue Zeichen zu identifizieren.
Um die oben beschriebenen Probleme bezüglich der Bitlänge
und dem Speicher auszuräumen, werden 2k unterschiedliche
Spezial-Kodes c₀, c₀+1, c₀+2, . . . ., c₀+(2k-1) verwendet, wo
bei 0 < = k < = m. Dies nimmt an, daß die Zahlen 0, 1, . . .,
c₀-1 für andere Steuerungskodes verwendet werden. Auf diese
Art trägt ein Spezial-Kode k-Bits an Informationen über das
neue Zeichen und genau m-k zusätzliche Bits sind notwendig,
um das neue Zeichen zu identifizieren. Dies ist in Fig. 4
mit k = 5 gezeigt. Die derzeitige Kodelänge für einen Spe
zial-Kode 48 beträgt 12 Bit und ein Teil-Zeichenkode 49 hat
eine Länge von 3 Bit (d. h. m-k = 8-5 = 3). Der Aufwand des
Übertragens einer neuen Einzel-Zeichen-Folge wird folglich
von 20 Bit auf 15 Bit reduziert. Wenn k = 0, reduziert sich
das Verfahren auf eine leere Inititalisierung, und wenn k =
m ist, arbeitet das System als eine Vollalphabetinitial
isierung (d. h. jedes Zeichen in dem Alphabet wird durch ein
Kodewort dargestellt).
Bezugnehmend auf Fig. 5 beginnt der Betrieb gemäß der Er
findung mit einem anfänglich leeren Wörterbuch und läuft im
wesentlichen in Übereinstimmung mit dem LZ-Algorithmus, der
wie im folgenden beschrieben modifiziert ist, ab. Der Be
trieb wird bei Block 50 durch Setzen des nächsten möglichen
Kodes NAC auf den Wert c₀+2k initialisiert. Im nächsten
Schritt, Block 52, wird eine Null-Folge als derzeitiger Aus
druck W eingestellt. Dann wird bei Block 54 das nächste
Eingabezeichen als "a" eingegeben. Der Schritt in Block 56
fragt ab, ob die Folge Wa bereits in dem Wörterbuch ge
speichert ist. Wenn dies der Fall ist, setzt Block 58 W = Wa
und kehrt zum Block 54 zurück. Dieses Verfahren wiederholt
sich so lange eine Übereinstimmung in dem Wörterbuch, das in
der Lempel-Ziv Methodik herkömmlich ist, gefunden wird.
Wenn Wa nicht in dem Wörterbuch gefunden wird, dann fragt
Block 60 ab, ob W eine Null-Folge ist. Wenn sie dies nicht
ist, läuft die Kompression durch Blöcke 62, 66 und 68 wie
bei der herkömmlichen LZW ab. Block 62 gibt den Kode für W
aus und Block 66 speichert die kodierte Folge Wa als einen
Dateneintrag in dem Wörterbuch an dem Adreßort NAC. Block 68
erhöht NAC um 1 und "a" dient als nächster Wert von W. Das
Verfahren geht dann zurück zu Block 54.
Wenn der Entscheidungsblock 60 feststellt, daß W eine Null-
Folge ist, wird angenommen, daß das Eingabezeichen "a" ein
neues Zeichen ist. Der Kompressor geht dann zu dem Ver
fahrensblock 64 "neues Zeichen", der ein Unterverfahren ist,
der im folgenden mit Bezug auf Fig. 6 beschrieben wird. Beim
Zurückkehren aus dem Verfahren "neues Zeichen" wird das Ein
gabezeichen "a" in das Wörterbuch an dem Adreßort NAC im
Block 65 eingetragen. NAC wird dann im Block 67 erhöht und
das Verfahren geht zu Block 52 zurück.
Bezugnehmend auf Fig. 6 ist es im Unterverfahren 64 (siehe
Fig. 5) der erste Schritt, der in Fig. 70 gezeigt ist, das
neue Zeichen a, das aus m Bits besteht, in zwei Teile, a₁,
der aus k Bits besteht, und a₂, der aus m-k Bits besteht, zu
teilen. Dann setzt der Block 72 c₁ auf den Wert c₀+a₁. Als
nächstes gibt Block 74 c₁ unter Verwendung von b Bits und
Block 76 gibt a₂ unter Verwendung von m-k Bits aus. Hierbei
ist b die Anzahl von Bits, die derzeitig für die Ausgabeko
dewörter verwendet werden. Dann geht das Unterverfahren zu
rück zu Block 65 in Fig. 5.
Fig. 7 zeigt eine Schaltung 34 (siehe Fig. 1) für die Hard
ware-Ausführung des Unterverfahrens aus Fig. 6. Das Zeichen
a wird an ein m Bit-Register 80 eingegeben, in dem das Zei
chen in zwei Teilen, a₁, das aus k Bits besteht, und a₂, das
aus m-k Bits besteht, gespeichert wird. Der Wert c₀ wird in
einem b-Bit-Register 82 gespeichert und wird an den Addierer
84 zusammen mit a₁ ausgegeben, um die b-Bit-Summe c₁ = c₀+a₁
zu bilden. Diese Summe wird in das erste b-Bit des Registers
86 abgelegt und mit a₂ in den unteren m-k Bits des Registers
86 verkettet. Die resultierende Folge von b+m-k Bits wird in
einen Ausgabepuffer 88 zur Einfügung in den komprimierten
Strom (Übertragung an das Dekompressions-System) geschoben.
Fig. 8 zeigt das Dekompressionsverfahren 90, das bei Block
91 durch Lesen des Spezial-Kodes c₁ aus b-Bits beginnt und
dann bei Block 92 abfragt, ob der Kode c₁ kleiner als c₀
ist. Wenn dies der Fall ist, behandelt Block 93 den Kode c₁
als einen Verarbeitungs-Steuerungskode und kehrt zum Block
91 zurück. Ansonsten fährt das Verfahren fort, bei Block 94
abzufragen, ob der Kode c₁ kleiner ist als c₀+2k. Wenn dies
nicht der Fall ist, geht die Routine zu Block 96, um den
Kode c₁ als einen regulären LZ-Kode zu verarbeiten und kehrt
dann zu Block 91 zurück. Ansonsten wird der Kode c₁ als ein
Kode für ein neues Zeichen angesehen und die Routine bewegt
sich zu Block 98, wo der Spezial-Kode c₁ und der zugeordnete
Teil-Zeichenkode a₂ als neues Zeichen verarbeitet werden
(das Paar c₁, a₂ wurde durch den Kompressor in der Schaltung
aus Fig. 7 ausgegeben).
Fig. 9 zeigt die Schaltung 36 (Fig. 1), die Hardware-mäßig
das Unterverfahren 98 aus Fig. 8 ausführt. Der Spezial-Kode
c₁ und der Teil-Zeichenkode a₂ werden von einem Eingabepuf
fer (nicht gezeigt) in den Registern 102 bzw. 104 aufgenom
men. Der Inhalt eines festen Wertes c₀ im Register 100 wird
von dem Inhalt des Registers 102 im Subtrahierer 106 abge
zogen. Das b Bit-Ergebnis ist im Register 108 enthalten und
die bedeutendsten b-k Bits des Registers 108 werden ge
löscht. Die am wenigsten bedeutenden k-Bits des Registers
108 werden in einem Feld a₁ des Registers 110 gespeichert
und mit dem Teil-Zeichenkode a₂ aus Register 104 verkettet.
Die Inhalte des Registers 110 werden als Einzel-Zeichen-
Folge in das Wörterbuch im Block 112 eingetragen und in
einen Ausgabepuffer 114 geladen.
Die Anzahl der Spezial-Kodes (oder, äquivalent, der Para
meter k) kann auf die Anwendung von Hand abgestimmt werden.
Experimentelle Ergebnisse zeigen, daß für einen breiten Be
reich von Eingabedateien die beste Kompression mit Werten
von k, die nahe bei m/2 liegen, erreicht wird. Insbesondere
wurden die Werte k=5 für m=8 und k=7 für m=16 experimentell
als optimal festgestellt. Es wird darauf hingewiesen, daß
die anfängliche Kodelänge für Mehr-Zeichen-Folgen lediglich
k+1 Bits anstelle der typischen m+1 Bits sein wird. Das Ver
fahren läßt deshalb ein Wörterbuch zu, das kleiner als die
Alphabetgröße ist, und läßt Kodewörter zu, die kürzer sind,
als die Eingabezeichen.
Folglich ist die Kompression mit sehr kleinen Wörterbüchern,
die sehr wenig Speicher erfordern, möglich. Dieses Verfahren
ist besonders für Anwendungen attraktiv, bei denen die Ein
gabedatenblöcke kurz sind, und jeder Block unabhängig kom
primiert werden muß. Auf der anderen Seite läßt das Ver
fahren die Kompression von Quellen mit großen Alphabetgrößen
(z. B. 16-Bit-Symbole) zu, während eine moderate Größe für
die Wörterbücher beibehalten wird.
Angenommen m=8, k=5 und c₀=3, und daß das neue Zeichen, das
übertragen werden soll, binär durch 01101010 dargestellt
ist. Die ersten k Bits des Zeichens sind 01101, was die Zahl
13 darstellt. Daher ist der Spezial-Kode, der übertragen
wird, c₀ + 13 = 16. Dieser Kode wird unter Verwendung der
derzeitigen Kodelänge übertragen. Zusätzlich werden die m-k
= 3 übrigbleibenden Bits, 010, "wie sie sind" dem Spezial-
Kode folgend als Teil-Zeichenkode a₂ übertragen. Angenommen,
die derzeitige Kodelänge beträgt 12 Bit, dann ist die resul
tierende binäre Ausgabe für den Spezial-Kode [000000010000]
und für den Zeichenkode [010].
Fig. 10 zeigt die Kompressionsergebnisse für verschiedene
Zeichen und Spezial-Kode-Bitlängen. Die Eingabedatei für
alle Kompressionsexperimente wurde durch Verkettung (unter
Verwendung des UNIX-Befehls "tar") einer Auswahl von
Computerdaten, die ASCII-Datendateien, binär ausführbare,
C-Programmquellen- und Textdateien einschließt, erhalten.
Die gesamte Größe der Eingabedatei betrug 6,594,560 Bytes.
Fünf Kompressionsverfahren wurden getestet, wie in den nume
rierten Spalten 1-5 angezeigt ist. Die numerierte Spalte 1
zeigt das Ergebnis einer herkömmlichen LZW-Ausführung mit
m=8 und einer Vollalphabet-Wörterbuchinitialisierung; die
numerierte Spalte 2 zeigt die Ergebnisse einer leeren Wör
terbuchinitialisierung, mit m=8 und k=0; die numerierte
Spalte 3 zeigt die Ergebnisse für eine Zwischeninitiali
sierung des Wörterbuchs, mit m=8 und k=5; die numerierte
Spalte 4 zeigt die Ergebnisse einer leeren Wörterbuchinitia
lisierung, mit m=16 und k=0; und die numerierte Spalte 5
zeigt die Ergebnisse einer Zwischeninitialisierung des Wör
terbuchs, mit m=16 und k=7.
Für jedes Schema wurden verschiedene Wörterbuchgrößen ver
sucht, mit einer maximalen Ausgabekodelänge, die zwischen 6
und 16 Bits variiert, wie in der linkesten Spalte angezeigt.
Das Kompressionsverhältnis (KV), das für jedes Schema ge
geben ist, ist unter Verwendung der folgenden Beziehung ge
messen worden;
KV = (komprimierte Dateigröße)/(ursprüngliche Dateigröße).
KV = (komprimierte Dateigröße)/(ursprüngliche Dateigröße).
Deshalb zeigen niedrige KV-Zahlen ein besseres Kompressions
verhalten an. Es ist aus Fig. 10 zu erkennen, daß Schemata
mit zwischeninitialisierten Wörterbüchern eine bedeutende
Kompression erzeugen, sogar wenn die Wörterbücher sehr klein
sind (z. B. b < m) und eine vollständige Initialisierung un
möglich ist. Dies ist bei Anwendungen, bei denen der Spei
cher knapp ist, sehr nützlich. Zwischeninitialisierungen
übertreffen ebenfalls vollständige Initialisierungen, wenn b
etwas größer ist als m und die zwei Schemata sind bei höher
en Werten von b konkurrenzfähig. Die Zwischeninitialisierung
mit k < 0 übertrifft fast immer die leere Initialisierung.
Durch Verwendung von 16-Bit-Eingabesymbolen ist es möglich,
gute Kompressionsverhältnisse mit Wörterbüchern mit moder
ater Größe zu erreichen. Der Hauptvorteil der 16-Bit-
Schemata ist es, daß sie den Durchsatz eines Kompressors
verdoppeln können (durch Verarbeiten von 16-Bits bei jedem
Kompressionsschritt und nicht von 8 Bits), mit lediglich
einem geringen Anstieg der Speicheranforderungen. Typischer
weise besteht ein Eintrag in einem LZW-Wörterbuch aus einem
Zeiger auf einen vorhergehenden Eintrag (oder den entspre
chenden Kode), und aus einem Zeichen. Folglich wird ein 16-
Bit-Schema typischerweise ein weiteres Byte pro Wörterbuch
eintrag erfordern, verglichen zu einem 8-Bit-Schema, mit
derselben Anzahl von Wörterbucheinträgen. Wenn 16-Bit die
natürliche Zeichengröße ist (z. B. bestimmte medizinische Ab
bildungsanwendungen), wird zusätzlich die beste Kompression
erreicht, wenn diese Zeichengröße beibehalten wird.
Das Initialisierungsschema, das oben beschrieben wurde, ist
in Anwendungen vorteilhaft, bei denen kurze Blöcke von Daten
unabhängig komprimiert werden (d. h., ohne Teilen der Wörter
buchinformationen von einem Block mit dem nächsten). Ein
Beispiel einer solchen Anwendung ist die Kompression von
Datenpaketen in einem lokalen Netzwerk (LAN). In den Netz
werkprotokollen, die derzeit mit typischen LANs verwendet
werden, haben die Pakete eine Länge von 60 Byte bis weniger
als 2048 Byte, und die kürzeren Pakete stellen einen höheren
Prozentsatz des Verkehrs dar. Dies sind ungefähre Zahlen.
Die genaue Länge eines Paketes hängt davon ab, wieviel des
"Umschlags" des Paketes in Rechnung genommen wird. Dies
hängt seinerseits von der Schicht des Protokolls ab, auf der
die Pakete verarbeitet werden.
Eines der einfachsten Verfahren der verlustfreien Daten
kompression ist die Lauflängen-Kodierung (RLE = Run Length
Encoding). Ein Lauf ist eine Folge von wiederholtem Auf
treten desselben Zeichens in der Eingabe (z. B. a₀, a₁, a₃ . .
. . an-1), wobei n die Anzahl des wiederholten Auftretens des
selben Zeichens "a" in der Folge ist. Die Folge a₀, a₁, a₃ . .
. . an-1 stellt n Kopien desselben Zeichens "a" dar. Bei der
RLE wird ein solcher Lauf durch Senden des Zeichens gefolgt
durch die Lauflänge n kodiert. Für große Werte von n beträgt
das Kompressionsverhältnis für den Lauf O (log(n)/n). LZ2-
Schemata arbeiten bei der Kompression von langen Läufen
ebenfalls gut. Angenommen n ist groß, dann würde der obige
Lauf in einem LZ2-Schema als eine Sequenz von Kodes A₀, A₁,
A₁+1, A₁+2, A₁+3, . . . , A₁+(k-1), A₂ kodiert werden. A₀ ist
der Kode für die längste Folge von a′s in dem Wörterbuch, A₁
ist der nächste vorhandene Kode, bevor der derzeitige Lauf
gelesen wird, A₂ ist ein Kode, der im folgenden beschrieben
wird, und k ist eine nicht-negative ganze Zahl.
Wenn die Länge der Folge der a′s, die durch A₀ dargestellt
ist, L₀ ist, dann stellt A₁+(i-1) eine Folge von L₀ + i a′s
dar, wobei 1 < = i < = k. A₂ stellt den restlichen "Schwanz" von
L₁ a′s dar, 0 < = L₁ < (L₀+k), möglicherweise gefolgt durch ein
ige andere Zeichen (wenn L₁ = 0, wird der Kode A₂ nicht als
Teil des kodierten Laufs benötigt). Die Länge des Laufs ist
n = L₀ + (L₀+1) + (L₀+2) + . . . . + (L₀+k) + L₁ = L₀ (k+1) + k
(k+1)/2+L₁. Daraus folgt, daß für große n und ein ausreich
end großes Wörterbuch das grundsätzliche LZ2-Schema ein Kom
pressionsverhältnis von 0 (√ Log(n)/n) erreicht. Deshalb
ist, obwohl beide Schemata ein Null-Kompressionsverhältnis
asymptotisch erreichen, für begrenzte Eingänge die RLE bes
ser geeignet, um lange Läufe zu komprimieren.
Die Effizienz der LZ2 zur Kodierung langer Läufe kann ba
sierend auf den folgenden Beobachtungen verbessert werden.
Wenn der LZ2-Dekompressor jeden Kode in der Folge A₁, A₁+1,
A₁+2, A₁+3, . . . ., A₁+(k-1) liest, ist der gelesene Kode der
größtmögliche zu diesem bestimmten Zeitpunkt (d. h., der ge
lesene Kode ist derjenige, der gerade erzeugt wurde). Daher
muß der Kodierer lediglich die Folge A₀, A₁+(k-1), A₂ für
den Lauf von n "a"′2 senden. Wenn der Dekodierer den Kode
A₁+(k-1) empfängt, erfaßt er, daß dieser Wert den derzeitig
größten möglichen Kode A₁ überschreitet, "lernt", daß ein
Lauf kodiert ist und kann ohne weiteres den Wert k und die
"fehlende Folge" A₁, A₁+1, A₁+2, . . . ., A₁+(k-2) erneut auf
bauen. Die Anzahl der übertragenen Bits beträgt nun 0
(log(k)) = 0 (log(n)), und das Kompressionsverhältnis bei
dem verbesserten LZ2 wird 0(log(n)/n), wie beim RLE-Schema.
Fig. 11 ist ein Blockdiagramm, das einen herkömmlichen LZ-
Kodierer ohne Lauf-Verbesserung zeigt. Eine Eingabemaschine
116 liest Zeichen aus dem Eingabedatenstrom (nicht gezeigt)
und führt die Eingabezeichen an eine Kompressionsmaschine
118 (siehe Block 30 in Fig. 1). Die Kompressionsmaschine
nimmt die Eingabezeichen und baut ein Wörterbuch auf und be
hält dieses bei. Das Wörterbuch enthält z. B. Dateneinträge,
die eindeutige Eingabezeichenfolgen darstellen. Die Kompres
sionsmaschine 118 komprimiert den Eingabedatenstrom und gibt
die komprimierten Eingabedaten als Kodewörter an die Aus
gabemaschine 120 ab. Die Ausgabemaschine 120 speichert dann
entweder die komprimierte Datenfolge für eine spätere De
kompression oder überträgt die dekomprimierte Folge über
einen Kommunikationskanal 28 (Fig. 1) mit einer reduzierten
Bandbreite. Die komprimierten Daten werden an dem gegenüber
liegenden Ende des Kommunikationskanals 28 dekomprimiert,
wie im weiteren in Fig. 15 beschrieben wird. Die Kompres
sionsmaschine 118 behält typischerweise einen Adreßzeiger
122 bei, der den nächsten verfügbaren Kode (NAC) identi
fiziert, an dem die nächste eindeutige Zeichenfolge als ein
Dateneintrag in dem Kompressions-/Dekompressionswörterbuch
gespeichert ist. Der NAC stellt z. B. den nächsten Adreßort
dar, der als ein Kodewort für die nächste eindeutige Ein
gabezeichenfolge verwendet wird.
Fig. 12 ist ein genaues Blockdiagramm, das eine Kodierer-
Lauf-Verbesserungsmaschine gemäß der Erfindung darstellt,
wie in Fig. 1 gezeigt. Eine Eingabemaschine 124 liest die
Zeichen aus dem Eingabedatenstrom. Eine Kompressionsmaschine
126 liest die Eingabezeichen, behält das Wörterbuch bei und
erzeugt Zeichenkodes, wie in Fig. 11 oben beschrieben. Die
kodierten Eingabedaten werden dann an eine Kodierer-Lauf-
Verbesserungsmaschine 128, die eine zweite Ebene der Daten
kompression schafft, abgegeben. Die komprimierten Kodes der
Lauf-Verbesserungsmaschine 128 werden an eine Ausgabe
maschine 130 abgegeben und in einer Art, die der Ausgabe
maschine 120 in Fig. 11 ähnlich ist, verarbeitet.
Die Lauf-Verbesserungsmaschine 128 enthält einen getrennten
Adreßzeiger 134 (RUNCODE), der in Koordination mit dem NAC-
Adreßzeiger 132, der bei der Kompressionsmaschine 126 ver
wendet wird, verwendet wird. Nachdem eine Zeichenfolge durch
die Kompressionsmaschine 126 kodiert ist, fängt die Lauf-
Verbesserungsmaschine 128 einen Ausgabekode ab und stellt
fest, ob er Teil eines Zeichen-Laufs ist. Wenn festgestellt
wird, daß der Kode ein Teil eines Laufs ist, verhindert die
Lauf-Verbesserungsmaschine 128, daß die Ausgabemaschine 130
etwas von diesen Kodes, die die Zeichen aus dem Lauf ent
halten, ausgibt. Die Lauf-Verbesserungsmaschine 128 erzeugt
dann ein Lauf-Kodewort, das Informationen erhält, die die
unübertragenen Kodes des Laufs identifizieren. Das Lauf-
Kodewort wird dann ausgegeben, wenn das Ende des Laufs er
faßt ist.
Fig. 13 ist ein detailliertes Flußdiagramm, das das Ver
fahren darstellt, das durch die Lauf-Verbesserungsmaschine
128, die in Fig. 12 gezeigt ist, durchgeführt wird. Ein Kode
"C" wird im Block 136 abgefragt, um festzustellen, ob der
Kodewert gleich dem letzten Kode ist, der in dem Wörterbuch
erzeugt wurde (d. h., NAC-1). Wenn der Kode C gleich NAC-1
ist, ist ein Lauf aufgetreten und der Entscheidungsblock 136
springt zu Block 138, wo der Kodewert "C" in den Adreßzeiger
RUNCODE geschrieben wird. Die Lauf-Verbesserungsmaschine de
aktiviert dann die Ausgabemaschine 130 (Fig. 12), um zu ver
hindern, daß der Kode C ausgegeben wird. Das Verfahren
springt dann für den nächsten Kode, der durch die Kompres
sionsmaschine erzeugt wird, zurück zu dem Entscheidungsblock
136. Solange die nachfolgenden Kodes Zeichen darstellen, die
innerhalb des Laufs enthalten sind (d. h. dieselben Zeichen
darstellen), wird das Verfahren wiederholt. RUNCODE wird
z. B. ständig auf den letzten Kodewert C zurückgesetzt und
die Ausgabemaschine wird daran gehindert, Kodewörter aus
zugeben. Es wird darauf hingewiesen, daß beim Zurückspringen
zu Block 136 der Wert von NAC durch die Kompressionsmaschine
erhöht sein wird.
Wenn ein neu abgefangener Kode nicht gleich NAC-1 ist (d. h.
nicht gleich dem letzten Kode, der in der Kompressions-
/Dekompressionsmaschine erzeugt wurde), ist entweder kein
Lauf aufgetreten oder der Lauf wurde beendet. Der Entschei
dungsblock 136 springt dann zum Entscheidungsblock 142, wo
der Wert des Adreßzeigers RUNCODE überprüft wird. Wenn RUN-
CODE ein Nullwert ist, dann ist kein vorheriger Lauf aufge
treten und der Entscheidungsblock 142 springt zum Block 148.
Der Block 148 gibt dann den Kode C aus, der derselbe ist wie
jegliche andere nicht-laufkodierte Zeichenfolge. Das Ver
fahren springt dann für den nächsten Kode, der durch die
Kompressionsmaschine erzeugt wird, zum Entscheidungsblock
136 zurück. Wenn RUNCODE nicht Null ist, ist vorher ein Lauf
aufgetreten und der Entscheidungsblock 142 gibt RUNCODE als
nächste Kodeausgabe in Block 144 aus. Das Verfahren springt
zum Block 146, wo RUNCODE auf einen Nullwert zurückgesetzt
wird und Block 148 gibt dann den Kodewert C (Kodewort) aus,
der den Lauf gebrochen hat. Die Lauf-Verbesserungsmaschine
springt dann zum Entscheidungsblock 136 zurück, wo das näch
ste Kodewort von der Kompressionsmaschine abgefangen wird.
Fig. 14 ist ein Blockdiagramm eines herkömmlichen Dekompres
sionssystems. Eine Dekodierereingabemaschine 150 empfängt
eine Folge von komprimierten Zeichenfolgen, die durch Kode
wörter dargestellt sind und gibt die Kodewörter an eine De
kompressionsmaschine 152 ab. Die Dekompressionsmaschine 152
nimmt die Kodewörter, baut ein Wörterbuch auf und behält
dieses bei, und erzeugt dekodierte Ausgabezeichen. Der
nächste vorhandene Adreßzeiger (NAC) 156 wird auf eine Art
beibehalten, die ähnlich dem NAC-Zeiger ist, wie er in Fig.
5 beschrieben ist. Eine DekodiererAusgabemaschine 154 steu
ert die Ausgabe der dekomprimierten Zeichen aus der Dekom
pressionsmaschine 152.
Fig. 15 ist ein Blockdiagramm einer Lauflängen-Dekodierer
verbesserung gemäß der Erfindung. Die Dekodierereingabe
maschine 158 ist dieselbe wie die Dekodierereingabemaschine
150 in Fig. 15. Die Kodewörter von der Eingabemaschine 158
werden in der Dekodierer-Lauf-Verbesserungsmaschine 160 ab
gefangen, bevor sie in der Dekompressionsmaschine 162 weiter
dekomprimiert werden. Die Lauf-Verbesserungsmaschine 160
überprüft jedes Kodewort, um festzustellen, ob es ein Lauf
kodewort bildet und erzeugt entsprechend einen geänderten
Kodestrom. Wenn kein Laufkode existiert, wird das Kodewort
an die Dekompressionsmaschine 162 geleitet, wo eine normale
Dekompression stattfindet. Die Dekodiererausgabemaschine 164
steuert dann die Ausgabe der dekodierten Zeichen aus der De
kompressionsmaschine. Die Dekodier-Lauf-Verbesserungs
maschine 160 enthält einen Adreßzeiger (RUNCODE) 168, der
Zugriff auf den Adreßzeiger (NAC) 166 in der Dekompressions
maschine 162, auf ähnliche Art wie in Fig. 12 gezeigt, hat.
Fig. 16 ist ein detailliertes Datenflußdiagramm, das den Be
trieb der Dekodierer-Lauflängenmaschine 160 in Fig. 15
zeigt. Ein Kode "C" wird im Block 170 abgefragt, um festzu
stellen, ob der Kodewert außerhalb der Reihenfolge liegt,
was der Dekompressor als nächste erhältliche Kodeadresse er
wartet. Die Dekompressormaschine erwartet z. B. typischer
weise, daß der Kode C kleiner als der nächste erhältliche
Kode NAC ist. Wenn der Kode C nicht außerhalb der Reihe
(d. h. Kode C < NAC) ist, dann sendet der Block 172 den Wert
"C" zu der Dekompressionsmaschine zur Verarbeitung. Wenn C
außerhalb der Reihenfolge ist (d. h. C · NAC), dann füllt die
Dekodierer-Lauf-Verbesserungsmaschine "den Spalt" zwischen
dem größten erwarteten Kodewert und dem Kodewert C.
Besonders Block 174 schreibt den Wert NAC in den Adreßzeiger
RUNCODE und Block 176 führt RUNCODE der Dekompressions
maschine als nächstes Kodewort zur Dekompression zu. Der
Wert von RUNCODE wird im Block 178 erhöht und der Entschei
dungsblock 180 stellt fest, ob die Dekodierer-Lauf-Verbesse
rungsmaschine "den Spalt" zwischen dem Ausgabekode und der
erwarteten nächsten möglichen Adresse ausgefüllt hat (d. h.
RUNCODE < C). Wenn die Verbesserungsmaschine die Laufde
kodierung beendet hat, zeigt der Entscheidungsblock 180 an,
daß die Laufdekompression beendet ist. Wenn ein weiteres
Kodewort benötigt wird, um "den Spalt" zwischen dem Lauf
kodewort und NAC auszufüllen (d. h., RUNCODE C), springt
der Entscheidungsblock 180 zurück zum Block 176 und der Wert
des Adreßzeigers RUNCODE wird an die Dekompressionsmaschine
gesendet. RUNCODE wird erhöht und das Verfahren wiederholt,
bis alle Kodes in dem Lauf an die Dekompressionsmaschine ab
gegeben wurden.
Fig. 17 ist eine Darstellung, die zeigt, wie das Zwischen
initialisierungsverfahren und das Lauflängen-Verbesserungs
verfahren zusammenarbeiten. Ein roher Datenstrom 182 wird in
die Datenkompressionsmaschine 30 (Fig. 1) eingegeben und
unter Verwendung des Zwischeninitialisierungsverfahrens, das
in Fig. 5 dargestellt ist, komprimiert. Jedes Zeichen "a" in
dem Eingabedatenstrom 182 wird mit einem Index notiert, um
die Identifizierung seines Ortes in dem Datenstrom zu ver
einfachen. Folglich stellen a₀, a₁, . . . , a₁₁, zwölf Kopien
desselben Zeichens "a" dar. Ein Satz von anfänglichen Be
triebsbedingungen 190 besteht aus einer 8-Bit Einzel-Zei
chenlänge (m=8), 32 Spezial-Kodes (k=5), einem 12-Bit-Aus
gabekode mit fester Länge (b=12) und aus einer anfänglichen
Startadresse von 1 (c₀=1). Die ASCII-Darstellung von "a" in
binärer Schreibweise ist [01100001]. Der nächste mögliche
Kode (NAC) wird zuerst zu NAC = c₀+2k=1+32=33 berechnet. Der
Speicher 184 zeigt die Dateneinträge des Datenstroms 182 an
bestimmten Adreßorten innerhalb des Kompressions-/Dekompres
sionswörterbuchs.
Das Kompressionsverfahren mit Zwischeninitialisierung liest
das erste Eingabezeichen a₀ und sucht nach einer Überein
stimmung im Speicher 184. Angenommen, daß a₀ das erste Zei
chen in dem Datenstrom ist, dann tritt keine Übereinstimmung
auf. Das Zeichen a₀ wird dann als ein "neues Zeichen" an dem
Adreßort NAC (ADDR 33) gespeichert, wie im Speicher 184 dar
gestellt. Die ersten fünf Bits von a₀ (d. h. binär [01100] =
12) werden mit c₀ summiert und als erstes Kodewort "13" im
komprimierten Datenstrom 186 ausgegeben. Der Teil-Kode für
die letzten drei Bits von a₀ (d. h. binär [001] = 1) werden
dann als nächstes Kodewort 1 ausgegeben. Der Datenstrom 186
zeigt Kodewörter nach dem Kompressionsverfahren mit
Zwischeninitialisierung und der Datenstrom 188 zeigt den
Datenstrom 186 nach dem Lauf-Verbesserungsverfahren, das in
Fig. 13 gezeigt ist.
Das Lauf-Verbesserungsverfahren stellt fest, daß der Spe
zial-Zeichenkode "13" und der Teil-Zeichenkode "1" nicht
gleich NAC-1 sind und übergibt deshalb die zu Kodes dem kom
primierten Datenstrom 188. Der Adreßzeiger NAC wird dann er
höht (NAC = 34). Das nächste Eingabezeichen a₁ wird gelesen
und es wird nach einem übereinstimmenden Dateneintrag im
Speicher 184 gesucht. Nachdem a₀ bereits an dem Adreßort
ADDR 33 gespeichert wurde, tritt eine Übereinstimmung auf,
und das nächste Eingabezeichen a₂ wird mit a₁ verkettet.
Eine weitere Suche wird durchgeführt, wobei nach der Folge
"aa" (d. h., a₁, a₂) gesucht wird. Diese Suche schlägt fehl
(d. h. es tritt keine Übereinstimmung auf). Nachdem W nicht
mehr "0" (d. h., W = Kode(a₁)) ist, wird das Kodewort "33"
durch die Kompressionsmaschine 126 (Fig. 12) ausgegeben. Die
Lauf-Verbesserungsmaschine 128 (Fig. 12) fängt das Kodewort
"33" ab, um festzustellen, ob es gleich NAC-1 (d. h. NAC-1 =
34-1 =33) ist. Das Kodewort "33" ist gleich NAC-1, deshalb
wird der Adreßzeiger RUNCODE auf "33" eingestellt und die
Ausgabemaschine 130 (Fig. 12) wird deaktiviert, wobei ver
hindert wird, daß das Kodewort "33" ausgegeben wird. Die
Folge "a₁, a₂" wird dann an dem Adreßort NAC (ADDR 34) ge
speichert und der Adreßspeicher NAC wird erhöht (NAC = 35).
Die nächste Zeichenfolge, die nicht mit einem vorher ge
speicherten Dateneintrag im Speicher 184 übereinstimmt, ist
die Folge [a₃, a₄, a₅]. Der Wörterbucheintrag "aa" (d. h.,
ADDR 34) wird dann typischerweise durch die Kompressions
maschine ausgegeben. Die Lauf-Verbesserungsmaschine stellt
fest, daß der Ausgabekode gleich NAC-1 (d. h., 35-1) ist.
Deshalb wird der Wert des Adreßzeigers RUNCODE mit dem vor
liegenden Ausgabekodewert (d. h., RUNCODE = 34) ersetzt. Die
Lauf-Verbesserungsmaschine deaktiviert dann die Ausgabe
maschine, um zu verhindern, daß das Kodewort "34" von der
Kompressionsmaschine ausgegeben wird. Die Kompressions
maschine speichert dann die Zeichenfolge [a₃, a₄₁ a₅] an dem
Adreßort NAC (ADDR 35) und erhöht NAC (NAC = 36).
Die nächste Zeichenfolge aus dem rohen Datenstrom 182, die
nicht mit einem Dateneintrag im Speicher 184 übereinstimmt,
ist die Zeichenfolge [a₆, a₇, a₈, a₉]. Das Ausgabekodewort
"35" wird dann durch die Kompressionsmaschine ausgegeben.
Nachdem das Ausgabekodewort "35" gleich NAC-1 (36-1) ist,
wird der Wert des Adreßzeigers RUNCODE auf den Wert 35 ge
setzt und das Ausgabekodewort "35" wird deaktiviert, um
nicht in den komprimierten Datenstrom 188 ausgegeben zu
werden. Die Zeichenfolge [a₆, a₇, a₈, a₉] wird dann an dem
Adreßort NAC (ADDR 36) gespeichert und der Adreßzeiger NAC
wird erhöht (NAC = 37). Die Kompressionsmaschine verbindet
dann zusätzliche Zeichen aus dem rohen Datenstrom 182, bis
die Folge [a₁₀, a₁₁, b] nicht länger mit irgendeinem Eintrag
im Speicher 184 übereinstimmt. Das Kodewort "34" für die
letzte übereinstimmende Dateneintragsfolge (d. h., [a₁, a₂]
bei ADDR34) wird dann durch die Kompressionsmaschine aus
gegeben. Die Lauf-Verbesserungsmaschine stellt fest, daß das
Kodewort "34" nicht gleich NAC-1 (36) ist (d. h., Ende des
Laufs). Nachdem der Wert von RUNCODE "36" ist (d. h. nicht
0), werden der RUNCODE-Wert und das Kodewort "34" auf den
komprimierten Datenstoff 188 (d. h. 36, 34) ausgegeben. RUN-
CODE wird dann auf einen Null-Wert zurückgesetzt. Die Zei
chenfolge [a₁₀, a₁₁, b] wird an den Speicherort NAC (ADDR
37) kopiert, bevor NAC erhöht wird. Dieses Verfahren wird
fortgeführt, bis alle Zeichen aus dem rohen Datenstrom 182
komprimiert sind.
Der Datenstrom 188 wird zuerst durch Dekodieren des kodier
ten Zeichens "13", wie in Fig. 8 gezeigt, dekomprimiert.
Nachdem das Kodewort "13" größer als c₀ (d. h. "1") ist, und
kleiner als c₀+2k (d. h. "33") ist, wird es als ein neues
Zeichen verarbeitet, wie in Fig. 9 gezeigt. Die nächsten 3
Bits aus dem Datenstrom 188 (d. h. Kodewort "1") werden z. B.
mit der dekodierten 5-Bit binären Darstellung des Spezial-
Zeichenkodes "13" verkettet (d. h. 13-c₀ = 12 = [01100]).
Diese erzeugt die ASCII-Darstellung von "a" (d. h.
[0110001]). Das erste dekodierte Zeichen wird als a₀ im de
komprimierten Datenstrom 190 dargestellt. Das dekodierte
Zeichen "a" wird dann in den Adreßort ADDR 33 des Dekompres
sionswörterbuchs (nicht gezeigt) geladen.
Beim nächsten kodierten Zeichen "36" aus dem komprimierten
Datenstrom 188 wird festgestellt, daß es größer als c₀+2k
ist, wobei es als kodierte Mehr-Zeichen-Folge bestimmt wird.
Das kodierte Zeichen wird durch die Dekodierer-Lauf-Verbes
serungsmaschine 160 (Fig. 16) abgefangen. Das Kodewort "36"
wird mit dem vorliegenden Wert von NAC (33) verglichen.
Nachdem der Kodewert "36" größer als der Kodewert "33" ist,
wird der Wert von NAC in den Adreßzeiger RUNCODE geschrieben
und RUNCODE wird verwendet, wenn das nächste kodierte Zei
chen durch die Dekompressionsmaschine dekomprimiert wird.
Die Dekompressionsmaschine baut das Dekompressionswörterbuch
am Adreßort ADDR 34 und gibt Zeichen aus dem Lauf in den de
komprimierten Datenstrom 190 in einer für ein LZ2-Dekompres
sionsschema typischen Art ab.
Das Dekodierer-Lauf-Verbesserungsverfahren in Fig. 16 erhöht
dann RUNCODE (34) und überprüft, um zu sehen, ob der Wert
von RUNCODE kleiner oder gleich dem kodierten Zeichenwert
"36" ist. Nachdem der Wert von RUNCODE kleiner als "36" ist,
wird der neue Wert von RUNCODE an die Kompressionsmaschine
als nächstes kodiertes Zeichen geschickt. Das Verfahren wird
wiederholt, bis RUNCODE gleich dem Kodewortwert "36" ist.
Das nächste Kodewort "34" wird dann aus dem komprimierten
Datenstrom 188 gelesen und auf ähnliche Weise durch die De
kodierer-Lauf-Verbesserungsmaschine verarbeitet. Folglich
wird der Spalt zwischen den Kodewörtern in dem komprimierten
Datenstrom (d. h. zwischen den Kodewörtern 33, 34 und 35)
durch die Lauf-Verbesserungsmaschine ausgefüllt.
Der rohe Datenstrom 182 wird auf einer ersten Ebene durch
das LZ2-Kompressionsverfahren mit Zwischeninitialisierung,
wie in Fig. 5 gezeigt, komprimiert und die Daten werden
ferner auf einer zweiten Ebene durch das Lauf-Verbesserungs
verfahren, der in Fig. 13 gezeigt ist, komprimiert. Es ist
aus dem Datenstrom 188 offensichtlich, daß die Anzahl von
Kodewörtern, die von der Lauf-Verbesserungsmaschine über
tragen werden, kleiner ist, als die durch den Datenstrom 186
normalerweise übertragenen. Deshalb wird das Kompressions
verhältnis durch die reduzierten kodierten Zeichenbitlängen,
die durch das Zwischeninitialisierungsverfahren geschaffen
werden, erhöht und durch das Lauf-Verbesserungsverfahren
weiter erhöht.
Es wird darauf hingewiesen, daß das Laufkodierungsverbesse
rungsverfahren keinen Kompressionsnachteil für andere Arten
der Redundanz in den Eingabedaten mit sich bringt. Die Ver
besserung nutzt etwas von der Restredundanz aus, die in dem
Kodestrom, der durch das LZ2-Schema erzeugt wurde, zurück
bleibt: zu jeglichem gegebenen Zeitpunkt gibt es einen
"maximal gültigen Kode", der in dem Strom auftreten kann,
und Werte, die größer als der maximale Kode sind, sind "il
legal". Die Laufkodierungsverbesserung verwendet diese "il
legalen" Kodes, um Läufe zu kodieren. Beim Ausführen der
Lauf-Kodierungsverbesserung zusammen mit variablen Kode
längen: kann nicht zugelassen werden, daß die Folge A₁,
A₁+1, A₁+2, A₁+3, . . . ., A₁+(k-1) eine Kodelängen-Grenze
überspannt. Die Anzahl der erforderlichen Bits, um A₁+(k-1)
zu übertragen, muß z. B. dieselbe sein, die erforderlich ist,
um A₁ zu übertragen, nachdem dies die Bitlänge ist, die von
dem Dekompressor erwartet wird. Dies kann durch Teilen (wenn
notwendig) des Laufs in Unter-Läufe erreicht werden. Ver
schiedene Varianten der Laufkodierungsverbesserung sind mög
lich. Eine solche Variante wäre es, die neuen Kodes A₁+1,
A₁+2, . . . ., A₁+(k-1) nicht in das Wörterbuch einzutragen.
Deshalb wird im Wörterbuch Platz gespart, während immer noch
ein Weg zum Kodieren von Läufen erhalten wird. Welche
Variante besser arbeitet, wird von der Verteilung der Lauf
längen in den Eingabedaten abhängen.
Netzwerk-Protokolle (z. B. TCP/IP) umwickeln die tatsächli
chen Datenpakete, die übertragen werden, mit einem Umschlag
aus Organisationsinformationen, die benötigt werden, um den
Netzwerkverkehr zu verwalten. Eine empirische Beobachtung
zeigt, daß dieser Zusatz dazu tendiert, die relative Fre
quenz des Auftretens von Null-Bytes in dem Netzwerkverkehr
bedeutend zu erhöhen. Dieses Phänomen geht teilweise auf das
"Null-Ausfüllen" von verschiedenen Feldern in dem Paketum
schlag zurück. Die Frequenz des Auftretens von Werten un
gleich Null hängt von den Daten ab und es zeigt über lange
Zeitperioden keine markante Abweichung von einer einheit
lichen Verteilung. Daher ist eine grobe Annäherung der Wahr
scheinlichkeitsverteilung von Byte-Werten gegeben durch:
wobei P(c) die Wahrscheinlichkeit des Auftretens eines Bytes
mit einem Wert c ist, und 0 < = p < = 1. Die Werte von p, die
durch Überwachen des Netzwerkverkehrs erhalten werden, lie
gen typischerweise zwischen 0,2 und 0,3. Bei sehr kurzen Pa
keten, oder wenn die tatsächlichen Paketdaten nicht kompri
mierbar sind (z. B. Daten, die bereits an der Quelle kompri
miert wurden), ist eine hohe Wahrscheinlichkeit eines Null-
Wertes oft die einzige Redundanz, die in den Daten übrig
bleibt. In diesen Fällen wird ein einfaches Huffman-Kodier
schema ein LZ-Schema übertreffen.
Das grundsätzliche Prinzip der Huffman-Kodierung ist es,
feste Zeichenlängen mit verschiedenen Kodelängen zu kodie
ren, unter Verwendung kürzerer Kodes für die häufigsten
Zeichen und längerer Kodes für die weniger häufigen. Die
Huffman-Kodierung ist in Fachkreisen gut bekannt und wird
deshalb nicht im Detail beschrieben. Mit der Verwendung des
Huffman-Algorithmus ist es möglich, eine optimale Kodezu
ordnung für eine gegebene Wahrscheinlichkeitsverteilung auf
zubauen. Die resultierende Kodezuordnung hat ebenfalls ein
"Präfix-freies" Merkmal (d. h. kein Kode tritt als ein Präfix
eines anderen Kodes auf). Dies macht den kodierten Strom
eindeutig und sofortig dekodierbar.
Für die einfache Wahrscheinlichkeitsverteilung, die oben be
schrieben wurde, mit p < 1/256 und unter der Annahme eines
8-Bit Eingabe-Bytes, mit Werten zwischen 0 und 255, ist eine
optimale Huffman-Kodezuordnung in Fig. 18 A gegeben. Bezug
nehmend auf die Mittelspalte ist "z" eine ganze Zahl im Be
reich von 1 < = z < = 8, deren optimaler Wert als eine Funk
tion von p auf die folgende Art bestimmt wird. Das Kompres
sionsverhältnis für dieses Kodierungsschema ist in Gleichung
1 wie folgt definiert:
R(z,p) = pz/8 + [(1-p)/2040] * (29-z + 2038) (1)
Für ein festes z im Bereich von 1 < = z < = 8, ist R(z,p) eine
lineare Funktion von p. Ihre Steigung ist nicht-positiv und
steigt monoton mit z. Der Wert R(z,0) fällt ebenfalls mono
ton mit z. Fig. 18 B zeigt Zeichnungen von R(z, p) für 1 < =
z < = 4 und 0 < = p < = 0,5. Daher existiert für ein gegebenes
z ein Wert pz derart, daß R(z, p) < = R(z′, p) für alle z′ < z
und p < pz. Es kann ohne weiteres verifiziert werden, daß pz
die Wurzel einer linearen Gleichung 2 ist:
R (z,pz) = R (z+1, Pz) (2)
Ersetzt man in Gleichung 2 den Ausdruck für R (z, p) durch
Gleichung 1 und löst nach pz auf, erzeugt man die folgende
Gleichung:
pz = 28-z/[(255 * 2z) + 256].
Fig. 19 ist eine Tabelle, die die Werte von pz für 0 < = z < =
8 zeigen. Die Werte pz = 1 für z = 0 sind der Vollständig
keit halber eingeschlossen. Ein gegebener Wert von z, 1 < = z
< = 8, ist optimal, wenn p im Bereich von pz < = p < = pz-1
ist. Einige dieser Intervalle sind in Fig. 18 B gezeigt.
Folglich ist z = 2 optimal für 64/319 < = p < = 128/383 (un
gefähr gleich 0,2006 < = p < = 0,3342). Es wird darauf hinge
wiesen, daß dieser Bereich die Werte von p einschließt, die
empirisch beim typischen Lokalnetzwerkverkehr gefunden
wurden.
Die verschiedenen Kompressionsverfahren, die im Vorher
gehenden beschrieben wurden, sind in Fig. 20 kombiniert, um
ein effektives Schema zur kundenspezifisch angepaßten Kom
pression von Netzwerkpaketen zu erzeugen. Fig. 20 zeigt
einen Block 202 zum Verarbeiten der Paketadreßfelder (nor
malerweise zwei 6-Byte-Felder). Bei bestimmten Anwendungen
(z. B. Netzwerkbrücken) tragen die meisten Pakete Adressen
einer kleinen Teilmenge (nämlich die Adressen der Stationen,
die durch die Brücke bedient werden). Diese häufig auf
tretenden Adressen können in einer Tabelle gespeichert wer
den und durch ihre Serien-Nummer in einer Tabelle kodiert
werden. Wenn z. B. die Adreßtabelle 255 Bytes lang ist, kann
eine Serien-Nummer in einem Byte kodiert werden, wobei folg
lich ein 6 : 1 Kompressionsverhältnis für das Adreßfeld er
reicht wird (ein Kode ist für die Markierung der Adressen,
die nicht in der Tabelle gefunden werden, reserviert). Bei
alternativen Anwendungen sind die Adreßfelder zusammen mit
dem Rest des Pakets komprimiert oder werden unkomprimiert
gesendet.
Bezugnehmend auf Fig. 20 wird ein Eingabepaket 200 in einen
Adreßverarbeitungsblock 202 eingegeben. Der Block 208 stellt
ein verbessertes LZ2-Schema dar, mit mittlerer anfänglicher
Wörterbuch- und Laufkodierungsverbesserung (LZE). Der Block
204 stellt das einfache Huffman-Schema (Z-HUF) wie im voran
gegangenen mit z=2 dar. Bei einer Hardware-Ausführung laufen
LZE und Z-HUF parallel. Block 210 wählt den Ausgabe des
Kompressionsverfahrens mit dem besten Verhalten für das
derzeitige Paket aus. Block 210 gibt dann das komprimierte
Paket zusammen mit einem kurzen Kopf aus, der die kompri
mierte Paketlänge und einen Zeiger bezüglich des ausgewähl
ten Kompressionsverfahrens enthält. Die Länge der kompri
mierten Ausgabe wird ebenfalls gegenüber der Länge des ur
sprünglichen Pakets aus Block 200 verglichen, um eine Paket
ausdehnung zu verhindern. Wenn weder der LZE- noch der
Z-HUF-Kompressor beim Komprimieren des Pakets erfolgreich
war, wird eine Kopie des Originals von Block 206 zusammen
mit einer geeigneten Anzeige in dem Kopf ausgegeben.
Im wesentlichen hat die Mehrheit der Pakete mit dem LZE im
Block 208 eine bessere Kompression als mit der Z-HUF im
Block 204 oder mit dem "Kopier"-Block 206. Der Z-HUF- und
der "Kopier"-Block werden jedoch einige der Pakete gewinnen
(meistens kürzere). Einige repräsentative Kompressions
ergebnisse sind in Fig. 21 für zwei verschiedene Dateien von
Paketen dargestellt. Die erste Zeile in Fig. 21 zeigt eine
LZW-Ausführung (Unix-Kompression), mit Ausgabekodes bis zu
16 Bits. Alle Pakete werden als eine Datei komprimiert (d. h.
die Paketgrenzen werden ignoriert und die Wörterbücher
werden zwischen den Paketen geteilt). Die zweite Zeile in
der Tabelle in Fig. 21 zeigt das Ergebnis einer Unix-Kom
pression mit 12-Bit-Ausgabekodes, die dritte Reihe gibt die
Ergebnisse des LZE-Kompressionsschemas, das oben beschrieben
wurde, und die vierte Reihe gibt die Kompressionsergebnisse,
die sowohl das LZE- als auch das Z-HUF-Kompressionsschema
parallel verwenden, wie in Fig. 20 gezeigt. Die Ergebnisse
in der dritten und vierten Reihe entsprechen der unab
hängigen Kompression jedes Paketes.
Wie in Fig. 21 gesehen werden kann, ist das Kompressions
verhalten für einzelne Pakete nahe an dem und in einigen
Fällen sogar besser als das erreichbare, wenn große Dateien
von Paketen komprimiert werden. Dies trifft sogar zu, obwohl
es eine bessere Chance des Anpassens an die statistischen
Charakteristika der Datenquelle in einer großen Datei von
Paketen durch Ausnutzen von Zwischen-Paket-Redundanzen gibt.
Die Kompressionsergebnisse in Fig. 21 sind über Langzeit
kompressionstests konsistent, bei denen es einer Software-
Ausführung gestattet war, für mehrere Tage kontinuierlich zu
laufen. Die Netzwerkpakete wurden periodisch abgetastet,
komprimiert, dekomprimiert und bezüglich des Kompressions
verhältnisses überwacht.
Fig. 22 zeigt einen Graph des Kompressionsverhältnisses als
eine Funktion der Zeit. Die Kompression wurde für eine Per
iode von ungefähr 200 Stunden gemessen. Die abgetasteten
Datensätze bestanden aus 1,420,998 Paketen, mit einer Ge
samtgröße von 198,754,151 Bytes mit einer durchschnittlichen
Paketlänge von 140 Bytes. Das durchschnittliche Kompres
sionsverhältnis für den Datensatz war 0,572. Fig. 23 zeigt
ein Histogramm der Verteilung der Daten (Bruchteil der Ge
samtanzahl von Bytes) bezüglich der Paketlänge. Mehr als 50%
der Bytes in diesen Datensätzen sind in Paketen mit Längen
von 200 Byte oder weniger enthalten. Fig. 24 zeigt das
durchschnittliche Kompressionsverhältnis für verschiedene
Bereiche der Paketlängen. Ein konsistent gutes Kompressions
verhältnis wird für jede Paketlänge erreicht.
Das System, wie es oben beschrieben wurde, verbessert das
Kompressionsverhalten in Datenquellen, in denen das "na
türliche" Alphabet groß ist (z. B. 16-Bit-Symbole). Zusätz
lich verbessert das System das Kompressionsverhalten für
Datenquellen, die in kurze Blöcke unterteilt sind, wobei
jeder Block unabhängig komprimiert werden muß. Diese Ver
besserungen schaffen ein Kompressionsschema, das kunden
spezifisch auf Netzwerkpakete angepaßt ist. Folglich ist das
Kompressionsverhalten auf einzelnen Netzwerkpaketen nun ver
gleichbar mit dem, das mit großen Dateien von Paketen
erreichbar ist, sogar wenn die durchschnittliche Paketlänge
sehr kurz ist.
Claims (23)
1. Verfahren zum Dekodieren von Eingabedaten in einem Kom
pressions-/Dekompressionssystem, das auf einem Wörter
buch basiert, gekennzeichnet durch folgende Schritte:
Speichern eindeutiger Mehr-Zeichen-Folgen der Eingabe daten als Wörterbucheinträge in dem Kompressions-/Dekom pressionssystem (22);
Kodieren von Mehr-Zeichen-Folgen der Eingabedaten in Kodewörter gemäß der Adresse der Wörterbucheinträge, die mit der Zeichenfolge (66) übereinstimmen;
Identifizieren von Einzel-Zeichen-Folgen der Eingabe daten, die noch nicht in dem Kompressions-/Dekompres sions-Wörterbuch (64) gespeichert sind;
Kodieren jeder Einzel-Zeichen-Folge mit einem Spezial- Kode und einem Teil-Kode, wobei jeder Spezial- und Teil-Kode einen auswählbaren Abschnitt der zugeordneten Einzel-Zeichen-Folge (72, 74, 76) darstellt; und
Ausgeben eines komprimierten Datenstromes aus dem Kom pressions-/Dekompressions-System, der sowohl die Kode wörter, die den kodierten Einzel-Zeichen-Folgen ent sprechen, als auch die Kodewörter, die den kodierten Mehr-Zeichen-Folgen (62) entsprechen, hat, wobei jeder Spezial-Kode und zugeordnete Teil-Kode eindeutig eine Einzel-Zeichen-Folge identifizieren und eine Teilmenge der Gesamtzahl von eindeutigen Einzel-Zeichen-Folgen darstellen, die in den Eingabedaten existieren können.
Speichern eindeutiger Mehr-Zeichen-Folgen der Eingabe daten als Wörterbucheinträge in dem Kompressions-/Dekom pressionssystem (22);
Kodieren von Mehr-Zeichen-Folgen der Eingabedaten in Kodewörter gemäß der Adresse der Wörterbucheinträge, die mit der Zeichenfolge (66) übereinstimmen;
Identifizieren von Einzel-Zeichen-Folgen der Eingabe daten, die noch nicht in dem Kompressions-/Dekompres sions-Wörterbuch (64) gespeichert sind;
Kodieren jeder Einzel-Zeichen-Folge mit einem Spezial- Kode und einem Teil-Kode, wobei jeder Spezial- und Teil-Kode einen auswählbaren Abschnitt der zugeordneten Einzel-Zeichen-Folge (72, 74, 76) darstellt; und
Ausgeben eines komprimierten Datenstromes aus dem Kom pressions-/Dekompressions-System, der sowohl die Kode wörter, die den kodierten Einzel-Zeichen-Folgen ent sprechen, als auch die Kodewörter, die den kodierten Mehr-Zeichen-Folgen (62) entsprechen, hat, wobei jeder Spezial-Kode und zugeordnete Teil-Kode eindeutig eine Einzel-Zeichen-Folge identifizieren und eine Teilmenge der Gesamtzahl von eindeutigen Einzel-Zeichen-Folgen darstellen, die in den Eingabedaten existieren können.
2. Kodierverfahren gemäß Anspruch 1, gekennzeichnet durch
Kodieren des Spezial-Kodes für jede Einzel-Zeichen-Folge
in dem komprimierten Datenstrom gemäß einem auswählbaren
Parameter k, der festlegt, wieviele Bits des Einzel-Zei
chens in dem Spezial-Kode (80) enthalten sind.
3. Kodierverfahren gemäß Anspruch 1 oder 2, gekennzeichnet
durch
Rekonstruieren von Einzel-Zeichen-Folgen aus dem kompri mierten Datenstrom (90), wobei das Rekonstruktionsver fahren folgende Schritte aufweist:
Identifizieren eines Spezial-Kodes in dem komprimierten Datenstrom (92);
Dekodieren des Spezial-Kodes zurück in einen ursprüng lichen Abschnitt der zugeordneten Einzel-Zeichen-Folge (93); und
Kombinieren des Spezial-Kodes mit seinem zugeordneten Teil-Kode (36).
Rekonstruieren von Einzel-Zeichen-Folgen aus dem kompri mierten Datenstrom (90), wobei das Rekonstruktionsver fahren folgende Schritte aufweist:
Identifizieren eines Spezial-Kodes in dem komprimierten Datenstrom (92);
Dekodieren des Spezial-Kodes zurück in einen ursprüng lichen Abschnitt der zugeordneten Einzel-Zeichen-Folge (93); und
Kombinieren des Spezial-Kodes mit seinem zugeordneten Teil-Kode (36).
4. Kodierverfahren gemäß einem der Ansprüche 1 bis 3, da
durch gekennzeichnet,
daß der Spezial-Kode (80) kodiert ist, um innerhalb
eines vorher festgelegten Bereichs von Kodewerten, die
durch das Kompressions-/Dekompressions-System erzeugt
werden, zu existieren.
5. Kodierverfahren gemäß einem der Ansprüche 1 bis 4, da
durch gekennzeichnet,
daß das Kodieren von Einzel-Zeichen-Folgen das Zuordnen
einer Teilmenge von Bits aus einer Einzel-Zeichen-Folge
(80) zu dem Spezial-Kode und das Zuordnen der restlichen
Bits des Einzel-Zeichens zu dem Teil-Kode (86) umfaßt,
wobei die Anzahl von Bits in dem Spezial-Kode durch die
Anzahl von Kodewörtern festgelegt wird, die in dem Kom
pressions-/Dekompressions-System zugeordnet sind, um
Einzel-Zeichen-Folgen darzustellen.
6. Kodierverfahren gemäß Anspruch 5, dadurch gekennzeich
net,
daß die Anzahl von Bits, die den Spezial-Kodes (80) der
Einzel-Zeichen-Folgen zugeordnet sind, gemäß der Art und
der Struktur der Eingabedaten verändert werden.
7. Kodierverfahren gemäß einem der Ansprüche 1 bis 6, ge
kennzeichnet durch
Erfassen eines Laufs von aufeinanderfolgenden Kodewör
tern in dem komprimierten Datenstrom, wobei jedes Kode
wort in dem Lauf eine Folge von Eingabedaten darstellt,
die aus denselben Zeichen (128) bestehen.
8. Kodierverfahren gemäß Anspruch 7, gekennzeichnet durch
Komprimieren des Laufs von Kodewörtern des komprimierten
Datenstroms (128).
9. Kodierverfahren gemäß Anspruch 7 oder 8, gekennzeichnet
durch
Hindern des Kompressions-/Dekompressions-Systems am Aus
geben eines Teils des Kodewortlaufs an den komprimierten
Datenstrom (140).
10. Kodierverfahren gemäß Anspruch 9, dadurch gekenn
zeichnet,
daß der Wert des ersten Kodewortes, das den gesperrten
Kodewörtern folgend gesendet wird, die Rekonstruktion
der Sequenz der gesperrten Kodewörter (160) gestattet.
11. Kodierverfahren gemäß einem der Ansprüche 7 bis 10, ge
kennzeichnet durch
gleichzeitiges Komprimieren der Eingabedaten mit min
destens einem zusätzlichen Kompressionsschema und Aus
wählen des komprimierten Datenstroms aus dem Schema, das
das beste Kompressionsverhältnis (208, 206, 204)
schafft.
12. Kodierverfahren gemäß Anspruch 11, gekennzeichnet durch
Auswählen der unkomprimierten Eingabedatenzeichen, wenn
die Eingabedatengröße kleiner als jeder komprimierte
Datenstrom (210) ist.
13. Kodierverfahren gemäß einem der Ansprüche 1 bis 12, da
durch gekennzeichnet,
daß die Gesamtzahl von eindeutigen Einzel-Zeichen-Folgen
größer ist als die gesamte Anzahl von Wörterbuch
eintragungen in dem Kompressions-/Dekompressions-System
(22).
14. Kodierverfahren gemäß einem der Ansprüche 1 bis 13, da
durch gekennzeichnet,
daß die Anzahl der eindeutigen Einzel-Zeichen-Folgen 2¹⁶
beträgt.
15. Verfahren zum Kodieren von Eingabedaten in einem Kom
pressions-/Dekompressions-System, das auf einem Wörter
buch basiert, gekennzeichnet durch folgende Schritte:
Kodieren von Zeichenfolgen aus den Eingabedaten und Speichern eindeutiger Zeichenfolgen als Dateneinträge in dem Kompressions-/Dekompressionswörterbuch (64);
Ausgeben eines komprimierten Datenstroms aus dem Kom pressions-/Dekompressions-System, wobei der komprimierte Datenstrom, der aus Kodewörtern besteht, die kodierten Zeichenfolgen (62) darstellt;
Erfassen einer Sequenz von Kodewörtern in dem kompri mierten Datenstrom, die einen Lauf von Eingabedaten zeichen (128) darstellt, wobei der Lauf Eingabedaten zeichen darstellt, die denselben Wert haben und die durch das Kompressions-/Dekompressions-System in nach einanderfolgender Reihenfolge verarbeitet werden; und
Komprimieren des komprimierten Datenstroms durch Hindern des Kompressions-/Dekompressions-Systems am Ausgeben eines Teils des Kodewortlaufs in den komprimierten Datenstrom; wobei der Wert des ersten Kodewortes, das den gesperrten Kodewörtern folgend gesendet wird, die Rekonstruktion der Folge der gesperrten Kodewörter (128) erlaubt.
Kodieren von Zeichenfolgen aus den Eingabedaten und Speichern eindeutiger Zeichenfolgen als Dateneinträge in dem Kompressions-/Dekompressionswörterbuch (64);
Ausgeben eines komprimierten Datenstroms aus dem Kom pressions-/Dekompressions-System, wobei der komprimierte Datenstrom, der aus Kodewörtern besteht, die kodierten Zeichenfolgen (62) darstellt;
Erfassen einer Sequenz von Kodewörtern in dem kompri mierten Datenstrom, die einen Lauf von Eingabedaten zeichen (128) darstellt, wobei der Lauf Eingabedaten zeichen darstellt, die denselben Wert haben und die durch das Kompressions-/Dekompressions-System in nach einanderfolgender Reihenfolge verarbeitet werden; und
Komprimieren des komprimierten Datenstroms durch Hindern des Kompressions-/Dekompressions-Systems am Ausgeben eines Teils des Kodewortlaufs in den komprimierten Datenstrom; wobei der Wert des ersten Kodewortes, das den gesperrten Kodewörtern folgend gesendet wird, die Rekonstruktion der Folge der gesperrten Kodewörter (128) erlaubt.
16. Kodierverfahren gemäß Anspruch 15, dadurch gekennzeich
net,
daß der Lauf durch Vergleichen der kodierten Wertausgabe
aus dem Kompressions-/Dekompressions-System mit dem
Speicherort des letzten Dateneintrags, der in dem Kom
pressions-/Dekompressions-Wörterbuch (136) gespeichert
ist, erfaßt wird.
17. Kodierverfahren gemäß Anspruch 16, gekennzeichnet durch
Hindern des Kompressions-/Dekompressions-Systems am Aus
geben kodierter Zeichenfolgen, bis die letzte kodierte
Wertausgabe aus dem Kompressions- /Dekompressionssystem
nicht länger mit dem Adreßwert der letzten Zeichenfolge,
die in dem Wörterbuch (140) gespeichert ist, überein
stimmt.
18. Kodierverfahren gemäß einem der Ansprüche 15 bis 17, ge
kennzeichnet durch
Dekomprimieren des ersten Kodewortes, das den gesperrten
Kodewörtern folgend gesendet wurde, in Kodewörter die
durch das Kompressions-/Dekompressions-System (160) wei
ter in dekomprimierte Daten dekomprimiert werden.
19. Schaltung zum Kodieren von Eingabedaten in einem Korn
pressions-/Dekompressions-System, das auf einem Wörter
buch basiert, gekennzeichnet durch folgende Merkmale:
eine Kompressions-/Dekompressions-Maschine zum Kodieren von Einzel- und Mehr-Zeichen-Folgen aus den Eingabedaten in Kodewörter und zum Ausgeben der Kodewörter als kom primierter Datenstrom (126);
eine Einrichtung zum Trennen der Einzel-Zeichen-Folgen von den Eingabedaten in ein erstes und ein zweites Ko defeld (86);
eine Einrichtung zum Kodieren des ersten Kodefeldes, um Einzel-Zeichen-Folgen in dem komprimierten Datenstrom (82, 80, 84) zu identifizieren, wobei das erste Kodefeld kodiert ist, um innerhalb eines vorher festgelegten Be reichs der Kodewerte der Kompressions-/Dekompressions maschine zu sein; und
eine Einrichtung zum Erzeugen von Einzel-Zeichen-Folgen aus dem komprimierten Datenstrom durch Dekodieren des ersten Kodefeldes und Verbinden dieses mit dem zweiten Kodefeld (86), wobei das erste und das zweite Kodefeld die Bitlänge der kodierten Zeichenfolgen durch Darstel len einer Teilmenge aller Einzel-Zeichen-Folgen, die möglicherweise in den Eingabedaten auftreten können, re duziert.
eine Kompressions-/Dekompressions-Maschine zum Kodieren von Einzel- und Mehr-Zeichen-Folgen aus den Eingabedaten in Kodewörter und zum Ausgeben der Kodewörter als kom primierter Datenstrom (126);
eine Einrichtung zum Trennen der Einzel-Zeichen-Folgen von den Eingabedaten in ein erstes und ein zweites Ko defeld (86);
eine Einrichtung zum Kodieren des ersten Kodefeldes, um Einzel-Zeichen-Folgen in dem komprimierten Datenstrom (82, 80, 84) zu identifizieren, wobei das erste Kodefeld kodiert ist, um innerhalb eines vorher festgelegten Be reichs der Kodewerte der Kompressions-/Dekompressions maschine zu sein; und
eine Einrichtung zum Erzeugen von Einzel-Zeichen-Folgen aus dem komprimierten Datenstrom durch Dekodieren des ersten Kodefeldes und Verbinden dieses mit dem zweiten Kodefeld (86), wobei das erste und das zweite Kodefeld die Bitlänge der kodierten Zeichenfolgen durch Darstel len einer Teilmenge aller Einzel-Zeichen-Folgen, die möglicherweise in den Eingabedaten auftreten können, re duziert.
20. Schaltung gemäß Anspruch 19, dadurch gekennzeichnet,
daß die Kodiereinrichtung (84) eine auswählbare Anzahl
von Bits aus dem ersten Kodefeld (80) mit einem vorher
festgelegten Wert (82) summiert.
21. Schaltung gemäß Anspruch 19 oder 20, dadurch gekenn
zeichnet,
daß der Dekodierer einen vorher festgelegten Wert aus
dem ersten Kodefeld (102) abzieht und eine auswählbare
Anzahl von Bits des Ergebnisses mit dem zweiten Kodefeld
(104) kombiniert.
22. Schaltung gemäß einem der Ansprüche 19 bis 21, gekenn
zeichnet durch
eine Kodierer-Lauf-Verbesserungsmaschine (128), die mit
der Kompressions-/Dekompressions-Maschine (126) verbun
den ist zum Verhindern, daß die Kompressions-/Dekompres
sions-Maschine einige der Kodewörter an den kompri
mierten Datenstrom ausgibt.
23. Schaltung gemäß Anspruch 22, gekennzeichnet durch
eine Dekodierer-Lauf-Verbesserungsmaschine (160), die
mit der Kompressions-/Dekompressions-Maschine (162) ver
bunden ist zur Rekonstruierung der Sequenz von gesper
rten Kodewörtern aus dem Wert des ersten Kodewortes, das
den gesperrten Kodeworten folgend gesendet
wird.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/046,548 US5389922A (en) | 1993-04-13 | 1993-04-13 | Compression using small dictionaries with applications to network packets |
Publications (2)
Publication Number | Publication Date |
---|---|
DE4340591A1 DE4340591A1 (de) | 1994-11-17 |
DE4340591C2 true DE4340591C2 (de) | 1995-04-27 |
Family
ID=21944035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4340591A Expired - Lifetime DE4340591C2 (de) | 1993-04-13 | 1993-11-29 | Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete |
Country Status (4)
Country | Link |
---|---|
US (1) | US5389922A (de) |
JP (1) | JPH07104971A (de) |
DE (1) | DE4340591C2 (de) |
GB (1) | GB2277179B (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024074249A1 (de) | 2022-10-05 | 2024-04-11 | Mercedes-Benz Group AG | Verfahren zur kompression und dekompression von log-dateien und informationstechnisches system |
Families Citing this family (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5530645A (en) * | 1993-06-30 | 1996-06-25 | Apple Computer, Inc. | Composite dictionary compression system |
US7190284B1 (en) | 1994-11-16 | 2007-03-13 | Dye Thomas A | Selective lossless, lossy, or no compression of data based on address range, data type, and/or requesting agent |
US5870036A (en) * | 1995-02-24 | 1999-02-09 | International Business Machines Corporation | Adaptive multiple dictionary data compression |
US5627534A (en) * | 1995-03-23 | 1997-05-06 | International Business Machines Corporation | Dual stage compression of bit mapped image data using refined run length and LZ compression |
DE19538852A1 (de) * | 1995-06-30 | 1997-01-02 | Deutsche Telekom Ag | Verfahren und Anordnung zur Klassifizierung von Sprachsignalen |
US5781881A (en) * | 1995-10-19 | 1998-07-14 | Deutsche Telekom Ag | Variable-subframe-length speech-coding classes derived from wavelet-transform parameters |
GB2310055A (en) * | 1996-02-08 | 1997-08-13 | Ibm | Compression of structured data |
JP3256121B2 (ja) * | 1996-02-13 | 2002-02-12 | 富士通株式会社 | データ符号化装置およびデータ復号装置およびその方法 |
US5861827A (en) * | 1996-07-24 | 1999-01-19 | Unisys Corporation | Data compression and decompression system with immediate dictionary updating interleaved with string search |
DE19706268A1 (de) * | 1997-02-18 | 1998-08-20 | Christian Wenz | Dateiformatspezifisches Packverfahren |
US5930399A (en) * | 1997-04-03 | 1999-07-27 | Microsoft Corporation | Data encoding for a communication channel supporting a subset of the characters to be transmitted |
US6879266B1 (en) * | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
JPH11143877A (ja) * | 1997-10-22 | 1999-05-28 | Internatl Business Mach Corp <Ibm> | 圧縮方法、辞書の見出し語インデックス・データを圧縮するための方法、及び機械翻訳システム |
US5870412A (en) * | 1997-12-12 | 1999-02-09 | 3Com Corporation | Forward error correction system for packet based real time media |
US6145109A (en) * | 1997-12-12 | 2000-11-07 | 3Com Corporation | Forward error correction system for packet based real time media |
EP1040611B1 (de) | 1997-12-12 | 2002-06-05 | 3Com Corporation | Ein vorwärtsfehlerkorrektionssystem für packetbasierte echtzeitmedien |
JP3421700B2 (ja) | 1998-01-22 | 2003-06-30 | 富士通株式会社 | データ圧縮装置及び復元装置並びにその方法 |
US6216175B1 (en) * | 1998-06-08 | 2001-04-10 | Microsoft Corporation | Method for upgrading copies of an original file with same update data after normalizing differences between copies created during respective original installations |
JP4242970B2 (ja) * | 1998-07-09 | 2009-03-25 | 富士通株式会社 | データ圧縮方法及びデータ圧縮装置 |
US6624761B2 (en) * | 1998-12-11 | 2003-09-23 | Realtime Data, Llc | Content independent data compression method and system |
US6819271B2 (en) | 1999-01-29 | 2004-11-16 | Quickshift, Inc. | Parallel compression and decompression system and method having multiple parallel compression and decompression engines |
US6885319B2 (en) * | 1999-01-29 | 2005-04-26 | Quickshift, Inc. | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms |
US7129860B2 (en) * | 1999-01-29 | 2006-10-31 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
US7538694B2 (en) | 1999-01-29 | 2009-05-26 | Mossman Holdings Llc | Network device with improved storage density and access speed using compression techniques |
US6166665A (en) * | 1999-03-08 | 2000-12-26 | Unisys Corporation | Data compression method and apparatus with embedded run-length encoding |
US6601104B1 (en) | 1999-03-11 | 2003-07-29 | Realtime Data Llc | System and methods for accelerated data storage and retrieval |
US6604158B1 (en) * | 1999-03-11 | 2003-08-05 | Realtime Data, Llc | System and methods for accelerated data storage and retrieval |
GB2348065A (en) * | 1999-03-19 | 2000-09-20 | Nds Ltd | Signal compression |
IT1308456B1 (it) * | 1999-04-26 | 2001-12-17 | Olivetti Lexikon Spa | Dispositivo per comprimere/decomprimere stringhe di bit |
JP2000305822A (ja) * | 1999-04-26 | 2000-11-02 | Denso Corp | データベース管理装置,データベースレコード抽出装置,データベース管理方法及びデータベースレコード抽出方法 |
US6137428A (en) * | 1999-04-27 | 2000-10-24 | Unisys Corporation | Data compression method and apparatus with embedded run-length encoding using mathematical run processing |
US6169499B1 (en) * | 1999-06-19 | 2001-01-02 | Unisys Corporation | LZW data compression/decompression apparatus and method with embedded run-length encoding/decoding |
US6453389B1 (en) | 1999-06-25 | 2002-09-17 | Hewlett-Packard Company | Optimizing computer performance by using data compression principles to minimize a loss function |
US6320523B1 (en) * | 1999-07-30 | 2001-11-20 | Unisys Corporation | Method and apparatus for reducing the time required for compressing data |
US6188333B1 (en) | 1999-08-12 | 2001-02-13 | Unisys Corporation | LZW data compression apparatus and method using look-ahead mathematical run processing |
US6404362B1 (en) * | 1999-09-21 | 2002-06-11 | Unisys Corporation | Method and apparatus for reducing the time required for decompressing compressed data |
GB0001707D0 (en) | 2000-01-25 | 2000-03-15 | Btg Int Ltd | Data compression having more effective compression |
US20010047473A1 (en) | 2000-02-03 | 2001-11-29 | Realtime Data, Llc | Systems and methods for computer initialization |
US20030191876A1 (en) * | 2000-02-03 | 2003-10-09 | Fallon James J. | Data storewidth accelerator |
US9143546B2 (en) * | 2000-10-03 | 2015-09-22 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US7417568B2 (en) * | 2000-10-03 | 2008-08-26 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US6359548B1 (en) * | 2000-10-16 | 2002-03-19 | Unisys Corporation | Data compression and decompression method and apparatus with embedded filtering of infrequently encountered strings |
US20020085764A1 (en) * | 2000-12-29 | 2002-07-04 | Brady Thomas S. | Enhanced data compression technique |
GB0102572D0 (en) * | 2001-02-01 | 2001-03-21 | Btg Int Ltd | Apparatus to provide fast data compression |
US7386046B2 (en) * | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US6392568B1 (en) * | 2001-03-07 | 2002-05-21 | Unisys Corporation | Data compression and decompression method and apparatus with embedded filtering of dynamically variable infrequently encountered strings |
US6400286B1 (en) * | 2001-06-20 | 2002-06-04 | Unisys Corporation | Data compression method and apparatus implemented with limited length character tables |
US7272663B2 (en) * | 2001-08-28 | 2007-09-18 | International Business Machines Corporation | Method and system for delineating data segments subjected to data compression |
US7252322B2 (en) * | 2003-02-07 | 2007-08-07 | William Rusu | Hard tonneau cover |
US7162583B2 (en) * | 2003-12-29 | 2007-01-09 | Intel Corporation | Mechanism to store reordered data with compression |
US20050219076A1 (en) * | 2004-03-22 | 2005-10-06 | Michael Harris | Information management system |
US7053803B1 (en) * | 2005-01-31 | 2006-05-30 | Hewlett Packard Development Company, L.P. | Data compression |
US7420992B1 (en) | 2005-03-17 | 2008-09-02 | Packeteer, Inc. | Adaptive network traffic compression mechanism including dynamic selection of compression algorithms |
US7102552B1 (en) * | 2005-06-07 | 2006-09-05 | Windspring, Inc. | Data compression with edit-in-place capability for compressed data |
US7167115B1 (en) | 2005-08-26 | 2007-01-23 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for data compression and decompression utilizing multiple dictionaries |
EP1780947B1 (de) * | 2005-10-27 | 2009-06-17 | Alcatel Lucent | Datensammeln von Netzknoten in einem Telekommunikationsnetz |
US9176975B2 (en) | 2006-05-31 | 2015-11-03 | International Business Machines Corporation | Method and system for transformation of logical data objects for storage |
US8868930B2 (en) | 2006-05-31 | 2014-10-21 | International Business Machines Corporation | Systems and methods for transformation of logical data objects for storage |
US7738717B1 (en) * | 2006-06-27 | 2010-06-15 | Verizon Services Corp. | Systems and methods for optimizing bit utilization in data encoding |
US7649909B1 (en) | 2006-06-30 | 2010-01-19 | Packeteer, Inc. | Adaptive tunnel transport protocol |
US20080017227A1 (en) * | 2006-07-19 | 2008-01-24 | Ward Barry D | Walking aid apparatus |
CN101543037B (zh) * | 2007-05-17 | 2012-05-30 | 索尼株式会社 | 信息处理设备和方法 |
US8391148B1 (en) * | 2007-07-30 | 2013-03-05 | Rockstar Consortion USLP | Method and apparatus for Ethernet data compression |
US7827165B2 (en) * | 2007-09-17 | 2010-11-02 | International Business Machines Corporation | Providing a social network aware input dictionary |
JP5446328B2 (ja) * | 2009-03-06 | 2014-03-19 | セイコーエプソン株式会社 | 表示装置,電子機器および駆動コード生成回路 |
US8217813B2 (en) * | 2010-04-29 | 2012-07-10 | Advanced Micro Devices, Inc. | System and method for low-latency data compression/decompression |
US8897298B2 (en) * | 2011-11-02 | 2014-11-25 | Qualcomm Incorporated | Systems and methods for compressing headers and payloads |
US11741121B2 (en) | 2019-11-22 | 2023-08-29 | Takashi Suzuki | Computerized data compression and analysis using potentially non-adjacent pairs |
US10387377B2 (en) | 2017-05-19 | 2019-08-20 | Takashi Suzuki | Computerized methods of data compression and analysis |
CN114128240A (zh) * | 2019-02-28 | 2022-03-01 | 华为技术有限公司 | 实现内部网关协议的网络中的压缩数据传输 |
CN115276666B (zh) * | 2022-09-28 | 2022-12-20 | 汉达科技发展集团有限公司 | 一种装备训练模拟器数据高效传输方法 |
CN115988569B (zh) * | 2023-03-21 | 2023-06-30 | 浙江省疾病预防控制中心 | 一种蓝牙设备数据快速传输方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2101155B1 (de) * | 1970-08-31 | 1974-09-20 | Ortf | |
DE3048273C2 (de) * | 1980-12-20 | 1985-04-25 | Messerschmitt-Bölkow-Blohm GmbH, 8012 Ottobrunn | Verfahren und Schaltungsanordnung zur Aufbereitung multispektraler digitalisierter Bilddaten zu Übertragungszwecken |
US4464650A (en) * | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US4814746A (en) * | 1983-06-01 | 1989-03-21 | International Business Machines Corporation | Data compression method |
US4558302A (en) * | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
US5003307A (en) * | 1989-01-13 | 1991-03-26 | Stac, Inc. | Data compression apparatus with shift register search means |
US5150430A (en) * | 1991-03-15 | 1992-09-22 | The Board Of Trustees Of The Leland Stanford Junior University | Lossless data compression circuit and method |
-
1993
- 1993-04-13 US US08/046,548 patent/US5389922A/en not_active Expired - Lifetime
- 1993-11-29 DE DE4340591A patent/DE4340591C2/de not_active Expired - Lifetime
-
1994
- 1994-03-30 GB GB9406407A patent/GB2277179B/en not_active Expired - Lifetime
- 1994-04-13 JP JP6074739A patent/JPH07104971A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024074249A1 (de) | 2022-10-05 | 2024-04-11 | Mercedes-Benz Group AG | Verfahren zur kompression und dekompression von log-dateien und informationstechnisches system |
DE102022003682A1 (de) | 2022-10-05 | 2024-04-11 | Mercedes-Benz Group AG | Verfahren zur Kompression und Dekompression von Log-Dateien und informationstechnisches System |
Also Published As
Publication number | Publication date |
---|---|
DE4340591A1 (de) | 1994-11-17 |
GB2277179A (en) | 1994-10-19 |
GB9406407D0 (en) | 1994-05-25 |
JPH07104971A (ja) | 1995-04-21 |
US5389922A (en) | 1995-02-14 |
GB2277179B (en) | 1997-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4340591C2 (de) | Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete | |
DE68925798T2 (de) | Datenverdichtung | |
DE10301362B4 (de) | Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche | |
DE69725215T2 (de) | Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Schrifttypen | |
DE69833094T2 (de) | Verfahren und Vorrichtung zur adaptiven Datenkompression mit höherem Kompressionsgrad | |
DE69027606T2 (de) | Vorrichtung zur datenkompression | |
DE19622045C2 (de) | Datenkomprimierungs- und Datendekomprimierungsschema unter Verwendung eines Suchbaums, bei dem jeder Eintrag mit einer Zeichenkette unendlicher Länge gespeichert ist | |
DE60127695T2 (de) | Verfahren zur komprimierung von datenpaketen | |
DE60033184T2 (de) | Verfahren und Vorrichtung zur Datenkomprimierung von Netzwerkdatenpaketen unter Verwendung von paketweisen Hash Tabellen | |
DE69026924T2 (de) | Datenkomprimierungsverfahren | |
DE69834695T2 (de) | Verfahren und Vorrichtung zur Datenkompression | |
DE69024629T2 (de) | Vorrichtung zur kompression von datenlängen und datenfolgen | |
DE19742417A1 (de) | Vorrichtung und Verfahren zur Durchführung von M-fachem Maschinenendzustands-Entropiekodieren bzw. Entropiekodieren mit einer Maschine mit finitem Zustand | |
DE10196890B4 (de) | Verfahren zum Ausführen einer Huffman-Decodierung | |
EP2068448B1 (de) | Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen | |
DE69433620T2 (de) | Datenkomprimierungsverfahren | |
DE3485824T2 (de) | Verfahren zur datenkompression. | |
DE3854490T2 (de) | Dynamische Bestimmung von Multi-Mode-Kodierung für Datenkomprimierung. | |
DE69025160T2 (de) | Verfahren zur Dekodierung komprimierter Daten | |
DE69021854T2 (de) | Verfahren zur Dekomprimierung von komprimierten Daten. | |
DE69725280T2 (de) | Kompressionsgerät mit arithmetischer Kodierung unter Verwendung eines kontextualen Models, das zu variablen Musterlängen in binären Bilddaten adaptiv ist | |
DE68927331T2 (de) | Suchbaumdatenstrukturkodierung für Kettensubstitutionsdatenverdichtungssysteme | |
DE68927939T2 (de) | Monadische Kodierung vom Start-Schritt-Stop-Typ für die Datenkomprimierung | |
DE19653133C2 (de) | System und Verfahren zur pre-entropischen Codierung | |
DE69029544T2 (de) | Speicherarchitektur und Schaltung zum Hashcodieren |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), |
|
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE |
|
R071 | Expiry of right | ||
R071 | Expiry of right |