DE60002218T2 - Lzw datenkomprimierungsgerät und -verfahren, mit anwendung von mathematischer vorhersage von lauflängenverarbeitung - Google Patents

Lzw datenkomprimierungsgerät und -verfahren, mit anwendung von mathematischer vorhersage von lauflängenverarbeitung Download PDF

Info

Publication number
DE60002218T2
DE60002218T2 DE60002218T DE60002218T DE60002218T2 DE 60002218 T2 DE60002218 T2 DE 60002218T2 DE 60002218 T DE60002218 T DE 60002218T DE 60002218 T DE60002218 T DE 60002218T DE 60002218 T2 DE60002218 T2 DE 60002218T2
Authority
DE
Germany
Prior art keywords
code
run
data
code counter
characters
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
Application number
DE60002218T
Other languages
English (en)
Other versions
DE60002218D1 (de
Inventor
B. Albert COOPER
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Unisys Corp
Original Assignee
Unisys Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Unisys Corp filed Critical Unisys Corp
Publication of DE60002218D1 publication Critical patent/DE60002218D1/de
Application granted granted Critical
Publication of DE60002218T2 publication Critical patent/DE60002218T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; 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

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)

Description

  • HINTERGRUND DER ERFINDUNG
  • 1. Erfindungsgebiet
  • Die Erfindung betrifft die LZW-Datenkompression insbesondere in Bezug auf die Minimierung von Wörterbücherzugriffe, wenn Zeichenläufe verarbeitet werden.
  • 2. Beschreibung des Standes der Technik
  • Die Professoren Abraham Lempel und -Jacob Ziv sorgten für die theoretische Grundlage für LZ-Datenkompression- und -dekompressionssysteme, die sich heutzutage vielfacher Anwendung erfreuen. Zwei ihrer Seminarschriften erscheinen in der IEEE Transactions on Information Theory, IT-23-3, Mai 1977, S. 337-343, und in der IEEE Transactions on Information Theorie, IT-24-5, September 1978, S. 530–536. Ein allgegenwärtig verwendetes als LZW bekanntes Datenkompressions- und -dekompressionssystem, das als Standard für die V.42-Bis-Modem-Kompression und -Dekompression angenommen wurde, wird im US-Patent 4.558.302 von Welch, das am 10 Dezember 1985 erteilt wurde, beschrieben. LZW wurde als Kompressions- und Dekompressionsstandard angenommen, der in GIF- und TIFF-Bildübertragungsprotokollen verwendet wird.
  • Weitere Beispiele für Kompressions- und Dekompressionssysteme, denen ein LZ-Wörterbuch zugrundeliegt, werden in den folgenden US-Patenten beschrieben: Patent 4.464.650 von Eastman et al., am 7. August, 1984, erteilt; Patent 4.814.746 von Miller et al:, am 21 März, 1989, erteilt; Patent 4.876.541 von Storer, am 24 Oktober, 1989, erteilt; Patent 5.153591 von Clark, am 6. Oktober, 1992, erteilt; und Patent 5.373.290 von Lempel et al., am 13. Dezember, 1994, erteilt.
  • Eine andere Datenkompressions- und -dekompressionsart, die als Codierung nach der Lauflänge (RLE = Run Length Encoding) bezeichnet wird, komprimiert einen sich wiederholenden Zeichen-Lauf mittels der Bereitstellung eines komprimierten Codes, der das Zeichen und die Lauflänge anzeigt. Die RLE ist solchermaßen bei der Codierung langer Folgen desselben Zeichens wirksam. Die RLE ist z. B. bei der Kompression einer langen Abfolge von Leerstellen wirksam, die zu Beginn einer Datendatei eingeschlossen sein können. Die RLE ist auch bei der Bildkompression wirksam, wo ein Bild einen langen Lauf von aufeinanderfolgenden Pixeln enthält, die denselben Wert haben, wie beispielsweise im Himmelsbereich eines Land-Himmel-Bildes.
  • Wenn die obigen LZ-Kompressionssysteme, die auf ein Wörterbuch basieren, auf einen Zeichen-Lauf treffen, werden zahlreiche Wörterbuchzugriffe verwendet, um die komprimierten Codes zu erzeugen, die dem Lauf entsprechen. Es ist in solchen Systemen wünschenswert, die Anzahl der Wörterbuchzugriffe zu minimieren, um die Systemleistung zu verbessern.
  • Im Stand der Technik wurde die Codierung nach der Lauflänge mit LZ-Systemen kombiniert, wie es in den folgenden US-Patenten mittels Beispielen dargelegt wird: Patent 4.929.94 von O'Brian et al., am 29. Mai, 1990, erteilt; Patent 4.971.407 von Hoffman, am 20 Nov., 1990, erteilt; Patent 4.988.998 von O'Brian et al., am 21. September, 1993, erteilt; Patent 5.389.922 von Seroussi et al., am 14. Februar, 1995, erteilt; und Patent 5.861.827 von Welch et al., am 19. Januar, 1999, erteilt.
  • In einigen Systemen aus dem Stand der Technik wurde die Codierung nach der Lauflänge mit einem LZ-System kombiniert, indem die Daten an einen Lauflängen-Codierer angelegt und dann die Lauflängen-codierten Daten am System angelegt wurden, das auf das LZ basiert. In einem solchen Aufbau wird ein Lauflängen-Codierer am vorderen Ende des Komprimierers verwendet, und ein Lauflängen-Decoder wird am Ausgabeende des Dekomprimierers verwendet. Ein solches System leidet unter den Nachteilen gestiegener(n) Ausstattung, Kosten, Steuerungsaufwands und Verarbeitungszeit. Die Patente 4.971.407 und 4.988.998 legen exemplarisch ein solches System dar.
  • Im System des Patents 5.389.922, das auf dem LZW basiert, werden bestimmte Ausgabecodes vom Komprimierer bei Vorliegen eines Laufs sich wiederholender Eingangsdatenzeichen unterdrückt, aber zahlreiche Wörterbuchzugriffe werden nichtsdesto trotz verwendet. Ein besonderer Laufverbesserungsmechanismus wird am Eingang des Dekomprimierers benötigt, um die fehlenden Codes wieder zu erzeugen.
  • Im Komprimierer des Systems vom Patent 5.861.827 wird, wenn eine Teilfolge W und ein Zeichen C gefunden werden, eine neue Folge gespeichert, wobei C ein Erweiterungszeichen an der Folge PW ist, worin P die Folge war, die im zuletzt übertragenen komprimierten Ausgabecode befördert wurde. Mit diesem Kompressionsalgorithmus wird ein Zeichen-Lauf in zwei komprimierten Codes ungeachtet seiner Länge kodiert, dennoch werden zahlreiche Wörterbuchzugriffe verwendet. Der Dekomprimierer dieses Systems verwendet einen besonderen Ablauf für unerkannte Codes, um den Synchronismus mit dem Komprimierer aufrechtzuerhalten.
  • Im System des Patents 4.929.946 wird ein Lauf angezeigt, indem ein vorbestimmter reservierter Bezugswert gefolgt von einer Wiederhol-Zählung für den Lauf übertragen wird. Das Erfordernis der Verwendung des reservierten Bezugswerts im komprimierten Strom für jeden Lauf, der erfasst wird, sorgt dafür, die Kompression zu reduzieren. Das Patent 5.247.638 stellt Beschreibungen übereit, die denen des Patents 4.929.946 ähneln.
  • Ein anderes Datenkompressionssystem, das die Codierung der Datenzeichenläufe beinhaltet, wird in der Patentanmeldung S.N. 09/264.269 offenbart. Im Komprimierer dieser Patentanmeldung werden Läufe verarbeitet, indem nacheinander in der Eingabe nach vorne geschaut wird, um zu bestimmen, ob im Lauf benachbarte, numerisch ansteigende Segmente existieren.
  • Ein weiteres Datenkompressionssystem, das die Codierung der Datenzeichenläufe einschließt, wird in der Patentanmeldung S.N. 09/300.810 offenbart. Im Komprimierer dieser Patentanmeldung werden Läufe verarbeitet, indem mathematisch aus der Lauflänge die jeweiligen Ausgabecodes bestimmt werden, die den benachbarten numerisch steigenden Segmenten entsprechen, die im Lauf existieren.
  • Ein weiteres Datenkompressions- und -dekompressionssytem, das die Verarbeitung von Datenzeichenläufen beinhaltet, wird in der Patentanmeldung S.N. 09/336.219 offenbart. Im System dieser Patentanmeldung wird die Lauflängencodierung/Decodierung im LZW- Datenkompressions/Dekompressionssystem ingebettet, worin die Komprimierer- und Dekomprimierer-Codezähler bei der Signalisierung und der Erfassung, dass man auf einen Zeichen-Lauf gestoßen ist, verwendet werden.
  • Es ist eine Aufgabe der vorliegenden Erfindung, das Vorhandensein eines Zeichen-Laufs in einem LZW-Datenkompressionssystem zu erfassen und in den Patentanmeldungen S.N. 09/264.269 und S.N. 09/300.810 beschriebene Lauf-Verarbeitungsverfahren auf verschiedene Weise zu verwenden. Da diese Lauf-Verarbeitungsverfahren keine zahlreichen Wörterbuchzugriffe benötigen, wird eine Leistungsverbesserung bewerkstelligt.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung verbessert das gut bekannte LZW-Datenkompressionssystem, indem bestimmt wird, wann ein Lauf von eingegebenen Datenzeichen dabei ist, aufzutreten. Der Lauf wird verarbeitet, indem nacheinander in die Eingabe nach vorne geschaut wird, um zu bestimmen, ob im Lauf die benachbarten, numerisch steigenden Segmente existieren, und indem eine Abfolge von numerisch steigenden Ausgabecodes erzeugt wird, die den numerisch steigenden benachbarten Lauf-Segmenten entsprechen. Alternativ dazu wird der Lauf verarbeitet, indem die Lauflänge bestimmt wird und aus der Lauflänge mathematisch die jeweiligen Ausgabecodes bestimmt werden, die den benachbarten numerisch ansteigenden Segmenten entsprechen, die im Lauf existieren. Spezieller werden ein iterativer mathematischer Algorithmus oder ein Algorithmus mit einer quadratischen Gleichung verwendet, um den Lauf zu verarbeiten.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die 1, 5 und 8 sind schematische Blockdiagramme von Datenkomprimierern, die alternative bevorzugte Ausführungsformen der vorliegenden Erfindung bereitstellen.
  • 2 ist ein Steuerflussdiagramm, das die Betriebe darstellt, die von den Komprimierern der 1, 5 und 8 ausgeführt werden, um die Datenkompression in Übereinstimmung mit der vorliegenden Erfindung durchzuführen.
  • 3 ist ein Steuerflussdiagramm, das die Lauf-Verarbeitungslogik darstellt, die im Flussdiagramm der 2 verwendet wird, um die Lauf-Verarbeitung in Übereinstimmung mit dem iterativen nach-vorne-schauenden Algorithmus der Ausführungsform aus der 1 der vorliegenden Erfindung durchzuführen.
  • 4 ist ein Diagramm, das die Betriebe des Komprimierers der 1 in Übereinstimmung mit den Steuerflussdiagrammen der 2 und 3 beispielhaft erläutert.
  • 6 ist ein Steuerflussdiagramm, das die Lauf-Verarbeitungslogik darstellt, die im Flussdiagramm der 2 verwendet wird, um die Lauf-Verarbeitung in Übereinstimmung mit dem iterativen mathematischen Algorithmus der Ausführungsform aus der 5 der vorliegenden Erfindung durchzuführen.
  • 7 ist ein Diagramm, das beispielhaft die Betriebe des Komprimierers der 5 in Übereinstimmung mit den Steuerflussdiagrammen der 2 und 6 erläutert.
  • 9 ist ein Steuerflussdiagramm, das die Lauf-Verarbeitungslogik darstellt, die im Flussdiagramm der 2 verwendet wird, um die Lauf-Verarbeitung in Übereinstimmung mit dem mathematischen Algorithmus der quadratischen Gleichung der Ausführungsform aus der 8 der vorliegenden Erfindung durchzuführen.
  • 10 ist ein Diagramm, das beispielhaft die Betriebe des Komprimierers der 8 in Übereinstimmung mit den Steuerflussdiagrammen der 2 und 9 erläutert.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
  • Nimmt man auf die 1 Bezug, wird ein Datenkomprimierer 10 dargestellt, der einen Strom von eingegebenen Datenzeichen, die an der Eingabe 11 angelegt werden, in einen Strom entsprechender komprimierter Codes an einer Ausgabe 12 komprimiert. Der Komprimierer 10 schließt Arbeitsregister ein, die als ein Aktuelles Zeichenregister 13, ein Aktuelles Übereinstimmungsregister 14, ein Code-Länge-Register 15, als ein Vorgriffs-Puffer 16 und ein n-Register 17 bezeichnet werden. Der Komprimierer 10 schließt weiterhin einen Code-Zähler 20 ein, um sequenziell Code-Werte zu erzeugen, die verwendet werden, um Lauf-Segmente und Nicht-Lauf-Zeichen-Folgen auf eine zu beschreibende Art und Weise zu verarbeiten.
  • Der Komprimierer 10 schließt weiterhin eine Vorgriffs-Vergleichs- und Zeichenverwerflogik 21 ein. Die Logik 21 führt Vergleiche zwischen einem Zeichen im Aktuellen Zeichenregister 13 und den Zeichen in den Vorgriffs-Puffern 16 durch und verwirft Vorgriffs-Zeichen auf eine zu beschreibende Art und Weise aus. Die Logik 21 führt auch Vergleiche zwischen den Zeichen im Aktuellen Zeichenregister 13 und den Zeichen in den Vorgriffs-Puffern 16 durch, um zu bestimmen, ob ein Lauf dabei ist, zu beginnen, und zwar auf eine Art und Weise, die weiter zu erläutern ist. Der Komprimierer 10 schließt auch die Steuerung 22 zum Steuern der Betriebe des Komprimierers in Übereinstimmung mit den Betriebsflussdiagrammen der 2 und 3 ein, und zwar auf eine Art und Weise, die zu beschreiben ist.
  • Ein Wörterbuch 25 zum Speichern der Zeichen-Folgen in Zusammenwirkung mit dem Komprimierer 10 auf eine zu beschreibende Art und Weise ist ebenfalls eingeschlossen. Daten werden unter. der Steuerung eines Steuerbus 27 über einen bi-direktionalen Datenbus 26 zwischen dem Komprimierer 10 und dem Wörterbuch 25 übertragen.
  • Weiterhin ist ein Eingabe-Zeichen-Puffer 30 eingeschlossen, der den an der Eingabe 11 empfangenen eingegebenen Datenzeichenstrom puffert. Die einzelnen eingegebenen Datenzeichen werden in Übereinstimmung mit zu beschreibenden Betrieben aus dem Eingabe-Zeichen-Puffer 30 über einen Bus 31 in das Aktuelle Zeichenregister 13 und in die Vorgriffs-Puffer 16 eingespeist. Der Komprimierer 10 steuert den Erwerb der eingebenen Datenzeichen aus dem Eingabe-Zeichen-Puffer 30 über einen Steuerbus 32.
  • Kurz zusammengefasst, ist der Betrieb des Komprimierers 10 wie folgt. Die eingegebenen Datenzeichen werden aus dem Eingabe-Zeichen-Puffer 30 geholt, und wenn die Lauf-Verarbeitung nicht aufgerufen ist, wird die herkömmliche LZW-Datenkompression durchgeführt, indem an der Ausgabe 12 ein komprimierter Codestrom bereitgestellt wird. In der LZW-Datenkompression wird der Code-Zähler 20 auf wohl bekannte Art und Weise fortschreitend inkrementiert, um erweiterten Folgen Code-Werte zuzuordnen, die im Wörterbuch 25 gespeichert werden. Der Komprimierer 10 wird hierin als Code veränderlicher Länge beschrieben, wie es im Stand der Technik gut bekannt ist. Das Aktuelle Zeichenregister 13, das Aktuelle Übereinstimmungsregister 14, das Code-Längen-Register 15, der Code-Zähler 20 und das Wörterbuch 25 werden bei der Durchführung der LZW-Datenkompression verwendet. Der LZW-Datenkompressions-Algorithmus wird in dem Patent 4.558.302 detailliert beschrieben.
  • Mittels der Verwendung der Vorgriffs-Puffer 16 und der Logik 21 werden aufeinanderfolgende eingegebene Zeichen untersucht, und wenn die nächsten 2 Vorgriffs-Zeichen dieselben Zeichen sind wie im Aktuellen Zeichenregister 13, springt das LZW-Verfahren zur Lauf-Verarbeitung. Die verwendete Lauf-Verarbeitung ist die in der Patentanmeldung 09/264.269 beschriebene. Kurz zusammengefasst werden, wenn ein Zeichen-Lauf erfasst wird, das Zeichen, das den Lauf beginnt und das im Aktuellen Zeichenregister 13 liegt und der Code im Code-Zähler 20 ausgegeben. Der Code-Zähler 20 wird daraufhin um 1 inkrementiert. Der Lauf wird dann untersucht, um zu bestimmen, ob sich im Lauf numerisch steigende Lauf-Segmente befinden. Spezifisch wird bestimmt, ob benachbarte Lauf-Segmente von 3 Zeichen, 4 Zeichen, 5 Zeichen, 6 Zeichen, usw. in dem Lauf existieren im Anschluss an die zwei Vorgriffs-Zeichen, die folgen und mit dem Zeichen im Aktuellen Zeichenregister 13 übereinstimmen. Für jedes dieser erfassten Lauf-Segmente wird der Code im Code-Zähler 20 ausgegeben und der Code-Zähler 20 wird um 1 inkrementiert. Das Verfahren fährt fort, bis nicht genügend Zeichen im Lauf bleiben, um das nächste Lauf-Segment in der Sequenz zu füllen. Wenn dies geschieht, wird der Code-Zähler 20 neuerlich um 1 vorgerückt.
  • Das Aktuelle Zeichenregister 13, das Code-Längen-Register 15, die Vorgriffs-Puffer 16, das n-Register 17, der Code-Zähler 20 und die Logik 21. werden bei der Durchführung der Zeichen-Lauf-Verarbeitung, wie unten mit Bezug auf die 2 und 3 beschrieben, verwendet. Die Steuerung 22 wird betrachtet, als enthalte sie die richtige Schaltung wie beispielsweise Zustandsvorr chtungen, um die Ausführung der Betriebe zu steuern.
  • Die unten beschriebenen Ausführungsformen sind zu Erläuterungszwecken beispielhaft in den ASCII-Implementierungen dargelegt. Die ASCII-Umgebung verwendet eine 8 Bit Zeichenlänge, die ein Alphabet von 256 Zeichen unterhält.
  • Nimmt man auf die 2 Bezug, wird mit anhaltendem Bezug auf fir 1 ein Steuerflussdiagramm dargestellt, das die vom Komprimierer 10 auszuführenden detaillierten Betriebe zeigt. Das Flussdiagramm der 2 wird von einer Ausgabe veränderlicher Länge abhängig gemacht, und das Code-Längen-Register 15 wird zu diesem Zweck verwendet. In einer ASCII-Code-Implementierung veränderlicher Länge kann die Code-Länge mit 9 Bits beginnen und sequentiell jeweils auf 10, 11, 12, usw. Bits bei den Codes 512, 1024, 2048, usw. steigen.
  • Entsprechend wird an einem Block 40 der Code-Zähler 20 an einem ersten verfügbaren Code, z. B. 258 in der ASCII-Umgebung, initialisiert. An einem Block 41 wird das Code-Längen-Register 15 und die Anfangs-Code-Länge, z. B. auf 9 Bits in den ASCLI-Ausführungsformen, initialisiert. An einem Block 42 wird das erste hingegebene Zeichen in das Aktuelle Zeichenregister 13 geholt, und an einem Block 43 wird das n-Register 17 auf 2 gesetzt.
  • Die Verarbeitung setzt sich an einem Block 44 fort, worin das Aktuelle Zeichen im Register 13 gegenüber den nächsten n Vorgriffs-Zeichen geprüft wird, die dem Aktuellen Zeichen folgen, um zu bestimmen, ob sie dieselben sind. Dieses Verfahren wird von der Logik 21 durchgeführt, indem die richtigen Zeichen verwendet werden, die in die Vorgriffs-Puffer 16 geholt werden. Am Block 44 wird das Aktuelle Zeichen mit den nächsten n Vorgriffs-Zeichen verglichen, die dem Aktuellen Zeichen folgen, um zu bestimmen, ob ein Lauf desselben Zeichens dabei ist zu beginnen. Wenn das Aktuelle Zeichen dasselbe ist wie die nächsten n Vorgriffs-Zeichen, wird der JA-Zweig des Blocks 44 zu einem Lauf-Verarbeitungsblock 45 genommen. Die Details des Lauf-Verarbeitungsblocks 45 werden in der 3 dargestellt.
  • Wie oben erklärt, trifft das Flussdiagramm der 2 auf die Ausführungsformen der 5 und 8 zu. Für diese Ausführungsformen werden die Details des Lauf-Verarbeitungsblocks 45 jeweils in den 6 und 9 dargestellt.
  • Wenn eines der n Vorgriffs-Zeichen mit dem Aktuellen Zeichen nicht übereinstimmt, wird der NEIN-Zweig des Blocks 44 genommen, um mit der herkömmlichen LZW-Datenkompressions-Verarbeitung fortzufahren.
  • Wenn der NEIN-Zweig aus dem Block 44 genommen wird, wird die Verarbeitung an einem Block 46 fortgesetzt, wobei das Aktuelle Übereinstimmungsregister 14 auf das Zeichen im Aktuellen Zeichenregister 13 gesetzt wird. Danach wird an einem Block 47 das nächste eingegebene Datenzeichen, das dem vorliegenden Aktuellen Zeichen folgt, in das Aktuelle Zeichenregister 13 geholt. Der Wert im Aktuellen Übereinstimmungsregister 14 zusammen mit dem nächsten Zeichen im Aktuellen Zeichenregister 13 umfasst eine Folge aus zwei Zeichen, wie es im Stand der Technik anerkannt ist (z. B. s. Patent 4.558.302).
  • Die Verarbeitung macht an einem Block 50 weiter, wobei, das Wörterbuch 25 durchsucht wird, um zu bestimmen, ob sich die Folge, die die Aktuelle Übereinstimmung umfasst, die mit dem Aktuellen Zeichen verkette ist, im Wörterbuch befindet. Wörterbuch-Suchverfahren zum Durchführen der Funktion des Blocks 50 sind im Stand, der Technik gut bekannt (z. B. s. Patent 4.558.3.02 und Patent 5.861.827).
  • Wenn am Block 50 die Folge im Wörterbuch 25 gefunden wird, wird der JA-Zweig vom Block 50 zu einem Block 51 genommen. Am Block 51 werden die Inhalte des Aktuellen Übereinstimmungsregisters 14 aktualisiert, um eine Anzeige der Folge zu enthalten, die gefunden wurde. Wie im Stand der Technik gut bekannt ist, verfügt eine Folge über einen damit verknüpften Code, und im allgemeinen wird der Folgecode der aktuell übereinstimmenden Folge in das Aktuelle Übereinstimmungsregister 14 gesetzt. Die Details der speziellen Implementierungen für die Funktion des Blocks 51 sind gut bekannt (z. B. s. Patent 4.558.302 und Patent 5.861.827). Nach der. Aktualisierung des Aktuellen Übereinstimmungsregisters 14 mit der gerade übereinstimmenden Folge, kehrt die Steuerung zum Block 47 zurück, um das nächste eingegebene Datenzeichen an das Aktuelle Zeichenregister 13 zu holen. Auf diese Art und Weise vergleicht die von den Blöcken 47, 50 und 51 gebildete Schleife den eingegebenen Datenzeiehenstrom mit den im Wörterbuch 25 gespeicherten Folgen, um die längste Übereinstimmung damit zu finden.
  • Am Block 50 wird der NEIN-Zweig vom Block 50 zu einem Block 52 genommen, wenn die Verkettung der gerade übereinstimmenden Folge mit dem nächsten am Block 47 geholten Zeichen zu einer erweiterten Folge führt, die nicht im Wörterbuch 25 gefunden wurde. Am Block 52 wird diese erweiterte Folge, die nicht im Wörterbuch 2 5 gefunden wurde, darin eingegeben, und der Erweiterungscode des Code-Zählers 20 wird dieser erweiterten Folge zugewiesen. Details der speziellen Implementierungen für die Funktion des Blocks 52 sind gut bekannt (z. B. s. Patent 4.558.302).
  • Die Verarbeitung macht an einem Block 53 weiter, wobei der Code der Aktuellen Übereinstimmung als Teil des komprimierten Codestroms ausgegeben wird, der an der Komprimiererausgabe 12 bereitgestellt wird. Der Code der Aktuellen Übereinstimmung wird vom Aktuellen Übereinstimmungsregister 14 bereitgestellt. Wenn die Aktuelle Übereinstimmung eine Mehrfach-Zeichen-Folge ist, liegt der Code der Folge im Aktuellen Übereinstimmungsregister 14 und war, wie oben mit Bezug auf den Block 50 beschrieben, die längste im Wörterbuch 25 gefundene Übereinstimmung. Es wird geschätzt sein, dass die Aktuelle Übereinstimmung, die am Block 53 ausgegeben wird, auch ein einzelnes Zeichen sein kann. Der Ausgabecode ist in diesem Fall der Wert des Zeichens. Implementierungsdetails der Funktion des Blocks 53 sind im Stand der Technik gut bekannt (z. B. s. Patent 4.558.302 und Patent 5.861.827).
  • Die Verarbeitung rückt auf einen Block 54 vor, wobei der Code im Codezähler 20 geprüft wird, um zu bestimmen, ob ein Anstieg in der Code-Länge benötigt wird. Wenn ja, macht die Verarbeitung an einem Block 55 weiter, wobei das Code-Längen-Register 15 um 1 inkrementiert wird. Wenn ein Anstieg in der Code-Länge am Block 54 nicht erforderlich ist, wird der Block 55 umgangen, um an einem Block 56 die Verarbeitung fortzusetzen. Am Block 56 wird der Code-Zähler 20 um 1 inkrementiert.
  • Die Steuerung kehrt dann, wie zuvor beschrieben, für die Lauf-Erfassung zum Block 44 zurück. Wenn kein Lauf erfasst wird, wird, wie oben beschrieben, an den Blöcken 46 und 47 ein neuer LZW-Datenkompressions-Zyklus gestartet, wobei das Aktuelle Zeichen am Block 46 in das Aktuelle Übereinstimmungsregister 14 gesetzt wird und das nächste Aktuelle Zeichen wird am Block 47 in das Aktuelle Zeichenregister 13 geholt. Es wird geschätzt sein, dass am Block 46 das Aktuelle Übereinstimmungsregister auf das eingegebene Datenzeichen gesetzt wird, das zu einer Fehl-Übereinstimmung in der vorherigen Übereinstimmung führte. Implementierungsdetails für die Funktion der Blöcke 46 und 47 sind im Stand der Technik gut bekannt (s. z. B. Patent 4.558.302 und Patent 5.861.827).
  • Es wird geschätzt sein; dass abgesehen von den Blöcken 43-45 der Rest der 2 eine Standard-LZW-Datenkompressions-Verarbeitung zeigt. Solchermaßen kann jede bekannte Implementierung einer LZW-Datenkompression bei der Implementierung, der LZW-Datenverichtungsaspekte der vorliegenden Erfindung verwendet werden.
  • Auf eine in Bezug auf den Lauf-Verarbeitungsblock 45 im Detail zu beschreibende Art und Weise endet. die Lauf-Verarbeitung, indem, das nächste Zeichen an das Aktuelle Zeichenregister 13 geholt wird, das den laufenden Zeichen folgt, die im Block 45 verarbeitet wurden. Die Ausgabe des Lauf-Verarbeitungsblocks 45 kehrt zum Block 43 zurück, um n auf 2 rückzusetzen, und dann am Block 44 auf die Lauf-Erfassung vor. Solchermaßen kann im Anschluss an die Lauf-Verarbeitung des Blocks 45 die weitere Lauf-Verarbeitung abhängig von der Prüfung des Blocks 44 erfolgen. Mit anderen Worten sorgt der vom Block 45 zum Block 43 dargestellte Rückführungsweg für den Vorzug der Lauf-Verarbeitung gegenüber der LZW-Verarbeitung.
  • Es wird geschätzt sein, dass eine alternative Anordnung ausgeführt werden kann, indem, anstelle der Rückführung des Blocks 45 zum Block 43, der Rückführungsweg zum Block 46 gemacht werden kann. Das Rückführen der Verarbeitung des Blocks 45 zum Block 46, führt zu einer Suche nach dem Wörterbuch 25, um zu bestimmen, ob irgendwelche längsten LZW-Übereinstimmungen in Zusammenhang mit der damit einhergehenden Aktualisierung des Wörterbuchs 25 vor der Eingabe der Lauf-Verarbeitung verarbeitet und ausgegeben werden können. Mit anderen Worten stellt diese Verbindung den Vorzug gegenüber der LZW-Verarbeitung bereit. In dieser alternativen Anordnung kehrt der Block 56 zum Block 43 und nicht zum Block 44 zurück, um das n-Register 17 richtig rückzusetzen.
  • Nimmt man auf die 3 Bezug, werden mit anhaltendem Bezug auf die 1 und 2 Details der Lauf-Verarbeitung des Blocks 45 aus der 2 in Übereinstimmung mit der Ausführungsform der 1 dargestellt. Es wird geschätzt sein, dass die Lauf-Verarbeitung der 3 im wesentlichen dieselbe ist wie die detailliert in der S.N. 09/264.269 beschriebene Lauf-Verarbeitung.
  • Entsprechend wird an einem Block 60 der Ausgabe 12 des Komprimierers 10 das Zeichen im Aktuellen Zeichenregister 13 bereitgestellt. Es wird geschätzt sein, dass, obwohl dieses Zeichen ausgegeben wurde, es dennoch im Aktuellen Zeichenregister 13 liegt. Die Verarbeitung fährt an einem Block 61 fort, wobei der Code im Code-Zähler 20 an der Ausgabe 12 des Komprimierers 10 bereitgestellt wird. Zu diesem Zeitpunkt wurden im Steuerablauf die ersten drei Zeichen des potentiellen Laufs verarbeitet. Das anfängliche Zeichen des Laufs befindet sich im Aktuellen Zeichenregister 13 und wurde am Block 60 ausgegeben. Da "n" am Block 43 der 2 auf 2 gesetzt wurde, verglich der Block 44 der 2 das Aktuelle Zeichen mit den zwei Vorgriffs-Zeichen, die dem Aktuellen Zeichen folgten. Der Code im Code-Zähler 20, der am Block 61 ausgegeben wird, stellt die zwei im Block 44 der 2 verwendeten Vorgriffs-Zeichen dar. Diese zwei Zeichen sind das erste Segment des Laufs, der dem Aktuellen Zeichen folgt. An den Blöcken 62 und 63 wird die oben mit Bezug auf die Blöcke 54 und 55 der 2 erörterte Code-Längen-Logik durchgeführt.
  • An einem Block 64 wird der Code-Zähler 20 um 1 inkrementiert, um den Code-Zähler 20 für, die Verarbeitung des nächsten Lauf-Segments vorzubereiten, falls es auftreten sollte. An einem Block 65 werden die n Vorgriffs-Zeichen verworfen, die gerade verarbeitet wurden. Das Verwerfen erfolgt, da der Code der diese Zeichen darstellt, am Block 61 ausgegeben wurde. Das Verwerfen der Zeichen wird von der Logik 21 durchgeführt, indem die Vorgriffs-Puffer 16 der richtigen Zeichen gelöscht werden.
  • Die Verarbeitung fährt mit einem Block 66 fort, wobei der Index n auf n + 1 vorgerückt wird. Diese Aktion wird mit Bezug auf das n-Register 17 vorgenommen. Solchermaßen wird zu diesem Zeitpunkt in der Verarbeitung n, das zuvor auf 2 gesetzt wurde, in Vorbereitung für die Bestimmung, ob die nächsten drei Vorgriffs-Zeichen den Lauf zum nächsten numerisch inkrementierten Lauf-Segment fortsetzen, auf 3 vorgerückt.
  • Entsprechend wird ein Entscheidungsblock 67 eingegeben, der das Zeichen im Aktuellen Zeichenregister 13 gegenüber den nächsten n-Vorgriffs-Zeichen prüft, die den Zeichen folgen, die am Block 65 verworfen wurden. Dieses Verfahren wird durch die Logik 21 durchgeführt, indem die richtigen Zeichen verwendet werden, die in die Vorgriffs-Puffer 16 geholt werden. Wenn alle n Vorgriffs-Zeichen mit dem Aktuellen Zeichen übereinstimmen, wird der JA-Zweig genommen. Wenn nicht, wird der NEIN-Zweig genommen.
  • Wenn der JA-Zweig vom Block 67 genommen wird, hat sich der Lauf des Zeichens im Aktuellen Zeichenregister 13 bis zu diesem nächsten n Zeichensegment fortgesetzt. Die Steuerung kehrt dann zum Block 61 zurück, um wie oben beschrieben die Verarbeitung fortzusetzen. Kurz zusammengefasst, gibt der Block 61 den Code aus, der dieses n Zeichen-Lauf-Segment darstellt, das am Block 65 verworfen wird. Der Code-Zähler 20 wird wiederum am Block 64 vorgerückt. Der Index n wird am Block 66 vorgerückt, um den Zeichen-Lauf zu untersuchen, damit weiterhin bestimmt wird, ob in der Eingabe ein weiteres benachbartes und numerisch inkrementiertes Lauf-Segment existiert.
  • Wenn am Block 67 bestimmt wird, dass nicht genügend eingegebene Zeichen existieren, die dieselben sind, wie das Zeichen im Aktuellen Zeichenregister, um das nächste Lauf-Segment zu füllen, wird der NEIN-Zweig vom Block 67 aus genommen. Die oben mit Bezug auf die Blöcke 54 und 55 der 2 beschriebene Prüfung der Code-Länge wird dann an den Blöcken 70 und 71 durchgeführt. An einem Block 72 wird der Code-Zähler 20 um 1 inkrementiert. An einem Block 73 wird unter der Steuerung der Logik 21 das nächste Zeichen, das den Zeichen folgt, die am Block 65 verworfen wurden, an das Aktuellen Zeichenregister 13 geholt, um die Verarbeitungfortzusetzen. Entsprechend kehrt die Steuerung dann auf den Block 43 der 2 zurück.
  • Es wird geschätzt sein, dass, wenn der NEIN-Zweig vom Block 67 genommen wird, die n Vorgriffs-Zeichen, die verwendet werden, um die Prüfung des Blocks 67 durchzuführen, in den Vorgriffs-Puffern 16 sind. Diese Zeichen werden verwendet, um die Verarbeitung mit dem ersten dieser Zeichen fortzusetzen, das im Block 73 als Aktuelles Zeichen verwendet wird. Die in den Vorgriffs-Puffern 16 gespeicherten Zeichen, die dem Aktuellen Zeichen folgen, können dann im Block 44 der 2 als darin benötigte Vorgriffs-Zeichen benutzt werden. Die Logik 21 steuert das Aktuelle Zeichenregister 13 und die Vorgriffs-Puffer 16, so dass diese Aktionen und die anderen Aktionen der 2 und 3 auf eine richtige Art und Weise durch die Verwendung, das Holen und das Verwerfen der Zeichen, wie benötigt, durchgeführt werden.
  • Nimmt man auf die 4 Bezug, wird mit anhaltendem Bezug auf die 13 ein Beispiel für den Betrieb des Komprimierers 10 in Übereinstimmung mit den Flussdiagrammen der 2 und 3 dargestellt. An der Oberseite der 4 wird ein eingegebenes Datenzeichenstrom gezeigt, worin aufeinanderfolgende Zeichen durch die Zeichenabfolge-Nummern gekennzeichnet werden. Dies wird getan, um zu erleichtern im Anschluss an den Fortchritt der Zeichen durch die Schritte des Beispiels. Es wird geschätzt sein, dass die Sequenznummern zu Zwecken der Zeichenkennzeichnung gezeigt werden und nicht im eigentlichen Datenzeichenstrom erscheinen.
  • Das Beispiel ist weitgehend selbst-erläuternd, wobei die durchgeführten Aktionen in der linken Spalte der Blöcke der 2 und 3 skizziert sind, die an den in der rechten Spalte bezeichneten Aktionen teilnehmen.
  • In den Aktionen 1–8 wird die Standard-LZW-Datenkompression mittels des Zeichens "a(5)" an den eingegebenen Datenzeichen durchgeführt. Mehrere LZW-Kompressionszyklen werden durchge führt, und in jedem Zyklus wird, wie in der rechten Spalte angemerkt, der Block 44 durchquert, um einen Zeichen-Lauf zu prüfen. Wenn der Block 44 in der Verarbeitung wie in der 2 dargestellt positioniert wird, wird die Lauf-Verarbeitung vor der Durchführung der LZW-Verarbeitung erfolgen, worin das Wörterbuch 25 für die längsten übereinstimmenden Zeichen-Folgen durchsucht wird. Daher wird der Lauf-Verarbeitung der Vortritt gegenüber der LZW-Verarbeitung gegeben. Die Verwendung der oben beschriebenen alternativen Anordnung, worin der Lauf-Verarbeitungsblock 45 eher zum Block 46 als zum Block 43 zurückgeführt wird, würde der LZW-Verarbeitung der Vortritt gegenüber der Lauf-Verarbeitung gegeben. Mit dieser alternativen Anordnung werden alle Folgen, die im Wörterbuch 25 existieren, vor dem Aufrufen der Lauf-Verarbeitung am Block 44 im Block 50 übereinstimmend werden.
  • In Aktion 9 erkannte der Block 44 der 2, dass, das Aktuelle Zeichen "a(5)" dasselbe ist wie die nächsten n Vorgriffs-Zeichen, wie es im eingegebenen Datenzeichenstrom an der Oberseite der Figur beobachtet wird. Die Steuerung rückt dann für die Lauf-Verarbeitung auf den Block 45 vor. Es wird geschätzt sein, dass, selbst wenn der dargestellte Lauf des Zeichens "a" mit "a(4)" beginnt, das Zeichen "a(4)" an der Aktion 7 in der LZW-Verarbeitung absorbiert wurde.
  • In der Aktion 9 wird das Zeichen "a(5)" gemäß dem Block 60 der 3 ausgegeben. Der Lauf wird an den Aktionen 10–12 mittels des Zeichens "a(14)" verarbeitet. Der Rest des Laufs, der aus Zeichen "a(15)" bis "a(17)" besteht, wird durch die angezeigten Blöcke der 2 und 3 an den Aktionen 13 und 14 verarbeitet.
  • Auf eine ähnliche Art und Weise wird der Lauf des Zeichens "b" an den Aktionen 15–18 verarbeitet. An der Aktion 19 kehrt die Steuerung zur LZW-Verarbeitung zurück.
  • Detaillierte Beschreibungen der Aktionen der 4 in Bezug auf die Blöcke der 2 und 3 werden ohne weiteres ersichtlich und werden um der Kürze willen nicht bereitgestellt.
  • Nimmt man auf die 5 Bezug, wird mit anhaltendem Bezug auf die 1 und 2 ein schematisches Blockdiagramm einer anderen bevorzugten Ausführungsform der vorliegenden Erfindung dargestellt 5 veranschaulicht einen Datenkomprimierer 80, der eine Reihe an Komponenten hat, die dieselben sind wie jene oben mit Bezug auf die 1 beschriebenen und denen dieselben Bezugszeichen wie in 1 gegeben werden. Die oben mit Bezug auf die 1 bereitgestellten Beschreibungen davon sind in Verbindung mit der 5 anwendbar. Der Komprimierer 80 schließt auch Arbeitsregister ein, die als ein Vorgriffs-Puffer 81, ein Lauf-Puffer 82, ein R-Register 83 und ein D-Register 84 bezeichnet werden.
  • Der Komprimierer 80 schießt weiterhin eine Vorgriffs-Vergleichslogik 85 ein, die Vergleiche zwischen einem Zeichen im Aktuellen Zeichenregister 13 und Zeichen im Vorgriffs-Puffer 81 durchführt, um zu bestimmen, ob ein Lauf dabei ist, wie oben mit Bezug auf die 1 und 2 beschrieben, zu beginnen. Der Komprimierer 80 schließt weiterhin eine Lauf-Erwerbslogik 86 ein, um die Zeichen eines Laufs zu erwerben und um die Zeichen eines Laufs zu zählen, die dem Aktuellen Zeichen gemäß dem von der Logik 85 erfassten Lauf folgen. Die Anzahl der von der Logik 86 gezählten Lauf-Zeichen wird im R-Register 83 gespeichert. Der Lauf-Puffer 82 stellt irgendeine Pufferung bereit, die bei der Durchführung dieser Funktionen nötig ist.
  • Der Komprimierer 80 schließt auch eine R, n und D Berechnungslogik 87 ein, die bei der Verarbeitung eines erworbenen Laufs verwendet wird, und zwar auf eine Art und Weise, die erläutert werden wird. Der Komprimierer 80 schließt darüber hinaus einen Zeichen-Verwerflogik 88 ein, um die verarbeiteten Zeichen eines Laufs zu verwerfen. Im Komprimierer 80 ist weiterhin eine Steuerung 89 eingeschlossen, um die Betriebe des Komprimierers 80 in Übereinstimmung mit den Betriebsflussdiagrammen der 2 und 6 auf eine zu beschreibende Weise zu steuern.
  • Mit Bezug auf die Eingabe-Zeichen-Puffer 30 werden die einzelnen eingegebenen Datenzeichen vom Eingabe-Zeichen-Puffer 30 über den Bus 31 in Übereinstimmung mit zu beschreibenden Betrieben am Aktuellen Zeichenregister 13, am Vorgriffs-Puffer 81 und an der Lauf-Erwerbslogik 86 angelegt.
  • Zusammengefaßt, ist der Betrieb der Komprimierers 80 derselbe wie der des oben beschriebenen Komprimierers 10 in Bezug auf die Durchführung der LZW-Datenkompression und der Ableitung auf die Lauf-Verarbeitung, wenn ein Zeichen-Lauf erfasst wird. Die in der Ausführungsform der 5 verwendete Lauf-Verarbeitung basiert auf der in der Patentanmeldung 09/ 300.810 mit Bezug auf die Ausführungsform der 13 beschriebenen. Spezifisch: wenn ein Zeichen-Lauf erfasst wird, wird das Zeichen, das den Lauf beginnt und das im Aktuellen Zeichenregister 13 liegt, ausgegeben, und die Anzahl der Lauf-Zeichen, die dem Aktuellen Zeichen folgen und diseselben sind wie das Aktuelle Zeichen, wird in das R-Register 83 gesetzt. Die Lauf-Verarbeitungslogik wird daraufhin aufgerufen, um mathematisch die numerisch steigenden Lauf-Segmente zu bestimmen, die im Lauf existieren. Spezifisch wird bestimmt, ob benachbarte Lauf-Segmente von 2 Zeichen, 3 Zeichen, 4 Zeichen, 5 Zeichen,, usw. im Lauf existieren, der dem Zeichen im Aktuellen Zeichenregister 13 folgt. Für jedes so erfasste Lauf-Segment wird der Code im Code-Zähler 20 ausgegeben, und der Code-Zähler 20 wird um 1 inkrementiert. Dieses Verfahren wird implementiert, indem wiederholt die Anzahl der Zeichen in jedem benachbarten Segment von der Anzahl der Lauf-Zeichen iterativ subtrahiert wird, bis nicht genügend Zeichen bleiben, um das nächste Lauf-Segment in der Sequenz zu füllen.
  • Wenn dies geschieht und drei oder mehr Zeichen zur Verarbeitung bleiben, wird das Zeichen, das im Aktuellen Zeichenregister 13 liegt, ausgegeben, und der Code-Zähler 20 wird wiederum um 1 vorgerückt. Das iterative Verfahren wird auf ein Lauf-Segment zweier Zeichen rückgesetzt, und das Verfahren setzt sich fort, bis weniger als drei Lauf-Zeichen übrig bleiben.
  • Die Register 13, 15, 17, 83 und 84, die Puffer 81 und 82, der Code-Zähler 20 und die Logik 85-88 werden bei der Durchführung der Zeichen-Lauf-Verarbeitung verwendet, wie es mit Bezug auf die 2 und 6 erörtert wird. Die Steuerflussdiagramme der 2 und 6 stellen die vom Komprimierer 80 auszuführenden detaillierten Betriebe dar, damit die Datenkompression in Übereinstimmung mit der Erfindung durchgeführt wird. Es wird angenommen, dass die Steuerung 89 die richtige Schaltung wie beispielsweise Zustandsvorrichtungen enthält, um die Durchführung der Betriebe zu steuern.
  • Wie oben mit Bezug auf die 1 erklärt, läßt sich das Steuerflussdiagramm der 2 auch an die Ausführungsform der 5 anlegen, wobei der Lauf-Verarbeitungsblock 45 vom Steuerflussdiagramm der 6 implementiert wird. Die oben mit Bezug auf die Ausführungsform der 1 abgegebenen Beschreibungen der 2 lassen sich auch an die Ausführungsform der 5 anlegen.
  • Nimmt man auf die 6 Bezug wird mit anhaltendem Bezug auf die 2 und 5 ein Steuerflussdiagramm dargestellt, das die Details der Lauf-Verarbeitungslogik 45 der 2 darstellt, wie sie in der Ausführungsform der 5 verwendet wird. Wie oben und in der S.N. 09/300.810 erörtert, wird der Lauf betrachtet, als, bestehe er aus dem ersten Zeichen davon, das im Aktuellen Zeichenregister 13 gehalten wird, gefolgt von den benachbarten, numerisch steigenden Segmenten desselben Zeichens. Entsprechend wird an einem Block 100 das Zeichen im Aktuellen Zeichenregister 13 der Ausgabe 12 bereitgestellt. Es wird geschätzt sein, dass, selbst wenn dieses Zeichen ausgegeben wurde, es dennoch im Aktuellen Zeichenregister 13 liegt. An einem Block 101 wird die Anzahl der aufeinanderfolgenden Zeichen R, die dem Aktuellen Zeichen folgen und die dieselben sind wie das Zeichen im Aktuellen Zeichenregister 13, in das R-Register 83 gesetzt. An einem Block 102 wird der Index n im n-Register 17 auf zwei gesetzt. Danach wird die Anzahl D der zu verwerfenden Lauf-Zeichen auf Null initialisiert.
  • In der zu beschreibenden Logik wird der Index n iterativ um 1 erhöht und iterativ von R subtrahiert, bis R (die Anzahl der im zu verarbeitenden Lauf gebliebenen Zeichen) kleiner als n ist (die Anzahl der Zeichen, die im nächsten folgenden benachbarten Lauf-Segment benötigt werden). Für jedes derartige Lauf-Segment, das mathematisch als im Lauf existierend gefunden wird, wird der Code im Code-Zähler 20 ausgegeben, und der Code-Zähler 20 wird um 1 inkrementiert. Zusätzlich wird die Größe D im D-Register 84 um n inkrementiert, wenn jedes Segment verarbeitet wird, so dass die richtige Anzahl von Lauf-Zeichen bei Beendigung der Lauf- Verarbeitung verworfen wird.
  • Entsprechend macht die Verarbeitung an einem Block 104 weiter, wobei bestimmt wird, ob R kleiner als n ist. Wenn nicht, fährt die Steuerung an einem Block 105 weiter, wobei der Code im Code-Zähler 20 ausgegeben wird. An den Blöcken 106 und 107 wird die oben mit Bezug auf die Blöcke 54 und 55 erörterte Code-Längen-Logik durchgeführt. An einem Block 108 wird der Code-Zähler 20 um 1 inkrementiert, um den Code-Zähler 20 für die Verarbeitung des nächsten Lauf-Segments vorzubereiten, wenn R groß genug bleiben sollte, um das Segment zu füllen.
  • An den Blöcken 109–111 wird D jeweils auf D + n gesetzt, R auf R – n gesetzt, und der Index n auf n + 1 gesetzt. Diese Aktionen werden jeweils mit Bezug auf die Register 84, 83 und 17 durchgeführt. Die Steuerung kehrt dann zum Block 104 zurück, um den kleiner gemachten Wert von R gegen den inkrementierten Wert von n zu prüfen. Es wird geschätzt sein, dass die mit Bezug auf R, n und D an den Blöcken 102–104 und 109–111 durchgeführten Berechnungen und Vergleiche von der Logik 87 der 5 durchgeführt werden.
  • Wenn R kleiner gemacht und n auf den Punkt inkrementiert "wurde, wo R kleiner als n ist, wird der JA-Zweig vom Block 104 zu einem Block 120 genommen. Der Block 120 bestimmt, ob R kleiner als drei ist. Wenn R größer als oder gleich drei ist, bleiben genügend Zeichen im Lauf, um die von den Blöcken 104–111 dargestellte Schleife rückzusetzen, damit diese, verbliebenen R Zeichen des Laufs verarbeitet werden.
  • Wenn R gleich oder größer als drei ist, wird der NEIN-Zweig vom Block 120 zu den Blöcken 121 und 122 genommen, wobei die oben mit Bezug auf die Blöcke 54 und 55 erörterte Code-Längen-Logik durchgeführt wird. An einem Block 123 wird der Code-Zähler 20 um 1 inkrementiert, um den Synchronismus mit der komprimierten Code-Ausgabe aufrechtzuerhalten.
  • Bei der Vorbereitung zur Verarbeitung der verbliebenen R Zeichen des Laufs wird das Zeichen im Aktuellen Zeichenregister 13 an einem Block 124 ausgegeben. Entsprechend wird der Wert von R im R-Register 83 an einem Block 125 auf R – 1 gesetzt, und an einem Block 126 wird der Wert von D im D-Register 84 auf D + 1 gesetzt. An einem Block 127 wird der Index n im n-Register 17 auf zwei rückgesetzt, und die Steuerung kehrt zum Block 104 zurück.
  • Danach werden eine oder mehrere Iterationen der Schliefe, die aus dem Blöcken 104–111 besteht, auf einen Wert verringert werden, der kleiner als drei ist. Wenn die Steuerung in den Block 120 eintritt, wobei R kleiner als drei ist, wird der JA-Zweig des Blocks 120 zu einem Block 130 genommen.
  • Es wird geschätzt sein, dass zu diesem Zeitpunkt in der Verarbeitung im Lauf nur 2, 1 oder 0 Zeichen zurückbleiben, die nicht von der oben beschriebenen Logik der 6 verarbeitet wurden. Am Block 130 werden die D-Zeichen des Laufs, der dem Aktuellen Zeichen folgt, verworfen. Die Zeichen-Verwerflogik 88 wird zu diesem Zweck verwendet. Wenn diese Zeichen im Lauf-Puffer 82 gehalten werden, verwirft die Logik 88 die richtigen Zeichen, indem sie den Wert im D-Register 84 verwendet. Danach wird die oben mit Bezug auf die Blöcke 54 und 55 beschriebene Code-Längenprüfung an den Blöcken 131 und 132 durchgeführt. An einem Block 133 wird der Code-Zähler 20 um 1 inkrementiert. An einem Block 134 wird unter der Steuerung der Logik 88 das nächste Zeichen, das den Zeichen folgt, die am Block 130 verworfen wurden, an das Aktuellen Zeichenregister 13 weitergeleitet, um die Verarbeitung fortzusetzen. Entsprechend kehrt die Steuerung danach zum Block 43 der 2 zurück.
  • Eine alternative. Anordnung der Ausführungsform der 2, 5 und 6 kann ausgeführt werden, indem die Blöcke 120–127 der 6 entfernt werden und der JA-Zweig des Blocks 104 direkt zum Block 130 rückgeführt wird. Wenn drei oder mehr Lauf-Zeichen zu verarbeiten bleiben, wird die Steuerung neuerlich in den Block 100 der 6 eintreten, nachdem die Blöcke 43 und 44 der 2 durchquert wurden.
  • Nimmt man auf die 7 Bezug, und zwar unter anhaltendem Bezug auf die Figuen 2, 5 und 6, wird ein Beispiel des Betriebs des Komprimierers 80 in Übereinstimmung mit den Flussdiagrammen der 2 und 6 dargestellt. Das Format der 7 gleicht dem der 4, und Beschreibungen, die oben mit Bezug auf 4 abgegeben werden, sind anwendbar. Derselbe in der 4 dargestellte Datenzeichenstrom wird in der 7 verwendet. Die Aktionen 1–8 der 7 sind identisch mit den Aktionen 1–8 der 4, und die oben mit Bezug auf die 4 abgegebenen Beschreibungen sind anlegbar.
  • In den Aktionen 9-12 werden die Lauf-Zeichen "a(5)" bis "a(14)" verarbeitet, indem die Schleife verwendet wird, der sich aus den Blöcken 104–111 der 6 zusammensetzt. In den Aktionen 13 und 14 wird der Rest des Laufs verarbeitet, indem die Blöcke 120–127 der 3 mit den Zeichen "a(6)" bis "a(7)" in der Aktion 14 verworfen werden.
  • Auf eine ähnliche Art und Weise wird der Lauf des Zeichens "b" in den Aktionen 15–18 verarbeitet.
  • In der Aktion 19 kehrt die Steuerung zur LZW-Verarbeitung züzurck.
  • Detailliertere Beschreibungen der Aktionen der 7 in Bezug auf die Blöcke der 2 und 6 werden ohne weiteres ersichtlich und werden um der Kürze willen nicht bereitgestellt.
  • Nimmt man auf die 8 Bezug, und zwar mit anhaltendem Bezug auf die 1, 2 und 5, wird ein schematisches Blockdiagramm einer alternativen bevorzugten Ausführungsform der vorliegenden Erfindung dargestellt. Die 8 veranschaulicht einen Datenkomprimierer 140, der eine Reihe an Komponenten hat, die den oben mit Bezug auf die 1 und 5 beschriebenen ähneln und denen dieselben Bezugszeichen wie in den 1 und 5 gegeben werden. Ihre Beschreibungen, die oben mit Bezug auf die 1 und 5 bereitgestellt werden, sind allgemein an der 8 anwendbar.
  • Der Komprimierer 140 schließt auch Arbeitsregister ein, die als ein L-Register 141 und ein T-Register 142 bezeichnet werden, um Veränderliche, die im Betrieb des Komprimierers 140 auf eine mit Bezug auf die 9 zu beschreibende Art und Weise verwendet werden, zu halten. Der Komprimierer 140 schließt weiterhin eine n-Berechnungslogik 143, L-Berechnungslogik 144, T-Berechnüngslogik 145 und D-Berechnungslogik 146 ein, um Läufe auf eine mit Bezug auf die 8 zu beschreibende Art und Weise zu σerarbeiten. Der Komprimierer 140 schließt auch eine Steuerung 147 ein, um die Betriebe des Komprimierers 140 in Übereinstimmung mit den Betriebsflussdiagrammen der 2 und 9 zu steuern, und zwar auf eine Art und Weise, die beschrieben werden wird.
  • In Kürze, ist der Betrieb des Komprimierers 140 allgemein derselbe wie der oben mit Bezug auf die Komprimierer 10 und 80 beschriebene Betrieb, wenn man von der Art und Weise absieht, mit der die Lauf-Verarbeitung durchgeführt wird. Wie oben beschrieben, läßt sich das Betriebsflussdiagramm der 2 auch am Komprimierer 140 anlegen, wobei die Lauf-Verarbeitungslogik 45 vom Betriebsflussdiagramm der 9 implementiert wird. Ein Lauf wird verarbeitet, indem an der Anzahl der Zeichen im Lauf eine Gleichung angelegt wird, um die Anzahl der Segmente zu bestimmen, die im Lauf existieren. Eine weitere Gleichung wird verwendet, damit die Erzielung einer Zählung für den Code-Zähler 20 bestimmt wird, um diese Segmente darzustellen. Eine weitere Gleichung der quadratischen Art wird angelegt, um die Anzahl der Zeichen zu bestimmen, die verarbeitet werden, wodurch eine Grundlage für die zu verwerfende Anzahl von Zeichen bereitgestellt wird. Der Code-Zähler 20 wird sequentiell erhöht und die Codes darin werden ausgegeben, bis der Code-Zähler 20 die Zählung erzielt, die von den Gleichungen bestimmt wird.
  • Nachdem dieses Verfahren durchgeführt wird, wird die verarbeitete berechnete Anzahl der Zeichen von der Anzahl der Zeichen des Laufs subtrahiert, und wenn drei oder mehr Zeichen zu verarbeiten bleiben, wird das Zeichen, das im Aktuellen Zeichenregister 13 liegt, ausgegeben, und der Code-Zähler 20 wird wiederum um 1 vorgerückt. Das Berechnungsverfahren wird rückgesetzt, indem die Anzahl der im Lauf gebliebenen Zeichen an die Gleichungen angelegt wird, bis weniger als drei Lauf-Zeichen verbleiben.
  • Die Register 13, 15, 17, 84, 141 und 142, die Puffer 81 und 82, der Code-Zähler 20 und die Logik 85, 86, 88 und 143-146 werden bei der Durchführung der Zeichen-Lauf-Verarbeitung verwendet, wie es unten mit Bezug auf die 2 und 9 erläutert wird. Die Steuerflussdiagramme der 2 und 9 veranschaulichen die vom Komprimierer 140 auszuführenden detaillierten Betriebe, um die Datenkompression in Übereinstimmung mit der Erfindung durchzuführen. Die oben mit Bezug auf die 2 abgegebenen Beschreibungen lassen sich auch am Komprimierer 140 anlegen, wenn man davon absieht, dass die Lauf-Verarbeitungslogik 45 vom Betriebsflussdiagramm der 9 durchgeführt wird. Es wird angenommen, dass die Steuerung 147 die richtige Schaltung wie beispielsweise Zustandsvorrichtungen enthält, um die Durchführung der Betriebe zu steuern.
  • Nimmt man auf die 9 Bezug, wird mit anhaltendem Bezug auf die 2 und 8 ein Steuerflussdiagramm veranschaulicht, das die Details der in der Ausführungsform der 8 verwendeten Lauf-Verarbeitungslogik 45 darstellt. Vor der Beschreibung der Details der 9 sollte geschätzt werden, dass die dargestellten Berechnungen auf der Gleichung für die Summe der ersten n Nummern wie folgt basieren: S(n) = 1 + 2 + 3 + 4 + ... + n = [(n(n + 1))/2]
  • Wie oben erörtert, kann ein Lauf betrachtet werden, als bestehe er aus benachbarten, numerisch steigenden Lauf-Segmenten, worin das erste Segment eines einzelnen Zeichens im Aktuellen Zeichenregister 13 gehalten wird, Dem Aktuellen Zeichen folgen benachbarte Lauf-Segmente von 2 Zeichen, 3 Zeichen, 4 Zeichen, ..., n Zeichen. Es wird geschätzt sein, dass im Lauf weitere Zeichen vorhanden sein können; jedoch ist die Anzahl der weiteren Zeichen kleiner als n + 1. Es wird daher geschätzt sein, dass R, die Anzahl der Zeichen im Lauf gleich S(n) plus die Anzahl der weiteren Zeichen ist. Es wird darüber hinaus geschätzt sein, dass die oben abgegebene quadratische Gleichung in n im Sinne von S für n gelöst werden kann, indem die Lösung der quadratischen Gleichung zum Erhalten der Wurzeln davon verwendet wird. Eine Wurzel der Gleichung ist: n = [((8S + 1)1/2 – 1)/2].
  • Es wird beobachtet, dass, wenn diese Gleichung für n an die Anzahl der Zeichen in einem Lauf angelegt wird, der ganzzahliger Teil der rechten Seite der Gleichung das größte Lauf-Segment in der benachbarten Sequenz der im Lauf existierenden Segmente ergibt. Auf eine zu beschreibende Art und Weise wird diese Anzahl verwendet, um die Sequenz der Codes aus dem Code-Zähler zu erhalten, damit die jeweiligen benachbarten Segmente des Laufs dargestellt werden. Diese Anzahl wird auch bei der Verarbeitung der verbliebenen Zeichen des Laufs verwendet, und zwar auf eine Art und Weise, die beschrieben werden wird. Der Lauf-Verarbeitung der 9 liegt die detailliert in der S.N. 09/300.810 mit Bezug auf die Ausführungsform der 2, 6 und 7 beschriebene Lauf-Verarbeitung zugrunde.
  • Mit anhaltendem Bezug auf 9 wird an einem Block 160 das Zeichen im Aktuellen Zeichenregister 13 an der Ausgabe 12 bereitgestellt. Es wird anerkannt werden, dass, obwohl dieses Zeichen ausgegeben wurde, es dennoch im Aktuellen Zeichenregister 13 vorliegt.
  • Die Verarbeitung rückt auf einen Block 161 vor, wobei das R-Register 83 auf 1 plus die Anzahl der aufeinanderfolgenden Zeichen gesetzt wird, die dem Aktuellen Zeichen folgert und dieselben sind wie das Aktuelle Zeichen. Die Lauf-Erwerbslogik 86 wird verwendet, um diese Funktion durchzuführen. Jede Pufferung, die im Lauf-Erwerbsverfahren benötigt wird, wird vom Lauf-Puffer 82 bereitgestellt. Es wird geschätzt sein, dass die Zeichen des Laufs von der Lauf-Erwerbslogik 86 aus dem Eingabe-Zeichen-Puffer 30 über den Bus 31 unter der Steuerung des Komprimierers 140 erworben werden, der den Steuerbus 32 verwendet. Solchermaßen wird am Block 161 die Anzahl der Zeichen im Lauf in das R-Register 83 eingegeben, die am Block 44 der 2 erfasst wird. Das Aktuelle Zeichenregister 13 hält den Wert des Lauf-Zeichens.
  • Die Steuerung macht an einem Block 12 weiter, wobei das D-Register 84 bei Null initialisiert wird. Bei der Verarbeitung der 9 wird das. D-Register 84 die Anzahl der Lauf-Zeichen akkumulieren, die verworfen werden sollen, nachdem sie verarbeitet wurden.
  • Die Verarbeitung macht an einem Block 163 weiter, in dem mittels Verwendung der Logik 143 der 8 R in der obigen Gleichung für n verwendet wird, um bereitzustellen: n = ganzzahliger Teil von [((8R + 1)1/2 – 1)/2)].
  • Solchermaßen erzeugt der Block 163 die Veränderliche n, die für die Anzahl der Zeichen im größten Segment der Zeichen sorgt, die in der benachbarten Segmentsequenz des Laufs existieren, und die auch für eine Anzeige der Anzahl dieser Segmente sorgt, die den Lauf umfassen. Der Lauf von n liegt im n-Register 17.
  • An einem Block 164 wird n verwendet, um die Veränderliche L abzuleiten, die den Code im Code-Zähler 20 darstellt, der als nächster verfügbar ist, nachdem die Codes auf eine zu beschreibende Art und Weise vom Code-Zähler 20 den benachbarten jeweiligen Segmenten des Laufs zugewiesen werden. Die Logik 144 der 8 wird verwendet, um L wie folgt abzuleiten: L = [ (Code + n) – 1] worin der Code der Code ist, der im Code-Zähler 20 vorhanden ist, wenn die Steuerung in den Block 164 eintritt. Der Wert von L liegt im L-Register 141.
  • Die Verarbeitung rückt auf einen Block 165 vor, worin eine Veränderliche T abgeleitet wird, indem die Logik 145 der 8 verwendet wird. Die Veränderliche T stellt die Anzahl der Zeichen im Lauf dar, die, von der Veränderlichen n, wie sie vom Block 163 erhalten wird, abgeleitet, verarbeitet wird. Die Veränderliche T stellt daher die Summe der Zeichen des Laufs in den benachbarten Lauf-Segmenten dar, die 1 Zeichen, 2 Zeichen, 3 Zeichen, 4 Zeichen, ..., n Zeichen umfassen. Die Logik 145 stellt T wie folgt bereit: T = [(n – (n + 1))/2].
  • Die Veränderliche T wird auf eine zu beschreibende Art und Weise verwendet werden, um weitere Zeichen im Lauf zu verarbeiten und um die Veränderliche D zu erzeugen, die die Anzahl der zu verwerfenden verarbeiteten Lauf-Zeichen darstellt. Die Veränderliche T liegt im T-Register 142 der 8.
  • Die Verarbeitung macht an einem Block 166 weiter, wobei die Veränderliche hergeleitet wird, indem die Logik 146 der 8 verwendet wird. Die Logik 146 stellt D wie folgt bereit: D = D + (T – 1).
  • Die Veränderliche T wird um 1 verringert, um die Ausgabe des Aktuellen Zeichens am Block 160 zu erledigen. Die Veränderliche D liegt im D-Register 84 der 8 und wird verwendet, um die verarbeiteten zu verwerfenden Zeichen zu akkumilieren, wenn die Iterationen der Logik der 9 durchgeführt werden.
  • Die Verarbeitung macht an einem Block 170 weiter, wobei der Code im Code-Zähler 20 ausgegeben wird. Dieser Code stellt eines der, Segmente im Lauf dar, das verarbeitet wird. Danach wird die oben mit Bezug auf die Blöcke 54 und 55 der 2 beschriebene Code-Längenprüfung an den Blöcken 171 und 172 durchgeführt. An einem Block 173 wird der Code-Zähler 20 um 1 inkrementiert.
  • An einem Block 174 wird der Code im Code-Zähler 20 mit L verglichen, um zu bestimmen, ob alle Codes den jeweiligen Segmenten des Laufs zugewiesen wurden. Wenn der Code im Code-Zähler 20 ungleich L ist, kehrt der NEIN-Zweig zum Block 170 zurück, um das Verfahren fortzusetzen.
  • Es wird geschätzt sein, dass die Schleife, die sich aus den Blöcken 170–174 zusammensetzt, eine Sequenz von Codes ausgibt, die jeweils der Sequenz der Segmente entspricht, die mathematisch in den Blöcken 163–166 bestimmt wird, um im erfassten Lauf vorhanden zu sein. Wenn der Code im Code-Zähler 20 den Wert L erlangt, wird der JA-Zweig vom Block 174 zu einem Block 180 genommen.
  • Am Block 180 wird die Veränderliche R im R-Register 83 auf R-T gesetzt. Solchermaßen wurde die Veränderliche R rückgesetzt, um mathematisch die im Lauf verbliebenen Zeichen zu verarbeiten.
  • Entsprechend wird an einem Block 181 R mit 3 verglichen. Wenn R gleich oder größer als 3 ist, kann die weitere Verarbeitung des erfassten Laufs durchgeführt werden, indem die Blöcke 163–166 und 170–174 verwendet werden. Wenn R gleich oder größer als 3 ist, wird solchermaßen der NEIN-Zweig vom Block 181 zu einem Block 182 genommen, worin die Veränderliche D im D-Register 84 um 1 inkrementiert wird. Die Steuerung rückt auf die Blöcke 183 und 184 vor, wobei die oben mit Bezug auf die Blöcke 54 und 55 erörterte Code-Längen-Logik durchgeführt wird. An einem Block 185 wird der Code-Zähler 20 um 1 inkrementiert, und an einem Block 186 wird das Zeichen im Aktuellen Zeichenregister 13 ausgegeben. Es wird geschätzt sein, dass die Veränderliche D am Block 182 um 1 inkrementiert wird, um die Aktuelle Zeichenausgabe am Block 186 zu erledigen.
  • Die Steuerung kehrt dann zum Block 163 zurück, worin der am Block 180 abgeleitete Wert von R wie oben beschrieben mit Bezug auf die Blöcke 163–166 und 170–174 verwendet wird, um weitere Codes zu erzeugen, die den Segmenten im Lauf entsprechen. Es wird jedoch geschätzt sein, dass das mathematische Verfahren dieser Blöcke an einem Lauf einer Länge R-T angelegt wird, wenn die Steuerung vom Block 186 zu den Blöcken 163–166 und 170–174 zurückkehrt.
  • Wenn die Veränderliche R am Block 180 auf einen Wert verringert wurde, der kleiner als 3 ist, wird der JA-Zweig vom Block 181 zu einem Block 190 genommen. Die Blöcke 190–194 führen dieselben Funktionen durch, die oben mit Bezug auf die Blöcke 130–134 der 6 beschrieben werden, und die oben mit Bezug darauf abgegebenen Beschreibungen sind an den Blöcken 190–194 der 9 anwendbar. Zusammengefaßt, werden die D-Zeichen, die dem Aktuellen Zeichen folgen, verworfen, die oben erörterte Code-Längen-Logik- durchgeführt, der Code-Zähler 20 um 1 inkrementiert und das nächste Zeichen, das den verworfenen Zeichen folgt, in das Aktuelle Zeichenregister 13 geholt.
  • Auf eine oben mit Bezug auf die 6 beschriebene ähnliche Art und Weise kann eine weitere Ausführungsform ausgeführt werden, indem die Blöcke 180–186 ausgeschaltet und der JA-Zweig vom Block 174 direkt mit dem Block 190 verbunden wird.
  • Nimmt man auf 10 Bezug, wird mit anhaltendem Bezug auf die 2, 8 und 9 ein Beispiel für den Betrieb des Komprimierers 140 in Übereinstimmung mit den Flussdiagrammen der 2 und 9 dargestellt. Das Format der 10 gleicht dem der 4 und 7, und die oben mit Bezug auf die 4 und 7 abgegebenen Beschreibungen sind anwendbar. In 10 wird derselbe Datenzeichenstrom verwendet, der in den 4 und 7, dargestellt wird. Aktionen 1–8 und 19–22 veranschaulichen die LZW-Verarbeitung, die oben mit Bezug auf ähnlich nummerierte Aktionen der 4 und 7 beschrieben wird. Die Lauf-Verarbeitung der Aktionen 9–18 gleicht der Lauf-Verarbeitung der ähnlich nummerierten Aktionen der 47, wenn man davon absieht, dass in der 10 die Verarbeitung der quadratischen Gleichung der 9 und nicht die Lauf-Verarbeitung- der 3 und 6 verwendet wird, wie sie jeweils in den 4 und 7 verwendet wurde.
  • Detailliertere Beschreibungen der Aktionen der 10 in Bezug auf die Blöcke der 2 und 9 werden sofort ohne weiteres und werden um der Kürze willen nicht bereitgestellt.
  • Mit weiterem Bezug auf die 4, 7 und 10 wird angemerkt, dass derselbe eingegebene Datenzeichenstrom für die drei beispielhaft dargelegten unterschiedlichen Algorithmen zum selben ausgegebenen komprimierten Codestrom führt. Es wird angemerkt, dass für die Lauf-Verarbeitung der Aktionen 9–18 keine Wörterbuchzugriffe bewerkstelligt werden.
  • Alle oben beschriebenen Ausführungsformen werden von einer Ausgabe veränderliche Zange abhängig gemacht. Es wird geschätzt sein, dass die Ausführungsformen von einer festgelegten Ausgabe veränderlicher Länge von beispielsweise 12 Bits abhängig gemacht werden können, wie gut bekannt ist. In solchen Ausführungsformen würden das Code-Längen-Register 15 sowie die Code-Längen-Prüfblöcke 54 und 55 der 2 und die entsprechenden Blöcke der 3, 6 und 9 nicht verwendet werden.
  • Es wird geschätzt sein, dass in den oben beschriebenen Ausführungsformen der in das n-Register 17 am Block 43 der 2 gesetzte Wert von n die Lauf-Erfassungsempfindlichkeit des Systems bestimmt. Die Veränderliche n sollte auf mindestens gleich 2 eingestellt werden. Je niedriger der Wert, auf den n gesetzt wird, desto empfindlicher wird das System bei der Erfassung des Vorliegens eines Zeichen-Laufs sein.
  • In der Ausführungsform der 13 wird jedoch angemerkt, dass n am Block 43 auf 2 gesetzt werden sollte. Dies geschieht, da die Betriebe des Flussdiagramms der 3 von der Ausgabe des Codes am Block 61 basieren, der den zwei Zeichen-Lauf-Segmenten entspricht, die dem Aktuellen Zeichen folgen. In der Ausführungsform der 2, 5 und 6 und in der Ausführungsform der 2, 8 und 9 kann n am Block 43 der 2 auf 2 oder mehr gesetzt werden. Dies geschieht, da am Block 102 in der 6 n auf 2 rückgesetzt wird, um die richtige Verarbeitung in der anschließenden Logik der 6 zu gewährleisten. In der 9 wird n am Block 163 auch auf den richtigen Wert gesetzt.
  • Aus dem obigen wird man anerkennen, dass die Vorgriffs-Puffer 16 und die Logik 21 der 1 irgendwie anders arbeiten als der Vorgriffs-Puffer 81 und die Logik 85 der 5 und 8. In der Ausführungsform der 1 wird die Vorgriffs-Funktion sowohl in der Lauf-Erfassungsfunktion des Blocks 44 der 2 als auch in der Lauf-Verarbeitungslogik des Blocks 67 der 3 verwendet. In den Ausführungsformen der 5 und 8 wird die Vorgriffs-Funktion nur in der Lauf-Erfassung des Blocks 44 der 2 verwendet.
  • Mit Bezug auf die Ausführungsformen der 5 und der 8, existieren, wie oben mit Bezug auf die 6 und 9 erörtert, kleinere funktionelle Unterschiede, obwohl dem Lauf-Puffer 82, dem R-Register 83 und der Lauf-Erwerbslogik 86 dieselben Bezugsziffern verliehen werden. Wenn ein Lauf erfasst wurde und die Logik der Figur 6 verwendet wird, wird R auf die Anzahl der aufeinanderfolgenden Lauf-Zeichen gesetzt, die dem Aktuellen Zeichen folgen und dieselben sind wie das Aktuelle Zeichen. Dies kann man im Block 101 der 6 sehen. Wenn jedoch die Logik der 9 verwendet wird, wird R auf die Anzahl der Zeichen im Lauf gesetzt, und zwar einschließlich dem Aktuellen Zeichen, wie im Block 161 der 9 zu sehen ist. Es wird ohne weiteres ersichtlich, dass zwischen diesen Komponenten der 5 und 8 kleinere Unterschiede bestehen, um dieses Betriebsmerkmal unterzubringen.
  • Es wird geschätzt sein, dass ohne weiteres ein kompatibler Dekomprimierer bereitgestellt werden kann, der die komprimierte Ausgabe des Komprimierers 10, 80 oder 140 empfängt, indem er synchron damit arbeitet, damit die dazu entsprechenden eingegebenen Datenzeichen wiedergewonnen werden. Wenn die Sequenz der Ausgabecodes, wie in den "AUSGABE"-Spalten der 4, 7 und 10 skizziert, vom Dekomprimierer verarbeitet wird, wird der in den Zeichnungen dargestellte eingegebenen Datenzeichenstrom zurückgewonnen.
  • Es versteht sich, dass die Protokolle des Dekomprimierers mit denen des Komprimierers kompatibel sein sollten. In den Beispielen der 4, 7 und 10 wird angenommen, dass ein ASCII-Alphabet von 8 Bits unterstützt wird. Das ASCII-Alphabet setzt sich aus 256 Zeichen zusammen. Der Code-Zähler 20 wird am Block 40 der 2 auf einem Code von 258 initialisiert. Der Code 257 kann beispielsweise als ein Steuercode verwendet werden, wie es im Stand der Technik verständlich ist. Der Dekomprimierer sollte dieselben Alphabet-Länge und anfänglichen Bedingungen wie beispielsweise den anfänglichen Code-Zähler-Wert und die anfängliche Code-Länge wie der Komprimierer haben. Wie im Stand der Technik ebenfalls anerkannt, sollten darüber hinaus die Code-Länge der Komprimierer-Ausführungsformen der vorliegenden Erfindung und die Code-Länge des Dekomprimierers synchron zueinander vorgerückt werden.
  • Wie gut bekannt ist, können der Komprimierer und der Dekomprimierer entweder mit allen einzelnen Zeichen-Folgen initialisiert werden, oder die einzelnen Zeichen können sich von komprimierten Codes durch ihre jeweiligen Werte unterscheiden. Ein ASCII-Zeichen hat einen Wert, der gleich oder kleiner als 256 ist, wohingegen in den ASCII-Beispielen der 4, 7 und 10 die komprimierten Codes einen Wert haben, der gleich oder größer als 258 ist. Es ist darüber hinaus gut bekannt, dass auch andere Einzelzeichen-Codeprotokolle verwendet werden können. Das Einzelzeichen-Codeprotokoll, das in den Komprimierer-Ausführungsformen der vorliegenden Erfindung verwendet wird, sollte im Dekomprimierer verwendet werden.
  • Es ist anerkannt, dass der Code-Zähler 20 wie oben beschrieben, inkrementiert wird, um die Abstimmung zwischen der Lauf- und der Nicht-Lauf-Verarbeitung zu erhalten. Dies ist vor allem an den Blöcken 64, 72, 108, 123, 133, 173, 185 und 193 der oben beschriebenen Figuren ersichtlich.
  • Die obigen Ausführungsformen komprimieren den Strom der eingegebenen Datenzeichen. Die eingegebenen Datenzeichen können einem Alphabet irgendeiner Länge angehören, das über irgendeine entsprechende Zeichen-Bit-Länge verfügt. Die Datenzeichen können z. B. wörtlich, beispielsweise ASCII-Zeichen in einem Alphabet wie beispielsweise das 256 Zeichen-ASCII-Alphabet von acht Bit Zeichen sein. Die eingegebenen Daten könne auch Binärzeichen im Zwei-Zeichen-Binäralphabet 1 und 0 sein, das über ein Zeichen der Länge eines Bits verfügt. Es wird geschätzt sein, dass die wörtlichen Daten im Zwei-Zeichen-Alphabet der unterliegenden Binärdaten komprimiert werden können.
  • Es wird geschätzt sein, dass die oben beschriebenen Ausführungsformen der Erfindung in der Hardware, Firmware, Software oder einer Kombination davon implementiert sein können. Diskrete Schaltkomponenten können ohne weiteres implementiert werden, indem die verschiedenen beschriebenen Funktionen durchgeführt werden. In einer Software-Ausführungsform können geeignete Module verwendet werden, die mit der ohne weiteres aus den oben beschriebenen Flussdiagrammen erzeugten Codierung programmiert werden.
  • Die Lauf-Verarbeitungsalgorithmen der 3, 6 und 9 werden oben gemäß der Verwendung eines LZW-Datenkompressionssystems beschrieben. Es wird geschätzt sein, dass diese Algorithmen im wesentlichen System-unabhängig und alleine oder in Kombination mit einer Vielfalt an Systemen verwendet werden können.
  • Obwohl die Erfindung in ihren bevorzugten Ausführungsformen beschrieben wurde, sollte es verständlich sein, dass die Worte, die verwendet wurden, beschreibende und nicht einschränkende Worte sind, und dass Änderungen innerhalb der Tragweite der anliegenden Ansprüche vorgenommen werden können, ohne sich vom wahren Schutzumfang der Erfindung in ihren weitesten Aspekten zu lösen.

Claims (28)

  1. Ein Datenkompressionsverfahren zum Komprimieren eines Eingabestroms von Datenzeichen in einen Ausgabestrom von komprimierten Codes, wobei das Verfahren ein LZW-Datenkompressionsverfahren einschließt, wobei das LZW-Datenkompressionsverfahren das Speichern von Folgen von Datenzeichen, das Zuweisen von jeweiligen Codes an die gespeicherten Folgen von einem Code-Zähler, und das Inkrementieren des Code-Zählers für jede gespeicherte Folge einschließt, wobei das Verfahren folgendes umfasst: das Erfassen, wann ein Lauf von Datenzeichen im Eingabestrom erfolgt, indem erfasst wird, wann eine vorbestimmte Anzahl von angrenzenden Datenzeichen des Eingabestroms in Bezug aufeinander gleich sind, wobei der erfasste Lauf benachbarte, numerisch steigende Segmente einschließt, wobei ein Segment ein Datenzeichen weniger hat als das folgende angrenzende Segment des erfassten Laufs, das Bestimmen, dass aufeinanderfolgende Codes aus dem Code-Zähler jeweils den benachbarten Segmenten des erfassten Laufs entsprechen, das Verwenden des LZW-Datenkompressionsverfahrens, um den Eingabestrom zu komprimieren, wenn erfasst wird, dass ein Lauf darin nicht auftritt, indem der Eingabestrom mit den gespeicherten Folgen verglichen wird, um die längsten Übereinstimmungen damit zu bestimmen, und um die dazu zugewiesenen Codes zur Verfügung zu stellen, wodurch die komprimierten LZW-Codes bereitgestellt werden, und das Ausgeben des Datenzeichens des erfassten Laufs und der aufeinanderfolgenden Codes, die den benachbarten Segmenten entsprechen, und das Ausgeben der komprimierten LZW-Codes, um den Ausgabestrom bereitzustellen.
  2. Das Verfahren nach Anspruch 1, worin der Bestimmungsschritt den Vorgriff in den Eingabestrom umfasst, wenn der Lauf erfasst wird, um die im Lauf existierenden benachbarten, numerisch steigenden Segmente zu erfassen, und das Zuweisen der auf einanderfolgenden Codes aus dem Code-Zähler jeweils an die erfassten benachbärten Segmente umfasst; oder worin der Bestimmungsschritt das Bestimmen einer Anzahl umfasst, die die Anzahl der Datenzeichen im erfassten Lauf repräsentiert, und das mathematische Bestimmen der aufeinanderfolgenden Codes aus dem Code-Zähler, die jeweils den benachbarten Segmenten des erfassten Laufs entsprechen, mittels eines mathematischen Algorithmus, der die repräsentative Anzahl verwendet, umfasst.
  3. Das Verfahren nach Anspruch 2, erste Alternative, worin der erfasste Lauf ein letztes Segment einschließt, das ein Datenzeichen mehr als dasvorherige angrenzende Segment des erfassten Laufs hat, das weiterhin folgendes einschließt das Erfassen, dass der Eingabestrom, der dem letzten Segment folgt, eine ungenügende Anzahl von angrenzenden Datenzeichen enthält, die dieselben sind wie das Datenzeichen des erfassten Laufs, um ein nächstes aufeinanderfolgendes angrenzendes Segment zu füllen; und das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, nachdem die ungenügende Anzahl von Datenzeichen erfasst wurde, wobei das Verfahren weiterhin vorzugsweise das Verwerfen der Datenzeichen eines jeden Segments des erfassten Laufs einschließt, für die ein zugewiesener Code ausgegeben wird, und/ oder weiterhin vorzugsweise die Fortsetzung des Verfahrens mit dem nächsten Datenzeichen des Eingabestroms einschließt, der den verworfenen Zeichen des letzten Segments folgt.
  4. Das Verfahren nach Anspruch 2, zweite Alternative, worin der erfasste Lauf weiterhin Datenzeichen einschließt, die den benachbarten Segmenten folgen, wobei die weiteren Datenzeichen einen Lauf bilden, der weitere benachbarte, numerisch steigende Segmente einschließt, wobei das Verfahren weiterhin, das Ausgeben der Datenzeichen des erfassten Laufs, das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das rekursive Verwenden des mathematischen Algorithmus, indem die Anzahl der weiteren Datenzeichen verwendet wird, um mathematisch weitere aufeinanderfolgende Codes aus dem Code-Zähler zu bestimmen, die jeweils den weiteren benachbarten Segmenten entsprechen, und das Ausgeben der weiteren aufeinanderfolgenden Codes einschließt; oder worin die Schritte zur mathematischen Bestimmung und zur Ausgabe die Initialisierung von einem Index, der die Anzahl der Datenzeichen in einem Segment bezeichnet, die Ausgabe des Codes im Code-Zähler und das Inkrementieren des Code-Zähler auf einen nächsten folgenden Code, das Verringern der repräsentativen Anzahl mittels der Subtraktion des Index davon, das Inkrementieren vom Index um 1, das Vergleichen der verringerten repräsentativen Anzahl mit dem inkrementierten Index und das Wiederholen der oben gegebenen Schritte von der Ausgabe des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index einschließt, bis die verringerte repräsentative Anzahl kleiner ist als der inkrementierte Index; oder weiterhin das Verwerfen der Datenzeichen des Segments des erfassten Laufs, für den entsprechende Codes ausgegeben werden, das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, und das Fortsetzen des Verfahrens mit dem nächsten Datenzeichen des Eingabestroms einschließend, der den verworfenen Datenzeichen folgt; oder worin die Schritte zur mathematischen Bestimmung und zur Ausgabe das Initialisieren eines Index, der die Anzahl der Datenzeichen in einem Segment bezeichnet, das Initialisieren einer Verwerfanzahl, die Ausgabe des Codes im Code-Zähler und das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Erhöhen der Verwerfanzahl durch das Hinzufügen des Index dazu, das Verringern der repräsentativen Anzahl durch die Subtraktion des Index davon, das Inkrementieren vom Index um 1, das Vergleichen der verringerten repräsentativen Anzahl mit dem inkrementierten Index, und das Wiederholen der oben gegebenen Schritte von der Ausgabe des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index einschließt, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist, wobei das Verfahren weiterhin das Verwerfen der Datenzeichen des erfassten Laufs in Übereinstimmung mit der Verwerfanzahl, das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, und das Fortsetzen des Verfahrens mit dem nächsten Datenzeichen des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt; oder worin die Schritte zur mathematischen Bestimmung und Ausgabe das Durchführen einer ersten Berechnung mittels Verwendung einer ersten Gleichung, das Berechnen der Anzahl an im ersten erfassten Lauf eingeschlossenen benachbarten, numerisch steigenden Segmenten gemäß der repräsentativen Anzahl, das Durchführen einer zweiten Berechnung, die einen Grenzwert berechnet, indem eine zweite Gleichung verwendet wird, die das Addieren der Anzahl der benachbarten Segmente zum Code im Code-Zähler einschließt, und die Ausgabe des Codes im Code-Zähler und die Inkrementierung des Code-Zählers auf einen nächsten folgenden Code einschließt, bis der nächste folgende Code mit dem Grenzwert gleicht ist.
  5. Das Verfahren nach Anspruch 4, zweite Alternative, das wenn die verringerte repräsentative Anzahl kleiner als der inkrementierte Index, aber nicht kleiner als 3 ist, die folgenden Schritte einschließt: das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Ausgeben des Datenzeichens des erfassten Laufs, das Neu-Initialisieren des Index, und das Wiederholen der Schritte für das Ausgeben des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist, und das vorzugsweise weiterhin den Schritt zum Verkleinern der verringerten repräsentativen Anzahl um 1 einschließt.
  6. Das Verfahren nach Anspruch 4, vierte Alternative, das, wenn die verringerte repräsentative Anzahl kleiner als der inkrementierte Index, aber nicht kleiner als 3 ist, die folgenden Schritte einschließt: das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Ausgeben des Datenzeichens des erfassten Laufs, das Neu-Initialisieren des Index, und das Wiederholen der Schritte des Ausgebens des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist.
  7. Das Verfahren nach Anspruch 6, das weiterhin den Schritt zum Verringern der verringerten repräsentativen Anzahl um 1 einschließt und vorzugsweise weiterhin den Schritt zum Inkrementieren der Verwerfanzahl um 1 einschließt.
  8. Das Verfahren nach Anspruch 4, fünfte Alternative, das weiterhin die Durchführung einer dritten Berechnung einschließt, die eine dritte Gleichung verwendet, die eine Verwerfanzahl gemäß der in der ersten Berechnung berechneten Anzahl berechnet.
  9. Das Verfahren nach Anspruch 8, das, wenn der nächste folgende Code mit dem Grenzwert gleich ist, folgende Schritte einschließt: das Verringern der repräsentativen Anzahl um die Verwerfanzahl und das Durchführen der folgenden Schritte, wenn die verringerte repräsentative Anzahl nicht kleiner als 3 ist, das Ausgeben des Datenzeichens des erfassten Laufs, das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Verwenden der verringerten repräsentativen Anzahl in der ersten Gleichung, um die erste Berechnung neu zu berechnen, das Neu-Berechnen des Grenzwerts mittels Verwendung der zweiten Gleichung, die an das Ergebnis der neu-berechneten ersten Berechnung angelegt wird, und das Ausgeben des Codes im Code-Zähler und das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, bis der nächste folgende Code mit dem neu-berechneten Grenzwert gleich ist, und und das vorzugsweise weiterhin den Schritt zum Neu-Berechnen der Verwerfanzahl mittels Verwendung der dritten Gleichung, die an das Ergebnis der neu-berechneten ersten Gleichung angelegt wird, einschließt.
  10. Das Verfahren nach Anspruch 8, worin die erste Gleichung umfasst n = ganzzahliger Teil von [((8R + 1)12 – 1)/2)] worin n die Anzahl der benachbarten Segmente ist, die im erfassten Lauf eingeschlossen sind, und R die repräsentative Anzahl ist, wobei die zweite Gleichung umfasst L = [(Code + n) – 1] worin L der Grenzwert ist und Code der Code im Code-Zähler ist, und wobei die dritte Gleichung folgendes umfasst T = [(n(n + 1))/2] worin T die Verwerfanzahl ist.
  11. Das Verfahren nach Anspruch 8, worin die Schritte zur mathematischen Bestimmung und zur Ausgabe weiterhin die Initialisierung einer akkumulierten Verwerfanzahl und das Erhöhen der akkumulierten Verwerfanzahl um die von der dritten Berechnung berechneten Verwerfanzahl einschließt.
  12. Das Verfahren nach Anspruch 9, worin die Schritte zur mathematischen Bestimmung und zur Ausgabe weiterhin die Initialisierung einer akkumulierten Verwerfanzahl und das Erhöhen der akkumulierten Verwerfanzahl um die Verwerfanzahl und die neuberechnete Verwerfanzahl einschließt, und worin vorzugsweise, wenn der nächste folgende Code mit dem Grenzwert gleich ist und wenn die verringerte repräsentative Anzahl nicht kleiner als 3 ist, die Schritte zur mathematischen Bestimmung und zur Ausgabe weiterhin das Inkrementieren der akkumulierten Verwerfanzahl um 1 einschließen.
  13. Das Verfahren nach den Ansprüchen 11 oder 12, das weiterhin das Verwerfen der Datenzeichen des erfassten Laufs in Übereinstimmung mit der akkumulierten Verwerfanzahl, das Inkre mentieren des Code-Zählers auf einen nächsten folgenden Code, und das Fortsetzen des Verfahrens mit einem nächsten Datenzeichen des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt.
  14. Das Verfahren nach einem oder mehreren der Ansprüche 1-13, worin die vorbestimmte Anzahl an angrenzenden Datenzeichen drei Datenzeichen umfasst.
  15. Datenkompressionsgerät zum Komprimieren eines Eingabestroms von Datenzeichen in einen Ausgabestrom komprimierter Codes, wobei das Gerät einen LZW-Datenkomprimierer einschließt, wobei der LZW-Datenkomprimierer ein Wörterbuch zum Speichern von Folgen von Datenzeichen, einen Code-Zähler zum Zuweisen der jeweiligen Codes an die gespeicherten Folgen und ein Mittel zum Inkrementieren des Code-Zählers für jede der gespeicherten Folgen einschließt, wobei das Gerät folgendes umfasst: ein Mittel, das erfasst, wenn ein Lauf von Datenzeichen im Eingabestrom erfolgt, indem erfasst wird, wenn eine vorbestimmte Anzahl an angrenzenden Datenzeichen des Eingabestroms in Bezug aufeinander dieselben sind, wobei der erfasste Lauf benachbarte, numerisch steigende Segmente einschließt, wobei ein Segment ein Datenzeichen weniger hat als das nächste folgende angrenzende Segment des erfassten Laufs, ein Mittel, damit bestimmt wird, dass aufeinanderfolgende Codes aus dem Code-Zähler jeweils den benachbarten Segmenten des erfassten Laufs entsprechen, wobei ein LZW-Datenkomprimierer arbeitet, um den Eingabestrom zu komprimieren, wenn erfasst wird, dass ein Lauf darin nicht auftritt, indem der Eingabestrom mit den gespeicherten Folgen verglichen wird, um die längsten Übereinstimmungen damit zu bestimmen, und indem die dazu zugewiesenen Codes bereitgestellt werden, wodurch komprimierte LZW-Codes bereitgestellt werden, und ein Mittel zur Ausgabe der Datenzeichen des erfassten Codes und der aufeinanderfolgenden Codes, die den benachbarten Seg menten entsprechen, und zur Ausgabe der komprimierten LZW-Codes, um den Ausgabestrom bereitzustellen.
  16. Das Gerät nach Anspruch 15, worin das Bestimmungsmittel ein Mittel zum Vorgreifen in den Eingabestrom umfasst, wenn der Lauf erfasst wird, um die im Lauf existierenden benachbarten, numerisch steigenden Segmente zu erfassen, und ein Mittel zum Zuweisen der aufeinanderfolgenden Codes aus dem Code-Zähler jeweils an die erfassten benachbarten Segmente umfasst; oder worin das Bestimmungsmittel ein Mittel zum Bestimmen einer Anzahl umfasst, die die Anzahl der Datenzeichen im erfassten Lauf repräsentiert, und ein Mittel zum mathematischen Bestimmen der aufeinanderfolgenden Codes aus dem Code-Zähler umfasst, die jeweils den benachbarten Segmenten des erfassten Laufs entsprechen, und zwar mittels eines mathematischen Algorithmus, der die repräsentative Anzahl verwendet.
  17. Das Gerät nach Anspruch 16, erste Alternative, worin der erfasste Lauf ein letztes Segment, einschließt, das ein Datenzeichen mehr als das vorherige angrenzende Segment des erfassten Laufs hat, das weiterhin ein Mittel einschließt, um zu erfassen, dass der Eingabestrom, der dem letzten Segment folgt, eine ungenügende Anzahl von angrenzenden Datenzeichen enthält, die dieselben sind wie das Datenzeichen des erfassten Laufs, um ein nächstes folgendes angrenzendes Segment zu füllen und ein Mittel zum Inkrementieren des Code-Zählers auf einen nächsten folgenden Code einschließt, nachdem die ungenügende Anzahl von Datenzeichen erfasst wurde, und das weiterhin vorzugsweise ein Mittel zum Verwerfen der Datenzeichen eines jeden Segments des erfassten Laufs einschließt, für die ein zugewiesener Code ausgegeben wird, und/ oder weiterhin vorzugsweise ein Mittel zum Abrufen des nächsten Datenzeichens des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt, um die Kompression des Eingabestroms fortzusetzen.
  18. Das Gerät nach Anspruch 16, zweite Alternative, worin der erfasste Lauf weiterhin Datenzeichen einschließt, die den benachbarten Segmenten folgen, wobei die weiteren Datenzeichen einen Lauf bilden, der weitere benachbarte, numerisch steigende Segmente einschließt, wobei das Gerät weiterhin ein Mittel zum Ausgeben der Datenzeichen des erfassten Laufs, ein Mittel zum Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, ein Mittel zum rekursiven Verwenden des mathematischen Algorithmus, indem die Anzahl der weiteren Datenzeichen verwendet wird, um mathematisch weitere aufeinanderfolgende Codes aus dem Code-Zähler zu bestimmen, die jeweils den weiteren benachbarten Segmenten entsprechen, und ein Mittel zum Ausgeben der weiteren aufeinanderfolgenden Codes einschließt; oder worin das Mittel zur mathematischen Bestimmung und das Mittel zur Ausgabe ein iteratives Mittel zur Durchführung der Betriebe für die Initialisierung eines Index, der die Anzahl der Datenzeichen in einem Segment bezeichnet, für die Ausgabe des Codes im Code-Zähler und für das Inkrementieren des Code-Zählerauf einen nächsten folgenden Code, für das Verringern der repräsentativen Anzahl mittels der Subtraktion des Index davon, für das Inkrementieren des Index um 1, für das Vergleichen der verringerten repräsentativen Anzahl mit dem inkrementierten Index und für das Wiederholen der oben gegebenen Schritte von der Ausgabe des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index umfasst, bis die verringerte repräsentative Anzahl kleiner ist als der inkrementierte Index; oder weiterhin ein Mittel zum Verwerfen der Datenzeichen der Segmente des erfassten Laufs, für die die entsprechenden Codes ausgegeben werden, ein Mittel zum Inkrementieren des Code-Zäh- lers auf einen nächsten folgenden Code, und ein Mittel zum Abrufen des nächsten Datenzeichens des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt, um die Kompression des Eingabestroms fortzusetzen; oder worin das Mittel zur mathematischen Bestimmung und das Mittel zur Ausgabe ein iteratives Mittel zur Durchführung der Betriebe für das Initialisieren eines Index, der die Anzahl der Datenzeichen in einem Segment bezeichnet, für das Initialisieren' einer Verwerfanzahl, für die Ausgabe des Codes im Code-Zähler und für das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, für das Erhöhen der Verwerfanzahl durch das Hinzufügen des Index dazu, für das Verringern der repräsentativen Anzahl durch die Subtraktion des Index davon, für das Inkrementieren vom Index um 1, für das Vergleichen der verringerten repräsentativen Anzahl mit dem inkrementierten Index, und das Wiederholen der oben gegebenen Schritte von der Ausgabe des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index umfasst, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist, wobei das Gerät weiterhin ein Mittel zum Verwerfen der Datenzeichen des erfassten Laufs in Übereinstimmung mit der Verwerfanzahl, ein Mittel zum Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, und ein Mittel zum Abrufen des nächsten Datenzeichens des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt, um die Kompression des Eingabestroms fortzusetzen; oder worin das Mittel zur mathematischen Bestimmung und das Mittel zur Ausgabe ein mathematisches Gleichungsmittel zum Durchführen der Betriebe einer ersten Berechnung, die eine erste Gleichung verwendet, die die Anzahl an im ersten erfassten Lauf eingeschlossenen benachbarten, numerisch steigenden Segmenten gemäß der repräsentativen Anzahl berechnet, einer zweiten Berechnung, die mittels Verwendung einer zweiten Berechnung einen Grenzwert berechnet, indem eine zweite Gleichung verwendet wird, die das Addieren der Anzahl der benachbarten Segmente zum Code im Code-Zähler einschließt, und einer Ausgabe des Codes im Code-Zähler und eine Inkrementierung des Code-Zählers auf einen nächsten folgenden Code umfasst, bis der nächste folgende Code mit dem Grenzwert gleich ist.
  19. Das Gerät nach Anspruch 18, zweite Alternative, das weiterhin ein rekursives Mittel zur Durchführung der folgenden Betriebe einschließt, wenn die verringerte repräsentative Anzahl kleiner als der inkrementierte Index, aber nicht kleiner als 3 ist, und zwar das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Ausgeben des Datenzeichens des erfassten Laufs, die Neu-Initialisierung des Index und das Wiederholen der Betriebe zur Ausgabe des Codes im Code-Zähler bis zum Vergleich der verringerten repräsentativen Anzahl mit dem inkrementierten Index, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist, worin vorzugsweise das rekursive Mittel weiterhin ein Mittel zum Verringern der verringerten repräsentativen Anzahl um 1 einschließt.
  20. Das Gerät nach Anspruch 18, vierte Alternative, das weiterhin ein rekursives Mittel zur Durchführung der folgenden Betriebe einschließt, wenn die verringerte repräsentative Anzahl kleiner als der inkrementierte Index, aber nicht kleiner als 3 ist das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Ausgeben des Datenzeichens des erfassten Laufs, das Neu-Initialsieren des Index, und das Wiederholen der Betriebe zum Ausgeben des Codes im Code-Zähler bis zum Verg eich der verringerten repräsentativen Anzahl mit dem inkrementierten Index, bis die verringerte repräsentative Anzahl kleiner als der inkrementierte Index ist.
  21. Das Gerät nach Anspruch 20, worin das rekursive Mittel weiterhin ein Mittel zum Verringern der verringerten repräsentativen Anzahl um 1 einschließt, und weiterhin vorzugsweise ein Mittel zum Inkrementieren der Verwerfanzahl um 1 einschließt.
  22. Das Gerät nach Anspruch 18, fünfte Alternative, worin das mathematische Gleichungsmittel weiterhin im Betrieb ist, um den Betrieb einer dritten Berechnung durchzuführen, indem eine dritte Gleichung verwendet wird, die eine Verwerfanzahl gemäß der in der ersten Berechnung berechneten Anzahl berechnet.
  23. Das Gerät nach Anspruch 22, das weiterhin ein rekursies Mittel einschließt, um die folgenden Betriebe durchzuführen, wenn der nächste folgende Code mit dem Grenzwert gleich ist: das Verringern der repräsentativen Anzahl um die Verwerfanzahl und das Durchführen der folgenden Schritte, wenn die verringerte repräsentative Anzahl nicht kleiner als 3 ist, das Ausgeben des Datenzeichens des erfassten Laufs, das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, das Verwenden der verringerten repräsentativen Anzahl in der ersten Gleichung, um die erste Berechnung neu zu berechnen, das Neu-Berechnen des Grenzwerts mittels der Verwendung der zweiten Gleichung; die an das Ergebnis der neu-berechneten ersten Berechnung angelegt wird, und das Ausgeben des Codes im Code-Zähler und das Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, bis der nächste folgende Code mit dem neu-berechneten Grenzwert gleich ist, und worin vorzugsweise das rekursive Mittel ein Mittel zum Neu-Berechnen der Verwerfanzahl mittels der Verwendung der dritten Gleichung einschließt, die an das Ergebnis der neu-berechneten ersten Gleichung angelegt wird.
  24. Das Gerät nach Anspruch 22, worin die erste Gleichung folgendes umfasst n = ganzzahliger Teil von [((8R +1)1/2 – 1)/2)] worin n die Anzahl der benachbarten Segmente ist, die im erfassten Lauf eingeschlossen sind, und R die repräsentative Anzahl ist, wobei die zweite Gleichung folgendes umfasst L = [(Code + n) – 1] worin L der Grenzwert ist und Code der Code im Code-Zähler ist, und wobei die dritte Gleichung folgendes umfasst T = [(n(n + 1))/2] worin T die Verwerfanzahl ist.
  25. Das Gerät nach Anspruch 22, worin das mathematische Gleichungsmittel weiterhin ein Mittel zum Initialisieren einer akkumulierten Verwerfanzahl und ein Mittel zum Erhöhen der akkumulierten Verwerfanzahl um die von 'der dritten Gleichung berechnete Verwerfanzahl einschließt.
  26. Das Gerät nach Anspruch 23, worin das mathematische Gleichungsmittel weiterhin ein Mittel zum Initialisieren einer akkumulierten Verwerfanzahl und ein Mittel zum Erhöhen der akkumulierten Verwerfanzahl um die Verwerfanzahl und die neu-berechnete Verwerfanzahl einschließt, und worin vorzugsweise das mathematische Gleichungsmittel in Betrieb ist, um die akkumulierte Verwerfanzahl um 1 zu inkrementieren, wenn der nächste folgende Code mit dem Grenzwert gleich ist und die verringerte repräsentative Anzahl nicht kleiner als 3 ist.
  27. Das Gerät nach den Ansprüchen 25 oder 26, das weiterhin ein Mittel zum Verwerfen der Datenzeichen des erfassten Laufs in Übereinstimmung mit der akkumulierten Verwerfanzahl, ein Mittel zum Inkrementieren des Code-Zählers auf einen nächsten folgenden Code, und ein Mittel zum Abrufen des nächsten Datenzeichens des Eingabestroms einschließt, der den verworfenen Datenzeichen folgt, um die Kompression des Eingabestroms fortzusetzen.
  28. Das Gerät nach einem oder mehreren der Ansprüche 25–27, worin die vorbestimmte Anzahl der angrenzenden Datenzeichen drei Datenzeichen umfasst.
DE60002218T 1999-08-12 2000-08-11 Lzw datenkomprimierungsgerät und -verfahren, mit anwendung von mathematischer vorhersage von lauflängenverarbeitung Expired - Lifetime DE60002218T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US372483 1999-08-12
US09/372,483 US6188333B1 (en) 1999-08-12 1999-08-12 LZW data compression apparatus and method using look-ahead mathematical run processing
PCT/US2000/022137 WO2001013523A1 (en) 1999-08-12 2000-08-11 Lzw data compression apparatus and method using look-ahead mathematical run processing

Publications (2)

Publication Number Publication Date
DE60002218D1 DE60002218D1 (de) 2003-05-22
DE60002218T2 true DE60002218T2 (de) 2004-02-19

Family

ID=23468314

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60002218T Expired - Lifetime DE60002218T2 (de) 1999-08-12 2000-08-11 Lzw datenkomprimierungsgerät und -verfahren, mit anwendung von mathematischer vorhersage von lauflängenverarbeitung

Country Status (7)

Country Link
US (2) US6188333B1 (de)
EP (1) EP1208649B1 (de)
JP (1) JP2003507920A (de)
AU (1) AU6637300A (de)
CA (1) CA2381381C (de)
DE (1) DE60002218T2 (de)
WO (1) WO2001013523A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6307488B1 (en) * 2000-05-04 2001-10-23 Unisys Corporation LZW data compression and decompression apparatus and method using grouped data characters to reduce dictionary accesses
US6384751B1 (en) * 2000-12-22 2002-05-07 Unisys Corporation Data compression/decompression circuit and method
US6426711B1 (en) * 2001-05-14 2002-07-30 Unisys Corporation Character table implemented data compression method and apparatus
US7068398B2 (en) * 2001-11-07 2006-06-27 International Business Machines Corporation System and method for efficient tile generation from complex raster data
US7043077B2 (en) * 2001-11-07 2006-05-09 International Business Machines Corporation System and method for efficient compression of raster image data
US6653954B2 (en) 2001-11-07 2003-11-25 International Business Machines Corporation System and method for efficient data compression
US7370120B2 (en) * 2001-12-07 2008-05-06 Propel Software Corporation Method and system for reducing network latency in data communication
US6674908B1 (en) 2002-05-04 2004-01-06 Edward Lasar Aronov Method of compression of binary data with a random number generator
EP1525750A1 (de) * 2002-07-17 2005-04-27 Koninklijke Philips Electronics N.V. 3d-wavelet videocodierungs- und decodierungsverfahren und entsprechendes gerät
US6756923B1 (en) * 2003-05-30 2004-06-29 Unisys Corporation Data compressor utilizing switched input coincidence elements arranged in virtual levels
US7289045B1 (en) 2006-06-21 2007-10-30 Honeywell International Inc. Two-stage codec for frame-based program images
US7696906B2 (en) * 2008-08-13 2010-04-13 International Business Machines Corporation LZW data compression algorithm
JP6032292B2 (ja) * 2012-12-19 2016-11-24 富士通株式会社 圧縮プログラム、圧縮装置、伸張プログラムおよび伸張装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4558302A (en) * 1983-06-20 1985-12-10 Sperry Corporation High speed data compression and decompression apparatus and method
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
US4929946A (en) 1989-02-09 1990-05-29 Storage Technology Corporation Adaptive data compression apparatus including run length encoding for a tape drive system
US4971407A (en) 1989-08-09 1990-11-20 Unisys Corp. Two stage run and string data compressor providing doubly compressed output
US4988998A (en) 1989-09-05 1991-01-29 Storage Technology Corporation Data compression system for successively applying at least two data compression methods to an input data stream
US5247638A (en) 1990-06-18 1993-09-21 Storage Technology Corporation Apparatus for compressing data in a dynamically mapped virtual data storage subsystem
US5479587A (en) * 1992-09-03 1995-12-26 Hewlett-Packard Company Page printer having adaptive data compression for memory minimization
US5389922A (en) 1993-04-13 1995-02-14 Hewlett-Packard Company Compression using small dictionaries with applications to network packets
US5369605A (en) * 1993-07-07 1994-11-29 Dell Usa, L.P. Incremental search content addressable memory for increased data compression efficiency
JPH07114577A (ja) * 1993-07-16 1995-05-02 Internatl Business Mach Corp <Ibm> データ検索装置、データ圧縮装置及び方法
US5525982A (en) * 1994-04-15 1996-06-11 International Business Machines Corporation Method and means for character string pattern matching for compression and the like using minimal cycles per character
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
GB2301252A (en) * 1995-05-23 1996-11-27 Ibm Run length data compression
US5610603A (en) * 1995-09-28 1997-03-11 International Business Machines Corporation Sort order preservation method used with a static compression dictionary having consecutively numbered children of a parent
US5861827A (en) * 1996-07-24 1999-01-19 Unisys Corporation Data compression and decompression system with immediate dictionary updating interleaved with string search
US5798718A (en) * 1997-05-12 1998-08-25 Lexmark International, Inc. Sliding window data compression method and apparatus
US6166665A (en) * 1999-03-08 2000-12-26 Unisys Corporation Data compression method and apparatus with embedded run-length encoding
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

Also Published As

Publication number Publication date
JP2003507920A (ja) 2003-02-25
DE60002218D1 (de) 2003-05-22
WO2001013523A1 (en) 2001-02-22
US6172624B1 (en) 2001-01-09
EP1208649B1 (de) 2003-04-16
US6188333B1 (en) 2001-02-13
AU6637300A (en) 2001-03-13
CA2381381C (en) 2005-11-01
EP1208649A1 (de) 2002-05-29
CA2381381A1 (en) 2001-02-22

Similar Documents

Publication Publication Date Title
DE60009502T2 (de) Lzw datenkomprimierung/dekomprimierungsgerät und - verfahren mit eingebetteter lauflängenkodierung/dekodierung
DE69027606T2 (de) Vorrichtung zur datenkompression
DE60002218T2 (de) Lzw datenkomprimierungsgerät und -verfahren, mit anwendung von mathematischer vorhersage von lauflängenverarbeitung
DE2264090C3 (de) Datenverdichtung
DE69535118T2 (de) Verfahren zur Datenkomprimierung und -dekomprimierung und zugehöriges Datenkomprimierungs- und -dekomprimierungsgerät
DE3787898T2 (de) Verfahren und Vorrichtung zur arithmetischen Kodierung von binären Zahlen.
DE3887627T2 (de) Effizienzabhängige Rücksetzung eines Datenkomprimierungswörterbuches.
DE3606869C2 (de) Vorrichtung zur Datenkompression
DE3711200C2 (de)
DE68927702T2 (de) Bildcodierverfahren und -gerät
DE3800634C2 (de)
DE69127739T2 (de) Bilddatenverarbeitungsgerät
DE69024629T2 (de) Vorrichtung zur kompression von datenlängen und datenfolgen
DE3852341T2 (de) Zeichenverarbeitungssystem mit Funktion zur Prüfung von Rechtschreibung.
DE69020564T2 (de) Verfahren und vorrichtung zur behandlung von numerischen daten.
DE69720558T2 (de) Methode zur Bilddekodierung mit Kodes variabler Länge
DE3789857T2 (de) System zur Komprimierung von Bildern mit mehreren Graustufen.
DE3850035T2 (de) Datenkomprimierungssystem mit Expandierungsschutz.
DE2614916A1 (de) Konverter zur codeumwandlung
DE69026320T2 (de) Halbtonbilddatenkomprimierungsverfahren und -vorrichtung
DE3750390T2 (de) Simultane Fehlererkennung bei der Kodierung durch arithmetische Datenkodierung.
DE3689674T2 (de) Verfahren zur Datenkompression und -dekompression.
EP1571755A2 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Initialisierung eines Wahrscheinlichkeitsmodelles
DE3688517T2 (de) Anpassungsfähiges Verfahren zum Komprimieren von Zeichendaten.
DE69125424T2 (de) Vorrichtung zur variablen Längenkodierung und Vorrichtung zur variablen Längendekodierung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition