DE68926676T2 - Verfahren und gerät zur statistischen kodierung von digitalen daten - Google Patents

Verfahren und gerät zur statistischen kodierung von digitalen daten

Info

Publication number
DE68926676T2
DE68926676T2 DE68926676T DE68926676T DE68926676T2 DE 68926676 T2 DE68926676 T2 DE 68926676T2 DE 68926676 T DE68926676 T DE 68926676T DE 68926676 T DE68926676 T DE 68926676T DE 68926676 T2 DE68926676 T2 DE 68926676T2
Authority
DE
Germany
Prior art keywords
values
value
digital samples
data
samples
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 - Fee Related
Application number
DE68926676T
Other languages
English (en)
Other versions
DE68926676D1 (de
Inventor
Brian Astle
Stuart Golin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of DE68926676D1 publication Critical patent/DE68926676D1/de
Publication of DE68926676T2 publication Critical patent/DE68926676T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Processing (AREA)

Description

  • Die vorliegende Erfindung betrifft eine Schaltung, die digitale Daten zur effektiven Übertragung oder Speicherung statistisch codiert.
  • Neuere Fortschritte im Feld der digitalen Datenverarbeitung haben eine Nachfrage nach Systemen entstehen lassen, die relativ große Mengen digitaler Daten übertragen und verarbeiten können. Es ist jedoch auch wünschenswert, daß diese Daten komprimiert sind, so daß sie effektiv z.B. über eine Standardtelephonleitung übertragen werden können, oder effektiv in einem relativ kleinen Speicher gespeichert werden können.
  • Ein Beispiel eines digitalen Datenverarbeitungssystems, bei dem es erwünscht ist, eine relativ große Datenmenge zu übertragen und zu verarbeiten, ist ein Videosignalverarbeitungssystem. Z.B. benötigt ein System, das ein aus 240 Zeilen bestehendes Bild erzeugt, wobei jede Zeile 256 8-Bit-Pixelwerte enthält, 61.440 Byte für jeden Bildrahmen. Unter der Annahme einer Wiedergaberate von 30 Rahmen pro Sekunde hat dieses System eine Datenrate von 1.843.200 Byte pro Sekunde.
  • Es ist allgemein bekannt, daß die Anzahl der Bytes pro Rahmen in einem Videosignalverarbeitungssystem durch Codierung der Daten reduziert werden kann. Ein System zur Codierung von Videodaten ist z.B. im U.S. Patent Nr. 4,125,861 beschrieben, bei dem die Videodaten zunächst unter Verwendung einer Differenz-Puls-Code-Modulation (DPCM) Technik komprimiert werden, was zu einer Laplaceverteilung mit einem Peak bei Null mit einem zweiseitigen, in etwa exponentiellen Abfall führt, und dann unter Verwendung eines Codes variabler Länge, wie z.B. eines Huffman-Codes, codiert werden, in dem die statistisch häufiger auftretenden Datenwerte den kürzeren Codeworten zugeordnet werden und weniger häufig auftretende Datenwerte den längeren Codewerten zugeordnet werden. So wie sie in dieser Abwendung verwendet wird, wird auf diese Codierungsart als statistische Codierung Bezug genommen.
  • Aus der JP-A-61-237520 und der entsprechenden US-A-4744085 ist bekannt, daß das Codieren eines Signals mit einem DPCM-Code zu komprimierten Datenwerten mit einer statistischen Laplaceverteilung führt, die einen Peak bei Null und eine in etwa negative Exponentialform auf jeder Seite des Peaks aufweist. Aus diesem Dokument ist weiterhin bekannt, daß Daten mit einer derartigen statistischen Verteilung sich dazu eignen, mit einem Variable-Länge-Codierverfahren, z.B. unter Verwendung eines Huffman-Codes, verwendet zu werden. Als ein Beispiel für diese Art von Signalen, die auf diese Weise komprimiert und codiert werden können, wird auf Audio- und Videosignale Bezug genommen.
  • Aus der FR-A-2,514,969, die den US Patenten 4,560,976 und 4,562,423 entspricht, ist bekannt, einen Strom von Quellzeichen in einen kürzeren Strom von Codeworten zu codieren. Verschiedene Quellzeichen können mit unterschiedlichen Häufigkeiten des Auftretens in einem Strom von Quellzeichen erscheinen. Die Codierung häufiger auftretender Quellzeichen als kürzere Codewörter kann die Länge des Stroms von Codewörtern verringern. Die relativen Häufigkeiten des Auftretens verschiedener Quellzeichen können sich mit der Zeit ändern. Insbesondere wird ein Strom von Quellzeichen, die mit variierenden relativen Häufigkeiten auftreten, in einen komprimierten Strom von Codewörter codiert, wobei jedes ein, zwei oder drei Subwörter aufweist, durch Einordnen der Quellzeichen nach ihrer aktuellen Häufigkeit des Auftretens, Codierung der Quellzeichen mit Rängen, die nicht größer sind als eine erste Zahl, als ein Codewörter mit einem Subwort, Quellzeichen mit Rängen, die größer sind als die erste Zahl aber nicht größer als eine zweite Zahl, als Codewörter mit zwei Subwörtern, und die verbleibenden Quellzeichen als Codewörter mit drei Subworten. Die erste Zahl wird geändert und die zweite Zahl wird neu berechnet, wenn es durch die sich ändernden Frequenzen der Quellzeichen erforderlich ist, um die Länge des Stroms von Codewörtern zu minimieren.
  • Ein Verfahren der statistischen Codierung von Daten liegt darin, einen optimalen Variable-Länge-Code, wie z.B. einen Huffman-Code zu verwenden, wie oben gezeigt. Um diesen Code zu verwenden, werden die zu übertragenden Daten von den am häufigsten auftretenden zu den am wenigsten häufig auftretenden geordnet und ein Huffman-Code wird erzeugt, beispielsweise unter Verwendung des Algorithmus der auf den Seiten 77-85 eines Buches mit dem Titel Information Theory and Coding von Abramson, McGraw Hill, 1963, beschrieben ist. Bei Verwendung dieses Verfahrens wird eine Tabelle, die den Zusammenhang zwischen den Datenwerten und den Codewerten vorgibt, zusammen mit den codierten Daten übertragen um dem System, das die Daten decodiert, zu erlauben, die Codeworte in ihre entsprechenden Datenwerte umzuwandeln. Der zusätzliche Überhang dadurch, daß die Umwandlungstabelle mit den codierten Daten übertragen oder gespeichert werden muß, macht diese Codiertechnik unpraktisch, wenn nur eine relativ kleine Datenmenge übertragen oder gespeichert werden soll.
  • Auf ein anderes Verfahren zur statistischen Codierung von Daten ist bereits in der oben genannten US-A-4125861 Bezug genommen worden, wonach die Daten gemäß einem zuvor bestimmten Algoritumus verarbeitet werden, um Daten mit einer statistischen Werteverteilung zu erhalten, die sich allgemein einer bekannten Verteilung annähert. Die Daten werden dann unter Verwendung eines Codes codiert, der für die bekannte Verteilung angepaßt wurde, übertragen, und dann unter Verwendung einer festen Tabelle decodiert, die die Inverse der Tabelle ist, die zur Codierung der Daten verwendet wurde.
  • Die mit diesem System durchgeführte DPCM Verarbeitung erzeugt Daten mit einer Laplace'schen Werteverteilung, die einen Peak bei Null hat und die in ihrer Form in etwa exponential auf jeder Seite des Peaks verläuft, wie oben erläutert. Diese Daten werden dann unter Verwendung einer voreingestellten Tabelle statistisch codiert, die in einem Nur-Lese-Speicher (ROM) gespeichert ist. Die Daten werden dann an einen Empfänger übertragen, der die Daten unter Verwendung der inversen Tabelle, die ebenfalls im ROM gespeichert ist, decodieren kann. Ein derartiges System hat Vorteile darin, daß es die Eingangsdaten signifikant komprimiert und daß es nicht erfordert, daß eine Umsetzungstabelle mit den komprimierten Daten übertragen wird.
  • Es ist die Aufgabe der vorliegenden Erfindung ein Verfahren zur Codierung und Decodierung von Daten und ein System zur Verfügung zu stellen, das zu einer noch effektiveren Codierung von Daten führt, indem es das Komprimierungsniveau unter Verwendung eines angepaßteren statistischen Codierschemas verbessert.
  • Diese Aufgabe wird im wesentlichen durch die Merkmale der unabhängigen Ansprüche 1 und 3 gelöst. Besondere Ausführungsformen der Erfindung werden aus den Unteransprüchen ersichtlich.
  • Die vorliegende Erfindung ist in einem System verwirklicht, das einen angepaßten Code zur statistischen Codierung digitaler Daten entwickelt. Das System enthält einen Prozessor, der die Daten transformiert, so daß die transformierten Datenwerte sich näherungsweise an eine statistische Verteilung anpassen, die ein allgemein monotones Abfallen aufweist. Aus diesen transformierten Daten erzeugt der Prozessor eine Vielzahl von Parametern, die einen statistischen Code beschreiben. Jeder der Parameter beschreibt einen Satz aufeinanderfolgender Codewerte, wooei jeder Codewert einem jeweils unterschiedlichen Datenwert entspricht.
  • Gemäß der Erfindung werden die transformierten Daten unter Verwendung eines Codes codiert, der aus den Parametern entwikkelt wird, und die Parameter werden mit den codierten Daten zur Übertragung an einen Decodierer verkettet.
  • Kurzbeschreibung der Zeichnungen
  • Figur 1 ist ein Blockdiagramm eines Videosignalverarbeitungssystems, das die vorliegende Erfindung enthält.
  • Figur 2, 3A, 3B und 3C sind Wertelisten und Diagramme, die zur Erläuterung des Betriebs des in Figur 1 gezeigten Videosignalkomprimierers 20 nützlich sind.
  • Figur 4A und 4B sind ein Computerprogrammlisting in der Programmiersprache ALGOL 60, das zur Erläuterung des Betriebs des in Figur 1 gezeigten Prozessors 30 zur Verarbeitung komprimierter Videosignale nützlich ist.
  • Figuren 5A, 5B, 5C und 5D sind Wertelisten und Diagramme, die zur Erläuterung des Betriebs des in Figur 1 gezeigten Prozessors 30 zur Verarbeitung komprimierter Signale nützlich sind.
  • Figuren 6A und 6B sind ein Computerprogrammlisting in der Programmiersprache ALGOL 60, das zur Erläuterung des Betriebs des in Figur 1 gezeigten statistischen Codierers 40 nützlich ist.
  • Figur 7 ist ein Blockdiagramm, das eine Schaltung zeigt, die zur Verwendung als der in Figur 1 gezeigte statistische Decodierer 50 geeignet ist.
  • Figur 8 ist Zeitablaufdiagramm, das zur Erläuterung des Betriebs der in Figur 7 gezeigten statistischen Decodierschaltung nützlich ist.
  • Detailierte Beschreibung
  • Die nachfolgende Beschreibung steht in Zusammenhang mit einem digitalen Videosignalverarbeitungssystem. Es ist jedoch beabsichtigt, daß die hier beschriebenen allgemeinen Techniken auf andere Arten von Daten als Videosignale angewandt werden können.
  • In den Zeichnungen stellen breite Pfeile Busse zum Transport paralleler digitaler Mehrfach-Bit-Signale dar, und Linienpfeile stellen Verbindungen zum Transport analoger Signale oder digitaler Ein-Bit-Signale dar. In Abhängigkeit von der Verarbeitungsgeschwindigkeit der Vorrichtungen könnnen in bestimmten Signalwegen Kompensationsverzögerungen erforderlich sein. Ein Fachmann im Entwurf digitaler Signalverarbeitungsschaltungen wird wissen, wo solche Verzögerungen in einem bestimmten System erforderlich sind.
  • Figur 1 ist ein Blockdiagramm eines Videosignalverarbeitungssystems, das eine Ausführungsform der vorliegenden Erfindung enthält. In Figur 1 liefert eine Videosignalquelle 10, die beispielsweise eine Videokamera ist, ein digitalisiertes Videosignal an einen Videosignalkomprimierer 20. Der Komprimierer 20 kann die ihm zugeführten Videodaten unter Verwendung irgendeiner Technik aus einer Anzahl von Techniken zur Komprimierung von Videosignalen verarbeiten. Zwei Techniken sind nachfolgend beschrieben; ein Differenz-Puls-Code-Modulations- (DPCM) Algorithmus, und ein Binärbaum-Aufteil-und-Füll- (binary tree split and fill) Algorithmus. Die von dem Komprimierer 20 gelieferten komprimierten Videosignale werden einem Prozessor 30 zugeführt, der die komprimierten Daten in eine Form transformiert, die speziell zur Codierung mit einem statistischen Codierer 40 geeignet ist.
  • Der statistische Codierer 40 verarbeitet die transformierten Daten, um einen wirksamen Code für die Daten zu entwickeln und codiert sie dann. Die codierten transformierten Daten werden über die Übertragungsleitung 45 an einen statistischen Decodierer 50 übertragen. Die Übertragungsleitung 45 kann beispielsweise eine bitserielle Verbindung zwischen dem Codierer 40 und dem Decodierer 50 sein.
  • Die durch den statistischen Codierer 40 an den statistischen Decodierer 50 übertragenen Daten beinhalten einen Satz von Parametern, die den besonderen Code definieren, der zur Codierung der Daten verwendet wurde. Diese Parameter werden durch den nachfolgend beschriebenden Decodierer 50 verwendet, um die Daten zu decodieren. Die durch den statistischen Decodierer 50 entwickelten decodierten Daten werden einem Videosignalprozessor 60 zugeführt, wo sie in Signale umgewandelt werden, die, wenn sie dem Wiedergabegerät 70 zugeführt werden, ein Bild wiederherstellen, das durch die ursprünglich von der Quelle 10 gelieferten Signale dargestellt wird.
  • Der oben vorgestellte Überblick liefert einen Zusammenhang einer detaillierteren Beschreibung des in Figur 1 gezeigten Systems. In Figur 1 können der Videosignalkomprimierer 20, der Prozessor 30 für komprimierte Signale und der statistische Codierer 40 als separat programmierte Mikroprozessoren verwirklicht sein, die einen gemeinsamen Datenspeicher 35 teilen, oder als ein einzelner Mikroprozessor, der den Speicher 35 verwendet, um Daten zu halten und die Programme zu halten, die den Mikroprozessor in jedem der Prozessoren 20, 30 und 40 nacheinander ändern, um ein codiertes Videosignal zu erzeugen.
  • Figur 2 ist ein Beispiel der DPCM-Codierung einer Serie von Eingangspixelwerten durch den in Figur 1 gezeigten Komprimierer 20. Die in dieser Ausführungsform der Erfindung verwendete DPCM-Codiertechnik ist die gleiche, wie die in dem oben genannten Patent Nr. 4,125,861 verwendete Basistechnik. Kurz gesagt ist jeder Codewert die Differenz zwischen den gelieferten Pixelwerten und der sich angehäuften Summe aller vorhergehenden Codewerte. In Figur 2 erzeugen 16 Pixelwerte von der Quelle 10 ein beispielhaftes vier-mal-vier Bild 210. Diese Pixelwerte werden unter Verwendung des oben beschriebenen Verfahrens codiert, um die in Figur 2 gezeigten komprimierten DPCM Daten zu erzeugen.
  • Damit das Bild als eine Folge von 8-Bit-Binärwerten repräsentiert werden kann, ist der Maximalwert für einen DPCM-Abtastwert im vorliegenden Beispiel +127 und der Minimalwert ist -128. Die Wirkung dieser Begrenzung ist in den ersten beiden Abtastwerten der DPCM komprimierten Daten gezeigt. Der erste Pixelwert ist auf 127 begrenzt und der zweite Pixelwert ist eine Erhöhung, die den Pixelwert 141 erzeugt, wenn sie mit 127 addiert wird. Obwohl die in dieser Ausführungsform der Erfindung verwendeten Algorithmen 8-Bit Pixelwerte annehmen, ist beabsichtigt, daß eine größere oder kleinere Anzahl von Bits verwendet werden kann, um einen Pixelwert darzustellen.
  • Durch das Analysieren der aus vielen Videobildern produzierten DPCM codierten Daten haben die Erfinder bestimmt, daß DPCM codierte Videodaten sich allgemein an eine Laplace'sche statistische Verteilung angleichen. Diese Art der Verteilung hat einen Peak bei Null und eine statistische Verteilung von Werten größer oder kleiner als Null, von denen sich jeder einer negativen Exponentialfunktion der Größe des Wertes angleicht.
  • Figuren 3A, 3B, und 3C liefern einen Überblick über das Codierverfahren das Binär-Split-and-Fill genannt wird. Der nachfolgend allgemein beschriebene Algorithmus wird durch den Videosignalkomprimierer 20 durchgeführt. Als ein erster Schritt werden die Pixeldaten, die einen einzelnen Videorahmen beschreiben, durch den Prozessor 20 in dem Speicher 35 abgespeichert. Diese Daten werden z.B. als eine rechteckige Matrix mit vier Reihen und vier Spalten organisiert. Diese Bildmatrix wird durch das Rechteck 310 von Figur 3A repräsentiert.
  • In diesem vereinfachten Beispiel ist das Videobild 310 das gleiche wie das oben beschriebene Bild 210. Dieses Bild besteht aus vier Bereichen (312, 314, 316, und 318) für die angenommen wird, daß die Pixel einheitliche Graustufen haben (z.B. 141, 112, 90 bzw. 98, aus einem möglichen Bereich von 256 Graustufen). Die Pixelwertverteilung dieses Bildes ist untypisch. Es ist beabsichtigt, eine einfache Binärbaum-Zerlegung eines Bildes zu zeigen, wobei jedem zerlegten Bereich ein Füllwert zugeordnet ist, und zu zeigen, wie diese Zerlegung effektiv codiert werden kann. In dem allgemeineren Fall kann die "Füllung" (d.h. der Code, der die Bereichspixelwerte darstellt) ein polynomialer Ausdruck sein, wie z.B. Ax + By + C. In diesem Ausdruck stellt der Koeffizient "A" die Neigung oder den Helligkeitsgradienten in der horizontalen (x) Richtung dar, "B" stellt den Gradienten in der vertikalen (Y) Richtung dar und "C" stellt eine Konstante oder gleichförmige Helligkeit über den Bereich dar. In dem Beispiel von Figur 3A sind die Koeffizienten A und B des Füll-Polynoms AX + BY + C beide Null.
  • Die Binärbaumzerlegung wird durchgeführt, durch Aufspalten eines Bereichs in Hälften, und dann möglicherweise Aufspalten jedes der resultierenden Unterbereiche in Hälften bis Füllwerte gefunden werden können, die die resultierenden Unterbereiche adäquat darstellen.
  • Im vorliegenden Beispiel teilt die erste Aufteilung, die mit SPLIT 1 in Figur 3A bezeichnet ist, das Bild 310 horizontal in zwei gleichen Hälften auf. Die obere Hälfte 312 kann durch den Einzeiwert 141 adäquat codiert werden, während die untere Hälfte eine weitere Zerlegung benötigt. Eine vertikale Aufteilung, SPLIT 2 teilt die untere Hälfte des Bildes in zwei gleiche Bereiche. Die rechte Hälfte 314 kann durch den Wert 112 adäquat codiert werden und wird nicht weiter aufgeteilt. In der linken Hälfte ist jedoch eine weitere horizontale Aufteilung SPLIT 3 erwünscht, um zwei Bereiche 316 und 318 zu erhalten, die durch die Werte 90 bzw. 98 adäquat repräsentiert werden können.
  • Figuren 3B und 3C zeigen die digitale Codierung der binären Split-and-Fill-Darstellung des in Figur 3A gezeigten Bildes. Die in Figur 3B gezeigte baumartige Struktur stellt aufeinanderfolgende Teilungen des Bildes 310 dar. Auf diese Struktur wird als ein "Binärbaum" Bezug genommen, da sich jeder Knoten, der kein Endknoten ist, aufteilt um zwei Äste zu bilden. Der obere Knoten des Baumes repräsentiert das ganze Bild 310. Jedes Mal wenn ein Bereich geteilt wird, werden zwei neue Knoten gebildet. Die Endknoten des Baumes (d.h. diejenigen Knoten, die keine Äste haben) werden mit den Bereichsfüllwerten codiert.
  • Figur 3C stellt eine Anordnung von Datenwerten dar, die die in Figur 3B gezeigte Baumstruktur beschreiben. Die Anordnung besteht aus 8 Reihen entsprechend den 7 Knoten des Binärbaumes und einem Knoten, der einen Wert vom Stoptyp enthält. Jede Reihe enthält 4 Parameter (Spalten), die den Knoten beschreiben. Der erste Parameter TYPE beschreibt den Knoten als einen Horizontalteilungs-(1), Vertikalteilungs-(-1), Füll-(0) oder Stop-(2) Knoten. Der Stopknoten hat keine Entsprechung zum Bild. Er wird als ein Indikator an die Programme geliefert, die die Anordnung verwenden, daß der letzte Knoten verarbeitet worden ist. Der zweite Parameter VALUE hält den Wert des Knotens für alle Füllknoten, und eine Null für die Teilungsknoten. Die letzten beiden Parameten, LEFT und RIGHT, sind Zeiger zu den Einträgen in der Anordnung, die die linken bzw. rechten Knoten beschreiben, die mit einem horizontalen oder vertikalen Aufteilvorgang verbunden sind. Die Parameter LEFT und RIGHT haben für Füllknoten den Wert Null. Die Werte der Parameter LEFT und RIGHT entsprechen der Zahlenspalte ganz links in Figur 3C.
  • Da der Binärbaum zur Beschreibung des Bildes verwendet wird, werden die Parameter LEFT und RIGHT für keinen der Knoten benötigt. Sie sind im vorliegenden Beispiel enthalten, um die Erläuterung der Vorgänge zu vereinfachen, die durch den Prozessor 30 für komprimierte Signale durchgeführt werden. Der Binärbaum kann unter Verwendung eines Regelsatzes aufgebaut und durchquert werden, der unzweifelhaft die Position jedes Knotens relativ zu allen anderen Knoten definiert, ohne die Parameter LEFT und RIGHT zu verwenden. Im vorliegenden Beispiel ist die Regel, alle Daten, die dem oberen oder linken Bereich entsprechen, der durch eine horizontale bzw. vertikale Teilung erzeugt wird, unmittelbar nach den Daten zu platzieren, die die Aufteilung beschreiben, und dann die Daten einzugeben, die den durch die Aufteilung erzeugten linken oder rechten Bereich beschreiben. Dies ist ein inhärent rekursives Verfahren, das mit dem oberen oder Ursprungsknoten des Baumes beginnt und alle nachfolgenden Knoten in fester Reihenfolge bearbeitet, bis alle Endknoten erreicht sind. Da sie zur Beschreibung der Baumstuktur nicht erforderlich sind, werden die Parameter LEFT und RIGHT nicht durch den Codierer 40 codiert.
  • Wie oben ausgeführt wandelt der Prozessor 30 entweder DPCM- Daten oder binäre Split-and-Fill-Daten in eine Form um, die zur Codierung mit dem statistischen Codierer 40 geeignet ist. Wie weiter unten unter Bezugnahme auf Figur 6 beschrieben ist, verwendet der statistische Codierer einen Codesatz, der eine effektive Codierung ausführt, wenn die statistische Verteilung der zu codierenden Werte durch eine stückweise negative Exponentialverteilung angenähert werden kann. Die DPCM codierten Videodaten zeigen allgemein eine statistische Verteilung, die sich einer Laplaceverteilung annähert, die eine zweiseitig negative Exponentialverteilung ist. Um diese Daten in eine Form umzuwandeln, die zur Codierung durch den statistischen Codierer 40 geeignet ist, teilt der Prozessor 30 für komprimierte Signale die negativen Zahlen Zwischenplätzen zwischen den positiven Zahlen zu. Diese Transformation wird durch Verdoppeln der Werte aller positiven Zahlen erreicht, und durch Ändern der Polarität für negative Zahlen, Verdoppeln der geänderten Werte und Subtrahieren von 1 vom Ergebnis. Dieser Algorithmus wird in der Prozedur SIGN_XFORM von Figur 4B beschrieben. Figur 5A ist ein Beispiel von DPCM-Daten, die der Vorzeichenumwandlungsoperation unterzogen wurden. Diese Daten sind eine umgewandelte Version der unter Bezugnahme auf Figur 2 beschriebenen komprimierten Daten.
  • Die Umwandlung der binären Spilt-and-Fill-Daten in eine Form, die zur Verwendung durch den statistischen Codierer 40 geeignet ist, ist ein komplizierterer Prozess. Figuren 4A und 4B sind ein Computerprogramm in der Computersprache ALGOL 60, das binäre Split-and-Fill-Daten in der z.B. in Figur 3C gezeigten Form in eine Folge von Werten umwandelt, wie z.B. diejenigen, die in Figur 5D gezeigt sind.
  • Das in Figuren 4A und 4B gezeigte Computerprogramm wird unter Bezugnahme auf die Zeilennummern am rechten Rand der Figuren beschrieben. Jedes der Array-Elemente und Integer-Variablen, die in den in Figuren 4A, 4B, 6A und 6B gezeigten Programmen verwendet werden, soll zumindest 9 Datenbits enthalten und kann so Datenwerte zwischen +255 und -256 darstellen. Das in Zeile 40 deklarierte Array TREE enthält die binäre Spilt and Fill Beschreibung eines Bildes. Die Anzahl der Elemente in dem Array TREE und in den anderen Arrays, die in den in Figuren 4A, 4B, 6A und 6B gezeigten Computerprogrammen beschrieben sind, ist beispielhaft. Größere Zahlen von Werten können erforderlich sein, um allgemeine Videodaten zu verarbeiten.
  • Ein Beispiel des Arrays TREE ist in Figur 3C gezeigt. Die Daten in diesem Array können 1024 Knoten beschreiben, wobei jeder vier Parameter enthält. Mnemonische Namen für die Werte, die zum Zugriff auf die verschiedenen Parameter verwendet werden, sind in Zeilen 50-80 definiert. Der Parameter TYPE zeigt den Typ des Knotens, 1, -1, 0 oder 2 für horizontale Aufteilung, vertikale Aufteilung, Füllung bzw. Stop. Der VALUE-Parameter ist der mit dem Knoten verbundene Wert. Die Parameter LEFT und RIGHT sind Indices in das Array TREE, die auf die beiden Knoten zeigen, die entweder durch einen horizontalen oder einen vertikalen Aufteilvorgang erzeugt werden. Diese Indices entsprechen der am weitesten links gelegenen Zahlenspalte in Figur 3C.
  • Das in Zeile 90 deklarierte Array OUT ist die kompakte, transformierte Version der durch die Programme entwickelten binären Spilt-and-Fill-Daten.
  • Um die Beschreibung des Transformationsalgorithmus zu vereinfachen sind der Videosignalkomprimierer 20 und der statistische Codierer 40 als eine Inputdatei bzw. eine Outputdatei modelliert. Diese Dateien sind in Zeilen 110 und 120 deklariert.
  • Die in den Zeilen 140 bis 300 deklarierte Prozedur BRANCH_AVG schreitet durch den Baum von dem Ursprungsknoten abwärts durch jeden Aufteilknoten und jeden Füllknoten unter Verwendung eines rekursiven Algorithmus. Für jeden Aufteilknoten in dem Baum berechnet die Prozedur den Mittelwert der VALUE-Parameter der rechten und linken Abzweigknoten und ordnet den Mittelwert dem VALUE-Parameter des Aufteilknotens zu.
  • Die in Zeilen 320 bis 540 deklarierte Prozedur R_MINUS_L schreitet durch den Baum unter rekursiver Verwendung des selben Algorithmus, wie er durch die Prozedur BRANCH_AVG verwendet wird und sie berechnet für jeden Aufteilknoten die Differenz zwischen den VALUE-Parametern der rechten und linken Abzeigknoten, und speichert das Ergebnis als den VALUE- Parameter des Aufteilknotens ab.
  • Die in den Zeilen 550 bis 620 deklarierte Prozedur SIGN_XFORM führt die oben beschriebene Vorzeichenumwandlungsoperation durch. Sie verdoppelt den Wert aller ihr zugeführten positiven Werte und verändert das Vorzeichen negativer Werte, verdoppelt die vorzeichengeänderten Werte und subtrahiert Eins vom Ergebnis.
  • Das Programm, das die kompakt transformierte Version des Binärbaumes erzeugt, hat seinen ersten ausführbaren Befehl bei Zeile 660. Dieser Befehl holt ein Array TREF von dem Videosignalkomprimierprozessor 20. Wie oben ausgeführt, ist dieses Array in derselben Form wie das in Figur 3C gezeigte Array.
  • Der nächste Schritt in dem Programm bei Zeile 700 ruft die Prozedur BRANCH_AVG für den Ursprungsknoten auf (Index Null des Arrays TREE). Dieser Aufruf zieht sich durch den gesamten Binärbaum und, indem er von den Endknoten bis hinauf zu dem Ursprungsknoten arbeitet, platziert er den Mittelwert der VALUE-Parameter für die linken und rechten Abzweigknoten jedes Aufteilknotens in die VALUE-Parameter des Aufteilknotens. Diese Transformation ist in Figur 5B gezeigt, wobei die Werte in den eckigen Klammern ("< " und "> ") die Abzweigknotenmittelwerte sind, die in den VALUE-Parameter jedes Aufteuknotens plaziert werden.
  • Nach Berechnung der Abzweigmittelwerte subtrahiert das Programm bei Zeilennummer 710 den Abzweigmittelwert für den Ursprungsknoten von 128 und speichert das Ergebnis in einer Variablen ZERO_AVG. Der nächste Schritt im Programm bei Zeile 750 ruft die Prozedur R_MINUS_L auf, um die Differenz zwischen den VALUE-Parametern für die rechten und linken Abzweigknoten jedes Aufteilknotens zu berechnen. Diese Differenzwerte werden im dem VALUE-Parameter von jedem der Aufteilknoten gespeichert.
  • Der Schlußteil des Programms von Zeile 790 bis 930 wandelt die Daten im Array TREE in einen seriellen Wertestrom um, wie der in Figur 5D gezeigte, der die binären Spilt-and-Fill-Daten beschreibt. In diesem Teil des Programms wird der Füllwert für den Ursprungsknoten (d.h. ZERO_VALUE) in das Array OUT beim Index Null plaziert. Als nächstes wird jeder der Knoten in dem Array TREE nacheinander verarbeitet. Der TYPE-Parameter für jeden Knoten wird an das Array OUT angehängt und, wenn der Knoten kein Endknoten ist, wird auch der FILL-Wert angehängt; es sei angenommen, daß Endknoten Füllwerte von Null haben. Die Parameter LEFT und RIGHT sind in dem seriellen Wertestrom nicht enthalten. Jeder der an das Array OUT angehängten Werte wird der Vorzeichentransformation unterworfen.
  • Der Befehl bei Zeile 925 markiert das Ende gültiger Daten in dem Array OUT durch Einfügen eines negativen Stopwerts. Wenn alle Knoten an das Array OUT angehängt worden sind, verursacht der Befehl 930, daß die Daten in dem Array OUT an den statistischen Codierer 40 übergeben werden.
  • Die Erfinder haben bestimmt, daß die oben beschriebenen Operationen Daten erzeugen, die eine binäre Aufteil und Füllzerlegung eines Videobildes beschreiben, und die sich im allgemeinen statistisch an eine stückweise negative Exponentialverteilung anpassen.
  • Der Datentransformationsalgorithmus, der zur Erzeugung der transformierten DPCM und binären Spilt-and-Fill-Daten verwendet wird, kann, nachdem die Daten decodiert sind, leicht umgekehrt werden, um die Orginaldaten zu erhalten.
  • Das in Figuren 6A und 6B gezeigte Programmlisting zeigt den Betrieb des statistischen Codierers 40, wie er einen Code variabler Länge für einen Satz von Datenwerten entwickelt, und wie er die Datenwerte zur Übertragung codiert. Das in Zeile 1010 deklarierte Array IN entspricht dem Array OUT, das in dem in Figuren 4A und 4B gezeigten Programm verwendet wird. Dieses Array enthält bis zu 2048 Datenwerten, die durch den Prozessor 30 für komprimierte Signale geliefert werden. Das ebenfalls in Zeile 1010 deklarierte Array STAT enthält Werte, die ein Histogramm der verschiedenen Datenwerte im Array IN darstellen. Die in Zeile 1015 deklarierte Datei COMP_PROCESSOR ist der Kanal zum Prozessor 30 für komprimierte Signale, und die in Zeile 1020 deklarierte Datei XMIT_CHANNEL ist der Übertragungskanal 45 zum statistischen Decodierer 50.
  • Die in Zeile 1025 deklarierte String-Variable DATA_OUT ist eine binäre Zeichenfolge, die die codierten Daten hält, die über den Übertragungskanal 45 zum statistischen Decodierer 50 gesendet werden sollen. Das in Zeile 1030 deklarierte String- Array XLATE_TABLE ist eine Übertragungstabelle, die die Variable-Länge-Codewörter hält, die den Datenwörtern fester Länge im Array IN entsprechen. Die anderen deklarierten Variablen sind temporäre Speicher, die in dem Programm verwendet werden, wie weiter unten beschrieben.
  • Der erste ausführbare Befehl in dem Programm für den statistischen Codierer 40 ist bei Zeile 1070. Dieser Befehl empfängt die durch den Prozessor 30 für komprimierte Signale gelieferten Daten; er entspricht dem Befehl bei Zeile 930 von Figur 4B. Die von dem Prozessor 30 für komprimierte Signale empfangenen Daten werden im Array IN gespeichert.
  • Die Befehle bei den Zeilen 1110 bis 1170 entwickeln Werte, die ein Histogramm der verschiedenen Datenwerte in dem Array IN darstellen. Der durch diese Befehle dargestellte Algorithmus nimmt an, daß die 256 Werte in dem Array STAT - einer für jeden möglichen 8-Bit Pixelwert - anfänglich Null sind. In der WHILE-Schleife, die die Befehle 1120 bis 1160 umspannt, wird jeder gültige Eintrag in das Array IN als ein Index in das Array STAT verwendet, und der Wert bei diesem Index wird erhöht. Wenn die Zeile 1170 ausgeführt wird, enthalten die individuellen Einträge des Arrays STAT die Anzahl wie oft jeder mögliche Datenwert zwischen Null und 255 in dem Array IN auftritt. Die Gesamtzahl der gültigen Werte in dem Array IN wird in einer Variablen TOTAL_COUNT gespeichert.
  • Parameter, die den bestimmten Variable-Länge-Code beschreiben, der zur Codierung der Daten im Array IN verwendet wird, werden aus den Werten in dem Array STAT entwickelt, unter Verwendung des Algorithmus, wie er in den Befehlen bei den Zeilen 1210 bis 1380 des Programms in Figur 6A aufgeführt ist.
  • Um den durch diese Befehle ausgeführte Algorithmus zu verstehen ist es hilfreich, zunächst den Typus des Variable-Länge- Codes zu beschreiben, der durch dieses System verwendet wird. Dieser Codetyp kann als eine Anzahl von Pegeln aufweisend beschrieben werden. Jeder Pegel wird definiert durch einen Vorsatz, eine Folge von binären Werten, die beim Start jedes Codeworts in dem Pegel auftritt, und durch eine Population, wobei eine Anzahl von Codewerten einen gemeinsamen Vorsatz hat. Für den Typ des Variable-Länge-Codes, der in dieser Ausführungsform der Erfindung verwendet wird, enthält jeder der Vorsätze außer dem ersten eine Folge aufeinanderfolgender Binär-1-Werte und jeder Vorsatz außer dem letzten endet mit einem Binär-0-Wert. Somit sind die Vorsätze für einen Variable-Länge-Code mit 5 Pegeln, beispielsweise durch die Tabelle 1 definiert. TABELLE 1
  • Die Population jedes Pegeis der in dieser Ausführungsform der Erfindung verwendeten statistischen Codes ist immer eine ganzzahlige Potenz von zwei. Die Populationswerte für die unterschiedlichen Pegel sind von der statistischen Verteilung der Daten abhängig. Wie in der vorliegenden Ausführungsform verwirklicht, kann ein Pegel Codewerte enthalten, die zwischen 1 und 128 verschiedene Codewerte darstellen. Die einzelnen Mitglieder einer Population eines gegebenen Pegels sind durch eine vorzeichenlose N-bit Binärzahl dargestellt, wobei die Population bei diesem Pegel 2N ist. Ein einzelner Codewert wird erzeugt, indem sein Index in der Population eines Pegels mit dem Vorsatz dieses Pegels verkettet wird. Z.B. ist der Code, der durch den Pegel und die Populationsparameter von Tabelle 2 beschrieben wird, in Tabelle 3 gezeigt. TABELLE 2 TABELLE 3
  • Die durch den statistischen Codierer 40 entwickelte Codeart ist, allgemein gesagt wirksamer als der Code, der in dem oben genannten Patent 4,125,861 verwendet wird, das für jeden möglichen Datenwert eine Codesequenz unterschiedlicher Länge verwendet, jedoch weniger wirksam als ein optimaler Code, wie beispielsweise ein Huffman-Code. Wenn die dem statistischen Codierer 40 zugeführten Daten eine negativ-exponentielle Verteilung aufweisen, ist die Wirksamkeit des erzeugten Codes im wesentlichen die gleiche wie bei einem optimalem Code. Dieser erzeugte Code hat bei jedem Pegel die gleiche Population und er hat eine ausreichende Anzahl von Pegeln um alle möglichen Datenwerte darzustellen.
  • Während festgestellt wurde, daß sich die durch den oben genannten Algorithmus erzeugten Daten allgemein an eine negative Exponentialverteilung anpassen, ist das Beste, daß für die Daten gesagt werden kann, die ein individuelles Bild beschreiben, daß sie einer in etwa monoton abfallenden statistischen Verteilung folgen. Der durch den statistischen Codierer 40 erzeugte Code codiert Daten des Typs mit relativ guter Wirksamkeit, da er im wesentlichen die tatsächliche Datenverteilung durch eine stückweise exponentielle Verteilung modelliert. Die Population verschiedener Pegel kann unterschiedlich sein, obwohl sie in der vorliegenden Ausführungsform der Erfindung eine ganzzahlige Potenz von zwei ist. Für einen Huffman-Code muß die Population bei den verschiedenen Pegeln nicht eine ganzzahlige Potenz von zwei sein.
  • Im Hinblick auf die Beschreibung des oben genannten Codes, wird nachfolgend der Algorithmus beschrieben, der Parameter auswählt um einen bestimmten Code zu erzeugen. Bei Zeile 1210 werden eine Variable I, die als ein Index in das Array STAT verwendet wird, und eine Variable LEVEL, die als ein Index in das Array TABLE verwendet wird, auf null gesetzt. Der IF- Befehl bei den Zeilen 1243 - 1246 ordnet N den Maximalwert von sieben zu, wenn die Wahrscheinlichkeit eines gegebenen Wertes null ist. Dieser Befehl verhindert die Auswertung des Ausdrucks LOG2(0), die ein ungültiges Ergebnis erzeugen würde.
  • Der Befehl bei Zeile 1240 berechnet die Wahrscheinlichkeit des I-ten Eintrags des Arrays STAT und speichert diesen Wahrscheinlichkeitswert in die Real-Variable PROB. Die Wahrscheinlichkeit des Wertes I ist gleich der Anzahl von Datenwerten mit dem Wert I (d.h., STAT [I]) geteilt durch die Gesamtzahl der Datenwerte (d.h., TOTAL-COUNT). Bei Zeile 1250 wird der ganzzahlige Teil des Ausdrucks -LOG2(PROB) um eins veringert und das Ergebnis wird der Variablen N zugeordnet. Die Befehle bei den Zeilen 1255 - 1263 ordnen der Variablen N einen Wert von null oder sieben zu, wenn der durch den Befehl 1250 erzeugte Wert negativ bzw. größer als sieben ist.
  • Der Wert, der der Variablen N zugeordnet ist, zeigt die statistische Bedeutung des Wertes I im Array IN an. Wenn der Wert I mit einer relativ großen Anzahl von Malen in dem Array IN auftritt, ist der Wert von N relativ klein, und wenn der Wert I nur mit einer relativ kleinen Anzahl von Malen auftritt, ist der Wert von I relativ groß. Wenn z.B. I gleich null ist und 25% der Werte im Array IN Nullen sind, ist der Wert von N für I gleich null eins. Wenn jedoch der Wert null nur 1% der Werte im Array IN darstellt, ist der Wert von N für I gleich null fünf.
  • In der vorliegenden Ausführungsform der Erfindung wird der Wert N verwendet, um die Population eines Pegeis zu bestimmen. Der wie oben berechnete Wert N ist eine anfängliche Abschätzung des Logarithmus der Basis 2 der Anzahl von Einträgen beim laufenden Pegel; d.h., die erste Abschätzung der Population des aktuellen Pegeis ist 2N. Da der Wert der Variablen N eine ganze Zahl ist, kann es wünschenswert sein, N um eins zu erhöhen, d. h., den Ausdruck bei Zeile 1250 aufzurunden. Um zu bestimmen, ob N erhöht werden sollte, werden die Wahrscheinlichkeiten aller Einträge beim aktuellen Pegel, der auf einer Population von 2N basiert, summiert und mit einem konstanten Wert von 0,3820 verglichen. Wenn die Summe dieser Wahrscheinlichkeit geringer ist als der konstante Wert, wird der Wert von N um eins erhöht. Diese Folge von Operationen wird durch die Befehle bei den Zeilen 1265 bis 1316 dargestellt. Der IF- Befehl, der die Zeilen 1320 - 1353 umspannt, setzt N, der Parameterwert des aktuellen Pegeis, in das Array TABLE. Wenn die doppelte Anzahl der durch den Wert N dargestellten Einträge die Tabelle vervollständigt (d. h. wenn I + 2(N+1)> 255) ist der aktuelle Pegel der letzte Pegel; die Anzahl der Einträge in dem aktuellen Pegel wird verdoppelt und die Variable I wird auf 256 gesetzt, um die Schleife zu beenden. Wenn der Test bei Zeile 1320 nicht bestanden wird, wird der ELSE- Teil (Zeilen 1336 - 1353) ausgeführt. Dieser Teil setzt die Population des aktuellen Pegels auf 2N und vergrößert den in der Variablen I gehaltenen Wert, um auf den ersten Eintrag nach den in dem aktuellen Pegel enthaltenen Einträge zu zeigen.
  • Der IF-Befehl von Zeile 1320 - 1353 unterscheidet zwischen dem letzten Pegel oder Parameterwert für den statistischen Code und irgendeinem der Pegel, die ihn fortführen. Wie oben in Bezug auf Tabelle 3 ausgeführt, endet der Vorsatz für den letzten Pegel des Codes mit einer binären Eins, während die Vorsätze für die anderen Code-Pegel alle mit einer binären Null enden. Da die Folge der Binär-1-Werte, die den letzten Pegel identifiziert, nicht von einer binären Null gefolgt wird, kann der letzte Pegel doppelt so viele Werte für die gleiche Anzahl von Bits in einem Codewort darstellen wie irgendein anderer Pegel. Dieser IF-Befehl überprüft jeden Pegel, wenn er berechnet ist, um festzustellen, ob der Pegel der letzte Pegel sein kann. Wenn dies der Fall ist, wird ein Parameterwert für den letzten Pegel berechnet und dem Array TABLE zugeordnet, und die WHILE-Schleife wird beendet, ohne die Variable LEVEL zu erhöhen. Ansonsten wird der Populationswert für einen mittleren Pegel berechnet und als der Parameterwert für den Pegel zugeordnet, und die Variable LEVEL wird erhöht, so daß die WHILE-Schleife die Population für den nächsten Pegel berechnen kann.
  • Der Befehl bei Zeile 1370 erniedrigt den Wert von TOTAL_Count um die Summe der Werte von dem Array STAT, die durch den Pegel dargestellt werden, der gerade berechnet wurde. Dieser Schritt bedingt die WHILE-Schleife bei den Befehlen 1220 - 1380 zur Berechnung der Population für die verbleibenden Pegel, ohne Rücksicht auf die Population der vorhergehenden Pegel.
  • Die Befehle in der WHILE-Schleife fahren damit fort, die Populationswerte für die verschiedenen Pegel des statistischen Codes zu berechnen, bis die Variable I einen Wert größer als 256 hat.
  • Die Erfinder haben bestimmt, daß dieser Algorithmus einen Code variabler Länge erzeugt, der sich der Wirksamkeit eines optimalen Codes, wie z.B. eines Huffman-Codes, stark annähert, wenn sich die Datenwerte irgendeiner negativen Exponentialverteilung annähern, und einen relativ wirksamen Code erzeugt, wenn sich die Datenwerte irgendeiner allgemein monoton abfallenden statistischen Verteilung annähern. Wie oben ausgeführt, sind die durch den Prozessor 30 für komprimierte Signale durchgeführten Schritte zur Erzeugung von Daten bestimmt, die zumindest eine allgemein monoton abfallende statistische Verteilung aufweisen.
  • Als eine Alternative zu dem oben vorgestellten Verfahren haben die Erfinder bestimmt, daß Parameter, die einen zufriedenstellenden Code variabler Länge beschreiben, durch Anhäufung der Wahrscheinlichkeiten von 2N Datenwerten entwickelt werden können, wobei N schrittweise von Null ansteigt, bis die angehäufte Summe von Wahrscheinlichkeiten größer ist als 0,3820. Der Wert von N, der diesen Test erfüllt, ist der Parameterwert für den aktuellen Pegel. Dieser Algorithmus läuft weiter unter Eliminierung der statistischen Daten für die Werte bei niedrigeren Pegeln, bis allen möglichen Datenwerten Codewerte zugeordnet worden sind.
  • Der nächste Schritt in dem dem durch das in Figuren 6A und 6B dargestellten Programm ist der Aufbau einer Umsetzungstabelle für den statistischen Code. Ein beispielhafter Algorithmus zur Erzeugung einer Umsetzungstabelle ist in den Programmbefehlen bei Zeilen 1410 - 1610 gezeigt.
  • Der Befehl 1410 ordnet dem Binärstring BASE einen 1-Bit Nullwert zu. Eine FOR-Schleife, die die Befehle von Zeile 1450 - 1550 enthält, bildet eine Umsetzungstabelle für jeden Pegel außer dem letzten. Bei Zeile 1470 wird der Wert in dem I-ten Tabelleneintrag (d. h. der Logarithmus mit der Basis zwei der Population des I-ten Pegels) der Variablen N zugeordnet. Eine geschachtelte FOR-Schleife, die die Befehle von Zeile 1480 - 1520 umspannt, verwendet den Wert in der Variablen N um einen binären String-Wert für jedes Mitglied der Population beim Pegel I zu entwickeln, und trägt die String-Werte an aufeinanderfolgenden Stellen in das Array XLATE_TABLE ein. Der für ein bestimmtes Mitglied eines bestimmten Pegels entwickelte String-Wert wird durch Verkettung eines N-Bit-Binärwertes, der den Index des Mitglieds in der Population beim Pegel I darstellt, mit dem in der Variablen BASE gehaltenen Vorsatzwert erhalten. Der durch diese Operation erzeugte Codewert hat den in der Variablen BASE gehaltenen Wert in den bedeutsameren Bit-Positionen, und den Wert, der den Index darstellt, in den weniger bedeutenden Bit-Positionen.
  • Der Befehl 1530 ändert den der Variablen BASE zugeordneten Wert durch Verkettung eines 1-Bit Binär-1-Wertes mit dem Wert, der durch die Variable BASE bei der MSB-Position gehalten wird. Dieser Wert ist der Vorsatz für den nächsten Pegel. Er wird verwendet, um die Codeworte für den nächsten Pegel zu entwickeln.
  • Die Programmbefehle bei den Zeilen 1555 - 1610 bilden die Einträge der Umsetzungstabelle für den letzten Pegel des Codes. Der Befehl 1555 ordnet einen Wert der Variablen BASE zu, der eine Kette von LEVEL-1 Binär-1-Werten ist. Dies entspricht einem Wert von 2LEVEL-1. Eine FOR-Schleife, die die Zeilen 1570 - 1610 umspannt, bildet die Codeworte für den letzten Pegel durch Verkettung von N-Bit Binärwerten, die den Index jedes Eintrags der Population des letzten Pegels darstellen, mit dem in der Stringvariablen BASE gehaltenen Vorsatzwert.
  • Der Schlußteil des Programms für den statistischen Codierer 40 setzt die Daten in dem Array IN unter Verwendung des statistischen Codes um, der durch die anderen Teile des Programms entwickeln worden ist. Der Befehl bei Zeile 1650 ordnet einen Wert von Null der Variablen I zu, die als ein Index in das Array IN verwendet wird. Der binären Stringvariablen DATA_OUT wird ein Nullwert durch die Befehle bei Zeile 1660 zugeordnet. Die Befehle bei Zeilen 1670 bis 1710 hängen die 16 8-Bit Einträge des Arrays TABLE an die Stringvariable DATA_OUT an. Diese Werte sind Parameter, die von dem statistischen Decodierer 50 verwendet werden, um die Datenwerte erster Länge aus dem Codestrom wiederherzustellen. Die Parameterwerte von dem Array TABLE werden in dem Array als Werte des Parameterwertes hoch zwei (d. h. als eine Population für den entsprechenden Pegel) gespeichert. Diese Werte werden unter Verwendung einer Funktion RBSTRING in eine Binärkettenform umgewandelt, die die Ordnung der Bedeutung der Bits umkehrt, zunächst den LSB des Wertes in den String DATA_OUT setzt, und zuletzt den MSB des Wertes in den String setzt. Diese Umkehrung der Bitanordnung der Parameterwerte ist erwünscht, wegen der Art, in der die Parameterwerte von dem Binärstring durch den statistischen Decodierer 50 wie nachfolgend beschrieben wiederhergestellt werden. Die WHILE-Schleife bei den Zeilen 1720 - 1743 setzt die Datenwerte fester Länge im Array IN in ihre entsprechenden Codewörter variabler Länge um und hängt jedes Codewort mit dem NSB des Codewortes vorangehend an die Stringvariable DATA_OUT an. Der letzte Befehl 1770 in dem Programm sendet die codierten Daten durch den Übertragungskanal 45 zum statistischen Decodierer 50. Wie oben ausgeführt, kann der Übertragungskanal eine Leitung zum Transport eines bitseriellen digitalen Signals sein, wenn die statistische Codierung zur Verbesserung der Wirksamkeit der Datenübertragung verwendet wird, oder er kann ein Bus zum Transport eines Mehrfach-Bit-Signals zu einem Speicher sein, wenn der statistische Codierer 40 zur Komprimierung der Daten für eine effektivere Speicherung verwendet wird. In der in Figur 1 gezeigten Ausführungsform der Erfindung ist der Übertragungskanal 45 zwischen dem statistischen Codierer 40 und dem statistischem Decodierer 50 ein bitserieller Datenweg.
  • Figur 7 ist ein Blockdiagramm, das eine Schaltung zeigt, die zur Verwendung als statistischer Decodierer 50 geeignet ist. Die in Figur 7 gezeigte Schaltung teilt die ihr gelieferten Daten in 8-Bit Bytes zur Speicherung und Verarbeitung über 8- Bit Datenwege. Es ist beabsichtigt, daß eine äquivalente Schaltung entworfen werden kann, die 16, 32 oder 64-Bit Datenwege als eine vorwärtsgerichtete Erweiterung der gezeigten Schaltung verwendet. Allgemein enthält die in Figur 7 gezeigte Schaltung einen Pufferspeicher 716 zur Speicherung von Daten wie sie vom Übertragungskanal 45 empfangen werden, und zur Lieferung der Daten zur Decodierschaltung, wenn sie angefordert werden. Die Decodierschaltung enthält einen Speicher mit direktem Zugriff (RAM) 724, der die Tabelle der Parameter hält, die den Code beschreiben, der durch die Codierschaltung 40 entwickelt wurde. Die Daten im Pufferspeicher 716 werden decodiert, indem in einem Addierer 738 Parameterwerte vom RAM 724 mit Werten kombiniert werden, die aus dem vom Speicher 716 gelieferten Daten extrahiert sind. Die Schaltung, die den Decodiervorgang durchführt, wird durch die Steuerschaltung 720 gesteuert.
  • Das bitserielle Signal DATA, das über den Übertragungskanal 45 zur Verfügung gestellt wird, wird an ein Schieberegister 710 geliefert und zur Schreibadressen-Erzeugungsschaltung 712. Das Signal DATA kann beispielsweise ein Signal ohne Rückkehr zu Null sein (NRZ-Signal), in dem das Taktsignal, das zur Wiederherstellung der Daten benötigt wird, mit den Daten codiert ist. Die in dieser Ausführungsform der Erfindung verwendete Schaltung 712 enthält eine phasenstarre Regelung (PLL-Schleife) (nicht gezeigt), die auf das Signal DATA antwortet um dieses Taktsignal wiederherzustellen und um es als ein Signal DCK an das Schieberegister 710 zu liefern.
  • Das in dieser Ausführungsform der Erfindung verwendete Schieberegister ist ein 8-Bit Register mit seriellem Eingang und parallelem Ausgang. Im Betrieb mit eingeschwungenem Zustand, d. h. wenn sich das Signal DCK stabilisiert hat, bedingt die Schreibadressen-Erzeugungsschaltung 712, daß das Schieberegister 710 die Bitwerte des Signals DATA akzeptiert, wenn sie über den Übertragungskanal 45 geliefert werden. Der Schreibadressen-Erzeuger 712 veranlaßt weiterhin über ein Signal WLD ein Register 714, den in dem Schieberegister 710 gehaltenen Wert immer dann zu laden, wenn 8 Datenbits in das Register 710 geschoben worden sind.
  • Die in dem Register 714 gehaltenen 8-Bit Werte werden an den Dateneingangsanschluß des Pufferspeichers 716 geliefert. Der Schreibadressen-Generator 712 erzeugt einen Schreibadresswert WADR und pulst das Signal BWE zum Ermöglichen des Schreibens in den Pufferspeicher, um den von dem Register 714 gehaltenen Wert in den Pufferspeicher 716 zu speichern. Der Schreibadresswert WADR kann durch einen internen Zähler (nicht gezeigt) der Schaltung 712 erzeugt werden.
  • Das Signal BWE wird ebenfalls durch den Schreibadressen- Generator 712 an die Steuerschaltung 720 geliefert, um anzuzeigen, daß gerade ein Datenschreibvorgang abläuft. Die Steuerschaltung 720 überwacht dieses Signal um Datenlesevorgänge zu Zeiten ablaufen zu lassen, die sich nicht mit Datenschreibvorgängen überlagern. Die Steuerschaltung 720 leitet einen Datenlesevorgang ein, indem sie ein Signal RREQ pulst, das der Leseadress-Generatorschaltung 718 zugeführt wird. Dieses Signal veranlaßt die Schaltung 718 einen internen Zähler (nicht gezeigt) zu erhöhen, der einen Leseadresswert RADR an den Pufferspeicher 716 liefert. Als Antwort auf diesen Leseadresswert gibt der Pufferspeicher 716 einen 8-Bit Datenwert an ein Register 722 mit parallelem Eingang und parallelem Ausgang.
  • Während der Pufferspeicher 716 mit getrennten Dateneingangs- und Datenausgangsbussen und getrennten Lese- und Schreibadressbussen gezeigt ist, ist es beabsichtigt, daß ein Speicher mit einem einzigen Datenbus und einem einzigen Adressbus verwendet werden kann. Wenn solch ein Speicher verwendet werden würde, würden die Ausgangsanschlüsse des Leseadressgenerators 718 und Schreibadressgenerators 712 und der Ausgangsanschluß des Registers 714 wünschenswerterweise den jeweiligen Adress- und Datenbussen des Speichers über Dreizustands-Geräte zugeführt werden. Das mit diesem Speicher verwendete Register 714 und die Schaltung 712 würde durch das Signal BWE gesteuert, um Daten oder Adresswerte den jeweiligen Bussen zuzuführen wenn ein Schreibvorgang abläuft, und um ansonsten den Bussen eine hohe Impedanz zu geben. Auf dieselbe Weise würde die Schaltung 718 durch das Signal RREQ gesteuert, um den Bus einen Adresswert zur Verfügung zu stellen, wenn ein Lesevorgang abläuft, und ansonsten eine hohe Impedanz zur Verfügung zu stellen.
  • Die von dem Pufferspeicher 716 dem Register 722 gelieferten Datenwerte werden synchron mit der negativ verlaufenden Kante eines Signals ORL geladen, das durch die Steuerschaltung 720 dem Register 722 zugeführt wird. In dem Register 722 gehaltene Datenwerte werden einem Speicher mit direktem Zugriff (RAM) 724 und an ein Register 732 mit parallelem Eingang und seriellem Ausgang geliefert.
  • Der in dieser Ausführungsform der Erfindung verwendete RAM 724 hält die Parameter, die den statistischen Code definieren, der durch den statistischen Codierer 40 entwickelt wurde, wie oben gezeigt. Diese Parameterwerte sind in dem Datenstrom eingebettet, der durch den Kanal 45 verläuft. Sie werden durch den Decodierer 50 verwendet um die codierten Daten, wie unten beschrieben, wiederherzustellen. Wenn ein Parameterwert dem Register 722 von dem Pufferspeicher 716 zugeführt wird, pulst die Steuerschaltung 722 ein Signal WE um den RAM 724 zu veranlassen, daß er den Parameterwert in eine Speicherzelle speichert, die durch einen Adresswert, der durch einen Zähler 726 zur Verfügung gestellt wird, adressiert wird. Wenn der Parameterwert in den RAM 724 geschrieben worden ist, pulst die Steuerschaltung 720 das Signal CCK um den Zähler 726 zu veranlassen, seinen Wert zu erhöhen.
  • Diese Parameterwerte können von dem RAM 724 gelesen werden und einem Paar von Registern 728 und 730 zugeführt werden. Das Register 728 ist ein 1-Bit-Register, das konfiguriert ist, um den MSB eines Parameterwertes zu empfangen, der durch den RAM 724 geliefert wird. Der in diesem 1-Bit-Register gehaltene Wert wird als ein Signal END der Steuerschaltung 720 zugeführt. Das Register 730 ist ein 7-Bit Register mit parallelem Eingang und parallelem oder seriellem Ausgang, das konfiguriert ist, um die sieben LSB's des durch den RAM 724 gelieferten Parameterwerts zu empfangen. Ein neuer Parameterwert wird in die Register 728 und 730 geladen, die auf ein Signal MSLD antworten, das durch die Steuerschaltung 720 geliefert wird. Der in dem Register 730 gehaltene Datenwert wird zu einer weniger bedeutsamen Bitposition hin verschoben, in Antwort auf ein Signal MSH, das durch die Steuerschaltung 720 geliefert wird. Das serielle Ausgangssignal, das durch das Schieberegister 730 geliefert wird, ist ein Signal LB, das der Steuerschaltung 720 zugeführt wird.
  • Die Bitschiebefähigkeit des Registers 730 wird verwendet, um den Populationsindex-Teil eines Codewortes aus dem Datenstrom zu extrahieren. Wenn dieser Wert extrahiert ist, wird der in dem Register 730 gehaltene Parameterwert, der eine ganzzahlige Potenz von zwei ist, zu nach und nach weniger bedeutenden Bitpositionen hin verschoben, bis die binäre Eins des Parameterwertes die LSB Position des Registers besetzt. D. h. bis das Signal LB einen Wert von eins hat. Wenn dieser Wert verschoben wird, wird der Populationsindexwert schrittweise in ein Paar von Registern 734 und 735 verschoben, wie unten beschrieben. Wenn das Signal LB einen Wert von eins hat, ist der Schiebevorgang vollständig und der Populationsindexwert wird durch die Register 734 und 735 gehalten.
  • Der durch das Register 730 zur Verfügung gestellte 7-BIT parallele Ausgangswert wird einem Eingangsanschluß eines Multiplexers 736 zugeführt. Ein durch eine Quelle 731 gehefertes nullwertiges 1-Bit-Signal wird an der MSB Position mit dem 7-Bit-Wert an dem einen Eingangsanschluß des Multiplexers 736 verkettet, um einen 8-Bit-Wert zu bilden. Ein zweiter Eingangsanschluß des Multiplexers 736 wird mit einem Datenwert von den Registern 734 und 735 versehen. Diese Datenwerte werden aus den statistisch codierten Daten entwickelt, die durch den Pufferspeicher 716 zur Verfügung gestellt werden, wie unten beschrieben.
  • Da durch den Decodierprozessor 50 8-Bit-Werte benötigt werden, die statistisch codierte Daten darstellen, werden sie durch den Pufferspeicher 716 zur Verfügung gestellt. Diese Werte werden in das Register 722 mit parallelem Eingang und parallelem Ausgang geladen, in Antwort auf das durch die Steuerschaltung 720 gelieferte Signal ORL. Die in dem Register 722 gehaltenen 8-Bit-Werte werden an das Register 732 mit parallelem Eingang und seriellem Ausgang übertragen, in Antwort auf ein durch die Steuerschaltung 720 geliefertes Steuersignal OSRL. In dem Register 732 gehaltene Datenwerte werden zu weniger signifikanten Bitpositionen hin verschoben, in Antwort auf ein Signal OSH, das durch die Steuerschaltung 720 geliefert wird.
  • Wenn das letzte Bit eines 8-Bit-Datenwertes aus dem Register 732 herausgeschoben wird, wird ein neuer 8-Bit-Datenwert in das Register 732 von dem Register 722 geladen, in Antwort auf das Steuersignal OSRL, das durch die Steuerschaltung 720 geliefert wird. Die Schaltung 720 steuert den Leseadress- Generator 718 und das Register 722, um einen neuen 8-Bit-Wert von dem Speicher 716 zu laden, unmittelbar nachdem ein Wert von dem Register 722 an das Register 732 übertragen wurde. Demgemäß kann das Register 732 einen kontinuierlichen Strom von Bitwerten liefern, die synchron mit dem Signal OSH sind.
  • Das Signal OSH ist ebenfalls mit einem 1-Bit-Register 735 gekoppelt, das wiederum mit dem Register 734 mit seriellem Eingang und parallelem Ausgang gekoppelt ist. Das Register 735 empfängt das bitserielle Ausgangsignal vom Register 732. Dieses bitserielle Signal wird der LSB-Position des Registers 734 von dem Ausgangsanschluß des Registers 735 zugeführt, und es wird zu signifikanteren Bitpositionen des Registers 734 hin verschoben, in Antwort auf das Signal OSH. Der in dem Register 735 gehaltene 1-Bit-Wert wird als das Signal BT der Steuerschaltung 720 zugeführt. Der in den Registern 734 und 735 gehaltene 8-Bit-Wert wird dem zweiten Eingangsanschluß des Multiplexers 736 zugeführt, wie oben beschrieben. Weiter reagiert das Register 734 auf ein Rücksetzsignal RST, das von der Steuerschaltung 720 geliefert wird, um jedes der sieben Bits des durch das Register gehaltenen Wertes auf Null zu setzen. Wenn der Decodieralgorithmus einen Populationsindexwert erfordert, wird das Register 734 zurückgesetzt und N-1 Bitwerte werden von dem Register 732 zu dem Registerpaar 734 und 735 geschoben. Diese Bitwerte werden mit dem Signal MSH synchron schrittweise (in lock-step) verschoben, welches veranlaßt, daß das Register 730 als ein Zähler arbeitet der von 1 bis N-1 zählt. In diesem Fall ist N der Logarithmus mit der Basis zwei der Population des Pegeis, der durch den im Register 730 gehaltenen Parameterwert dargestellt wird, d. h., die Bitposition der binären Eins im Parameterwert.
  • Der Multiplexer 736 wird durch ein Signal MXC gesteuert, das durch die Steuerschaltung 720 geliefert wird, um entweder den in dem Register 730 gehaltenen 7-Bit-Wert, mit dem von der Quelle 731 gelieferten nullwertigen MSB, oder den durch die Register 734 und 735 gehaltenen 8-Bit-Wert an einen Eingangsanschluß eines Addierers 738 zu liefern. Der Ausgangsanschluß des Addierers 738 ist mit dem Eingangsanschluß eines 8-Bit- Registers 740 mit parallelem Eingang und parallelem Ausgang gekoppelt, wobei der Ausgangsanschluß davon mit einem zweiten Eingangsanschluß des Addierers 738 gekoppelt ist. Die Kombination des Addierers 738 und des Registers 740 bildet einen Akkumulator. Der von dem Akkumulator Register 740 gehaltene Wert ändert sich, wenn das durch die Steuerschaltung 720 gelieferte Signal ALD gepulst wird. Dieses Signal veranlaßt das Register 740, die von dem Addierer 738 gelieferten Ausgangswerte zu laden. Das Register 740 kann durch ein Signal AR, das durch die Steuerschaltung 720 geliefert wird, zurückgesetzt werden, so daß es einen Nullwert hat.
  • Das durch den Addierer 738 gelieferte Ausgangssignal wird ebenfalls einem 8-Bit-Register 742 mit parallelem Eingang und parallelem Ausgang zugeführt, das das Ausgangsregister des statistischen Decodierers so ist. Ein neuer Datenwert wird in das Register 742 geladen, als Antwort auf ein Ausgangsladesignal OLD, das durch die Steuerschaltung 720 geliefert wird.
  • Das Signal OLD ist ein Ausgangssignal des Decodierers 50; es wird dem Videosignalprozessor 60 zugeführt, wie in Figur 1 gezeigt, um dem Prozessor 60 anzuzeigen, daß ein decodierter Datenwert von dem Decodierer 50 erhältlich ist.
  • Kurz gesagt läuft der Decodiervorgang wie folgt ab. Wenn durch den Codierer 40 ein neuer Codestrom geliefert wird, wird der über den Übertragungskanal 45 gelieferte digitale Bitstrom in eine Serie von 8-Bit-Werten geteilt, die, wenn sie empfangen werden, in dem Pufferspeicher 716 gespeichert werden. Die ersten 16 acht-Bit-Werte in dem Bitstrom sind die 16 Parameterwerte, die den Code beschreiben. Wie oben ausgeführt sind die Parameterwerte relativ zu den Codeworten in dem Bitstrom in ihren Bits umgekehrt (bit-reversed), und somit ist der NSB eines in das Register 710 geladenen Parameterwertes, in der MSB Position des Registers. Die verbleibenden Bits in dem Bitstrom sind Codewörter variabler Länge. Wie oben ausgeführt sind die Bits jedes Codeworts in dem Bitstrom so angeordnet, daß die signifikanteren Bits in dem Bitstrom vor den weniger signifikanten Bits auftreten. Die 8-Bit-Werte sind in den Speicherzellen gespeichert, die schrittweise ansteigende Adresswerte aufweisen. Die gespeicherten Werte stellen somit einen Bitstrom dar, der an der LSB-Position des ersten 8-Bit- Wertes nach den 16 Parameterwerten startet und durch die Speicherzellen mit schrittweise ansteigenden Adresswerten in den Pufferspeicher 716 weiterläuft.
  • Der erste Schritt in dem Decodierprozess ist das Laden der 16 Parameterwerte, die am Kopf des Bitstroms auftreten, in den RAM 724. Der erste Parameter wird bei der Adresse Null geladen, der zweite bei der Adresse 1, usw. bis zur Adresse 15. Der Zähler 726, der die Adresswerte für den RAM 724 erzeugt, wird dann auf Null zurückgesetzt, so daß die Parameterwerte aufeinanderfolgend verwendet werden können, um die codierten Daten zu decodieren.
  • Wenn die Parameterwerte einmal geladen worden sind, kann die Datendecodierung beginnen. 8-Bit-Werte, die die codierten Daten darstellen, werden von dem Pufferspeicher 716 aufeinanderfolgend gelesen und sie werden in das Schieberegister 732 geladen. Beim Beginn eines Codeworts bewirkt jeder von dem Schieberegister 732 gelieferte Binär-Eins-Wert, daß die Decodierschaltung den aktuellen Parameterwert von dem Register 730 mit dem in dem Register 740 gehaltenen angehäuften Wert addiert. Der nächstfolgende Parameterwert wird dann als der neue aktuelle Parameter in das Register 730 geladen. Wenn die erste Null in dem Bitstrom vorgefunden wird, der durch das Schieberegister 732 geliefert wird, oder wenn ein Parameter mit einer binären Eins in seinem END-Bit vorgefunden wird, wird die Anzahl der Bits, die durch den aktuellen Parameterwert angezeigt wird, unter Verwendung des Registers 730 als ein Bitschiebezähler in die Register 734 und 735 geschoben, und die Decodierschaltung wird veranlaßt den Wert, der in die Register 734 und 735 geschoben worden ist, mit dem angehäuften Wert zu addieren, um einen decodierten Datenwert zu erzeugen. Der Zähler 726, das Register 740 und das Schieberegister 734 werden dann zurückgesetzt, um die Decodierung des nächsten codierten Datenwertes vorzubereiten. Nach der Addition des Wertes im Register 734 mit dem Wert im Register 740 pulst die Steuerschaltung 720 das Signal OLD um den decodierten Wert in das Register 742 zu laden.
  • Der Betrieb des statistischen Decodierers 50 wird unter Bezugnahme auf das in Figur 8 gezeigte Zeitablaufdiagramm erläutert, das 23 Perioden des Eingangsdatentaktsignals DCK, Zeitintervalle T&sub0; bis T&sub2;&sub2;, umspannt. Um die Erläuterung der in Figur 7 gezeigten Schaltung zu vereinfachen sei angenommen, daß die gesamte in Figur 7 gezeigte Schaltung synchron mit dem Signal DCK arbeitet. Es ist jedoch beabsichtigt, daß die Schaltung, die die codierten Daten aus dem Pufferspeicher 716 liest und die Schaltung, die die Decodiervorgänge durchführt, ein separates asynchrones Taktsignal verwenden können. Der in Tabelle 3 beschriebene Code wird für die folgende Beschreibung angenommen.
  • In der gesamten in Figur 8 gezeigten Zeitspanne werden durch den statistischen Codierer 40 23 Bits codierter Daten als das Signal DATA geliefert. Diese Bits werden in das Register 710 synchron mit 23 aufeinanderfolgenden negativen Übergängen des Signals DCK geschoben. 16 dieser Datenbits, acht Bits gleichzeitig, werden synchron mit negativen Übergängen des Signals WLD, das am Ende der Zeitintervalle T&sub7; und T&sub1;&sub5; auftritt, an das Register 714 übertragen. Diese Datenwerte werden während der Zeitintervalle T8 bzw. T16 in den Pufferspeicher 716 geschrieben, wie es durch die Signale BWE und WADR angezeigt wird.
  • Der verbleibende Teil der Signale in Figur 8 zeigt den Betrieb des statistischen Decodierers 50, wie er den letzten Parameterwert für einen Code in dem RAM 724 lädt und dann den Bitstrom 11011010100 decodiert, um die drei Acht-Bit- Binärwerte 00001001, 00000010, und 00000100 (d. h., 9, 2, und 4) zu erhalten.
  • Obwohl 16 Parameterwerte mit den codierten Daten übertragen werden, sind im vorliegenden Beispiel nur drei Parameterwerte relevant, und diese Parameterwerte sind P&sub0;=00000100, P&sub1;=00000010 und P&sub3;=10001000.
  • Während des Zeitintervalls T&sub1; pulst die Steuerschaltung 720 das Signal RREQ um zu fordern, daß ein Acht-Bit-Datenwert von dem Pufferspeicher 716 gelesen wird. Als Antwort auf das Signal RREQ liefert der Leseadressgenerator 718 einen Leseadresswert RADR während des Zeitintervalls T&sub1; an den Pufferspeicher 716. Am Ende des Zeitintervalls T&sub1; erhöht der Leseadressgenerator 718 seinen internen Leseadresswert, um den nächsten Lesevorgang vorzubereiten. Der von dem Pufferspeicher 716 in Antwort auf den zugeführten Leseadresswert gelieferte Wert wird in das Register 722 gespeichert, in Übereinstimmung mit einem negativen Übergang des Signals ORL, das durch die Steuerschaltung 720 geliefert wird und am Ende des Zeitintervalls T&sub1; auftritt.
  • In dem in Figur 5 gezeigten beispielhaften Zeitablaufdiagramm ist der von dem Pufferspeicher 716 zur Zeit T&sub1; gelesene Datenwert der letzte (16te) Parameterwert, der den Code beschreibt, der von dem statistischen Codierer 40 verwendet wurde, um das Signal DATA zu erzeugen. Während des Zeitintervalls T&sub3; liefert der Zähler 726, der vor der Zeit T&sub0; erhöht worden ist, die Adresse des letzten Parameterwerts in dem RAM 724 (d. h. 15) an den Adresseingangsanschluß AD des RAM 724. Ebenfalls während des Zeitintervalls T&sub3; pulst die Steuerschaltung 720 das Signal WE um den RAM 724 zu veranlassen, den Parameterwert an dem adressierten Speicherort zu speichern.
  • Nach dem Speichern des letzten Parameterwertes in den RAM 724 pulst die Steuerschaltung 720 das Signal CR während des Zeitintervalls T&sub4;, um den durch den Zähler 726 gehaltenen Wert auf Null zurückzusetzen Zur Vorbereitung auf das erste Bit der codierten Daten pulst die Steuerschaltung 720 das Signal MSLD, um den ersten Parameterwert P&sub0; in das Registerpaar 728 und 730 während der zweiten Hälfte des Zeitintervalls T&sub4; zu laden.
  • Während des Zeitintervalls T&sub5; pulst die Steuerschaltung 720 das Signal RREQ um zu fordern, daß der nächstfolgende 8-Bit- Wert von dem Pufferspeicher 716 gelesen wird. Dieser Wert wird in das Register 722 am Ende des Zeitintervalls T&sub5; geladen, synchron mit dem negativen Übergang des Signals ORL. Der in dem Register 722 gehaltene Acht-Bit-Datenwert wird an das Register 722 synchron mit dem negativen Übergang des Signals OSRL übertragen, das am Ende des Zeitintervalls T&sub6; auftritt.
  • Während des Zeitintervalls T&sub6; pulst die Steuerschaltung 720 das Signal AR, um alle Bits in dem Register 740, die den Akkumulator initialisieren, zurückzusetzen.
  • Während des Zeitintervalls T&sub7; beginnt die Steuerschaltung 720 einen Speicherlesevorgang von dem Pufferspeicher 716 und speichert den gelesenen Wert in das Register 722. Ebenfalls während des Zeitintervalls T&sub7; pulst die Steuerschaltung 720 das Signal OSH, um den Bitwert an der LSB Position des Registers 732 (d. h. der MSB des ersten Codeworts) zum Register 735 zu übertragen. Dieser Bitwert wird synchron mit dem negativen Übergang des Signals OSH übertragen, das an den Mittelpunkt des Zeitintervalls T&sub7; auftritt. In dem in Figur 8 gezeigten exemplarischen Zeitablaufdiagramm ist dieser Bitwert eine binäre Eins. Demgemäß hat am Mittelpunkt des Zeitintervalls T&sub7; das Signal BT, das den vom dem Register 735 gehaltenen Wert darstellt, einen Wert von eins.
  • Als Antwort auf das Signal BT mit einem Wert von eins ändert die Steuerschaltung 720 den Wert des Signals MXC zu einer binären Eins, was den Multiplexer 736 veranlaßt, den aktuellen Parameterwert von dem Register 730, mit einer binären Null von der Quelle 731 an seiner MSB Position, dem Addierer 738 zuzuführen. Der Addierer 738 summiert diesen Wert mit dem von dem Register 740 gehaltenen Nullwert. Die Summe dieser beiden Werte wird in dem Register 740 synchron mit einem negativen Übergang des Signals ALD gespeichert, der an dem Mittelpunkt des Zeitintervalls T&sub8; auftritt.
  • Das Signal CCK wird während des Zeitintervalls T&sub7; gepulst, um den Wert, der in dem Zähler 726 gehalten wird, zu erhöhen, so daß der zweite Parameterwert P&sub1; am Ausgangsanschluß des RAM 724 erhältlich ist. Während des Zeitintervalls T&sub8; pulst die Steuerschaltung 720 das Signal MSLD, um den zweiten Parameterwert in die Register 728 und 730 zu laden. Zusätzlich pulst die Schaltung 720 das Signal OSH, um zu veranlassen, daß das Schieberegister 732 das nächstfolgende Bit des Codewortes an das Schieberegister 735 liefert. Im vorliegenden Beispiel ist dieser Bitwert eine binäre Eins.
  • Als Antwort auf das 1-wertige Signal BT veranlaßt die Steuerschaltung 720 den Multiplexer 736, den Addierer 738 und das Register 740, den zweiten Parameterwert P&sub1;, der von dem Register 730 gehalten wird, mit dem Wert zu addieren, der bereits in dem Register 740 gehalten wird. Dieses Ergebnis wird im Register 740 synchron mit einem negativen Übergang des Signals ALD gespeichert, das an dem Mittelpunkt des Zeitintervalls T&sub9; auftritt.
  • Während des Zeitintervalls T&sub8; pulst die Steuerschaltung 720 das Signal CCK, um den Zähler 726 zu erhöhen, was den RAM 724 vorbereitet, den dritten Parameter P&sub2; an seinem Ausgangsanschluß zur Verfügung zu stellen.
  • In dem Zeitintervall T&sub9; wird der dritte Parameter in das Register 730 geladen und das nächste Bit der codierten Daten wird von dem Schieberegister 732 an das Register 735 geliefert. In diesem Beispiel ist das END-Bit des dritten Parameterwertes, der in dem ein-Bit-Register 728 gehalten wird, eine binäre Eins. Als Antwort auf das binär-eins wertige Signal END, das durch das Register 728 geliefert wird, ändert die Steuerschaltung 720 das Signal MXC auf eine logische Null, was den Multiplexer 736 veranlaßt, den von den Registern 734 und 735 gehaltenen Wert an den Addierer 738 zu liefern. Der Wert der binären Eins für das Signal END veranlaßt auch die Steuerschaltung 720, das Signal RST zu pulsen, was die 7 Bits des Schieberegisters 734 auf Null setzt.
  • Während der letzteren Hälfte des Zeitintervalls T&sub9; pulst die Steuerschaltung 720 das Signal MSH, um die sieben LSB's des dritten Parameterwerts, der in dem Register 730 gehalten wird, um eine Bitposition zu geringerer Signifikanz hin zu verschieben. In diesem Modus wird das Register 730 als ein Zähler verwendet, um die Anzahl der Bits zu zählen, die von dem Schieberegister 732 zu dem Registerpaar 735 und 734 geschoben werden sollen. In dem vorliegenden Beispiel gibt die Steuerschaltung 720 Impulse der Signale MSH und OSH während der Zeitintervalle T&sub9;, T&sub1;&sub0; und T&sub1;&sub1; schrittweise (in lock-step) ab, bis beim Start des Zeitintervalls T&sub1;&sub2; eine binäre Eins in die LSB Position des Registers 730 geschoben wird. Wenn dies auftritt hat das Signal LB, das von dem Register 730 geliefert wird, einen Wert von eins, was die Steuerschaltung 720 veranlaßt, die Signale OSH und MSH als Binär-Null-Werte zu halten. Beim Start des Zeitintervalls T12 hält das Registerpaar 734 und 735 den Populationsindex des ersten Codeworts variabler Länge (d. h. 00000011).
  • Da der Multiplexer 736 veranlaßt wird, den Acht-Bit-Wert im Registerpaar 734 und 735 an den Addierer 738 zu liefern, ist der Ausgangswert des Addierers die Summe dieses Wertes und des durch das Register 740 gehaltenen Wertes. Diese Summe ist ein decodierter Datenwert. Er wird in das Ausgangsregister 742 durch das Signal OLD geladen, das durch die Steuerschaltung während der letzteren Hälfte des Zeitintervalls T&sub1;&sub2; gepulst wird.
  • Wenn die Steuerschaltung 720 das Ausgangsregister 742 veranlaßt, den Ausgangsdatenwert zu laden, pulst sie das Signal AR um die Inhalte der Register 740 auf Null zu setzen.
  • Während des Zeitintervalls T&sub1;&sub3; wird das erste Bit des nächstfolgenden Codewortes, eine binäre Null, in das Register 735 geschoben. Eine binäre Null für das von dem Register 735 gelieferte Signal BT hat dieselbe Wirkung wie ein Wert einer binären Eins für das Signal END. Während der Zeitintervalle T&sub1;&sub4; und T&sub1;&sub5; schiebt die Steuerschaltung 720 gleichzeitig Bits von dem Bitstrom in signifikantere Bitpositionen der Register 734 und 735, und Bits des Parameters Null, die im Register 730 gehalten werden, in weniger signifikante Bitpositionen bis, während des Zeitintervalls T16, das Signal LB einen Binär- Eins-Wert hat. Wenn dies auftritt wird der Wert in dem Registerpaar 734 und 735 dem Addierer 738 zugeführt, mit dem im Register 740 gehaltenen Nullwert summiert und dann in dem Ausgangsregister 742 gespeichert, in Übereinstimmung mit einem negativen Übergang des Signals OLD, das am Ende des Zeitintervalls T&sub1;&sub6; auftritt.
  • Die in Figur 7 gezeigte Schaltung arbeitet in der oben beschriebenen Weise für den Rest der Zeitintervalle T&sub1;&sub7; bis T&sub2;&sub2;. Die durch den Decodierer am Ende der Zeitintervalle T&sub1;&sub2; und T&sub1;&sub6; gelieferten Werte sind 9 bzw. 2. Das Zeitablaufdiagramm von Figur 8 betrifft weiterhin die Decodierung des codierten Binärwerts 100 um am Ende des Zeitintervalls T&sub1;&sub9; den Datenwert 4 zu erhalten.
  • Die durch den statistischen Decodierer 50 gelieferten Datenwerte werden einem Videosignalprozessor 60 zugeführt, der die Datenwerte in einem Feld- oder Rahmenspeicher (nicht gezeigt) speichern kann und dann die gespeicherten Daten zur Wiedergabe auf einem Wiedergabegerät 70 verarbeitet.
  • In der oben beschriebenen Ausführungsform der Erfindung ist angenommen, daß der Videosignalprozessor 60 mit ausreichender Geschwindigkeit arbeitet, um Pixelwerte, wie sie durch den Decodierer 50 geliefert werden, zu verarbeiten. In einem System, das einen langsameren Videosignalprozessor verwendet, kann es wünschenswert sein, in dem Decodierer eine Schaltung vorzusehen, die den Betrieb des Decodierers aufschiebt, wenn der Prozessor 60 nicht bereit ist, die von dem Decodierer gelieferten Daten aufzunehmen. Diese Schaltung kann in der Steuerschaltung 720 enthalten sein und sie kann auf ein WAIT- Signal (nicht gezeigt) reagieren, das durch den Prozessor 60 geliefert wird, um die Erzeugung der Signale OSH, MSH, OSRL und MSLD zu hemmen.

Claims (6)

1. Vorrichtung zur Codierung digitaler Abtastwerte, die ihr von einer Quelle (10) als Datenstrom zugeführt werden, mit einer Einrichtung zur Codierung des Datenstroms in einen komprimierten Datenstrom und enthaltend
eine mit der Quelle (10) gekoppelte Einrichtung (20) zur Komprimierung der von der Quelle kommenden digitalen Abtastwerte,
eine Einrichtung (30) zur Verarbeitung der komprimierten digitalen Abtastwerte derart, daß die statistischen Häufigkeiten des Auftretens der komprimierten und verarbeiteten digitalen Abtastwerte als Funktion ihrer jeweiligen Werte eine allgemein monoton abnehmende Funktion ist,
und eine Codiereinrichtung (40), der die komprimierten und verarbeiteten digitalen Abtastwerte zugeführt werden und die einen derart programmierten Rechner enthält,
- daß er eine Mehrzahl von Parameterwerten erzeugt, welche jeweilige Populationen für eine Mehrzahl von Pegeln eines statistischen Codes, der sich zur Codierung der empfangenen Digitalabtastwerte eignet, definieren und einen Satz aufeinanderfolgender Codewerte beschreiben, die einen Satz aufeinanderfolgender möglicher Werte der komprimierten und verarbeiteten Abtastwerte darstellen,
- und daß er die Mehrzahl von Parameterwerten zur Erzeugung codierter Daten und zur Zuordnung der Mehrzahl von Parameterwerten zu den codierten Abtastwerten verwendet derart, daß die codierten Abtastwerte durch eine Decodiervorrichtung decodierbar sind.
2. Vorrichtung nach Anspruch 1, dadurch gekennzeichnet, daß die Komprimierungseinrichtung (20) komprimierte digitale Abtastwerte mit einer ersten und einer zweiten Polarität liefert, wobei nicht alle dieser Abtastwerte ein allgemein monotones Abfallen ihrer jeweiligen Werte aufweisen und,
daß die Einrichtung (30) zur Verarbeitung der digitalen Abtastwerte eine Transformationseinrichtung enthält, welche die gelieferten digitalen Datenwerte in transformierte digitale Datenwerte mit nur der ersten Polarität umwandelt, indem die digitalen Datenwerte mit der zweiten Polarität in Polarität und Größe in Werte geändert werden, die zwischen den digitalen Datenwerten der ersten Polarität liegen, so daß digitale Abtastwerte entstehen, welche die allgemein monoton abfallende Funktion aufweisen.
3. Verfahren zur Codierung digitaler Abtastwerte mit den folgenden Schritten:
- Kompression der digitalen Abtastwerte,
- Transformation der komprimierten digitalen Abtastwerte derart, daß die statistische Häufigkeit des Auftretens der transformierten digitalen Abtastwerte als Funktion von ihren jeweiligen Werten eine allgemein monoton abfallende Funktion darstellt,
- Erzeugung einer Wertetabelle, welche die relative Häufigkeit des Auftretens jedes möglichen Wertes der transformierten digitalen Abtastwerte darstellt,
- Verarbeitung der Wertetabelle zur Erzeugung einer Mehrzahl von Parameterwerten, welche jeweilige Populationen für eine Mehrzahl von Pegeln eines statistischen Codes mit einem Satz von Codewerten definieren, wobei jeder Codewert einen möglichen Wert der transformierten digitalen Abtastwerte darstellt und wobei die Anzahl binärer Bits in einem Codewert näherungsweise im umgekehrten Verhältnis zur Häufigkeit des Auftretens desjenigen Wertes der transformierten digitalen Abtastwerte steht, der durch den Codewert gegenüber allen seinen anderen möglichen Werten dargestellt wird,
- Codieren nur der transformierten digitalen Abtastwerte unter Verwendung des statistischen Codes zur Erzeugung codierter digitaler Abtastwerte und
- Verkettung der Parameterwerte mit den codierten digitalen Abtastwerten.
4. Verfahren nach Anspruch 3, bei welchem die komprimierten digitalen Abtastwerte eine erste und eine zweite Polarität haben und der Schritt der Transformation der digitalen Abtastwerte mit der statistischen Häufigkeit des Auftretens die folgenden Schritte umfaßt:
- Multiplikation jedes der komprimierten digitalen Abtastwerte der ersten Polarität mit einem vorbestimmten Faktor zur Erzeugung erster skalierter digitaler Abtastwerte,
- Multiplikation jedes der komprimierten digitalen Abtastwerte der zweiten Polarität mit dem vorbestimmten Faktor zur Erzeugung zweiter skalierter digitaler Abtastwerte,
- Addition eines vorbestimmten Wertes zu jedem der zweiten skalierten Abtastwerte zur Erzeugung modifizierter Abtastwerte und
- Verändern der Polarität jedes der modifizierten Abtastwerte in die gleiche Polarität, wie sie die ersten skalierten digitalen Abtastwerte haben.
5. Verfahren nach Anspruch 3, bei welchem die komprimierten digitalen Abtastwerte eine erste und eine zweite Polarität haben und bei welchem der Schritt der Transformation der digitalen Abtastwerte mit der statistischen Häufigkeit des Auftretens die folgenden Schritte umfaßt:
- Multiplikation jedes der komprimierten digitalen Abtastwerte der ersten Polarität mit einem vorbestimmten Faktor zur Erzeugung erster skalierter digitaler Abtastwerte,
- Multiplikation jedes der komprimierten digitalen Abtastwerte der zweiten Polarität mit einem vorbestimmten Faktor zur Erzeugung zweiter skalierter digitaler Abtastwerte,
- Andern der Polarität jedes der zweiten skalierten Abtastwerte in die Polarität der ersten skalierten Abtastwerte und
- Addition eines vorbestimmten Wertes zu jedem der polaritätsgeänderten zweiten skalierten Abtastwerte.
6. Videosignalverarbeitungssystem enthaltend eine Vorrichtung nach Anspruch 1 oder 2.
DE68926676T 1988-03-31 1989-03-29 Verfahren und gerät zur statistischen kodierung von digitalen daten Expired - Fee Related DE68926676T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/175,915 US5045853A (en) 1987-06-17 1988-03-31 Method and apparatus for statistically encoding digital data
PCT/US1989/001303 WO1989009517A1 (en) 1988-03-31 1989-03-29 Method and apparatus for statistically encoding digital data

Publications (2)

Publication Number Publication Date
DE68926676D1 DE68926676D1 (de) 1996-07-18
DE68926676T2 true DE68926676T2 (de) 1997-02-20

Family

ID=22642193

Family Applications (1)

Application Number Title Priority Date Filing Date
DE68926676T Expired - Fee Related DE68926676T2 (de) 1988-03-31 1989-03-29 Verfahren und gerät zur statistischen kodierung von digitalen daten

Country Status (8)

Country Link
US (1) US5045853A (de)
EP (1) EP0425496B1 (de)
JP (1) JP2819174B2 (de)
KR (1) KR0167092B1 (de)
AU (1) AU622663B2 (de)
CA (1) CA1321012C (de)
DE (1) DE68926676T2 (de)
WO (1) WO1989009517A1 (de)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1991005439A1 (en) * 1989-09-29 1991-04-18 Alcatel N.V. Adaptive transform coding system
JP3085465B2 (ja) * 1989-10-31 2000-09-11 オリンパス光学工業株式会社 画像データの符号化装置および符号化方法
JP3012698B2 (ja) * 1991-01-29 2000-02-28 オリンパス光学工業株式会社 画像データの符号化装置および符号化方法
US5857088A (en) * 1991-10-24 1999-01-05 Intel Corporation System for configuring memory space for storing single decoder table, reconfiguring same space for storing plurality of decoder tables, and selecting one configuration based on encoding scheme
JPH07502632A (ja) * 1991-12-23 1995-03-16 インテル コーポレイシヨン ハフマンコードの復号化のための回路
US5734784A (en) * 1992-03-25 1998-03-31 Kabushiki Kaisha Toshiba High data rate system and method for video recording and playback
US5351047A (en) * 1992-09-21 1994-09-27 Laboratory Automation, Inc. Data decoding method and apparatus
US5615020A (en) * 1993-05-13 1997-03-25 Keith; Michael System and method for fast huffman decoding
JPH08147479A (ja) * 1994-11-17 1996-06-07 Hitachi Ltd 画像出力装置並びに画像復号化装置
US5793896A (en) * 1995-03-23 1998-08-11 Intel Corporation Ordering corrector for variable length codes
US5748790A (en) * 1995-04-05 1998-05-05 Intel Corporation Table-driven statistical decoder
US5646618A (en) * 1995-11-13 1997-07-08 Intel Corporation Decoding one or more variable-length encoded signals using a single table lookup
US5848195A (en) * 1995-12-06 1998-12-08 Intel Corporation Selection of huffman tables for signal encoding
KR100319919B1 (ko) * 1996-07-06 2002-06-20 윤종용 가변 확률모형을 사용한 개선된 산술 부호화기 및/또는 복호화기
US5821887A (en) * 1996-11-12 1998-10-13 Intel Corporation Method and apparatus for decoding variable length codes
US6253165B1 (en) * 1998-06-30 2001-06-26 Microsoft Corporation System and method for modeling probability distribution functions of transform coefficients of encoded signal
US7024409B2 (en) * 2002-04-16 2006-04-04 International Business Machines Corporation System and method for transforming data to preserve privacy where the data transform module suppresses the subset of the collection of data according to the privacy constraint
US8112388B2 (en) * 2007-08-03 2012-02-07 Sap Ag Dependency processing of computer files
US8077063B2 (en) * 2010-01-18 2011-12-13 Freescale Semiconductor, Inc. Method and system for determining bit stream zone statistics
US8866645B2 (en) * 2012-10-02 2014-10-21 The Boeing Company Method and apparatus for compression of generalized sensor data
CN113987556B (zh) * 2021-12-24 2022-05-10 杭州趣链科技有限公司 数据处理方法和装置、电子设备、存储介质

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3883847A (en) * 1974-03-28 1975-05-13 Bell Telephone Labor Inc Uniform decoding of minimum-redundancy codes
JPS5255313A (en) * 1975-10-30 1977-05-06 Kokusai Denshin Denwa Co Ltd Facsimile signal coding system
JPS5390749A (en) * 1977-01-19 1978-08-09 Nec Corp Huffman decoder circuit
US4125861A (en) * 1977-08-18 1978-11-14 Bell Telephone Laboratories, Incorporated Video signal encoding
US4386416A (en) * 1980-06-02 1983-05-31 Mostek Corporation Data compression, encryption, and in-line transmission system
US4396906A (en) * 1980-10-31 1983-08-02 Sri International Method and apparatus for digital Huffman encoding
US4369463A (en) * 1981-06-04 1983-01-18 International Business Machines Corporation Gray scale image data compression with code words a function of image history
AU555476B2 (en) * 1981-10-15 1986-09-25 Motorola, Inc. Binary encoding
CA1211219A (en) * 1982-06-30 1986-09-09 Hideo Kuroda Digital data code conversion circuit for variable- word-length data code
JPS5992688A (ja) * 1982-11-19 1984-05-28 Fuji Photo Film Co Ltd 適応形画像圧縮方式
US4563671A (en) * 1983-05-18 1986-01-07 At&T Bell Laboratories Coding technique
US4574382A (en) * 1983-10-05 1986-03-04 International Business Machines Corporation Variable length character code system
US4725815A (en) * 1984-01-16 1988-02-16 International Business Machines Corporation Method for encoding and decoding a digital image
US4631521A (en) * 1984-12-31 1986-12-23 Wang Laboratories, Inc. Method and apparatus for differential run-length coding
GB8502924D0 (en) * 1985-02-05 1985-03-06 British Telecomm Image encoding
US4646061A (en) * 1985-03-13 1987-02-24 Racal Data Communications Inc. Data communication with modified Huffman coding
JPH0821863B2 (ja) * 1985-04-13 1996-03-04 キヤノン株式会社 データ処理方法
US4754492A (en) * 1985-06-03 1988-06-28 Picturetel Corporation Method and system for adapting a digitized signal processing system for block processing with minimal blocking artifacts
JPS62152225A (ja) * 1985-12-26 1987-07-07 Canon Inc 予測符号化装置

Also Published As

Publication number Publication date
EP0425496B1 (de) 1996-06-12
JP2819174B2 (ja) 1998-10-30
CA1321012C (en) 1993-08-03
EP0425496A1 (de) 1991-05-08
JPH03503708A (ja) 1991-08-15
US5045853A (en) 1991-09-03
DE68926676D1 (de) 1996-07-18
KR900701102A (ko) 1990-08-17
AU3410689A (en) 1989-10-16
AU622663B2 (en) 1992-04-16
WO1989009517A1 (en) 1989-10-05
KR0167092B1 (ko) 1999-03-20

Similar Documents

Publication Publication Date Title
DE68926676T2 (de) Verfahren und gerät zur statistischen kodierung von digitalen daten
DE3789857T2 (de) System zur Komprimierung von Bildern mit mehreren Graustufen.
DE69425847T2 (de) Rechner für die inverse diskrete Cosinus-Transformation
DE69510662T2 (de) Kompakte Quellencodierungstabellen für Codierungs-/Decodierungssystem
DE69313540T2 (de) Verbesserte Vorrichtung zur variablen Längendekodierung
DE19531049C2 (de) Verfahren zum Komprimieren von Daten und Codierungsvorrichtung
DE19506164C2 (de) Verfahren zum Komprimieren eingegebener Symbole in Codeworte
DE68918590T2 (de) Gerät zur dekodierung von mit variabler länge kodierten daten.
DE69026292T2 (de) Methode zur Bilddatenkodierung
DE19544761C2 (de) Verfahren zum Komprimieren eines eingegebenen Symbols
DE60128359T2 (de) Erneute benützung von feste checksuminformationen bei datenkopfkomprimierung
DE69802520T2 (de) Verfahren und vorrichtung zur verlustfreien datenkompression
EP2068448B1 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen
DE3606869A1 (de) Vorrichtung zur datenkompression
DE3109795A1 (de) Bandeinengungsverfahren fuer getoente bilder
DE3786412T2 (de) Verfahren und Vorrichtung zur digitalen Signalkodierung durch Quantisierung.
DE19534730A1 (de) Verfahren zum Codieren und Decodieren von Daten
DE3736193A1 (de) Sprachsignal-kodierverfahren
DE69820230T2 (de) N-weg verarbeitung von bitketten in einer datenflussarchitektur
DE3751372T2 (de) Verfahren der arithmetischen Kodierung zur Kodierung- und Dekodierung.
DE69524999T2 (de) Verfahren zum Komprimieren und Dekomprimieren von Dateien
DE68908941T2 (de) Verfahren zur Kodierung und Dekodierung von Blockinformationen und Vorrichtung dazu.
DE69420794T2 (de) Kodierungsvorrichtung zur Bildkompression
DE69115111T2 (de) Schaltung mit auswählbaren Übertragungseigenschaften.
EP0241745B1 (de) Verfahren zur Datenreduktion digitaler Bildsignale durch Vektorquantisierung von durch orthonormale Transformation mittels einer symmetrischen fastzyklischen Hadamard-Matrix gewonnenen Koeffizienten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee