DE3751372T2 - Verfahren der arithmetischen Kodierung zur Kodierung- und Dekodierung. - Google Patents
Verfahren der arithmetischen Kodierung zur Kodierung- und Dekodierung.Info
- Publication number
- DE3751372T2 DE3751372T2 DE19873751372 DE3751372T DE3751372T2 DE 3751372 T2 DE3751372 T2 DE 3751372T2 DE 19873751372 DE19873751372 DE 19873751372 DE 3751372 T DE3751372 T DE 3751372T DE 3751372 T2 DE3751372 T2 DE 3751372T2
- Authority
- DE
- Germany
- Prior art keywords
- value
- bit
- bits
- event
- byte
- 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
Links
- 238000000034 method Methods 0.000 title claims description 44
- 230000004044 response Effects 0.000 claims description 9
- 230000008569 process Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 12
- 238000007906 compression Methods 0.000 description 11
- 230000006835 compression Effects 0.000 description 11
- 238000012360 testing method Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 9
- 230000006978 adaptation Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 8
- 230000006837 decompression Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000013144 data compression Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000007423 decrease Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000945 filler Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012634 optical imaging Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 125000006850 spacer group Chemical group 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/005—Statistical coding, e.g. Huffman, run length coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Error Detection And Correction (AREA)
Description
- Die vorliegende Erfindung betrifft die Komprimierung eingehender Daten durch Codierung mittels Verfahren der arithmetischen Codierung und das Wiederherstellen der Originaldaten ebenfalls mittels Verfahren der arithmetische Codierung.
- Um bei der Datenübertragung eine gewünschte Datenrate zu erzielen oder um Daten innerhalb eines begrenzten Speicherbereiches zu speichern, ist es häufig erforderlich oder wünschenswert die Daten auf weniger Bits zu komprimieren. Einige Zeit nachdem die Daten komprimiert wurden, sollen die Originaldaten wiederhergestellt werden, wobei letztgenannter Schritt als Dekomprimierung der Daten bezeichnet wird.
- Eine Anwendung der Datenkomprimierung/-dekomprimierung betrifft optische Abbildungen. Bei optischen Abbildungen gibt es typischerweise eine Vielzahl von Informationsstücken, wie beispielsweise die Dunkelheit oder der Farbton von Bildelementen (Pixel), welche mit hohen Geschwindigkeiten übertragen oder für zukünftige Verwendung gespeichert werden müssen.
- Die arithmetische Codierung ist ein Verfahren zum Erreichen einer Datenkomprimierung und Dekomprimierung. Bei der arithmetischen Codierung wird eine Entscheidung nach der anderen codiert, um aufeinanderfolgend kleinere, weniger enthaltende Intervalle entlang einer Zahlengeraden zu definieren. Die arithmetische Codierung wird in verschiedenen Artikeln, von den Erfindern der vorliegenden Erfindung veröffentlicht, beschrieben: "An Introduction to Arithmetic Coding" von G. G. Langdon Jr., IBM Journal of Research and Development, Band 28, Nr. 2, März 1984, Seiten 135 bis 149 und "Arithmetic Compression Code Control Parameters Approximation" von D. R. Helman, G. G. Langdon Jr., und J. J. Rissanen, IBM Technical Disclosure Bulletin, Band 23, Nr. 11, April 1981, Seiten 5112 bis 5114. Die zitierten Quellen werden durch diese Bezugnahme hierin aufgenommen, um den entsprechenden Hintergrund bereitzustellen.
- Wie in den oben erwähnten Artikeln unterstrichen wird, setzt die arithmetische Codierung voraus, daß jede Entscheidung eine Vielzahl möglicher, sich gegenseitig ausschließender Ergebnisse (oder Ereignisse) besitzt. Jedes Ergebnis oder jedes Ereignis wird in den Daten als Zeichen dargestellt. Vor dem Hintergrund der optischen Abbildung kann jede Entscheidung beispielsweise der Fragestellung zugeordnet sein, ob ein gegebenes Pixel schwarz ist; des Entscheidungsergebnis wird durch ein J (oder JA> Zeichen repräsentiert, wenn das Pixel schwarz ist oder durch ein N (oder NEIN) Zeichen, wenn das Pixel nicht schwarz ist. Eine Vielzahl von Entscheidungen kann dann durch eine Zeichenfolge dargestellt werden, z.B. JNJJN ... .
- Gemäß der dem Stand der Technik entsprechenden Lehren der arithmetischen Codierung wird entlang einer Wahrscheinlichkeitsgeraden ein aktuelles Intervall definiert. Das erste aktuelle Intervall geht von 0 bis 1. Das aktuelle Intervall wird in Abschnitte unterteilt, wobei jeder Abschnitt ein mögliches Erbegnis der nächsten Entscheidung entspricht. Wo nur zwei mögliche Ergebnisse für jede Entscheidung vorhanden sind, wird das aktuelle Intervall in zwei Abschnitte unterteilt. Die Länge jedes Abschnittes beruht auf der entsprechend zugeordneten Wahrscheinlichkeit. Die entsprechenden Wahrscheinlichkeiten können unveränderlich bleiben, oder sie können angepaßt werden, wenn Entscheidungsdaten eingegeben werden.
- Der Zusammenhang größerer Abschnitte mit Zeichen, welche mit größerer Frequenz auftreten, ist es, der zu dem Komprimierungseffekt führt. In dem oben zitierten Artikel ("An Introduction to Arithmetic Encoding") wird ein Beispiel für die arithmetische Codierung anhand eines 4 Zeichen umfassenden Satzes angegeben, bei dem jede Entscheidung zu einem "a"-Ereignis (50 % Wahrscheinlichkeit besitzend), einem "b"-Ereignis (25 % Wahrscheinlichkeit besitzend), einem "c" -Ereignis (12,5 % Wahrscheinlichkeit besitzend) oder zu einem "d"-Ereignis (12,5 % Wahrscheinlichkeit besitzend) führen kann. Die Darstellung der vier Ereignisse in binärer Form würde zwei Bits für jede Entscheidung benötigen, wobei die Ereignisse durch 00, 01, 10 und 11 dargestellt werden würden. Für drei Entscheidungen, wie beispielsweise aab, was sehr wahrscheinlich ist, würden die einfachen, uncodierten Daten 00 00 01 lauten, was sechs Bits erfordert. Wie jedoch in dem Artikel auf Seite 137 zu sehen ist, gestattet es der Ansatz der arithmetischen Codierung die Folge aab durch den Wert 001 darzustellen. Anstatt sechs Bits kann die Information durch drei Bits dargestellt werden. Diese Einsparung an Bits ergibt sich, wenn aufeinanderfolgend Ereignisse auftreten, die relativ hohe zugeordnete Wahrscheinlichkeiten besitzen.
- Die Einsparung verschlechtert sich, wenn viele Ereignisse eintreten, die niedrige Wahrscheinlichkeiten und relativ kleine Geradenabschnitte besitzen. Mit den oben erwähnten Wahrscheinlichkeiten würde eine Folge dd als uncodierte Daten als 11 11 dargestellt werden, wogegen durch die arithmetische Codierung die dd-Ereignisse durch 111111 dargestellt werden würden. Unter der Voraussetzung, daß die größeren Abschnitte tatsächlich Ereignissen entsprechen, welche mit einer entsprechend größeren Häufigkeit auftreten, werden die zusätzlich benötigten Bits für die weniger wahrscheinlichen Zeichen durch die erreichte Einsparung beim Auftreten der wahrscheinlicheren Zeichen aufgewogen.
- Folglich ist es von Bedeutung, daß sichergestellt wird, daß die zugeordnete Wahrscheinlichkeit (und die dieser entsprechende Abschnittslänge) begründet den tatsächlichen Wahrscheinlichkeiten der entsprechenden Ereignisse folgt.
- Zur Schätzung der Ereigniswahrscheinlichkeiten mit wachsendem Umfang an Entscheidungsdaten sind verschiedene Verfahren vorgeschlagen worden. In einem Artikel mit dem Titel "Method for Converting Counts to Coding Parameters" von G. G. Langdon Jr. und J. J. Rissanen, IBM Technical Disclosure Bulletin, Band 22, Nr. 7, Dezember 1979, Seiten 2880 bis 2882 werden Zähler verwendet, um Veränderungen der Zeichenwahrscheinlichkeiten aus der Beobachtung des Auftretens der Zeichen zu erkennen und um die Wahrscheinlichkeit q eines weniger wahrscheinlichen Zeichens (LPS) zu modifizieren. Im besonderen wird q verändert, um die Anzahl der Zählwerte eines Zeichens dividiert durch die Gesamtzahl der innerhalb einer Zeichenkette gezählten Zeichen widerzuspiegeln. Das heißt, wenn k der Zählwert eines Zeichens ist und n die Anzahl beider Zeichen ist, wird die Zeichenwahrscheinlichkeit auf der Grundlage von k/n verändert.
- Ein anderer Artikel von Langdon und Rissanen "Compression of Black-White Images with Arithmetic Coding", IEEE Transactions on Communications, Band CON-29, Nr. 6, Seiten 858 bis 867, Juni 1981 diskutiert ebenfalls die Wahrscheinlichkeiten im Umfeld der arithmetischen Codierung. Bei der Diskussion der Anpassung an die nichtstationäre Statistik setzt der IEEE-Artikel auf Seite 865 wie folgt fort: "Wir nehmen an, daß wir im Zustand z r [aufeinanderfolgende] 0'en empfangen haben und die aktuelle Schätzung der Wahrscheinlichkeit für [Zeichen] s(i) gleich 0 ist p=c0/c [worin c0 ein Zählwert ist, der definiert ist als c(0 z, s(0) ... s(t)) und c ein Zählwert ist, der definiert ist als c(z,s(0) ... s(t))]. Wir empfangen das Zeichen s(i). Wenn s(i) 0 ist, überprüfen wir: Ist p' (r+1) ≥ 0,2? Wenn ja betrachten wir die Beobachtung ... als widerspruchsfrei zu unserer Schätzung von p, und wir aktualisieren c0 und c um 1, um eine neue Schätzung zu erzeugen. ... Wenn jedoch p' (r+1) < 0,2 ist, ist die Beobachtung wahrscheinlich eine Anzeige dafür, daß sich die Statistik verändert hat und wir sollten darauf vorbereitet sein, unsere Schätzung in Richtung größerer Werte von p zu verändern.
- Wir machen dies, indem wir die Zählwerte c0 und c vor der Aktualisierung um 1 halbieren. Wenn das empfangene Zeichen s(i) eine 1 ist, führen wir unter Verwendung der Wahrscheinlichkeit p(r) denselben Konfidenztest durch. ... In Wirklichkeit legen wir aus Gründen der einfacheren Implementierung geeignete obere und untere Grenzen für jeden Schiefewert Q (s) über den Zählwert des weniger wahrscheinlichen Zeichens, um anzuzeigen, wann die Zählwerte zu halbieren sind und wann nicht." Bei der Beschreibung des Q(s)-Wertes ist zu beachten, daß der IEEE-Artikel die Näherung der Wahrscheinlichkeit des weniger wahrscheinlichen Zeichens auf den am nächsten liegenden Wert von 2-Q(s) diskutiert, wobei Q(s) eine ganze Zahl ist, die als die "Schiefezahl" bezeichnet wird.
- Ein spezieller Ansatz zur Anpassung der Wahrscheinlichkeit ist in der ebenfalls anhängigen EP-A-0 224 753 mit dem Titel "Probability Adaption for Arithmetic Coders" von W. B. Pennebaker und J. L. Mitchell, Priorität vom 4. Dezember 1985 enthalten, welche durch diese Bezugnahme hierin aufgenommen ist. Dieses Dokument repräsentiert gemäß Artikel 54(3) den Stand der Technik. Gemäß dieser Patentanmeldung wird die Zeichenwahrscheinlichkeit von Zeit zu Zeit nachgestellt. Zu diesem Zweck werden das Auftreten k des Zeichens mit der Wahrscheinlichkeit Eins LBS und alle n Wahrscheinlichkeitsereignisse gezählt. Die Werte von LBS werden auf neue Werte gesetzt, wenn n ein ausgewähltes Maximum nmax überschreitet und wenn k Schwellwerte kmin und kmax überschreitet. Ein weiterer Wahrscheinlichkeitschätzer wird ebenfalls in der EP-A-0 154 860 von F. Goertzel und J. L. Mitchellmit dem Titel "Model driven adaptive Data Compression/Decompression System for Data Transfer" dargelegt.
- Ein allgemein neuer Ansatz zum Anpassen eines Wahrscheinlichkeitsschätzers wird in einer ebenfalls anhängigen Patentanmeldung von W. B. Pennebaker und J. L. Mitchell mit demselben Prioritätsdatum wie diese Anmeldung und dem Titel "Probability Estimation based on Decision History" dargelegt, welche durch diese Bezugnahme in dem Umfang aufgenommen ist, der benötigt wird, um die Umgebung der vorliegenden Erfindung darzustellen. In der ebenfalls anhängigen Patentanmeldung werden eine Vielzahl möglicher Wahrscheinlichkeitswerte Q für ein Ereignis vorgeschrieben, beispielsweise in einer Tabelle. Auf der Grundlage der Erfindung, die in der ebenfalls anhängigen Patentanmeldung offenbart wird, wird ein Augendwert definiert und mit jeder Entscheidung wird der Augendwert reduziert. Der Betrag, um den der Augendwert reduziert wird, ist von dem Ereignis abhängig. Das heißt, innerhalb einer binären Anwendung, bei der jede Entscheidung dazu führen kann, daß ein weniger wahrscheinliches Zeichen (LPS), das eine aktuell geschätzte Wahrscheinlichkeit Qe aufweist oder ein wahrscheinlichres Zeichen (MPS) eingegeben wird, führt das Eingeben eines LPS dazu, daß der Augendwert auf den aktuellen Qe- Wert reduziert wird, wogegen das Eingeben eines MPS dazu führt, daß der Augendwert aus A-Qe berechnet wird. Wenn der aktualisierte Wert von A kleiner als ein vorgegebenes Minimum AMIN (was größer ist als der höchste Qe-Wert) ist, wird der aktualisierte Wert renormiert (vorzugsweise durch Verdoppeln), bis A wieder mindestens so groß wie AMIN ist. Ein grundlegendes Konzept der Erfindung der ebenfalls anhängigen Patentanmeldung besteht darin, daß der Wert von Qe immer dann aktualisiert wird, wenn A renormiert wird. Wenn der Renormierung ein LPS-Ereignis folgt, wird der Qe-Wert (der die geschätzte Wahrscheinlichkeit des LPS- Ereignisses repräsentiert) vergrößert. Wenn der Renormierung ein MPS-Ereignis folgt, verkleinert sich der Q-Wert. Indem die Veränderungen von Qe mit der Augendwertrenormierung verbunden werden, wird der Zeitpunkt für die Qe-Veränderungen auf einfache Weise festgelegt, ohne daß Zeiger benötigt werden und im Gegensatz zu früheren Techniken, gewährleistet dies, ein Nachfolgen der aktuellen Q-Wahrscheinlichkeit innerhalb des Bereiches der Qe-Werte.
- Zusätzlich wird mit dem neuen Ansatz der ebenfalls anhängigen Patentanmeldung erkannt, daß bei bestimmten "schlechten" Werten von Qe der Aktualisierungsvorgang festgefahren werden kann. Beispielsweise können Werte, welche gleich oder fast gleich AMIN sind, wenn sie einmal oder mehrmals verdoppelt werden, den folgenden störenden Ablauf hervorrufen. A wird nach einem LPS-Ereignis gleich Qe (schlecht) gesetzt. Das aktualisierte A wird verdoppelt (und wie erforderlich weiter verdoppelt), bis A nicht länger kleiner als AMIN ist und es wird ein größerer Q-Wert ausgewählt. Weil das aktualisierte A gleich oder fast gleich AMIN ist, führt ein einzelnes MPS-Ereignis dazu, daß A unter AMIN fällt, wodurch eine Renormierung und eine Reduzierung des Q-Wertes auf Qe (schlecht) erforderlich wird. Wenn die LPS-Wahrscheinlichkeit tatsächlich viel größer ist als der geschätzte Qe-Wert, kann wiederum leicht ein LPS-Ereignis eintreten, wodurch der Qe-Wert auf den höheren Wert zurückgesetzt wird. Wiederum wird ein einzelnes MPS-Ereignis eine Renormierung und eine Verschiebung des Qe-Wertes auf den Wert Qe(schlecht) bewirken und so weiter. Gemäß der Lehren der ebenfalls anhängigen Patentanmeldung wird diese Festfahrproblem dadurch angegangen, daß die "schlechten" Werte nicht zugelassen werden. Bestimmte Werte, die vom Standpunkt der "Festfahrens" her schlecht sind, sind jedoch vom Standpunkt der Gesamteffektivität gut.
- Zusätzlich zur Anpassung der Wahrscheinlichkeiten auf der Grundlage der aktualisierten Entscheidungsgeschichte beinhaltet die Implementierung der arithmetischen Codierung weitere problematische Aspekte, wie beispielsweise die "Weitergabe des positiven Übertrags" und die "Weitergabe des negativen Übertrags" (Borgens) . Das Problem der "Weitergabe des positiven Übertrags" wird unter Bezug auf einen ersten Typ eines Codierers zur arithmetischen Codierung beachtet, welcher eine Code folge C mit aufeinanderfolgenden Entscheidungs-Eingangssignalen gemäß der folgenden Vereinbarungen aktualisiert: (1), wenn das zu codierende Zeichen ein LPS ist, bleibt der Wert für C erhalten und das aktuelle Intervall wird zu A(neu) = Qe und (2), wenn das zu codierende Zeichen ein MPS ist, wird C auf C + Qe aktualisiert und das aktuelle Intervall wird zu A(neu) = A(vorhergehend) - Qe. Weil das Intervall immer kleiner wird und solche kleineren Intervalle zu C addiert werden, wächst die Genauigkeit von C (d.h., die Länge der Code folge). Die Genauigkeit kann ohne feste Begrenzung erweitert werden, so lange Entscheidungsdaten zur Codierung eingegeben werden. Weil C eine unbestimmte Länge (und Genauigkeit) haben kann, aber nur ein begrenzter Speicher verfügbar ist, der die Information der Code folge enthält, kann es Probleme geben, wenn ein Übertrag auftritt. Besonders dann, wenn der Wert der Codefolge durch eine Folge von mehreren Hundert 1'en repräsentiert wird, aber nur die letzten Bits von C in einem Schieberegister enthalten sind, ergibt sich ein Problem, wenn irgendein A zu C addiert werden soll. Der Übertrag kann nicht durch die mehreren Hundert 1-Bits durchlaufen, weil nur auf die letzten Bits zugegriffen werden kann. Eine Lösung für die Übertragsweitergabe wird als Bitauffüllen bezeichnet und ist in der Literatur herausgearbeitet worden. Bei dem dem Stand der Technik entsprechenden Bitauffüllen wird vorgeschlagen, nach einer vorgeschriebenen Anzahl von 1-Bits innerhalb einer Zeile mindestens ein den Übertrag empfangendes Bit einzuführen.
- In einem Codierer zur arithmetischen Codierung, der in der ebenfalls anhängigen EP-A 0 260 462, eingereicht mit demselben Datum wie die vorliegende Patentanmeldung, mit dem Titel "Arithmetic Coding for Data Compression/Decompression By Selectively Employed, Diverse Arithmetic Coding Encoders and Decoders" von den Erfindern J. L. Mitchell und W. B. Pennebaker erklärt wird, wird ein "optimaler" Software-Codierer beschrieben, bei dem mit jeder codierten Entscheidung der Wert des Codepunktes feststehend bleibt oder verkleinert wird. Dementsprechend kann es notwendig sein, einen negativen Übertrag bis über die Länge des Schieberegisters, welches den letzten Abschnitt der Codefolge enthält, hinaus weiterzugeben, wenn die Codefolge Cs eine Zeichenkette von 0-Bits enthält und eine Subtraktion erforderlich ist. Eine solche "Weitergabe eines negativen Übertrags" wird in der oben erwähnten Patentanmeldung als Grund dafür angegeben, daß einige oder alle hexadezimalen '00'-Bytes in der codierten Codefolge in Hexadezimale 'FF' mit einem Übertragsbit konvertiert werden. Auf diese Weise wird aus der Weitergabe des negativen Übertrags ein Zustand entsprechend der Weitergabe des positiven Übertrags. Die Berücksichtigung des positiven und negativen Übertrags ohne Einbuße an Codiereffektivität und ohne daß eine Vielzahl zusätzlicher Bits benötigt werden, ist ein angestrebtes Ziel.
- Als weiterer Aspekt der arithmetischen Codierung ist es wünschenswert, Steuerworte in die Codefolge einzugeben. Das heißt, es ist wünschenswert, einer externen Steuereinrichtung zu ermöglichen, die Code folge zu unterbrechen und ein Steuerwort einzufügen. Am Decodiererende sollte eine andere Steuereinrichtung in der Lage sein, das Steuerwort zu erkennen und aus der empfangenen Datenkette herauszuziehen. Mit Bezug auf die Einfügung von Steuerworten ist es erwünscht, daß (a) eine große Anzahl Steuerworte bereitgestellt werden und daß (b) das Auftreten eines Steuerwortes ohne wesentliche Reduzierung der Codiereffektivität erkannt wird. In der im vorhergehenden erwähnten EP-A 0 260 462, die sich auf die arithmetische Codierung von Daten zur Komprimierung/Dekomprimierung bezieht, wird ein 32-Bit-Register bereitgestellt, das auf dem Weg zu einem Puffer Teile der Codefolge enthält. Die niederwertigsten zwölf Bits (0 bis 11) repräsentieren einen "gebrochenen" Teil der Codefolge, welcher zu dem aktuellen Wert von A ausgerichtet wird. Bit 12 entspricht einem Abstandsbit, die Bits 13 bis 20 repräsentieren ein 8-Bit-Byte der Codefolgedaten, das als nächstes in den Puffer geschafft wird. Bit 21 ist ein Übertragsempfangsbit. Von den zwei Bits, die Bit 21 folgen, wird Bit 22 verwendet, um festzustellen, ob ein Steuerwort eingefügt wird. Die Bits 31 bis 24 stellen ein Markierungsbit bereit, welches nach links verschoben wird, wenn Datenbits an Bit 0 erscheinen. (Nach acht Verschiebungen erreicht das Markierungsbit eine Bitposition, welche anzeigt, daß ein Datenbyte zum Transport in den Puffer bereit ist.) Zusammen mit dem einzelnen Abstandsbit können unter bestimmten Bedingungen zwei Füllbits benötigt werden.
- Gemäß der vorliegenden Erfindung führt ein Codierer und Decodierer zur arithmetischen Codierung eine Wahrscheinlichkeitsanpassung durch, wie dies in der im vorhergehenden erwähnten EP-A-0 260 460 "Probability Estimation Based on Decision History" erklärt wird, wobei im besonderen die Wahrscheinlichkeitsanpassung durch die Auswahl möglicher Qe-Werte unterstützt wird, was die Leistungsfähigkeit des Codierers und des Decodierers verbessert.
- Unter diesem Gesichtspunkt ist zu beachten, daß die vorliegende Erfindung einen binären arithmetischen Codierer betrifft, der einen Wahrscheinlichkeitsschätzer besitzt, welcher in den arithmetischen Codiervorgang integriert ist. Das heißt, der Augendwert entspricht in der vorliegenden Erfindung dem aktuellen Intervall auf der Zahlengeraden und der Wert von Qe wird in Reaktion auf eine Renormierung von A, d.h. des Wertes des aktuellen Intervalles, aktualisiert. Indem festgestellt wird, wann der Augendwert (d.h. der aktuelle Intervallwert) A unter ein Minimum AMIN gefallen ist und folglich eine Aktualisierung von Qe erforderlich ist, stellt die vorliegende Erfindung AMIN durch einen Wert dar, welcher ein erstes gesetztes Bit gefolgt durch zurückgesetzte Bits enthält. Zum Beispiel könnte AMIN durch hexadezimal '1000' oder 1 0000 0000 0000 0000 (in binärer Form) dargestellt werden. Auf diese Weise werden eine Renormierung und Qe-Aktualisierung dadurch anzeigt, daß sich das führende Bit auf 0 ändert. Der Renormierungstest ist somit ein Einzelbittest. Die Erfindung löst somit die Aufgabe, einen einfachen Test zur Feststellung des Zeitpunktes, wann Q verändert werden sollte und wann eine Renormierung erforderlich ist, bereitzustellen. Es ist zu beachten, daß das U.S.-Patent 4 467 317 einen Ein-Bit-Test für die Augendrenormierung vorschlägt. Die Integration einer Wahrscheinlichkeitsanpassung und eines Einzelbittests zur Renormierung führt jedoch im Vergleich zu den früheren Lehren zu einem beachtenswerten Fortschritt.
- Außerdem verbessert die vorliegende Erfindung den Ansatz für die Wahrscheinlichkeitsschätzung, der in der oben erwähnten, ebenfalls anhängigen Patentanmeldung offenbart wird, in verschiedenen Richtungen. Erstens sind die Qe-Werte in einer Tabelle enthalten, wobei die Tabelle die folgenden Merkmale besitzt:
- 1. Jeder Eintrag in der Qe-Tabelle besitzt einen 6-Bit-Codierparameter, von dem ein Bit den Inhalt des MPS-Wertes anzeigt und 5 Bits den Qe-Index darstellen, welcher einen entsprechenden Qe-Wert identifiziert; und
- 2. für jeden Eintrag besteht der Qe-Wert vorzugsweise aus 12 Bits, wobei nicht mehr als 5 Bits eines beliebigen Qe-Wertes gesetzt sind und wobei das niederwertigste Bit jedes Qe-Wertes immer gesetzt ist (was eine Hardware-Implementierung unterstützt) . Die Auswahl der Bits, welche für die verschiedenen Qe- Werte gesetzt werden, wird zum Teil so durchgeführt, daß dadurch die Anzahl der Gatter, die zur Ableitung eines Q-Wertes aus dem Qe-Index durchlaufen werden müssen, begrenzt wird.
- Die Verwendung eines 6-Bit-Codierparameters ist deshalb von Bedeutung, da dies mit existierenden Makros und vordefinierten Hardware-Zellen übereinstimmt. Außerdem würde, wenn weniger Bits für den Codierparameter verwendet würden, die Tabellenbeschaffenheit zu grob werden und dies würde die stationäre Statistik verschlechtern. Bei mehr als sechs Bits würde zusätzliche Chipfläche benötigt, und die Kosten würden steigen. Durch geeignete Auswahl der Qe-Werte wird die Anzahl der benötigten Qe-Einträge auf einer relativ kleinen Zahl gehalten (z.B. dreißig), während eine gute Codiereffektivität und eine ziemlich einfache Implementierung erreicht werden.
- Desweiteren stellt die vorliegende Erfindung zur Vermeidung des Problems des "Festfahrens" der Qe-Werte folgende Verbesserung bereit. Wie in der im vorhergehenden erwähnten, ebenfalls anhängigen Patentanmeldung, die die Wahrscheinlichkeitsschätzung betrifft, werden einige "schlechte" Q-Werte der Form AMIN/2n verboten. "Schlechte" Qe-Werte, welche außer daß sie ein "Festfahren" fördern, zur Leistungsfähigkeit beitragen, können jedoch entsprechend der Erfindung in die Tabelle aufgenommen werden. Um den "Festfahreffekt" bei solchen belassenen "schlechten" Werten zu vermeiden, gewährleistet die Erfindung, daß in Reaktion auf eine LPS-Renormierung an einem "schlechten" Qe-Wert der Qe-Wert auf einen vorgegebenen Tabellenwert vergrößert wird, so daß mehr als eine MPS-Renormierung erforderlich sind, um auf diesen schlechten Qe-Wert zurückzukommen. Die vorliegende Erfindung löst somit durch ein Verfahren gemäß Anspruch 1 die Aufgabe, Qe-Werte zu erhalten, welche ansonsten zum "Festfahren" führen würden.
- Desweiteren zeigt, um eine Software-Implementierung eines Codierers und eines Decodierers gemäß der vorliegenden Erfindung zu erleichtern, eine negative Qe-Darstellung an, daß der Sinn eines MPS 1 ist und eine positive Qe-Darstellung zeigt an, daß MPS=0 ist. Durch diesen Ansatz muß im besonderen ein Vorzeichenbit nicht maskiert werden, und es werden Verarbeitungszyklen eingespart.
- Eine weitere Aufgabe der Erfindung besteht darin, die Anordnung der Bits innerhalb eines Schieberegisters zu verbessern, welches die Codefolgedaten auf dem Weg zu einem Pufferspeicher enthält. Unter diesem Gesichtspunkt wird mehr als ein Abstandsbit bereitgestellt, um den "gebrochenen" Abschnitt der Codefolgedaten von dem zu transportierenden "Byte" zu trennen. Durch Einfügen von mehr als einem Abstandsbit wird der Möglichkeit vorgebeugt, daß eine hexadezimale 'FF'-Folge nach einer anderen hexadezimalen 'FF'-Folge auftritt. Außerdem kann bei mehreren Abstandsbits ein einzelnes Füllbit dazu dienen, um entweder einen Übertrag zu empfangen oder um Aussprungcodes zu Steuerworten bereitzustellen. Entsprechend einer Ausführungsform der Erfindung sind in einem X-Schieberegister, das Codefolgedaten enthält, die Bits zu Beginn wie folgt angeordnet:
- X = 0000000f 00000000 ss.xxxxxx xxxxxx00
- Wenn ein Byte in den Puffer transportiert werden kann, hat das X-Register folgenden Inhalt:
- X = f E 0000000c bbbbbbbb ss .xxxxxx xxxxxx00
- Durch Verwendung von zwei Abstandsbits (dargestellt als "ss") anstatt eines Abstandsbits, wird jeder Bedarf nach mehr als einem Füllbit eliminiert. Dementsprechend verbessert die Verwendung von zwei Abstandsbits die Codiereffektivität, weil ein möglicher Bedarf nach Übertragung eines extra Bits eliminiert wird. Außerdem erreicht die vorliegende Erfindung die zusätzliche Aufgabe, einen wirksamen Aussprung bereitzustellen, an dem vor der Codierung und Übertragung durch einen externe Steuereinrichtung ein Steuerwort in die Code folge eingefügt werden kann, daß aus der übertragenen Folge vor der Decodierung herausgezogen werden kann.
- Die vorliegende Erfindung gewährleistet desweiteren, daß die ersten zwei Bits einer Code folge 00 sind. Dies erfüllt die Aufgabe, die Decodierung zu erleichtern.
- Schließlich erfüllt die vorliegende Erfindung die oben erwähnten Aufgaben innerhalb eines arithmetischen Codiersystems, in welchem die Codierung und/oder Decodierung abwechselnd mit einer Hardware oder Software durchgeführt werden kann, welche unterschiedlichen Konventionen entsprechen.
- Fig. 1 ist ein Blockschaltbild, ein allgemeines arithmetisches Codiersystem darstellend, das einen Q-Codierer und ein Q-Decodierer der vorliegenden Erfindung enthält.
- Fig. 2 ist eine Darstellung einer Wahrscheinlichkeits-Zahlengeraden mit einem Intervall, das entsprechend einer bevorzugten Hardware-Codierer- und Decodiererausführungsform in zwei Abschnitte unterteilt ist.
- Fig. 3 ist eine Darstellung einer Wahrscheinlichkeits-Zahlengeraden mit einem Intervall, das entsprechend einer bevorzugten Software-Codierer- und Decodiererausführungsform in zwei Abschnitte unterteilt ist.
- Fig. 4 ist eine Darstellung, die eine Vielzahl von unterschiedlichen Codierern zeigt, von denen jeder austauschbar mit einem aus einer Vielzahl Decodierer verwendet werden kann.
- Fig. 5 ist eine Darstellung, die die Anordnung der Bitpositionen innerhalb eines 32-Bit-Coderegisters (X Register) veranschaulicht, das bei der Codierung einer komprimierten Datenfolge verwendet wird.
- Fig. 6 ist eine Darstellung, die die Anordnung der Bitpositionen innerhalb eines 32-Bit-Registers veranschaulicht, das bei der Decodierung einer komprimierten Datenfolge verwendet wird.
- Fig. 7 ist eine Darstellung, die zeigt, wie die Aktualisierung der Qe-Wahrscheinlichkeit mit der Augendrenormierung verbunden ist.
- Fig. 8 ist eine graphische Darstellung der Codier-Unwirksamkeit.
- Fig. 9 ist eine Darstellung einer Gatterschaltung, die zur Ableitung eines Qe-Ausgangswertes aus einem q-Index- Eingangssignal verwendet wird.
- Fig. 10 ist eine Tabelle, die eine Vielzahl von Zusammenhängen zeigt, von denen jeder eine entsprechende aktuelle geschätzte Wahrscheinlichkeit besitzt.
- Fig. 11 ist eine Darstellung, die zeigt, wie eine Bitkette auf der Grundlage von Zusammenhängen interpretiert wird.
- Fig. 12 ist eine Darstellung eines arithmetischen Einzel-Raten-Codiersystems als Finite State Maschine.
- Fig. 13 bis Fig. 49 sind Flußdiagramme, die die entsprechenden Operationen der Q-Codierer und Q-Decodierer zeigen.
- Fig. 50 ist ein allgemeines Blockschaltbild, das die Hauptkomponenten eines Hardware-Q-Codierers gemäß der Erfindung zeigt.
- Fig. 51 bis Fig. 53 sind Darstellungen, die Elemente des Q- Codierers detaillierter zeigen.
- Fig. 54 ist ein allgemeines Blockschaltbild, das die Hauptkomponenten eines Hardware-Q-Codierers gemäß der Erfindung zeigt.
- Fig. 55 und Fig. 56 sind Darstellungen, die Elemente des Q- Codierers detaillierter zeigen.
- Wir beziehen uns auf Fig. 1. Es wird eine allgemeine Vorrichtung 100 zur Komprimierung und Dekomprimierung von Daten gezeigt, die einen arithmetischen Codierer 102 und einen entsprechenden arithmetischen Decodierer 104 enthält. Bei der Komprimierung nimmt die Vorrichtung 100 die eingehenden Daten (DATENEIN), die als eine Folge binärer Entscheidungen BITEIN (JN) ausgedrückt werden können, wobei jeder Ergebniswert oder jedes Ereignis eine entsprechende Wahrscheinlichkeit besitzt und charakterisiert diese Folge durch eine codierte Abfolge von Bits. Indem die Folge von Entscheidungen mit darin eingebetteten Wahrscheinlichkeitsinformationen codiert wird, kann die komprimierte Bitfolge schneller übertragen werden als die ursprünglich eingehenden Daten. Außerdem können die komprimierten Daten im Vergleich zu der ursprünglich übertragenen Information in einem kleineren Speicher gespeichert werden.
- In Anwendungen, bei denen große Datenmengen durch ein Übertragungsgerät oder Medium (z.B. Element 105) mit hohen Geschwindigkeiten übertragen werden sollen oder wenn große Datenmengen in begrenzten Speicherbereichen gespeichert werden sollen (oder wo große Datenmengen gespeichert und danach mit einer niedrigen Baudrate übertragen werden sollen) ist die Verwendung von komprimierten Daten von außerordentlichem Wert. Eine spezielle Umgebung, in welcher eine solche Komprimierung von zu beachtendem Wert ist, ist das Gebiet der Bilddatenverarbeitung und sind im besonderen Telekonferenzen. Bei Telekonferenzen müssen riesige Informationsmengen schnell von einem Ort zu einem anderen übertragen werden, um Bilder und andere Informationen zu transportieren.
- Nachdem die codierten Daten zum gewünschten Ziel übertragen wurden, werden sie dekomprimiert. Das heißt, die ursprünglichen Daten oder darauf bezogene Darstellungen dieser werden mittels des Decodierers 104 wiedergewonnen. Der Decodierer 104 macht die Operationen des Codierers 102 wirkungsmäßig rückgängig, indem pro Zeitintervall ein Byte der codierten Code folge untersucht wird.
- Entsprechend Fig. 1 werden die eingehenden Daten DATENEIN zuerst durch ein Modell 106 verarbeitet. In der dem Stand der Technik entsprechenden Technologie werden verschiedene Modelltypen diskutiert. Das Modell erzeugt zur Codierung im Q-Codierer 102 einen Zusammenhangszustand S und eine binäre Entscheidung BITEIN. Für den speziellen Zusammenhangszustand S hat der Q-Codierer aus den vergangenen BITEIN-Entscheidungen bereits eine Schätzung der Wahrscheinlichkeit dafür erzeugt, daß die BITEIN-Entscheidung 0 oder 1 ist. Diese Schätzung wird bei der Codierung von BITEIN mit verwendet. Bei der Bildübertragung beispielsweise können Teile der eingehenden Daten aussagen, ob von einem gegebenen Pixel erwartet wird, daß es schwarz oder nicht-schwarz ist. Eine Schätzung dafür, ob von einem gegebenen Pixel erwartet wird, daß es schwarz oder weiß ist, kann im allgemeinen aus den benachbarten, bereits codierten Pixelwerten erhalten werden. Diese benachbarten Pixelwerte werden verwendet, um den Zustand S zu erzeugen. Der Q-Codierer und Q-Decodierer führt auf der Grundlage der vorhergehenden Pixelwerte für dieselben benachbarten Pixelwerte Schätzungen der Wahrscheinlichkeit dafür aus, ob das gegebene Pixel schwarz oder nicht-schwarz ist. Wenn aufeinanderfolgende Teile von Daten verarbeitet werden, können sich die relativen Wahrscheinlichkeiten zwischen der wahrscheinlicheren Bedingung (bezeichnet als "MPS" oder nicht-Qe-Ereignis) und der weniger wahrscheinlichen Bedingung (bezeichnet als "LPS" oder Q- Ereignis) in ihren Werten verschieben oder sogar innerhalb eines beliebigen Zusammenhangszustands umschlagen. Das heißt, wenn die wahrscheinlichere Bedingung schwarz ist und eine Vielzahl von nicht-schwarzen Fällen eintreten, kann die nicht-schwarz-Bedingung wahrscheinlicher werden. Das MPS würde sich dann von der schwarzen Bedingung auf die nicht-schwarze Bedingung verändern.
- Der Q-Codierer 102 konvertiert den Zustand S und die BITEIN-Information aus dem Modell 106 mittels arithmetischer Codierung in die komprimierten Daten. Bei der arithmetischen Codierung wird eine Schätzung der Wahrscheinlichkeit verwendet, die der Q-Codierer bereits erzeugt und für den Zustand S auf die vergangenen BITEIN-Entscheidungen folgend in geeigneter Form gespeichert hat. Die Fig. 2 und 3 repräsentieren jeweils ein Codierschema. Fig. 2 stellt einen optionale Hardware-Codierer dar. Fig. 3 stellt einen optionalen Software-Codierer dar.
- In Fig. 2 befindet sich der Codepunkt zu Beginn an der "unteren" (vom Wert her) Grenze eines gegebenen Intervalles. Das Q-Segment, das mit dem Auftreten eines LPS-Ereignisses verbunden ist, befindet sich ebenfalls am unteren Ende des Intervalles. Das P- Segment, das einem MPS-Ereignis zugeordnet ist, liegt am oberen Ende des Intervalles. C(n) entspricht einem Codefolgewert zu einem Zeitpunkt n. A(n) entspricht dem Wert des aktuellen Intervalles zum Zeitpunkt n. Bei jeder Entscheidung folgt ein optimaler Hardware-Codierer, wie in Fig. 2 dargestellt, den folgenden Vereinbarungen:
- Wenn das Entscheidungsereignis (dargestellt in den Figuren als JN) ein MPS-Ereignis ist, folgt:
- (a)C(n) E C(n-1) + Q
- (b)A(n) E A(n-1) - Q
- Wenn das Ereignis ein LPS-Ereignis ist, folgt:
- (a)C(n) E C(n-1)
- (b)A(n) E Q
- In diesen und den folgenden Formeln bedeutet das Zeichen "E", daß sich der linke Term (die neuen Werte, z.B. C(n), A(n) oder in den Ansprüchen Aneu, Cneu) aus dem rechten Term ergibt (den vorhergehenden Werten, z.B. C(n-1), A(n-1) oder in den Ansprüchen Avorhergehend , Cvorhergehend).
- In Abhängigkeit davon, ob ein MPS-Ereignis oder ein LPS-Ereignis eintritt, führt die Hardware einen Verarbeitungszyklus durch, der den Wert von A, das Intervall (oder den Bereich) neu festlegt. Außerdem wird der Codepunkt um den Wert von Q inkrementiert (d.h. verschoben), wenn ein MPS-Ereignis auftritt. Weil die Hardware die Aktualisierung von A und C parallel ausführen kann, benötigt eine solche Hardware für jede Entscheidung nur einen Verarbeitungszyklus. Andererseits, wenn die Hardware so eingestellt wird, daß sie den Codepunkt bei jedem LPS-Ereignis verschiebt, würden zu jedem Zeitpunkt, zu dem der Codepunkt verschoben werden soll, zur Bestimmung von C E C + (A-Q) zwei Verarbeitungszyklen benötigt. Weil die Begrenzung der Anzahl der Verarbeitungszyklen im Hardware-Betrieb kritisch ist, und weil die Verschiebung des Codepunktes bei einem LPS-Ereignis mehrere Zykluszeiten benötigt, wurde die Codepunktverschiebung bei MPS- Ereignissen als optimal für die Hardware erkannt.
- Der Codiervorgang von Fig. 3 repräsentiert ein bevorzugtes "Software"-Schema mit derselben Anordnung der P- und Q-Segmente wie in Fig. 2. Jedoch bewegt sich der Codepunkt in Reaktion auf ein LPS-Ereignis nach unten (d.h. zu niedrigeren Werten). Die Codefolge wird in diesem Schema durch C dargestellt. C(n) + A(n) entspricht C (n).
- Ein einzelner Decodierer kann C(n) oder C(n) decodieren oder denselben Satz Entscheidungsereignis-Eingangssignale wiederherstellen, vorausgesetzt, derselbe Teil des letzten Intervalles wird von Ci subtrahiert. Das heißt, nach Eingabe eines ersten Eingangssignals für den Decodierer (siehe Decodierer 104 von Fig. 1), was anzeigt, welche Bedingung einem MPS-Ereignis entspricht, und eines zweiten Eingangssignals, das den aktuellen Wert von Q für das zu decodierende Codefolgestück anzeigt, kann der Decodierer C(n) oder C(n) verarbeiten, einen gewissen Teil des letzten Intervalles abziehen, um eine Folge von JN-Ausgangssignalen zu erzeugen, die der Folge der JN-Eingangssignale des Codierers 102 entspricht. Die JN-Entscheidungen werden in ein Modell 110 eingegeben, welches mit dem Modell 106 übereinstimmt und liefern als DATENAUS-Ausgangssignal die Originaldaten oder ein Abbild derer.
- Indem das Schema von Fig. 3 eine Codepunktverschiebung beim LPS- Ereignis bereitstellt, wird die Zyklenzahl für die Software-Verarbeitung niedrig gehalten.
- Wir beziehen uns auf Fig. 4. Es werden vier Codierer 200 bis 206 gezeigt. Die Codierer 200 und 204 codieren gemäß der optimalen Hardware-Regel, so daß der Codepunkt bei jedem MPS-Ereignis verschoben wird. Der erstere ist mit einer P/Q-Zeichenanordnung und letzterer mit einer Q/P-Zeichenanordnung (invertiert) implementiert Die Codierer 202 und 206 codieren gemäß der optimalen Software-Regel, so daß der Codepunkt bei jedem LPS-Ereignis verschoben wird. Der erstere ist mit einer P/Q-Zeichenanordnung und letzterer mit einer Q/P-Zeichenanordnung (invertiert) implementiert. Die Codefolgen, die durch die Codierer 200 und 202 erzeugt werden, können gleich gemacht werden (oder zumindestens kompatibel) und werden durch C dargestellt. Die Codefolgen, die durch die Codierer 204 und 206 erzeugt werden, können gleich gemacht werden (oder zumindestens kompatibel) und werden durch Z dargestellt. Z und C können entsprechend dem Ausdruck: C = A(0) - Z auseinander abgeleitet werden, dessen Berechnung durch den Inverter 208 dargestellt ist, wobei A(0) den Wert 1 hat. Die Codefolge C ist durch einen Decodierer 210 direkt decodierbar, welcher auf Betrachtungen zur Hardware-Optimierung basiert (z.B. leicht handhabbare Berechnungen) . Die Code folge Z ist durch einen Decodierer 216 direkt decodierbar, welcher auf Betrachtungen zur Software-Optimierung basiert. Es ist zu sehen, daß entweder ein Decodierer 210 oder ein Decodierer 216 verwendet werden kann, um eine Codefolge zu decodieren, die von einem der vier Codierer 200 bis 206 erzeugt worden ist, wobei einige der Codefolgen auf dem Weg zum Decodierer durch den Inverter 208 bearbeitet werden.
- Vollständigkeitshalber ist zu beachten, daß zwei andere Decodierer, ein Q/P-Hardware-Decodierer und ein P/Q-Software-Decodierer, ebenfalls implementiert werden können. Diese verschiedenen Ausführungsformen werden in der ebenfalls anhängigen Patentanmeldung, die die arithmetische Codierung mit diversen Codierern und Decodierern betrifft, diskutiert.
- Um die Beschreibung innerhalb dieses Abschnittes zu erleichtern, werden die folgenden Definitionen bereitgestellt. Die Variablennamen haben in den meisten Fällen dieselben Bedeutungen.
- C = Codefolge; der Zeiger (d.h. der Codepunkt) auf das aktuelle Intervall.
- Cd = Decodierer-Codefolge mit ausgerichteter Grundlinie.
- X = der Teil der Codefolge, der im Register steht und nicht ausgegeben wird.
- Qe(i) = geschätzte Wahrscheinlichkeit für ein LPS-Ereignis für das i-te codierte Zeichen.
- Pe(i) = geschätzte Wahrscheinlichkeit für ein MPS-Ereignis für das i-te codierte Zeichen.
- A(i) = Augend (oder Intervall) für das i-te Zeichen.
- Si = i-tes Zeichen
- n(i) = kumulativer Renormierungs-Zählwert bis zur Codierung des Zeichens Si.
- R(i) = Renormierungsfaktor für das i-te Zeichen.
- δBedingung = Aquivalent der Kronecker-Deltafunktion. (1 wenn die Bedingung gültig ist, 0 wenn ungültig)
- ε = kleinste mögliche Anderung für den aktuellen Wert von Q.
- Unter der Voraussetzung der oben dargestellten Definitionen, können die folgenden Beziehungen angewandt werden:
- Pe(i) = 1 - Qe(i)
- R(i) = 1/(2n(i))
- ε = R(i)2&supmin;¹² für eine Genauigkeit von 12 Bits.
- Für eine P/Q-Zeichenanordnung zeigt ein optimaler Hardware-Codierer auf den Fuß des aktuellen Intervalles und die Codefolge wird durch die folgende Gleichung repräsentiert:
- Verbal ausgedrückt, der Wert von C wird bestimmt, indem jedes
- C = R(i)A(i)Qe(i)δ Si - M
- folgende Entscheidungsereignis (oder Zeichen) überprüft wird. Wenn ein gerade untersuchtes Zeichen einem LPS-Ereignis entspricht, wird der Qe-Wert zum Zeitpunkt des gerade untersuchten Zeichens mit einem Renormierungsfaktor multipliziert. Der Renormierungsfaktor betrifft die Tatsache, daß die Intervallgröße zwischen vorgegebenen Grenzen gehalten wird, zum Beispiel zwischen 0,75 und 1,5. Das heißt, die Intervallgröße wird durch einen Augend (bezeichnet als "A") dargestellt, dessen Wert nachgestellt wird, um zwischen den vorgegebenen Grenzen zu verbleiben. Wenn der Augendwert am i-ten Zeichen, d.h. A(i), unter 0,75 fällt, wird er so oft verdoppelt (oder auf andere Weise verändert), wie erforderlich ist, um ihn zwischen die vorgegebenen Grenzen zurückzubringen. Indem der Wert von A auf oder nahe Eins gehalten wird, vereinfachen sich die Berechnungen von A und C, wobei die Multiplikation der Faktoren A*Q durch Q approximiert wird.
- Zu jedem Zeitpunkt, zu dem ein Zeichen codiert wird, ist eine Renormierung möglich. Um sicher zu gehen, wird zu jedem Zeitpunkt, zu dem die Intervallgröße gleich A*Qe Qe gesetzt wird (welches nach Definition kleiner oder gleich A*Pe ist und folglich kleiner oder gleich 0,75), der Wert von A(i) renormiert (z.B. mindestens einmal mit 2 multipliziert), um ihn in die Grenzen zu bringen.
- In Reaktion auf ein MPS-Ereignis wird die Größe des aktuellen Intervalles A(i) durch [A(i-1)-Qe] approximiert, was kleiner sein kann als 0,75 aber nicht kleiner sein muß. Somit kann eine Renormierung bei Eintreten eines MPS-Ereignisses erforderlich sein oder auch nicht. Die Gesamtzahl der Renormierungen des aktuellen Intervalles wird nachgezählt und als R(i) dargestellt, oder wie oben erwähnt R(i) = 1/2n(i). Der Renormierungsfaktor stellt sicher, daß der Wert von C so verändert wird (z.B. mit derselben Häufigkeit verdoppelt wird) wie das Intervall. Der Wert von C wird, wenn das Zeichen Si codiert wird, im Falle eines MPS-Ereignisses somit durch die P/Q-Hardware inkrementiert, und das Inkrement wird durch die Qe-Werte und die Renormierungsfaktoren aller vorhergehenden Zeichen bestimmt.
- Der P/Q-Hardware-Decodierer macht den oben dargestellten Vorgang gemäß der Gleichung
- Cd = C - R(i) A(i) Qe(i)δSi-M
- rückgängig. Cd ist der Codefolgewert, nachdem ein Ereignis entfernt wurde. Der P/Q-Hardware-Decodierer decodiert ein LPS, wenn Cd < A(i)Qe(i) ist.
- Der P/Q- Software-Codierer zeigt auf die Spitze jedes aktuellen Intervalles. Die Software-Codefolge C wird durch die folgende Gleichung bestimmt:
- =A(O) - R(i)A(i)Pe(i)δSi-M
- Die Bewertung von C beginnt mit einem A(0)-Wert von dem eine Summe abgezogen wird. Jeder Summand der Summe entspricht einem Produkt von A mal dem aktuellen P-Wert mal einem Renormierungsfaktor für ein vorhergehendes LPS-Ereignis.
- Die Subtraktion des letzten Intervallwertes A(f) von C ergibt den Wert C, wie in der P/Q-Hardware-Codefolge abgeleitet.
- Ein P/Q-Software-Decodierer würde der folgenden Gleichung entsprechen:
- Cd = C + R(i)A(i) Pe(i)δSi-L
- Der notwendige Vergleich zum Decodieren des LPS-Zeichens ist jedoch unhandlich:
- Cd < A(0) - A(i) + A(i)xQe(i)
- Oder die Subtraktion von A(0) auf beiden Seiten der Gleichung ergibt:
- Cd - A(0) E A(i) + A(i) xQe(i)
- Indem C'd = Cd-A(0) gesetzt wird, ergibt sich offenbar:
- Cd < [- A(i) x (1-Qe(i))]
- Sowohl C'd als auch -A(i)x(1-Qe(i)) sind negativ, liegen aber immer innerhalb von A(i) von 0. Damit ist die Arithmetik für den Decodierer eine Arithmetik mit fester Genauigkeit. Für den Software-Decodierer gilt somit:
- T E A x Qe
- A E A - T
- If C'd < A
- (LPS wird decodiert)
- C'dE C'd - A
- A E T
- Renormiere A und C'd
- else
- (MPS wird decodiert)
- Renormiere A und C'd
- endif
- Die oben dargestellten Operationen sind dadurch geeignet vereinfacht worden, daß die A(i)-Werte auf ungefähr Eins gesetzt wurden.
- Wir beziehen uns auf Fig. 5. Es wird ein bevorzugtes X-Speicherregister 300 zum Speichern von Codefolgeinformationen dargestellt. Das Register 300 enthält 32 Bits, welche wie folgt angeordnet sind. Die Bits 31 bis 24 repräsentieren 8 Markierungsbits, das 31ste Bit stellt ein Vorzeichenbit dar. Bit 24 empfängt ebenfalls einen "Übertrag", wenn ein solcher im Prozeß der Vorbereitung des nächsten zu transportierenden Bytes erzeugt wird. Normalerweise repräsentieren jeweils 8 Verschiebungen der Bits 23 bis 16 (gekennzeichnet durch bbbbbbbb) das Byte, das in einen Pufferspeicher transportiert werden soll. Im Fall, daß das vorhergehende Byte ein 'FF' war, sind nur sieben Verschiebungen erforderlich und die Bits 24 bis 17 werden herausgeschafft. An den Bitpositionen 14 und 15 befinden sich Abstandsbits, welche eine Verzögerung zwischen den Bitposition des zu transportierenden Bytes und den Bitpositionen der Daten, die in die weiteren Berechnungen mit dem Augend einbezogen werden sollen, bereitstellen. Die Bits 13 bis 2 repräsentieren den jüngsten Teil der Codefolgedaten, zu denen der in einem Register enthaltene Wert des aktuellen Intervalles (Augend) addiert (oder subtrahiert) werden kann. Die Bits 13 bis 2 werden als "gebrochener Teil" der Codefolge bezeichnet und die Bits 24 bis 14 entsprechen dem "ganzen Teil" der Codefolge. Das Register 300 wird als das X- Register bezeichnet und enthält den zuletzt codierten Teil der Codefolge. Bevor die Bits im X-Register codiert werden, können tausende Bits bereits vorher codiert worden sein. Jene früheren Bits sind durch den gebrochenen Teil des X-Registers in den ganzen Teil des X-Registers geschoben worden und von dort in einen Pufferspeicher, welcher die Bytes bis zu einer festen Anzahl vorhergehender Bytes speichert. Wie gewünscht, können Bytes aus dem Pufferspeicher zum Speichern oder zum Übertragen an einen anderen Ort, an dem die Decodierung ausgeführt wird, herausgeschafft werden.
- Wie oben angenommen, sind die Daten in Bytes strukturiert und werden als Bytes transportiert. Dies wird durch die Markierungsbits erreicht. Indem die acht Markierungsbits mit 00000001 initialisiert werden, ist zu beobachten, daß das 1-Bit nach links verschoben wird, wenn die aufeinanderfolgenden b-Bits in den ganzen Teil des Registers 300 geschoben werden. Wenn das am weitesten links stehende Markierungsbit 1 wird, wird der Inhalt des X-Registers als "negativ" angesehen. Bei der nächsten Verschiebung wird der ganze Teil des X-Registers 300 in den Pufferspeicher eingegeben.
- Vorzugsweise ist der Pufferspeicher (nicht dargestellt) ein Speicher, der beispielsweise 256 Bytes speichert. Ein Pufferzeiger BP kennzeichnet das zuletzt in den Pufferspeicher eingegebene Byte.
- Zusätzlich zum X-Register gibt es ebenfalls ein A-Register zum Speichern des aktuellen Intervallwertes. Wie hierin oben erwähnt, wird das aktuelle Intervall innerhalb vorgegebener Grenzen gehalten, beispielsweise zwischen 0,75 und 1,5. Das A-Register enthält einen zwölf Bits "gebrochenen" Teil (mit zwei 0-Bits als Kennung), welcher mit dem gebrochenen Teil des X-Registers ausgerichtet ist (mit zwei 0-Bits als Kennung) sowie ebenfalls einen ganzen Teil.
- Die Ausrichtung des gebrochenen Teils des X-Register und des A-Registers erleichtert die verschiedenen Berechnungen, die beim Aktualisieren der Codefolge ausgeführt werden. Es ist ebenfalls zu beachten, daß zu jedem Zeitpunkt, zu dem das Intervall renormiert wird, um es zwischen die Grenzen zurückzubringen, die Codefolge genauso renormiert wird, um die relativen Werte zu erhalten. Die Renormierung beinhaltet, daran sei erinnert, wenn die Intervallgrenzen auf 0,75 und 1,5 gesetzt sind, einfach einige links-Verschiebungen (d.h. Multiplikationen mit 2). Nachdem ein Codebyte gesetzt ist (und kein Übertrag vorhanden ist) wird der Inhalt des X-Registers 300 mit einem geeigneten hexadezimalen Wert UND-verknüpft, um Codebytebits zu entfernen. Das X-Register wird ebenfalls auf X ODER 1 00 00 00' (hexadezimale Darstellung) gesetzt, was sicherstellt, daß Bit 24 (der Markierungsbits) auf 1 gesetzt ist.
- In Fig. 6 wird ein 32-Bit-Decodiererregister 400 gezeigt, das zusammen mit einer P/Q-Hardware-Implementierung verwendet wird. Die Bitanordnung umfaßt zwei führende Nullbits gefolgt von 12 "gebrochenen" Bits, welchen sich danach zwei mm-Bitpositionen und 8 neue Datenbitpositionen anschließen. Die niederwertigsten 8 Bits entsprechen den Markierungsbits. Das Register 400 kann auf verschiedene Weise unterteilt werden, als volles Wort, in Halbworte und in Bytes. Die 12 Bits des gebrochenen Teils sind zu den gebrochenen Bits des Augends, der in dem Decodiererregister A gespeichert wird, ausgerichtet.
- Nachdem ein neues Datenbyte nach XC (Bits 31 bis 16) transportiert worden ist, werden die neuen Daten in die höheren Bits von XNEU (Bit 15 bis Bit 8) eingegeben und XMARKIERUNG wird auf 1 zurückgesetzt, es sei denn, ein Übertrag ist aufgetreten. Das heißt,
- XNEU = SLL B 8
- XMARKIERUNG = 1
- Wenn das niederwertige Byte XMARKIERUNG Null wird, wird ein neues komprimiertes Datenbyte benötigt.
- In der obigen Abhandlung zu Codierern und Decodierern ist zu erkennen, daß der einzige Punkt, an dem sich die Code folgen unterscheiden könnten, da ist, wo bei einer gegebenen P,Q-Vereinbarung ein ÜBERTRAG oder ein BORGEN (negativer Übertrag) auftritt.
- An diesem Punkt ist zu beachten, daß ein ÜBERTRAG oder ein BORGEN bereitgestellt werden, um ein oder mehrere Bits aufzufüllen (aber immer weniger als ein Byte), wie dies an Bytegrenzen angebracht ist. Der Effekt eines ÜBERTRAGES oder eines BORGENS wirkt sich folglich nicht über das zuletzt transportierte Byte hinaus aus. Somit muß der Pufferzeiger niemals zurück auffrühere Bytes verweisen, sondern stattdessen nach vorn, um auf die nachfolgenden Bytes zu zeigen, wenn diese in den Pufferspeicher eingegeben werden.
- Das Problem der ÜBERTRAGS-Weitergabe entsteht, wenn die Codefolge dadurch aktualisiert wird, indem deren Wert inkrementiert wird und wenn ein oder mehrere aufeinanderfolgende Bytes codierter Daten jeweils eine Folge von 1-Bits enthalten. In diesem Fall führt eine Addition zu einer ÜBERTRAGs-Weitergabe. Um eine solche Situation zu vermeiden, stellt die vorliegende Erfindung sicher, daß ein Byte mit einem Füllbit bestückt wird, um einen ÜBERTRAG zu empfangen, der erzeugt werden könnte. Zum Beispiel nehme man die Folge von Bytes βn-1, βn, βn+1 an, wobei sich βn-1 im Pufferspeicher befindet und der Pufferzeiger das Byte βn-1 identifiziert. Das Byte βn befindet sich im ganzen Teil des X-Registers und βn+1 befindet sich im gebrochenen Teil des X-Registers.
- Wenn der Wert des Bytes βn 'FF' (in hexadezimaler Darstellung) ist, bekommt das nächste Byte βn+1 ein Füllbit an führender (höchstwertiges Bit) Position. Wenn βn und βn+1 entsprechend 11111111 ('FF') ergeben, würde gemäß der vorliegenden Erfindung ein Bit als höchstwertiges Bit von βn+1 aufgefüllt, so daß die neue Folge der codierten Daten lauten würde 11111111, 01111111, 1..., wobei das 0-Bit ein Füllbit ist, um wenn erforderlich einen Übertrag zu empfangen. Wenn der Decodierer ein Byte erkennt, das nur aus 1-Bits besteht, weiß er, daß das nächst niederere Bit ein Füllbit ist und verarbeitet dies entsprechend, um den richtigen Codefolgewert zu erzeugen.
- Das Problem der Weitergabe des BORGENS entsteht, wenn die Codefolge, welche dekrementiert werden kann, ein Byte enthält, das nur aus 0-Bits besteht. Zum Beispiel soll angenommen werden, dar drei aufeinanderfolgende Bytes Bn-1, Bn, Bn+1 auftreten, wobei das mittlere Byte nur aus 0'en besteht.
- Aus dem Bn-1-Byte würde Eins geborgt werden, was das Byte Bn in acht 1-Bits verwandelt. Ein Füllbit würde als neues führendes Bit des Bytes Bn+1 eingefügt werden. Dieses neue führende Bit dient als Übertrags-Setztbit. Die Datenfolge, wie sie durch den Decodierer übertragen wird, ist dann:
- (Bn+1) 111111111 (führende 7 Bits von Bn+1)
- Ein aus dem Byteabschnitt von Bn+1 herausgefallenes Bit, wird in den nächsten Datenbyteabschnitt aufgenommen. Das BORGEN ist mittels eines (gesetzten) Füllbits von der Wirkung her ein ÜBERTRAG geworden. Der Decodierer erkennt in jedem Fall das Füllbit als solches und verarbeitet das Füllbit als einen ÜBERTRAG.
- Weil das Ziel darin besteht, eine P/Q-Software-Codefolge zu erzeugen, die mit einer P/Q-Hardware-Codefolge kompatibel ist, die Füllbits enthält, muß die Codefolge zwei Beschränkungen berücksichtigen. Erstens, jedem hexadezimalen 'FF' muß ein Füllbit folgen. Anderenfalls würden Bytemuster erzeugt, die für den Hardware-Decodierer nicht zugelassen sind. Zweitens, die Codefolge muß so aufgebaut sein, daß immer, wenn durch das momentane Byte ein negativer Übertrag erforderlich ist, dieser nach Definition in Anspruch genommen werden kann. (Das momentane Byte ist das Byte, das im vorhergehenden Codebytezyklus aus dem Coderegister in den Codepuffer übertragen wurde) . Weil nur eine Einheit ausgeborgt wird, ist der einzige Bytewert, von dem nicht geborgt werden kann, die Null.
- Im allgemeinen wird die Anforderung eines negativen Übertrages durch ein hochwertiges "Vorborgen"-Bit im Coderegister festgestellt, das am Beginn eines neuen Bytes steht. Zur Vereinfachung, wird es an der Bitposition P gesetzt, welche das Vorzeichenbit wird, wenn das nächste Byte fertig zum Schreiben ist.
- Bei einem 32-Bit-Coderegister (X) soll als Registerinhalt angenommen werden:
- X-Register:
- 00000000,P0000000, xxxxxxxx,xxxxxxxx
- A-Register:
- 000aaaaa, aaaaaaaa
- Wenn das nächste Byte komplett ist, wird der Inhalt zu:
- X-Register:
- P0000000, nnnnnnnn, xxxxxxxx, xxxxxxxx
- A-Register:
- 000aaaaa, aaaaaaaa
- Wenn das Coderegister positiv ist (P = 0) ist, ist das "Vorborgen" verwendet worden und es wird ein negativer Übertrag vom momentanen Byte benötigt. Der negative Übertrag wird deshalb dem momentanen Byte entnommen, bevor das neue Byte, nnnnnnnn, aus dem Coderegister in den Puffer übertragen wird. Wenn das Vorborgen verwendet wird, ist der Wert im Coderegister immer größer als der im A-Register und zukünftige negative Überträge können vom Inhalt des Coderegister genommen werden. Wenn das Coderegister negativ ist (P = 1), wird kein negativer Übertrag aus dem aktuellen Byte benötigt und das nicht verwendete Vorborgen, P, wird entfernt.
- Das Coderegister (X) wird mit dem A-Register verglichen. Wenn das Coderegister kleiner ist, werden zwei Dinge erkannt: Erstens, das nächste zu transportierende Byte (nnnnnnnn) ist Null. Zweitens, es könnte ein negativer Übertrag aus dem aktuellen Byte benötigt werden. Deshalb wird ein negativer Übertrag aus dem aktuellen Byte entnommen und durch das Nullbyte im Register durchgeschoben. Dies verwandelt das Nullbyte in 'FF'. Nachdem dieses 'FF' in den Codepuffer geschafft worden ist und der Inhalt des Coderegisters verschoben wurde, werden zwei Vorborgen- Bits gesetzt, eines in der Position, die das Vorzeichenbit werden wird und das andere in der Bitposition, die die rbertrags'- Bitposition des nsuchsten Bytes werden wird. Somit gilt, wenn das Coderegister kleiner als das A-Register ist:
- X-Register:
- 00000000, P0000000, 00Px, xxxx, xxxxxxxx
- A-Register:
- 000aaaaa, aaaaaaaa
- und wenn das nächste Byte komplett ist:
- X-Register:
- P0000000, Pnnnnnnnn, xxxxxxxx, xxxxxxxx
- A-Register:
- 000aaaaa, aaaaaaaa
- Das hexadezimale 'FF' im Puffer triggert das Bitfüllen, so daß das Vorborgenbit auf die Position des Füllbits (Übertragsempfänger) geschrieben wird. Ein nicht verwendetes Vorborgen ist somit einem Übertrag einer Hardware-Codefolge äquivalent.
- Wenn das Coderegister nicht kleiner als das A-Register ist, ist der aktuelle Inhalt des Coderegisters groß genug, um beliebige Anforderungen nach einem negativen Übertrag erfüllen zu können. Das aktuelle Byte wird überprüft und wenn es 'FF' ist, wird das Bitfüllen getriggert. In diesem Fall ist das aufgefüllte Übertragsbit immer gelöscht, weil kein Vorborgen gefordert war.
- Die oben beschriebene Abfolge erfüllt alle Anforderungen. Sie erzeugt eine Code folge, die eine Weitergabe des negativen Übertrags blockiert und die zur Hardware kompatibel ist. Wenn alle Nullbytes einfach in 'FF' verwandelt würden, könnte ein Hardware-Decodierer die sich ergebende Codefolge decodieren. Das parallele Vorhersehen, ob ein negativer Übertrag erforderlich sein könnte, wenn das zu transportierende Byte Null ist, macht die sich ergebende Code folge identisch mit der Hardware-Codefolge. Tatsächlich erkennt diese Parallelarbeit das Vorhandensein von 'FF' innerhalb der Hardware-Codefolge.
- Die oben erwähnten, dem Stand der Technik entsprechenden Artikel von Langdon und von Langdon und Rissanen diskutieren die Codierung im Detail und sind für die diesbezüglichen Lehren durch diese Bezugnahme hierin angenommen.
- Man hat gefunden, daß die arithmetische Codierung eine leistungsfähiges Verfahren ist, um Datenzeichenketten in komprimierter Form zu codieren, die komprimierten (codierten) Daten zu übertragen und die ursprünglichen Datenzeichenketten mittels eines Decodierers wiederherzustellen, welcher die Codierung rückgängig macht. Die Leistungsfähigkeit der arithmetischen Codierung leitet sich aus zwei grundlegenden Merkmalen ab: (1) die Möglichkeit, sich mit der Codiereffektivität der Entropiegrenze zu nähern und (2) die Möglichkeit, die Wahrscheinlichkeiten der zu codierenden Zeichen dynamisch zu verändern.
- Wie hierin oben angenommen wird, soll eine Vielzahl Entscheidungen codiert werden, um einen Punkt auf einer Zahlengeraden darzustellen. Der Punkt ist einem Zahlengeradenintervall zugeordnet, welches eindeutig eine spezielle Folge von Entscheidungen repräsentiert. Eine solche Codierung wird ausgeführt, indem zu Beginn ein aktuelles Intervall definiert wird, das durch zwei Punkte der Zahlengeraden begrenzt wird. Das aktuelle Intervall wird dann in Abschnitte unterteilt, wobei jeder Abschnitt einem möglichen Ereignis entspricht, das sich aus einer Entscheidung ergeben kann. Die möglichen Ereignisse sollen exklusiv sein, die Abschnitte überlappen nicht. In einer Mehrzeichenumgebung kann jede Entscheidung zu einem von m Ereignissen führen (wobei 2≤m gilt) . Die Länge jedes Abschnittes wird durch die relative Wahrscheinlichkeit des ihm entsprechenden Entscheidungsereignisses bestimmt. Das heißt, je größer die Wahrscheinlichkeit des Entscheidungsereignisses ist, umso größer ist der entsprechende Abschnitt. Dies ist insofern von Bedeutung, weil größere Abschnitte durch weniger Bits dargestellt werden können. Folglich werden die Ereignisse, die häufiger codiert werden sollen, relativ gesehen durch weniger Bits dargestellt.
- Bei der binären arithmetischen Codierung, bei der m=2 ist, kann ein weniger wahrscheinliches Zeichenereignis LPS entweder einem JA- oder einem NEIN-Zeichen (oder Ereignis) bei einer gegebenen JA/NEIN-Entscheidung (J/N) entsprechen. Das andere Ereignis entspricht dann einem wahrscheinlicheren Zeichenereignis MPS. Die Abschnitte werden einfach als Q-Abschnitt (welcher dem weniger wahrscheinlichen Ereignis entspricht) und als P-Abschnitt (welcher dem wahrscheinlicheren Ereignis entspricht) bezeichnet. Die Länge des Q-Abschnittes entspricht der geschätzten Wahrscheinlichkeit Qe des LPS-Ereignisses und der P-Abschnitt entspricht der Wahrscheinlichkeit (1-Q)
- Indem A innerhalb der Grenzen 0,75 und 1,5 gehalten wird, kann der Wert von A durch 1,0 angenähert werden. Es ist dann zu beachten, daß sich die oben erwähnten Berechnungen zur Bestimmung von C und A für ein optimales Hardware-Schema wie folgt vereinfachen:
- Wenn ein MPS codiert wird:
- C E C + Qe
- A E A - Qe
- Wenn ein LPS codiert wird:
- A E Qe
- In dem Fall, wenn nach der Codierung eines Entscheidungsereignisses A < 0,75 wird, erfolgt eine Renormierung von A und C. Bei der Renormierung von C sowie auch von A bleibt der Wert des Codepunktes in demselben Verhältnis wie das Intervall.
- Bei der Decodierung der codierten Daten, die entsprechend dem P/Q-Hardware-Schema erzeugt wurden, werden die folgenden Operationen ausgeführt:
- wenn C ≥ Qe
- es wird ein MPS decodiert und die folgenden Berechnungen werden angestellt:
- C E C - Qe
- A E A - Qe
- Wenn die obige Bedingung nicht gilt, wird ein LPS decodiert und
- A E Qe
- Die oben beschriebenen, vereinfachten Codierer (und Decodierer) sind für eine Hardware-Implementierung ideal geeignet, weil die Bereichssubtraktion (Addition) und die Codefolgeaddition (Subtraktion) parallel ausgeführt werden können. Eine Software-Implementierung unter Verwendung derselben Vereinbarungen zur Definition und Veränderung der Codefolge ist nicht so effektiv, weil zwei arithmetische Operationen auf dem am häufigsten abzuarbeitenden Pfad erforderlich sind. Deshalb wird eine effektivere Software-Implementierung des Codierers dadurch verwirklicht, daß mit der Codefolge C auf die Spitze des aktuellen Intervalles gezeigt wird, anstatt auf den Boden.
- Bei der Software-Realisierung verläuft der Codiervorgang folgendermaßen:
- Wenn es sich um ein MPS-Ereignis handelt:
- A E A - Qe Wenn es sich um ein LPS-Ereignis handelt:
- C E C - (A-Qe)
- A E Qe
- Sowohl innerhalb des optimalen Hardware-Schemas als auch des Software-Schemas gilt für A < 0,75:
- Renormiere A und C;
- Aktualisiere Qe.
- Bei der Untersuchung der oben erwähnten Vereinbarungen ist zu beachten, daß A und C in jeder Ausführungsform renormiert werden, wenn A < 0,75 ist und das Qe entsprechend aktualisiert wird.
- Die Art und Weise, in der Qe entsprechend der Erfindung aktualisiert wird, wird jetzt beschrieben.
- Fig. 7 illustriert die Aktualisierung eines geschätzten Wahrscheinlichkeitswertes Qe, wenn aufeinanderfolgende Ereignisse codiert werden und Renormierungen auftreten. Die Ordinate von Fig. 7 repräsentiert die Werte des Augend A und die Abszisse repräsentiert die zugelassenen Werte von Qe, wie sie beispielsweise durch eine Qe-Tabelle (hierin weiter unten zu diskutieren) erzeugt werden. Beginnend mit dem erlaubten Qe-Wert 0,42208 wird ein LPS-Ereignis codiert, was zu einem Augendwert von 0,42208 führt. Das LPS-Ereignis, das den Augend auf einen Wert kleiner 0,75 drückt, führt zu einer LPS-Renormierung, welche zur Inkrementierung des Qe-Wertes auf 0,46896 und zu einer Renormierung von A auf den Wert 0,84416 führt. Es ist zu beachten, daß die Renormierung von A und C in der vorliegenden Erfindung eine Multiplikation mit Zwei beinhaltet. Diese Operation ist nicht nur einfach, wird durch eine einfache Registerverschiebung ausgeführt, sondern macht es desweiteren leicht, die Anzahl der ausgeführten Renormierungen zu ermitteln. Ein nachfolgendes MPS- Ereignis führt dazu, daß A den Wert 0,37520 annimmt, wie es folgender vereinfachter Gleichung entspricht:
- A E A Qe
- Das heißt,
- A = (0,84416 - 0,46896) = 0,37520
- Weil A kleiner als 0,75 ist, findet eine MPS-Renormierung statt. Qe nimmt den niedereren Wert 0,42208 an und A wird auf den Wert 0,75040 renormiert. (Eine weitere Renormierung wird nicht benötigt, weil der Wert von A nicht mehr kleiner als 0,75 ist.) Mit dem nächsten MPS-Ereignis fällt A auf 0,32833, was kleiner als 0,75 ist. Mit 0,32833 wird ein niedrigerer Qe-Wert ausgewählt. Der Wert von A wird verdoppelt und ergibt sich zu 0,65666, was noch kleiner als 0,75 ist. Der Wert von A wird noch einmal verdoppelt, so daß A 1,31332 wird. Ein nachfolgendes MPS-Ereignis reduziert den Augend auf 0,98499, was 0,75 übersteigt, so daß keine Renormierung stattfindet. Ein weiteres MPS-Ereignis bewirkt, daß A auf 0,65666 fällt, was zu einer MPS-Renormierung führt. Ein niedrigerer Wert von Qe wird ausgewählt, im speziellen 0,30489 und der Augend A wird mit zwei multipliziert, und wird 1,3133. Beim zweiten MPS-Ereignis danach ist eine MPS-Renormierung erforderlich.
- Gemäß der Erfindung werden die Qe-Werte, wie die in Fig. 7 gezeigten, in Tabellenform gespeichert. In Tabelle 1 sind eine Vielzahl erlaubter Qe-Wert in der linken Spalte hexadezimaler Notation dargestellt. Jeder Qe-Wert in der Tabelle ist vorzugsweise ein 12-Bit-Wert und ist so definiert, daß er zwei Bytes belegt. Die Qe-Werte werden durch 5461 (hexadezimal 1555) dividiert, um in eine N-dezimale gebrochene Darstellung überführt zu werden. Ein 5-Bit-Index ist ausreichend, um jeden Qe-Wert eindeutig zu identifizieren. Um zu einem benachbarten Eintrag der Tabelle kommen, ist eine Verschiebung um zwei Bytes erforderlich. Die zweite Spalte von Tabelle 1 zeigt an, wie viele Bytes nach einer LPS-Renormierung für jeden aufgelisteten Wahrscheinlichkeitswert zu verschieben sind. Es ist zu beobachten, daß in einigen Fällen eine LPS-Renormierung dazu führt, daß der Wahrscheinlichkeitswert um eine, zwei oder drei Indexpositionen innerhalb der Tabelle inkrementiert wird.
- Bei der Untersuchung von Tabelle 1 ist zu beobachten, daß Einträge darin den Qe-Werten entsprechen, die in Fig. 7 dargelegt werden. Das heißt, 0,46896 dezimal entspricht innerhalb der verwendeten dezimalen Genauigkeit dem hexadezimalen Wert 0a81 von Tabelle 1. Die drei danach aufgelisteten Einträge, nämlich 0a01, 0901 und 0701, entsprechen den Werten 0,42208, 0,32833 beziehungsweise 0,30489 von Fig. 7. Das negative Qe wird verwendet, wenn MPS 1 ist.
- In Tabelle 2 wird eine Alternative zu Tabelle 1 gezeigt. Tabelle 2 zeigt qi0-Werte für zugelassene Qe-Werte, welche mit LPS-Renormierungen verbunden sind. Die qi0-Werte sind aus Tabelle 1 abgeleitet, indem die Qe-Werte von Tabelle 1 mit 4 multipliziert worden sind. Zusätzlich wird der q0-Wert negiert, wenn das MPS 1 ist.
- Der qi0-Term in Tabelle 2 wird als qilps (i0) bezeichnet, was anzeigt, daß der Index Informationen enthält, die sich sowohl für ein MPS von 0, d.h. positive Qe, als auch für ein MPS von 1, d.h. negative Qe, auf den nächsten Qe-Wert (q0) beziehen, und daß der Index (i0) solche, die verwendet werden, wenn eine LPS-Renormierung stattfindet. In Tabelle 1 wird jedoch zuerst ein nächster Index bestimmt und danach daraus der nächste Qe-Wert festgestellt. Tabelle 2 ergibt einen einfacheren Nachschlagevorgang.
- Tabelle 3 gleicht Tabelle 2 mit der Ausnahme, daß sie für die Verwendung im Zusammenhang mit einer MPS-Renormierung gedacht ist. Im besonderen zeigt Tabelle 3 im Falle einer MPS-Renormierung den nächsten Wahrscheinlichkeitswert q0 und den nächsten Index i0 für jeden Qe-Wert innerhalb der Tabelle. In Tabelle 2 werden größere Werte ausgewählt, während in Tabelle 3 kleinere Werte ausgewählt werden.
- Es sollte verstanden werden, daß die Tabelle nur Qe-Werte im Bereich von 0 bis 0,5 enthält. Bei 0,5 wird das binäre Ereignis, welches das LPS darstellt, zum MPS und umgekehrt. Das Ereignis, das Qe entspricht, ändert sich somit. Zum Beispiel, wenn das Ereignis "weißes Bildelement" ein LPS-Ereignis repräsentiert, repräsentiert der Qe-Wert die geschätzte Wahrscheinlichkeit für das Ereignis "weißes Bildelement". Wenn jedoch der Qe-Wert 0,5 erreicht und übersteigt, wird jetzt das Ereignis "schwarzes Bildelement" das LPS-Ereignis, das durch den Qe-Wert identifiziert wird. Die Qe-Tabelle kann als symmetrisch zu dem Anderungspunkt betrachtet werden, an dem die Definitionen des LPS und MPS wechseln.
- Die Auswahl zugelassener Q-Wert basiert auf einer Anzahl Faktoren. Erstens werden bestimmt Werte als "schlechte" Werte erkannt. Im besonderen sind solche Werte nicht gestattet, die zu einem "Festhaften" der Qe-Werte führen können. Wahrscheinlichkeitswerte die gleich oder nahe den Werten AMIN/2, AMIN/4, ... AMIN/2n sind, wobei n eine positiv ganze Zahl ist, werden als schlechte Werte betrachtet. Bei solchen Werten könnte der folgende Zyklus (1) LPS-Renormierung, (2) Verschiebung auf einen ersten Qe-Wert, (3) MPS-Renormierung nach einem einzelnen wahrscheinlichen MPS mit einer entsprechenden Verschiebung auf einen zweiten (niedereren) Qe-Wert, (4) eine weiteres LPS und eine LPS- Renormierung und (5) Rückkehr auf den ersten Qe-Wert den Schätzvorgang festfahren. Dementsprechend werden die Qe-Werte vorzugsweise so ausgewählt, daß sie AMIN/2n um einen vorgeschriebenen Wert δ übersteigen, so daß die Wahrscheinlichkeit einer MPS-Renormierung nach einer LPS-Renormierung nicht übermäßig hoch ist. Ein Verfahren, dieses Ziel zu erreichen, besteht darin, alle kleineren Qe-Werte weit genug von einen renormierten hexadezimalen Wert '1000' wegzulegen, so daß eine Vielzahl MPS-Ereignisse benötigt werden, um nach einer LPS-Renormierung in eine MPS-Renormierung zu kommen. Für Qe-Werte nahe 0,5 wird diese Bedingung gelockert. Für sehr kleine Qe-Werte muß das Intervall zwischen dem renormierten Qe und AMIN groß genug sein, daß die Wahrscheinlichkeit einer MPS-Renormierung in derselben Größenordnung liegt wie die LPS-Wahrscheinlichkeit.
- Zusätzlich zu dem obigen Ansatz zur Vermeidung von Qe-Werten, welche bei einer Renormierung nahe oder gleich AMIN sind, lehrt die vorliegende Erfindung das Berücksichtigen "schlechter" Qe-Werte unter der Voraussetzung, daß der Sprung der Indexpositionen in Reaktion auf eine LPS-Renormierung relativ gesehen größer ist als der Abbau an Indexpositionen in Reaktion auf eine MPS-Renormierung. Zum Beispiel ist der kleinste Qe-Wert in Tabelle 1 ein "schlechter" Wert. Der Index des Qe-Werts wird jedoch um zwei Einträge (4 Bytes) verschoben, wenn eine LPS-Renormierung stattfindet. Deshalb müssen aufeinanderfolgend zwei MPS- Renormierungen stattfinden, um auf den kleinsten Wert zurückzukommen und der Schätzer wird nicht durch die hohe Wahrscheinlichkeit der ersten MPS-Renormierung festgefahren.
- Eine zweite Betrachtung bezüglich der Auswahl der Tabellenwerte beinhaltet die Codier-Unwirksamkeit. Unter diesem Gesichtspunkt ist es wünschenswert, daß über den gesamten Bereich der zugelassenen Qe-Werte eine minimale Codier-Umwirksamkeit erreicht wird. Wir beziehen uns auf Fig. 8. Es wird eine graphische Darstellung der Codier-Unwirksamkeit in Abhängigkeit von den Qe-Werten gezeigt, die sich auf die in Tabelle 1 enthaltenen Qe-Werte bezieht. Die Kreise repräsentieren experimentelle Ergebnisse und die durchgezogene Linie repräsentiert theoretische Ergebnisse für eine Codierungebung mit einem einzelnen Zusammenanhang (siehe Abschnitt 3). Die Codier-Unwirksamkeit beruht auf der Entropie, auf der Bitrate/Zeichen für einen speziellen Zustand (oder spezifischen Eintrag in der Qe-Tabelle) und auf der Besetzungswahrscheinlichkeit des speziellen Zustandes. Es ist zu beachten, daß die Entropie definiert ist als: H = - (ΣPr(i)logPr(i)), worin Pr(i) die Wahrscheinlichkeit eines i-ten Entscheidungsereignisses repräsentiert und die Summe über alle Entscheidungsereignisse für eine gegebene Entscheidung gebildet wird. Vorzugsweise aber nicht notwendigerweise wird die gleichmäßigste Kurve, bei gegebener Tabellenfeinheit und arithmetischen Approximationen bei der Codierung, gewünscht.
- Gemäß der Erfindung wird im Vergleich zu einem Potenz-von-2-Satz von Wahrscheinlichkeiten die Dichte der Indexpositionen bei Qe-Wertabschnitten der Tabelle mit hoher Entropie vergrößert. Bei einem Potenz-von-2-Satz entspricht der Bereich 1/4 bis 1/2 einem Qe-Wert von 0,1; 1/8 bis 1/4 entspricht 0,01; 1/16 bis 1/8 entspricht 0,001; und so weiter für aufeinanderfolgende Indexpositionen. In der Nähe des 1/4 bis 1/2 Bereiches existieren im Vergleich zu dem beispielsweise im vorhergehend erwähnten Versatzcodierer eine relativ große Anzahl von Einträgen. Bei niedrigeren Entropie der Qe-Werte ist die Dichte relativ dünn.
- Als drittes ist die Antwortfähigkeit des Systems ein Betrachtungspunkt; nämlich, wie lange dauert es, bis der geeignete Qe-Wert von einem weit entfernten Wert aus erreicht wird. Zur Förderung dieses Ziels werden größere Inkremente und Dekremente zwischen benachbarten Qe-Werten ausgewählt, vorausgesetzt, daß solche großen Differenzen die stationären Ergebnisse nicht negativ beeinflussen. Stationäre Ergebnisse werden auf der Basis von Daten erzeugt, die mit einer festen Wahrscheinlichkeit geliefert werden, beispielsweise durch einen Pseudo-Zufallszahlengenerator, der Ausgangswerte auf Basis einer festen Wahrscheinlichkeit erzeugt. Instationäre Ergebnisse basieren auf tatsächlichen Daten, bei denen sich die Wahrscheinlichkeit über die Zeit verändern kann.
- Tabelle 1 wurde gemäß der oben erwähnten Betrachtungen bestimmt und stellt einen Kompromiß zwischen Einfachheit, minimalen Speicheranforderungen für jeden Zusammenhang (z.B. sechs Bits, die ein Bit für den Sinn des MPS-Zeichens und fünf Bits für den Qe-Wert enthalten), brauchbarer Codiereffektivität für feste (d.h. stationäre) Statistik und gute Leistungsfähigkeit bei Daten mit mehreren Zusammenhängen, die aus unterschiedlichen Datenkompressionsmodellen (zum Beispiel ein Bildkompressionsmodell und ein kontinuierliches Klangkompressionsmodell) stammen, dar.
- In der obigen Beschreibung ist ein Kompromiß zwischen Codiereffektivität und schneller Schätzung sich verändernder Wahrscheinlichkeiten zu beachten.
- Bezugnehmend auf Fig. 9 wird eine Gatterschaltung dargestellt. Es werden eine Vielzahl von Eingangsieitungen und eine Vielzahl von Ausgangsleitungen bereitgestellt. Indem die Eingangsleitungen auf ein vorgegebenes Muster von 0- und 1-Signalen gesetzt werden, wird ein entsprechender q-Index in die Gatterschaltung eingegeben. Für jeden q-Index stellt die Gatterschaltung ein Signalmuster auf den Ausgangsleitungen bereit, welches einen entsprechenden Qe-Wert repräsentiert. Entsprechend der Erfindung sind die Qe-Werte so ausgewählt worden, daß die Anzahl der Gatter und der erforderlichen Durchschaltungen für die Bereitstellung eines Qe-Wert-Ausgangswertes für den q-Index-Eingangswert eingeschränkt wird. Die Q-Werte sind so ausgewählt worden, daß (a) das niederwertigste Bit jedes Qe-Wertes gesetzt ist (auf 1) und daß (b) nicht mehr als fünf der zwölf Qe-Wert-Bits für jeden beliebigen Qe-Wert gesetzt sind.
- Dementsprechend werden die oben erwähnten Aufgaben gelöst sowie ein einfacher Hardware-Aufbau erreicht.
- Wir beziehen uns auf Fig. 10, worin eine Zusammenhangstabelle dargestellt ist. Im besonderen sind drei Zusammenhänge C0, C1 und C2 aufgelistet. Jeder Zusammenhang entspricht einem anderen Ausgangspunkt, unter welchem Entscheidungen gefällt werden. Zum Beispiel könnten die drei Zusammenhänge unterschiedliche Flächen innerhalb eines Blockes optischer Daten darstellen. Eine Fläche des Blockes könnte vorwiegend schwarz sein, eine andere könnte vorwiegend weiß sein und eine dritte Fläche könnte fast gleichwertig durch jeden Ereignistyp repräsentiert werden. Dementsprechend gibt es für jeden Zusammenhang einen entsprechenden MPS- Identifikator, d.h. einen Anzeiger, ob die Schwarz- (oder JA) Entscheidung das MPS ist oder ob die Weiß- (oder NEIN) Entscheidung das MPS ist. In binärer Schreibweise wird dies in der Tabelle von Fig. 10 durch die MPS-Spalte dargestellt, in welcher das 0-Ereignis das MPS-Ereignis für die Zusammenhänge C0 und C2 repräsentiert, während das 1-Ereignis das MPS für den Zusammenhang C1 repräsentiert.
- Die nächste Spalte in der Tabelle von Fig. 10 ist eine Qe-Index- Spalte, welche den Eintrag zeigt, auf den für den entsprechenden Zusammenhang aktuell gezeigt wird. Bei Zusammenhang C0 wird auf den 0-ten Eintrag gezeigt, bei Zusammenhang C1 wird auf den 12-ten Eintrag gezeigt und im Zusammenhang C2 wird auf den 29- ten Eintrag gezeigt. Die entsprechenden aktuellen Q-Werte werden in der letzten Spalte gezeigt und sind 0,5; 0,10 beziehungsweise 0,01. Der MPS-Identifikator und der Q-Index werden vorzugsweise durch 6 Bits dargestellt, der Qe-Index wird in dieser Ausführungsform vorzugsweise durch 5 Bits repräsentiert, es sollte anerkannt werden, daß die Anzahl der Bits variieren kann.
- Gemäß einer Ausführungsform der Erfindung wird ein einzelner Augendwert gespeichert und unabhängig davon verwendet, welcher Zusammenhang betrachtet wird. Wenn Entscheidungen in jedem Zusammenhang eingegeben werden und wenn für jeden Zusammenhang Renormierungen durchgeführt werden, wird ein gemeinsamer Augend verarbeitet.
- Zu Beispielszwecken wird eine Kette aus 0- und 1-Bits dargestellt, von denen jedes einem entsprechenden Zusammenhang zugeordnet ist. Die Kette 01100 repräsentiert Bits in den entsprechenden Zusammenhängen C0-C1-C0-C0-C2. In der Tabelle von Fig. 10 ist zu sehen, daß die Bitfolge ein MPS (für C0), ein MPS (für C1), ein LPS (für C0), ein MPS (für C0) und ein MPS (für C2) darstellt. Der Anfangswert von A vor dem Codieren des ersten Bits sei für dieses Beispiel 1,0. In Reaktion auf die Bitkette 01100 finden dann die folgenden Operationen statt, wobei ein P/Q-Codierschema wie oben beschrieben vorausgesetzt wird:
- i. Für das erste Bit,
- A E A - Qe(C0) = 1,0 - 0,5 = 0,5;
- Weil A jetzt kleiner als 0,75 ist, wird A auf 1,0 renormiert und der Wert Qe(C0) wird auf 0,48 dekrementiert.
- ii. Das zweite Bit repräsentiert im Zusammenhang C1 ein MPS, was bewirkt, daß der Wert des Augend A fällt und zwar entsprechend der Gleichung A E A - Qe(C1); was gleich (1,0 - 0,1) = 0,9 ist. Es wird keine Renormierung durchgeführt.
- iii. Das dritte Bit ist im Zusammenhang C0 ein LPS, was zu einer LPS-Renormierung führt. Der Augendwert verändert sich von 0,9 auf Qe(C0) oder 0,48. Der Wert von A muß renormiert (verdoppelt) werden auf den Wert 0,96 und der Q-Wert für den C0-Zusammenhang wird inkrementiert. Für dieses Beispiel wird angenommen, daß der Wert Qe(C0) um einen Eintrag zurück auf den 0-ten Eintrag inkrementiert wird. Wie hierin weiter unten diskutiert wird, wird mit der Erfindung auch beabsichtigt, daß der Qe-Wert nach oben zu einem einzelnen Wert hin verschoben wird, der mehr als ein Eintrag entfernt ist. Alternativ dazu unterstützt die Erfindung die Möglichkeit, den Qe-Wert in Abhängigkeit davon, wie weit der Qe-Wert von der aktuellen Wahrscheinlichkeit entfernt zu liegen scheint, nach oben zu einem ausgewählten aus mehreren möglichen nächsten Qe-Werten hin zu verschieben. Das letztgenannte Verfahren wird als mehrfach-Geschwindigkeiten-Ausführungsform in der ebenfalls anhängigen Patentanmeldung zur Wahrscheinlichkeitsanpassung diskutiert.
- iv. Mit dem vierten Bit, tritt ein MPS im Zusammenhang C0 auf. A wird verändert auf (0,96 - 0,5) = 0,46, was eine MPS-Renormierung erforderlich macht. Der Wert von A wird verdoppelt auf 0,92 und Qe(C0) fällt auf 0,48.
- v. Das fünfte Bit entspricht im Zusammenhang C2 einem MPS- Ereignis. Der Wert des Augend A wird
- (0,92 - Qe(C2)) = 0,92 - 0,001 = 0,919; was größer ist als 0,75. Es findet keine Renormierung statt.
- Nach diesen fünf Bits, hat die Tabelle die folgenden Einträge. Für den Zusammenhang C0 ist MPS = 0, der Qe(C0)-Index ist 1 und der Qe(C0)-Wert ist 0,48. Für den Zusammenhang C1 bleiben alle Daten unverändert. Für den Zusammenhang C2 bleiben alle Daten unverändert. Der aktuelle Augend A für das nächste codierte Entscheidungsereignis ist 0,919, unabhängig vom Zusammenhang der Entscheidung.
- Die Ausführungsform mit mehrfachen Zusammenhängen gestattet es im Vergleich mit einer Ausführungsform mit einzelnem Zusammenhang, daß eine Vielzahl von Entscheidungszusammenhängen zusammen verarbeitet werden.
- Ein Einzelgeschwindigkeitsschätzer sorgt dafür, daß bei einem gegebenem Qe-Wert nur ein spezifizierter größerer Wert existiert, welcher als nächster Wahrscheinlichkeitswert für eine LPS-Renormierung ausgewählt werden soll und ein spezifizierter kleinerer Wert, der für eine MPS-Renormierung ausgewählt werden soll. Eine Ausführungsform eines Einzelgeschwindigkeitsschätzers wird hierin weiter unten in Abschnitt 5 als Finite State Maschine dargelegt.
- Fig. 12 zeigt eine Implementierung eines Einzelgeschwindigkeits-, Einzelzusammenhangschätzers als Finite State Maschine.
- Der Wert kex repräsentiert einen Zustand an dem durch ein Ereignis die MPS- und LPS-Definitionen verändert werden. In Fig. 12 hat jeder Zustand einen Ausgangspfad für eine MPS-Renormierung und einen Ausgangspfad für eine LPS-Renormierung. Für kmax führt die MPS-Renormierung zu einem Aktualisieren, das zu demselben Zustand zurückkehrt.
- Jeder Zustand kann als ein Tabelleneintrag gedacht werden, der einen speziellen Qe-Wert repräsentiert. Jeder Eintrag ist mit zwei möglichen nachfolgenden Einträgen verbunden. Vorzugsweise führt eine MPS-Renormierung zu einer Verschiebung in den nächsten Zustand, der näher an kmax liegt. Bei einer LPS-Renormierung ist zu beachten, daß sich der Zustand auf seinem Weg zu einem einzelnen möglichen nächsten Zustand um eine, zwei oder mehrere Zustandspositionen verschieben kann.
- In den folgenden Flußdiagrammen werden die oben dargelegten "Hardware"- und "Software"-Ausführungsformen in der Darstellung als Ablaufdiagramm beschrieben. Die Codierer- und Decodierer- Ausführungsformen sind an den Stellen, an denen sie sich unterscheiden mit -H oder -S gekennzeichnet.
- Fig. 13 ist ein Flußdiagramm, das einen Codierer und Decodierer entsprechend dem vorliegenden arithmetischen Codier-Kompressions-/Dekompressionssystem zeigt. (Vergleiche Fig. 1) In Fig. 1 ist BITEIN das codierte binäre Ereignis, und BITAUS ist das decodierte binäre Ereignis. In den Flußdiagrammen werden die binären Entscheidungen JN genannt, sowohl beim Codierer als auch beim Decodierer. Zum Zweck der allgemeinen Beschreibung wird das Kompressionssystem durch INITCOD entsprechend Fig. 14 und Fig. 15, einmal in einem Hardware-Schema, das andere Mal in einem Software-Schema initialisiert. Der Modellprozeß wird durch die Anweisung "ERHALTE S, JN" repräsentiert. INITZUSTAND (Fig. 16) setzt den Anfangs-q-Indexwert und den Qe-Wert für alle Zusammenhangszustände S. Der CODIEREN-Block (Fig. 17) verwendet den Zusammenhangszustand S und die JN-Werte, um die komprimierte Datenfolge zu erzeugen. Die Entscheidung, wann alle Zeichen codiert sind, wird durch externe Mittel bereitgestellt. Zum Beispiel gibt es bei Graustufen-Fernsehbildern ein festes Format wie beispielsweise 512 Bildelemente/Zeile und 480 Zeilen. Wenn es keine übergeordneten Vereinbarungen gibt, muß der Codierer für den Decodierer diese Informationen bereitstellen, entweder extern oder als Teil der komprimierten Datenfolge.
- Wenn alle Zeichen codiert sind, gibt der Block TRANSPORT (Fig. 33 und Fig. 34) die letzten Bytes aus, so daß garantiert ist, daß der Decodierer über genügend Daten verfügt, um alle Zeichen vollständig zu decodieren. Der Block "übertragen" könnte entweder einen Speicher oder eine Übertragung repräsentieren. In dieser Figur wird angenommen, daß die komplette komprimierte Datenfolge vor der Übertragung oder Speicherung erzeugt wird. Jedes Byte der komprimierten Daten kann jedoch übertragen werden, sobald das nächste Byte erzeugt worden ist. Der Block INIT- DEC (Fig. 38 und Fig. 40) wird einmal aufgerufen, um den Decodierer zu initialisieren. Im Decodierer liefert das Modell den Wert für den Zusammenhangszustand S. Der DECODIEREN-Block (Fig. 41) gibt die JN-Entscheidung zurück. Die Entscheidung, wann das Decodieren beendet ist, wird extern oder als Teil der komprimierten Datenfolge geliefert.
- Die folgenden Definitionen gelten für die Flußdiagramme und deren Beschreibungen.
- In den Programmen und den Flußdiagrammen ist Q0(S) als Festkommabruch mit 16 Bits definiert. Er kann entweder einen positiven oder negativen Wert haben.
- I0(S) ist der Index für die QIMPS- oder QILPS-Tabelle zum Aktualisieren des Qe-Wahrscheinlichkeitswertes. Er wird in den zwei Bytes gespeichert, die unmittelbar auf Q0(S) folgen. Die 4 Bytes aus der QIMPS- oder QILPS-Tabelle sind das nächste Q0,I0Paar.
- A ist ein 16-Bit-Integerwert, kann jedoch als binärer Bruch betrachtet werden, wobei das Binärkomma so angeordnet ist, daß 12 gebrochenen Bits zwei Nullen und 2 führende Integerbits folgen.
- X ist eine 32-Bit-Zahl, welche eine Struktur aufweist, wie sie in Fig. 5 für den Codierer und in Fig. 6 für den Decodierer dargestellt ist.
- XC sind die 16 höchstwertigen Bits von X im Decodierer.
- XNEU sind die 16 niederwertigsten Bits von X im Decodierer.
- XMARKIERUNG sind die 8 niederwertigsten Bits von X im Decodierer.
- LEN ist die Länge des Puffers für die Codefolge. Sie ist auf 256 Bytes gesetzt (eine zufällige aber geeignete Auswahl) . LEN könnte auf 1 gesetzt werden.
- BPST zeigt auf den Anfang des Puffers der komprimierten Daten.
- BE zeigt auf das erste Byte hinter dem Puffer der komprimierten Daten.
- BP ist der Zeiger auf das aktuelle Byte der komprimierten Daten.
- B ist das Byte der komprimierten Daten, auf das durch BP gezeigt wird.
- AMIN bestimmt, wann eine Renormierung erforderlich ist. AMIN ist in allen Fällen auf hexadezimal '4000' gesetzt (was zu 0,75 äquivalent ist) außer für den Software-Decodierer, für den es auf Minus hexadezimal '4000' gesetzt ist (was auch noch zu 0,75 äquivalent ist)
- INITCOD (Fig. 14 und Fig. 15) führt die Initialisierung des Codierers aus. Es sind zwei Versionen von INITCOD implementiert worden, gemäß dem Umstand, ob die Hardware-Version (-H), in Fig. 2 dargestellt, oder die Software-Version (-S), in Fig. 3 dargestellt, implementiert ist. Nachdem die Tabellen initialisiert sind, initialisiert INITZUSTAND (Fig. 16) den Speicherbereich für den Zusammenhang. Beide Versionen initialisieren LEN auf 256 Bytes, zeigen mit BE auf das Ende des Puffers der komprimierten Daten und zeigen mit BP auf 1 Byte vor BPST, den aktuellen Anfang des zu sendenden Puffers. Der Zeiger wird aktualisiert, bevor ein Byte geschrieben wird; somit ist ein Offset von 1 notwendig. Das Byte B (adressiert durch BP) wird auf '80' initialisiert, um sicherzustellen, daß die Spezialfälle B=0 oder B='FF' nicht für das erste Byte der komprimierten Datenfolge ausgelöst werden. Der Bereich von A wird auf '4000' initialisiert und AMIN wird auf denselben Wert initialisiert. Die Unterschiede zwischen den Versionen erscheinen in der Initialisierung von X. Alle Versionen haben das 8'te höchstwertige Bit auf 1 gesetzt, um eine Markierung zu erreichen, wenn die 8 komprimierten Bits bereit sind. In der Software-Version wird ein negatives Übertragsbit eingefügt, unmittelbar nachdem das Markierungsbit von X und A in die niederwertigen Bits hinein ODER-verknüpft wird. Dieses negative Übertragsbit verhindert die Weitergabe des negativen Übertrags in das Markierungsbit.
- CODIEREN (Fig. 17) zeigt die zwei Pfade, die in Abhängigkeit davon eingeschlagen werden, ob JN 1 oder 0 ist.
- CODEJN1 (Fig. 18 und Fig. 19) codiert JN=1. Wenn Q0(S) < 0 gilt, dann ist MPS=1 und ein MPS-Zeichen muß codiert werden. A wird verringert, indem das negative Q0 addiert wird. Die Hardware- Version verschiebt X nach oben, indem das negative Q0 subtrahiert wird. Auf dem MPS-Pfad, wenn A kleiner AMIN ist, kann dann Q0 durch AKTUALISIEREMPS (Fig. 22) verringert werden. Der RENORMIERE-Block (Fig. 24) renormiert sowohl A als auch X. Wenn Q0 positiv ist, (Null ist nicht erlaubt), dann ist MPS=0 und ein LPS-Zeichen muß codiert werden. Bei der Software-Version muß der MPS-Bereich berechnet werden, und X muß um das neue A nach unten verschoben werden. In beiden Fällen wird A gleich Q0 gesetzt, und dann wird die Aktualisierung der Wahrscheinlichkeit für den LPS-Fall in AKTUALISIERELPS (Fig. 23) durchgeführt. Weil Q0 immer kleiner als AMIN ist, ist eine Renormierung erforderlich.
- CODEJN0 (Fig. 20 und Fig. 21) zeigt dieselben Operationen wie Fig. 18 und Fig. 19 für den Pfad JN=0. In diesem Fall ist Q0 für den MPS-Pfad positiv und für den LPS-Pfad negativ.
- AKTUALISIEREMPS (Fig. 22) führt die Aktualisierung der Wahrscheinlichkeit auf dem MPS-Pfad durch. Das neue Qe und der Index (4 Bytes gesamt) werden in der QIMPS-Tabelle am Ort des alten I0(S) gefunden. Tabelle 3 zeigt ein Beispiel für eine QIMPS-Tabelle.
- AKTUALISIERELPS (Fig. 23) führt die Aktualisierung der Wahrscheinlichkeit auf dem LPS-Pfad durch. Das neue Q und der Index (4 Bytes gesamt) werden in der QILPS-Tabelle am Ort des alten I0(S) gefunden. Tabelle 2 zeigt ein Beispiel für eine QILPS-Tabelle.
- RENORMIERE (Fig. 24) normiert die A- und X-Werte jeweils ein Bit pro Zeitintervall. A wird zuerst verschoben und dann wird X getestet, um zu sehen, ob das höchstwertige Bit gesetzt ist. Wenn dem so ist, entfernt die nächste Verschiebung von X das Markierungsbit und ein Byte wird durch BYTEAUS (Fig. 25 und Fig. 26) ausgegeben. Anderenfalls wird X sofort um ein Bit verschoben. Dieser Vorgang wird solange fortgesetzt, solange A kleiner AMIN ist.
- Gemäß BYTEAUS (Fig. 25 und Fig. 26) erwartet der Decodierer, daß jedem 'FF'-Byte unmittelbar ein führendes Füllbit im nächsten Byte folgt. Das führende Bit ist das Übertragsbit.
- In Fig. 25 prüft die Hardware-Version von BYTEAUS zuerst das letzte Byte B und gibt sofort nur 7 Datenbits in SCHIEBE7-H (Fig. 17) aus, wen B 'FF' ist. Jeder Übertrag wird dann im höchstwertigen Bit des neuen Bytes erscheinen. Wenn B kleiner als hexadezimal 'FF' ist, wird X auf einen Übertrag getestet und wenn keiner vorhanden ist, können in SCHIEBE8-H (Fig. 29) 8 Bits ausgegeben werden. Wenn ein Übertrag vorhanden ist, muß das letzte Byte um 1 inkrementiert werden und das Ergebnis muß getestet werden, um zu sehen, ob es jetzt hexadezimal 'FF' ist. Wenn dies so ist, dann muß der Übertrag in X, der bereits zu B addiert worden ist, gelöscht werden, bevor die nächsten 7 Bits ausgegeben werden. Anderenfalls können 8 Bits in dem neuen Byte ausgegeben werden.
- Die Software-Version BYTEAUS-S (Fig. 26) überprüft ob X positiv ist. Wenn X positiv ist, ist das Borgenbit (negativer Übertrag) verwendet worden, und B muß um 1 dekrementiert werden, bevor 8 Bits ausgegeben werden. Wenn das Borgenbit nicht verwendet wurde, wird es aus X gelöscht, bevor A mit X verglichen wird. Wenn X kleiner als A ist, könnte ein Borgen zukünftig erforderlich sein, was nicht verfügbar wäre, wenn das neue Byte als Null ausgegeben würde. (A ist höchstens '7FFC', so hat X nur Nullen in den 8 Ausgabebits) . SCHIEBE8FF-S (Fig. 31) nimmt das Vorborgen, konvertiert das neue Byte zu 'FF' und speichert das geborgte Bit in X. Wenn B 'FF' ist, werden durch SCHIEBE7-S (Fig. 28) nur 7 Bits transportiert anstatt der 8 Bits durch SCHIEBE8-S (Fig. 30).
- SCHIEBE7-H (Fig. 27) inkrementiert den Ausgabebytezeiger in NÄCHSTESBYTE (Fig. 32) und speichert die neuen B-Bits 24 bis 17 von X ein. Das führende Bit enthält jeden Übertrag. Nur die nachgeschleppten 17 Bits bleiben in X, bevor das Markierungsbit als das 7'te höchstwertige Bit eingefügt wird. Dies bewirkt, daß das nächste Byte ausgegeben wird, wenn 7 neue Bits bereit sind, weil eines in X geblieben ist. SCHIEBE7-S (Fig. 26) ist dasselbe wie SCHIEBE7-H, außer daß das Borgenbit so gesetzt wird, daß es unmittelbar dem Markierungsbit folgt. SCHIEBE8 (Fig. 29 und Fig. 30) ist für beide Versionen gleich. Nach dem Inkrementieren des Zeigers auf das nächste Ausgabebyte B werden die 8 Bits in X auf den Bitpositionen 23 bis 16 in B gespeichert. Außer den 16 niederwertigsten Bits werden alle Bits in X gelöscht und das Markierungsbit wird als 8-tes höchstwertiges Bit eingefügt. Die Software-Version fügt nach dem Markierungsbit ebenfalls ein Borgenbit ein.
- Der Software-Codierer muß garantieren, daß B wenn erforderlich dekrementiert werden kann. SCHIEBE8FF-S (Fig. 31) wird ausgeführt, wenn das nächste zu schreibende Byte Null ist und ein Borgen aus diesem heraus erforderlich sein könnte. Deshalb wird unmittelbar ein negativer Übertrag eingeführt, indem B um 1 verringert und das nächste Byte zu hexadezimal 'FF' konvertiert wird. Der negative Übertrag, der aus diesen zwei Byte entnommen wurde, wird in X eingefügt, von wo er in dem nächsten Byte als Übertrag ausgegeben wird, wenn dieser nicht benötigt wird.
- NÄCHSTESBYTE (Fig. 32) verschiebt BP auf die Adresse des nächsten Byte im Puffer der komprimierten Daten. Wenn, nachdem er inkrementiert wurde, BP nicht kleiner als das Pufferende ist, muß der Pufferinhalt übertragen werden und BP muß auf den Pufferanfang zurückgesetzt werden. Es wird angenommen, daß BPST und BP geeignet verändert werden, wenn dies erforderlich ist.
- Nachdem das letzte Zeichen codiert worden ist, müssen die 22 komprimierten Datenbits, die sich noch in X befinden heraustransportiert werden. In LEERE-H (Fig. 33) wird CT auf 22 initialisiert und bei jeder Verschiebung von X dekrementiert, bis das Markierungsbit im höchstwertigen Bit erscheint. Eine weitere Verschiebung bringt die Ausgabebits an eine Bytegrenze. Danach kann LETZTEBYTES-H (Fig. 35) diese letzten Bytes ausgeben.
- LEERE-S (Fig. 34) verschiebt X an den Fußpunkt des Intervalles, was dann genau den Wert erzeugt wie durch die Hardware-Version. Nachdem die Bits nach Bytegrenzen ausgerichtet sind, muß, bevor die letzten Bytes in LETZTEBYTES-S (Fig. 36) ausgegeben werden, das letzte Byte dekrementiert werden, wenn der negative Übertrag verwendet worden ist.
- LETZTEBYTES-H (Fig. 35) verläuft innerhalb einer Schleife über dieselben Operationstypen wie BYTEAUS-H (Fig. 25), bis alle Bits heraustransportiert worden sind. Die Blöcke LEERE7 (Fig. 37) und LEERE8 (Fig. 38) enthalten ein geeignetes Dekrementieren von CT um 7 oder 8 Bits. Nach Abschluß wird BP hinter das letzte Byte inkrementiert, und der letzte Pufferinhalt kann ausgegeben werden.
- Die Software-Version LETZTEBYTES-S (Fig. 36) muß nur dafür sorgen, daß in Abhängigkeit davon, ob das vorhergehende Byte 'FF' ist, 7 oder 8 Bits herausgeschoben werden. Das Vorborgen wurde bereits in LEERE-S behandelt. Weil X an den Fußpunkt des Intervalles verschoben wurde, ist der Test mit A in BYTEAUS-S nicht von Bedeutung.
- In LEERE7 (Fig. 37) werden sowohl bei der Hardware- als auch bei der Software-Version 7 Bits ausgegeben, indem auf das neue Byte gezeigt wird, die Bits 24 bis 17 gespeichert werden, nur die 17 niederwertigsten Bits von X gerettet werden und CT um 7 dekrementiert wird.
- In LEERE8 (Fig. 38) werden sowohl bei der Hardware- als auch bei der Software-Version 8 Bits ausgegeben, indem auf das neue Byte gezeigt wird, die Bits 23 bis 16 gespeichert werden, nur die 16 niederwertigsten Bits von X gerettet werden und CT um 8 dekrementiert wird.
- INITDEC (Fig. 39 und Fig. 40) führt die Initialisierung des Decodierers aus. Es sind zwei Versionen von INITDEC implementiert worden, gemäß dem Umstand, ob die Hardware-Verschiebung (-H) des Codepunktes für die MPS- und LPS-Zeichen, in Fig. 2 dargestellt, oder die Software-Version (-S), in Fig. 3 dargestellt, gewünscht ist. Nachdem die Tabellen initialisiert sind, werden wie beim Codierer alle Zustände initialisiert. Die Initialisierung von X erfolgt aus dem Puffer der komprimierten Daten. Es ist jedoch zu beachten, daß die Größe von A so initialisiert wird, daß sie mit dem Codierer übereinstimmt. Beide Versionen beginnen, indem ein neuer Pufferinhalt mit komprimierten Daten eingelesen wird. Dies wird vorausgesetzt, um BPST und LEN zu initialisieren. BE zeigt auf das Ende des Puffers der komprimierten Daten und BP auf den Anfang des Puffers. Die Unterschiede zwischen den Versionen erscheinen in der Initialisierung von X, A und AMIN. Bei der Hardware-Version wird der Bereich A auf '4000' initialisiert, und AMIN wird auf '4000' initialisiert. Bei der Software-Version werden diese Zahlen negiert. Bei INITDEC-H werden die ersten beiden Bytes innerhalb der Bits 31 bis 16 angeordnet. Zur Vereinfachung der Initialisierung sind die zwei führenden Bits der komprimierten Datenfolge als 0 definiert. Dies gewährleistet eine einfache Byteausrichtung zwischen den Codebytes und den Bytes des X-Registers während der Initialisierung. Das erste Byte wird auf die Positionen 31 bis 24 geschoben, der Zeiger wird in ERHALTEBYTE (Fig. 49) inkrementiert, und dann wird das zweite Byte auf den Bitposition 23 bis 16 hinzugefügt. Es ist sichergestellt, daß das führende Byte nicht 'FF' ist, somit ist keine Prüfung erforderlich. Der Decodiervorgang berücksichtigt nur die Bits in XC, die hochwertigen zwei Bytes von X (Bits 31 bis 16). BYTEEIN wird verwendet, um ein drittes Byte auf den Bitpositionen 15 bis 8 zu positionieren (wenn nicht das zweite Byte 'FF' war, in welchem Fall es in die Bits 16 bis 7 eingefügt wird). BYTEEIN setzt das Markierungsbit, was anzeigt, wann ein neues Byte benötigt wird. Die Software-Version INITDEC-S (Fig. 40) beginnt mit 0 minus A, was in XC 'C000' ergibt. Die ersten zwei Bytes werden zu diesem Startpunkt addiert. BYTEEIN wird verwendet, um das dritte Byte hinzuzufügen und das Markierungsbit zu setzen.
- DECODIEREN (Fig. 41) zeigt die zwei Pfade, die in Abhängigkeit davon eingeschlagen werden, ob MPS 1 oder 0 ist. DECODIEREMPS1 (Fig. 42 und Fig. 43) zeigt zwei Implementierungen zum Decodieren, wenn MPS=1 ist. Bei der Hardware-Version wird das negative Q0(S) zu XC addiert. Wenn das Ergebnis größer oder gleich 0 ist, wird der MPS-Pfad eingeschlagen. JN wird auf Eins gesetzt und A wird verringert, indem das negative Q0(S) addiert wird. Wenn eine Renormierung von A auf dem MPS-Pfad erforderlich ist, weil A kleiner als AMIN ist, dann wird der Betrag von Q0(S) in AKTUALISIEREMPS ebenso verringert. Auf dem LPS-Pfad wird JN auf 0 gesetzt, XC wird wiederherstellt, indem das negative Q0(S) abgezogen wird und A wird auf den negierten Wert von Q0(S) gesetzt. Auf dem LPS-Pfad ist immer eine Renormierung erforderlich und der Betrag von Q0(S) wird in AKTUALISIERELPS vergrößert. Die Software-Version von Fig. 43 verringert den Betrag von A, indem das negative Q0(S) vor dem Vergleich von XC mit A subtrahiert wird. A enthält dann den negativen MPS-Bereich. Wenn XC mindestens so groß wie A ist, wird ein LPS decodiert; anderenfalls wird ein MPS decodiert. Wenn ein LPS decodiert wird, vergrößert die Software-Version XC, indem der negative NPS-Bereich A subtrahiert wird. Auf dem MPS-Pfad zeigt, da sowohl A als auch AMIN negativ sind, A größer AMIN an, daß der Betrag von A kleiner ist als der Betrag von AMIN, und eine Renormierung erforderlich ist.
- DECODIEREMPS0 (Fig. 44 und Fig. 45) zeigt für den Pfad MPS=0 dieselben Operationen wie Fig. 42 und Fig. 43. In diesem Fall ist Q0 positiv.
- RENORMD (Fig. 46 und Fig. 47) normiert die A- und X-Werte jeweils ein Bit pro Zeitintervall. Sowohl A als auch X werden verschoben und die sich anschließende XMARKIERUNG, das niederwertigste Byte von X, wird getestet, um zu sehen, ob irgendwelche Bits gesetzt sind. Wenn nicht, ist es Zeit, ein neues Byte zu holen. Dieser Prozeß wird solange fortgesetzt, solange A kleiner AMIN (bei der Hardware) oder größer AMIN (bei der Software) ist.
- Während des Prozesses des Eingebens eines neuen Bytes in X, wie er in BYTEEIN (Fig. 48) gezeigt wird, wird das letzte Byte B getestet, um zu sehen, ob es ein 'FF-Byte war, bevor ERHALTEBYTE (Fig. 49) zum nächsten Byte geht. Das führende Bit jedes auf ein 'FF' folgenden Bytes wurde beim Codieren eingefügt und muß beim Decodieren geeignet berücksichtigt werden. Nachfolgend auf ein 'FF' setzt BYTEEIN XNEU, die zwei niederwertigsten Bytes von X, auf 2, um das Markierungsbit in XMARKIERUNG um 1 zu verschieben. Dann wird das nächste Byte, das normalerweise im zweiten niederwertigsten Byte angeordnet wird, um ein Extrabit nach oben verschoben und zu X addiert. Wenn das letzte Byte nicht 'FF' ist, wird das niederwertigste Bit von XNEU gesetzt und das neue Byte B wird zum hochwertigen Byte von XNEU addiert.
- ERHALTEBYTE (Fig. 49) verschiebt BP auf die Adresse des nächsten Bytes im Puffer der komprimierten Daten. Wenn BP nach dem Inkrementieren nicht mehr kleiner ist als das Pufferende, muß ein neuer Pufferinhalt erhalten und BP auf den Anfang des Puffers zurückgesetzt werden. Es wird angenommen, daß BPST und BP geeignet verändert werden, wenn dies erforderlich ist.
- Die oben beschriebenen Verfahren für einen Software-Decodierer können auf einem konventionellen Großrechner, zum Beispiel auf einem IBM 3370, oder auf Personalcomputern wie beispielsweise dem IBM PC-XT oder dem PC-AT implementiert werden. Die Verfahren können in Hochsprachen wie beispielsweise PASCAL implementiert werden.
- Wie in Fig. 50 dargestellt, liefert ein Codierer-Zustandsgeneratormodell (siehe Fig. 1) für jedes zu codierende binäre Ereignis BITEIN dem Q-Codierer 500 einen geeigneten N-Bit-Zustand S. Das Ausgangssignal des Q-Codierers 500 sind Bytes komprimierter Daten, welche übertragen und/oder gespeichert werden, bevor sie als Eingangssignal an einem Q-Decodierer (siehe Fig. 54) auftreten. Der Q-Decodierer bestimmt den Booleschen Wert des binären Ereignisses BITAUS auf der Grundlage des N-Bit-Eingangszustandes vom Decodierer-Zustandsgeneratormodell. Dieser decodierte BITAUS-Wert wird auf den Decodierer-Zustandsgenerator (nicht dargestellt) zurückgekoppelt.
- Das Q-Codierer/Q-Decodierer-System führt einen Hauptzyklus pro zu codierendem binärem Ereignis aus. Die Zeitsteuerung erfolgt über flankengetriggerte Flip-Flops und ein einphasiges Taktsystem. Die Zeitspanne zwischen den Taktflanken ist hinreichend lang, daß der Zeitbedarf der Durchlaufverzögerungen für den ungünstigsten Fall und für die Initialisierung gedeckt wird.
- Diese Beschreibung diskutiert, was innerhalb jedes Hauptzyklus abläuft. Fig. 50 zeigt ein Blockschaltbild des Q-Codierers 500. In jedem neuen Zyklus sind die primären Eingangssignale des Q- Codierers 500 der binäre Ereigniswert BITEIN und der Zustand S, welcher spezifiziert, wo die Information über die Wahrscheinlichkeit gespeichert worden ist. Am Ende des Zyklus spezifiziert die AUSGABE STEUERUNG eines C/ÜBER-Ausgabepuffers 508 ob kein, ein oder zwei Bytes komprimierter Daten in den 16 Bits der CODEKETTE bereitgestellt werden.
- Ein Eingangssignal in die Statistikeinheit 502 ist der N-Bit- Zustand S, welcher zum Adressieren des Zusammenhangsanpassungsspeicher verwendet wird, um dem Zeichenwert für das wahrscheinlichere Zeichen MPSWERT und den QINDEX für die aktuelle binäre Entscheidung BITEIN zu erhalten. QINDEX ist eine Folge von ganzen Zahlen und ist der Indem einer Schätzung aus einem Satz Wahrscheinlichkeitsschätzungen für das weniger wahrscheinliche Zeichen. In der Ausführungsform erstreckt sich QINDEX von 0 bis 29. Die Statistikeinheit 502 gibt MPSWERT und QINDEX innerhalb des Zyklus frühzeitig aus, so daß diese Parameter als Eingangssignale für sowohl die Codierereinheit 504 (Fig. 51) als auch die Anpassungseinheit 506 verfügbar sind. Spät innerhalb des Zyklus speichert die Statistikeinheit 502 den NEUMPSWERT und den NEUQINDEX an Orten, die durch den Zustand S spezifiziert werden, vorausgesetzt, daß das Eingangssignal A-BUS< 0> (das höchstwertige Bit von A-BUS) für eine gewisse Zeit während des Zyklus Null war. Die Arbeitsweise der Statistikeinheit 502 ist sowohl für den Codierer als auch für den Decodierer gleich.
- Die Anpassungseinheit 506 ist ebenfalls beim Codierer und Decodierer gleich. Die in dieser Einheit ablaufenden Operationen sind in Tabelle 4 dargestellt. Dieselbe Funktion kann mit einer diskreten Logik erreicht werden.
- Das binäre Ereignis BITEIN wird zusammen mit MPSWERT und QINDEX in die Codierereinheit eingegeben. Ein Ausgangssignal der Codierereinheit 504 ist das binäre (Boolesche) Signal A-BUS< 0> das höchstwertige Bit von A-BUS. Dies signalisiert der Statistikeinheit 502, daß es an der Zeit ist, QINDEX oder MPSWERT zu verändern. Die Anpassungseinheit 506 empfängt das Boolesche Signal "MPSOP" von der Codierereinheit 504, welches anzeigt, ob die aktuelle Entscheidung eine MPS-Operation ist oder nicht. Das Ausgangssignal der Anpassungseinheit 506 sind die neuen Werte für die zwei Eingangssignale der Statistikeinheit 502. Die Statistikeinheit 502 speichert die neuen Werte nur dann, wenn A-BUS< 0> auf Null gewesen ist.
- Der C/ÜBER-Ausgabepuffer 508 führt das Bitfüllen für den Übertrag innerhalb desselben Zyklus aus wie die Codierereinheit 504 und die Anpassungseinheit 506, oder er kann in einer Pipeline- Arbeitsweise betrieben werden. Als eine Einheit einer Pipeline speichern Flip-Flops das Codierer-Ausgangssignal während jedes Zyklus, so daß das System im Zyklus "n" mit dem C/ÜBER-Ausgabepuffer 508 das Ausgangssignal der Codierereinheit des Zyklus "n-1" bearbeitet.
- Es gibt zwei Typen Hauptzyklen: MPS-Operation und LPS-Operation, die entsprechend durch MPSOP gleich 1 und MPSOP gleich 0 gekennzeichnet werden. Wenn der BITEIN-Wert und der MPSWERT-Wert gleich sind, ist die Operation eine MPS-Operation, anderenfalls handelt es sich um eine LPS-Operation. Das Antivalenzgatter von Fig. 51, das BITEIN und MPSWERT verarbeitet, bestimmt den Operationstyp für den Hauptzyklus.
- Während eines Zyklus gibt die Codierereinheit 504 den binären Übertrags-Ausgangswert C/AUS, die unnormierte 13-Bit-Codefolge C-UNNORM und das 4-Bit-Steuersignal VERSCHIEBERSTG, was anzeigt, wieviel die Codefolge zu verschieben ist, an den C/ÜBER-Ausgabepuffer 508 aus. Der C/ÜBER-Ausgabepuffer 508 gibt eine oder zwei 8-Bit-Bytewerte sowie ein Steuersignal aus, welches anzeigt, ob 0, 1 oder 2 Bytes herausgeschoben werden.
- Die Statistikeinheit 502 und die Anpassungseinheit 506 sind im Q-Codierer und im Q-Decodierer identisch.
- Ein detaillierteres Blockschaltbild der Codierereinheit 504 wird in Fig. 51 gezeigt. Der hier diskutierte Typ der arithmetischen Codierung bildet eine Codefolge durch Addition und Verschiebung. Die addierten Größen sind "Augends". Der eingegebene QINDEX wird zu dem Augend ins Verhältnis gesetzt. Die QWERT-Werte stehen in einer Eins-zu-Eins Beziehung zu den QINDEX-Werten, wobei QWERT für die Hardware-Ausführungsform des Q-Codierers der Augend des arithmetischen Codierprozesses ist. Die Codierereinheit 504 benötigt nur QWERT und nicht QINDEX. In der vorliegenden Ausführungsform ist es weniger aufwendig den QINDEX zu speichern, weil der QINDEX eine 5-Bit-Größe ist und QWERT eine Größe mit 12 signifikanten Bits plus einer führenden 0 ist. Für die Anpassungseinheit 506 ist es ebenfalls günstig QINDEX zu manipulieren.
- Die Umwandlung von QINDEX in QWERT wird sowohl für den Codierer als auch für den Decodierer durch die Q-LOGIK 510 ausgeführt. Die Umwandlung kann über Tabelle 5 erfolgen oder aber durch eine kombinatorische Schaltung unter Verwendung von Wahrheitstabellen-Verfahren, wie sie in aktuellen Lehrbüchern stehen. Es ist zu beachten, daß das höchstwertige Bit von QWERT immer 0 und das niederwertigste Bit immer 1 ist.
- Der Q-Codierer verwendet zwei Register, bezeichnet als das A-Register 528 und das C-Register 534. Das C-Register ist funktionell dem in den Software-Ablaufplänen verwendeten X-Register äquivalent. Die Logik, die den Inhalt des A-Registers 528 verändert, wird in der detaillierteren Darstellung des Blockes A-Logik 520 in Fig. 52 gezeigt. Basierend auf dem Eingangssignal MPSOP wählt A-MUX 522 für eine LPS-Operation (0) QWERT aus oder es wird für eine MPS-Operation (1) QWERT vom A-Register subtrahiert. Der Prioritätscodierer 524 zählt die Anzahl der führenden Nullen auf dem A-BUS und erzeugt die Anzahl der Verschiebungen VERSCHIEBERSTG, die benötigt werden, um eine 1 auf dem höchstwertigen Bit von A-BUS wiederherzustellen. Diese Verschiebung wird im A-VERSCHIEBER 526 ausgeführt. Die niederwertigsten Bits werden wie benötigt mit Nullen aufgefüllt. Tabelle 6 zeigt die Werte von VERSCHIEBERSTG als Funktion von A-BUS. Striche kennzeichnen "bedeutungslose" Bits. Das A-Register 528 wird innerhalb des Zyklus später getaktet, nachdem sich alle Werte stabilisiert haben. Sein Inhalt wird auf den A-Subtrahierer 529 gegeben.
- Das Herausschieben der Code folge, speziell über das C-Register 534, wird durch das A-Register 528 in folgender Weise gesteuert. Wen das A-Register 528 um eine gegebene Anzahl Bitpositionen nach links verschoben werden muß, dann wird das C-Register 534 um dieselbe Anzahl Bits nach links verschoben. Zu Beginn jedes Hauptzyklus muß das A-Register normiert werden, d.h. der Wert im A-Register muß gleich oder größer eines unteren Begrenzungswertes sein. Wenn diese Bedingung, wie oben diskutiert, nicht erfüllt ist, wird A renormiert (durch Verschiebung nach links) . wird mit dem unteren Begrenzungswert UB initialisiert.) Während der Hauptzyklen treten Verschiebungen des A-Registers 528 auf, wobei die Arbeit mit dem A-Register 528 bewirkt, daß sein Wert unter den unteren Begrenzungswert fallen kann. Das Fallen unter den unteren Begrenzungswert wird dadurch erkannt, daß das höchstwertige Bit von A-BUS, A-BUS< 0> , Null wird.
- Bei einer MPS-Operation wird QWERT vom A-Register subtrahiert, wobei die Differenz wenn erforderlich renormiert und auf das A-Register zurückgegeben 528 wird. Bei einer LPS-Operation wird der normierte Wert von QWERT in das A-Register 528 geschafft. Die Subtraktion von QWERT vom A-Register 528 für MPSOP wird entsprechend Fig. 52 in der Einheit A-Subtrahierer ausgeführt, deren Ausgangssignal einen 2-zu-1-Datenselektor, als A-MUX bezeichnet, durchläuft. Bei einer LPSOP wird QWERT durch den Datenselektor A-MUX 522, dessen Ausgangssignal als ABUS bezeichnet wird, durchgeschaltet. Die Subtraktion kann bewirken, daß das Ergebnis ABUS unter den Wert UB fällt. In der vorliegenden Ausführungsform, ist der Wert von UB so ausgewählt, daß, wenn ABUS< 0> 0 ist, mindestens ein Renormierungsschritt erfolgen muß. Tatsächlich ist die Anzahl der Renormierungsschritte, die mit ABUS durchgeführt werden müssen, gleich der Anzahl der führenden 0'en im Ergebnis auf ABUS. ABUS wird in der Baugruppe A-Verschieber 526 renormiert, wobei es sich um einen Bitstellenverschieber nach links handelt, der Nullen auffüllt. Die Ahzahl der Bitpositionen, die aus ABUS herausgeschoben werden, hängt von der Anzahl der führenden Nullen von ABUS ab. Die A-Verschieber- Steuerung, VERSCHIEBERSTG, ist ein 4-Bit-Zahl zwischen 0 und 12. Wenn ABUS nicht renormiert werden muß, ist VERSCHIEBERSTG 0 und ABUS wird unmittelbar durchgeschaltet. Das Steuersignal VERSCHIEBERSTG, das in den Verschieber eingespeist wird, wird durch den Prioritätscodierer 524 festgelegt, welcher die Anzahl der führenden 0'en auf dem ABUS-Bus codiert. Während einer MPSOP, legt A-MUX 522 den Wert A-Register minus QWERT auf den ABUS, und während einer LPSOP schaltet der Datenselektor A-MUX 522 QWERT durch. Der Wert von VERSCHIEBERSTG steuert auch den C-Register 534 Abschnitt des Codierers und ist ein Steuersignal für die Baugruppe C/ÜBER-Ausgabepuffer 508.
- Bei einer MPSOP werden das C-Register 534 und QWERT im C-Addierer 536 addiert, was das MPS-Ergebnis für den C-BUS ergibt. Bei einer LPSOP legt der C-MUX 532 den Inhalt des C-Registers 534 auf den C-BUS. Das Signal C/AUS wird an die Baugruppe C/ÜBER- Ausgabepuffer 508 angelegt. Die Addition von QWERT zum C-Register 534 kann gleichzeitig (wie in dieser Ausführungsform) mit der Subtraktion von QWERT vom A-Register 528 ausgeführt werden. Der C-BUS muß um dieselbe VERSCHIEBERSTG wie der ABUS verschoben werden, und folglich wird das Ausgangssignal des Prioritätscodierers 524, VERSCHIEBERSTG, ebenfalls an den C-Verschieber angelegt. Bei MPSOP Zyklen schaltet der 2-zu-1 Datenselektor C-MUX das Signal von C-BUS auf die links-Bitstellenverschieber-Baugruppe C-Verschieber, welche der A-Verschieber-Baugruppe baugleich ist. Das Ausgangssignal des C-Verschiebers wird auf das C-Register 534 zurückgegeben. Das Ausgangssignal von C-MUX (unverschoben), als C-UNNORM bezeichnet, wird genau wie VERSCHIE- BERSTG an die Baugruppe C/ÜBER-Ausgabepuffer 508 gesendet. VER- SCHIEBERSTG sagt der C/ÜBER-Ausgabepuffer-Baugruppe 508 wie viele führende Bits von C-UNNORM genommen werden sollen.
- Bei einer LPSOP wird mit dem Inhalt des C-Registers 534 keine Addition ausgeführt, er wird nur verschoben. Bei LPSOP-Zyklen wählt das C-MUX-Steuersignal den Inhalt des C-Registers aus, und schaltet diesen auf den C-Verschieber, wo er um VERSCHIEBERSTG Bits nach links verschoben und dann auf das C-Register 534 zurückgegeben wird. Wie oben werden VERSCHIEBERSTG und C-UNNORM (das Ausgangssignal von C-MUX) an die C/ÜBER-Ausgabepuffer-Baugruppe angelegt. C/AUS muß zu diesem Zeitpunkt 0 sein, weil nichts zu C addiert wurde.
- Der Sinn der Anpassungseinheit 506 besteht darin, die Codierparameter für einen speziellen Zusammenhang nachzustellen und zwar auf der Grundlage der relativen Häufigkeit der eingehenden 0'en und 1en.
- Bei dem beschriebenen Code sind sowohl das A-Register 528 als auch das C-Register 534 13 Bits lang, und wir bezeichnen die Bitpositionen mit 0, 1, ... , 12, wobei Position 0 das höchstwertige Bit darstellt und Position 12 das niederwertigste Bit darstellt. Es ist günstig, sich ein Komma zwischen den Positionen 0 und 1 des A-Registers 528 vorzustellen, so daß mit dem Bit A< 0> als "1" der Wert des A-Registers größer gleich 1,0 und kleiner 2,0 ist. Der Wert UB ist 1,0. Die QWERTE sind alle kleiner als 1,0, aber einige liegen nahe bei 0,5; somit hat der Bereich der Werte von QWERT 12 signifikante Bits. Bitposition C< 0> wird niemals direkt addiert, weil die entsprechende Bitposition in QWERT bekanntermaßen 0 ist. Somit kann C< 0> nur dadurch verändert werden, daß während eines MPSOP-Zyklus ein Übertrag einläuft. Auf Grund der Natur der arithmetischen Codierung, kann der Wert einer Codekette im Anschluß an einen Hauptzyklus niemals die Summe des Wertes des aktuellen A-Registers 528 mit dem Wert der Codekette, der in dem aktuellen Wert des C-Registers 534 enthalten ist, übersteigen. Folglich wird, wenn einmal ein Übertrag in C< 0> erscheint, niemals ein anderer Übertrag auf dieser Bitposition der Codekette auftreten. Der Block C-Logik 530 des Codierers wird in Fig. 53 dargestellt. Das Eingangssignal MPSOP wählt in Verbindung mit dem C-MUX 532 bei einer LPS- Operation (0) den Inhalt des C-Registers 534 aus oder es werden bei einer MPS-Operation (1) QWERT und der Inhalt des C-Registers 534 in dem Addierer 536 addiert. Die dreizehn Bits des Ausgangssignals von C-MUX 532 werden als Signal C/UNNORM (vor der Renormierung) ausgegeben. Dieselben Daten auf dem C-BUS werden in den C-Verschieber 538 eingegeben, so daß diese durch VERSCHIEBERSTG verschoben werden können, bevor sie später im Zyklus in das C-Register 534 übernommen werden. Während des Verschiebeprozesses werden die niederwertigsten Bits wie benötigt mit Nullen aufgefüllt.
- Der Q-Decodierer 600 von Fig. 54 enthält eine Statistikeinheit 602, eine Anpassungseinheit 604, eine Decodierereinheit 606 und einen C/EIN-Eingabepuffer 608, der Überträge in der Codefolge berücksichtigt. Die Elemente 602 und 604 sind mit den gleich bezeichneten Baugruppen des Q-Codierers 500 identisch. Die Decodierereinheit 606 wird detailliert in Fig. 55 dargestellt. Die Decodierereinheit 606 enthält eine CD-Logik 608, eine Q-Logik 610 und eine A-Logik 612.
- Die CD-Logik 608 des Decodierers wird in Fig. 56 dargestellt. Das niederwertigste Bit von QWERT (welches immer 1 ist) minus Übertrag-Eingabe C/EIN ergibt 1 wenn C/EIN 0 ist und 0 wenn C/EIN 1 ist. Damit erhält man QWERT minus C/EIN durch Substitution des inversen C/EIN in das niederwertigste Bit von QWERT. Wenn das Ergebnis der Subtraktion QWERT minus C/EIN vom Inhalt des CD-Registers 624 im CD-Subtrahierer 620 positiv ist, ist ein MPS decodiert worden, und dieses Ergebnis wird auf dem CD-BUS an den CD-Verschieber angelegt. Das MPSOP-Signal ist 1. Anderenfalls ist ein LPS aufgetreten und das Ausgangssignal des Addierers 626, der Inhalt des CD-Registers plus C/EIN, wird durch MPSOP gleich 0 am CD-MUX 628 ausgewählt. Der BITAUS-Wert wird durch Antivalenzverknüpfung des Signals MPSOP mit MPSWERT erhalten. Die Verschiebung um VERSCHIEBERSTG bestimmt, wieviel der CD-BUS-Wert verschoben werden muß, bevor er zum Speichern im CD-Register 624 bereit ist. Die niederwertigsten Bits werden während der Verschiebung mit den höchstwertigen Bits von EINKETTE aufgefüllt.
- Das CD-Register enthält tatsächlich den aktuellen Codewert relativ zum Fußpunkt des aktuellen Intervalles. Die hochwertigen 12 Bits des 13-Bit-QWERT (das höchstwertige Bit ist 0) werden an den CD-Subtrahierer 620 angelegt. Das niederwertigste Bit von QWERT wird durch ein Bit ersetzt, das aus C/EIN abgeleitet wird. Weil das niederwertigste Bit von QWERT immer 1 ist, wenn C/EIN Null ist (kein Übertrag), wird der Wert invertiert, um für den CD-Subtrahierer 620 das niederwertigste Bit von QWERT zu werden, und wird außerdem ohne Inversion direkt auf den C/EIN-Addierer gegeben. Der Übertrag wird somit parallel zur Codefolge addiert und von QWERT entfernt, bevor QWERT vom Codewert subtrahiert wird. Das BORGEN vom CD-Subtrahierer 620 entspricht der decodierten MPS/LPS-Entscheidung, MPSOP. Der Wert von BITAUS wird dann durch Antivalenzverknüpfung von MPSOP und MPSWERT erhalten. Fig. 56 zeigt ebenfalls den Datenpfad des CD-Registers 624. Obwohl das Bit CD-BUS< 0> nicht direkt subtrahiert wird, muß es vorhanden sein, weil eine Verschiebungsoperation einen '1'-Wert in CD-BUS< 0> einschieben kann. VERSCHIEBERSTG, das von der A-Logik erhalten wird, ist das Steuereingangssignal für den nach links schiebenden CD-Verschieber 622. Die niederwertigen "Füllbits" für den Verschieber kommen vom Signal EINKETTE, welches von der C/EIN-Eingabepuffer-Baugruppe ausgeht.
- Die Decodierereinheit 606 (Fig. 55) verwendet bis zu 12 Bits von EINKETTE plus das Übertrags-Eingangssignal C/EIN, um die Daten zu dekomprimieren. Die Werte MPSWERT und QINDEX werden ebenfalls als Eingangssignale zum Decodieren der Ausgabebits BITAUS benötigt. Die Decodierereinheit 606 liefert wie im Codierer der Statistikeinheit 602 das Signal A-BUS< 0> .
- In vielen Codierumgebungen ist es wünschenswert, eine Aussprungmöglichkeit aus der Codefolge bereitzustellen, die unabhängig vom arithmetischen Decodierer erkannt werden kann. Hiernach folgt eine Diskussion eines Aussprunges auf der Basis der Anordnung von Abstandsbitpositionen im Codefolgeregister X des Codierers. Das Einschließen von Abstandsbits verzögert tatsächlich den Zeitpunkt, zu dem xxxx&Auslassungsbits in den nächsten Byteabschnitt des x-Registers geschoben werden, der durch die Bitpositionen bbb&Auslassungsbits identfiziert wird. Durch Einfügen der Abstandsbits werden bestimmte Bitmuster nach einem hexadezimalen 'FF' illegal und folglich wird ein Aussprung aus der Codefolge und die Einfügung eines Steuerwortes angenommen. (Das Steuerwort wird typischerweise vor dem Decodieren durch eine Steuereinrichtung entnommen.) Zusätzlich beugt die Verwendung von Abstandsbits der Möglichkeit vor, hinter dem Byte im Abschnitt des nächsten Bytes des Codefolgeregister mehr als einen Übertrag zu erhalten.
- Das Bitmuster des X-Registers, das das teilweise komplettierte nächste Byte der Codefolge enthält, wird mit dem (Augend) Register A, welches den Wert des aktuellen Intervalles enthält, nach den Bitpositionen ausgerichtet. Bei einer Integerdarstellung mit 12 Bits von Wahrscheinlichkeiten würde eine mögliche Bitzuordnung der Codiererregister wie folgt aussehen:
- X = 00000000 0cbbbbbb bbss .xxxx xxxxxxxx
- A = 00000000 00000000 000a .aaaa aaaaaaaa
- worin '0' Nullbit sind; c ein Übertragsempfangsbit ist; 'b' Bits in Bitpositionen bezeichnet, auf denen das nächste Codebyte erzeugt wird; 's' die Abstandsbit anzeigt, die benötigt werden, um eine Übertragsweitergabe zu begrenzen; und x den binär gebrochenen Teil darstellt, der im X-Register bereits entwickelt worden ist. Die 'a'-Bits stellen einzelne Integerbits im A-Register dar. Wenn das vorhergehende Codebyte ein hexadezimales 'FF' ist, wird die Bitanordnung um 1 Bit verschoben, so daß das Übertragsbit die Füllbitposition des nächsten Bytes einnimmt. Für diesen speziellen Fall gilt:
- X = 00000000 00cbbbbb bbss .xxxx xxxxxxxx
- Es ist zu beachten, daß in diesem speziellen Fall nur sieben 'b'-Bits definiert werden.
- Nachfolgend auf das Entfernen eines vollständig entwickelten Codebytes, diktieren die Regeln für die Bitpositionen und die Renormierung einen oberen Begrenzungswert für die Werte in den zwei Registern:
- X = 00000000 00000000 0011.1111 11111111
- A = 00000000 00000000 0001.1111 11111111
- Es ist zu beachten, daß, wenn weitere Ereignisse codiert werden, der Wert im X-Register niemals die Summe des aktuellen X-Wertes und des A-Wertes, multipliziert mit einem beliebigen Renormierungsfaktor, erreichen kann. Deshalb ist der folgende Wert ein oberer Begrenzungswert für das Coderegister:
- X = SLL (00000000 00000000 0101.1111 11111101) N
- worin N die Anzahl der Verschiebungen bei der Renormierung ist und SLL für eine schiebe-logisch-nach-links-Operation steht. Wenn das Byte komplettiert ist, ist N gleich 8, wenn das vorhergehende Byte nicht 'FF' ist; und 7, wenn dieses 'FF' ist. Deshalb ergibt sich nachfolgend auf ein 'FF' folgender oberer Begrenzungswert für den Inhalt des X-Registers:
- X = 00000000 00101111 1111.1110 10000000
- X = 00000000 00cbbbbb bbss .xxxx xxxxxxxx
- Deshalb ist der Maximalwert eines Datenbytes, das einem hexadezimalen 'FF' folgt, hexadezimal 'BF', wenn zwei Abstandsbits enthalten sind. Desweiteren ist zu beachten, daß, wenn nur ein Abstandsbit zugelassen ist, der Maximalwert für das Byte nach einem 'FF' 'FF' ist und daß, wenn drei Abstandsbits zugelassen sind, dieser '9F' ist. Somit wird bei zwei oder mehr Abstandsbits durch nicht zugelassene Codes nach einem 'FF'-Byte ein Aussprung aus der arithmetischen Codefolge bereitgestellt.
- Eine zwei-Bits-Verschiebung bei der Ausrichtung der A- und X- Register (wie in den Flußdiagrammen und in Tabellen 2 und 3 dargestellt) verschiebt das Byte, welches aus dem Coderegister entfernt werden soll, an eine Bytegrenze des X-Registers. Diese Verschiebung verändert die Aussprungcodestruktur nicht. Tabelle 1 Tabelle 2 Tabelle 3 Tabelle 4 Arbeitsweise der Anpassungseinheit Eingangssignale Ausgangssignale Tabelle 5 Arbeitsweise der Q-LOGIK - Umwandlung von QINDEX in QWERT mittels Nachschlagetabelle Tabelle 6 Arbeitsweise des Prioritätscodierers Eingangssignal Ausgangssignal A-BUS VERSCHIEBERSTGTestfolge für einen kleinen Datensatz
- Unter Verwendung eines Zufallszahlengenerators wurde eine Testdatei erzeugt, so daß die Wahrscheinlichkeit von 0'en in der binären Folge 0,1875 war. Die tatsächliche Anzahl Nullen in der Datei war wie erwartet 48. Der Qe-Wert wurde mit '0AC1' initialisiert, was '2b04' ergibt, wenn einmal nach links verschoben wird. Der positive Qe-Wert zeigt einen MPS-Wert von 0 an.
- In den folgenden Tests folgt dem Ereigniszähler EZ am Ende des Zyklus der Qe-Wert und dann das JN-Zeichen. Die A, X und I0-Werte werden am Ende jedes Zyklus nach der Renormierung angegeben. Die Gesamtzahl der Renormierungen ist unter 'Bits' aufgelistet. Die "Codebytes" sind als Ausgangssignale aufgeführt. Mehr als ein Byte in dieser Spalte zeigt ein verändertes vorhergehendes Byte zusammen mit dem neuen Byte (s) an.
- Testdaten (in hexadezimale Form)
- EBB7FAFEBFEFD6C7F7FFFDFE7FFBDFF3FDFFFF97F6F5F7FEB97BDF76EDD7E7FF
- Für diese Datei ergibt sich eine Bitzählung der codierten Daten von 208, einschließlich des Überschusses zum Leeren der letzten Daten. Die tatsächliche komprimierte Datenfolge für beide Codierer ist (in hexadezimaler Form)
- 23CA08826F7E20151C267BA0AB606CD63AA26E71C197A80A07C0 Tabelle 7 Hardware-Codierer Software-Codierer Codebytes Hardware-Decodierer Codebytes Software-Decodierer Codebytes
Claims (18)
1. Verfahren zur arithmetischen Codierung, wobei Teile C des
Codes schrittweise als Codepunkte auf einer Zahlengeraden
gemäß
Cneu E C vorherqehend + A * Qe
berechnet werden, worin Cneu der Codepunkt des neuen
Schrittes ist, Cvorhergehend der Codepunkt des vorhergehenden
Schrittes ist, Qe ist die geschätzte Wahrscheinlichkeit und A der
Augend, ein Intervall auf der Zahlengeraden, welches in
jedem Schritt in Abhängigkeit von Entscheidungsereignis-
Eingangssignalen reduziert wird auf
Aneu E Avorgegehend - Qe oder Aneu E Qe
und wobei die reduzierten Augendwerte mit einem
vorgegebenen Minimalwert AMIN verglichen und auf einen Wert > AMIN
renormiert, vorzugsweise verdoppelt, werden und wobei Qe
ebenfalls aktualisiert wird, wenn A < AMIN gilt; und wobei
dieses Verfahren die folgenden Schritte umfaßt:
Darstellen von AMIN durch ein 1-Bit (n-tes Bit), dem n-1
0-Bits folgen; und
Renormieren von A und Aktualisieren eines aktuell-wertigen
Qe-Wertes auf einen anders-wertigen Qe-Wert, wenn erkannt
wird, daß das n-te Bit von A sich von 1 auf 0 verändert.
2. Verfahren nach Anspruch 1, worin der AMIN auswählende
Schritt, den Schritt der Darstellung von AMIN als
Hexadezimalzahl '1000' enthält.
3. Verfahren nach Anspruch 1, worin der Qe-Wert auswählende
Schritt einschließt
Auswählen von Qe-Werten, welche zwölf Bits lang sind und
worin das niederwertigste Bit jedes Qe-Wertes gesetzt ist.
4. Verfahren nach Anspruch 1, worin der Q-Wert auswählende
Schritt desweiteren einschließt:
Auswählen von Qe-Werten, in welchen für jeden Qe-Wert nicht
mehr als fünf der zwölf Bits gesetzt sind.
5. Verfahren nach Anspruch 1, worin der Qe-Wert aktualisierende
Schritt die folgenden Schritte einschließt:
Berichtigen von Qe auf einen höherwertigen Wert, wenn A nach
einem Qe-Ereignis renormiert wird;
Berichtigen von Qe auf einen niederwertigeren Wert, wenn A
nach einem Nicht-Qe-Ereignis renormiert wird;
worin jeder Qe-Wert, der ungefähr gleich AMIN/(2m) ist
(worin m eine positiv ganze Zahl ist) als ein schlechter Qe-Wert
charakterisiert wird und worin die Berichtigung eines
gegebenen schlechten Qe-Wertes nach einer
Qe-Ereignis-Renormierung den Schritt der Vergrößerung des gegebenen schlechten
Wertes auf einen höheren Wert einschließt, welcher nach
einer Nicht-Qe-Ereignis-Renormierung einen, von dem
gegebenen schlechten Qe-Wert verschiedenen Wert annimmt.
6. Verfahren nach Anspruch 1, worin die Qe-Wahrscheinlichkeit
der Wahrscheinlichkeit des weniger wahrscheinlichen binären
Ereignisses entspricht und worin die Auswahl des Qe-Wertes
den folgenden Schritt umfaßt:
Darstellen von Qe als positiven Wert, wenn das
wahrscheinlichere binäre Ereignis einem ersten Typ eines binären
Entscheidungsausgangs entspricht; und
Darstellen von Qe als negativen Wert, wenn das
wahrscheinlichere
binäre Ereignis dem anderen Typ eines binären
Entscheidungsausgangs entspricht.
7. Verfahren nach Anspruch 1, als weiteren Schritt umfassend:
Bilden eines Sechs-Bit-Codierparameters für eine zu
codierende Entscheidung, in welchem ein Bit anzeigt, welches
Entscheidungsereignis das wahrscheinlichere
Entscheidungsereignis ist und in welchem die fünf verbleibenden Bits
einen entsprechenden Qe-Wert identifizieren.
8. Codierer, eines der Verfahren gemäß den Ansprüchen 1 bis 7
verwendend, wobei der Codierer desweiteren umfaßt:
Mittel (Pufferspeicher) zum Speichern codierter Datenbytes;
ein Codefolgeregister (X-Register 300, C-Register 534), das
(a) einen binären Abschnitt (xx. .x) besitzt, in dem
Codefolge-Daten enthalten sind, welcher durch einen momentanen
Intervallwert (A) eingestellt wird, wenn ein erster Typ der
binären Entscheidung codiert ist und der durch den
momentanen Intervallwert (A) unbeeinflußt bleibt, wenn das andere
binäre Ereignis codiert ist; und das (b) einen nächstes-
Byte-Abschnitt (xneu) besitzt, in dem Codefolge-Daten
enthalten sind, welche in das nächste Speichermittel
(Pufferspeicher) transportiert werden sollen; und das (c)
schließlich ein Abstandsbit (s) besitzt, das zwischen dem
binären Abschnitt (xx. .x) und dem nächstes-Byte-Abschnitt
(xneu) steht;
Mittel zum Verschieben (C-VERSCHIEBER) von Codefolge-Daten
durch das Schieberegister (C-Register) in Abhängigkeit von
der Codierung von Entscheidungsereignissen; und
Mittel zum Transport eines Datenbytes (C/OUT) pro
Zeitintervall in die Speichermittel (Pufferspeicher).
9. Codierer nach Anspruch 8, desweiteren umfassend:
Mittel zum Einschieben von mindestens einem Bit in die
Codefolge im Codefolgeregister, nachdem ein hexadezimales
'FF'-Byte in die Speichermittel transportiert worden ist.
10. Codierer nach Anspruch 8, worin das mindestens eine
Abstandsbit zwei oder mehr Abstandsbits umfaßt und worin der
Codierer desweiteren Bits-Einschiebemittel zum Einfügen
eines einzelnen Füllbits nach einem hexadezimalen 'FF'-Byte
enthält.
11. Codierer nach Anspruch 10, desweiteren umfassend:
Mittel zum Setzen der ersten zwei Bits der codierten
Codefolge auf Null.
12. Codierer nach Anspruch 8, desweiteren umfassend:
Mittel zum Setzen von mindestens dem ersten Bit der
codierten Codefolge auf Null.
13. Codierer nach Anspruch 8, worin das Codefolgeregister
mindestens zwei Abstandsbits besitzt und in welchem Bytes acht
Bits umfassen, wobei der Codierer desweiteren umfaßt:
Mittel zum Austreten aus der Codefolge, wenn einem
hexadezimalen 'FF'-Byte ein Byte folgt, dessen Wert größer ist
als der größtmögliche Wert eines Bytes, welches in dem
Coderegister auf ein hexadezimales 'FF'-Byte folgend
erzeugt werden kann.
14. Codierer nach Anspruch 13, welcher enthält:
Mittel zum Identifizieren eines aktuellen
Zahlengeradenintervalls mit einem ersten Codefolgewert, der auf eine erste
Intervallgrenze zeigt, worin die Identifikationsmittel die
andere Grenze des aktuellen Intervalles ausschließen; und
wobei ein weiterer Codierer das aktuelle
Zahlengeradenintervall mit einer zweiten Codefolgewert identifiziert,
welcher so nah wie möglich auf die andere Grenze des aktuellen
Zahlengeradenintervalls zeigt, ohne diese andere Grenze
einzuschließen.
15. Codierer nach Anspruch 14, worin der weitere Codierer (A)
den Wert der Code folge dann dekrementiert, wenn ein Nicht-
Qe-Ereignis codiert wird und (B) den Codefolgewert
beibehält, wenn ein Qe-Ereignis codiert wird, wobei der Codierer
desweiteren umfaßt:
Mittel zum Beibehalten des ersten Codefolgewertes, wenn ein
Qe-Ereignis codiert wird und zum Inkrementieren des ersten
Codefolgewertes, wenn ein Qe-Ereignis codiert wird.
16. Codierer nach Anspruch 8, worin das Codefolgerregister
mindestens ein Abstandsbit besitzt und in welchem Bytes acht
Bits umfassen, wobei der Codierer desweiteren umfaßt:
Mittel zum Austreten aus der Code folge, wenn einem
hexadezimalen 'FF'-Byte ein Byte folgt, dessen Wert größer oder
gleich hexadezimal 'C0' ist.
17. Vorrichtung zum Anpassen der Wahrscheinlichkeit eines
Entscheidungsereignisses Qe auf der Basis aufeinanderfolgender
Entscheidungsereignis-Eingangssignale, eines der Verfahren
gemäß den Ansprüchen 1 bis 7 verwendend, wobei die
Vorrichtung (Tabelle 1) desweiteren umfaßt:
eine Vielzahl wählbarer Qe-Wert-Ausgangssignale;
jeweils verschiedene q-Indizes (I(dQ)), die jeweils einem
Qe-Wert-Ausgangssignal entsprechen;
Mittel, für die die q-Indizes (I(dQ)) die Eingangssignale
sind, und die in Abhängigkeit von den q-Indizes (I(dQ))
-Eingangssignalen ein Qe-Wert-Ausgangssignal erzeugen;
worin die Dichte der q-Indizes (I(dQ)) bezogen auf die
Verteilung der Qe-Wert-Ausgangssignale innerhalb eines
Zweierpotenz-Satzes von geschätzten Wahrscheinlichkeitswerten in
entsprechendem Verhältnis bei höheren Qe-Werten größer und
bei niedrigeren Qe-Werten kleiner ist.
18. Vorrichtung nach Anspruch 17, worin die Erzeugungsmittel
eine Gatterschaltung (Fig. 9) enthalten; und worin jeder
Q-Index (QIN) Eingangs leitungen zu der Gatterschaltung
enthält, die jeweils unterschiedliche Muster binärer Signale
führen; und worin jeder Qe-Wert-Ausgang Ausgangsleitungen
des Gatterschaltung enthält, die entsprechende Muster
binärer Signale führen, die von der Gatterschaltung in Reaktion
auf entsprechend eingegebene Q-Indizes (QIN) erzeugt
werden.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US90771486A | 1986-09-15 | 1986-09-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE3751372D1 DE3751372D1 (de) | 1995-08-03 |
DE3751372T2 true DE3751372T2 (de) | 1996-02-15 |
Family
ID=25424528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19873751372 Expired - Lifetime DE3751372T2 (de) | 1986-09-15 | 1987-08-18 | Verfahren der arithmetischen Kodierung zur Kodierung- und Dekodierung. |
Country Status (7)
Country | Link |
---|---|
EP (1) | EP0260461B1 (de) |
JP (1) | JPS6376525A (de) |
AU (1) | AU600972B2 (de) |
BR (1) | BR8704623A (de) |
CA (1) | CA1291821C (de) |
DE (1) | DE3751372T2 (de) |
ES (1) | ES2074977T3 (de) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2651209B2 (ja) * | 1988-08-30 | 1997-09-10 | キヤノン株式会社 | 画像の符号化方法及び装置 |
JP2651210B2 (ja) * | 1988-08-30 | 1997-09-10 | キヤノン株式会社 | 画像の符号化方法 |
JPH0834432B2 (ja) * | 1989-01-31 | 1996-03-29 | 三菱電機株式会社 | 符号化装置及び符号化方法 |
IL91158A (en) * | 1989-07-28 | 1993-01-31 | Ibm Israel | Method and system for arithmetic coding and decoding |
US5764804A (en) * | 1993-10-14 | 1998-06-09 | Seiko Epson Corporation | Data encoding and decoding system |
CA2156889C (en) * | 1994-09-30 | 1999-11-02 | Edward L. Schwartz | Method and apparatus for encoding and decoding data |
GB2306280B (en) * | 1994-09-30 | 1997-10-22 | Ricoh Kk | A coding system and entropy decoder |
JPH08116534A (ja) * | 1994-10-18 | 1996-05-07 | Seiko Epson Corp | 画像データ符号化装置およびその方法並びに画像データ復号化装置およびその方法 |
JP3269359B2 (ja) * | 1995-11-13 | 2002-03-25 | セイコーエプソン株式会社 | データ符号化装置およびその方法ならびにデータ復号化装置およびその方法 |
US6014133A (en) * | 1996-06-14 | 2000-01-11 | Seiko Epson Corporation | Data transmitter/receiver apparatus, data transmitter, data receiver, and data compression method |
US6219445B1 (en) | 1997-01-14 | 2001-04-17 | Seiko Epson Corporation | Multi-color image encoding and/or decoding apparatus containing color order table and the method thereof |
US6327383B2 (en) | 1997-01-14 | 2001-12-04 | Seiko Epson Corporation | Multi-color image encoding apparatus and method, multi-color image decoding apparatus and method |
JPH11161782A (ja) | 1997-11-27 | 1999-06-18 | Seiko Epson Corp | カラー画像の符号化方法およびその符号化装置ならびにカラー画像の復号化方法およびその復号化装置 |
JP6322180B2 (ja) | 2015-12-16 | 2018-05-09 | 本田技研工業株式会社 | テールゲート構造 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4467317A (en) * | 1981-03-30 | 1984-08-21 | International Business Machines Corporation | High-speed arithmetic compression coding using concurrent value updating |
-
1987
- 1987-08-07 CA CA000544052A patent/CA1291821C/en not_active Expired - Fee Related
- 1987-08-14 JP JP20200787A patent/JPS6376525A/ja active Granted
- 1987-08-18 ES ES87111964T patent/ES2074977T3/es not_active Expired - Lifetime
- 1987-08-18 EP EP19870111964 patent/EP0260461B1/de not_active Expired - Lifetime
- 1987-08-18 DE DE19873751372 patent/DE3751372T2/de not_active Expired - Lifetime
- 1987-09-04 BR BR8704623A patent/BR8704623A/pt not_active Application Discontinuation
- 1987-09-14 AU AU78366/87A patent/AU600972B2/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
EP0260461A2 (de) | 1988-03-23 |
EP0260461A3 (en) | 1990-10-31 |
AU600972B2 (en) | 1990-08-30 |
DE3751372D1 (de) | 1995-08-03 |
JPS6376525A (ja) | 1988-04-06 |
AU7836687A (en) | 1988-03-17 |
ES2074977T3 (es) | 1995-10-01 |
EP0260461B1 (de) | 1995-06-28 |
JPH0258813B2 (de) | 1990-12-10 |
CA1291821C (en) | 1991-11-05 |
BR8704623A (pt) | 1988-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3788763T2 (de) | Arithmetische Codierung zur Datenkomprimierung-Dekomprimierung mittels selektiver Anwendung von verschiedenen arithmetischen Kodierern und Dekodierern. | |
DE69622501T2 (de) | Bildverarbeitungsvorrichtung und -verfahren | |
DE3751372T2 (de) | Verfahren der arithmetischen Kodierung zur Kodierung- und Dekodierung. | |
DE69026292T2 (de) | Methode zur Bilddatenkodierung | |
DE69706439T2 (de) | Rechnersortiersystem zur datenkompression | |
DE69313540T2 (de) | Verbesserte Vorrichtung zur variablen Längendekodierung | |
DE69510662T2 (de) | Kompakte Quellencodierungstabellen für Codierungs-/Decodierungssystem | |
DE69425847T2 (de) | Rechner für die inverse diskrete Cosinus-Transformation | |
DE69725215T2 (de) | Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Schrifttypen | |
DE19531049C2 (de) | Verfahren zum Komprimieren von Daten und Codierungsvorrichtung | |
DE3855203T2 (de) | Modifizierte statistische kodierung von digitalen signalen | |
DE19742417B4 (de) | Vorrichtung und Verfahren zur Durchführung von M-fachem Maschinenendzustands-Entropiekodieren bzw. Entropiekodieren mit einer Maschine mit finitem Zustand | |
DE69328855T2 (de) | Datenkomprimierung/ -dekomprimierung mit Cache-Speichern | |
DE68926676T2 (de) | Verfahren und gerät zur statistischen kodierung von digitalen daten | |
DE3784266T2 (de) | Kompression von mehrstufigen signalen. | |
EP2068448B1 (de) | Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen | |
DE69631999T2 (de) | Bildverarbeitungsgerät und Verfahren | |
DE69934939T2 (de) | Kompression von Grenzen zwischen Bildern | |
DE69527883T2 (de) | Decodierung eines Huffman Codes mit MSB und LSB Tabellen | |
DE19534943A1 (de) | Vorrichtung zur Komprimierung unter Verwendung von eingebetteten Kleinwellen | |
DE19635251A1 (de) | Verfahren und Apparat zur Komprimierung beliebiger Daten | |
DE3109795A1 (de) | Bandeinengungsverfahren fuer getoente bilder | |
DE69421286T2 (de) | Verfahren zur durchführung von schnellen diskreten kosinustransformationen und schnellen inversen diskreten kosinustransformationen unter verwendung von nachschlagetabellen | |
DE68918590T2 (de) | Gerät zur dekodierung von mit variabler länge kodierten daten. | |
DE69125424T2 (de) | Vorrichtung zur variablen Längenkodierung und Vorrichtung zur variablen Längendekodierung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition |