-
Die vorliegende Erfindung betrifft ein
Datenkomprimierungssystem.
-
In einem Datenkomprimierungssystem braucht man oft eine Vielzahl
von Datenkomprimierungsprozessoren die parallel arbeiten, um
eine erforderliche Datendurchsatzrate zu erhalten. Jeder
Codierer und Decodierer eines jeden Komprimierungsprozessors muß die
an ihn übertragenen Daten in einem bekannten maximalen Zeitraum
verarbeiten. Da die Komprimierung von einer Vielzahl der
parallelen Einheiten vorgenommen wird, kann die langsamste Einheit
die Datendurchsatzrate einschränken.
-
Die Aufgabe der vorliegenden Erfindung ist die Bereitstellung
eines verbesserten Datenkomprimierungssystems.
-
Diese Aufgabe wird von der in Anspruch 1 beanspruchten Erfindung
erreicht.
-
In bekannten Anordnungen verarbeitet jede Komprimierungseinheit
eine Vielzahl von Datenblöcken, und die von jedem Codierer
erhaltenen Änderungsinformationen müssen über die Datenblöcke
hinweg gespeichert werden. Die Reihenfolge der Datenblöcke muß auch
durch den gesamten Prozeß hindurch beibehalten werden. Die
Änderungsdaten werden aus den Statistiktabellen des arithmetischen
Codiersystems abgerufen. Zur Decodierung müssen die von jedem
Decodierer erhaltenen Änderungsinformationen ebenfalls über die
Datenblöcke hinweg gespeichert werden.
-
Beim Standardverfahren wird das Änderungsspeicherungsproblem
gelöst, indem eine Statistiktabelle in eine
Komprimierungseinheit integriert wird, so daß man für eine bestimmte
Datenübertragungsgeschwindigkeit ein spezifisches Format erreicht. Die
Datendurchsatzrate wird dann durch die Anzahl der parallel
plazierten Komprimierungseinheiten bestimmt. Je größer die Anzanl
der Komprimierungseinheiten ist, desto höher kann die
Datenübertragungsgeschwindigkeit sein, da jede Einheit einen Teil der
Daten verarbeiten kann. Somit bestimmt der erforderliche
Durchsatz die Anzahl der parallelen Komprimierungseinheiten. Die
Anzahl der Komprimierungseinheiten bestimmt das Format der
komprimierten Daten, da die Lernkurve der Statistiktabelle bei
jedem Codierer zur Verarbeitung, d.h. Komprimierung, von späteren
Daten verwendet wird. Eine höhere Anzahl von
Komprimierungseinheiten erhöhte früher die Anzahl der Statistiktabellen und
änderte daher das Format. Zu einem früheren Zeitpunkt codierte
Daten konnten nicht mehr zuverlässig decodiert werden. Wenn zu
einem späteren Zeitpunkt eine höhere
Datenübertragungsgeschwindigkeit erforderlich wird, wird unter Verwendung einer höheren
Anzahl von Komprimierungseinheiten ein neues Format festgelegt.
Das neue Format, das die höhere Anzahl der parallelgeschalteten
Komprimierungseinheiten bereitstellt, verhindert die Decodierung
der Daten, die unter dem vorherigen Format codiert wurden und
umgekehrt. Vor dieser Erfindung schloß die Zunahme der
Datenübertragungsgeschwindigkeit somit eine Aufwärts- und
Abwärtskompatibilität zwischen dem früheren System und dem verbesserten
System aus.
BESCHREIBUNG DER VERWANDTEN TECHNIK
-
Die folgenden in Bezug genommenen Schriften zeigen verschiedene
Aspekte des binärarithmetischen Codierprozesses. Die Erfindung
dieser Anmeldung macht von einer Modifikation des Prozesses
Gebrauch.
Arithmetic Coding, G. G. Langdon, Jr., u.a., IBM Journal of
Research and Development, Band 23, Nummer 2, März 1979, Seiten 149
bis 162.
-
Method for Carry-Over Control in a FIFO Arithmetic Code String,
IBM Technical Disclosure Bulletin, Band 23, Nummer 1, Juni 1980,
Seiten 310 bis 312.
-
Deblocking Method for Use with an Adaptive Arithmetic
Encoder/Decoder, IBM Technical Disclosure Bulletin, Band 23, Nummer
6, November 1980, Seiten 2528 bis 2529.
-
Universal Modelling and Coming, J. J. Rasaunen, IEEE
Transactions on Information Theory, Band IT-27, Nummer 11 Januar 1981,
Seiten 12 bis 23.
-
Statistics Collection for Compression Coming with Randomising
Feature, IBM Technical Disclosure Bulletin, Band 24, Nummer 10,
März 1982, Seite 4917.
-
A Simple General Binary Source Code, G. G. Langdon, Jr. u.a.,
IEEE Transactions on Information Theory, Band IT-28, Nummer 5,
September 1982, Seiten 800 bis 803.
-
Control Character Insertion into Arithmetically Encoded Strings,
IBM Technical Disclosure Bulletin, Band 25, Nummer 4, September
1982, Seiten 2051 bis 2052.
-
A Double-Adaptive File Compression Algorithm, G. G. Langdon, Jr.
u.a., JEEE Transactions on Communications, Band COM-31, Nummer
11, November 1983, Seiten 1253 bis 1255.
-
An Introduction to Arithmetic Coding, G. G. Langdon, Jr., IBM
Journal of Research and Development, Band 28, Nummer 2, März
1984, Seiten 135 bis 149.
-
Overlapped Statistics Memory Access for Decompression, IBM
Technical Disclosure Bulletin, Band 27, Nummer 1B, Juni 1984, Seiten
871 bis 872.
-
US-Patentschrift 4 467 317 "High Speed Arithmetic Compression
Coding Using Concurrent Value Updating", G. G. Langdon, Jr. u.a.
-
Keine der oben in Bezug genommenen Schriften beschreibt die
Erfindung dieser Anmeldung der Formatkompatibilität von
Komprimierungsprozessen zwischen Systemen mit unterschiedlichen
Durchsatzraten.
-
Gemäß einer bevorzugten Ausführungsform der Erfindung teilt das
Komprimierungssystem den Datenstrom zuerst in gleich große,
verwaltbare Einheiten oder Datenblöcke auf. Jede dieser Datenblöcke
wird nacheinander durch einen Demultiplexer an eine Vielzahl von
Codierern zur Komprimierung verteilt. Jeder Codierer enthält
eine Vielzahl von Statistiktabellen, um eine
Formatkompatibilität mit dem durch Hinzufügen von Einheiten erhöhten Durchsatz
der binärarithmetischen Codierer zu ermöglichen, während die
notwendige Hardware verringert wird und die Erweiterung zu der
Konfiguration mit dem höheren Durchsatz bereitgestellt wird. Die
komprimierten Datenblöcke werden in einem Multiplexer wieder
hintereinandergereiht.
-
Zur Decodierung der Daten werden die komprimierten Datenblöcke
an einen Demultiplexer übertragen, um jede komprimierte Datei an
einen aus einer Vielzahl von Decodierern zu verteilen. Jeder
Decodierer enthält auch eine Vielzahl von Statistiktabellen, um
eine Formatkompatibilität mit dem erhöhten Durchsatz der
Vielzahl der Decodierer zu ermöglichen, während die notwendige
Hardware auf ähnliche Weise verringert und die Erweiterung zu einer
Konfiguration mit höherem Durchsatz bereitgestellt und
gleichzeitig eine Abwärtskompatibilität mit der Konfiguration mit dem
niedrigeren Durchsatz hergestellt wird. Die dekomprimierten
Datenblöcke werden durch einen Multiplexer wieder
hintereinandergereiht, um die dekomprimierten Datenblöcke wieder zu ihrer
ursprünglichen Form zusammenzusetzen.
-
Somit kann gemäß der bevorzugten Ausführungsform eine Vielzahl
von Komprimierungsprozessoren verwendet werden, um eine
gewünschte Datenübertragungsgeschwindigkeit zu erhalten, während
die Formatkompatibilität dennoch aufrechterhalten bleibt. Die
Daten werden zuerst in gleich große Datenblöcke aufgeteilt, um
von jedem Komprimierungsprozessor parallel verarbeitet zu
werden. Jeder Komprimierungsprozessor (CP) enthält eine Anzahl m
von Statistiktabellen (ST) für eine Anzahl n von
Komprimierungsprozessoren. Die Anzahl der Datenblöcke ist gleich q, und i ist
die Dateinummer, d.h. 0, 1, 2 ... q-1. Die Datei i wird vom
Komprimierungsprozessor STP j unter Verwendung der Statistiktabelle
ST j k verarbeitet, wobei:
-
j = i Modulo n
-
k = (i geteilt durch n) Modulo m
-
Für ein N CP-System mit M STs in jedem CP wird die mögliche
Konfiguration einer geringeren Anzahl als N Prozessoren mit
-
m ≤ M
-
n ≤ N
-
definiert, wobei M, N, m und n alles ganze Zahlen größer Null
sind. n ist die Anzahl der CPs, die aus dem Maximum N in einem
CP-System verwendet werden, und m ist die Anzahl der STs, die
aus dem Maximum M in jedem CP verwendet werden.
-
Die bevorzugte Ausführungsform der Erfindung stellt daher ein
verbessertes Komprimierungssystem bereit, das eine Aufwärts- und
Abwärtsformatkompatibilität des Codier- und des
Decodierprozesses erlaubt.
-
Die bevorzugte Ausführungsform teilt die Datensätze in
verwaltbare Einheiten oder Datenblöcke auf und verarbeitet die Daten
durch ein Komprimierungssystem, das erweitert oder verkleinert
werden kann, um den Datenstrom mit einer gewünschten maximalen,
variablen Datenübertragungsgeschwindigkeit zu verarbeiten. Die
bei der Datenübertragung verwendete Anzahl von Codierern und
Decodierern hängt von der Datenübertragungsrate der Codierer und
Decodierer ab, welche die Komprimierung beziehungsweise die
Dekomprimierung parallel ausführen. Die Anzahl der verwendeten
Codierer und Decodierer kann sich je nach der erforderlichen
maximalen Datenübertragungsgeschwindigkeit vergrößern und
verkleinern. Durch Wahl der geeigneten Anzahl von Codierern und
Decodieren und der Anzahl von Statistiktabellen in jedem
Codierer und Decodierer wird die Kompatibilität des Datenformats
aufrechterhalten.
-
Die bevorzugte Ausführungsform stellt daher auch ein
Komprimierungssystem bereit, das an die den Daten inhärente Durchsatzrate
angepaßt werden kann, um die Daten mit der höheren
Geschwindigkeit, die von heutigen Datensatz-Verarbeitungssystemen gefordert
wird, zu komprimieren und zu verarbeiten, während eine
Aufwärts- und Abwärtsformatkompatibilität hergestellt wird, die in der
Lage ist, sowohl mit der erhöhten Durchsatzrate als auch der
Standarddurchsatzrate codierte Datenträger zu decodieren.
-
Eine adaptive Komprimierung wird in einer von zwei sich
gegenseitig ausschließenden Betriebsarten durchgeführt: dem
Sequenzmodus, der Sequenzen desselben Zeichens immer dann
herausfiltert, wenn zwei oder mehr gleiche Bytes angetroffen werden, und
dem Bytemodus, der Datenbytes parallel-seriell umsetzt und jedes
Byte entsprechend seiner eigenen Statistik codiert. Die
Ergebnisse beider Modi werden zur Sammlung von Statistiken in einer
Statistiktabelle verwendet. Die Statistiken werden gesammelt, um
innerhalb der Bytes Bitmuster zu ermitteln, und als
Wahrscheinlichkeit der Vorhersage des nächsten Bits auf der Grundlage der
vorherigen Erfahrung gespeichert. Der adaptive
Komprimierungsprozeß ordnet eine Folge von Datenbits unter Verwendung der
adaptiven Datenstatistiken einer Codefolge so zu, daß die
ursprünglichen Daten aus der Codefolge wiederhergestellt werden
können. Der Komprimierungsumfang ist zur Anzahl der richtigen
Bitvorhersagen direkt proportional.
-
Die bevorzugte Ausführungsform stellt darüber hinaus noch ein
Komprimierungssystem bereit, das eine Vielzahl von parallelen
Komprimierungsprozessoren verwendet und das sich an den
Datenstrom anpassen läßt, während eine vorhersagbare Durchsatzrate
zusammen mit der Formatkompatibilität zu einem
Komprimierungssystem, dessen Durchsatzrate durch Hinzufügen von parallelen
Komprimierungseinheiten erhöht wurde, geboten werden.
-
Eine andere Anwendung der bevorzugten Ausführungsform ist eine
Anwendung für einen Lempel-Ziv-Prozeß, der Eingangssymbolfolgen
variabler Länge in Codes fester Länge umwandelt. Dieser Prozeß
ist ein adaptiver Komprimierungsprozeß, der mit einer leeren
Tabelle von Symbolfolgen, d.h. einem Wörterbuch, beginnt und die
Tabelle sowohl während des Komprimierungs- als auch des
Dekomprimierungsprozesses erstellt. Eine Vielzahl von Codierern und
Decodierern kann zur Erhöhung des Durchsatzes eines solchen
Systems verwendet werden. Für eine vollständigere Beschreibung des
Lempel-Ziv-Prozesses wird auf die Artikel "A Universal Algorithm
for Sequential Data Compression", J. Ziv u.a., IEEE Transactions
on Information Theory, Band IT-3, Mai 1977, Seiten 337 bis 343,
und "Compression of Individual Sequences via Variable-Rate
Coming",
J. Ziv u.a., IEEE Transactions on Information Theory,
Band IT-24, Nr. 5, September 1978, Seite 5306, verwiesen.
-
Damit sich die Erfindung leichter verstehen läßt, wird nun mit
Bezug auf die Begleitzeichnungen eine Ausführungsform
beschrieben, in denen:
-
Figur 1 ein verallgemeinertes Blockdiagramm eines
Datenkomprimierungssystems mit einer Vielzahl von parallelen, miteinander
verbundenen Komprimierungsprozessoren ist,
-
Figur 2 eine Schemadarstellung der Verbindung von zwei
Komprimierungsprozessoren von Figur 1 ist,
-
Figur 3 ein ausführlicheres Blockdiagramm eines in Figur 1
gezeigten Komprimierungsprozessors ist,
-
Figur 4 bis Figur 8 Flußdiagramme von verschiedenen Verfahren
zeigen, die vom Codierer von Figur 3 durchgeführt werden,
-
Figur 9 den Ablauf des Codierprozesses zeigt, der als ein
Ausgangssignal des in Figur 3 gezeigten Codierers eine Summe von
Wahrscheinlichkeiten erzeugt,
-
Figur 10 ein Flußdiagramm der Wahrscheinlichkeitsberechnung auf
der Grundlage der Statistiktabellen von Figur 3 zeigt, und
-
Figur 11 bis Figur 15 den Verarbeitungsablauf beim Decodierer
von Figur 3 zeigen.
-
Die zu beschreibende Anordnung ist vorzugsweise zur Verwendung
mit einem Magnetbandsystem und insbesondere zur Verwendung im
Bandlaufwerk IBM 3490 gedacht. Die hier beschriebene bevorzugte
Ausführungsform gilt daher für ein Magnetbandsystem, es sollte
sich jedoch von selbst verstehen, daß die beschriebene Anordnung
zum Einsatz in einem beliebigen Speicher-, Kommunikations- oder
Übertragungssystem angepaßt oder in einem beliebigen Teil eines
Datenverarbeitungssystems verwendet werden könnte, bei dem ein
Datenstrom beispielsweise zur Speicherung komprimiert werden
soll und dann zur Verwendung durch das Datenverarbeitungssystem
abgerufen und dekomprimiert wird.
-
Die beschriebene Anordnung deckt ein wirksames Verfahren zur
Komprimierung der meisten Datenarten in hinreichend kleinere
Datenblöcke ab. Die derzeitige Hardware eines Bandlaufwerks IBM
3480 kann um diesen Ablauf, wie beschrieben, erweitert werden.
Dadurch bietet das System die mit dieser Erfindung gewonnenen
Fortschritte, während es bei Bedarf weiterhin Daten mit den
Benutzern des Host-Datenverarbeitungssystems austauscht.
-
Ausführlicher auf die Zeichnungen Bezug nehmend, sei erwähnt,
daß dieselben Bezugszahlen gleiche Strukturmerkmale und die
gleiche Funktionsweise in den verschiedenen Figuren der
Zeichnungen angeben. Ein Komprimierungssystem, wie es durch eine
Vielzahl parallelarbeitender Komprimierungsprozessoren 1 bis 4
von Figur 1 gezeigt ist, komprimiert Daten während einer Kanal-
Schreiboperation und dekomprimiert Daten während einer Kanal-
Leseoperation, wenn ein erweitertes Format ausgewählt wird. Die
Datenkomprimierung wird unter Verwendung einer abgeänderten
Version des binärarithmetischen Komprimierungs-(BAC-)Programms, das
in dem Artikel "An Introduction to Arithmetic Coming" von Glenn
G. Langdon, Jr., IBM Journal of Research and Development, Band
28, Nummer 2, März 1984, erklärt wird, durchgeführt.
-
Die Daten werden von jedem Komprimierungsprozessor mit einer
Geschwindigkeit von 1,25 Megabytes pro Sekunde codiert. Jeder
Komprimierungsprozessor, der parallel hinzugefügt wird, erlaubt
eine Codiergeschwindigkeit von weiteren 1,25 Megabytes pro
Sekunde
und erhöht somit die Datenverarbeitungsgeschwindigkeit.
Jeder zusätzliche Komprimierungsprozessor beeinflußt das
Statistikformat des ganzen Komprimierungssystems. Mittels dieser
Anordnung wird ein Verfahren gezeigt, wodurch der Durchsatz des
Komprimierungsprozesses durch Hinzufügen von
Komprimierungsprozessoren erhöht werden kann, während die derzeitige
Konfiguration für diese Erhöhung ausgelegt ist. Die Erhöhung der Zahl von
Komprimierungsprozessoren kann unter Beibehaltung der
Formatkompatibilität mit beispielsweise der vorliegenden
Ausführungsform durch Hinzufügen von Statistiktabellen zur vorliegenden
Ausführungsform Rechnung getragen werden, wie später
ausführlicher beschrieben wird.
-
Wie in Figur 1 gezeigt ist, ist eine Vielzahl von Kanaladaptern
(CA) 12 über eine Vielzahl von Komprimierungsprozessoren 17, die
sich in einer Komprimierungseinheit 16 befinden, mit einer
Verwendungseinheit wie beispielsweise einem Bandaufzeichnungsmedium
verbunden. Jeder der Komprimierungsprozessoren 17 empfängt die
unformatierten Daten von den Kanaladaptern 12 durch einen A-Bus
20. Dies wird später ausführlicher erörtert. Jeder
Komprimierungsprozessor 17 empfängt die unformatierten Daten von den
Kanaladaptern 12 über den A-Bus 20. Der Strom von Daten wird an
die Komprimierungsprozessoren 17 übertragen, wo Sie in gleich
große Blöcke oder Datenblöcke geteilt werden. Die einzelnen
Datenblöcke werden dann an einzelne Codierer in jedem
Komprimierungsprozessor 17 übertragen, wo jede Datei wiederum von den
verschiedenen Codierern verdichtet wird. Die komprimierten
Datenblöcke werden dann wieder zusammengesetzt und formatiert, um
auf einen Banddatenträger, d.h. die in Figur 1 gezeigte
Verwendungseinheit, geschrieben zu werden.
-
Nun insbesondere auf Figur 1 Bezug nehmend, sei erwähnt, daß die
Vielzahl der Komprimierungsprozessoren 17 in einen
Standardlese- und -Schreibdatenfluß eingefügt wird, der eine Vielzahl von
Kanaladaptern 12 zum Anschluß an die Verwendungseinheit, in diesem
Beispiel die Lese- und Schreibformatsteuerung zu und von einem
aufzeichnenden Banddatenträger, miteinander verbindet. Der
Datenstrom von einer Host-Verarbeitungseinheit wird an einen der
Vielzahl der Kanaladapter 12 zur Verbindung mit den
parallelarbeitenden Komprimierungsverarbeitungseinheiten 17 übertragen.
Ein Kanaladapter-Befehlssatz, Erweitertes Format, leitet die
Datenstromübertragung durch die Schnittstellen der Kanaladapter
12 an den A-Bus 20 und auf einer Leitung 21 an die Vielzahl der
Komprimierungsprozessoren 17. Der Datenstrom vom A-Bus 20 wird
an alle Komprimierungsprozessoren 17 übertragen, und durch ein
A-mout-Signal wird der Empfang und die Verteilung der Daten zu
und von den Komprimierungsprozessoren gesteuert. Der Ablauf wird
für die Figuren 2 und 3 ausführlicher erörtert.
-
Die Komprimierungsprozessoren 17 empfangen die unformatierten
Daten von dem aktiven CA 12. Die Komprimierungsprozessoren 17,
als Tandemeinheit in Form der Komprimierungseinheit 16 gezeigt,
teilen die unformatierten Daten in gleich große Blöcke oder
Datenblöcke aus dem Datenstrom. Die einzelnen Datenblöcke werden
dann an einzelne der Komprimierungsprozessoren 17 übertragen, wo
jede Datei wiederum komprimierungscodiert wird. Die
verarbeiteten Datenblöcke werden dann wieder in ihrer ursprünglichen
Reihenfolge zusammengesetzt und an einen B-Bus zur Formatierung
übertragen, bevor Sie auf den Banddatenträger, die
Verwendungseinheit, geschrieben werden. Das schematischere Flußdiagramm von
zwei Verarbeitungseinheiten und die Verbindung einer jeden ist
in Figur 2 gezeigt.
-
Bezug nehmend auf Figur 2, wird der Datenstrom vom A-Bus 20 in
eine Eingabe-/Ausgabesteuereinheit, eine für jeden der
Komprimierungsprozessoren, übertragen. Nur die
Komprimierungsprozessoren CP1 und CP2 sind in Figur 2 gezeigt. Der Datenstrom in Figur
2 wird an die E/A-Steuereinheit A-1 für CP1 und die
E/A-Steuereinheit
A-2 für CP2 übertragen. Die E/A-Steuereinheit A-1 legt
die Datei fest, die an CP1 übertragen werden soll. Das A-mout-
Signal bestimmt, welche E/A-Steuereinheit zu einem bestimmten
Zeitpunkt aktiv ist. Jede Verarbeitungseinheit, beispielsweise
CP1, enthält auch einen Teil einer
Rotations-Demultiplexer-/Multiplexereinheit 25, die als DMX/MX A-1 gezeigt ist. Gruppen von
gestrichelten und kreuzweise schraffierten Linien 27, die den
Rotation- Demultiplexer/Multiplexer 25 und einen
Rotations-Demultiplexer/Multiplexer 29 der Verarbeitungseinheit CP2
verbinden, zeigen an, daß alle Rotation- Demultiplexer/Multiplexer 25,
29 usw. miteinander verbunden sind, um eine rotierende
Demultiplexer- und Multiplexereinheit zu bilden, welche effektiv die
Übertragung einer Datei in jeden der Komprimierungsprozessoren
17 steuert.
-
CP1 enthält auch eine Codiereinheit 36 und eine Decodiereinheit
38. Das Ausgangssignal der Codiereinheit 36 wird an einen
anderen, als MX/DMX B-1 gezeigten Rotation-
Multiplexer/Demultiplexer 37, der die Resequenzierungshardware für die Codiereinheit
36 und die Trennhardware für die Decodiereinheit 38 ist,
geliefert, und das Eingangssignal der Decodiereinheit 38 wird von ihm
empfangen. Die Verbindung aller rotierenden MX/DMX-Einheiten wie
beispielsweise des Rotation- Multiplexers/Demul-tiplexers 37 für
CP1 dient zur Ausführung seiner
Multiplexer-/Demultiplexerfunktion, wie durch die gestrichelten und kreuzweise schraffierten
Linien 39 gezeigt ist. Die Komprimierungsprozessoren 17, die,
wie in Figur 1 gezeigt ist, parallel arbeiten, enthalten deshalb
eine Eingabe-/Ausgabesteuerung und einen Rotations-Demultiplexer
und Multiplexer 25, 29 für den oberen oder den A-Teil eines
jeden der Komprimierungsprozessoren 17 und eine
Eingabe-/Ausgabesteuerung und einen Rotation-Multiplexer und Demultiplexer 37
usw. für den unteren oder den B-Teil eines jeden der
Komprimierungsprozessoren 17.
-
Der Datenstrom vom A-Bus 20 wird an die E/A-Steuereinheit eines
jeden der Komprimierungsprozessoren 17 übertragen. Das A-mout-
Signal bestimmt, welcher Komprimierungsprozessor seine Datei aus
dem Datenstrom erhalten soll. Jeder rotierende Demultiplexer und
Multiplexer verteilt die Datei an die Codier- und
Decodiereinheiten in seinem zugehörigen Komprimierungsprozessor. Bei der
Initialisierung beispielsweise erhält CP1 die erste Datei, 512
Bytes bei der bevorzugten Ausführungsform, und dann wird das A-
mout-Signal aktiviert, und CP2 nimmt die zweite Datei. CP3
bekommt die nächste Datei, und dann bekommt CP4 seine Datei. Die
nächste Datei wird dann an CP1 übertragen, um die Reihenfolge
fortzusetzen. Hinsichtlich der eigentlichen Hardware, die in
einen Komprimierungsprozessor von Figur 1 und Figur 2 integriert
ist, wird auf Figur 3 Bezug genommen.
-
Wie in Figur 3 gezeigt ist, enthält jeder
Komprimierungsprozessor 17, und insbesondere CP1, einen Ereigniszähler -A 132, eine
Schnittstellen-Steuereinheit -A 134 und eine Speichereinheit -A
136. Diese Einheiten hat einzig der obere oder A-Teil des CP1.
Der untere oder B-Teil des CP1 enthält auch einen Ereigniszähler
-B 138, eine Speichereinheit -B 140 und eine Schnittstellen-
Steuereinheit -B 142. Jeder Komprimierungsprozessor enthält auch
einen Codierer 114, einen Decodierer 124 und einen
Geschwindigkeitsvergleichpuffer 144. Die Ereigniszähler wie beispielsweise
132 und 138 werden im oberen beziehungsweise im unteren Teil
eines jeden der Komprimierungsprozessoren verwendet, um das
Aufteilen und Zusammenfügen der jeweiligen Datenblöcke in den und
aus dem Komprimierungsprozessor zu steuern und zu prüfen. Der
Codierer 114 enthält zwei Statistiktabellen 113 und 115. Der
Decodierer 124 enthält auch zwei Statistiktabellen 123 und 125.
-
Fortfahrend mit Figur 31 wird angenommen, daß CP1 aktiviert
wird, was entweder durch den Systeminitialisierungsablauf oder
durch die Übertragung der Datenflußsteuerung vom vorherigen
Kom-TU 989 023
primierungsprozessor, d.h. CP4, erfolgen könnte. Wie zuvor
erwähnt wurde, überträgt das A-mout-Signal die Steuerung des
Datenflusses von einem Komprimierungsprozessor zum nächsten.
Während der Operation "Daten schreiben", die stattfindet, wenn der
Datenstrom vom Host komprimiert und in die Verwendungseinheit,
die zum Beispiel eine Magnetband-Speichereinheit sein kann,
geschrieben wird, wird der Datenstrom an alle Speichereinheiten in
dem oberen oder A-Teil des Komprimierungsprozessors übertragen.
Die Speichereinheit -A 136 signalisiert dem Ereigniszähler -A
132, daß eine Datei, d.h. 512 Bytes, empfangen worden ist. Der
Ereigniszähler -A 132 signalisiert wiederum der Schnittstellen-
Steuereinheit -A 134, daß CP1 seinen Teil der Daten, d.h. eine
Datei, erhalten hat und daß die nächste Datei von CP2 empfangen
werden sollte. Während der Operation "Daten schreiben" wird die
Datei unter Verwendung der in Figur 3 gezeigten durchgezogenen
Linie übertragen. Die Codes für die verschiedenen Linien sind im
untersten Teil von Figur 3 gezeigt, und es handelt sich dabei um
eine durchgezogene, einzelne Linie 146, welche für die
Steuerleitungen steht, die die unterschiedliche Hardware der
Komprimierungsprozessoren steuern, eine durchgezogene, doppelte Linie
148, die für den Schreibdatenfluß (WDF) steht, und eine
gestrichelte, doppelte Linie 150, die für den Signalfluß des
Lesedatenflusses (RDF) durch CP1 steht.
-
Die im Komprimierungsprozessor CP1 empfangene Datei wird von der
Speichereinheit -A 136 an den Codierer 114 zur Komprimierung
übertragen. Der Codierer 114 verwendet zur Komprimierung der
Datei die Statistiktabellen 113 und 115. Nach Beendigung des
Datenkomprimierungsprozesses überträgt der Codierer 114 die
komprimierte Datei an den Geschwindigkeitsvergleichpuffer 144. Die
komprimierten Daten werden zur Speicherung an den
Geschwindigkeitsvergleichpuffer 144 übertragen, um das Ausgangssignal des
Codierers 114 mit dem des Decodierers 124 zu vergleichen. Die
soeben komprimierten Daten werden vom
Geschwindigkeitsvergleichpuffer
144 an den Decodierer 124 zur Dekomprimierung und Prüfung
übertragen. Nach Abschluß der Prüfoperation werden die
komprimierten Daten an die Speichereinheit -B 140 übertragen, wo Sie
darauf warten, daß die Steuerung durch den Ereigniszähler -B 138
und die Schnittstellensteuerung -B 142 signalisieren, daß die
komprimierte Datei zur Übertragung an den Banddatenträger der
Verwendungseinheit auf den B-Bus gegeben werden kann.
-
Während der Operation "Daten lesen" oder "Daten abrufen", um
Daten vom Banddatenträger abzurufen, werden die komprimierten
Datenblöcke vom Banddatenträger empfangen und an die
Speichereinheit -B 140 übertragen. Die komprimierten
Dateninformationsbits werden in der Speichereinheit -B 140 gespeichert, bis die
ganze komprimierte Datei empfangen wurde. Zu diesem Zeitpunkt
aktiviert ein Strukturierungssignal, das die komprimierten
Datenblöcke trennt, den Ereigniszähler -B 138, der wiederum die
Schnittstellen-Steuereinhelt -B 142 aktiviert, um die
Datenflußsteuerung auf der B-mout-Signalleitung an den nächsten
Komprimierungsprozessor, CP2, zu übertragen. Der Prozessor CP2 kann
dann seine Datei zur Verwendung in seinem Komprimierungsprozeß
empfangen.
-
Dem RDF-Signalpfad folgend, wird die gespeicherte komprimierte
Datei an den Decodierer 124 übertragen, wo Sie dekomprimiert und
an die Speichereinheit -A 136 auf der Leitung 141 zur
Speicherung übertragen wird, bis die Speichereinheit signalisiert, daß
Sie ihre 512-Byte-Datei empfangen hat, und ein Signal wird an
die Schnittstellen-Steuereinheit -A 134 gegeben, so daß die
Speichereinheit -A 136 die Datei auf den A-Bus 20 und dann an
die Kanaladapter 12 übertragen kann. Nachdem die dekomprimierten
Daten übertragen worden sind, signalisiert der Ereigniszähler -A
132 der Schnittstellen-Steuereinheit -A 134, die Steuerung über
die A-mout-Signalleitung an den nächsten Komprimierungsprozessor
CP2 zu übertragen. Dies erfolgt, damit die nächste Datei aus der
Speichereinheit -A 136 des Prozessors CP2 auf den A-Bus und
schließlich an den Kanaladapter übertragen werden kann. Für eine
vollständigere Beschreibung der Steuerung und Folgesteuerung der
Komprimierungsprozessoren CP 1 bis CP 4 wird Bezug auf die
ebenfalls anhängige Europäische Patentanmeldung Nummer 90312697.7,
eingereicht am 21. November 1990, genommen.
-
Eine weitere Beschreibung der Verarbeitung der Daten auf einem
System mit einem Banddatenträger findel sich in der
US-Patentschrift 4 435 762 von Milligan u.a., die auf den Patentinhaber
der vorliegenden Erfindung übertragen wurde.
-
Ein einzelner Komprimierungsprozessor ist nicht schnell genug,
um einen Datenstrom zu komprimieren und eine bestimmte
Datenübertragungsgeschwindigkeit für die nichtkomprimierten Daten
aufrechtzuerhalten. Die Zunahme der Geschwindigkeit in der
Anordnung, die beschrieben wird, erfolgt ungefähr linear mit der
Erhöhung der Anzahl von Datenkomprimierungsprozessoren. Die
Daten, die auf den Banddatenträger in der Verwendungseinheit
geschrieben werden, können unter Verwendung derselben Anzahl von
Prozessoren, wie Sie für die Komprimierung eingesetzt wurde, auf
ähnliche Weise mit hoher Geschwindigkeit dekomprimiert werden.
Jede der Datenblöcke von 512-Byte-Blöcken wird in einem
getrennten Komprimierungsprozessor unabhängig von den anderen
komprimiert. Somit geht die erste Datei an den Komprimierungsprozessor
CP1, die zweite Datei an den Komprimierungsprozessor CP2 und so
weiter, bis die vierte Datei vom Komprimierungsprozessor CP4
komprimiert wird. Die fünfte Datei geht zurück an CP1.
-
Bezug nehmend auf Figur 3, gibt es eine zeitkritische
Rückkopplungspfad bei der Decodierung von Binärinformationen mit einem
binärarithmetischen Code, die den Zugriff auf eine
Statistiktabelle für das nächste Bit auf der Grundlage des Wertes des
letzten Bits bedingt. Wenn es nicht umgangen wird, verlängert dieses
Problem die für die Decodierung eines jeden Bits erforderliche
Zykluszeit. In der Anordnung, die beschrieben wird, wird ein
vorgriffsverfahren, das mehr als eine Statistik aus benachbarten
Speicherplätzen ausliest und die richtige Statistiktabelle
auswählt, mit dem Zugriff auf verschiedene Ebenen eines Baumes für
jedes aufeinanderfolgende Bit und dem Auslesen der möglichen
Statistiken für zwei Ebenen gleichzeitig kombiniert. Das
Ablaufflußdiagramm für das Codierschema ist in Figur 4 gezeigt und
wird später erörtert.
-
Das Programm zur binärarithmetischen Codierung für die
Komprimierung von Daten erfordert Binärstatistiken, um eine
Komprimierung zu erreichen. Dies macht das Abrufen einer Statistik für
jedes codierte oder decodierte Bit notwendig. Die Statistiken
werden in einem linearisierten Baum gespeichert. Die
Voraussetzung für die Codierung eines Bits ist, daß auf jede Ebene des
Baumes alle acht codierten Bits nur einmal zugegriffen wird Da
eine Statistik, sobald Sie einmal verwendet wurde, wieder 8
Bitzyklen lang nicht verwendet wird, kommt ein vorheriges Abrufen
oder Vorgreifen zur Anwendung, um den Zugriff auf Bitversätze
mit der Codierung oder Decodierung von Bits zu überlappen. Die
Statistiktabelle E-1 113 ist für die erste oder Modulo-Null-
Datei zuständig, während die Statistiktabelle E-2 115 für das
Modulo-4-Datenpaket aus den an den Komprimierungsprozessor
übertragenen Modulo-8-Paketen zuständig ist.
-
Figur 3 zeigt die beiden Statistiktabellen (D1, D2) 123 und 125
für den Decodierer 124. Die Statistiktabelle 123 und die
Statistiktabelle 125 sind mit der Decodiereinheit 124 von Figur 3
verbunden gezeigt und arbeiten im wesentlichen auf dieselbe
Weise, wie Sie für die Statistiktabellen (E1, E2) 113 und 115 für
den Codierer 114 beschrieben wurde. Der Direktzugriffsspeicher
aller Statistiktabellen sowohl für den Codierer 114 als auch den
Decodierer 124 sieht aus wie acht Codierer und Decodierer in
einer Reihe, wenn sich eigentlich vier in der Anordnung, die
beschrieben wird, befinden. Diese effektive Verdopplung der
Anzahl von Statistiktabellen für jeden Codierer und Decodierer
schafft eine Formatkompatibilität mit acht Codierern und
Decodierern, in denen sich jeweils eine Statistiktabelle befindet.
Die acht Codierer und Decodierer würden den Durchsatz der in
Figur 1 gezeigten vier verdoppeln, während die Verwendung von
einer Statistiktabelle für jeden Codierer und Decodierer eine
Formatkompatibilität mit den vier Codierern und Decodierern und
je zwei Statistiktabellen der Anordnung, die beschrieben wird,
erlauben.
-
Entsprechend der Anordnung, die beschrieben wird, kann folglich
eine Vielzahl von Komprimierungsprozessoren verwendet werden, um
eine gewünschte Datenübertragungsgeschwindigkeit zu erhalten,
während die Formatkompatibilität dennoch aufrechterhalten
bleibt. Die Daten werden zuerst in gleich große Datenblöcke zur
parallelen Verarbeitung durch alle Komprimierungsprozessoren
(CP) aufgeteilt. Jeder Komprimierungsprozessor enthält eine
Anzahl m von Statistiktabellen (ST) für eine Anzahl n von
Komprimierungsprozessoren. Die Anzahl der Datenblöcke ist gleich q,
und i ist die Dateinummer, d.h. 0, 1,2... q-1. Die Datei i wird
vom Komprimierungsprozessor CP j unter Verwendung der
Statistiktabelle ST j k verarbeitet, wobei:
-
j = i Modulo n
-
k = (i geteilt durch n) Modulo m
-
Für ein N CP-System mit M STS in jedem CP wird die mögliche
Konfiguration einer geringeren Anzahl als N Prozessoren mit
-
m ≤ M
-
n ≤ N
-
definiert, wobei M, N, m und n alles ganze Zahlen größer null
sind. n ist die Anzahl der CPs, die aus dem Maximum N in einem
CP-System verwendet werden, und m ist die Anzahl der STs, die
aus dem Maximum M in jedem CP verwendet werden.
-
Für die Anordnung, die beschrieben wird, ist N gleich acht CPs,
und M ist gleich zwei STs in jedem CP. Die möglichen
Konfigurationen sind die, bei denen n gleich vier und m gleich zwei ist.
Eine Erhöhung des Durchsatzes ist durch die Verwendung von acht
CPs und einer ST in jedem CP möglich, d.h. n ist gleich acht,
und m ist gleich eins. Eine andere Möglichkeit für acht CPs,
d.h. N ist gleich acht, ist die, bei dar M gleich acht ist; die
möglichen Konfigurationen sind dann:
-
n = 8, m = 1
-
n = 4, m = 2
-
n = 2, m = 4
-
n = 1, m = 8
-
Bei acht CPs und M gleich vier sind die möglichen
Konfigurationen dann:
-
n = 8, m = 1
-
n = 4, m = 2
-
n = 2, m = 4
-
Somit läßt sich die Formatkompatibilität über Erhöhungen des
Datendurchsatzes hinweg aufrechterhalten, indem die jetzt
benötigte Durchsatzrate und die später gewünschte Durchsatzrate
ausgewählt werden, während die Formatkompatibilität durch alle
Erhöhungen der Durchsatzrate hinweg aufrechterhalten bleibt. Die
Abwärts- und Aufwärtskompatibilität für die Komprimierung mit
einer höheren und einer niedrigeren Durchsatzrate ist
gewährleistet.
-
Die adaptive Komprimierung wird für jedes Byte im Codierer in
einer von zwei sich gegenseitig ausschließenden Betriebsarten
durchgeführt. Die erste ist der Sequenzmodus, der
aufeinanderfolgende Wiederholungen desselben Zeichens komprimiert, wenn
eine oder mehr Wiederholungen erkannt werden. Diese werden durch
Setzen des Sequenzmodus identifiziert.
-
Die zweite Betriebsart ist der Sequenzmodus, der einzelne Bytes
entsprechend Statistiken, die angesammelt wurden, codiert. Der
Sequenzmodus wird verwendet, wenn die beiden vorherigen Bytes
verschieden sind, oder nachdem ein Sequenzmodus eine
Nichtwiederholung angezeigt hat. Dieser Modus wird festgestellt, wenn
das Sequenzzeichen gleich dem Zeichen ist. Die Ergebnisse beider
Betriebsarten werden verwendet, die Statistiken von den
Statistiktabellen in Abhängigkeit davon, welche Statistiktabelle zu
diesem Zeitpunkt aktiviert ist, anzusammeln. Das Codierprogramm
paßt sich für jedes Datenbyte an die Statistiken an. Für die
Verarbeitung des SEQUENZ-Modus basiert die Statistik auf der
Wahrscheinlichkeit einer Byte-Wiederholung. Für die Verarbeitung
des Sequenzmodus wird anfangs jedes Bit eines jeden Bytes als
genauso wahrscheinlich angenommen.
-
Die Statistiken werden auf Bitbasis aktualisiert und in einer
Binärbaumstruktur in der Statistiktabelle gespeichert. Die
Statistiken werden vor dem Empfang eines jeden Datensatzes für die
Eingabedatenfolge zurückgesetzt. Folglich wird jeder Datensatz
unabhängig verarbeitet. Wie mit Bezug auf Figur 4 erörtert wird,
bestimmt das Programm dynamisch, welche Betriebsart in Kraft ist
mit dem Ziel der Maximierung der Datenkomprimierung. Das
Programm ordnet unter Verwendung von adaptiven Datenstatistiken
eine Folge von Datenbits einer Codefolge so zu, daß die genauen
ursprünglichen Daten aus der Codefolge wiederhergestellt werden
können. Der Umfang der Komprimierung ist sowohl zur Anzahl der
aufeinanderfolgenden Byte-Wiederholungen als auch zum Überwiegen
häufiger Byte-Werte direkt proportional. Die Codier- und
Decodiereinheiten verwenden beide dieselbe Anzahl von
Statistiktabellen, die für die maximale Anzahl von parallel arbeitenden
Komprimierungs-Prozessoreinheiten, die notwendig sind, um die
maximale Datenübertragungsgeschwindigkeit des Systems zu
erreichen, ausgewählt werden können. Zur weiteren Erörterung der
Komprimierungsverarbeitung gemäß den Figuren 4 bis 15 wird auf den
Artikel "Arithmetic Coming" von G. G. Langdon, Jr. und J. J.
Rasaunen, IBM Journal of Research and Development, Band 23,
Nummer 2, März 1979, und auf den zuvor erwähnten Artikel "An
Introduction to Arithmetic Coming" sowie auf die US-Patentschrift
A-4 467 317, ausgegeben im August 1984, mit dem Titel "High
Speed Arithmetic Compression Coming Using Concurrent Value
Updating" Bezug genommen. Diese Veröffentlichungen und die
US-Patentschrift beschreiben den Codier- und den Decodierprozeß der
beschriebenen Anordnung, bei der für jede Codier- und
Decodiereinheit eine einzige Statistiktabelle verwendet wird, weitaus
ausführlicher.
-
Bezugnehmend auf das Flußdiagramm des
Komprimierüngs-Codierprozesses von Figur 4 sei erwähnt, daß der Sequenzmodus verwendet
wird, wenn zwei vorherige Bytes gleich sind. Der Sequenzmodus
ist der verwendete Modus, wenn der Sequenzmodus nicht gefunden
wird. Der Sequenzmodus komprimiert aufeinanderfolgende
Wiederholungen desselben Zeichens, wenn eine oder mehr Wiederholungen
festgestellt werden. Wenn der Sequenzmodus nicht gefunden wird,
das heißt, wenn in den Sequenzmodus eingetreten wird, werden die
einzelnen Bytes entsprechend den angesammelten Statistiken
codiert, und er wird verwendet, wenn die beiden vorherigen Bytes
verschieden sind, d.h., wenn der Sequenzmodus nicht gefunden
wird oder nachdem ein Sequenzmodus eine Nichtwiederholung
angezeigt hat. Die Ergebnisse beider Betriebsarten werden zur
Ansammlung von Statistiken verwendet. Der Codierprozeß paßt sich
für jedes Byte den Statistiken an. Für die
Sequenzmodus-Verarbeitung
basiert die Statistik auf der Wahrscheinlichkeit einer
Byte-Wiederholung. Für den Bytemodus oder Nichtsequenzmodus wird
anfangs jedes Bit eines jeden Bytes als genauso wahrscheinlich
angenommen. Die Statistiken werden auf Bitbasis aktualisiert und
in einer Datenstruktur mit binärem Baum gespeichert. Die
Statistik nimmt die Form eines Drei-Bit-Feldes an, bei dem ein Bit
anzeigt, welcher Bitwert wahrscheinlicher ist, und die anderen
beiden Bits eine Zahl mit Werten von Eins bis Vier sind. Der
Wert gibt eine relative Wahrscheinlichkeit des Bitwertes an, der
am wahrscheinlichsten vorkommt, wobei der Wert Eins "genauso
wahrscheinlich" und der Wert Vier "höchstwahrscheinlich"
anzeigt. Die Statistiken werden zu Beginn eines jeden logischen
Blocks, der vom Host empfangen wird, zurückgesetzt, und folglich
wird jeder logische Block unabhängig verarbeitet. Der Prozeß
bestimmt dynamisch, welche Betriebsart in Kraft ist mit dem Ziel
der Maximierung der Datenkomprimierung. Der Prozeß ordnet eine
Folge von Datenbits unter Verwendung der adaptiven
Datenstatistiken einer Codefolge so zu, daß die genäuen ursprünglichen
Daten aus der Codefolge wiederhergestellt werden können. Der
Umfang der Komprimierung ist sowohl zur Anzahl der
aufeinanderfolgenden Byte-Wiederholungen als auch zum Überwiegen häufiger
Byte-Werte direkt proportional.
-
Das Flußdiagramm von Figur 4 zeigt den gesamten Codierprozeß für
eine Datei. Wie dargelegt wurde, umfaßt die Datei 512 Bytes mit
Ausnahme der letzten Datei, bei der es sich um die restlichen
Bytes handelt, die nach der Teilung des Datenstroms in die
Datenblöcke übrig blieben. Für jede Datei wird der Codierer auf
einen bekannten Zustand initialisiert. Die Statistiktabellen
werden nicht für jede Datei, sondern vielmehr nur für jeden
kanaldatensatz initialisiert. Das STEUERZEICHEN-Register wird
initialisiert. Das SEQUENZMODUS-Register wird zu Beginn einer
jeden Datei zurückgesetzt. Jedes Byte der Datei wird abgerufen und
in das ZEICHEN-Register geladen. Wenn der Sequenz-Modus gesetzt
ist, werden das STEUERZEICHEN- und das ZEICHEN-Register
verglichen. Wenn Sie gleich sind, wird ein "Wiederholungsereignis
codieren", das in Figur 6 gezeigt ist, ausgeführt. Andernfalls
wird ein "Nichtwiederholungsereignis codieren", das in Figur 7
gezeigt ist, ausgeführt, und der Codier-ZEICHEN-Prozeß, der in
Figur 5 gezeigt ist, wird ausgeführt. Wenn der SEQUENZ-Modus
nicht gesetzt wurde, wird direkt in den Codier-ZEICHEN-Prozeß
eingetreten.
-
Jetzt, da ein Byte der Datei im SEQUENZ-Modus codiert worden
ist, wurde die SEQUENZ-Modus-Entscheidung getroffen. Das
STEUERZEICHEN- und das ZEICHEN-Register werden verglichen. Wenn
Sie gleich sind, wird der SEQUENZ-Modus gesetzt. Andernfalls
wird der SEQUENZ-Modus zurückgesetzt, und das
STEUERZEICHEN-Register wird auf die Informationen des ZEICHEN-Registers für das
nächste SEQUENZ-Modus-Ereignis gesetzt.
-
Der Prozeß wird so lange wiederholt, bis alle Bytes der Datei
verarbeitet sind. Das "Nichtwiederholungsereignis codieren" wird
ausgeführt, um die Verarbeitung der Datei im Sequenzmodus zu
beenden. Ungeachtet dessen, ob der SEQUENZ-Modus gesetzt oder
zurückgesetzt wird, wird der Inhalt des Code-Registers im
Codierer als Teil des Codes herausgeschoben.
-
Das Flußdiagramm von Figur 4 beginnt im Block 200, indem die
verschiedenen Register initialisiert oder zurückgesetzt werden,
um die Operation zu starten. Der nächste Schritt, im Block 204,
ist, das nächste Byte aus der Datei abzurufen und in das
ZEICHEN-Register zu geben. Der Entscheidungsblock 206 stellt
fest, ob die Sequenzmodus-Ablauffolge gesetzt worden ist. Wenn
nicht, wird der "Nein"-Linie 208 zum nächsten Schritt im Block
210 gefolgt, wo dieses Byte codiert wird. Der Prozeß wird in
einem Block 212 fortgesetzt, um zu prüfen, ob das Zeichen gleich
ist wie das vorherige Zeichen. Wenn nicht, wird der NEIN-Linie
gefolgt, um den Sequenzmodus in einem Block 214 zurückzusetzen
und das STEUERZEICHEN-Register gleich dem ZEICHEN-Register zu
setzen, was ebenfalls im Block 214 gezeigt ist. Der Prozeß wird
fortgesetzt, um das nächste Byte abzurufen, Block 204. Wenn der
Sequenzmodus, Block 206, gesetzt worden ist, wird die JA-Leitung
genommen, um zum nächsten Entscheidungsblock 220 zu gehen, um zu
prüfen, ob die Informationen im STEUERZEICHEN-Register gleich
sind wie im ZEICHEN-Register. Wenn ja, wird eine Ja-Leitung 222
genommen, um das Wiederholungsereignis in einem Block 224 zu
codieren und um wieder mit dem Ablaufdiagramm bis zu der Stelle
fortzufahren, an der das Zeichen geprüft wird, um festzustellen,
ob es gleich dem letzten Zeichen ist, Block 212, und da es
gleich dem letzten Zeichen ist, wird der Sequenzmodus im Block
218 weiterhin gesetzt und zum Anfang der Anlauffolge
zurückgekehrt, um mehr Daten abzurufen. Die SEQUENZMODUS-Ablauffolge
wird verwendet, wenn die vorherigen Bytes gleich sind, und die
Codiereinheit komprimiert diese ähnlichen Daten entsprechend dem
binärarithmetischen Codierprozeß. Wenn das Zeichen dieses Bytes
nicht das gleiche ist und deshalb der NEIN-Linie vom Block 220
gefolgt wird, wird das Nichtwiederholungsereignis in einem Block
226 codiert, und der Ablauf geht weiter, um das Zeichen im Block
210 zu codieren. Da das STEUERZEICHEN-Register nicht gleich dem
ZEICHEN-Register ist, wird die NEIN-Entscheidungsleitung vom
Block 212 genommen, um den Sequenzmodus im Block 214
zurückzusetzen. Der Prozeß führt dann jedes Byte zu prüfen, da der
SEQUENZ-Modus nicht gesetzt ist, und jetzt ist es der Bytemodus,
bei dem die Bits eines jeden Bytes verarbeitet werden, um die
ungleichen Bits dieses Bytes zu komprimieren. Der Prozeß fährt
fort, eine Prüfung hinsichtlich aller Bytes in der zu
codierenden Datei vorzunehmen. Der Decodierprozeß zur Decodierung der
soeben codierten Informationen ist in Figur 11 gezeigt. Der
Verfahrensablauf für einige der einzelnen Blöcke von Figur 4 ist in
den Figuren 5 bis 8 gezeigt.
-
Figur 5 zeigt den ZEICHEN-CODIEREN-Ablauf des Blocks 210 von
Figur 4. Wenn die Bytes nicht wiederholt werden, wird im
Nichtsequenzmodus jedes Byte vom Zeichen-Codieren des Blocks 210
codiert, der in Figur 4 gezeigt ist. Für jedes der acht Bits des
Bytes, das im ZEICHEN-Puffer gespeichert ist, werden Statistiken
abgerufen und dann von dem in Figur 8 gezeigten Codierverfahren
codiert. Die aktualisierten Statistiken werden dann in
Statistiktabellen zurückgespeichert. Um ein Byte zu codieren, wird
ein DBIT-Register zuerst auf das höchstwertige Bit des Bytes
gesetzt. Die Adresse, an der die Statistiken für das erste Bit
abgerufen werden, ADDR, wird auf 1 gesetzt, wie im Block 236
gezeigt ist. Das Bit wird unter Verwendung der ADDR-Adresse und
des in Figur 8 gezeigten Bit-codieren-Prozesses codiert, Block
238. Um das nächste höchstwertige Bit zu codieren, wird die neue
Statistiktabellenadresse erzeugt, indem die ADDR-Adresse, wie im
Block 240 gezeigt ist, um ein Bit nach links verschoben und mit
dem DBIT aufgefüllt wird. Wie im Block 242 gezeigt ist, wird das
DBIT auf das nächste höchstwertige Bit des ZEICHEN-Registers
gesetzt. Der obige Ablauf wird acht Mal wiederholt, wie im Block
244 gezeigt ist, um alle Bits des Zeichens zu codieren.
-
Das "Wiederholungsereignis codieren" des Blocks 224 von Figur 4
ist in Figur 6 gezeigt. Die Adresse null der Statistiktabellen
wird für den Sequenzmodus verwendet. Die Adresse ADDR wird auf
Null gesetzt, und das DBIT wird auf Eins gesetzt, wie im Block
246 gezeigt ist, um anzuzeigen, daß ein wiederholtes Byte
codiert werden soll, wenn der Sequenzmodus gesetzt ist. Der Bit-
codieren-Prozeß von Figur 8 wird dann ausgeführt, um das
Wiederholungsereignis zu codieren, wie im Block 248 gezeigt ist.
-
Das "Nichtwiederholungsereignis codieren" des Blocks 226 von
Figur 4 ist in Figur 7 gezeigt. Der erste Schritt ist im Block
250 gezeigt, um die Adresse ADDR der Statistiktabellen auf null
und das DBIT auf null zu setzen, um anzuzeigen, daß ein Byte,
das ungleich dem Sequenzzeichen ist, codiert werden soll, wenn
der Sequenzmodus gesetzt ist. Die Adresse null der
Statistiktabellen wird für den Sequenzmodus verwendet. Dann wird der
Bitcodieren-Prozeß von Figur 8 ausgeführt, wie im Block 252 gezeigt
ist, um zu zeigen, daß es im Sequenzmodus zu einer Unterbrechung
kam und daß das Nichtsequenzzeichen im Zeichen-codieren-Block
210 codiert wird, wie in Figur 4 gezeigt ist.
-
Der Bit-codieren-Prozeß von Figur 8 wird im Block 238 von Figur
5, im Bit-codieren-Block 248 von Figur 6 und im Bit-codieren-
Block 252 von Figur 7 verwendet. Im ersten Schritt des
Prozesses, Block 254, werden die Statistiken M und K aus den
Statistiktabellen an der von der Adresse ADDR angegebenen Adresse
abgerufen. Bei der Statistik M handelt es sich um einen Ein-Bit-
Wert, der den vorhergesagten Wert anzeigt, und bei der Statistik
K handelt es sich um einen Zwei-Bit-Wahrscheinlichkeitswert. K
kann eine Zahl von eins bis vier sein. M, K und DBIT werden zur
Codierung des Bits unter Verwendung des Prozesses im
Codeberechnen-Block 256 verwendet. Der Code-berechnen-Prozeß ist in
Figur 9 gezeigt. Als nächstes, wie im Block 258 gezeigt ist,
werden die Statistiken zur Anpassung an die Daten aktualisiert.
Dies erfolgt im STATISTIKEN-(STATS-)berechnen-Prozeß, der in
Figur 10 gezeigt ist. Nachdem die neuen Statistiken in M und K
berechnet wurden, werden die Statistikwerte in den
Statistiktabellen an der von der Adresse ADDR angegebenen Adresse
gespeichert, wie im Block 260 gezeigt ist.
-
Wie in Figur 9 für den Code-berechnen-Prozeß gezeigt ist,
erzeugt der Codierprozeß eine Summe der Wahrscheinlichkeiten. Die
Summe ist der Code, der das Ausgangssignal des Codierers ist.
Die Summe wird durch Additions- und Verschiebe-Operationen auf
einem Summenregister C erzeugt. Auch wird ein
Nomalisierungsregister, das Register A, verwendet. In der bevorzugten
Ausführungsform haben beide, das A- und das C-Register, jeweils vier
Bits. Im Initialisierungsschritt von Figur 4 werden sowohl das
A- als auch das C-Register auf null initialisiert. Der erste
Schritt im Code-berechnen-Prozeß von Figur 9 legt fest, ob ein
Höchstwahrscheinlich-Symbol MPS oder ein Wenigstwahrscheinlich-
Symbol LPS codiert werden soll, wie im Block 600 gezeigt ist.
Wenn das DBIT gleich dem vorhergesagten Wert M ist, muß ein MPS
codiert werden. Andernfalls muß ein LPS codiert werden, und das
LPS, Linie 526, wird genommen. Das A-Register wird auf null
zurückgesetzt, und das C-Register wird K-mal nach links
verschoben. Das C-Register wird mit Nullen aufgefüllt, wenn es K-mal
nach links verschoben wurde. Die Bits, die durch den
Verschiebeprozeß aus dem C-Register kommen, werden zu einer Folge von Bits
verknüpft. Die komprimierten Daten sind diese Folge von Bits,
die aus dem C-Register kommt, wobei zusätzliche Operationen an
dieser Folge ausgeführt werden.
-
Für ein Höchstwahrscheinlich-Symbol (MPS) wird ein
Wahrscheinlichkeitsfaktor aus K erzeugt, der mit PF bezeichnet wird. Der
PF ist ein Vier-Bit-Wert, der zur Durchführung von
Rechenoperationen an den A- und C-Registern dient. Wenn K gleich 1 ist,
wird PF auf 1000 gesetzt. Wenn K gleich 2 ist, wird PF auf 0100
gesetzt. Wenn K gleich 3 ist, wird PF auf 0010 gesetzt. Wenn K
gleich 4 ist, wird die Tabelle in PF auf 0001 gesetzt. Der PF-
Wert wird zum Inhalt des C-Registers hinzuaddiert. Wenn es einen
Übertrag aus dem C-Register gibt, wird der Übertrag durch die
vorherigen Code-Bits, die erzeugt wurden, weitergegeben. Die
neue Vier-Bit-Summe wird ins C-Register zurückgespeichert.
Außerdem wird der PF vom Inhalt des A-Registers abgezogen, und die
neue Differenz wird ins A-Register zurückgespeichert. Wenn es
beim Subtraktionsprozeß einen negativen Übertrag ins A-Register
gab, werden sowohl das A- als auch das C-Register jeweils um ein
Bit nach links verschoben und mit einer Null aufgefüllt. Das aus
dem C-Register herausgeschobene Bit wird zur Bildung der
komprimierten Daten mit dem vorhergehenden Code-Bit verknüpft.
-
Da es sich bei den aus dem C-Register herausgeschobenen Bits um
eine Summe der Wahrscheinlichkeiten handelt, muß der Übertrag
aus dem C-Register für die ganze Summe weitergegeben werden. Es
ist nicht zweckmäßig, die ganze Summe im Codierer zu speichern,
und so muß die Weitergabe des Übertrags so gesteuert werden, daß
der bereits aus dem Codierer gesendete Code eine Weitergabe des
Übertrags durch den Ausgang nicht erforderlich macht. Dies wird
durch Füllbits erreicht. Die Summe, die aus dem C-Register
kommt, wird zu Acht-Bit-Bytes verknüpft und aus dem Codierer
gesendet. Immer wenn ein Code-Bit mit einem Wert von lauter
Einsen für die acht Bits festgestellt wird, werden nach dem aus
lauter Einsen bestehenden Byte vier Bits aus Nullen eingefügt,
um zu verhindern, daß ein Übertrag aus dem C-Register an das aus
lauter Einsen bestehende Byte weitergegeben wird. Wenn es einen
Übertrag aus dem C-Register gibt, werden die vier Füllbits von
Nullen um eins erhöht, womit verhindert wird, daß der Übertrag
an das aus lauter Einsen bestehende Code-Byte weitergegeben
wird. Ein Vorteil des Byte-Füllens ist, daß es ein Einfügen von
Sonderzeichen-Codes in den Code-Strom ermöglicht. Da auf ein aus
lauter Einsen bestehendes Bit nur eine von zwei Kombinationen
für die nächsten vier Bits, nämlich 0000 und 0001, folgen kann,
kann vom Codierprozeß nichts anderes als diese beiden Werte
erzeugt worden sein, und so kann ein Zwei-Byte-Sonderzeichen
eingefügt werden. Diese Sonderzeichen sind
Dateiende-Abgrenzungszeichen, welche die verschiedenen komprimierten Datenblöcke
voneinander trennen.
-
In Figur 10 und mit Bezug auf die US-Patentschrift A-4 463 342
wird die Wahrscheinlichkeitsberechnung auf der Grundlage der
Statistiktabelle komprimiert. Ein Monte-Carlo-Zähler, CNT, wird
zur Bestimmung, was an den Statistiktabellen M und K vorgenommen
wird, verwendet. Beim Monte-Carlo-Verfahren beruht die
Entscheidung, eine Aufgabe durchzuführen oder nicht durchzuführen, statt
auf einem deterministischen Ansatz auf einer Antwort, die anhand
einer Pseudozufallszahl ermittelt wird. Der CNT-Zähler ist ein
binärer Vier-Bit-Aufwärtszähler. Der CNT-Zähler wird im
Initialisierungsschritt von Figur 4 auf Nullen zurückgesetzt. Im
ersten Schritt, wie im Block 500 von Figur 10 gezeigt ist, geht es
darum festzustellen, ob das Höchstwahrscheinlich-Symbol MPS oder
das Wenigstwahrscheinlich-Symbol LPS verarbeitet wurde. Das MPS
wird festgestellt, wenn das DBIT und die M-Statistik gleich
sind. Das LPS wird festgestellt, wenn Sie nicht gleich sind
Wenn das LPS verarbeitet wurde, war die Vorhersage falsch, und
der Wahrscheinlichkeitswert des Auftretens des vorhergesagten
Wertes, sollte sofort vermindert werden. Wenn K bereits 1 ist,
was im Block 528 geprüft wird, wird die Statistik M invertiert,
Block 532, so daß jetzt anstelle des vorhergesagten Wertes der
entgegengesetzte Wert gespeichert wird. Wenn ein MPS verarbeitet
wurde, war die Vorhersage richtig, und der
Wahrscheinlichkeitswert des Auftretens dieses vorhergesagten Wertes, sollte erhöht
werden, jedoch nicht immer, da ein Erhöhen immer zu schnell zum
Höchstwert von K führt, und der Nachteil einer falschen
Vorhersage sehr viel größer wäre. Deshalb dient der Monte-Carlo-Zähler
dazu, K zufällig zu erhöhen. Wenn K gleich 1 ist,
Entscheidungsblock 510, und die beiden niederwertigen Bits des CNT-Zählers
Einsen sind, Block 516, wird K im Block 518 erhöht. Wenn des
Wert der K-Statistik 2 ist und die drei niederwertigen Bits des
CNT-Zählers Einsen sind, Block 513, wird K im Block 518 erhöht.
Wenn der Wert der K-Statistik 3 ist, Block 514, und alle vier
Bits des CNT-Zählers Einsen sind, Block 524, wird der Wert K
erhöht. Wenn K gleich vier ist, befindet es sich bereits auf
seinem Höchstwert und bleibt dort. Ungeachtet des Wertes von K
wird der CNT-Zähler für ein MPS erhöht, Blöcke 504 und 518.
-
Figur 11 bis Figur 15 beschreiben den Verarbeitungsablauf für
den Decodierprozeß. Figur 11 zeigt das Flußdiagramm des gesamten
Decodierprozesses für eine Datei, die an die Kanaladapter
gesendet wird. In der bevorzugten Ausführungsform hat eine Datei mit
Ausnahme der letzten Datei oder Rests eine Länge von 512 Bytes.
Für jede Datei wird beispielsweise der Decodierer 124 von Figur
3 zuerst auf einen bekannten Zustand initialisiert. Man beachte,
daß die Statistiktabelle nicht für jede Datei, sondern vielmehr
nur für jeden Kanaldatenstrom eines Datensatzes initialisiert
wird. Das STEUERZEICHEN-Register wird initialisiert, und die
Sequenzmodus-Anzeige wird am Anfang einer jeden Datei
zurückgesetzt. Das C-Register des Decodierers wird mit den
höchstwertigen Bits des ersten Bytes der komprimierten Daten geladen. im
Nichtsequenzmodus decodiert der Decodierprozeß jeweils ein Bit.
Acht Bits werden zu einem Byte zusammengesetzt und als ein Byte
Kanaldaten gesendet. Für den Sequenzmodus wird das wiederholte
Byte als ein Byte Kanaldaten gesendet, der Prozeß wird
fortgesetzt, bis alle komprimierten Daten für diese Datei verwendet
und alle Bits einer Datei decodiert wurden. Wenn der
Sequenzmodus gesetzt wird, wie im Block 308 gezeigt ist, wird die
JA-Leitung zum "Sequenzereignis decodieren" des Blocks 322 genommen.
Das "Sequenzereignis decodieren", das in Figur 13 gezeigt ist,
wird verarbeitet, und ein Wert wird im DBIT-Register
zurückgegeben. Wenn das DBIT Eins ist, wurde ein wiederholtes Byte im
Sequenzmodus codiert, so daß das STEUERZEICHEN- in das ZEICHEN-
Register kopiert und, wie im Block 314 gezeigt ist, gesendet
wird. Wenn das DBIT null ist, wird der Zeichen-decodieren-Block
310, der in Figur 12 gezeigt ist, abgearbeitet, um ein Datenbyte
in das ZEICHEN-Register zu decodieren und das Byte dann zu
senden. Dann wird die Sequenzmodus-Bestimmung vorgenommen. Wenn das
STEUERZEICHEN-Register gleich dem ZEICHEN-Register ist, wie im
Block 316 gezeigt ist, wird die JA-Leitung genommen, um den
Sequenzmodus zu setzen, wie im Block 238 gezeigt ist. Wenn das
STEUERZEICHEN-Register nicht gleich dem ZEICHEN-Register ist,
wird der Sequenzmodus zurückgesetzt, und das ZEICHEN-Register
wird in das STEUERZEICHEN-Register kopiert. Der Prozeß wird so
lange fortgesetzt, bis alle komprimierten Daten verwendet und
alle Bytes einer Gruppe von Kanaldaten dekomprimiert wurden.
-
Der Zeichen-decodieren-Prozeß des in Figur 11 gezeigten Blocks
310 ist in Figur 12 gezeigt. Wenn die Bytes nicht wiederholt
werden, beispielsweise wurde der NEIN-Linie vom Block 308
gefolgt, was zeigt, daß der Sequenzmodus nicht fortgesetzt wird,
siehe Figur 11, dann wird die Adresse ADDR, an der die
Statistiken für das erste Bit abgerufen werden, auf Eins gesetzt. Im
Nichtsequenzmodus wird jedes Bit von dem in Figur 12 gezeigten
Zeichen-decodieren-Prozeß decodiert. Für jedes der acht Bits
eines Bytes, das decodiert werden soll, werden die Statistiken
abgerufen, ein Bit wird von dem in Figur 14 gezeigten
Decodierprozeß decodiert, und die aktualisierten Statistiken werden in
die Statistiktabellen zurückgespeichert. Die Adresse, an der die
Statistiken für das erste Bit abgerufen werden, wird auf Eins
gesetzt, wie im Block 330 gezeigt ist. Das Decodierbit wird in
das DBIT-Register gegeben, wie im Block 332 gezeigt ist. Das
erste im DBIT-Register decodierte Bit wird beim höchstwertigen
Bit des ZEICHEN-Registers gespeichert. Zur Decodierung des
nächsten Bits wird die neue Statistiktabellenadresse erzeugt, indem
die Adresse ADDR um ein Bit nach links verschoben wird, während
dieses Bit mit dem DBIT aufgefüllt wird, wie im Block 334
gezeigt ist. Das nächste decodierte Bit wird beim nächsten
höchstwertigen Bit des ZEICHEN-Registers gespeichert. Dies erfolgt,
indem das Zeichen des ZEICHEN-Registers links verschoben und das
Register mit dem DBIT aufgefüllt wird, wie im Block 336 gezeigt
ist. Der vorstehende Prozeß wird achtmal wiederholt, um alle
Bits in das ZEICHEN-Register zu decodieren, wie im
Entscheidungsblock 338 gezeigt ist.
-
Das "Sequenzereignis decodieren" vom Block 322 in Figur 11 ist
in Figur 13 gezeigt. Die Adresse null der Statistiktabelle wird
für den Sequenzmodus verwendet, daher wird die Adresse ADDR auf
null gesetzt, wie im Block 340 von Figur 13 gezeigt ist. Das
decodierte Bit wird dann in das DBIT-Register gegeben, und das
Decodierbit wird zur Decodierung des Sequenzereignisses
ausgeführt,
wie im Block 342 gezeigt ist.
-
Der Bit-decodieren-Prozeß des Blocks 332 von Figur 12 ist in
Figur 14 gezeigt. Die Statistiken M und K werden aus den
Statistiktabellen an der vom ADDR-Signal angegebenen Adresse
abgerufen, wie im Block 350 gezeigt ist. Die Statistik M ist ein
Ein-Bit-Wert, der den Vorhersagewert angibt, und die Statistik K ist
ein Zwei-Bit-Wahrscheinlichkeitswert. Bei der Statistik K kann
es sich um eine Zahl von eins bis vier handeln. Die Statistiken
M und K dienen der Decodierung eines Bits unter Verwendung des
in Figur 15 gezeigten Datenbit-berechnen-Prozesses. Beim
Datenbit-berechnen-Prozeß vom Block 352 wird ein Bit decodiert und im
DBIT-Register gespeichert. Dann werden die Statistiken
aktualisiert, wie im Block 354 gezeigt ist, um die Statistiken an die
Daten, die gerade decodiert werden, anzupassen. Dies erfolgt in
dem in Figur 10 gezeigten Statistiken-berechnen-Prozeß. Nachdem
die neuen Statistiken in den Statistiken M und K berechnet
wurden, werden die Statistiken M und K in die Statistiktabellen an
der vom ADDR-Signal angegebenen Adresse zurückgespeichert, wie
im Block 356 gezeigt ist.
-
Bezug nehmend auf Figur 15 ist der Datenbit-berechnen-Prozeß vom
Block 352 in Figur 14 gezeigt. Der Decodierprozeß verwendet
dieselbe Art von A- und C-Register wie der Codierprozeß. Das
A-Register ist das Normalisierungsregister und wird auf die gleiche
Art im Codierprozeß verwendet. Das C-Register ist das
Code-Register. In der bevorzugten Ausführungsform haben sowohl das A- als
auch das C-Register jeweils vier Bits. Im
Initialisierungsschritt von Figur 8 für den Decodierzyklus werden sowohl das A-
als auch das C-Register auf null initialisiert. Die ersten vier
Bits der komprimierten Daten werden dann in das C-Register
geschoben. Der erste, im Block 700 von Figur 15 gezeigte Schritt
zur Berechnung des Datenbits ist die Feststellung, ob ein
Höchstwahrscheinlich-Symbol (MPS) oder ein
Wenigstwahrscheinlich-Symbol
(LPS) codiert wurde. Eine versuchsweise Subtraktion
wird am C-Register durchgeführt, um festzustellen, ob das MPS
oder das LPS codiert wurde. Der Wahrscheinlichkeitsfaktor PF
wird aus der Statistik K erzeugt. Der PF ist ein Vier-Bit-Wert,
der zur Ausführung von Rechenoperationen am A- und am C-Register
dient. Der Wahrscheinlichkeitsfaktor PF kann auf die gleiche
Weise wie beim Code-berechnen-Prozeß von Figur 9 von der
Statistik K übersetzt werden. Der PF wird vom Inhalt des C-Registers
abgezogen, und wenn ein negativer Übertrag in das C-Register
erforderlich ist, muß ein LPS codiert worden sein, andernfalls
wurde ein MPS codiert. Für ein LPS vom Block 700 wird das
A-Register auf Nullen zurückgesetzt, wie im Block 710 gezeigt ist,
und das C-Register wird K-mal links veischoben, wie im Block 712
gezeigt ist. Die Bits, die aus dem C-Register kommen, werden
verworfen. Das C-Register wird mit komprimierten Daten gefüllt.
Da festgestellt wurde, daß ein LPS aufgetreten ist, muß der
Prozeß beim Codierprozeß eine falsche Vorhersage getroffen haben,
und das DBIT wird auf den Inversionswert von M gesetzt, wie im
Block 714 gezeigt ist. Bei einem MPS wird der
Wahrscheinlichkeitsfaktor PF vom Inhalt des C-Registers abgezogen, wie im
Block 702 gezeigt ist. Die neue Vier-Bit-Differenz wird in das
C-Register zurückgespeichert. Ferner wird der PF vom Inhalt des
A-Registers abgezogen, und die neue Differenz wird in das
A-Register zurückgespeichert. Wenn es beim Subtraktionsprozeß einen
negativen Übertrag in das A-Register gab, wie im Block 704
gezeigt ist, werden sowohl das A- als auch das C-Register jeweils
um ein Bit nach links verschoben, wie in den Blöcken 706 und 708
gezeigt ist. Das A-Register wird mit einer Null aufgefüllt, und
das C-Register wird mit einem Bit der komprimierten Daten
aufgefüllt. Das aus dem C-Register herausgeschobene Bit wird
verworfen, und da ein MPS festgestellt worden ist, d.h. der Prozeß muß
beim Codierprozeß eine richtige Vorhersage getroffen haben, wird
das DBIT-Register auf den Wert M gesetzt, wie im Block 701
gezeigt ist.
-
Wenn die komprimierten Daten in das C-Register geschoben werden,
müssen die Full-Bits zur Verhinderung eines Übertrags entfernt
werden, siehe den Code-berechnen-Prozeß von Figur 6. Die
gestopften Bits werden von einem aus lauter Einsen bestehenden
Byte, gefolgt von den vier höchstwertigen Bits des nächsten
Code-Bytes, die alle null oder 0001 sind, gekennzeichnet. Wenn
die vier Bits&sub1; die auf das aus lauter Einsen bestehende Byte
folgen, lauter Nullen sind, wird keine Maßnahme ergriffen, und
die vier Null-Bits werden einfach verworfen, d.h. nicht in das
C-Register geschoben. Wenn die vier Bits, die auf das aus lauter
Einsen bestehende Byte folgen, 0001 sind, wird der Inhalt des C-
Registers um eins erhöht und in das C-Register
zurückgespeichert. Auch werden die vier Bits 0001 verworfen, d.h. nicht in
das C-Register geschoben. Wenn die vier Bits, die auf das aus
lauter Einsen bestehende Byte folgen, nicht lauter Nullen und
nicht 0001 sind, sind das aus lauter Einsen bestehende Byte und
das folgende Byte Sonderzeichen, die in den Code-Strom eingefügt
wurden. Diese Sonderzeichen sind die Dateiende-Zeichen oder die
Datensatzende-Zeichen, die eine Abgrenzung zwischen den
Datenblöcke vornehmen oder das Ende des Datensatzes kennzeichnen.
Wenn man im Code-Strom auf die Dateiende- oder Datensatzende-
Zeichen trifft, wird der Decodierprozeß fortgesetzt, bis alle
Datenbits decodiert sind und der Inhalt des C-Registers aus
lauter Nullen besteht, da dies die Ausgangsbedingung beim
Codierprozeß war.
-
Die Dekomprimierungs- oder Decodierfolge ist für die
Kanalgeschwindigkeit am zeitkritischsten. Das Datenbit auf der I-ten
Ebene des Baumes muß decodiert werden, um die Baumadresse zu
berechnen, die zur Decodierung des Bits auf der nächsthöchsten
Baumebene notwendig ist. Für eine einfache Überlappung, bei der
die Zugriffszeit auf die Statistiktabellen gleich der Zeit für
den decodierten Zyklus ist, werden zwei benachbarte Statistik-
Speicherplätze abgerufen, einer für jedes mögliche Ergebnis des
Datenbits der I-ten Ebene. Wenn das niederwertigere Adreßbit
bekannt wird, werden solche niederwertigeren Bits Steuersignale,
welche die benötigten Statistiken auswählen und an die
Komprimierungseinheit weiterleiten. Gleichzeitig bearbeitet der Prozeß
der Statistikanpassung die Statistiken und ersetzt Sie auf dem
entsprechenden Datenregister. Das Datenregister wird dann in die
Statistiktabelle zurückgeschrieben. Die Notwendigkeit der beiden
unabhängigen Datenregister-Speichereinheiten kann durch
Verwendung eines Speichers mit Doppelzugriff gelöst werden. Ein
Speicher mit Doppelzugriff liest und beschreibt zwei verschiedene
Speicheradressen gleichzeitig. Wird auf einer Baumebene gelesen
und eine andere Baumebene beschrieben, sind die Adressen der
Ebenen mit Sicherheit verschieden. Daher wird die
Statistiktabelle niemals aktualisiert, während Sie gelesen wird.
-
Für eine vollständigere Beschreibung des Verfahrensablaufs, der
in der beschriebenen Komprimierungseinheit verwendet wird, kann
auf die US-Patentschrift A-4 286 256, die US-Patentschrift
A-4 463 342 und die US-Patentschrift A-4 467 317 Bezug genommen
werden. Alle diese Patentschriften wurden auf den Inhaber der
vorliegenden Erfindung übertragen. Die Komprimierungseinheit
gemäß der vorliegenden Erfindung ist eine abgeänderte Version
der in diesen drei Patentschriften gezeigten Version. Die
Anderung besteht hauptsächlich darin, daß zwei Statistiktabellen für
jeden Codier- und Decodierabschnitt enthalten sind und die
Duplizierung der Statistiktabellen die Verwendung von
gebräuchlicher Hardware, das heißt eines Codierers oder eines Decodierers,
erlaubt, während Sie ein Format ermöglicht, das zu einem System
mit der doppelten Datendurchsatzrate kompatibel ist. Weniger
Hardware bedeutet weniger Kosten.
-
Der Codierprozeß von Figur 4 läßt sich vielleicht am besten
durch Bezugnahme auf die vorstehend erwähnte US-Patentschrift
A-4 467 317 verstehen. Ebenso wie in der Patentschrift
verwendet,
ist das erste Register das Register C, während das zweite
Register das Register A ist. In der bevorzugten Ausführungsform
hat jedes der Register A und C 4 Bits. Jedes ist so
programmiert, daß es als Schieberegister arbeitet. Das Register C
enthält während des Codierzyklus die komprimierten Daten, während
es bei der Decodierung die umkomprimierten Daten enthält.
-
Bezug nehmend auf Figur 15 ist der Decodierprozeß dem
Codierprozeß sehr ähnlich, außer daß bei der Anzeige des
Höchstwahrscheinlich-Symbols (MPS) im Block 700 von der Summe, die während
der Komprimierung berechnet wurde, im Block 702 subtrahiert
wird, um die unkomprimierten Daten zu erzeugen. Die Steuerung
des A-Registers ist mit der im Codierzyklus identisch. Die
Erzeugung eines negativen Übertrags im A-Register bewirkt eine
Normalisierung, während das Fehlen eines negativen Übertrags
bewirkt, daß keine Steuermaßnahme ergriffen wird. Bei der LPS-
Entscheidung vom ersten Entscheidungsblock 700 wird das
A-Register im Block 710 zurückgesetzt, und das C- Register wird um K
Bits nach links verschoben und mit den komprimierten, zu
decodierenden Daten aufgefüllt statt, wie während des Codierzyklus,
mit den Nullen.