-
1. Erfindungsgebiet
-
Die vorliegende Erfindung betrifft
Datenkomprimierungssysteme. Spezieller erläutert, betrifft die vorliegende
Erfindung die verlustfreie Datenkomprimierung und ein Verfahren
und Mittel zum Erhöhen der
Geschwindigkeit zum Komprimieren eines Datenstroms in Systemen,
die ein Wörterbuch
benutzen, um Folgen-Codes
zu speichern.
-
2. Beschreibung des Standes
der Technik
-
Bis dato waren verlustfreie Datenkomprimierungsalgorithmen
bekannt. Auf einige der am besten bekannten Datenkomprimierungssysteme
und -verfahren wird als Lempel Ziv One (LZ-1), Lempel Ziv Two (LZ-2)
und Lempel Ziv Welch (LZW) Bezug genommen. All diese adaptiven verlustfreien
Datenkomprimierungssysteme benutzen ein Wörterbuch zum Speichern von
Folgen-Codes, die auf Folgen von Daten und Symbolen oder Zeichen
hinweisen, auf die man in einem Eingabedatenstrom stößt. Ist eine
Folge einmal identifiziert, wird sie als ein Code gespeichert, der
weniger Bits hat als die identifizierte Folge von Daten, so dass
anschließende
Auftritte derselben Folge im Datenstrom vom zuvor gespeicherten
Folgen-Code ersetzt werden. Alle drei oben erwähnten Datenkomprimierungssysteme
beinhalten die Suche mehrerer Stellen im Wörterbuch, um zu bestimmen,
ob ein Folgen-Code
zuvor für
die zu untersuchende Folge gespeichert wurde. Das Verfahren beinhaltet
die Übereinstimmung
einer Sequenz eingegebener Datenzeichen mit der bereits in einer Wörterbuchstelle
codierten selben Sequenz.
-
Um die Zeit zu verkürzen, die
für die
Suche mehrerer Stellen im Wörterbuch
erforderlich ist, wurde vorgeschlagen, dass ein Hash-Algorithmus
verwendet wird, um die Übereinstimmungsfunktion durchzuführen. Hash-Suchen
berechnen einen Index in einer Tabelle auf der Grundlage gesuchten
Daten. Die Effizienz der Hash-Tabellensuche wird durch die Organisation
der Tabelle und dadurch bestimmt, ob mehrere Gegenstrände ohne
Konflikt mit demselben Bereich der Tabelle gehastet werden können. Hash-Systeme
leiden unter hohen Implementierungskosten und komplexen Berechnungen,
die zu einem Leistungs-reduzierenden Verwaltungsaufwand führen. Ein
LZW-Hash-Verfahren wird im US Patent Nr. 4.558.302 beschrieben.
-
Es wurde auch vorgeschlagen, dass
binäre Suchen
verwendet werden könnten,
in denen der Speicher und die Abschnitte des Speichers unterteilt und
der Reihe nach gesucht werden, bis eine Übereinstimmung oder keine Übereinstimmung
gefunden ist. Binäre
Suchen erfordern per Definition mehrere Suchen im Wörterbuch
und benötigen
auch eine Tabellenaufzeichnung, haben aber den Vorteil, dass sie den
Verwaltungsaufwand reduzieren, der bei den komplexen Berechnungen
auftritt, die mit dem Hashing verknüpft sind.
-
Es wurde auch vorgeschlagen, dass
ein inhaltsadressierbarer Speicher (CAM) oder Assoziativspeicher
verwendet werden kann, um die Anzahl der Vergleiche von den Inhalten
der im Wörterbuch
befindlichen mehreren Folgen zu reduzieren. Dieses System ist wirkungsvoll,
dennoch komplex, und es kann sehr teuer sein. Ein Beispiel für dieses
Verfahren wird im US Patent Nr. 5.838.264 beschrieben.
-
Die gedruckte Veröffentlichung unter dem Titel
"Data Compression: The Complete Reference", 1998, Springer-Verlag,
von D. Salamon, analysiert Wörterbuchverfahren
und klassifiziert sie als statisch oder dynamisch (adaptiv). Dieser
Referenz schreibt Storer und Szymenski die Entwicklung des LZSS
zu (auch Storer 1982), die sich bis zum LZ77 verbessert. Dieses
Wörterbuch-Verfahren hält den Such-Puffer (das
Wörterbuch)
in einem binären
Suchbraum und erzeugt als eine Ausgabe ein "Token mit zwei Feldern".
Zwei Formen an binären
Suchbäumen
werden erörtert,
indem nur vierzehn Knoten verwenden werden. Salomon schlussfolgert,
dass irgendeiner der vierzehn Knoten in höchstens vier Schritten gefunden
werden kann, wenn für
das Wörterbuch
eine ausgeglichene Baumstruktur verwendet wird; wie auch immer können bis
zu vierzehn Schritte erforderlich sein, wenn ein schiefes Baumwörterbuch
benutzt wird. Solchermaßen
bestimmt die Höhe
der Nummer der Elemente "n" in den jeweiligen Bäumen die Höchstzahl an Schritten, die
erforderlich sind, um eine Suche in irgendeinem Wörterbuch
durchzuführen,
das einen binären
Suchbaum verwendet.
-
LZ78 (auch ZIV78) ist eine Verbesserung
gegenüber
dem LZSS und verwendet keine Suchpuffer und/oder Vorgriff-Puffer.
Stattdessen gibt es ein Wörterbuch,
in dem alle zuvor angetroffenen Folgen als einzelne Zeichen gespeichert
werden, und seine Größe wird
durch die Größe oder
Menge des für
das Wörterbuch
bestimmten Speichers eingeschränkt, der
schnell wächst
und leicht aufgefüllt
wird. Der Codierer gibt Zwei-Feld-Tokens aus. Das erste Token-Feld
ist die Adress-Stelle (Zeiger) im Wörterbuch, der die längste Übereinstimmung
zugeordnet wird, die nach einer Suche nach der längsten Übereinstimmungsfolge gefunden
wird. Der Codierer verwendet diesen Zeiger, um sein Wörterbuch
zu suchen, es wird nur am Decoder verwendet. Das zweite abgelegte
Zeichen ist das Erweiterungszeichen aus dem Datenstrom, das die
Fehl-Übereinstimmung
verursachte, die zu einer neuen Folge führt, die an der nächsten sequentiell
verfügbaren
Wörterbuchadresse
im Wörterbuch
gespeichert wird.
-
Salomon beobachtet richtig, dass
die Größe des LZ78-Wörterbuchs während der Zeit der Verwendung
bestimmt werden kann; jedoch kann ein großes Wörterbuch mehrere Folgen enthalten
und längere Übereinstimmungen
berücksichtigen,
führt aber
zu längeren
Zeigern und langsameren Wörterbuchesuchen.
Salomon schlägt
die Verwendung dreier Strukturen vor, die mit der Null-Folge als Ausgang
beginnt. Während
ein Null-Folge-Baum die Anzahl von erforderlichen Stufen "n" in
binären
Suchbäumen
reduziert, werden mehrere Suchen auf jeder Stufe benötigt, um
eine Übereinstimmung
zu bestätigen
oder um zu schließen,
dass keine Übereinstimmung
vorliegt. Dann war die an der vorherigen Stufe gefundene Übereinstimmung
die längste Übereinstimmung
für die
gesuchte Folge.
-
Salomon beobachtet richtig, dass
Lempel-Ziv-Welch (LZW) eine Verbesserung gegenüber dem LZ78 darstellt und
vorzugsweise ähnlich
dem LZ78 eine Baumstruktur verwendet. Der Vorteil des LZW gegenüber der
LZ78 ist doppelt, und zwar darin, dass nur ein Ein-Feld-Token ausgegeben
und die "Baum"-Strukturgröße für das Wörterbuch
vorzugsweise uneingeschränkt
ist. Wie die LZ78-Wörterbücher benötigt das
LZW-Wörterbuch
mehrere Suchen im Äquivalent
eines Null-Folge-Baums.
-
Salomon erläutert kurz eine einfache schnelle
Variante des LZ77 namens "Williams 91" oder das LZRW1 für seinen
Entwickler Ross Williams. Das Verfahren verwendet den gesamten verfügbaren Speicher
als LZ77-Puffer und codiert den Eingabestrom in "Blöcken". Die
Beschreibung deutet an, dass in einem Schritt eine Übereinstimmung
gefunden werden kann, dass jedoch ein Schritt die Bewegung des 16-Byte
Vorgriff-Puffers über
die Länge
eines vier Kilobyte Suchpuffers umfasst, um wie im LZ77 gerade den
einen Block des Datenstroms zu codieren. Der Suchpuffer macht mehrere
LZ77-Suchen im Block; daher gibt es nie eine Ein-Schritt-Suche. Es wird ausgesagt, dass
das Verfahren "nicht sehr wirkungsvoll ist, da die gefundene Übereinstimmung nicht
immer die längste
ist"!
-
Es ist nur Gerecht, die obigen Wörterbuchverfahren
von D. Salomon so zusammenfassen, als benötigten sie spezifisch Suchbäume (oder
irgendein Äquivalent),
die wiederum mehrere Suchen benötigen,
um eine längste übereinstimmende
Folge: zu finden. Der Nicht-Wörterbuch-Versuch
zur Verwendung einer Form von Hashing zum Beschleunigen der Suche
in LZ77-Blockpufferspeichern verbraucht den gesamten verfügbaren Speicher
und gewährleistet
dennoch nicht, dass nach mehreren Suchen eine längste übereinstimmend Folge gefunden
wird.
-
Es wäre wünschenswert, ein Verfahren
und ein Gerät
bereitzustellen, das vollständig
mehrere Suchen in Datenkomprimierungssystemen vermeidet, die Folgen-Wörterbücher benutzen.
Es ist weiterhin wünschenswert,
dass die Ausgabe aus dem neuen Datenkomprimierungssystem formatierbar
ist, um mit bestehenden Datenkomprimierungssystemen wie beispielsweise
dem LZW kompatibel zu sein, so dass existierende Dekompressoren/Decoder
in der Lage wären,
ohne irgendeine Modifikation die komprimierten Daten zu empfangen
und zu decodieren.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
die Geschwindigkeit der Datenkomprimierung, die in Zusammenhang
mit der Verwendung eines Folgen-Wörterbuchs implementiert wird,
zu optimieren.
-
Es ist eine weitere Hauptaufgabe
der vorliegenden Erfindung, die Notwendigkeit der Suche an mehreren
Adress-Stellen in einem Folgen-Wörterbuch
eines Datenkomprimierers überflüssig zu
machen.
-
Es ist eine weitere Hauptaufgabe
der vorliegenden Erfindung, ein als Nachschlagtabelle angeordnetes
LZW-Folgen-Wörterbuch
bereitzustellen, das für
jeden möglichen
neuartigen Folgen-Code eine eindeutige Adresse hat, so dass eine
Suche im Wörterbuch
beseitigt wird.
-
Es ist eine weitere Hauptaufgabe
der vorliegenden Erfindung, ein neuartiges Datenkomprimierungssystem
bereitzustellen, das wirkungsvoll formatiert werden kann, um chinesische,
japanische und andere komplexe Folgen-Codes ohne die Strafe einer
ausgiebigen Suche in einem Folgen-Wörterbuch zu komprimieren.
-
Es ist eine weitere Hauptaufgabe
der vorliegenden Erfindung, ein Datenkomprimierungssystem bereitzustellen,
das mittels Verwendung eines Direktzugriffspeichers (RAM) geringen
Preises implementiert werden kann, ohne dass dem Rechnersystem eine
Last aufgesetzt wird.
-
Es ist eine weitere Hauptaufgabe
der vorliegenden Erfindung, ein neuartiges Verfahren zum Durchführen der
LZW-Datenkomprimierung bei Geschwindigkeiten bereitzustellen, die
höher sind
als sie bisher möglich
waren; solchermaßen
erhöht
sich der Echtzeit-Durchsatz für
Hochgeschwindigkeits-Netzwerke, für die die Folgen-Daten-Komprimierung
wie beispielsweiese die LZW normiert wurde oder die diese benutzen.
-
Es ist eine weitere Aufgabe der vorliegenden Erfindung,
ein neues und verbessertes Verfahren zum Durchführen einer LZW-Datenkomprimierung bereitzustellen,
das das Verfahren zur Komprimierung des Datenstroms beschleunigt
und das ein Mittel für
höhere Übertragungsraten über bestehende Leitungen
und Verbin dungen bereitstellt.
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
einen neuartigen, erweiterten Zeiger-Adresscode für Folgen
von Daten bereitzustellen, auf die man in einem zu komprimierenden
Datenstrom stößt.
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
ein neuartiges Folgen-Wörterbuch
bereitzustellen, das über
eine größere Anzahl
an zugänglichen
Adressen verfügt
als die maximale Anzahl der in einem vollständigen Wörterbuch verwendeten Folgen-Codes.
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
einen eindeutigen, einzigen Folgecodewert von wenigeren Bits in
einem Wörterbuch
zu speichern, der die Folge von Zeichen darstellt, die in dem eindeutigen
Zeigeradresscode größerer Bits enthalten
ist.
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
einen komprimierten Datenstrom im LZW-Format ohne den Bedarf an
einer Suche nach mehreren Adress-Stellen in einem Folgen-Wörterbuch
zu erzeugen.
-
Es ist eine Hauptaufgabe der vorliegenden Erfindung,
den Bedarf an der Speicherung von Erweiterungszeichen mit Folgen-Codes in einem LZW-Wörterbuch
zu beseitigen.
-
Es ist die allgemeine Aufgabe der
vorliegenden Erfindung, mehrmals dasselbe LZW-Folgen-Wörterbuch
zu verwenden, ohne dass die Inhalte gestoppt oder gelöscht werden
müssen,
wenn das Wörterbuch
voll ist.
-
Es ist die allgemeine Aufgabe der
vorliegenden Erfindung, alle Abschnitte des Folge-Wörterbuchs
zu entleeren oder zu löschen,
ohne die Inhalte aller Speicherstellen zu überlesen.
-
Es ist die allgemeine Aufgabe der
vorliegenden Erfindung, die Adress-Stellen der Folgen-Codes in einer
Hilfsnachschlagtabelle zu speichern, um das Löschen zu ermöglichen,
indem nur jene Adress-Stellen überschrieben
werden, in denen die Code-Daten
gespeichert wurden.
-
Gemäß diesen und anderen Aufgaben
der vorliegenden Erfindung wird ein Datenkomprimierungssystem und
-verfahren bereitgestellt, um Codes für Folgen von Datenzeichen zu ersetzen,
auf die man in einem Eingabedatenstrom stößt, der durch die Bereitstellung
eines Folgen-Code-Wörterbuchs gekennzeichnet
ist, das für
jede mögliche
Folge, die im Eingabedatenstrom beobachtet werden kann, eine Speicherstelle
hat. Wenn der Eingabedatenstrom in das System tritt, werden die
Folgen von zu suchenden neuen Zeichen in eindeutige Zeigeradressen
konvertiert, die einen bekannten Folgeabschnitt und einen nächsten Zeichenabschnitt
umfassen. Jede erzeugte mögliche
Zeigeradresse verfügt über eine
entsprechende Speicherstelle im Folgen-Code- Wörterbuch. Die Zeigeradresse
wird verwendet, um die Inhalte eines neuartigen Folgen-Code-Wörterbuchs
zu lesen. Wenn die Inhalte des Wörterbuchs
einen Folgen-Code enthalten, dann ist es der Folgen-Code für die gesuchte
Folge, und eine Suche im Wörterbuch
in einem Schritt ist abgeschlossen. Die nächste Suche für eine längere Folge
beginnt mit dem Anhängen
des nächsten
(Erweiterungs)-Zeichens am zuletzt übereinstimmenden Folgen-Code, der aus dem
Wörterbuch
gelesen wird, um eine neue eindeutige Zeigeradresse bereitzustellen.
Diese Ein-Schritt-Lese-Suchen
fahren fort, bis an der Zeigeradresse keine Inhalte im Wörterbuch
gelesen werden. Die Zeigeradresse wird gehalten, und ein Folgen-Codegenerator
schreibt den nächsten verfügbaren Folgen-Code
an der Zeigeradresse in das Wörterbuch.
Dies beendet die Ein-Schritt-Lese-Suche, in der eine "Fehl-Übereinstimmung"
auftrat. Eine neue zu suchende Folge wird erzeugt, worin der Folgen-Code-Abschnitt
der Zeigeradresse das letzte Zeichen aus der vorherigen "Fehl-Übereinstimmung"-Folge
und das nächste
Erweiterungszeichen aus dem Datenstrom umfasst.
-
Immer dann wenn eine Fehl-Übereinstimmung
erfolgt, wird der Code für
die letzte zuvor übereinstimmende
Folge für
die Speicherung oder einen Empfänger-Decoder
ausgegeben. Auf diese Art und Weise werden Zeichen aus dem Datenstrom
konstant zu bekannten Folgen hinzugefügt oder damit verkettet, damit
immer längere
zu suchende Folgen zu machen, bis eine Fehl-Übereinstimmung auftritt und
eine neue Zwei-Zeichen-Folge und eine Zeigeradresse für die zu
suchende Folge erzeugt werden, und es werden Ein-Schritt-Folgen-Suchen
im neuartigen Wörterbuch
durchgeführt,
das Codes für
die Folgen und nicht die Folgen selbst enthält.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein schematisches Blockdiagramm des Datenkomprimierungssystem der
bevorzugten Ausführungsform
zum Erzeugen von Codes, die die Folgen von alphanumerischen Zeichen
oder die im Datenstrom gefundenen Symbole anzeigt;
-
2 ist
ein schematisches Blockdiagramm einer modifizierten Ausführungsform
des in der 1 gezeigten
Datenkomprimierungssystem, das ein Tabellenstufenmerkmal zeigt,
das zum/in das Wörterbuch
hinzugegeben oder hineingegeben wird;
-
3 ist
ein vereinfachtes Flussdiagramm, das eine Sequenz an Betrieben zeigt,
die benutzt werden, um eine Wörterbuchsuche
auf eine einzige Wörterbuch-Zeigeradresse
im Datenkomprimierungssystem einzuengen;
-
3A ist
eine vereinfachte Flussdiagrammfolge der Betriebe, die eine Modifikation
der 3 zeigt, wenn das
Wörterbuch
nicht initialisiert ist;
-
4 ist
ein vereinfachtes Flussdiagramm, das die Sequenz der Betriebe zeigt,
die verwendet werden, wenn die zugegriffene einzige Wörterbuch-Zeigeradresse
einen Folgen-Code enthält,
der zu einem TREFFER (HIT) führt;
-
5 ist
ein vereinfachtes Flussdiagramm, das die Sequenz der Betriebe zeigt,
die benutzt werden, wenn die zugegriffene einzige Wörterbuch-Zeigeradresse
keinen Folgen-Code enthält,
der zu einer FEHL-ÜBEREINSTIMMUNG
(MISS) führt;
-
6 ist
eine schematische Zeichnung eines Blocks oder Moduls des Speichers,
der für
ein Wörterbuch
in der vorliegenden Erfindung verwendet wird;
-
7 ist
eine schematische Zeichnung eines anderen Blocks oder Moduls des
Speichers, der anders als der der 6 aufgebaut
wird;
-
8 ist
eine schematische Zeichnung von drei Blöcken oder Modulen des Speichers
der in den 6 und 7 gezeigten Art;
-
9 ist
eine schematische Zeichnung eines großen Wörterbuchs, das eine Mehrzahl
an Blöcken
oder Modulen hat, von denen zu einem Zeitpunkt nur ein betrieben
werden kann, wobei ein Aufbau zum Löschen der Blöcke zeigt
wird, wenn sie voll sind oder sie nicht betrieben werden können; und
-
10 ist
eine schematische Zeichnung eines Wörterbuchs und Aufbaus zum Entleeren
oder Löschen
der Inhalte des Wörterbuchs,
wenn es erwünscht
ist, das Wörterbuch
schnell zurückzustellen.
-
DETAILLIERTE BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORM
-
Bevor man auf die 1 und das Datenkomprimierungssystem der
bevorzugten Ausführungsform
Bezug nimmt, sollte es verständlich
sein, dass es für
die meisten Datenkomprimierungssysteme kein einzelnes Format gibt.
Entsprechend müssen sowohl
der Kompressor/Sender als auch der Empfänger/Decoder folgendes wissen:
1) das zu verwendende gesetzte Zeichen; 2) die maximale Anzahl an zu
verwendenden Bits, um den größten Codewert oder
das Feld zu bestimmen; 3) die speziellen Codes wie beispielsweise
stoppe, setze zurück,
lösche Code
usw., und 4) das Codierungsdatenpaket und das Trennschema, die verwendet
werden sollen. Wenn der Datenkomprimierer und der Decodier bereits
das zu verwendende Protokoll errichtet haben und die oben erwähnten Gegenstände bekannt
sind, gibt es keinen Bedarf, eine solche Information in einer Präambel oder
einer Kopfzeile zu senden, bevor die Datenkomprimierung gestartet
wird. In der bevorzugten Ausführungsform
der vorliegenden Erfindung ist es, wenn der Sender und der Empfänger die
Protokoll-Gegenstände
kennen, möglich,
das Komprimierungssystem 10 einschließlich des neuartigen Folgen-Wörterbuchs 11 ohne
Initialisierung mit einer Zeichenreihe zu starten. Es ist jedoch
möglich,
das Wörterbuch
mit einer Zeichenreihe zu initialisieren, wie sie in der herkömmlichen
LZW-Datenkomprimierung verwendet wird. Das Datenkomprimierungssystem 10 schließt eine
Eingangsleitung 12 für
den Eingabedatenstrom ein, der in einem Datenstrompuffer 12,
gepuffert wird, an dem ein Extraktor 14 hängt, der das
nächste
Zeichen nimmt und es auf der Leitung 15 ausgibt, wo es
in den Erweiterungszeichencode-Abschnitt 17 des Adress-Zeigerregisters 16 gesetzt wird.
Im Adress-Zeigerregister 16 liegt bereits ein LZW-Folgen-Code
im LZW-Folgen-Code-Abschnitt 18 vor, der den Code für die im
Datenstrom auf der Leitung 12 gefundene zuletzt übereinstimmende
Folge enthält.
Zu Erläuterungszwecken
sei angenommen, dass der LZW-Code-Abschnitt 12 Bits enthält und der
Erweiterungszeichen-Abschnitt 17 8 Bits enthält; solchermaßen wird
die Wörterbuch-Zeigeradresse
auf der Leitung 19 20 Bits enthalten. Das neuartige Wörterbuch 11 wird
mit mindestens 220 eindeutigen Speicherstellen
oder Adressen bereitgestellt, so dass jede mögliche Wörterbuch-Zeigeradresse eine
Speicherstelle hat. Wenn das Wörterbuch
initialisiert wird, wird jede einzelne Zeichen-Folge eine Übereinstimmung
finden, die die Komprimierung der Zwei-Zeichen-Folgen startet.
-
Die Wörterbuch-Zeigeradresse auf
der Leitung 19 bewirkt einen Lesebetrieb im Wörterbuch 11, und
die Inhalte an der Zeigeradresse erscheinen auf der Leitung 21 und
werden in einem TREFFER/KEIN TREFFER-(HIT/NO HIT)-Puffer 22 gespeichert.
Es sei angenommen, dass ein Folgen-Code an der Zeigeradresse vorhanden
ist, der veranlasst, dass die Logik im Puffer 22 erkennt,
dass die gerade untersuchte Folge zuvor gesehen wurde und ein Code
die Folge im Wörterbuch 11 ersetzt
hatte. Solchermaßen wird
auf der Leitung 23 ein TREFFER beobachtet, der veranlasst,
dass die TREFFER-Logik 24 eine nächste Zeigeradresse in der
Logik 25 erzeugt.
-
Die Zeigerlogik 25 ermöglicht,
dass der Puffer 22 auf der Leitung 27 den letzten
TREFFER-Code erzeugt, der in den Folgen-Code-Abschnitt 18 des Zeiger-Adressregisters 16 geschrieben
wird. Gleichzeitig erzeugt die Zeigerlogik ein Freigabesignal auf der
Leitung 29, das veranlasst, dass der Zeichen-Extraktor 14 auf
der Leitung 15 den nächsten
Folgen-Code erzeugt, der in den Erweiterungseichenabschnitt 17 des
Zeiger-Adressregisters 16 geschrieben wird. Das Zeiger-Adressregister 16 enthält jetzt den
zuletzt aus dem Wörterbuch 11 gelesenen TREFFERR-Code
und das Erweiterungszeichen oder das nächste aus dem Datenstrom genommene Zeichen.
Die neue Zeigeradresse auf der Leitung 19 liest wieder
die Inhalte des Wörterbuchs
an der neuen Zeigeradresse und setzt die gelesenen Inhalte in das
TREFFER/KEIN TREFFER-Pufferregister 22. Dieser
Ablauf setzt sich fort, bis aus dem Wörterbuch 11 kein TREFFER-Code
mehr gelesen wird und die Logik im Pufferregister 22 ein
Signal auf der Leitung 28 für die NICHT-TREFFER-Logik 31 erzeugt.
Die NICHT-TREFFER-Logik 31 liest über die Leitung 30 den
zuletzt übereinstimmenden
Code aus dem Pufferregister 22 auf der Leitung 32 und
in einen Sender oder Empfänger 33,
der von einem Block 33 angezeigt wird; es kann sich jedoch
um eine Leitung zum Senden an einen entfernten Empfänger handeln.
Die NICHT-TREFFER-Logik 31 veranlasst den Codegenerator 59 über die
Leitung 62, an der NICHT-TREFFER-Zeigeradresse den nächsten sequentiellen Code
in das Register 11 zu schreiben. Die NICHT-TREFFER-Logik 31 signalisiert
dem System 10 über
die Leitung 29 auch, um am Logikblock 34 eine
neue Zeigeradresse zu erzeugen. Um einen neuen Zeiger zu erzeugen,
führt die
Logik 34 zwei sequentielle Betriebe durch. Der am Block 35 gezeigte erste
Betrieb ist die Bewegung des Erweiterungszeichens im Block 17 des
Registers 16 in den Block 18 des Registers 16,
wie an der mit dem Abschnitt 17 verbundenen Leitung 36 gezeigt
wird. Der nächste sequentielle
Betrieb liegt darin, das nächste
Zeichen im Datenstrom über
die Leitung 15 in den Erweiterungszeichenabschnitt 17 zu
laden. Wie am Block 37 gezeigt, erzeugt die Logik ein Freigabesignal
auf der Leitung 38. Wenn der Zeichen-Abfrage-Block 14 erfasst
hat, dass das letzte Zeichen gelesen wurde, dann teilt der Block 14 der
Computer-Controller-Logik
am Block 39 mit, dass das letzte Zeichen am Block 14 gelesen
ist, und dies vervollständigt
das Ende der Suchlogik.
-
Um den Betrieb des Datenkomprimierungssystems 10 in
der 1 zusammenzufassen,
wird jetzt beobachtet werden, dass der Eingabedatenstrom konstant
das nächste
oder letzte Zeichen im Datenstrom aus dem Extraktor 14 auf
den Folgen-Code-Abschnitt 18 von der letzten im Block 22 gelesenen Übereinstimmung
hinzufügt.
Der Adresszeiger wird von zwei Abschnitten 17 und 18 auf
der Leitung 19 erzeugt, der veranlasst, dass das System die
Inhalte des Wörterbuchs 11 an
der eindeutigen Zeigeradresse liest. Wenn es an der Adress-Zeigerstelle
in dieser Ausführungsform
Inhalte gibt, enthalten sie den Code für die Übereinstimmung der vom Adresszeiger
angezeigten Folge. Wenn die Folge eine vorherige Übereinstimmung
hat, dann muss die Folge um ein Zeichen erwei tert und ein Versuch muss
unternommen werden, um eine längere Übereinstimmung
zu finden. Um dies zu tun, geht der bereits aus dem Wörterbuch 11 gelesene
Code durch den Puffer 22 und wird in den Code-Abschnitt 18 geladen,
und der nächste
Zeichen-Code aus dem Datenstrom oder das Erweiterungszeichen wird
in den Abschnitt 17 geladen, um einen neuen Zeiger zu erzeugen.
Diese Sequenz von Betrieben fährt
fort, bis es keinen aus dem Wörterbuch 11 gelesenen
Code gibt, der eine FEHL-ÜBEREINSTIMMUNG
oder einen NICHT-TREFFER anzeigt. Wenn dies geschieht, wird für diese
FEHL-ÜBEREINSTIMMUNG
an der Zeigeradresse ein neuer Code im Wörterbuch 11 gespeichert,
und eine neue Folge muss mit dem jetzt letzten Zeichen nunmehr im
Abschnitt 17 gestartet werden. Bevor die neue Folge gestartet
wird, wird der vorherige Übereinstimmungscode
oder der letzte Übereinstimmungscode,
wie als Logikblock 33 gezeigt, an einen Empfänger übertragen.
Dann veranlasst die NICHT-TREFFER-Logik 31, dass die Zeigerlogik 34 zwei
Dinge tut. Als erstes wird das letzte Zeichen im Erweiterungszeichenabschnitt 17 in
den Code-Abschnitt 18 bewegt und das nächste Zeichen, aus dem Extraktor 14 genommen
und in den Erweiterungszeichenabschnitt 14 geladen; solchermaßen wird
eine neue Folge gestartet, die zwei Ein-Zeichen-Folgen. umfasst.
Diese zwei Ein-Zeichen-Folgen umfassen eine Zeigeradresse, die eine
bereits beobachtete Mehr-Zeichen-Folge bilden kann, jedoch wird
dies bestimmt, indem veranlasst wird, dass die Zeigeradresse die
Inhalte des Wörterbuchs
liest, und es wird bestimmt, ob, wie zuvor erklärt, ein TREFFER oder ein NICHT-TREFFER
erfolgt ist.
-
Wenn das Wörterbuch 11 mit dem
verwendeten gesetzten Zeichen-Code initialisiert wird, ist es nicht
nötig,
die ersten zwei Zeichen im Datenstrom in Abschnitte 18 und 17 zu
laden, um die Komprimierung der Mehr-Zeichen-Folgen zu starten.
Die Zeigeradressen für
die einzelnen Zeichen brauchen nicht verwendet werden, und die Codes
für die
einzelnen Zeichen werden vorzugsweise im Anschluss an die besonderen
Steuerzeichen in die niedrigerwertigeren Adressen gesetzt. Wenn
der gesetzte 256 Zeichen-ASCII-Code verwendet wird, werden die Codes
für die
Zwei-Zeichen-Folge bei 259 starten, wenn drei besondere Codes verwendet
und keine Null-Adresse verwendet werden.
-
Wenn das Wörterbuch 11 nicht
initialisiert wird und der Empfänger
den gesetzten Zeichen-Code und das Protokoll kennt, können die
Adressen für die
einzelnen Zeichen-Codes im gesetzten Code, wie erwähnt, für die niedrigerwerigeren
Adressen besetzt werden. Da die Inhalte der einzelnen Zeichen-Codes nicht
vom Register 16 adressierbar sind, wird es jedoch keinen
letzten Übereinstimmungscode
im Register 16 geben, wenn die Zwei-Zeichen-Adresse eine FEHL-ÜBEREINSTIMMUNG
oder einen NICHT-TREFFER
bewirkt. In diesem Fall ist der einzelne Zeichen-Code im Folgen-Code-Abschnitt 18 verfügbar und
kann vom Controller 39 gelesen werden. Ein weiterer Weg
zum Herstellen von Ein-Zeichen-Codes,
wenn eine FEHL-ÜBEREINSTIMMUNG
erfolgt, ist es zu bestimmen, ob der Ein-Zeichen-Code zuvor im Controller 39 gesehen
wurde, und falls nicht, wird er der letzte Übereinstimmungscode sein, wenn
eine FEHL-ÜBEREINSTIMMUNG erfolgt.
-
Auf die 2 Bezug nehmend, wird ein schematisches
Blockdiagramm einer modifizierten Ausführungsform des Datenkomprimierungssystems,
der 1 gezeigt, in dem
ein Tabellenstufennmerkmal benutzt wird. Das Datenkomprimierungssystem 50 verwendet
ein ähnliches
oder erweitertes Wörterbuch 11 und
eine mit 11A bezeichnete Tabellenstufe, die ein Teil des
Wörterbuchs
sein kann, wie hiernach erklärt
wird. Man nehme zu Erläuterungszwecken
an, dass der Datenstrom auf der Leitung 12 und im Puffer 13 und
im Extraktor 14 derselbe wird wie der hier zuvor erläuterte.
Dann wird das nächste Zeichen,
falls erforderlich; immer auf der Leitung 15 für den Erweiterungszeichenabschnitt 17 verfügbar sein.
Auf eine ähnliche
Art und Weise ist der letzte Übereinstimmungscode
im Puffer 22 auf der Leitung 27 für den Code-Abschnitt 18 des
Zeigerregisters 16A verfügbar. In der modifizierten
Ausführungsform wird
das Zeigerregister 16A einschließlich eines Tabellenstufenblocks 51 gezeigt,
der von einem Tabellenzähler 52 indiziert
wird, der gezeigt wird, wie er Eingaben und eine Überlaufausgabe 40 rückgesetzt und
gesetzt hat. Zusätzlich
zum Zugriff auf das Wörterbuch 11 an
der Zeigeradresse auf der Leitung 19 wird in Tabelle 11A
an derselben Zeigeradresse wie die Wörterbuch-Zeigeradresse ein Tabellenstufenwert
bereitgestellt. Wenn beispielsweise die Tabellenstufe in 11A gleichzeitig
mit den Inhalten des Wörterbuchs 11 gelesen
und im Tabellenstufenblock 53 gespeichert wird, kann sie
am Logikblock 54 mit der aktuellen Tabellenebene im Block 51 verglichen
werden. Wenn die Tabellenstufen vergleichbar sind, gibt es einen
TREFFER, und wenn nicht, gibt es eine FEHL-ÜBEREINSTIMMUNG
oder einen NICHT-TREFFER. Wenn der TREFFER auftritt, beginnt ein
Signal auf der Leitung 55 die TREFFER-Logik im Block 56 und veranlasst
das System 50, eine neue Zeigeradresse zu erzeugen. Die
Erzeugung der neuen Zeigeradresse ist dieselbe wie die mit Bezug auf
die 1 erläuterte,
worin der letzte Übereinstimmungscode
im Puffer 22 in den Folgen-Code-Abschnitt 18 des Adresszeigerregisters 16A gesetzt und
das Erweiterungszeichen oder das nächste Zeichen im Eingabestrom
aus dem Extraktor 14 dem nächsten Zeichen oder Erweiterungszeichenabschnitt 17 des
Adresszeigerregisters 16A zugeführt wird.
-
Wenn jedoch in der Tabellenstufenlogik
eine FEHLÜBEREINSTIMMUNG
erfolgt, obwohl es einen Vergleich oder einen im Wörterbuch 11 vorhandenen Code
hätte geben
können,
gibt es eine FEHL-ÜBEREINSTIMMUNG,
und das System 50 führt,
wie durch die Linie 57 gezeigt, eine FEHL-ÜBEREINSTIMMUNGS-Logik
durch. Die FEHL-ÜBEREINSTIMMUNGS-Logik 58 bewirkt,
dass der Code-Generator 59 den nächsten Folgen-Code schreibt
und die Tabellenlogik 61 die aktuelle Tabellenstufe am
Block 51 in das Wörterbuch 11 und
die Tabellenstufe 11A an der Zeigeradresse schreibt.
-
Der in das Wörterbuch 11 zu schreibende neue
Folgen-Code wird vom Logikblock 59 gestuft, und der Code
ist für
das Wörterbuch 11 verfügbar, damit
er an der Adresszeigerstelle geschrieben wird. Auf eine ähnliche
Art und Weise stellt die Tabellenlogik 61 gleich dem Block 51 die
aktuelle Tabellenstufe bereit und wird durch das Schreib-Freigabesignal
auf der Leitung 62 in dieselbe Stelle an der Tabellenstufe geschrieben.
-
Es wird verständlich sein, dass es, selbst wenn
es an der Zeigeradresse Daten im Wörterbuch 11 gibt,
keine Übereinstimmung
oder keinen TREFFER gibt, bis nicht die Tabellenstufe 11A mit
der aktuellen Tabellenstufe im Block 51 zusammenfällt und gleich
dieser ist. Der Zweck für
die Erweiterung des Wörterbuchs 11 liegt
darin zu erlauben, dass das Wörterbuch
völlig
mit Folgen-Codes
gefüllt
wird, bis alle der zugewiesenen Folgen-Codes verwendet werden. Selbst
wenn alle Folgen-Codes verwendet werden, werden nicht alle Adress-Stellen
im Wörterbuch 11 verwendet.
Wenn z. B. das Wörterbuch über 220 zugreifbare Adress-Stellen verfügt, gibt
es etwa 1 Millionen mögliche
Adressen. Wenn jedoch der LZW-Code nur Codes erzeugt, die 212 Bits verwenden, dann hat die Anzahl der
vom Code-Generator 59 erzeugten Codes etwa 4.096 Codes,
wobei das Wörterbuch
voll ist, wenn die 4.096 Codes erschöpft sind. Durch das Hinzufügen des
Tabellenstufenzusatzes zum Wörterbuch 11 ist
es möglich,
die Tabellenstufe zu ändern,
wenn das Wörterbuch
voll ist, und eine völlig
neue Sequenz derselben Folgen-Codes neu zu starten, die der Code-Generator
59 erzeugt, ohne dass die Adressen im Wörterbuch, in denen die 4.096
Folgen-Codes geschrieben wurden, entleert oder gelöscht werden
müssen.
Anders dargelegt, wird jedesmal, wenn das Wörterbuch 11 mit der
maximalen Anzahl an Folgen-Codes füllt, die Tabellenstufe 11A so
implementiert, dass ein TREFFER nicht auftreten wird, sofern sich
die Tabellenstufe 51 nicht mit der Tabellenebene an der
Zeigeradresse vergleichbar ist. Wenn ein TREFFER erfolgt, wird eine neue
Zeigeradresse auf dieselbe Art und Weise wie in Bezug auf die 1 erklärt erzeugt, worin der letzte Übereinstimmungscode
auf der Leitung 27 in den Folgen-Code-Abschnitt 19 des Registers 16A gesetzt
wird und das nächste
Zeichen aus dem Datenstrom in den nächsten Zeichenabschnitt 17 des
Registers 16A gesetzt wird. Wenn das Wörterbuch 11 voll ist,
wird der Code-Generator 59 zurückgesetzt und dieselbe Sequenz
an Folgen-Codes ganz neu gestartet, jedoch jetzt mit einer anderen
Tabellenstufe verknüpft,
da die Tabellenstufen Logik durch den Tabellenzähler 52 und den aktuellen
Tabellenebenenblock 51 auf die nächst höhere Stufe gesetzt hat. Abhängig vom
verwendeten Speicherchip sind Hunderte von Tabellenstufen verfügbar und
das Wörterbuch 11 muss
nicht rückgesetzt
werden.
-
Man nehme auf die 3 Bezug, die ein vereinfachtes Diagramm
einer Betriebssequenz zeigt, die benutzt wird, um eine Wörterbuchsuche
auf eine einzige Adressenstelle im Datenkomprimierungs-Wörterbuch 11 einzuschränken. Der
Block 66 zeigt einen Startbetrieb an, der mit der Initialisierung des
Wörterbuchs
und/oder dem Löschen
des Wörterbuchs
beginnt, wie hiernach detaillierter am Block 67 erläutert werden
wird. Der nächste
Betrieb ist die Initialisierung und/oder Löschung der Zeigeradresse und
anderer Teile des Systems 10, wie am Block 68 gezeigt
wird. Die Betriebe beginnen am Block 69, wo der "X" Bit
Folgen-Code in den Folgen-Code-Abschnitt 18 des Zeigeradressregisters 16 gesetzt
wird. Jedoch existiert kein Folgen-Code, wenn das erste Zeichen
aus dem Datenstrom gelesen wird. Im Block 71 wird ein "Y"
Bit Zeichen-Code in den Erweiterungszeichenabschnitt 17 gesetzt.
Dies umfasst das zweite Zeichen im Datenstrom beim Starten oder
das zweite Zeichen im Datenstrom für den zweiten Lesebetrieb.
Eine eindeutige Zeigeradresse, die die zwei Codes verwendet, die
in das Adresszeigerregister gesetzt werden, werden verwendet, um
eine eindeutiche Zeigeradresse zu erzeugen, die, wie am Block 72 gezeigt,
2x+y Bits hat. Am Block 73 werden
die Inhalte des Wörterbuchs 11 an
der Zeigeradresse gelesen. Am Block 74 werden die Folgen-Codes-Inhalte des
Wörterbuchs 11 in
den Ausgabepuffer 22 gelesen, wie am Block 74 gezeigt
wird. Wenn jedoch keine Inhalte vorliegen, dann wird die Entsprechung
eines Keine-Inhalte-Codes zunächst
in den Puffer 22 gelesen. Am Block 75 wird eine
Entscheidung darüber
gefällt,
ob der aus dem Wörterbuch
gelesene Folgen-Code ein zuvor gespeicherter Code oder das Nicht-Vorhandensein
einer Information ist oder nicht. Für den Fall, dass ein Folgen-Code
gelesen wird, gibt es, wie am Block 76 gezeigt, einen TREFFER
und ein Vorrücken
auf die TREFFER-Logik. Wenn kein TREFFER erfolgt, wird, wie am Block 77 gezeigt,
auf die FEHL-ÜBEREINSTIMMUNGS-Logik
vorgerückt.
-
Die Erläuterung für die 3 läßt sich
direkt in Zusammenhang mit der 1 sowie
der 2 lesen. Im Falle,
dass man das Wörterbuch 11 nicht
zu initiieren wünscht,
ist es dennoch möglich,
dieselbe Sequenz an Betrieben zu verwenden, vorausgesetzt, dass,
wie in der 3A gezeigte,
vorbereitende Schritte gemacht werden.
-
Man nehme auf die 3A Bezug, die denselben Start-Block 66 zeigt.
Der Block 67A zeigt, dass das Wörterbuch 11 sowie
das System solchermaßen
gelöscht
werden, und solchermaßen
gibt es keine Code-Information im Wörterbuch 11, die zuvor aufgezeichnet
wurde. Jedoch werden die Code-Werte für die Zeichenreihe von Zahlen
reserviert, die sowohl dem Komprimierungssystem 10 als
auch dem Decodierungssystem bekannt sind.
-
Am Block 78 wird zum Starten
des System 10 das erste Zeichen im Datenstrom in den Folgen-Code-Abschnitt 18 des
Registers 16 geladen.
-
Am Block 79 wird das zweite
oder das nächste
Zeichen im Datenstrom in den Erweiterungszeichen-Code-Abschnitt 17 des
Registers 16 geladen.
-
Am Block 80 wird bestimmt,
ob das Zeichen im Folgen-Code-Abschnitt 18 eine
Ein-Zeichen-Folge ist und zuvor NICHT im Datenstrom aufgetreten ist.
Wenn NICHT, wird das Zeichen im Abschnitt 18 als ein zuletzt übereinstimmender
Code in das Pufferregister 22 geladen. Dieses Verfahren
ist nicht der alleinige Weg zum Starten des Datenkomprimierungssystems 10 ohne
die Initialisierung des Wörterbuchs 11,
stellt jedoch ein System 10 bereit, das genauso arbeitet,
als wäre
es, wie mit Bezug auf die Blöcke 72 und 77 erläutert, initialisiert
worden, nachdem im Block 80 die Bestimmung gemacht wurde. Obwohl
die Ein-Zeichen-Codes
im Wörterbuch 11 aufgezeichnet
werden könnten,
würde der
Adresszeiger auf der Leitung 19 nicht auf sie zugreifen.
-
Am Block 78 wird in der 1 zum ersten Mal im System
gezeigt, ob das erste Zeichen im Datenstrom in das Register 22 und
auch in den Folgen-Code-Abschnitt 18 des Adressregisters 16 geladen
wird. Als nächstes
wird das Erweiterungszeichen oder das zweite Zeichen im Datenstrom
in den Zeichen-Code-Abschnitt 17 des Adressregisters gesetzt,
wie am Block 79 gezeigt wird. Wird das System einmal für den Start
auf diese Art und Weise initiiert, wird es verständlich sein, dass in das Zeigeradressregister
zwei unterschiedliche und unabhängige
Zeichen gesetzt werden, und dass das. zuletzt übereinstimmende Zeichen, das
das erste Zeichen des Datenstroms anzeigt, im Puffer 22 gesetzt
wird. Diese Modifizierung der 3 verwendet
die restlichen Blöcke 72–77,
die mit den bis dato beschriebenen identisch sind und keine zusätzliche
Erklärung
benötigen.
-
Man nehme jetzt auf die 4 Bezug, die ein vereinfachtes
Flussdiagramm zeigt, das über
eine Sequenz an Betrieben verfügt,
die verwendet wird, wenn die zugegriffene einzelne Wörterbuchadresse Folgen-Codes
enthält,
die zu einem TREFFER führen.
Block 81 zeigt, dass der aus dem Wörterbuch 11 gelesene
Folgen-Code einen Treffer anzeigt. Block 82 zeigt an, dass
es wünschenswert
ist, einen neuen Zeiger für
eine längere
Folge zu erzeugen. Block 83 zeigt an, dass der aus dem
Wörterbuch
gelesene Folgen-Code
am Abschnitt 18 im Adressregister 16 gespeichert
wird, und Block 84 zeigt, dass der Code für das nächste Zeichen
im Eingabedatenstrom im Erweiterungszeichen-Abschnitt 17 des
Zeigeradressregisters 16 gespeichert wird. Block 85 zeigt,
dass eine neue Zeigeradresse mittels der Verwendung zweier Codes
im Zeigeradressregister 16 gespeichert wird. Block. 86
zeigt an, dass die neuen Folgen-Code-Inhalte des Wörterbuchs 11 an
der Zeigeradresse gelesen werden. Block 87 zeigt an, dass
die Codeinhalte des Wörterbuchs
im Pufferregister 22 gespeichert werden. Block 88 zeigt
eine Logikbestimmung darüber-an,
ob der aus dem Wörterbuch 11 gelesene
Informationscode einen zuvor gespeicherten Code umfasst. Wenn ein
Code aus dem Wörterbuch
gelesen wird, gibt es einen TREFFER auf der Leitung 89,
und die in den Blöcken 82 bis 88 gezeigte
Betriebssequenz wird wiederholt. Wenn es keinen TREFFER gibt, gibt
es eine FEHL-ÜBEREINSTIMMUNG,
und die Betriebssequenz macht, wie am Block 91 gezeigt, mit
der FEHL-ÜBEREINSTIMMUNGS-Logik
weiter.
-
Man nehme auf die 5 Bezug, die ein vereinfachtes Flussdiagramm
und die benutzte Betriebssequenz zeigt, wenn eine zugegriffene einzelne Wörterbuchadresse
keinen Folgen-Code enthält,
der zu einer FEHL-ÜBEREINSTIMMUNG
führt,
wie am Block 91A gezeigt- wird. Block 91A der 5 folgt der Logik, wenn
eine FEHL-ÜBEREINSTIMMUNG auftritt.
Zu Informationszwecken wird daran erinnert, dass, wenn eine FEHL-ÜBEREINSTIMMUNGS
erfolgt, die Folge von Zeichen bis zu dem Punkt erweitert wurde,
wo das letzte zur Folge hinzugefügte
zusätzliche
Zeichen die neue Folge so lang macht, dass es im Wörterbuch
nicht mehr gefunden wird. Wenn dies geschieht, war der vorherige
TREFFER die längste
im Wörterbuch
gefundene Übereinstimmung. Block 92 zeigt,
dass dieser letzte übereinstimmende TREFFER-Code
an einen Empfänger
bzw. Decoder übertragen
wird. Die letzte Übereinstimmung
wird im Register 22 gehalten, so dass sie auf der Leitung 32 an
einen Empfänger
oder Decoder 33 ausgegeben werden kann. Block 93 zeigt
den Betrieb zum Schreiben oder zum Speichern eines vom Code-Generator 59 erzeugten
nächsten
sequentiellen Codes an der Zeigeradresse in das Wörterbuch 11.
Es wird verständlich
sein, dass derselbe Code im Register 18 und der Code im
zuletzt übereinstimmenden
Puffer 22 identisch sind. Jedoch ist dies nicht der Code,
der an der Zeigeradresse in das Wörterbuch geschrieben wird.
Block 93 zeigt, dass ein nächster sequentieller Code in
das Wörterbuch 11 geschrieben
wird. Es ist nötig,
eine neue Zeigeradresse mittels Verwendung der in den Blöcken 94 und 95 gezeigten
und beschriebenen Logik zu erzeugen, worin der Code für den zuletzt
in den Adressregister-Abschnitt 17 eingegebenen Erweiterungszeichencode
in den Folgen-Code-Abschnitt 18 des
Adresszeigerregisters 16 bewegt oder überführt wird. Ein neues Zeichen
oder das nächste
Erweiterungszeichen wird, wie jeweils durch die Blöcke 94 und 95 gezeigt,
im Registerabschnitt 17 gespeichert. Block 96 zeigt
an, dass die Information im Register 16 dann benutzt wird,
um eine neue Zeigeradresse zu erzeugen, indem zwei Code-Abschnitte
verwendet werden, die in das Register 16 geladen werden,
wie in den Blöcken 94 und 95 gezeigt
wird. Block 97 zeigt an, dass die Folgen-Code-Inhalte des Wörterbuchs 11 an
der neuen Zeigeradresse aus dem Wörterbuch gelesen werden, und Block 98 zeigt,
dass die Folgen-Code-Inhalte
des Wörterbuchs 11 im
Ausgabecodepuffer 22 gespeichert werden. Block 99 zeigt
an, dass eine logische Bestimmung darüber gemacht wird, ob die aus
dein Wörterbuch 11 gelesene
Information einen zuvor gespeicherten Code umfasst, und, wenn dem
so ist, macht die Logik am Block 101 weiter und zeigt einen logischen
TREFFER an; wenn dem nicht so ist, rückt die Logik auf den Block 102 vor
und zeigt eine logische FEHL-ÜBEREINSTIMMUNG.
Die TREFFER- und die FEHL-ÜBEREINSTIMMUNGS-Logik
werden jeweils an den 4 und 5 gezeigt, und in den Blöcken 101 und 102 wird
jeweils darauf hingewiesen.
-
Man nehme jetzt auf die 6 Bezug, die eine schematische Zeichnung
eines Blocks oder Moduls des Speichers zeigt, der für ein Wörterbuch 11 verwendet
werden kann. Das Modul des Speichers 103 wird als 220 Zeilen tief und 16 Bit breit gezeigt.
Die 16 Bits können
für 12
Datenkomprimierungs-Codebits verwendet werden und die letzten 4
Bits für
einte in einem Wörterbuch
11 eingeschlossene Tabellenstufe reserviert sein. Solchermaßen umfassen
zwei Standardblöcke
des Speichers, die etwa 1 Million Bits oder Zeilen tief und 16 Bits
breit sind, eigentlich ein 2 Megabyte-Modul, das im Handel für etwa 2
Dollar erstanden werden kann. Dies läßt annehmen, dass die Module
in 8 Bit Bytes kommen, und wenn miteinander verbunden, eine adressierbare
16 Bit breite Zeile bilden. Wie hiernach erklärt werden wird, kann dieses 2
Megabyte-Modul ohne Modifikation für ein Wörterbuch in der vorliegenden
Erfindung verwendet werden, oder es kann für die Erweiterung der Tabelle durch
das Hinzufügen
zusätzlicher
4- oder 8-Bit Bytes geändert
werden. Wenn die LZW-Datenkomprimierung durchgeführt wird, ist es normal, 9
bis 12 Bits im LZW-Code zu benutzen. Selten gibt es eine rechtfertigung
für die
Erweiterung der Code-Bits über 13
Bits hinaus; falls jedoch gerechtfertigt, können im Wörterbuch durch die Vergrößerung des
Wörterbuchs
mehr Code-Bits untergebracht werden.
-
Man nehme jetzt auf die 7 Bezug, die dieselbe Speichergröße wie ein
Block oder Modul hat, der 221 Bits tief
und nur 8 Bits oder 1 Byte breit ist. In dieser Anordnung ist es
möglich,
zwei Zeilen auf eine Art und Weise zu verwenden, in der zwei 8 Bit
Bytes in Reihe geschaltet werden und zu einer äquivalenten Speicherspeicherung
wie der in der 6 gezeigten
führt.
Jedes Modul des Speichers umfasst zwei Megabytes, selbst wenn sie
verschieden verbunden werden, und die Kosten sind dieselben. Man
nehme jetzt auf die 8 Bezug,
die eine schematische Zeichnung dreier Blöcke oder Module des Speichers
der in den 6 und 7 gezeigten Art zeigt, die
jeweils zwei Megabytes des Speichers umfassen und mit 103A, B und C gekennzeichnet
werden, um anzuzeigen, dass sie derselben wie in der 6 gezeigten Art sind. Wenn
ein Wörterbuch
aufgebaut ist, indem drei identische Module 103A bis 103C verwendet
werden, ist es jetzt möglich,
in einem einzigen Modul zu arbeiten, das das besetzte Modul darstellt,
ein völlig
leeres Modul zu haben, das entleert oder zurückgesetzt wurde, und ein weiteres Modul
zu haben, das schon bis zur maximalen Anzahl an erlaubten und immer
noch nicht entleert Folgen-Codes gefüllt war.
-
In der Erläuterung der 6-8 wurde
die Anzahl der für
die Komprimierungscodes verwendeten Bits als 12 Bits gezeigt. Mittels
der Verwendung von 12 Bits ist es nur möglich, 4.096 eindeutige Folgen-Codes
zu erzeugen. Wie mit Bezug auf die 1 und 2 erläutert, ist das Wörterbuch
voll, wenn einmal die 4.096 eindeutigen Komprimierungscodes zugeordnet
wurden, selbst wenn es etwa 1 Millionen Adressen gibt. Es ist jetzt
möglich,
bis zu sämtlichen 16
Bits der Module für
die Komprimierungscodes zu verwenden, wenn das Bit-Tabellenstufen-11A-System zum Rücksetzen
des Wörterbuchs
vermieden wird. In der 6 wurden
z. B. vier der 16 Bits für
die mit Bezug auf die Ziffer 11A in 2 beschriebenen Tabellenstufenbetriebe
reserviert. Solchermaßen verbleiben
nur 12 Bits zur Bildung der Komprimierungscodes. Wenn jedoch die
Tabellenstufe 11A ganz weggelassen ist, sind nun alle 16
Bits für
die Komprimierungscodes verfügbar
und es ist jetzt möglich,
etwa 65.000 unterschiedliche Komprimierungscodes zu erzeugen, die
dem System ermöglichen
werden, falls erwünscht,
längere
Folgen zu erzeugen. Da nur 65.000 der möglichen 229 Adressen gefüllt werden,
ist es jetzt möglich,
ein Wörterbuch der
in der 8 gezeigten Art
zu konfigurieren, um die Anzahl der Codekomprimierungsbits zwischen
9 und 16 zu optimieren. Wenn das Wörterbuch einmal mit einer maximalen
Anzahl an Codes gefüllt
wird, die durch die Anzahl an ausgesuchten Code-Bits erlaubt sind, überträgt das Datenkomprimierungssystem
einen Rücksetzcode
an den Decoder oder Empfänger und
fährt sofort
zum nächsten
Modul 103B vor, um neue Codes zu erzeugen und neue Folgen
zu übertragen,
ohne auf das Modul, das mit den Komprimierungscodes gefüllt war,
zu warten und es aufzufrischen oder zu entleeren. Es kann möglich sein,
diesen Betrieb auf alternative Art und Weise durchzuführen, so
dass nur zwei Module verwendet werden; jedoch wird sichergestellt,
dass ein Modul immer leer sein wird, während ein anderes Modul belegt ist,
sofern drei Module bereitgestellt werden, weil man weiß, dass
der Auffrischungs- bzw. der Entleerungsbetrieb zuvor im dritten
Modul abgeschlossen werden kann, bevor das aktive Modul voll ist.
-
Nachdem eine vereinfachte Version
zum Anordnen eines im Handel erhältlichen
Speichers zum Vervollständigen
eine Wörterbuchs 11 der
in der vorliegenden Anmeldung beschriebenen Art erläutert wurde,
wird man anerkennen, dass die Kosten der 32 Megabytes des Speichers
jetzt etwa 20 Dollar betragen, und die Kosten eines Speichers der
hierin beschriebenen Art werden sich in einer sehr kurzen Zeitspanne
rentieren, indem die Computerbetriebszeit gesenkt wird. Dies ist
speziell für
große
Computer oder Großrechner
wahr.
-
Man nehme jetzt auf die 9 Bezug, die eine schematische
Zeichnung zeigt, die über
eine große
Anzahl an Abschnitten oder Blöcken
oder Modulen verfügt,
die denen in der 8 gezeigten ähneln. Wenn
es erwünscht
ist, ein einziges Modul aufzufrischen oder zu entleeren, kann, wie
am Block 105 gezeigt, ein Löschadresszähler verwendet werden, der
zwei Megabytes Adress-Erzeugungsleistung hat. Es wird bevorzugt,
alle Nullen in jede der Adressen und jedes der Module S1 bis S16 zu
schreiben, wie an der Ziffer 106 gezeigt wird. Ein Multiplexer 107, der
eine Auswahleingabe 108 hat, kann als Mittel zum Zeigen
auf die Adresse in einem Abschnitt verwendet werden, die für die Ausschließung anderer Abschnitte
gelöscht
werden soll. Solchermaßen
können
zu einem Zeitpunkt ein Abschnitt ausgewählt und Nullen in jede der
Adress-Stellen geschrieben werden, während andere Abschnitte des
Wörterbuchs für das Datenkomprimierungssystem
verwendet werden.
-
Man nehme jetzt auf die 10 Bezug, die eine schematische
Zeichnung eines Wörterbuchs 11 und
eine damit verknüpfte
Struktur zum Löschen
der Inhalte des Wörterbuchs
zeigt, das es nicht nötig
hat, jede mögliche
Adresse im Wörterbuch
zu überschreiben.
Wenn der Adresszeiger auf der Leitung 19 auf eine Adresse
im Wörterbuch 11 zugreift,
ist es möglich,
dieselbe Adresse in einen Hilfsspeicher 110 zu schreiben.
Ein UND-Gatter oder eine ähnliche
Vorrichtung 111 wird als Sperrvorrichtung arbeitend gezeigt,
da es nur erforderlich ist, die Adresse aufzuzeichnen, wenn eine
FEHL-ÜBEREINSTIMMUNG auftritt.
Solchermaßen
werden jedesmal, wenn die FEHL-ÜBEREINSTIMMUNG
erfolgt, die Zählungen des
Adresszählers 112 im
Speicher 110 gestuft, so dass 4.096 Adressen, in denen
während
eines Datenkomprimierungsbetriebs Information gespeichert wird,
in irgendeiner sequentiellen Reihenfolge im Speicher 110 gespeichert
enden. Es ist nun möglich, diese
Adressen zu verwenden, um einen Adresszeiger in Verbindung mit einem
Löschadresszähler zu erzeugen,
der alle Nullen erzeugt, damit nur die Adressen gelöscht werden,
von denen bekannt ist, dass sie Information gespeichert hatten.
-
Es wird jetzt beobachtet werden,
dass des Speicher, der nötig
ist, um die Codespeicherung für 4096
Adressen zu implementieren, gut in denselben Speichermodulen wie
denen für
das Wörterbuch 11 verwendeten
dargestellt sein können.
-
Nachdem die fundamentalen Grundsätze zur Durchführung der
Datenkomprimierung ohne das Suchen-Müssen eines Wörterbuchs
erläutert
wurden, wird es verständlich
sein, dass es zahlreiche Wege gibt, um das System zu implementieren.
Der Speicher ist z. B. gegenwärtig
so billig und wird noch billiger, dass ein zweckgebundener Speicher
in den meisten Anwendungen gerechtfertigt werden kann, und falls
eine zusätzliche
Geschwindigkeit von Nöten ist,
können
einige der gezeigten Schritte und Betriebe von einer billigen zweckgebundenen
Hardware-Implementierung ausgeführt
werden, die die in den 1–5 gezeigten Algorithmen und
Schritte verkörpert.
-
Nachdem erklärt wurde, wie die Tabelle oder die
Tabellenstufe 11A beseitigt werden kann, indem der billige Speicher
ersetzt wird, ist es wünschenswert,
die Tabellenstufenimplementierung- zu verwenden, wenn das ganze
System in der Software ausgeführt
ist.
-
Wenn es erwünscht ist, die Datenkomprimierung
mittels Verwendung eines Mehrprozessorsystems auf großen Dateien
durchzuführen,
ist es möglich,
die Geschwindigkeit der Datenkomprimierung zu optimieren, indem
die vorliegende Erfindung und einer der vielen Prozessoren verwendet
wird, um die Datenkomprimierung durchzuführen, bis sein Speicher voll
ist, und dann den Daten strom auf einen zweiten Prozessor im Datenkomprimierungsstrom
zu schalten und mit der Durchführung
der Datenkomprimierung fortzufahren, während der erste Prozessor sein
Wörterbuch
leert.
-
Führende
Hersteller, die Umsätze
und das Inventar an. ein Zentralverarbeitungssystem übertragen,
werden jetzt in der Lage sein, ihre Daten in Echtzeit zu komprimieren
und sie schneller über
Verbindungen zu senden, die genug Bandbreite haben. Wenn die Nachrichtenverbindung
langsamer als das Datenkomprimierungssystem ist, können die
komprimierten Daten schnell in einem Puffersystem gespeichert und
so schnell übertragen
werden wie es die Verbindung erlaubt, ohne das Computersystem zu beeinträchtigen,
das die Datenkomprimierung durchführt.
-
Nachdem ein Wörterbuch und ein Adresszeiger
der bevorzugten Ausführungsform
erläutert
wurden, die in einem einzigen Lesebetrieb bestimmen, ob für die gesuchte
Zeichenfolge ein Code oder Wert im Wörterbuch gespeichert wurde
oder nicht, wird es verständlich
sein, dass die Erfindung in der Software in einem Computer ausgeführt oder
mittels Verwendung einer Hardware und einer Software implementiert
sein kann. Es gibt Vorteile. zur Initialisierung des Wörterbuchs
mit der Code-Reihe von Zeichen sowie zur Nicht-Initialisierung des
Wörterbuchs,
wenn der Sender und der Empfänger
beide von der verwendeten Code-Reihe Kenntnis haben können. Wenn
es irgendeinen Zweifel gibt, können
die Code-Reihe und das
Protokoll vor den komprimierten Daten übertragen werden. Wenn das
Wörterbuch
nicht mit der Code-Reihe initialisiert wird, kompensiert der Komprimierer
anfänglich
den Mangel aus, dass einzelne Zeichen-Codes im Wörterbuch gespeichert sind.
Wenn jedoch mehrere Zeichen-Folgen-Codes im Wörterbuch gespeichert sind,
wird der neuartige Adresszeiger dasselbe neuartige TREFFER- oder FEHL-ÜBEREINSTIMMUNGS-Ergebnis
erzeugen. In der modifizierten Tabellenstufen-Ausführungsform ist
es möglich,
dieselben mehrfachen Folgen-Codes an verschiedenen Tabellenstufen
in unterschiedliche Adressen zu schreiben. Da nur eine Tabellenstufe gültig ist,
gibt es während
der Datenkomprimierungsbetriebe, in denen eine neue Sequenz an Folgen-Codewerten
in das Wörterbuch
geschrieben werden, keinen Konflikt, solange nicht der richtige
zuletzt übereinstimmende
Code bekannt und für das
Schreiben in das Register 18 an den Puffer 22 gelesen
wird, sofern ein TREFFER erfolgt. Anders erläutert, kann die Tabellenstufe
allein an der Zeigeradresse verwendet werden, um zu bestimmen, ob
ein TREFFER oder eine FEHL-ÜBEREINSTIMMUNG
erfolgte. Im Anschluss an jeden TREFFER ist der zuletzt übereinstimmende
Code verfügbar,
um die nächste
Zeigeradresse aufzubauen. Im Anschluss an eine FEHL-ÜBEREINSTIMMUNG
umfasst die nächste Zeigeradresse
zwei Ein-Zeichen-Codes, die außerhalb
vom Wörterbuch
zur Verfügung
stehen; solchermaßen
ist es nur nötig,
den letzten übereinstimmenden
Code zu haben, wenn ein TREFFER erfolgt, um Tabellenstufen zu verwenden,
damit ein TREFFER oder eine FEHL-ÜBEREINSTIMMUNG
bestimmt wird.