DE102016220801A1 - Erzeugen einer dynamischen Huffman-Tabelle - Google Patents

Erzeugen einer dynamischen Huffman-Tabelle Download PDF

Info

Publication number
DE102016220801A1
DE102016220801A1 DE102016220801.2A DE102016220801A DE102016220801A1 DE 102016220801 A1 DE102016220801 A1 DE 102016220801A1 DE 102016220801 A DE102016220801 A DE 102016220801A DE 102016220801 A1 DE102016220801 A1 DE 102016220801A1
Authority
DE
Germany
Prior art keywords
input data
huffman tables
dynamic huffman
dynamic
tables
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.)
Granted
Application number
DE102016220801.2A
Other languages
English (en)
Other versions
DE102016220801B4 (de
Inventor
Bulent Abali
Bartholomew Blaner
Hubertus Franke
John J. Reilly
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102016220801A1 publication Critical patent/DE102016220801A1/de
Application granted granted Critical
Publication of DE102016220801B4 publication Critical patent/DE102016220801B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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)

Abstract

Bereitgestellt werden Methoden zum Erzeugen einer dynamischen Huffman-Tabelle in Hardware. Gemäß einem Aspekt beinhaltet das Verfahren zum Codieren von Daten die Schritte: Realisieren von dynamischen Huffman-Tabellen in Hardware, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet werden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden; Schreiben von Symbolen und ihren Zählwerten aus den Eingabedaten in die dynamischen Huffman-Tabellen nach dem Empfang von Eingabedaten; Berechnen einer Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und Auswählen einer gegebenen Tabelle aus den dynamischen Huffman-Tabellen, die eine niedrigste Wertung aufweist, für ein Codieren der Eingabedaten. Darüber hinaus wird ein Prozess zum Realisieren der vorliegenden Methoden in einem SRAM bereitgestellt.

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf eine Datencodierung auf Huffman-Grundlage und im Besonderen auf Methoden zum Erzeugen einer dynamischen Huffman-Tabelle in Hardware.
  • Hintergrund der Erfindung
  • Viele Hardware- und Software-Anwendungen verwenden Datenkomprimierung, um Speicher- und Arbeitsspeicherkapazität zu verringern und um Netzwerk- und Eingabe/Ausgabe-Bandbreite zu verringern. Huffman-Codierung wird häufig zum Komprimieren von Daten verwendet, zum Beispiel beim Deflate-Standard (gzip). Huffman-Codes sind Codes mit variabler Länge, bei denen die am häufigsten vorkommenden Datenelemente mit weniger Bits codiert sind. Dynamische Huffman-Codes sind angepasste Codes, die auf Grundlage der Häufigkeit von Datenelementen spontan erzeugt werden.
  • Das Erzeugen einer dynamischen Huffman(DH)-Tabelle in Hardware ist ein Prozess, der viel Zeit und Siliciumfläche in Anspruch nimmt. So erfordert eine herkömmliche Komprimierung auf DH-Grundlage zum Beispiel einen Software-Eingriff oder ein kompliziertes Zuordnen der Deflate-Software-Algorithmen zu Hardware. Dies kann sich nachteilig auf Leistung, Komprimierungsverhältnis oder Siliciumfläche auswirken.
  • In der Folge entscheiden sich viele Hardware-Realisierungen für die Verwendung eines festen Huffman(FH)-Verfahrens anstelle des dynamischen Huffman(DH)-Verfahrens. FH hat gegenüber DH den Nachteil einer geringeren Komprimierung.
  • Aus diesem Grund wäre eine vereinfachte und schnelle Methode zum Erzeugen einer dynamischen Huffman-Tabelle in Hardware erstrebenswert.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung stellt Methoden zum Erzeugen einer dynamischen Huffman-Tabelle in Hardware bereit. Gemäß einem Aspekt der Erfindung wird ein Verfahren zum Codieren von Daten bereitgestellt. Das Verfahren beinhaltet die Schritte: Realisieren von dynamischen Huffman-Tabellen in Hardware, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet werden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden; Schreiben von Symbolen und ihren Zählwerten aus den Eingabedaten in die dynamischen Huffman-Tabellen nach dem Empfang von Eingabedaten; Berechnen einer Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und Auswählen einer gegebenen Tabelle aus den dynamischen Huffman-Tabellen, die eine niedrigste Wertung aufweist, für ein Codieren der Eingabedaten.
  • Gemäß einem weiteren Aspekt der Erfindung wird ein Verfahren auf Grundlage eines statischen Direktzugriffsspeichers (Static Random Access Memory, SRAM) zum Codieren von Daten bereitgestellt. Das Verfahren beinhaltet die Schritte: Realisieren von dynamischen Huffman-Tabellen in Hardware, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet werden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden, wobei die Hardware SRAM-Module aufweist und wobei die dynamischen Huffman-Tabellen in der Hardware realisiert werden, indem jedes der SRAM-Module mit einer sortierten Liste der Codelängenwerte für eine der dynamischen Huffman-Tabellen initialisiert wird; Schreiben von Symbolen und ihren Zählwerten aus den Eingabedaten in die dynamischen Huffman-Tabellen in jedes der SRAM-Module nach dem Empfang von Eingabedaten; Berechnen einer Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und Auswählen einer gegebenen Tabelle aus den dynamischen Huffman-Tabellen, die eine niedrigste Wertung aufweist, für ein Codieren der Eingabedaten.
  • Ein umfassenderes Verständnis der vorliegenden Erfindung sowie weitere Merkmale und Vorzüge der vorliegenden Erfindung ergeben sich aus der folgenden ausführlichen Beschreibung und den Zeichnungen.
  • Kurzbeschreibung der Zeichnungen
  • 1 ist eine Darstellung, die einen unter Verwendung des Huffman-Algorithmus erzeugten beispielhaften Präfixcode gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 2a ist eine Darstellung, die ein Histogramm einer Symbolverteilung mit starker Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 2b ist eine Darstellung, die eine Huffman-Baumform der Symbolverteilung mit starker Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 2c ist eine Darstellung, die eine vorberechnete Tabelle der Symbolverteilung mit starker Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 3a ist eine Darstellung, die ein Histogramm einer Symbolverteilung mit moderater Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 3b ist eine Darstellung, die eine Huffman-Baumform der Symbolverteilung mit moderater Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 3c ist eine Darstellung, die eine vorberechnete Tabelle der Symbolverteilung mit moderater Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 4a ist eine Darstellung, die ein Histogramm einer Symbolverteilung mit geringer Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 4b ist eine Darstellung, die eine Huffman-Baumform der Symbolverteilung mit geringer Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 4c ist eine Darstellung, die eine vorberechnete Tabelle der Symbolverteilung mit geringer Schiefe gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 5a ist eine Darstellung, die Symbole und Zählwerte veranschaulicht, welche gemäß einer Ausführungsform der vorliegenden Erfindung in die Tabelle aus 2c geschrieben wurden;
  • 5b ist eine Darstellung, die Symbole und Zählwerte veranschaulicht, welche gemäß einer Ausführungsform der vorliegenden Erfindung in die Tabelle aus 3c geschrieben wurden;
  • 5c ist eine Darstellung, die Symbole und Zählwerte veranschaulicht, welche gemäß einer Ausführungsform der vorliegenden Erfindung in die Tabelle aus 4c geschrieben wurden;
  • 6 ist eine Darstellung, die eine beispielhafte Vorgehensweise zum Erzeugen einer dynamischen Huffman-Tabelle gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht; und
  • 7 ist eine Darstellung, die eine beispielhafte Vorrichtung zum Durchführen von einer oder mehreren hier dargelegten Vorgehensweisen gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • Ausführliche Beschreibung bevorzugter Ausführungsformen
  • Wie oben erwähnt, erfordert eine herkömmliche Komprimierung auf DH-Grundlage einen Software-Eingriff. Vorteilhafterweise werden hier vereinfachte und schnelle Methoden zum Erzeugen einer DH-Tabelle in Hardware bereitgestellt. Wie im Folgenden ausführlich beschrieben wird, beinhalten die vorliegenden Methoden im Allgemeinen ein Hardwareverfahren zum Erzeugen eines Präfixbaums, bei dem mehrere Baumformen und Tabellen, die Häufigkeiten von Symbolen repräsentieren, und manche Tabellenerzeugungsschritte während des Vor-Silicium-Schritts vorberechnet werden, woraus sich eine vereinfachte Hardwarerealisierung ergibt. Die Gesamt-Bitkosten einer jeden Tabelle werden berechnet, und die Tabelle mit der geringsten Ausgabegröße wird zur Verwendung bei der Komprimierung ausgewählt.
  • Wie nach dem Stand der Technik bekannt ist, wird der Huffman-Algorithmus während der Komprimierung verwendet, um Präfixcodes mit variabler Länge zu erzeugen. Die häufiger vorkommenden Symbole erhalten weniger Bits, wodurch eine bessere Komprimierung erreicht wird. 1 ist ein Beispiel für einen Präfixcode, der unter Verwendung des Huffman-Algorithmus erzeugt wird. Zu codierende Symbole (in diesem Beispiel A, B und Z) werden den Blättern eines Binärbaums zugewiesen. Ein Präfixcode wird erhalten, indem den Zweigen von der Wurzel zu dem Symbolblatt gefolgt wird. So wird zum Beispiel Symbol A mit dem Binärbit „0”, B mit den Binärbits „10” und Z mit „11” codiert. Der Huffman-Algorithmus erzeugt eine optimierte Binärbaumform, die in der geringsten Anzahl von Gesamt-Bits resultiert. In dem genannten Beispiel sind die Symbolwahrscheinlichkeiten so gelagert, dass das Symbol A während der Hälfte der Fälle in dem Datenstrom vorkommt und B und Z während einem Viertel der Fälle vorkommen. Die Baumform ist so gestaltet, dass der Code für A weniger Bits besitzt als der Code für B und Z.
  • Bei herkömmlichen Prozessen wird anhand dieser Symbolwahrscheinlichkeiten während der Laufzeit eine angepasste Baumstruktur erzeugt. Im Vergleich hierzu vereinfachen die vorliegenden Methoden die DH-Hardware, indem sie einen Satz von Tabellen, die jeweils eine Baumform repräsentieren, vorberechnen, anstelle wie bei herkömmlichen Prozessen zu versuchen, Baumformen während der Laufzeit zu erzeugen. Eine Mehrzahl dieser vorberechneter Tabellen wird in Hardware eingebettet und steht zur Verwendung bereit, bevor eine wie auch immer geartete Komprimierungsoperation beginnt. In der hier dargelegten beispielhaften Realisierung befindet sich jede Tabelle in einem SRAM.
  • Jede Tabelle repräsentiert eine Verteilung von Symbolen. Vorberechnete Tabellen werden ausgewählt, um eine Mehrzahl von Symbolverteilungen zu repräsentieren. Abhängig von der Verteilung von Symbolen in den zu komprimierenden Eingabedaten erbringt die eine Tabelle ein besseres Komprimierungsverhältnis als die andere.
  • Die 2 bis 4 repräsentieren drei verschiedene Symbolverteilungen, d. h. Symbolverteilungen mit starker, moderater bzw. geringer Schiefe. In jeder der 2 bis 4 wird ein Histogramm von Symbolen bereitgestellt, wobei sich das am häufigsten vorkommende Symbol am Ursprung und das am geringsten vorkommende Symbol am weitesten vom Ursprung der x-Achse entfernt befindet. Ebenfalls bereitgestellt wird eine Baumform, welche die Huffman-Baumformen repräsentiert, die durch die betreffende Symbolverteilung (mit starker, moderater oder geringer Schiefe) erzeugt worden wäre. Schließlich stellt jede der 2 bis 4 die vorliegende vorberechnete Tabelle bereit. Diese Histogramme, Huffman-Baumformen und vorberechneten Tabellen erhalten in den 2 bis 4 die Bezugsziffern a, b bzw. c.
  • Die 2a bis c repräsentieren eine Symbolverteilung mit starker Schiefe, bei der manche Symbole sehr viel häufiger vorkommen als andere. Eine beispielhafte Verteilung mit starker Schiefe ist dann gegeben, wenn manche Symbole zwei-, drei-, viermal so oft oder noch häufiger vorkommen als das nächste Symbol. Bei nicht komprimierten Grafikdateien kann die gängigste Farbe wie beispielsweise eine Hintergrundfarbe zum Beispiel Hunderte von Male häufiger vorkommen als die Farbe mit der nächst niedrigeren Häufigkeit. Bei einem weiteren Beispiel enthalten Binärdateien typischerweise die Hexadezimalzahl „00” zehn- bis hundertmal häufiger als das Bytezeichen mit der nächst niedrigeren Häufigkeit. Die 3a bis c repräsentieren eine Verteilung mit moderater Schiefe. Die 4a bis c repräsentieren eine Verteilung mit geringer Schiefe, bei der Symbole mit ungefähr derselben Häufigkeit in dem Eingabestrom vorkommen. Bei Verteilungen mit geringer Schiefe unterscheiden sich die Symbolhäufigkeiten in der Datei nur um wenige Prozentpunkte. So treten in einem standardmäßigen englischen Text zum Beispiel die häufigsten Buchstaben „e”, „t”, „a” in 12, 9 bzw. 8 Prozent der Fälle auf.
  • Die in den 2a, 3a und 4a bereitgestellten Histogramme stellen den Gesamt-Zählwert als eine Funktion von Symbolen dar, die jeweils nach Zählwert sortiert sind. Wie oben erwähnt, befinden sich die am häufigsten vorkommenden Symbole am Ursprung und die am geringsten vorkommenden Symbole am weitesten vom Ursprung der x-Achse entfernt. Somit werden die Histogramme mit geringer werdendem Unterschied in der Häufigkeit des Vorkommens der Symbole (d. h. von den Verteilungen mit starker Schiefe zu den Verteilungen mit geringer Schiefe) erwartungsgemäß flacher. Die in den 2b, 3b und 4b bereitgestellten Baumformen repräsentieren Huffman-Baumformen, die durch diese Symbolverteilungen mit starker, moderater und geringer Schiefe erzeugt worden wären.
  • Die vorliegenden vorberechneten Tabellen, die jeweils die betreffende Baumform und Symbolverteilung repräsentieren, werden in den 2c, 3c und 4c bereitgestellt. Obwohl der Eingabestrom mit jeder der gezeigten Tabellen codiert werden kann, erbringt abhängig von der Symbolverteilung eine der Tabellen das beste Komprimierungsverhältnis, d. h. eine kleinste komprimierte Ausgabe.
  • Die Zuweisung von Symbolen zu den Blättern des Huffman-Baums (d. h. zu den Tabellen) erfolgt vorteilhafterweise zum Zeitpunkt der Komprimierung. Anders ausgedrückt wurde zwar die Form des Baums (die durch die betreffende Tabelle repräsentiert wird) vorberechnet, die Symbole, bei denen es sich um die Blätter eines Huffman-Baums handeln würde, werden jedoch anfänglich nicht zugewiesen und auf den tatsächlichen Komprimierungsschritt verschoben. Das in den 2 bis 4 bereitgestellte Beispiel stellt diese anfängliche Bedingung dar, indem – im Gegensatz zu dem in 1 gezeigten Beispiel eines Huffman-Baums – den Baumblättern keine Symbole zugewiesen sind (d. h. ein Fragezeichen („?”) verwendet wird).
  • In der Tabellendarstellung des Baums (siehe 2c, 3c und 4c) genügen die (als „Län” bezeichneten) Codelängen, um die Form des Baums zu beschreiben, das heißt der Abstand eines jeden Baumblatts von der Baumwurzel wird der Reihenfolge nach aufgeführt, vom kürzesten Code zum längsten Code (entsprechend den Bits „1” bzw. „15” in der beispielhaften Deflate-Realisierung). So kann das Beispiel eines Huffman-Baums aus 1 zum Beispiel durch die Codelängenwerte 1, 2, 2 repräsentiert werden.
  • Gemäß den vorliegenden Methoden weist jeder Tabelleneintrag die Tripel {Codelänge, Zählwert, Symbol} auf, wobei „CodeLänge” eine vorberechnete Codelänge ihrer betreffenden Baumform ist. „Zählwert” und „Symbol” lauten anfänglich „0” bzw. „NULL”. Sie werden während des DH-Berechnungsschritts der Komprimierung aktualisiert.
  • Wenn die Komprimierungsoperation beginnt, werden Eingabedaten durchsucht und Symbolhäufigkeiten ermittelt. Wenn der Buchstabe „A” in den Eingabedaten zum Beispiel 1.000 Mal vorkommt, lautet sein Zählwert „1.000”. Symbolzählwerte werden vom höchsten zum niedrigsten Zählwert sortiert. Das Sortieren kann anhand eines der vielen verschiedenen Verfahren erfolgen, die nach dem Stand der Technik bekannt sind. Zum Beispiel beinhalten geeignete Sortieralgorithmen, ohne darauf beschränkt zu sein, die „Insertion sort”-, „Quick sort”- oder „Bitonic sort”-Algorithmen.
  • Im Interesse einer weiteren Vereinfachung der Hardware kann auch ein Algorithmus für die näherungsweise Sortierung verwendet werden, um eine Halbsortierung der Symbolzählwerte durchzuführen. In diesem Fall werden lediglich die am häufigsten vorkommenden Symbole in der richtigen Reihenfolge sortiert, während die selten vorkommenden Symbole nicht notwendigerweise in der richtigen Reihenfolge sortiert werden. So kommen in einem standardmäßigen englischen Text zum Beispiel die häufigsten Buchstaben „e, t, a, o, i, n, s, h, r” in 70% der Fälle vor. Wenn diese neun Buchstaben in der richtigen Reihenfolge sortiert werden, werden 70% der Komprimierungsaufgabe korrekt durchgeführt, wohingegen es für eine Verbesserung des Komprimierungsverhältnisses weniger wichtig ist, die verbleibenden Buchstaben der Reihenfolge nach zu sortieren. Aus der folgenden Beschreibung wird offensichtlich, dass selten vorkommende Symbole in abnehmendem Maße zum Komprimierungsverhältnis beitragen. Im Interesse einer reduzierten Ausführungszeit und Siliciumfläche kann daher eine geringfügige Erhöhung des Komprimierungsverhältnisses akzeptabel sein.
  • Sortierte oder halb sortierte Symbolzählwerte werden danach in die Felder „Zählwert” und „Symbol” der vorberechneten Tabellen geschrieben. Somit werden die Tripel {CodeLänge, Zählwert und Symbol} so geschrieben, dass das Symbol mit dem höchsten Zählwert mit der kürzesten Codelänge und das Symbol mit dem zweithöchsten Zählwert mit der zweitkürzesten Codelänge gepaart wird usw. Dieser Schritt wird für eine Mehrzahl von Tabellen parallel durchgeführt. Als Beispiel wird auf die 5a, b und c verwiesen, die Symbole und Zählwerte veranschaulichen, welche in die Tabellen aus den 2c, 3c und 4c geschrieben wurden.
  • Während jede Tabelle mit „Zählwert”- und „Symbol”-Werten gefüllt wird, wird in einem Register mit der Bezeichnung „Gesamtlänge” außerdem die Summe der Produkte „CodeLänge” × „Zählwert” gebildet. Gemäß einer beispielhaften Ausführungsform ist pro Tabelle ein Summenregister vorhanden. Der Wert für die Summe der Produkte ist gleich der Größe der komprimierten Daten, wenn die betreffende Tabelle für eine Huffman-Codierung der Eingabedaten verwendet worden wäre. Entsprechend wird das beste Komprimierungsverhältnis erreicht, wenn die Tabelle mit dem kleinsten Wert von „Gesamtlänge” für eine Komprimierung verwendet wird. So ist in dem Beispiel aus den 5a bis c die Tabelle mit dem kleinsten Wert von „GesamtLänge” diejenige in 5a, die eine Gesamtlänge (Län gesamt) von 2.920 Bits aufweist (verglichen mit 4.415 Bits und 12.635 Bits in den Tabellen aus den 5b und 5c).
  • Dabei ist zu bemerken, dass jede vorberechnete Baumform viele weitere untergeordnete Baumstrukturen enthält. Entsprechend repräsentiert jede Baumstruktur (daher die Tabelle) tatsächlich eine Mehrzahl von Baumstrukturen. Somit werden durch die begrenzte Anzahl von in Hardware realisierten Tabellen viele weitere Symbolverteilungen vorteilhafterweise repräsentiert. Wenn eine vorberechnete Baumform z. B. N Blätter aufweist, repräsentiert sie vorteilhafterweise rund N unterschiedliche Baumstrukturen mit N, N – 1, N – 2, N – 3, ... 3, 2, 1 Blättern. Abhängig von der Anzahl der codierten Datensymbole weist tatsächlich jede Tabelle die Form dieser Baumstruktur auf. So sollen die Eingabedaten zum Beispiel lediglich vier Symbole A, Z, B und Q enthalten, während die Tabelle Platz für 15 Symbole bietet. Siehe zum Beispiel die 5a bis c. Die Tabelle wird von oben nach unten mit den Symbolzählwerten 1.000, 500, 300 und 5 gefüllt. Die verbleibenden Tabelleneinträge für alle Tabellenzählwerte lauten weiterhin Null. Somit bildet die durch die einzelnen Tabellen gebildete Baumform letztendlich eine vierblättrige Baumstruktur, bei der es sich um eine untergeordnete Baumstruktur der ursprünglichen größeren Baumstruktur mit 15 Elementen handelt.
  • Mit Blick auf die obige Beschreibung wird im Folgenden eine beispielhafte Realisierung der vorliegenden Methoden zum Erzeugen einer dynamischen Huffman-Tabelle beschrieben, die sich auf eine Vorgehensweise 600 aus 6 bezieht. Wie oben hervorgehoben, wird ein Teil des Prozesses durchgeführt, um in Hardware realisierte Baumformen vorzuberechnen. Diese Vorberechnungsschritte müssen daher nur ein einziges Mal durchgeführt werden, z. B. während des Hardware-Entwurfs oder während der Einschaltinitialisierung der Hardware. Wenn die Komprimierungsoperation beginnt, werden den vorberechneten Baumformen für jede Komprimierungsoperation Symbole zugewiesen. Eine Vorberechnung einiger der Tabellenerzeugungsschritte (in Hardware) vereinfacht die während der Komprimierung benötigten Operationen und verbessert somit, verglichen mit anderen DH-Methoden, in erheblichem Maße die Geschwindigkeit und Effizienz des vorliegenden Prozesses.
  • Wie in 6 gezeigt, beginnt der Prozess zum Vorberechnen der Baumformen in Schritt 602, indem ein Satz von Symbolverteilungen für einen Beispielsatz von Dateien identifiziert wird. Da dies eine Vorberechnungsoperation ist (und ein bestimmter Eingabedatenstrom für eine Komprimierung noch nicht vorhanden ist), wird konkret ein Beispieldatensatz verwendet, um eine Mehrzahl von Baumformen zu berechnen. Gemäß einer beispielhaften Ausführungsform beinhaltet der Beispieldatensatz gemeinsam genutzte Dateien. Gemeinsam genutzte Dateien sind im Allgemeinen bereichsspezifisch. So können in einem Datenverarbeitungssystem, das englischen Text verarbeitet, Beispieldateien beispielsweise statistisch analysiert und Baumformen gemäß der Häufigkeit von Buchstaben des englischen Alphabets erzeugt werden. In einem anderen Beispiel können in einem Datenverarbeitungssystem, das Grafikdateien verarbeitet, Beispieldateien statistisch analysiert und Baumformen gemäß der Häufigkeit von Farbinformationen erzeugt werden usw.
  • In Schritt 604 werden, ebenfalls als eine vorberechnete Operation, DH-Codetabellen erzeugt, die den in dem Beispieldatensatz gefundenen Symbolverteilungen entsprechen. Wie oben erwähnt, genügen die Codelängen („CodeLänge”) für eine Beschreibung der Baumformen. Somit werden in Schritt 604 die „CodeLänge”-Felder der DH-Codetabellen unter Verwendung des Beispieldatensatzes mit Werten gefüllt. Die (zunächst auf 0 bzw. NULL gesetzten) Felder „Zählwert” und „Symbol” werden im Verlauf von Komprimierungsoperationen aktualisiert (siehe unten).
  • In Schritt 606 werden, erneut als eine vorberechnete Operation, Symbole aus den (in Schritt 604) erzeugten DH-Codetabellen entfernt, so dass nur Codes mit variabler Länge und Codelängen verbleiben. Wie oben verdeutlicht, erfordern die vorliegenden Methoden demnach ein Füllen der Tabellen während der Komprimierung, so dass durch ein Entfernen der Zuweisungen von Symbol zu Länge in Schritt 606 lediglich die Baumform übrig bleibt. Die tatsächliche Zuweisung von Symbol zu Länge erfolgt während der Komprimierung.
  • In Schritt 608 werden, erneut als eine vorberechnete Operation, der Code und die Codelängen sortiert, wobei die Codelänge als Sortierschlüssel von der kleinsten zur größten Länge verwendet wird. Wie oben erwähnt, besteht die Aufgabe hier konkret darin, den Abstand eines jeden Baumblatts von der Baumwurzel in einer Reihenfolge aufzulisten, die vom kürzesten Code zum längsten Code verläuft. Siehe zum Beispiel die 2c, 3c und 4c, bei denen „CodeLänge” vom kleinsten zum größten Wert sortiert wird.
  • In Schritt 610 werden die DH-Codetabellen in Hardware realisiert. Eine Realisierung in Hardware bedeutet, dass die Hardwareschaltkreise selbst die Operation durchführen, im Gegensatz zu Softwarerealisierungen, welche die in Hardwareform vorliegende Logik reproduzieren. Gemäß einer beispielhaften Ausführungsform werden die vorliegenden Methoden in Hardware unter Verwendung von SRAM-Modulen realisiert. Wie nach dem Stand der Technik bekannt, verwendet ein SRAM Flipflop-Schaltungen, um die einzelnen Datenbits zu speichern. Siehe zum Beispiel die Higuchi erteilte US-Patentschrift 5 744 844 mit dem Titel „CMOS SRAM Cell”.
  • Wie oben verdeutlicht, beinhaltet jede der in Hardware realisierten DH-Codetabellen vier Felder: „Code”, „CodeLänge”, „Symbol ”und „Zählwert”. In dieser Phase des Prozesses werden nur die Felder „Code” und „CodeLänge” mit Werten gefüllt. Die Felder „Code” und „Symbol” werden während einer Komprimierungsoperation aktualisiert (siehe unten).
  • Bei einer Realisierung in einem SRAM beinhaltet Schritt 610 gemäß einer beispielhaften Ausführungsform, jedes SRAM-Modul, beginnend mit dem ersten SRAM-Eintrag und von dort nacheinander fortschreitend, mit einer sortierten Liste von Code und Codelängen zu initialisieren. So wird jede Symbolverteilung aus Schritt 602 zum Beispiel in ein einziges SRAM-Modul geschrieben, indem ein einziges Summenregister pro Symbolverteilung initialisiert wird. Wie nach dem Stand der Technik bekannt, ist ein Summenregister ein Register, in dem Logik-Zwischenergebnisse gespeichert werden können.
  • Die Vorberechnungsphase des Prozesses ist damit abgeschlossen. Die Schritte 602 bis 610 müssen nur einmal durchgeführt werden, z. B. während des Hardware-Entwurfs oder der Hardware-Initialisierung. Die Komprimierungsoperation beginnt in Schritt 612, nachdem z. B. ein Eingabedatenstrom empfangen wurde. Im Gegensatz zu den Vorberechnungsoperationen werden die Komprimierungsschritte 612 bis 626 für jede Komprimierungsoperation durchgeführt.
  • In Schritt 614 werden die Felder „Symbol” und „Zählwert” der DH-Codetabellen mit den Werten NULL bzw. 0 initialisiert. Somit sind aktuell nur die Felder „Code” und „CodeLänge” (aus den Vorberechnungsschritten) mit Werten gefüllt.
  • Um die Verarbeitung des zu komprimierenden Eingabedatenstroms zu beginnen, werden in Schritt 616 die Symbole in dem Eingabedatenstrom gezählt. In Schritt 618 werden die Symbole in dem Eingabedatenstrom und ihre betreffenden Zählwerte von den Zählwerten mit der größten zu den Zählwerten mit der kleinsten Häufigkeit sortiert, wobei der Zählwert als der Sortierschlüssel verwendet wird.
  • In Schritt 620 werden die Symbole und Zählwerte aus dem Eingabedatenstrom in Hardware in die DH-Codetabellen geschrieben. Bis hierhin wurden nur die Felder „Code” und „CodeLänge” der Tabellen mit Werten gefüllt. Bei einer Realisierung in einem SRAM beinhaltet Schritt 620 gemäß einer beispielhaften Ausführungsform, die Felder „Symbol” und „Zählwert” der DH-Codetabellen beginnend mit dem ersten SRAM-Eintrag und von dort nacheinander fortschreitend in den SRAM zu schreiben. Wie oben erwähnt, beinhaltete ein Realisieren der vorliegenden Tabellen in SRAM-Hardware, jedes SRAM-Modul mit einer sortierten Liste von Code und Codelängen zu initialisieren, wobei jede Symbolverteilung in ein einziges SRAM-Modul geschrieben wird. Nun werden die Symbole und Zählwerte in jedes der SRAM-Module geschrieben. Wie unten ausführlich beschrieben, lautet das Ziel hier, die Symbolverteilung mit dem kleinsten Zählwert auszuwählen, um den Eingabedatenstrom mit variabler Länge zu codieren. Da in jedes der SRAM-Module eine andere Symbolverteilung geschrieben wird, kann (gemäß Schritt 620) durch Anwenden der Symbolzählwerte auf jede dieser Verteilungen ermittelt werden, welche dieser Verteilungen den kleinsten Zählwert ergibt.
  • Für jeden in Schritt 620 geschriebenen Eintrag wird in Schritt 622 (laut Schritt 610 – siehe oben) die Codelänge gelesen. In Schritt 624 wird die Codelänge mit dem Zählwert multipliziert und der Wert in das Summenregister geschrieben. Die Schritte 622 und 624 werden so lange wiederholt, bis alle Symbole und Zählwerte z. B. in die SRAM-Module geschrieben wurden.
  • In Schritt 626 wird die DH-Codetabelle, die den niedrigsten Zählwert ergibt, für ein Codieren des Eingabedatenstroms ausgewählt. Bei der beispielhaften Realisierung in einem SRAM kann das Summenregister mit dem kleinsten Zählwert in Schritt 626 identifiziert werden, und die betreffenden SRAM-Modulinhalte werden dazu verwendet, die Eingabedaten, d. h. die Codes und Codelängen, mit variabler Länge zu codieren.
  • Das vorliegende Konzept eines Schreibens von Symbolen und Zählwerten aus Eingabedaten in die vorberechneten DH-Tabellen in Hardware und eines Auswählens der Tabelle mit dem kleinsten Zählwert zur Verwendung beim Codieren der Eingabedaten wird mit Bezug auf das folgende, nicht als Einschränkung zu verstehende Beispiel weiter veranschaulicht. In diesem Beispiel sollen aus Gründen der Einfachheit die in den 2c, 3c und 4c gezeigten DH-Tabellen aus den Beispieldaten erhalten und diese Tabellen wie oben beschrieben in den SRAM-Modulen realisiert werden. Nach dem Empfang von Eingabedaten werden die Symbole und ihre betreffenden Zählwerte in die Tabellen aus den 2c, 3c und 4c geschrieben. Das Ziel besteht darin, zunächst die Größe der Ausgabe zu berechnen, wenn jede Tabelle für die Eingabedaten verwendet wird, und anschließend die Tabelle auszuwählen, welche die geringste Ausgabegröße (d. h. die kleinste Tabelle) für ein Codieren der Daten ergibt. So kann ein Füllen der Tabelle aus 2c zum Beispiel folgendermaßen ablaufen: Wenn das Symbol A eine Codelänge von 1 und einen Zählwert von 1.000 hat, würde der erste Eintrag in der Tabelle {CodeLänge, Zählwert, Symbol} = {1, 1000, A} lauten; wenn das Symbol B eine Codelänge von 2 und einen Zählwert von 500 hat, würde der zweite Eintrag in der Tabelle {CodeLänge, Zählwert, Symbol} = {2, 500, B} lauten; usw. Derselbe Prozess wird durchgeführt, wenn die Tabellen aus den 3c und 4c mit Werten gefüllt werden. Auf Grundlage des Produkts aus den Codelängen und Zählwerten wird danach für die Gesamtzählwerte in jeder der Tabellen eine Wertung erzeugt. So würde in dem vorliegenden Beispiel die Wertung für die Tabelle aus 2c zum Beispiel als 1 × 1.000 (für den Eintrag in der Tabelle für Symbol A) + 2 × 500 (für den Eintrag in der Tabelle für Symbol B) ... usw. berechnet werden. Hieraus wird eine einzige Wertung erzeugt, welche die Größe der Ausgabe repräsentiert, wenn die Tabelle aus 2c verwendet wird. Derselbe Prozess wird dann verwendet, um eine Wertung für die Tabelle aus 3c und eine Wertung für die Tabelle aus 4c zu berechnen. Bei einer Realisierung in einem SRAM kann jede Wertung in dem Summenregister des betreffenden Moduls gespeichert werden. Die Wertung für jede Tabelle wird mit den anderen Wertungen verglichen, und die Tabelle, welche die niedrigste Wertung für die Eingabedaten ergibt, wird für ein Codieren ausgewählt. Diese Tabelle mit der niedrigsten Wertung erzeugt die geringste Ausgabegröße für die Eingabedaten.
  • Die vorliegende Erfindung kann ein System, ein Verfahren und/oder ein Computerprogrammprodukt sein. Das Computerprogrammprodukt kann ein computerlesbares Speichermedium (oder -medien) mit darauf enthaltenen computerlesbaren Programmbefehlen beinhalten, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung durchzuführen.
  • Das computerlesbare Speichermedium kann eine gegenständliche Einheit sein, die Befehle zur Verwendung durch eine Befehlsausführungseinheit beibehalten und speichern kann. Das computerlesbare Speichermedium kann z. B. eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder eine beliebige geeignete Kombination der vorgenannten Einheiten sein, ohne jedoch darauf beschränkt zu sein. Eine nicht vollständige Liste konkreterer Beispiele des computerlesbaren Speichermediums beinhaltet Folgendes: eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Festwertspeicher (ROM), einen löschbaren, programmierbaren Nur-Lese-Speicher (EPROM- oder Flash-Speicher), einen statischen Direktzugriffsspeicher (SRAM), einen tragbaren CD-ROM, eine DVD, einen Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie z. B. Lochkarten oder erhabene Strukturen in einer Rille mit darauf aufgezeichneten Befehlen sowie eine beliebige geeignete Kombination der vorgenannten Elemente. Bei einem computerlesbaren Speichermedium, wie es hier verwendet wird, ist nicht davon auszugehen, dass es sich per se um flüchtige Signale wie z. B. Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Hohlleiter oder ein anderes Übertragungsmedien ausbreiten (z. B. Lichtimpulse, die ein Lichtwellenleiterkabel durchlaufen), oder elektrische Signalen, die über eine Leitung übertragen werden, handelt.
  • Hier beschriebene computerlesbare Programmbefehle können über ein Netzwerk wie beispielsweise das Internet, ein lokales Netz (Local Area Network, LAN), ein Weitverkehrsnetz (Wide Area Network, WAN) und/oder ein drahtloses Netzwerk von einem computerlesbaren Speichermedium auf entsprechende Datenverarbeitungs-/Verarbeitungs-Einheiten oder auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenleiter, eine drahtlose Übertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungs-Einheit empfängt computerlesbare Programmbefehle von dem Netzwerk und leitet die computerlesbaren Programmbefehle zur Speicherung auf einem computerlesbaren Speichermedium innerhalb der betreffenden Datenverarbeitungs-/Verarbeitungs-Einheit weiter.
  • Bei computerlesbaren Programmbefehlen zum Durchführen von Operationen der vorliegenden Erfindung kann es sich um Assembler-Befehle, ISA-Befehle (Instruction-Set-Architecture), Maschinenbefehle, maschinenabhängige Befehle, Mikrocode, Firmware-Befehle, einen Zustand festlegende Daten oder aber entweder um Quellcode oder um Objektcode handeln, der in einer beliebigen Kombination von einer oder mehreren Programmiersprachen wie z. B. einer objektorientierten Programmiersprache wie Smalltalk, C++ oder dergleichen, sowie in herkömmlichen prozeduralen Programmiersprachen wie z. B. der Programmiersprache „C” oder ähnlichen Programmiersprachen geschrieben ist. Die computerlesbaren Programmbefehle können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder aber vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. Im letztgenannten Szenario kann der entfernt angeordnete Computer über eine beliebige Art von Netzwerk, unter anderem ein lokales Netz (LAN) oder ein Weitverkehrsnetz (WAN), mit dem Computer des Benutzers verbunden sein, oder die Verbindung kann mit einem externen Computer (z. B. über das Internet unter Verwendung eines Internet-Dienstanbieters) hergestellt werden. Bei manchen Ausführungsformen kann ein elektronischer Schaltkreis wie z. B. ein programmierbarer Logikschaltkreis, Field-Programmable Gate Arrays (FPGAs) oder Programmable Logic Arrays (PLAs) die computerlesbaren Programmbefehle ausführen, indem er Zustandsdaten der computerlesbaren Programmbefehle verwendet, um die elektronische Schaltung zu personalisieren und Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung werden hier unter Bezugnahme auf Darstellungen von Ablaufplänen und/oder Blockschaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Dabei dürfte klar sein, dass jeder Block der Ablaufplan-Darstellungen und/oder Blockschaubilder sowie Kombinationen von Blöcken in den Ablaufplan-Darstellungen und/oder Blockschaubildern durch computerlesbare Programmbefehle realisiert werden kann/können.
  • Diese computerlesbaren Programmbefehle können einem Prozessor eines Universalcomputers, Spezialcomputers oder einer anderweitigen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die Befehle, die über den Prozessor des Computers oder der anderweitigen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, ein Mittel erzeugen, mit dem die Funktionen/Handlungen realisiert werden können, die in dem Block bzw. den Blöcken des Ablaufplans und/oder des Blockschaubilds angegeben werden. Diese computerlesbaren Programmbefehle können auch auf einem computerlesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten anweisen kann, auf eine bestimmte Art und Weise zu funktionieren, so dass das computerlesbare Speichermedium mit darauf gespeicherten Befehlen einen Herstellungsartikel aufweist, der Befehle enthält, welche Aspekte der in dem Block bzw. den Blöcken des Ablaufplans und/oder des Blockschaubilds angegebenen Funktion/Handlung realisieren.
  • Die computerlesbaren Programmbefehle können zudem in einen Computer, eine anderweitige programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um zu veranlassen, dass eine Reihe von Funktionsschritten auf dem Computer, der anderweitigen programmierbaren Datenvorrichtung oder der anderen Einheit ausgeführt wird, so dass die Befehle, die auf dem Computer, der anderweitigen Datenverarbeitungsvorrichtung oder der anderen Einheit ausgeführt werden, die in dem Block bzw. den Blöcken des Ablaufplans und/oder des Blockschaubilds angegebenen Funktionen/Handlungen realisieren.
  • Die Ablaufpläne und die Blockschaubilder in den Figuren stellen die Architektur, Funktionalität und den Betrieb möglicher Realisierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung bereit. Somit kann jeder Block der Ablaufpläne oder Blockschaubilder ein Modul, Segment oder einen Teil von Befehlen darstellen, das/der einen oder mehrere ausführbare Befehle aufweist, mit denen sich die eine oder mehreren angegebenen logischen Funktionen realisieren lassen. Bei manchen alternativen Ausführungsformen können die in dem Block erwähnten Funktionen in einer anderen Reihenfolge als der in den Figuren genannten auftreten. So können zwei aufeinanderfolgend dargestellte Blöcke tatsächlich im Wesentlichen gleichzeitig stattfinden, oder die Blöcke können mitunter in umgekehrter Reihenfolge ausgeführt werden, wobei dies abhängig von der betreffenden Funktionalität ist. Zu erwähnen ist ebenfalls, dass jeder Block der Blockschaubilder und/oder der Ablaufplan-Darstellungen sowie Kombinationen von Blöcken in den Blockschaubildern und/oder Ablaufplan-Darstellungen durch Spezialsysteme auf Hardwaregrundlage, welche die angegebenen Funktionen oder Handlungen oder Kombinationen hiervon ausführen, oder durch Kombinationen von Spezial-Hardware- und Computerbefehlen realisiert bzw. durchgeführt werden kann/können.
  • Mit Blick auf 7 wird ein Blockschaubild einer Vorrichtung 700 gezeigt, um eine oder mehrere der hier dargelegten Vorgehensweisen zu realisieren. Lediglich als Beispiel dienend, kann die Vorrichtung 700 so konfiguriert sein, dass sie einen oder mehrere Schritte der Vorgehensweise 600 aus 6 realisiert.
  • Die Vorrichtung 700 beinhaltet ein Computersystem 710 und einen Wechseldatenträger 750. Ein Computersystem 710 beinhaltet eine Prozessoreinheit 720, eine Netzwerkschnittstelle 725, einen Arbeitsspeicher 730, eine Datenträgerschnittstelle 735 und eine optionale Anzeige 740. Die Netzwerkschnittstelle 725 ermöglicht dem Computersystem 710 die Verbindung mit einem Netzwerk, während die Medienschnittstelle 735 dem Computersystem 710 die Interaktion mit einem Datenträger z. B. einer Festplatte oder einem Wechseldatenträger 750 ermöglicht.
  • Die Prozessoreinheit 720 kann so konfiguriert sein, dass sie die hier offenbarten Verfahren, Schritte und Funktionen realisiert. Der Arbeitsspeicher 730 kann verteilt oder lokal sein, und die Prozessoreinheit 720 kann verteilt oder einzeln sein. Der Arbeitsspeicher 730 kann als ein elektrischer, magnetischer oder optischer Arbeitsspeicher oder als eine beliebige Kombination dieser oder anderer Arten von Speichereinheiten realisiert sein. Darüber hinaus sollte der Begriff „Arbeitsspeicher” ausreichend breit gefasst werden, um jede Information zu beinhalten, die aus einer Adresse in dem adressierbaren Raum, auf den die Prozessoreinheit 720 zugreift, gelesen werden bzw. in diese geschrieben werden kann. Auch bei dieser Definition befinden sich Informationen in einem Netzwerk, auf das über die Netzwerkschnittstelle 725 zugegriffen werden kann, innerhalb des Arbeitsspeichers 730, da die Prozessoreinheit 720 die Informationen aus dem Netzwerk abrufen kann. Dabei sollte beachtet werden, dass jeder verteilte Prozessor, der die Prozessoreinheit 720 bildet, im Allgemeinen seinen eigenen adressierbaren Arbeitsspeicherraum enthält. Beachtet werden sollte ferner, dass das Computersystem 710 teilweise oder vollständig in einem anwendungsspezifischen oder universellen integrierten Schaltkreis enthalten sein kann.
  • Die optionale Anzeige 740 ist jede Art von Anzeige, die geeignet ist, um mit einem menschlichen Benutzer der Vorrichtung 700 zu interagieren. Im Allgemeinen ist die Anzeige 740 ein Computermonitor oder eine ähnliche Anzeige.
  • Obwohl hier veranschaulichende Ausführungsformen der vorliegenden Erfindung beschrieben wurden, sollte klar sein, dass die Erfindung nicht auf exakt diese Ausführungsformen beschränkt ist und dass ein Fachmann verschiedene andere Änderungen und Abwandlungen vornehmen kann, ohne vom inhaltlichen Umfang der Erfindung abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 5744844 [0045]

Claims (13)

  1. Verfahren zum Codieren von Daten, wobei das Verfahren die Schritte aufweist: Realisieren von dynamischen Huffman-Tabellen in Hardware, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet wurden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden; Schreiben von Symbolen und ihren Zählwerten aus den Eingabedaten in die dynamischen Huffman-Tabellen nach dem Empfang von Eingabedaten; Berechnen einer Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und Auswählen einer gegebenen der dynamischen Huffman-Tabellen mit einer niedrigsten Wertung für ein Codieren der Eingabedaten.
  2. Verfahren nach Anspruch 1, wobei die dynamischen Huffman-Tabellen in statischen Direktzugriffsspeicher-Modulen (Static Random Access Memory, SRAM) realisiert werden.
  3. Verfahren nach Anspruch 2, wobei der Schritt des Realisierens der dynamischen Huffman-Tabellen in Hardware den Schritt aufweist des: Initialisierens eines jeden der SRAM-Module mit einer sortierten Liste der Codelängenwerte für eine der dynamischen Huffman-Tabellen.
  4. Verfahren nach Anspruch 2, wobei der Schritt eines Schreibens der Symbole und ihrer Zählwerte aus den Eingabedaten in die dynamischen Huffman-Tabellen, den Schritt aufweist: Schreiben der Symbole und ihrer Zählwerte aus den Eingabedaten in jedes der SRAM-Module.
  5. Verfahren nach Anspruch 1, wobei der Schritt des Berechnens der Werte für jede der dynamischen Huffman-Tabellen den Schritt aufweist: Ermitteln einer Summe eines Produkts aus einem vorberechneten Codelängenwert und einem Zählwert aus den Eingabedaten für jeden Eintrag in jeder der dynamischen Huffman-Tabellen.
  6. Verfahren nach Anspruch 1, wobei der Schritt des Realisierens von dynamischen Huffman-Tabellen in Hardware des Weiteren den Schritt aufweist: Identifizieren eines Satzes von Symbolverteilungen für den Beispieldatensatz.
  7. Verfahren nach Anspruch 1, wobei der Schritt des Realisierens von dynamischen Huffman-Tabellen in Hardware des Weiteren den Schritt aufweist: Entfernen von Symbolen aus den dynamischen Huffman-Tabellen, so dass lediglich variable Codelängenwerte verbleiben.
  8. Verfahren nach Anspruch 1, wobei der Schritt des Realisierens von dynamischen Huffman-Tabellen in Hardware des Weiteren den Schritt aufweist: Sortieren der Codelängenwerte in den dynamischen Huffman-Tabellen vom kleinsten zum größten Wert.
  9. Verfahren nach Anspruch 1, des Weiteren aufweisend den Schritt: Initialisieren von Symbolfeldern in den dynamischen Huffman-Tabellen auf NULL und von Zählwertfeldern in den dynamischen Huffman-Tabellen auf 0 nach dem Empfang von Eingabedaten.
  10. Verfahren nach Anspruch 1, des Weiteren aufweisend den Schritt: Zählen der Symbole in den Eingabedaten.
  11. Verfahren nach Anspruch 1, des Weiteren aufweisend den Schritt: Sortieren der Symbole in den Eingabedaten nach ihrem Zählwert vom Zählwert mit der größten zum Zählwert mit der kleinsten Häufigkeit.
  12. Computerprogrammprodukt zum Codieren von Daten, wobei das Computerprogrammprodukt ein computerlesbares Speichermedium mit darauf enthaltenen Programmbefehlen aufweist, wobei die Programmbefehle durch ein Computersystem ausführbar sind, um den Computer zu veranlassen: dynamische Huffman-Tabellen in Hardware zu realisieren, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet wurden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden; nach dem Empfang von Eingabedaten Symbole und ihre Zählwerte aus den Eingabedaten in die dynamischen Huffman-Tabellen zu schreiben; eine Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten zu berechnen, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und eine gegebene Tabelle aus den dynamischen Huffman-Tabellen, die eine niedrigste Wertung aufweist, für ein Codieren der Eingabedaten auszuwählen.
  13. Verfahren zum Codieren von Daten, wobei das Verfahren die Schritte aufweist: Realisieren von dynamischen Huffman-Tabellen in Hardware, die eine Mehrzahl von Huffman-Baumformen repräsentieren, welche aus einem Beispieldatensatz vorberechnet werden, wobei die Huffman-Baumformen in den dynamischen Huffman-Tabellen durch Codelängenwerte repräsentiert werden, wobei die Hardware SRAM-Module aufweist und wobei die dynamischen Huffman-Tabellen in der Hardware realisiert werden, indem jedes der SRAM-Module mit einer sortierten Liste der Codelängenwerte für eine der dynamischen Huffman-Tabellen initialisiert wird; Schreiben von Symbolen und ihren Zählwerten aus den Eingabedaten in die dynamischen Huffman-Tabellen in jedes der SRAM-Module nach dem Empfang von Eingabedaten; Berechnen einer Wertung für jede der dynamischen Huffman-Tabellen mit den Symbolen und Zählwerten aus den Eingabedaten, wobei die Wertung auf den Codelängenwerten der vorberechneten Huffman-Baumformen und den Zählwerten aus den Eingabedaten beruht; und Auswählen einer gegebenen der dynamischen Huffman-Tabellen mit einer niedrigsten Wertung für ein Codieren der Eingabedaten.
DE102016220801.2A 2015-11-17 2016-10-24 Erzeugen einer dynamischen Huffman-Tabelle Active DE102016220801B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/943,590 US9584156B1 (en) 2015-11-17 2015-11-17 Creating a dynamic Huffman table
US14/943,590 2015-11-17

Publications (2)

Publication Number Publication Date
DE102016220801A1 true DE102016220801A1 (de) 2017-05-18
DE102016220801B4 DE102016220801B4 (de) 2019-05-09

Family

ID=57139845

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016220801.2A Active DE102016220801B4 (de) 2015-11-17 2016-10-24 Erzeugen einer dynamischen Huffman-Tabelle

Country Status (4)

Country Link
US (1) US9584156B1 (de)
JP (1) JP6681313B2 (de)
DE (1) DE102016220801B4 (de)
GB (1) GB2544587B (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10693493B1 (en) * 2019-02-14 2020-06-23 International Business Machines Corporation Reducing latch count to save hardware area for dynamic Huffman table generation
US10651871B1 (en) * 2019-07-10 2020-05-12 Citrix Systems, Inc. Real-time history-based byte stream compression
US11663119B2 (en) 2020-05-29 2023-05-30 International Business Machines Corporation Select decompression headers and symbol start indicators used in writing decompressed data
CN112437060B (zh) * 2020-11-11 2022-11-18 平安普惠企业管理有限公司 一种数据传输方法、装置、计算机设备及存储介质
CN113708772A (zh) * 2021-08-11 2021-11-26 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼编码方法、系统、装置及可读存储介质
CN113676187B (zh) * 2021-08-11 2024-07-05 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼修正编码方法、系统及相关组件
CN113965207B (zh) * 2021-12-17 2022-03-15 苏州浪潮智能科技有限公司 一种基于deflate霍夫曼编码的动态码表生成装置和方法
US20240022260A1 (en) * 2022-07-12 2024-01-18 Samsung Display Co., Ltd. Low complexity optimal parallel huffman encoder and decoder

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5744844A (en) 1996-03-29 1998-04-28 Fujitsu Limited CMOS SRAM cell

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5848195A (en) * 1995-12-06 1998-12-08 Intel Corporation Selection of huffman tables for signal encoding
US5953503A (en) 1997-10-29 1999-09-14 Digital Equipment Corporation Compression protocol with multiple preset dictionaries
US6839005B1 (en) * 2003-11-07 2005-01-04 Broadcom Corporation Low memory and MIPS efficient technique for decoding Huffman codes using multi-stage, multi-bits lookup at different levels
US7737870B1 (en) * 2007-09-04 2010-06-15 Nortel Networks Limited Bit-stream huffman coding for data compression
US7834781B2 (en) 2009-04-06 2010-11-16 International Business Machines Corporation Method of constructing an approximated dynamic Huffman table for use in data compression
TWI343192B (en) * 2009-06-12 2011-06-01 Ind Tech Res Inst Decoding method
JP5087166B2 (ja) * 2011-11-02 2012-11-28 日本電信電話株式会社 符号表選択方法、符号化装置、及びプログラム
US8610606B2 (en) 2011-11-24 2013-12-17 International Business Machines Corporation Compression algorithm incorporating dynamic selection of a predefined huffman dictionary

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5744844A (en) 1996-03-29 1998-04-28 Fujitsu Limited CMOS SRAM cell

Also Published As

Publication number Publication date
GB2544587B (en) 2018-02-07
DE102016220801B4 (de) 2019-05-09
GB201615020D0 (en) 2016-10-19
JP6681313B2 (ja) 2020-04-15
GB2544587A (en) 2017-05-24
US9584156B1 (en) 2017-02-28
JP2017098946A (ja) 2017-06-01

Similar Documents

Publication Publication Date Title
DE102016220801B4 (de) Erzeugen einer dynamischen Huffman-Tabelle
DE10301362B4 (de) Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche
DE102009022233A1 (de) Verwendung einer Zeichenkette in Sytemen der Kryptographie, der Statistik, der Simulation, der Randomisierung, von Spielautomaten und dgl.
DE19742417B4 (de) Vorrichtung und Verfahren zur Durchführung von M-fachem Maschinenendzustands-Entropiekodieren bzw. Entropiekodieren mit einer Maschine mit finitem Zustand
DE10196890B4 (de) Verfahren zum Ausführen einer Huffman-Decodierung
DE112012005557B4 (de) Erzeugen eines Code-Alphabets von Symbolen zum Erzeugen von Codewörtern für Wörter, die mit einem Programm verwendet werden
DE112011106024B4 (de) Erzeugungsvorrichtung für vorrichtungsspezifische Informationen und Erzeugungsverfahren für vorrichtungsspezifische Informationen
DE3485824T2 (de) Verfahren zur datenkompression.
EP2068448B1 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen
DE102014208212A1 (de) Ableiten eines gerätespezifischen Wertes
DE69722085T2 (de) Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Botschaften
DE112015003926T5 (de) Publish/Subscribe-Messaging unter Verwendung einer Nachrichtenstruktur
DE1474040B2 (de) Einrichtung zur Bildung von Speicheradressen
DE102016205013A1 (de) Fingerabdruckerstellung und Vergleichen von Protokolldatenströmen
DE102008054354B4 (de) Sichere Codierung von Spannungsdaten vieler Zellen bei Hybridfahrzeugen
EP0479787B1 (de) Verfahren zur codierung einer elementfolge und einrichtung zur durchführung des verfahrens
DE69103562T2 (de) Einrichtung zur Kondensation von digitalen Daten.
DE202022101746U1 (de) Ein wahrnehmungsbasiertes Hashing-System, das Kaze-Merkmalsdeskriptoren für kombinatorische Manipulationen verwendet
DE10131801B4 (de) Verfahren zur Datenkompression und Navigationssystem
EP1186175B1 (de) Verfahren und vorrichtung zur komprimierung und dekomprimierung von daten
Schmidt Zwischen Berechenbarkeit und Nichtberechenbarkeit. Die Thematisierung der Berechenbarkeit in der aktuellen Physik komplexer Systeme
DE102019124889A1 (de) Verfahren zur Übertragung von Daten und Empfangsvorrichtung zum Empfangen von Daten
DE102006047465A1 (de) Verfahren und Vorrichtung zur Kompression und Dekompression digitaler Daten auf elektronischem Wege unter Verwendung einer Kontextgrammatik
DE102012021394A1 (de) Verfahren zur speichereffizienten Umwandlung nichtbinärer Daten in Binärdaten und binärer Daten in nichtbinäre Daten in Computerprogrammen für Datenverarbeitungsanlagen
DE3615255C2 (de)

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final