-
Querbezug zu verwandten
Anmeldungen
-
Die
U.S.-Patentanmeldung 09/264.269 von Cooper, eingereicht am 8. März 1999
unter dem Titel "Data
Compression Method And Apparatus With Embedded Run-Length Encoding".
-
Die
U.S.-Patentanmeldung 09/300.810 von Cooper, eingereicht am 27. April
1999 unter dem Titel "Data
Compression Method And Apparatus With Embedded Run-Length Encoding
Using Mathematical Run Processing" eingereicht.
-
Die
Patentanmeldungen 09/264.269 und 09/300.810 sind unter Bezugnahme
hierin eingeschlossen.
-
Hintergrund der Erfindung
-
1. Gebiet der Erfindung
-
Die
Erfindung betrifft LZW-Datenkomprimierungs- und -dekomprimierungssysteme
insbesondere in Bezug auf das Einschließen einer Lauflängencodierung
und -decodierung jeweils innerhalb der LZW-Komprimierungs- und -Dekomprimierungsverarbeitung.
-
2. Beschreibung des Standes
der Technik
-
Die
Professoren Abraham Lempel und Jacob Ziv stellten die theoretischen
Grundlagen für
LZ-Datenkomprimierungs- und -dekomprimierungssysteme bereit, die
heutzutage weitverbreitet verwendet werden. Zwei ihrer grundlegenden
Veröffentlichungen erscheinen
in der IEEE Transactions on Information Theory, IT-23-3, Mai 1977, S.
337–343
und in der IEEE Transactions on Information Theory, IT-24-5, Sept.
1978, S. 530–536.
Ein allgegenwärtig
verwendetes, als LZW bekanntes Datenkomprimierungsund -dekomprimierungssystem, übernommen
als Standard für
V.42 bis Kompressions- and Dekompressionsmodems, wird im U.S.-Patent
4.558.302 von Welch, erteilt am 10 Dezember 1985, beschrieben. LZW
wurde als der- Kompressions- und Dekompressionsstandard übernommen,
der in GIF- und TIFF-Bildkommunikationsprotokollen verwendet wird.
-
Eine
andere Art der Datenkomprimierung- und -dekomprimierung, die als
Lauflängencodierung (RLE)
bezeichnet wird, komprimiert einen sich wiederholenden Lauf von
Zeichen mittels der Bereitstellung eines komprimierten Codes, der
das Zeichen und die Länge
des Laufs anzeigt. RLE ist demnach bei der Codierung langer Strings
desselben Zeichens wirksam. Zum Beispiel ist die RLE beim Komprimieren
einer langen Sequenz an Leerstellen wirksam, die am Anfang einer
Datendatei eingeschlossen werden kann. Die RLE ist auch bei der
Bildkomprimierung effektiv, wo ein Bild einen langen Lauf an aufeinanderfolgenden
Bildpunkten enthält,
die denselben Wert haben, wie beispielsweise im Himmelsbereich eines
Land-Himmel-Bildes.
-
Im
Stand der Technik wurde die Lauflängencodierung mit LZ-Systemen kombiniert,
wie durch die folgenden U.S.-Patenten veranschaulicht wird: Patent
4.929.946 von O'Brien
et al., eingereicht am 29 Mai 1990; Patent 4.971.407 von Hoffman,
eingereicht am 20. Nov. 1990; Patent 4.988.998 von O'Brien, eingereicht
am 20. Januar 1991; Patent 5.247.638 von O'Brien et al., eingereicht am 21. Sept.
1993; Patent 5.389.922 von Seroussi et al., eingereicht am 14. Februar
1995; und Patent 5.861.827 von Welch et al., eingereicht am 19 Januar
1999.
-
In
einigen Systemen aus dem Stand der Technik wurde eine Lauflängencodierung
mit einem LZ-System kombiniert, indem die Daten an einem Lauflängencodierer
angelegt und danach die Lauflängen-codierten
Daten am LZ-basierten System angelegt werden. In einer solchen Architektur
wird ein Lauflängencodierer
an dem vorderen Ende des Kompressors verwendet, und ein Lauflängencodierer
wird an dem Ausgabeende des Dekompressors verwendet. Ein solches
System leidet unter den Nachteilen der erweiterten Ausstattung,
der Erhöhung
von Kosten, des Steuer-Aufwands und der Verarbeitungszeit. Die Patente
4.971.407 und 4.988.998 veranschaulichen ein solches System.
-
Im
dem LZW-basierten System des Patents 5.389.922 werden bestimmte
Ausgabecodes vom Kompressor unterdrückt beim Vorhandensein eines Laufs
sich wiederholender Eingabe-Datenzeichen. Eine besonderer Laufverbesserungs-Mechanismus wird
am Eingang des Dekompressors verwendet, um die fehlenden Codes wieder
zu erzeugen.
-
Im
Kompressor des Systems vom Patent 5.861.827 wird, wenn ein Teil-String
W und ein Zeichen C gefunden werden, ein neuer String mit C als ein
Erweiterungszeichen am String PW gespeichert, worin P der String
war, der im zuletzt übertragenen komprimierten
Ausgabecode befördert
wurde. Mit diesem Komprimierungsalgorithmus wird ein Lauf von Zeichen
ungeachtet seiner Länge
in zwei komprimierten Codes codiert. Der Dekompressor dieses Systems
verwendet ein besonderes, nicht erkanntes Codeverfahren, um den
Synchronismus mit dem Kompressor aufrecht zu erhalten.
-
Im
System des Patents 4.929.946 wird ein Lauf angezeigt, indem ein
Wert eines vorbestimmten Satzes an reservierten Bezugswerten, gefolgt
von einem Wiederholungszählwert
für den
Lauf, übertragen
wird. Die reservierten Bezugswerte sind so definiert, dass der Zählwert der
Bits im Wiederholungszählwert,
die dem reservierten Bezugswert folgen, reduziert wird. Das Erfordernis
der Verwendung des reservierten Bezugswertes im komprimierten Strom für jeden
Lauf der erfasst wird, neigt dazu, die Komprimierung zu reduzieren.
Zusätzlich
ist das System offensichtlich auf die Verarbeitung von relativ kleinen Lauflängen eingeschränkt. Patent
5.247.638 stellt Beschreibungen bereit, die denen des Patents 4.929.946 ähnlich sind.
-
Ein
anderes Datenkomprimierungssystem, das die Codierung der Datenzeichenläufe einschließt, ist
in der Patentanmeldung S.N. 09/264.269 offenbart. Im Kompressor
dieser Patentanmeldung werden Läufe
verarbeitet, durch das sukzessive Vorschauen in die Eingabe, um
zu bestimmen, ob im Lauf aneinander grenzende, numerisch ansteigende Segmente
existieren.
-
Wiederum
ein anderes Datenkomprimierungssystem, das die Codierung der Datenzeichenläufe beinhaltet,
wird in der Patentanmeldung S.N. 09/300.810 offenbart. Im Kompressor
dieser Patentanmeldung werden Läufe
verarbeitet, indem mathematisch aus der Länge des Laufs die jeweiligen
Ausgabecodes bestimmt werden, die den aneinander grenzenden, numerisch
ansteigenden Segmenten, die im Lauf vorliegen, entsprechen.
-
Es
ist eine Aufgabe der vorliegenden Erfindung, in einem LZW-Datenkompressions-
und -dekompressionssystem eine Lauflängencodierung und -decodierung
einzubetten, worin eine Maßnahme eingeschlossen
ist, die keine Übertragung
eines besonderen reservierten Codes benötigt, um den Dekompressor von
der Existenz des Laufs zu unterrichten. Es ist eine weitere Aufgabe
der vorliegenden Erfindung, für
die Verarbeitung von Läufen
sehr großer Länge zu sorgen.
-
Zusammenfassung der Erfindung
-
Die
vorliegende Erfindung verbessert das gut bekannte LZW-Datenkomprimierungs/dekomprimierungssystem,
indem bestimmt wird, wann ein Lauf an Eingabe-Datenzeichen erfolgt,
und indem der Laufzeichenzählwert
mit dem existierenden Codewert vom den Kompressor-Codezähler kombiniert wird,
um eine Kompressorausgabe zu erzeugen, die den Laufzählwert darstellt.
Der Dekompressor verwendet den existierenden Codewert im Dekompressor-Codezähler, um
den Laufzählwert
aus der Kompressorausgabe wieder zu gewinnen. In einem weiteren
Merkmal der vorliegenden Erfindung werden Läufe sehr großer Länge verarbeitet,
indem der Laufzählwert
durch einen ausgewählten
vorbestimmten Prozess gesenkt und der reduzierte Laufzählwert ausgegeben
wird, wobei ein reservierter Code vorausgeht, der den ausgewählten vorbestimmten
Prozess darstellt. Als Reaktion auf den empfangenen reservierten
Code wendet der Dekompressor den vorbestimmten Prozess an, der dem
empfangenen reservierten Code entspricht, um den ursprünglichen Laufzählwert wieder
zu gewinnen, indem der empfangene reduzierte Zählwert in Übereinstimmung mit dem vorbestimmten
Prozess erhöht
wird.
-
Kurze Beschreibung der
Zeichnungen
-
1 ist ein schematisches
Blockdiagramm eines Datenkompressors zur Komprimierung der Daten
in Übereinstimmung
mit der vorliegenden Erfindung.
-
2 ist ein Diagramm, das
Details für
die Zählwertsenkungstabelle
der 1 bereitstellt.
-
3 ist ein Steuerablaufdiagramm,
das die Betriebe darstellt, die vom Kompressor der 1 ausgeführt werden, um die Datenkomprimierung
in Übereinstimmung
mit der vorliegenden Erfindung durchzuführen.
-
4 ist ein Steuerablaufdiagramm,
das die im Flussdiagramm der 3 verwendete
Laufverarbeitungslogik darstellt, um die Datenkomprimierung in Übereinstimmung
mit den Merkmalen der vorliegenden Erfindung durchzuführen.
-
5 ist ein schematisches
Blockdiagramm eines in Übereinstimmung
mit der vorliegenden Erfindung verkörperten Datendekompressors
zur Wiedergewinnung der vom Kompressor der 1 komprimierten Daten.
-
6 ist ein Diagramm, das
die Details der Zählwerterhöhungstabelle
der 5 bereitstellt.
-
7 ist ein Steuerablaufdiagramm,
das die vom Dekompressor der 5 ausgeführten Betriebe darstellt,
um die Datendekompression in Übereinstimmung
mit der vorliegenden Erfindung durchzuführen.
-
8 ist ein Steuerablaufdiagramm,
das die im Flussdiagramm der 7 verwendete
Laufverarbeitungslogik darstellt, um die Datendekompression in Übereinstimmung
mit den Merkmalen der vorliegenden Erfindung durchzuführen.
-
9 ist ein Diagramm, das
durch Beispiele die Betriebe des Kompressors der 1 in Übereinstimmung
mit den Steuerablaufdiagrammen der 3 und 4 belegt.
-
10 ist ein Diagramm, das
durch Beispiele die Betriebe des Dekompressors der 5 in Übereinstimmung
mit den Steuerablaufdiagrammen der 7 und 8 belegt.
-
Beschreibung
der bevorzugten Ausführungsform
-
Nimmt
man jetzt auf 1 Bezug,
wird ein Datenkompressor 10 dargestellt, der einen Strom von
an einer Eingabe 11 angelegten Eingabe-Datenzeichen in
einen Strom von entsprechenden komprimierten Codes an einer Ausgabe 12 komprimiert.
Der Kom pressor 10 schließt Arbeitsregister ein, die
als Aktuelles-Zeichen-Register 13,
Aktuelle-Übereinstimmung-Register 14,
Codegrößen-Register 15,
Vorausschau-Puffer 16, Zählwert-Register 17,
Maxcode-Register 20, Zeichen-Temp-Register 21 und Reservierter-Code-Register 22 bezeichnet
werden. Der Kompressor 10 schließt weiterhin einen Codezähler 23 ein,
um sequentiell Codewerte zu erzeugen, die verwendet werden, um Lauf-
und Nicht-Laufzeichen in Übereinstimmung
mit der vorliegenden Erfindung auf eine zu beschreibende Weise zu
verarbeiten.
-
Der
Kompressor 10 schließt
weiterhin eine Vorausschau-Vergleichslogik 24 ein, die
die Vergleiche zwischen einem Zeichen im Aktuelles-Zeichen-Register 13 und
Zeichen im Vorausschau-Puffer 16 durchführt, um
zu bestimmen, ob ein Lauf dabei ist, auf die, weiterhin zu beschreibende
Weise zu beginnen. Der Kompressor 10 schließt weiterhin
eine Zählwertsenkungstabelle 26 für die Verwendung
in der Laufverarbeitung in Übereinstimmung
mit der vorliegenden Erfindung ein. Die Zählwertsenkungstabelle 25 sorgt
auf eine zu erläuternde
Weise für
einen Grenzwert 26. Die Details der Zählwertsenkungstabelle 25 und
des Grenzwerts 26 werden unten mit Bezug auf die 2 beschrieben.
-
Der
Kompressor 10 schließt
weiterhin eine Zählwertsenkungslogik 27 ein,
um den Zählwert
im Register 17 gemäß der Zählwertsenkungstabelle 25 auf
eine in Übereinstimmung
mit der vorliegenden Erfindung zu beschreibende Weise zu senken.
Im Kompressor 10 ist weiterhin eine Steuerung 30 eingeschlossen,
um die Betriebe des Kompressors 10 in Übereinstimmung mit den Betriebsablaufdiagrammen
der 3 und 4 auf zu beschreibende Weise
zu steuern.
-
Es
ist auch ein Wörterbuch 35 eingeschlossen,
um die Strings in Zusammenarbeit mit dem Kompressor 10 auf
eine zu beschreibende Weise zu speichern. Daten werden mithilfe
eines bi-direktionalen Datenbus 36 unter Steuerung eines
Steuerbus 37 zwischen dem Kompressor 10 und dem
Wörterbuch 35 übertragen.
-
Weiterhin
ist ein Eingabe-Zeichen-Puffer 40 eingeschlossen, der den
an der Eingabe 11 empfangenen Eingabe-Datenzeichen-Strom
puffert. Die einzelnen Eingabe-Datenzeichen werden in Übereinstimmung
mit zu beschreibenden Betrieben mithilfe eines Bus 41 vom
Eingabe-Zeichen-Puffer 40 am Aktuelles-Zeichen-Register 13,
Aktuelle-Übereinstimmung-Register 14 und
Vorausschau-Puffer 16 angelegt. Der Kompressor 10 steuert
den Erwerb der Eingabe-Datenzeichen
vom Eingabe-Zeichen-Puffer 40 über einen Steuerbus 42.
-
Kurz
zusammengefasst ist der Betrieb des Kompressors 10 wie
folgt. Eingabe-Datenzeichen werden vom Eingabe-Zeichen-Puffer 40 abgerufen und
daran eine herkömmliche
LZW-Datenkomprimierung durchgeführt,
die für
einen komprimierten Datenstrom an der Ausgabe 12 sorgt.
Auf gut bekannte Weise wird der Code-Zähler 23 progressiv
inkrementiert, um erweiterten Strings, die im Wörterbuch 35 gespeichert
sind, Codewerte zuzuordnen. Der Kompressor 10 wird hierin
in Form eines Codes veränderlicher
Länge beschrieben,
wie im Stand der Technik verständlich.
Wenn der Zählwert
im Codezähler 23 einen
Höchstzählwert erreicht,
wie er im Maxcode-Register 20 gespeichert ist, wird die
Codegröße im Register 15 inkrementiert.
Der LZW-Kompressionsalgorithmus wird detailliert im Patent 4.558.302 beschrieben.
-
Mittels
der Verwendung des Vorausschau-Puffers 16 und der Vorausschau-Vergleichslogik 24 werden
aufeinander folgende Eingabe-Zeichen untersucht, und wenn n (z.
B. n = 3) Vorausschau-Zeichen
dieselben sind wie die Zeichen im Aktuelles-Zeichen-Register 13,
schwenkt das LZW-Verfahren zur Lauflängencodierung, um den Zeichenlauf zu
verarbeiten. Der Zählwert
der Zeichen im Lauf wird mittels Verwendung des Aktuelles-Zeichen-Registers 13,
Zählwert-Registers 17 und
Zeichen-Temp-Registers 21 gezählt. Wenn der Laufzählwert im
Zählwert-Register 17 gleich
oder kleiner als die Differenz zwischen dem Maximum-Code im Maxcode-Register 20 und
dem bestehenden Code im Codezähler 23 ist,
wird die Summe des Laufzählwerts
im Zählwert-Register 17 und
dem bestehenden Code im Codezähler 23 ausgegeben.
Wenn anderenfalls der Laufzählwert
kleiner als der System-Maximum-Code ist, wird mittels Verwendung
der System-Maximum-Codegröße ein erster
reservierter Code, gefolgt von dem Laufzählwert, ausgegeben. Wenn der
Laufzählwert
größer oder
gleich als der System-Maximum-Code
ist, wird der Zählwert
durch einen ausgewählten
vorbestimmten Prozess reduziert, so dass der reduzierte Zählwert kleiner
ist als der System-Maximum-Code. Ein weiterer reservierter Code,
der dem ausgewählten
vorbestimmten Prozess entspricht, wird, gefolgt von dem gesenkten Zählwert,
ausgegeben.
-
Die
hierin beschriebene Ausführungsform dient
Erläuterungszwecken
und wird in einer ASCII-Implementierung dargestellt. Die ASCII-Umgebung
verwendet eine 8 Bit Zeichengröße, die
ein Alphabet von 256 Zeichen unterstützt. In einer Codeimplementierung
veränderlicher
Länge kann
die Codegröße bei 9
Bits anfangen und sequentiell auf 10, 11, 12, usw. jeweils an Codes
512, 1024, 2048, usw. wachsen. Für
gewöhnlich
wird in solchen Systemen eine Maximum-Codegröße von 12 mit einem Maximum-Systemcode
von 4096 verwendet.
-
In
einer solchen ASCII-Implementierung ist der Satz der reservierten
Codes vorteilhafterweise größer als
der größte Zählwert und
beginnt, wie erläutert
wird, günstigerweise
beim reservierten Code 257. In der zu beschreibenden Ausführungsform
werden fünf
reservierte Codes verwendet, am reservierten Code 261 endend. In
der ASCII-Implementierung beginnt solchermaßen der erste verfügbare Code aus
dem Codezähler 23 zur
Darstellung mehrerer Zeichen-Strings mit dem Code 262. Es wird gewürdigt sein,
dass die Ausführungsformen
ebenso auf einer Codeausgabe festgelegter Länge von beispielsweise 12 Bits
basieren können,
wie wohl bekannt ist.
-
Nimmt
man auf 2 Bezug, werden
Details der Zählwertsenkungstabelle 25 und
des Grenzwerts 26 der 1 dargestellt.
Die Zählwertsenkungstabelle 25 bestimmt
eine Mehrzahl an auswählbaren
vorbestimmten Prozessen, so dass ein Laufzählwert auf eine vorbestimmte
Weise auf einen kleineren Wert als den System-Maximum-Code gesenkt werden kann. Die
Zählwertsenkungstabelle 25 bestimmt auch
reservierte Codes, die den jeweiligen Prozessen entsprechen. Jede
der Zeilen 50–53
der Tabelle 25 bestimmt einen der Prozessoren. Zu Zwecken
der Spezifizierung ist der System-Maximum-Code 212 oder
4096. Der Prozess 50 wird z. B. für Zählwerte ausgesucht, die gleich
oder größer als
212, aber kleiner als 2 × 212 sind. Wie in der Spalte für den gesenkten
Zählwert
der Tabelle für
den Prozess 50 zu sehen, werden die Laufzählwerte
in diesem Bereich um 212 gesenkt. Der reservierte
Code für
den Prozess 50 ist 258. Aus Bequemlichkeit wird der Dezimalwert
der oberen Grenze für
jeden Zählwertbereich
in der so bezeichneten Spalte der Tabelle angegeben. Für die verwendeten
Parameter wird geschätzt
sein, dass der größte vom
System zu verarbeitende Lauf zählwert
auf Läufe
von weniger als 20480 Zeichen begrenzt ist. Es wird darüber hinaus
gewürdigt
werden, dass diese Grenze bloß durch
das Hinzufügen
weiterer Zeilen in der Tabelle erhöht wird.
-
Die
Zählwertsenkungstabelle 25 wird
für die Verwendung
in einer ASCII-Umgebung festgelegt, worin die Zeichen in 8 Bits
dargestellt sind und Zeichenwerte im Bereich von 0–255 haben.
Die reservierten Codes werden als 257–261 gewählt. Der erste verfügbare Code
zur Darstellung mehrerer Strings ist daher 262. Zu Zwecken der Spezifizierung
ist die System-Maximum-Codegröße 12 Bits,
einen System-Maximum-Code von 4096 bereitstellend. Laufzählwerte,
die kleiner als der System-Maximum-Code sind, können auf eine später zu erläuternde
Weise auf eine Art und Weise verarbeitet werden, die durch den Reservierter-Code-Wert
von 257 dargestellt wird. Die erste Zeile der Tabelle 25 bezeichnet
dieses Verhältnis.
-
Unter
anhaltendem Bezug auf die 1 verwendet
die herkömmliche
LZW-Verarbeitung das Aktuelles-Zeichen-Register 13, das
Aktuelle-Übereinstimmung-Register 14,
das Codegrößen-Register 15, den
Codezähler 23 und
das Wörterbuch 35.
Die Laufverarbeitung in Übereinstimmung
mit der vorliegenden Erfindung verwendet auch den Codezähler 23 wie
den Vorausschau-Puffer 16, das Zählwert-Register 17,
Maxcode-Register 20, Zeichen-Temp-Register 21,
reservierte Code-Register 22, die Vorausschau-Vergleichslogik 24,
die Zählwertsenkungstabelle 25,
den Grenzwert 26 und die Zählwertsenkungslogik 27.
Die Steuerablaufdiagramme der 3 und 4 veranschaulichen die vom
Kompressor 10 auszuführenden
detaillierten Betriebe. Die Steuerung 30 wird als die richtige
Schaltung wie beispielsweise Zustandsvorrichtungen enthaltend erwogen, um
die Ausführung
der Betriebe zu steuern.
-
Nimmt
man auf 3 Bezug, und
zwar mit anhaltendem Bezug auf 1,
wird der Codezähler 23 am
Block 60 am ersten verfügbaren
Code initialisiert, der den reservierten Codes folgt, die in dem Satz
für reservierten
Codes der Zählwertsenkungstabelle 25 der 2 angezeigt werden. Solchermaßen wird
der Codezähler 23 in
der dargestellten Ausführungsform
auf 262 gesetzt. An einem Block 61 wird das Codegrößen-Register 15 an
der beginnenden Codegröße, z. B.
9 Bits in der ASCII-Ausführungsform,
initialisiert. Zusätzlich
wird das Maxcode-Register 20 auf den entsprechenden Maximum-Code
für die
Codegröße gesetzt.
Wie anerkannt, ist der Maximum-Code in 9 Bits 511. Der im Block 60 angezeigte reservierte
Code und der im Block 61 angezeigte Maxcode werden in Übereinstimmung
mit der vorliegenden Erfindung auf eine zu beschreibende Weise in
der Laufverarbeitung verwendet.
-
An
einem Block 62 wird das erste Eingabe-Zeichen in das Aktuelle-Übereinstimmung-Register 14 abgerufen,
und an einem Block 63 wird das nächst folgende Zeichen in das
Aktuelles-Zeichen-Register 13 abgerufen.
Der Wert im Aktuelle-Übereinstimmung-Register 14 zusammen
mit dem nächsten
Zeichen im Aktuelles-Zeichen-Register 13 umfasst
einen zwei Zeichen-Strings, wie im Stand der Technik (z. B. s. Patent
4.558.302) sehr gewürdigt.
-
Die
Verarbeitung fährt
an einem Block 64 fort, worin das Wörterbuch 35 gesucht
wird, um zu bestimmen, ob sich der String, der die vom aktuellen Zeichen
verkettete aktuelle Übereinstimmung
umfasst, im Wörterbuch
befindet. Wörterbuch-Suchverfahren
zur Durchführung
der Funktion des Blocks 64 sind im Stand der Technik gut
bekannt (s. z. B. Patent 4.558.302 und Patent 5.861.827).
-
Wenn
am Block 64 der String im Wörterbuch 35 vorgefunden
wird, wird der JA-Zweig vom Block 64 an einen Block 65 eingeschlagen.
Am Block 65 werden die Inhalte des Aktuelle-Übereinstimmung-Registers 14 aktualisiert,
um eine Anzeige des Strings zu enthalten, der gefunden wurde. Wie
im Stand der Technik gut bekannt ist, hat ein String einen damit
verknüpften
Code, und allgemein wird der Stringcode des aktuell übereinstimmenden
Strings in das Aktuelle-Übereinstimmung-Register 14 gesetzt. Details
der spezifischen Implementierungen für die Funktion des Blocks 65 sind
gut bekannt (s. z. B. Patent 4.558.302 und Patent 5.861.827). Nach
der Aktualisierung des Aktuelle-Übereinstimmung-Registers 14 mit
dem aktuell übereinstimmenden
String kehrt die Steuerung zum Block 63 zurück, um das nächste Eingabe-Datenzeichen in das
Aktuelles-Zeichen-Register 13 abzurufen. Auf diese Weise
vergleicht die von den Blöcken 63–65 gebildete
Schleife den Eingabe-Datenzeichen-Strom mit den im Wörterbuch 35 gespeicherten
Strings, um die längste Übereinstimmung
damit zu finden.
-
Im
Block 64 wird der NEIN-Zweig vom Block 64 zu einem
Block 66 eingeschlagen, wenn die Verkettung der gerade übereinstimmenden
Strings mit dem nächsten
am Block 63 abgerufenen Zeichen zu einem erweiterten String
führt,
der sich nicht im Wörterbuch 35 befindet.
Am Block 66 wird dieser erweiterte String, der nicht im
Wörterbuch 35 gefunden wurde,
darin eingegeben, und der existierende Code des Codezählers 23 wird
diesem gespeicherten erweiterten String zugeordnet. Details der
spezifischen Implementierungen für
die Funktion des Blocks 66 sind gut bekannt (s. z. B. Patent
4.558.302).
-
Die
Verarbeitung fährt
mit einem Block 67 weiter, worin der Code im Codezähler 23 geprüft wird,
um zu bestimmen, ob eine Zunahme in der Codegröße erforderlich ist. Wenn dem
so ist, macht die Verarbeitung an einem Block 68 weiter,
wobei das Codegrößen-Register 15 um
1 inkrementiert wird. Wenn eine Erhöhung in der Codegröße benötigt wird, wird
der Wert im Maxcode-Register 20 ebenfalls in Übereinstimmung
mit der neuen Codegröße erhöht. Der
Wert Maxcode wird auf den Maximum-Code erhöht, der von den Größenbits
für den
neuen Code unterstützt
werden wird. Zum Beispiel hat eine Codegröße von 10 Bits einen Maxcode
von (210 – 1) = 1023. Der Wert im Maxcode-Register 20 wird
in der Laufverarbeitung der vorliegenden Erfindung auf eine mit
Bezug auf die 4 zu erörternde
Weise verwendet. Wenn eine Erhöhung
in der Codegröße am Block 67 nicht
erforderlich ist, wird der Block 68 umgangen, um die Verarbeitung
an einem Block 69 fortzusetzen. Am Block 69 wird
der Codezähler 23 um
1 inkrementiert.
-
Die
Verarbeitung macht an einem Block 70 weiter, wobei der
Code der aktuellen Übereinstimmung
als Teil des an der Kompres sorausgabe 12 bereitgestellten
komprimierten Codestroms ausgegeben wird. Der Code der aktuellen Übereinstimmung wird
vom Aktuelle-Übereinstimmung-Register 14 bereitgestellt.
Wenn die aktuelle Übereinstimmung
ein String mehrerer Zeichen ist, liegt der Code des Strings im Aktuelle-Übereinstimmung-Register 14 und
war die längste
im Wörterbuch 35 gefundene Übereinstimmung,
wie oben mit Bezug auf den Block 64 beschrieben. Es wird
gewürdigt
sein, dass die aktuelle Übereinstimmung,
die am Block 70 ausgegeben wird, auch ein einziges Zeichen
sein kann. Der Ausgabecode ist in diesem Fall der Wert des Zeichens.
Implementierungsdetails der Funktion des Blocks 70 sind
im Stand der Technik gut bekannt (s. z. B. Patent 4.558.302 und
Patent 5.861.827).
-
Die
Verarbeitung fährt
an einem Block 74 fort, wobei das aktuelle Zeichen im Register 13 im Vergleich
zu den nächsten
n Vorausschau-Zeichen, die dem aktuellen Zeichen folgen, geprüft wird,
um zu bestimmen, ob es dieselben sind. Dieser Prozess wird durch
die Logik 24 durchgeführt,
indem die geeigneten in den Vorausschau-Puffer 16 abgerufenen Zeichen
verwendet werden. Als Beispiel kann n für die Bequemlichkeit auf 3
gesetzt werden.
-
Am
Block 74 wird das aktuelle Zeichen mit den nächsten n
Vorausschau-Zeichen verglichen, die dem aktuellen Zeichen folgen,
um zu bestimmen, ob ein Lauf desselben Zeichens dabei ist zu beginnen. Wenn
das aktuelle Zeichen dasselbe wie die nächsten n Vorausschau-Zeichen
ist, wird der JA-Zweig des Blocks 74 zu einem Laufverarbeitungsblock 75 eingeschlagen.
Die Details des Laufverarbeitungsblocks 75 werden in 4 dargestellt.
-
Wenn
eines der n Vorausschau-Zeichen nicht mit dem aktuellen Zeichen übereinstimmt,
wird der NEIN-Zweig des Blocks 74 eingeschlagen, um die
gewöhnliche
LZW-Datenkomprimierungsverarbeitung fortzusetzen.
-
Entsprechend
macht die Verarbeitung an einem Block 76 weiter, wobei
das Aktuelle-Übereinstimmung-Register 14 auf
das Zeichen im Aktuelles-Zeichen-Register 13 gesetzt wird.
Danach wird an einem Block 77 das nächste Eingabe-Datenzeichen,
das dem gegenwärtigen
aktuellen Zeichen folgt, in das Aktuelles-Zeichen-Register 13 abgerufen.
Es wird geschätzt
sein, dass das Aktuelle-Übereinstimmung-Register 14 am
Block 76 auf das Eingabe- Datenzeichen gesetzt wird, das in der
vorherigen Verarbeitung zu einer Nicht-Übereinstimmung führte. Die
Implementierungsdetails für
die Funktion der Blöcke 76 und 77 sind
im Stand der Technik gut bekannt (s. z. B. Patent 4.558.302 und
Patent 5.861.827). Die Steuerung kehrt dann zum Block 64 zurück, um einen neuen
LZW-Datenkomprimierungszyklus mit dem aktuellen Übereinstimmungscode, der jetzt
im Aktuelle-Übereinstimmung-Register 14 liegt,
und dem aktuellen Zeichen zu starten, das jetzt im Aktuelles-Zeichen-Register 13 liegt.
-
Es
wird gewürdigt
werden, dass außer
den Blöcken 74 und 75,
der Bezug auf den Maxcode in den Blöcken 61 und 68 und
der Bezug auf die reservierten Codes im Block 60, der Rest
der 3 eine Standard-LZW-Datenkomprimierungsverarbeitung darstellt.
Solchermaßen
kann bei der Implementierung der LZW-Datenkomprimierungsaspekte
der vorliegenden Erfindung jede bekannte Implementierung einer LZW-Datenkomprimierung
verwendet werden.
-
Nimmt
man auf 4 Bezug, und
zwar mit anhaltendem Bezug auf die 1-3, werden die Details der
Laufverarbeitung des Blocks 75 der 3 dargestellt. Die Laufverarbeitung beginnt
an einem Block 80, wobei das Zeichen im Aktuelles-Zeichen-Register 13 an
der Ausgabe 12 des Kompressors 10 bereitgestellt
wird. An einem Block 81 wird der Zählwert im Zählwert-Register 17 auf
0 gesetzt. Die Verarbeitung macht mit einem Block 82 weiter, wobei
das aktuelle Zeichen im Register 13 für das Zeichen-Temp-Register 21 gesichert
wird. Danach wird an einem Block 83 das nächste Zeichen,
das dem aktuellen Zeichen folgt, an das Aktuelles-Zeichen-Register 13 abgerufen.
-
An
einem Block 84 wird das in das Aktuelles-Zeichen-Register 13 abgerufene
Zeichen mit dem vorherigen Zeichen im Zeichen-Temp-Register 21 verglichen,
um die Gleichheit dazwischen zu bestimmen. Wenn das aktuelle Zeichen
gleich dem Zeichen Temp ist, fährt
der Zeichenlauf fort, und der JA-Zweig vom Block 84 wird
eingeschlagen. Wenn das aktuelle Zeichen jedoch nicht gleich dem
Zeichen Temp ist, endete der Zeichenlauf mit dem im Aktuelles-Zeichen-Register 13 liegenden
Nicht-Übereinstimmungszeichen.
Wenn am Block 84 das Ende des Zeichenlaufs angezeigt wird,
wird der NEIN-Zweig davon eingeschlagen.
-
Der
JA-Zweig vom Block tritt in einen Block 85, worauf der
Zählwert
im Zählwert-Register 17 geprüft wird,
um zu bestimmen, wann der Zählwert, wenn
um 1 inkrementiert, kleiner als der Grenzwert 26 bliebe,
der vom Zählwertsenkungsprozess
festgelegt wird. Der Grenzwert wurde oben mit Bezug auf die 2 erörtert und ist in der beschriebenen
Implementierung gleich 20480 Zeichen. Es wird gewürdigt, dass
dieser Grenzwert spezifisch für
die Implementierung ist und nur bedeutend größer sein kann, indem weitere
Zeilen in die Zählwertsenkungstabelle 25 hinzugefügt werden,
wie oben mit Bezug auf die 2 erörtert.
-
Wenn
der Zählwert
+ 1 am Block 85 kleiner als der Grenzwert ist, fährt die
Verarbeitung mit einem Block 86 fort, wobei der Zählwert im
Zählwert-Register 17 um
1 inkrementiert wird. solchermaßen
wird der Laufzählwert
im Zählwert-Register 17 inkrementiert,
um das gerade am Block 83 abgerufene Laufzeichen zu zählen, das
mit dem Zeichen im Zeichen-Temp-Register 21 am Block 84 übereinstimmt.
Die Verarbeitung macht eine Schleife zurück zum Block 82, um
das Zählen
der Zeichen des Laufs fortzusetzen.
-
Die
Blöcke 81–86 stellen
die Logik für
das Zählen
der Zeichen des Laufs bereit. Andere Logikanordnungen können bei
der Durchführung
dieser Funktion in demselben Sinne verwendet werden.
-
Wenn
der Lauf am Block 84 endete oder wenn der nächste Zählwert größer sein
wird als der Grenzwert am Block 85, rücken die jeweiligen NEIN-Zweige
zu einem Block 90 vor. Am Block 90 wird ein Test
gemacht, um zu bestimmen, ob der Zählwert im Zählwertregister 17 gleich
oder kleiner als der Maxcode minus der Code im Codezähler 23 ist.
Der Test des Blocks 90 wird durchgeführt, um zu bestimmen, ob genügend Zählwerte
an der aktuellen Codegröße im Codezähler 23 bleiben,
damit der Zählwert
der von den Blöcken 81–86 festgelegten Laufzählwerte
aufgenommen wird. Wenn dem so ist, kann der Zählwert der Laufzählwerte
an den Dekompressor übertragen
werden, ohne irgendeinen besonderen reservierten Code zu verwenden,
um dem Dekompressor zu signalisieren, dass die Laufinformation dabei
ist, empfangen zu werden.
-
Entsprechend
wird der JA-Zweig vom Block 90 zu einem Block 91 eingeschlagen,
wobei der Zählwert
im Zählwert-Register 17 zum Code
vom Codezähler 23 hinzugefügt wird,
wobei der daraus hervorgehende Wert in das Zählwert-Register 17 gesetzt wird.
Die Verarbeitung rückt
dann zu einem Block 92 vor, worauf der Zählwert im
Zählwert-Register 17 an der
Ausgabe 12 des Kompressors 10 bereitgestellt wird.
-
Die
Verarbeitung kehrt dann zum Block 76 der 3 zurück,
um wieder in die LZW-Verarbeitungsschleife einzutreten.
-
Wenn
am Block 90 der Zählwert
größer als der
Maxcode minus dem Code im Codezähler
ist, wird der NEIN-Zweig vom Block 90 zu einem Block 93 eingeschlagen.
Der Block 93 ist der Zutritt zur Verarbeitung, die verwendet
wird, wenn der Zählwert
der Laufzählwerte
zu groß ist,
um durch die Verarbeitung der Blöcke 91 und 92 aufgenommen
zu werden. Die Verarbeitung, die dem Block 93 folgt, verwendet
die in der Zählwertsenkungstabelle 25 skizzierten
Verfahren, wie oben mit Bezug auf die 2 erörtert. In der
vom Block 93 betretenen Verarbeitung signalisiert der Kompressor 10 das
Auftreten eines Laufs, indem einer der in der Tabelle 25 aufgezeigten
reservierten Codes ausgegeben wird.
-
Entsprechend
wird am Block 93 der Zählwert geprüft, um zu
bestimmen, ob sie kleiner als der System-Maximum-Code ist. Wenn
dem so ist, rückt
die Verarbeitung auf einen Block 94 vor, an dem das Reservierter-Code-Register 22 auf
den ersten reservierten Codewert gesetzt wird. Wie oben in der ersten Zeile
der Tabelle 25 der 2 beobachtet,
ist der erste reservierte Code der dargestellten Ausführungsform
257.
-
An
einem Block 95 wird der jetzt im Reservierter-Code-Register 22 befindliche
erste reservierte Codewert an der Ausgabe 12 des Kompressors 10 bereitgestellt.
Danach wird an einem Block 96 der Zählwert vom Zählwert-Register 17 an
der Ausgabe 12 des Kompressors 10 bereitgestellt.
Der Kompressor 10 gibt diesen Zählwert aus, indem die System-Maximum-Codegröße verwendet
wird. Wie oben erörtert,
ist die maximale Codegröße für die offenbarte
Ausführungsform
12 Bits. Andere Bit- und Codegrößen können ebenfalls
bei der praktischen Anwendung der Erfindung in diesem Sinne verwendet
werden. Die Verarbeitung vom Block 96 kehrt zum Block 76 der 3 zurück, um wieder in die LZW-Verarbeitungsschleife
zu treten.
-
Wenn
am Block 93 der Zählwert
nicht kleiner ist als der System-Maximum-Code, tritt die Verarbeitung
in einen Block 97 gefolgt von einem Block 98.
An den Blöcken 97 und 98 wird
von den Prozessoren 50–53 in Übereinstimmung
mit dem Wert des Zählwerts
im Zählwert-Register 17 ein
vorbestimmter Prozess ausgewählt,
wie oben mit Bezug auf die 2 erörtert. Solchermaßen wird
am Block 97 unter Bezugnahme auf die 2 der Zählwert im Zählwert-Register 17 durch
den vorbestimmten Prozess, der so ausgewählt wird, dass der gesenkte
Zählwert kleiner
als der System-Maximum-Code ist, gesenkt. Dieser kleinere Zählwert wird
dann in das Zählwert-Register 17 gesetzt.
Wenn z. B. der Zählwert
vor der Senkung gleich oder größer als
3 × 212 und kleiner als 4 × 212 ist,
wird der Prozess 52 ausgesucht, worin der Zählwert im
Zählwert-Register 17 um
3 × 212 reduziert wird.
-
Am
Block 98 wird das Reservierter-Code-Register 22 auf
einen Reservierter-Code-Wert gesetzt, der dem ausgesuchten vorbestimmten
Prozess entspricht. Wenn der vorbestimmte Prozess 52 ausgesucht
wird, wird solchermaßen
das Reservierter-Code-Register auf 260 gesetzt.
-
Die
Verarbeitung macht dann mit den Blöcken 95 und 96 weiter,
wobei der reservierte Code vom Reservierter-Code-Register 22 und
der Zählwert vom
Zählwert-Register 17 ausgegeben
werden, um das Auftreten des in den Blöcken 97 und 98 verarbeiteten
Laufs zu signalisieren, um den Laufzählwert dafür zu übertragen. Die Verarbeitung
kehrt dann zum Block 76 der 3 zurück, um die
LZW-Datenverarbeitungsschleife neu einzugeben.
-
Es
wird in Zusammenhang mit der Verarbeitung der Blöcke 93–98 gewürdigt sein,
dass vom System der vorliegenden Erfindung sehr große Läufe verarbeitet
werden können.
Die spezifische dargestellte Ausführungsform kann mittels der
Verwendung des vorbestimmten Prozesses 53 20479 Laufzeichen
verarbeiten.
-
Nimmt
man auf 5 Bezug, und
zwar mit anhaltendem Bezug auf 1,
wird ein Datendekompressor 110 dargestellt, der einen Strom
von an einer Eingabe 111 angelegten komprimierten Codes in
einen wiedergewonnenen Strom von Datenzeichen an einer Ausgabe 112 dekomprimiert.
Es wird gewürdigt
werden, dass der komprimierte Codestrom aus der Ausgabe 12 des
Kompressors 10 (1), falls
an der Eingabe 111 des Dekompressors 110 angelegt,
zur Wiedergewinnung des an der Eingabe 11 des Kompressors 10 angelegten
ursprünglichen
Eingabe-Datenzeichen-Stroms an der Ausgabe 112 des Dekompressors 110 führt.
-
Der
Dekompressor 110 schließt Arbeitsregister ein, die
als Aktueller-Code-Register 113, Vorheriger-Code-Register 114,
Codegrößen-Register 115 und
Zählwert-Register 117 angezeigt
sind. Der Dekompressor 110 schließt weiterhin einen Codezähler 123 ein,
um sequentiell Codewerte zu erzeugen, die verwendet werden, um ankommende
komprimierte Codes auf eine zu beschreibende Weise zu verarbeiten.
Es wird geschätzt
sein, dass der Codezähler 123 ein
Lock-Step-verhältnis
mit dem Codezähler 23 des Kompressors 10 der 1 aufrechterhalten wird,
wie infolge der anschließenden
Beschreibungen gewürdigt
sein wird.
-
Der
Dekompressor 110 schließt auch eine Zählwerterhöhungstabelle 125 ein,
die bei der Verarbeitung ankommender komprimierter Codes verwendet
wird, die die Datenzeichenläufe
darstellen. Details der Zählwerterhöhungstabelle 125 werden
mit Bezug auf die 6 beschrieben.
Ebenfalls eingeschlossen ist eine Zählwerterhöhungslogik 127, die zusammen
mit der Zählwerterhöhungstabelle 125 verwendet
wird, um ankommende reduzierte Zählwerte
auf passende Laufzählwerte
wiederherzustellen. Die Zählwerterhöhungslogik 127 und
die Zählwerterhöhungstabelle 125 kehrt
die von der Zählwertsenkungslogik 27 und
der Zählwertsenkungstabelle 25 des
Kompressors 10 der 1 durchgeführte Zählwertsenkung
um.
-
Weiterhin
ist im Dekompressor 110 eine Steuerung 130 eingeschlossen,
um auf zu beschreibende Weise die Betriebe des Dekompressors 110 in Übereinstimmung
mit den Betriebsablaufdiagrammen der 7 und 8 zu steuern.
-
Ein
Wörterbuch 135 ist
für das
Speichern der Datenzeichen-Strings
eingeschlossen, die den empfangenen komprimierten Codeeingaben entsprechen.
Im Betrieb des Dekompressors 110 werden die Inhalte des
Wörterbuchs 135 identisch
mit den Inhalten des Wörterbuchs 35 des
Kompressors 10 der 1 erhalten.
Das Wörterbuch 135 wird über einen bi-direktionalen
Datenbus 136 und einen Steuerbus 137 mit dem Dekompressor 110 verbunden.
-
Mit
dem Dekompressor 110 wird ein Eingabecodepuffer 140 eingeschlossen,
der die an der Eingabe 111 empfangenen eingegebenen komprimierten
Codes puffert. Die einzelnen Eingabecodes werden vom Eingabecodepuffer 140 über einen
Bus 141 in Übereinstimmung
mit zu beschreibenden Betrieben am Aktueller-Code-Register 113 angelegt.
Der Dekompressor 110 steuert den Erwerb der vom Eingabecodepuffer 140 eingegebenen
Codes über
einen Steuerbus 142.
-
Kurz
zusammengefasst, ist der Betrieb des Dekompressors 110 wie
folgt. Ein an das Aktueller-Code-Register 113 abgerufener
Code wird untersucht, um zu bestimmen, ob er größer ist als der existierende
Code des Codezählers 123.
Falls ja, stellt der Eingabecode einen Laufzählwert dar, der wiedergewonnen
wird, indem der existierende Code im Codezähler 123 vom empfangenen
Eingabecode subtrahiert wird. Wenn der eingegebene aktuelle Code gleich
einem reservierten Code ist, wird der nächst folgende Code abgerufen,
der ein Laufzählwert
ist. Der empfangene Lauf- zählwert
wird in Übereinstimmung
mit dem Wert des besonderen reservierten Codes verarbeitet. In beiden
Fällen,
wo die eingegebenen Daten einen Zeichenlauf darstellen, wird das
Zeichen vom Vorheriger-Code-Register 114 erhalten und der
Laufzählwert
auf eine weiter zu beschreibende Weise erhalten.
-
Wenn
der eingegebene aktuelle Code gleich oder kleiner als der existierende
Code des Codezählers 123 ist,
wird die Standard-LZW-Datendekompression durchgeführt, um
den Datenzeichen-String wieder
zu gewinnen, der dem eingegebenen aktuellen Code entspricht. Erweiterte
Strings werden auf eine im Stand der Technik der LZW-Datendekompression
gut verstandene Weise im Wörterbuch 135 gespeichert.
-
Nimmt
man auf die 6 Bezug,
und zwar mit anhaltendem Bezug auf die 5, werden Details der Zählwerterhöhungstabelle 125 dargestellt. Wie
in den Zeilen 150–153
angezeigt, wird der Laufzählwert
von einem durch den Dekompressor 110 empfangenen Eingabecode
wiedergewonnen, indem die dargestellten Werte in Übereinstimmung
mit dem jeweiligen empfangenen reservierten Code wie dargestellt
zum empfangenen Code addiert werden. Genauer erläutert, weisen die Zeilen 150–153 der
Tabelle 125 darauf hin, dass jeweils auf die Reaktion des Empfangens
der reservierten Codes 258–261
der Zählwert
jeweils um 212, 2 × 212,
3 × 212 oder 4 × 212 erhöht wird.
Als Reaktion auf den reservierten Code 257 wird der empfangene Zählwert direkt
ohne Erhöhung
verwendet, wie weiter erläutert
sein wird. Die erste Zeile der Tabelle 125 stellt dieses
Verhältnis dar.
-
Die
Steuerablaufdiagramme der 7 und 8 veranschaulichen die vom
Dekompressor 110 auszuführenden
detaillierten Betriebe. Die Steuerung 130 wird als die
richtige Schaltung wie beispielsweise die Zustandsvorrichtungen
enthaltend angesehen, um die Ausführung der Betriebe zu steuern.
-
Nimmt
man auf die 7 Bezug,
und zwar mit anhaltendem Bezug auf die 5 und 6,
wird an einem Block 160 der Codezähler 123 auf dieselbe Weise
wie oben mit Bezug auf den Block 60 der 3 initialisiert. An einem Block 161 wird
das Codegrößen-Register 115 auf
der beginnenden Codegröße initialisiert,
wie oben mit Bezug auf den Block 61 der 3 erläutert.
-
An
einem Block 162 wird der erste oder der nächste eingegebene
komprimierte Code an das Aktueller-Code-Register 113 abgerufen.
Wenn die Steuerung vom Block 161 auf den Block 162 vorrückt, wird
der Code, der abgerufen wird, der erste Code sein. Wenn die Steuerung über den
dargestellten Rücksprungpfad
von der Laufverarbeitung in den Block 162 tritt, wird der
Code, der abgerufen wird, eher der nächste Code als der erste Code
sein.
-
An
einem Block 163 stellt der Dekompressor 110 an
seiner Ausgabe 112 den String der Datenzeichen bereit,
die dem in das Aktueller-Code-Register 113 abgerufenen
komprimierten Code entsprechen. Die Datenzeichen-String-Wiedergewinnung
von einem eingegebenen komprimierten Code mittels Verwendung des
Wörterbuchs 135 ist
im Stand der Technik der LZW-Datendekompression gut bekannt. Zahlreiche
spezifische Implementierungen sind für die Funktion des Blocks 163 gut
bekannt (s. z. B. Patent 4.558.302).
-
Es
wird geschätzt
sein, dass der an das Aktueller-Code-Register 113 abgerufene Code
entweder einen Einzelzeichen-String oder einen Mehrfachzeichen-String
darstellen kann. Wie gut bekannt, werden solche Strings durch den
Wert des Codes von einander unterschieden. Im Allgemeinen werden Mehrfachzeichen-Strings durch Codes
dargestellt, die gleich oder größer als
der oben mit Bezug auf den Block 160 erörterte erste erhältliche
Code sind. Die Codes für
Einzel-Strings haben allgemein Werte, die wie ein einzelnes Zeichen
sind bzw. es darstellen, und haben daher Werte, die kleiner sind
als der erste erhältliche
Code.
-
An
einem Block 164 wird der Code im Aktueller-Code-Register 113 an
das Vorheriger-Code-Register 114 überführt. An einem Block 165 wird
der nächste
eingegebene komprimierte Code an das Aktueller-Code-Register 113 abgerufen.
-
An
einem Block 166 wird der Code im Aktueller-Code-Register 113 geprüft, um zu
bestimmen, ob er gleich einem reservierten Code ist. In der dargestellten
Ausführungsform
sind die reservierten Codes 257–261,
wie in der Zählwerterhöhungstabelle 125 der 6 angezeigt. Wenn der aktuelle
Code nicht gleich einem reservierten Code ist, wird der NEIN-Zweig
vom Block 166 zu einem Block 167 eingeschlagen.
Am Block 167 wird der Code im Aktueller-Code-Register 113 geprüft, um zu
bestimmen, ob er größer ist
als der existierende Code im Codezähler 123. Wenn der
aktuelle Code nicht größer ist
als der Codezähler,
wird der NEIN-Zweig vom Block 167 zu einem Block 169 eingeschlagen.
-
Wenn
jedoch der aktuelle Code gleich einem reservierten Code ist, wird
der JA-Zweig vom Block 166 an einen Laufverarbeitungsblock 168 eingeschlagen. Ähnlich wird,
wenn der aktuelle Code größer ist
als der Codezähler,
der JA-Zweig vom Block 167 zum Laufverarbeitungsblock 168 eingeschlagen. Die
Details der Dekompressions-Laufverarbeitung werden mit Bezug auf
die 8 beschrieben, Nachdem
der Code oder die Codes für
einen Lauf verarbeitet wurden und der Lauf wiedergewonnen wurde, kehrt
die Steuerung zum Block 162 zurück.
-
An
einem Block 169 wird der Code im Aktueller-Code-Register 113 geprüft, um zu
bestimmen, ob er gleich oder kleiner als der existierende Code des
Codezählers 123 ist.
(Nur die "kleiner
als"-Prüfung wird
aufgrund der vorherigen Prüfungen
der Blöcke 166 und 167 verwendet).
Wenn der aktuelle Code kleiner ist als der Codezähler, wird der JA-Zweig vom
Block 169 zu einer Sequenz der Blöcke 180–185 eingeschlagen. Wenn
der aktuelle Code gleich dem Codezähler ist, wird der NEIN-Zweig
vom Block 169 zu einer Sequenz der Blöcke 190 und 191 eingeschlagen.
Es wird gewürdigt
sein, dass die Blöcke 180–185 eine
gut bekannte herkömmliche LZW-Datendekompressionsverarbeitung
darstellen, und dass die Blöcke 190 und 191 den
gut bekannten Ausnahmefall der LZW-Datendekompressionsverarbeitung
(s. z. B. Patent 4.558.302) darstellen.
-
Am
Block 180 wird der Datenzeichen-String, der dem Code im
Aktueller-Code-Register 113 entspricht, durch den Dekompressor 110 an
seiner Ausgabe 112 bereitgestellt.
-
Am
Block 181 wird das Wörterbuch 135 aktualisiert,
indem ein erweiterter String gespeichert wird, der den String umfasst,
der dem Code im Vorheriger-Code-Register 114 entspricht,
der durch das erste Zeichen des Strings erweitert wird, das dem
Code im Aktueller-Code-Register 123 entspricht. Dieser gespeicherte
erweiterte String wird dem Zeichencodewert des existierenden Codes
des Codezählers 123 zugeordnet.
In den herkömmlichen
LZW-Implementierungen
wird der Code im Vorheriger-Code-Register 114 zusammen
mit dem Erweiterungszeichen an einer Stelle im Wörterbuch 135 gespeichert,
die durch den vom Codezähler 123 zugeordneten
Code bestimmt wird.
-
An
den Blöcken 182–184 wird
der Codezähler 123 um
1 vorgerückt
und, falls nötig,
eine Codegrößen-Inkrementierung
durchgeführt.
Wenn keine Codegrößen-Inkrementierung
benötigt
wird, führt
die Prüfung
des Blocks 182 zur Umgehung des Codegrößen-Inkrementierungsblocks 183.
Das Codegrößen-Register 115 wird
in diesem Prozess verwendet. Die Inkrementierung des Codezählers 123 auf
den nächsten
Code wird am Block 184 durchgeführt.
-
Am
Block 185 wird der Code im Aktueller-Code-Register 113 an
das Vorheriger-Code-Register 114 überführt. In der herkömmlichen
LZW-Datendekomprimierung wird der in das Vorheriger-Code-Register 114 am
Block 185 gesetzte vorherige Code im anschließenden LZW-Datendekompressionszyklus in
der Wörterbuch-Aktualisierungsfunktion
des Blocks 181 verwendet. In der Laufverarbeitung der vorliegenden
Erfindung wird dieser vorherige Code verwendet, um das Laufzeichen
auf eine mit Bezug auf die 8 zu
erläuternde
Weise zu bestimmen. Die Steuerung vom Block 185 wird an
den Block 165 zurückgeführt.
-
Wenn
die LZW-Ausnahmefall-Verarbeitung benötigt wird, wird der NEIN-Zweig
vom Block 169 zum Block 190 eingeschlagen, wobei
der dem Code im Vorheriger-Code-Register 114 entsprechende String
durch das erste Zeichen dieses Strings erweitert und an der Ausgabe 112 des
Dekompressors 110 bereitgestellt wird. Am Block 191 wird
dieser erweiterte String des Blocks 190 mit einem zugeordneten Code
des Codes im Codezähler 123 im
Wörterbuch 135 gespeichert.
Die Steuerung fährt
dann mit dem Block 182 fort, wie zuvor beschrieben.
-
Die
Blöcke 160–165, 169, 180–185 und 190–191 der 7 umfassen die von einem
herkömmlichen
LZW-Datendekompressor durchgeführte
Verarbeitung. Zahlreiche Implementierungen sind für die Durchführung der
Funktionen dieser Blöcke bekannt
(s. z. B. Patent 4.558.302).
-
Die
Blöcke 166–168 umfassen
die Dekompressionslaufverarbeitung in Übereinstimmung mit der vorliegenden
Erfindung, die in einem herkömmlichen LZW-Dekompressor
eingebettet ist.
-
In
der 7 wird gewürdigt werden,
dass die herkömmliche
LZW-Verarbeitung der Blöcke 180–185 und 190–191 die
Verarbeitung zum Block 165 zurückgeben, um den nächsten Code
an das Aktueller-Code-Register 113 abzurufen. Im Unterschied dazu
gibt die Laufverarbeitung des Blocks 168 die Verarbeitung
an den Block 162 zurück.
Dies geschieht, um auf wirkungsvolle Weise das Vorheriger-Code-Register 114 am
Block 164 neu zu initialisieren, nachdem ein Lauf verarbeitet
wurde, so dass der Dekompressor 110 fortfährt, mit
der Ausgabe vom Kompressor 10 synchronisiert zu bleiben.
-
Nimmt
man auf die 8 Bezug,
und zwar mit anhaltendem Bezug auf die 5–7, werden Details des Laufverarbeitungsblocks 168 der 7 dargestellt. Falls, wie
oben mit Bezug auf die Blöcke 166 und 167 der 7 erörtert, der Code im Aktueller-Code-Register 113 nicht
gleich einem reservierten Code, aber größer als der existierende Code
im Codezähler 123 ist,
geht die Steuerung vom Block 167 der 7 über
auf einen Block 200 der 8. Am
Block 200 wird der im Codezähler 123 existierende
Code vom Code im Aktueller-Code-Register 113 sub trahiert
und das Ergebnis in den Zählwert-Register 117 gesetzt.
An einem Block 201 stellt der Dekompressor 110 an
seiner Ausgabe 112 wiederholt einige Male das im Vorheriger-Code-Register
liegende Zeichen bereit, und zwar so oft wie der Zählwert im
Zählwert-Register 117.
Auf diese Weise gewinnt der Dekompressor 110 den Datenzeichenlauf
zurück,
der vom Kompressor 10 komprimiert wurde. Die Steuerung
kehrt dann zum Block 162 der 7 zurück.
-
Wenn
der Eingabecode im Aktueller-Code-Register 113 gleich einem
in der Zählwerterhöhungstabelle 125 der 6 angezeigten reservierten Code
ist, geht die Steuerung vom Block 166 der 7 auf einen Block 202 der 8 über. Am Block 202 wird
der nächste
Eingabecode mittels Verwendung der System-Maximum-Codegröße an das
Zählwert-Register 117 abgerufen.
An einem Block 203 wird eine Prüfung ausgeführt, um zu bestimmen, ob der
aktuelle Code gleich dem ersten Reservierter-Code-Wert ist. Für die beschriebene
Ausführungsform
ist der erste reservierte Code, wie in der 6 angezeigt, 257. Wenn am Block 203 der
aktuelle Code gleich dem ersten reservierten Code ist, geht die
Steuerung auf den Block 201 über, und der dazugehörige Datenzeichenlauf
wird wie zuvor beschrieben wiedergewonnen.
-
Wenn
jedoch am Block 203 der aktuelle Code nicht gleich mit
dem ersten reservierten Code ist, geht die Steuerung auf einen Block 204 über, wobei
der Zählwert
im Zählwert-Register 117 durch
den ausgesuchten vorbestimmten Prozess, der dem Reservierter-Code-Wert
im Aktueller-Code-Register 113 entspricht, erhöht wird.
Wie zuvor beschrieben, veranschaulicht die Zählwerterhöhungstabelle 125, wie
in der 6 detailliert
dargelegt, die spezifischen vorbestimmten Prozesse 150–153,
die jeweils den reservierten Codes 258–261 entsprechen. Abhängig vom
reservierten Code, der empfangen wird, wird der Zählwert wie
dargestellt erhöht.
Danach fährt
die Verarbeitung, wie zuvor beschrieben, mit dem Block 201 fort,
um den dazugehörigen
Datenzeichenlauf wieder zu gewinnen.
-
Es
wird, wie zuvor beschrieben, gewürdigt sein,
dass für
die dargestellte Ausführungsform
ein Lauf von 20479 Zeichen aufgenommen werden kann. Längere Läufe können auf
einfache Weise vom Dekompressor 110 aufgenommen werden,
indem weitere Zeilen in die Zählwerterhöhungstabelle 125 der 6 gefügt werden. Natürlich würden weitere Zeilen,
wie zuvor erläutert,
in die Zählwertsenkungstabelle 25 der 2 gefügt werden.
-
Es
wird geschätzt
sein, dass die Funktion der Blöcke 200, 203 und 204 der 8 durch die Zählwerterhöhungslogik 127 der 5 durchgeführt wird, indem
das Zählwert–Register 117,
der Codezähler 123 und
die Zählwerterhöhungstabelle 125 der 5 verwendet werden.
-
In
der gesamten oben beschriebenen Laufverarbeitung wird geschätzt sein,
dass das Laufzeichen am Kompressorblock 80 der 4 übertragen wird und am Dekompressor
als Ergebnis der Verarbeitung des Blocks 185 der 7 vorteilhafterweise im
Vorheriger–Code–Register 114 liegt.
-
Unter
anhaltender Bezugnahme auf die 2, 4, 6, 7 und 8 wird gewürdigt sein,
dass, ganz gleich welche Laufverarbeitung durch den Kompressor angelegt
wird (2 und 4), sie von der Dekompressor–Laufverarbeitung
umgekehrt wird (6 und 8), so dass die ursprünglichen
Laufeingabedaten wiedergewonnen werden.
-
Die
Kompressorverarbeitung der Blöcke 90–92 der 4 wird durch die Blöcke 167, 200 und 201 der 7 und 8 umgekehrt. Unter diesem Aspekt der
Erfindung wird der Zählwert
des Laufs durch die Verarbeitung der Blöcke 91 und 92 übertragen. Die
Summe des Laufzählwerts
und des existierenden Codes des Kompressor-Codezählers wird am Block 92 ausgegeben,
und am Block 200 der Dekompressorverarbeitung wird der
existierende Wert des Dekompressor-Codezählers vom empfangenen Code subtrahiert,
um den Laufzählwert
wieder zu gewinnen. Der Dekompressor erkennt diese Zeichenlaufbedingung,
indem er am Block 167 erfasst, dass der empfangene Code
größer ist
als der existierende Code des Dekompressor-Codezählers. Mittels Verwendung dieser
Verarbeitung der vorliegenden Erfindung ist es nicht erforderlich,
einen reservierten Code vom Kompressor an den Dekompressor zu übertragen,
um das Vorliegen des Laufs zu signalisieren.
-
Die
Kompressorverarbeitung der Blöcke 93–96 der 4 wird durch die Dekompressorblöcke 166 und 201–203 der 7 und 8 umgekehrt. In diesem Fall wird der
reservierte Codewert verwendet, um dem Dekompressor die besondere
Verarbeitung zu signalisieren. Der reservierte Codewert von 257 wird
in der oben beschriebenen Ausführungsform verwendet.
In dieser Verarbeitung wird der Laufzählwert durch den Kompressor
im Anschluss an diesen ersten reservierten Code übertragen. Der Dekompressor
verwendet den empfangenen Laufzählwert, nachdem
er diesen ersten reservierten Code empfängt, um den Zeichenlauf wieder
zu gewinnen.
-
Die
Kompressor-Laufverarbeitung der Blöcke 93, 97, 98, 95 und 96 der 4 wird durch die Dekompressorverarbeitung
der Blöcke 166 und 201–204 umgekehrt.
In der Kompressorverarbeitung der Blöcke 97 und 98 wird
der Laufzählwert
durch einen ausgesuchten vorbestimmten Prozess gesenkt, so dass
der Zählwert
kleiner ist als der System-Maximum-Code, und ein reservierter Code
wird verwendet, der dem ausgesuchten vorbestimmten Prozess entspricht.
Die Dekompressorverarbeitung erkennt den reservierten Code und erhöht durch
die Verwendung der Umkehr des ausgesuchten vorbestimmten Prozesses
der empfangene Zählwert
auf den ursprünglichen
Laufzählwert,
um das ursprüngliche Laufzeichen
wieder zu gewinnen. Die Kompressor-vorbestimmten Prozesse 50–53 der 2 entsprechen jeweils den
Dekompressor-vorbestimmten Prozessen 150–153 der 6. Es wird beobachtet, dass die Dekompressor-vorbestimmten
Prozesse der 6 die Umkehrungen
der Kompressor-vorbestimmten Prozesse der 2 sind.
-
Die
oben beschriebenen Ausführungsformen der
Erfindung werden in Form einer Länge
von veränderlichen
Codes dargestellt. Es wird geschätzt
sein, dass die obigen Ausführungsformen
mit einigen sofort ersichtlichen Modifikationen in einer Umgebung fester
Codelänge
verwendet werden können.
Es kann z. B. eine Ausführungsform
fester Codelänge eine
feste Codegröße von 12
Bits verwenden. In dieser Konfiguration wäre der maximale Systemcode 4096.
-
In
einer Ausführungsform
fester Codelänge würden die
Codegrößen-Register 15 und 115 der 1 und 5 nicht verwendet werden. Ähnlich würden die
Codegrößeninitialisierung,
die Prüfung
und Inkrementierung der Blöcke 61, 67 und 68 der 3 sowie die entsprechenden
Blöcke 161, 182 und 183 der 7 nicht benötigt werden.
In einer solchen Ausführungsform
wäre der
Maxcode fest und gleich dem festen System-Maximum-Code, z. B. 4096.
Die Logik der 3, 4, 7 und 8 würde dann
dieselbe bleiben, wenn man davon absieht, dass der System-Maximum-Code
und die System-Maximum-Codegröße wie erörtert feste
Werte wären.
-
Nimmt
man auf die 9 Bezug,
und zwar mit anhaltendem Bezug auf die 1–4, wird ein Beispiel des
Betriebs vom Kompressor 10 in Übereinstimmung mit den Flussdiagrammen
der 3 und 4 dargestellt. Oben in der
Figur wird ein Eingabe-Datenzeichen-Strom
gezeigt, worin sequentielle Zeichen durch die Zeichensequenznummern
gekennzeichnet sind. Dies wird getan, um das Nachvollziehen der
Entwicklung der Zeichen in den Schritten des Beispiels zu erleichtern.
Es wird geschätzt
sein, dass die Sequenznummern zum Zwecke der Zeichenidentifizierung
gezeigt werden und nicht im eigentlichen Datenzeichen-Strom erscheinen.
-
Das
Beispiel ist weitestgehend selbsterläuternd, wobei die durchgeführten Aktionen
in der linken Spalte skizziert sind und die Blöcke der 3 und 4,
die an den Aktionen teilnehmen, in der rechten Spalte gekennzeichnet
sind. Es wird angemerkt, dass der Lauf des Zeichens "a" 47 Zeichen lang ist und der Lauf des
Zeichens "c" 15000 Zeichen lang ist.
-
In
den Aktionen 1–8
wird die Standard-LZW-Datenkomprimierung mittels des Zeichens "a(5)" an den Eingabe-Datenzeichen
durchgeführt. Mehrere
LZW-Kompressionszyklen werden durchgeführt, und in jedem Zyklus wird
der Block 74, wie in der rechten Spalte angemerkt, zur
Prüfung
eines Zeichenlaufs durchgelaufen. In Zusammenhang mit dem in der
Verarbeitung positionierten Block 74, wie in der 3 dargestellt, werden alle
Strings, die im Wörterbuch
existieren, vor dem Abrufen der Laufverarbeitung am Block 74 im
Block 64 in Übereinstimmung
gebracht. Daher erhält
die LZW-Verarbeitung die Priorität
gegenüber
der Laufverarbeitung.
-
In
der Aktion 8 erkennt der Block 74 der 3, dass das aktuelle Zeichen "a(5)" dasselbe ist wie
die nächsten
n Vorausschau-Zeichen, wie im Eingabe-Datenzeichen-Strom oben in
der Figur beobachtet. Die Steuerung rückt dann für die Laufverar beitung zum
Block 75 vor. Es wird geschätzt sein, dass das Zeichen "a(4)" bei Aktion 6 in
der LZW-Verarbeitung absorbiert wurde, selbst wenn der dargestellte
Lauf des Zeichens "a" mit "a (4)" beginnt.
-
In
der Aktion 9 wird das Zeichen "a(5)" gemäß Block 80 der 4 ausgegeben, und die Laufzählung beginnt
mit dem Zeichen "(6)". Die sich aus den
Blöcken 82–86 der 4 zusammensetzende Schleife
zählt die
Zeichen, und bei Aktion 12 wird das Nicht-Übereinstimmungszeichen "c(1)" abgerufen, wobei
so der Zählwert
bei 45 stoppt, wie dargestellt. In Aktion 12 bestimmt der Block
der 4, dass der Zählwert 45
im Zählwert-Register 17 der 1 kleiner ist als die Differenz
zwischen dem Maxcode und dem Code von 266 im Codezähler 23.
-
In
der Aktion 13 addieren die Blöcke 91 und 92 der 4 den Codezählerwert
von 266 mit dem Zählwert
von 45, um einen Zählwert
von 311 bereitzustellen, der ausgegeben wird. Die Steuerung kehrt dann
zum Block 76 der 3 zurück, um die LZW-Verarbeitung wieder
aufzunehmen, worin das nächste
Zeichen "c (2)" abgerufen und das
Wörterbuch,
wie dargestellt, aktualisiert wird.
-
In
den Aktionen 14–18
wird der 15000 Zeichenlauf des Datenzeichen-S "c" verarbeitet.
In Aktion 18 leiten die Blöcke 90 und 93 der 4 die Verarbeitung an die
Blöcke 97 und 98 davon.
In Aktion 19 wird der Zählwert
von 14998 auf einen Zählwert von
2710 reduziert, indem der Prozess 52 der 2 verwendet wird. Der entsprechende reservierte
Code von 260 wird, wie dargestellt, in das Reservierter-Code-Register 22 der 1 gesetzt. Dieser Code wird dann
am Block 95 der 4 ausgegeben,
wie bei Aktion 19 gezeigt, gefolgt von dem gesenkten Zählwert 2710
bei Aktion 20. Der Block 96 der 4 stellt die Ausgabe der Zählwert dar.
-
In
den Aktionen 20–22
kehrt die Verarbeitung zur LZW-Datenkomprimierung
am Block 76 der 3 zurück.
-
Detailliertere
Beschreibungen der Aktionen der 9 in
Bezug auf die Blöcke
der 3 und 4 sind ohne weiteres ersichtlich
und werden um der Kürze
willen nicht bereitgestellt.
-
Nimmt
man auf 10 Bezug, und
zwar mit anhaltendem Bezug auf die 5, 6, 7 und 8,
wird ein Beispiel für
den Betrieb des Dekompressors 110 in Übereinstimmung mit den Flussdiagrammen
der 7 und 8 dargestellt. Das Format
der 10 gleicht allgemein
dem der 9, und die oben
mit Bezug auf die 9 abgegebenen
Beschreibungen sind anwendbar. Der eingegebene komprimierte Codestrom
oben in der 10 ist die
in der 9 dargestellte
Kompressorausgabe. Es wird beobachtet, dass die Ausgabe der 10 der oben in der 9 dargestellte wiedergewonnene
Datenzeichen-Strom ist.
-
In
den Aktionen 1–5
wird die herkömmliche LZW-Dekompression
durchgeführt,
indem der ursprüngliche
Datenzeichen-Strom durch Zeichen "a(5)" wiedergewonnen
wird. Es wird angemerkt, dass die LZW-Ausnahmefall-Verarbeitung
bei Aktion 4 durchgeführt
wird, wo der empfangene aktuelle Code gleich dem Dekompressor-Codezähler ist (NEIN-Zweig
des Block 169 der 7).
-
Bei
der Aktion 6 wird der Lauf des Zeichens "a" als
Reaktion auf das Empfangen des Codes 311 verarbeitet. In
diesem Fall ist der empfangene komprimierte Code größer als
der Wert 266 im Dekompressor-Codezähler. Der Block 167 der 7 führt die Verarbeitung an die
Blöcke 200 und 201 der 8, um die Wiedergewinnung
der Laufzeichen durchzuführen.
In den Aktionen 7 und 8 kehrt die Steuerung zur LZW-Verarbeitung
am Block 162 der 7 zurück, um den
Beginn des Laufs des Zeichens "c" zu erfassen.
-
In
den Aktionen 9 und 10 wird der Lauf des Zeichens "c" verarbeitet. In der Aktion 9 wird der
reservierte Code 260, wie am Block 166 der 7 erfasst, empfangen, und die Laufverarbeitung
der Blöcke 201–204 der 8 wird abgerufen. In Aktion
9 wird der Zählwert
2710 empfangen, und in Aktion 10 wird sie in den Laufzählwert von
14998 konvertiert. Die Konvertierung wird am Block 204 der 8 durchgeführt, indem
der Prozess 152 der 6 verwendet
wird.
-
In
den Aktionen 11–13
decodiert die herkömmliche
LZW-Dekompression
den verbliebenen eingegebenen komprimierten Codestrom.
-
Detailliertere
Beschreibungen der Aktionen der 10 in
Bezug auf die Blöcke
der 7 und 8 sind ohne weiters ersichtlich
und werden um der Kürze
willen nicht bereitgestellt.
-
Wie
aus der 3 gewürdigt, wird
die Lauferfassung des Blocks 74 und die Laufverarbeitung des
Blocks 75 an dem Punkt im LZW-Zyklus in den LZW-Datenkomprimierungszyklus
zwischengeschaltet, wo die längste Übereinstimmung
ausgegeben wurde, das Wörterbuch
mit dem erweiterten String aktualisiert wurde und das Zeichen, das
die Nicht-Übereinstimmung
bewirkte, abgerufen wurde und im Aktuelles-Zeichen-Register liegt.
Auf diese Weise wird in Bezug auf den bereits im Wörterbuch gespeicherten
String ein vollständiger
Kompressions-Vorteil erzielt. Wenn das Nicht-Übereinstimmungszeichen einen
Lauf beginnen sollte, wird dieses Zeichen am Block 80 der 4 ausgegeben, was dem Dekompressor-Wörterbuch erlaubt, denselben
erweiterten String, wie im Kompressor-Wörterbuch gespeichert, zu speichern.
Wenn die Laufverarbeitung der 4 abgeschlossen
ist, befindet sich das dem Lauf folgende Nicht-Übereinstimmungszeichen im Aktuelles-Zeichen-Register
und ist dann am Block der 3 erhältlich,
um die LZW-Verarbeitung von diesem Punkt aus fortzusetzen. Solchermaßen empfängt das
im LZW-Prozess verwendete Aktuelle-Übereinstimmung-Register am
Block 76 der 3 das
Nicht-Übereinstimmungszeichen
aus der LZW-Verarbeitung der Blöcke 60–70 oder
vom Laufverarbeitungsblock 75.
-
Es
wird gewürdigt
sein, dass die vorbestimmten Prozesse der 2 und 6 die
Subtraktion und Addition verwenden, um der Zählwert jeweils zu senken oder
zu erhöhen.
Andere Verfahren können
im Zusammenhang mit der vorliegenden Erfindung verwendet werden,
um lange Läufe
zu verarbeiten. Zum Beispiel können
andere mathematische Verfahren mit größeren Zählwertsenkungs- und -erhöhungsfähigkeiten
als die Subtraktion und Addition verwendet werden. Die Multiplikations-,
Divisions-, Potenzierungs- und Hashing-Technik können benutzt werden, um diese
Fähigkeit
bereitzustellen.
-
Es
ist klar, dass die im Kompressor 10 und Dekompressor 110 verwendeten
Protokolle in Bezug aufeinander kompatibel sein sollten. Der Kompressor und
der Dekompressor sollten mit derselben Alphabetgröße und denselben
anfänglichen
Bedingungen wie der Codegröße arbeiten.
Die oben beschriebene Kompressor- und Dekompressorausführungsform kann
ohne weiteres mit Wörterbüchern verwendet werden,
die entweder nicht initialisiert oder mit allen Einzelzeichen-Strings
initialisiert werden. Wie oben beschrieben, können einzelne Zeichen von den
komprimierten Codes über
die jeweiligen Codes davon unterschieden werden. Die einzelnen Zeichen
können
durch die Werte der Zeichen selbst oder durch irgendein anderes
gut bekanntes Codierungsschema dargestellt werden. Das Einzelzeichen-Protokoll,
das im Kompressor verwendet wird, sollte auch im Dekompressor verwendet
werden.
-
Es
wird geschätzt
sein, dass die Eingabe an den Kompressor in einem Alphabet irgendeiner
beliebigen Größe erfolgen
kann, das irgendeine entsprechende Zeichenbitgröße hat. Zum Beispiel können die
Datenzeichen textlich beispielsweise ASCII-Zeichen sein, und zwar
in einem Alphabet wie beispielsweise dem 256 Zeichen ASCII-Alphabet
von 8-Bit Zeichen. Die Eingabedaten können auch Binärzeichen
im Zwei-Zeichen Binäralphabet
1 und 0 sein, das ein 1 Bit großes
Zeichen hat. Es wird geschätzt sein,
dass die Textdaten auch im Zwei-Zeichen-Alphabet der zugrunde liegenden
Binärdaten
komprimiert werden können.
-
Es
wird geschätzt
sein, dass die oben beschriebene Ausführungsform der Erfindung in
Hardware, Firmware, Software oder einer Kombination davon implementiert
sein kann. Diskrete Schaltkomponenten können ohne weiteres für die Durchführung der
verschiedenen beschriebenen Funktionen implementiert werden. In
einer Software-Ausführungsform können passende
Module, die mit der von den oben beschriebenen Flussdiagrammen erzeugten
Codierung ohne weiteres programmiert werden, verwendet werden.
-
Obwohl
die Erfindung in ihren bevorzugten Ausführungsformen beschrieben wurde,
sollte es klar sein, dass die Worte, die verwendet wurden, beschreibende
Worte und nicht einschränkende
Worte sind, und dass Änderungen
innerhalb des Schutzbereichs der anliegenden Ansprüche vorgenommen werden
können,
ohne sich vom Schutzumfang, wie in den anliegenden Ansprüchen definiert,
zu lösen.
-
Wenn
technische Merkmale in den Ansprüchen
mit Bezugszeichen versehen sind, so sind diese Bezugszeichen lediglich
zum besseren Verständnis der
Ansprüche
vorhanden. Dementsprechend stellen solche Bezugszeichen keine Einschränkungen
des Schutzumfangs solcher Elemente dar, die nur exemplarisch durch
solche Bezugszeichen gekennzeichnet sind.