DE69028601T2 - Datenkomprimierungssystem - Google Patents

Datenkomprimierungssystem

Info

Publication number
DE69028601T2
DE69028601T2 DE1990628601 DE69028601T DE69028601T2 DE 69028601 T2 DE69028601 T2 DE 69028601T2 DE 1990628601 DE1990628601 DE 1990628601 DE 69028601 T DE69028601 T DE 69028601T DE 69028601 T2 DE69028601 T2 DE 69028601T2
Authority
DE
Germany
Prior art keywords
data
compression
statistics
register
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE1990628601
Other languages
English (en)
Other versions
DE69028601D1 (de
Inventor
Neil Hector Maclean
Mayank Raman Patel
Richard Anthony Ripberger
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE69028601D1 publication Critical patent/DE69028601D1/de
Application granted granted Critical
Publication of DE69028601T2 publication Critical patent/DE69028601T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multi Processors (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Image Processing (AREA)

Description

  • 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.

Claims (1)

1. Datenkomprimierungssystem (16), das eine Vielzahl N von Komprimierungsprozessoren (17) enthält, wobei jeder Komprimierungsprozessor einen Codierer (114) und einen Decodierer (124) hat und jeder der Codierer und Decodierer eine Vielzahl M von Statistiktabellen (113, 115, 123, 125) hat, wobei das System so konfiguriert werden kann, daß es eine Anzahl n der Komprimierungsprozessoren, die kleiner als die mögliche Höchstzahl N ist, und eine Anzahl m der Statistiktabellen pro Codierer und Decodierer, die kleiner als die mögliche Höchstzahl M ist, verwendet, wobei jeder Komprimierungsprozessor einen gleich großen Datenblock zur Codierung verarbeitet und wobei, wenn q = die Anzahl von zu codierenden Datenblöcke und i = die Datenblocknummer von q ist, der Datenblock i vom Komprimierungsprozessor j unter Verwendung der Statistiktabelle k verarbeitet wird, wobei j = 1 Modulo n und k = (i/n) Modulo m.
DE1990628601 1989-11-22 1990-11-21 Datenkomprimierungssystem Expired - Lifetime DE69028601T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US44168189A 1989-11-22 1989-11-22

Publications (2)

Publication Number Publication Date
DE69028601D1 DE69028601D1 (de) 1996-10-24
DE69028601T2 true DE69028601T2 (de) 1997-03-13

Family

ID=23753862

Family Applications (1)

Application Number Title Priority Date Filing Date
DE1990628601 Expired - Lifetime DE69028601T2 (de) 1989-11-22 1990-11-21 Datenkomprimierungssystem

Country Status (3)

Country Link
EP (1) EP0429306B1 (de)
JP (1) JPH0774985B2 (de)
DE (1) DE69028601T2 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
CN108134805B (zh) * 2014-08-08 2021-04-30 安科讯(福建)科技有限公司 一种数据同步压缩还原算法及装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6228895A (ja) * 1985-07-31 1987-02-06 東芝テック株式会社 電子キヤツシユレジスタ
JPS62191914A (ja) * 1986-02-18 1987-08-22 Fuji Facom Corp デ−タ蓄積装置
JPS636172A (ja) * 1986-06-26 1988-01-12 三菱レイヨン株式会社 樹脂補強用繊維
JPS63204922A (ja) * 1987-02-20 1988-08-24 Fujitsu Ltd イメ−ジデ−タの圧縮制御装置
JPH01119119A (ja) * 1987-11-02 1989-05-11 Oki Electric Ind Co Ltd イメージデータの帯域圧縮装置
JPH01209819A (ja) * 1988-02-18 1989-08-23 Nippon Telegr & Teleph Corp <Ntt> 可変長符号化復号化方式

Also Published As

Publication number Publication date
EP0429306B1 (de) 1996-09-18
EP0429306A2 (de) 1991-05-29
DE69028601D1 (de) 1996-10-24
EP0429306A3 (en) 1992-09-23
JPH03186923A (ja) 1991-08-14
JPH0774985B2 (ja) 1995-08-09

Similar Documents

Publication Publication Date Title
DE69023329T2 (de) Vorrichtung zur adaptiven datenkompression für ein bandantriebssystem.
DE69024629T2 (de) Vorrichtung zur kompression von datenlängen und datenfolgen
DE3606869C2 (de) Vorrichtung zur Datenkompression
DE68925798T2 (de) Datenverdichtung
DE3850035T2 (de) Datenkomprimierungssystem mit Expandierungsschutz.
DE68924138T2 (de) Daten-kompressions/dekompressionsanordnung.
DE69031031T2 (de) Bandspeicherung
DE69224782T2 (de) Erhöhung der Leistungsfähigkeit beim Rücksetzten von Wörterbüchern für Datenkompressionsanwendungen
EP0230437B1 (de) Verfahren zum komprimieren und dekomprimieren mehrerer strukturverwandter datenfolgen sowie einrichtungen zur durchführung des verfahrens
DE4437790B4 (de) Verfahren und Vorrichtung zur Verwendung von endlichen Automaten zur Durchführung einer Kanalmodulation und einer Fehlerkorrektur und einer Entropie-Kodierung
DE4340591C2 (de) Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete
DE69834695T2 (de) Verfahren und Vorrichtung zur Datenkompression
DE2264090C3 (de) Datenverdichtung
DE69323020T2 (de) Dekodierer für veränderliche Längenkodes
DE69330196T2 (de) Textkomprimierungstechnik unter Anwendung einer frequenzgeordneten Matrix von Wort-Nummern-Abbildungen
DE69802520T2 (de) Verfahren und vorrichtung zur verlustfreien datenkompression
DE69026924T2 (de) Datenkomprimierungsverfahren
DE19742417A1 (de) Vorrichtung und Verfahren zur Durchführung von M-fachem Maschinenendzustands-Entropiekodieren bzw. Entropiekodieren mit einer Maschine mit finitem Zustand
DE2208664A1 (de) Verfahren zur Decodierung eines vorsatzfreien Verdichtungscodes veränderlicher Länge
DE112013000734B4 (de) Multiplex-Klassifizierung zum Komprimieren von Tabellendaten
DE2139731A1 (de) Anordnung und Verfahren zur Code Um Setzung mit einem Assoziativ Speicher
DE68919669T2 (de) Graphikbilddatenkompressionsverfahren.
DE3854490T2 (de) Dynamische Bestimmung von Multi-Mode-Kodierung für Datenkomprimierung.
DE69530182T2 (de) Datenkompressionsverfahren und Vorrichtung mit Expansionsschutz
DE60002340T2 (de) Verfahren und vorrichtung zur reduzierung der datenkompressionszeit

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8320 Willingness to grant licences declared (paragraph 23)
8328 Change in the person/name/address of the agent

Representative=s name: DUSCHER, R., DIPL.-PHYS. DR.RER.NAT., PAT.-ANW., 7