-
GEBIET DER ERFINDUNG
-
Die Erfindung betrifft eine Computervorrichtung und ein Computersystem zum Entropiedecodieren.
-
ANGABEN ZU VERWANDTEN ANMELDUNGEN
-
Es wird die Priorität der vorläufigen US-Patentanmeldung No. 60/408,538, eingereicht am 4. September 2002, in Anspruch genommen, deren Offenbarung hiermit durch Bezugnahme enthalten ist, sowie der US-Patentanmeldung 10/647,923, eingereicht am 25. August 2003.
-
Die folgenden gleichzeitig eingereichten US-Patentanmeldungen sind mit der vorliegenden Anmeldung verwandt: (1) die vorläufige US-Patentanmeldung mit der Seriennummer 60/408,517 und dem Titel „Architecture and Techniques for Audio Encoding and Decoding”, eingereicht am 4. September 2002, deren Offenbarung hiermit durch Bezugnahme enthalten ist; und (2) die vorläufige US-Patentanmeldung mit der Seriennummer 60/408,432 und dem Titel „Unified Lossy and Lossless Audio Compression”, eingereicht am 4. September 2002, deren Offenbarung hiermit durch Bezugnahme enthalten ist.
-
HINTERGRUND DER ERFINDUNG
-
Mit der Einführung von Compact Discs, digitalen drahtlosen Telefonnetzwerken und der Verteilung von Audiodaten über das Intranet haben sich digitale Audiodaten stark verbreitet. Ingenieure bedienen sich einer Vielzahl von Techniken zur effizienten Verarbeitung von digitalen Audiodaten bei gleichzeitiger Aufrechterhaltung der Qualität dieser digitalen Audiodaten. Um diese Techniken zu verstehen, ist ein Verständnis dahingehend von Vorteil, wie Audioinformation in einem Computer dargestellt und verarbeitet wird.
-
I. Darstellung von Audioinformation in einem Computer
-
Ein Computer verarbeitet Audioinformation als Reihe von Zahlen, die die Audioinformation darstellen. So kann eine einzelne Zahl beispielsweise eine Audioabtastung (audio sample) darstellen, die ein Amplitudenwert (beispielsweise die Lautstärke) zu einer bestimmten Zeit ist. Bestimmte Faktoren nehmen auf die Qualität der Audioinformation Einfluss, darunter die Abtasttiefe (sample depth), die Abtastrate (sampling rate) und der Kanalmodus.
-
Die Abtasttiefe (oder Abtastgenauigkeit) gibt den Bereich von Zahlen an, der zur Darstellung einer Abtastung verwendet wird. Je mehr Werte für die Abtastung möglich sind, desto höher ist die Qualität, da die Anzahl feiner Schwankungen der Amplitude besser erfasst werden kann. So weist beispielsweise eine 8 Bit umfassende Abtastung 256 mögliche Werte auf, wohingegen eine 16 Bit umfassende Abtastung 65.536 mögliche Werte aufweist.
-
Die Abtastrate (üblicherweise als Zahl der Abtastungen pro Sekunde gemessen) hat ebenfalls Einfluss auf die Qualität. Je höher die Abtastrate ist, desto höher ist die Qualität, da mehr Frequenzen des Tones dargestellt werden können. Gängige Abtastraten sind 8.000, 11.025, 22.050, 32,000, 44.100, 48.000 und 96.000 Abtastungen pro Sekunde (samples/second).
-
Tabelle 1 zeigt verschiedenen Audioformate mit verschiedenen Qualitätsniveaus zusammen mit dem entsprechenden Aufwand für die Rohbitrate. Tabelle 1: Bitraten für Audioinformation verschiedener Qualität
Qualität | Abtasttiefe (Bit/Abtastungen) | Abtastrate (Abtastungen/Sekunde) | Modus | Rohbitrate (Bit/Sekunde) |
Telefonieren via Internet | 8 | 8.000 | mono | 64.000 |
Telefon | 8 | 11.025 | mono | 88.200 |
CD Audio | 16 | 44.100 | stereo | 1.411.200 |
Qualitativ hochwertiges Audio | 16 | 48.000 | stereo | 1.536.000 |
-
Wie Tabelle 1 zeigt, geht Audioinformation hoher Qualität, so beispielsweise der Audioton auf einer CD, mit einer hohen Bitrate einher. Audioinformation hoher Qualität belegt große Mengen des Speicherplatzes und der Übertragungskapazität. Firmen und Verbraucher hängen indes in zunehmendem Maße von Computern ab, wenn sie Audioinhalt hoher Qualität erzeugen, verteilen und abspielen.
-
II. Audiokompression und -dekompression
-
Viele Computer und Computernetzwerke verfügen nicht über die Ressourcen, digitale Rohaudiodaten zu verarbeiten. Die Kompression (auch Codierung (encoding oder coding) genannt) senkt den Aufwand für das Speichern und Übertragen von Audioinformation durch Transformieren der Information in eine Form mit niedrigerer Bitrate. Die Kompression kann verlustfrei (Hierbei wird die Qualität nicht beeinträchtigt) oder verlustbehaftet (Hierbei wird die Qualität beeinträchtigt, wobei die Verringerung der Bitrate durch verlustfreie Kompression dramatischer ist) sein. Die Dekompression (auch Decodierung (decoding) genannt) extrahiert eine rekonstruierte Fassung der Originalinformation aus der komprimierten Form.
-
Im Allgemeinen besteht das Ziel der Kompression von Audiodaten darin, Audiosignale digital darzustellen, um eine maximale Signalqualität mit möglichst niedriger Menge von Bits zu erreichen. Ein herkömmliches Audiocodier-/Decodiersystem (CODEC) verwendet die Subband-/Transformationscodierung, die Quantisierung, die Ratensteuerung und die Codierung mit variabler Länge, um diese Kompression zu erreichen. Die Quantisierung und andere verlustbehaftete Kompressionstechniken fügen den Audiosignalen ein unter Umständen hörbares Rauschen hinzu. Die Hörbarkeit des Rauschens hängt davon ab, wie viel Rauschen vorhanden ist und wie viel Rauschen der Hörer wahrnimmt. Der erste Faktor betrifft hauptsächlich die objektive Qualität, wohingegen der zweite Faktor von der Wahrnehmung des Tones durch einen Menschen abhängt. Ein herkömmlicher Audiocodierer komprimiert sodann die quantisierten Daten unter Verwendung einer Codierung mit variabler Länge verlustfrei, um die Bitrate weiter zu verringern.
-
A. Verlustbehaftete Kompression und Dekompression von Audiodaten
-
Üblicherweise bedient sich ein Audiocodierer einer Vielzahl von verschiedenen verlustbehafteten Kompressionstechniken. Diese verlustbehafteten Kompressionstechniken sind üblicherweise Frequenztransformationen, das Wahrnehmungsmodellieren/Gewichten und das Quantisieren. Die entsprechende Dekompression ist die inverse Quantisierung, das inverse Gewichten beziehungsweise inverse Frequenztransformationen.
-
Frequenztransformationstechniken wandeln Daten in eine Form um, die es einfacher macht, für die Wahrnehmung wichtige Information von für die Wahrnehmung unwichtiger Information zu trennen. Die weniger wichtige Information kann dann einer stärker verlustbehafteten Kompressionen unterworfen werden, während die wichtigere Information erhalten bleibt, um auf diese Weise bei gegebener Bitrate die beste wahrnehmbare Qualität zu erhalten. Ein Frequenztransformierer empfängt üblicherweise die Audioabtastungen und wandelt sie in Daten im Frequenzbereich um, die bisweilen Frequenzkoeffizienten oder Spektralkoeffizienten genannt werden.
-
Ein Großteil der Energie bei natürlichen Lauten, so beispielsweise bei Sprache und Musik, ist im Niederfrequenzbereich konzentriert. Dies bedeutet, dass höhere Frequenzbereiche statistisch mehr Frequenzkoeffizienten aufweisen, die gleich 0 oder nahezu gleich 0 sind, was den Mangel an Energie in den höheren Frequenzbereichen widerspiegelt.
-
Das Wahrnehmungsmodellieren beinhaltet das Verarbeiten von Audiodaten entsprechend einem Modell des menschlichen Gehörsystems, um die wahrgenommene Qualität des rekonstruierten Audiosignals für eine gegebene Bitrate zu verbessern. Ein Gehörmodell befasst sich üblicherweise mit dem Bereich des menschlichen Gehörs und kritischen Bändern. Unter Verwendung der Ergebnisse des Wahrnehmungsmodellierens formt ein Codierer ein Rauschen (beispielsweise ein Quantisierungsrauschen) in den Audiodaten, mit der Absicht, die Hörbarkeit des Rauschens für eine gegebene Bitrate zu minimieren. Obwohl der Codierer bisweilen ein Rauschen (beispielsweise ein Quantisierungsrauschen) zur Verringerung der Bitrate einfügen muss, ermöglicht das Gewichten, dass der Codierer mehr Rauschen in Bänder einfügt, in denen es weniger hörbar ist, und umgekehrt.
-
Das Quantisieren bildet Bereiche von Eingabewerten auf einzelne Werte ab, was mit einem irreversiblen Verlust von Information oder Quantisierungsrauschen einhergeht, einen Codierer jedoch in die Lage versetzt, die Qualität und Bitrate der Ausgabe zu regeln. Bisweilen nimmt der Codierer die Quantisierung in Verbindung mit einer Ratensteuerung vor, bei der die Quantisierung zur Regelung der Bitrate und/oder Qualität verstellt wird. Es gibt verschiedene Arten von Quantisierungen, darunter adaptiv und nichtadaptiv, skalar und vektoriell, gleichmäßig und ungleichmäßig. Das Wahrnehmungsgewichten kann als eine Form der ungleichmäßigen Quantisierung betrachtet werden.
-
Das inverse Quantisieren und das inverse Gewichten rekonstruieren die gewichteten, quantisierten Frequenzkoeffizientendaten mit einer Näherung der ursprünglichen Frequenzkoeffizientendaten. Der inverse Frequenztransformierer nimmt anschließend eine Transformation der rekonstruierten Frequenzkoeffizientendaten in rekonstruierte Audioabtastungen im Zeitbereich vor.
-
B. Verlustfreie Kompression und Dekompression von Audiodaten
-
Üblicherweise verwendet ein Audiocodierer eine oder mehrere Techniken aus einer Mehrzahl von verschiedenen verlustfreien Kompressionstechniken. Zu den verlustfreien Kompressionstechniken zählen im Allgemeinen das Lauflängencodieren, das Huffman-Codieren und das arithmetische Codieren. Zu den entsprechenden Dekompressionstechniken zählen das Lauflängendecodieren, das Huffman-Decodieren und das arithmetische Decodieren.
-
Das Lauflängencodieren (Run-Length-Codieren) ist eine einfache bekannte Kompressionstechnik, die beispielsweise bei Kameravideos, Text und anderen Arten von Inhalt Verwendung findet. Im Allgemeinen wird beim Lauflängencodieren eine Sequenz (das heißt ein Lauf (run)) von aufeinanderfolgenden Symbolen mit demselben Wert durch den Wert und die Länge der Sequenz ersetzt. Bei der Lauflängencodierung wird die Sequenz von aufeinanderfolgenden Symbolen aus dem Laufwert und der Lauflänge rekonstruiert. Es sind verschiedene Abwandlungen des Lauflängencodierens/Lauflängendecodierens entwickelt worden. Weitere Informationen über das Lauflängencodieren/Lauflängendecodieren und dessen Abwandlungen findet man beispielsweise in den folgenden Veröffentlichungen:
„Text Compression" von Bell et al., veröffentlicht bei Prentice Hall PTR, Seiten 105 bis 107, 1990;
„Digital Compression for Multimedia" von Gibson et al., veröffentlicht bei Morgan Kaufmann, Seiten 17 bis 62, 1998;
US-Patent Nr. 6,304,928 von Mairs et al.;
US-Patent Nr. 5,883,633 von Gill et al.; und
US-Patent Nr. 6,233,017 von Chaddha.
-
Das Laufpegelcodieren (Run-Level-Codieren) ist zum Lauflängencodieren dahingehend ähnlich, dass Läufe von aufeinanderfolgenden Symbolen mit demselben Wert durch Lauflängen ersetzt werden. Der Wert für die Läufe ist der vorherrschende Wert (beispielsweise 0) in den Daten, und es werden Läufe durch einen oder mehrere Level (im Folgenden „Pegel” genannt) mit anderen Werten (beispielsweise einem Nichtnullwert) getrennt.
-
Die Ergebnisse des Lauflängencodierens (beispielsweise die Laufwerte und die Lauflängen) oder des Laufpegelcodierens können einem Huffman-Codieren unterzogen werden, um die Bitrate weiter zu verringern. Ist dies der Fall, so werden die Huffman-codierten Daten vor dem Lauflängendecodieren einem Huffman-Decodieren unterzogen.
-
Die Huffman-Codierung ist eine andere bekannte Kompressionstechnik, die für Kameravideos, Text und andere Arten von Inhalt verwendet wird. Im Allgemeinen verknüpft eine Huffman-Code-Tabelle variable Länge aufweisende Huffman-Codes mit eindeutigen Symbolwerten (oder eindeutigen Kombinationen von Werten). Kürzere Codes werden wahrscheinlicheren Symbolwerten zugewiesen, während längere Codes weniger wahrscheinlichen Symbolwerten zugewiesen werden. Die Wahrscheinlichkeiten werden für typische Beispiele irgendeiner Art von Inhalt berechnet. Alternativ werden die Wahrscheinlichkeiten für Daten berechnet, die gerade codiert worden sind oder codiert werden sollen, wobei in diesem Fall die Huffman-Codes an die sich verändernden Wahrscheinlichkeiten für die eindeutigen Symbolwerte angepasst werden. Im Gegensatz zum statischen Huffman-Codieren verringert das adaptive Huffman-Codieren üblicherweise die Bitrate von komprimierten Daten durch Einbeziehen von genaueren Wahrscheinlichkeiten für die Daten, wobei jedoch auch zusätzliche Information, die die Huffman-Codes spezifiziert, übertragen werden muss.
-
Um Symbole zu codieren, ersetzt der Huffman-Codierer Symbolwerte durch die variable Länge aufweisenden Codes, die mit den Symbolwerten in der Huffman-Code-Tabelle verknüpft sind. Zur Decodierung ersetzt der Huffman-Decodierer die Huffman-Codes durch die Symbolwerte, die mit den Huffman-Codes verknüpft sind.
-
Bei der skalaren Huffman-Codierung verknüpft eine Huffman-Code-Tabelle einen einzelnen Huffman-Code mit einem Wert, so beispielsweise mit einem direkten Pegel eines quantisierten Datenwertes. Beim vektoriellen Huffman-Decodieren verknüpft eine Huffman-Code-Tabelle einen einzelnen Huffman-Code mit einer Kombination von Werten, so beispielsweise mit einer Gruppe von direkten Pegeln von quantisierten Datenwerten in einer bestimmten Reihenfolge. Das vektorielle Huffman-Codieren kann zu einer besseren Bitratenverringerung als das skalare Huffman-Codieren führen (beispielsweise dadurch, dass der Codierer in die Lage versetzt wird, Wahrscheinlichkeiten in binären Huffman-Codes mit Bruchzahlen zu nutzen). Demgegenüber kann das Codebuch (codebook) für vektorielles Huffman-Codieren äußerst groß sein, wenn einzelne Codes große Gruppen von Symbolen oder Symbole darstellen, die große Bereiche von möglichen Werten aufweisen (was von der großen Anzahl von möglichen Kombinationen herrührt). Ist die Alphabetgröße beispielsweise gleich 256 (für die Werte 0 bis 255 pro Symbol) und ist die Anzahl der Symbole pro Vektor gleich 4, so ist die Anzahl der möglichen Kombinationen gleich 2564 = 4.294.967.296. Dies verbraucht Speicher- und Verarbeitungsressourcen bei der Berechnung des Codebuches und beim Auffinden der Huffman-Codes sowie Übertragungsressourcen beim Übermitteln des Codebuches.
-
Es sind verschiedene Abwandlungen des Huffman-Codierens und des Huffman-Decodierens entwickelt worden. Weitere Informationen über das Huffman-Codieren/Huffman-Decodieren und dessen Abwandlungen findet man in den folgenden Veröffentlichungen: „Text Compression" von Bell et al., veröffentlicht bei Prentice Hall PTR, Seiten 105 bis 107, 1990; „Digital Compression for Multimedia" von Gibson et al., veröffentlicht bei Morgan Kaufmann, Seiten 17 bis 62, 1998.
-
Das
US-Patent Nr. 6,223,162 von Chen et al. beschreibt das Mehrfachpegel-Lauflängencodieren von Audiodaten. Eine Frequenztransformation erzeugt eine Reihe von Frequenzkoeffizientenwerten. Für Abschnitte eines Frequenzspektrums, in denen der vorherrschende Wert gleich Null ist, korreliert ein Mehrfachpegel-Lauflängencodierer Läufe von Nullwerten mit benachbarten Nichtnullwerten statistisch und weist variable Länge aufweisende Codeworte zu. Ein Codierer verwendet ein spezialisiertes Codebuch, das in Bezug auf die Wahrscheinlichkeit des Empfangens eines Eingabelaufes von nullwertigen Spektralkoeffizienten, gefolgt von Nichtnullkoeffizienten erzeugt wird. Ein entsprechender Decodierer verknüpft ein variable Länge aufweisendes Codewort mit einem Lauf von Nullwertkoeffizienten und benachbartem nichtnullwertigen Koeffizienten.
-
Das
US-Patent 6,377,930 von Chen et al. beschreibt das Codieren mit variabler Länge von Audiodaten. Ein Codierer weist einen variable Länge aufweisenden Code einer variable Größe aufweisenden Gruppe von Frequenzkoeffizientenwerten zu.
-
Das
US-Patent 6,300,888 von Chen et al. beschreibt das Entropiecodemodusumschalten für das Audiocodieren im Frequenzbereich. Ein Frequenzbereichsaudiocodierer trifft unter verschiedenen Entropiecodierungsmodi entsprechend den Eigenschaften eines Eingabestromes eine Wahl. Der Eingabestrom wird insbesondere entsprechend statistischen Kriterien in Frequenzbereiche partitioniert, wobei die Kriterien aus der statistischen Analyse von typischen oder tatsächlichen zu codierenden Eingaben hergeleitet werden. Jedem Bereich wird ein Entropiecodierer zugewiesen, der mit Blick auf das Codieren des Datentyps des Bereiches optimiert ist. Während des Codierens und des Decodierens wendet ein Modusauswähler das richtige Verfahren auf die verschiedenen Frequenzbereiche an. Partitionsgrenzen können vorab bestimmt werden, was den Decodierer in die Lage versetzt, implizit davon Kenntnis zu haben, welches Decodierverfahren auf die codierten Daten anzuwenden ist. Alternativ können adaptive Anordnungen verwendet werden, bei denen Grenzen in dem Ausgabestrom mit Flags versehen werden, um einen Wechsel im Codiermodus für nachfolgende Daten anzugeben. Eine Partitionsgrenze trennt üblicherweise quantisierte primär nullwertige Frequenzkoeffizienten und quantisierte primär nichtnullwertige Koeffizienten und wendet anschließend Codes an, die für derartige Daten optimiert sind.
-
Weitere Einzelheiten über die Patente von Chen finden sich in den Patenten selbst.
-
Das arithmetische Codieren ist eine andere bekannte Kompressionstechnik, die bei Kameravideos und anderen Arten von Inhalt angewendet wird. Das arithmetische Codieren wird bisweilen bei Anwendungen verwendet, bei denen die optimale Anzahl von Bits zur Codierung eines gegebenen Eingabesymbols eine Bruchzahl von Bits ist, sowie in Fällen, in denen eine statistische Korrelation zwischen bestimmten einzelnen Eingabesymbolen vorhanden ist. Bei der arithmetischen Codierung wird üblicherweise eine Eingabesequenz als einzelne Zahl innerhalb eines gegebenen Bereiches dargestellt. Üblicherweise ist die Anzahl eine Bruchzahl zwischen 0 und 1. Symbole in der Eingabesequenz werden mit Bereichen verknüpft, die Abschnitte des Raumes zwischen 0 und 1 einnehmen. Die Bereiche werden auf Grundlage der Wahrscheinlichkeit des Auftretens eines bestimmten Symbols in der Eingabesequenz berechnet. Die Bruchzahl, die zur Darstellung der Eingabesequenz verwendet wird, wird unter Bezugnahme auf diese Bereiche konstruiert. Daher sind in arithmetischen Codierschemen die Wahrscheinlichkeitsverteilungen für Eingabesymbole wichtig.
-
Beim kontextbasierten arithmetischen Codieren werden unterschiedliche Wahrscheinlichkeitsverteilungen für die Eingabesymbole mit unterschiedlichen Kontexten verknüpft. Die Wahrscheinlichkeitsverteilung, die zur Codierung der Eingabesequenz verwendet wird, ändert sich mit einer Änderung des Kontextes. Der Kontext kann durch Messen verschiedener Faktoren berechnet werden, von denen erwartet wird, dass sie Auswirkungen auf die Wahrscheinlichkeit des Auftretens eines bestimmten Eingabesymbols in der Eingabesequenz haben. Weitere Informationen über das arithmetische Codieren beziehungsweise Decodieren und einige seiner Abwandlungen finden sich in „The Data Compression Book, Huffman One Better: Arithmetic Coding" von Nelson, Kapitel 5, Seiten 123 bis 165 (1992).
-
Verschiedene CODEC-Systeme und -standards bedienen sich der verlustfreien Kompression und Dekompression, darunter Versionen des WMA-Codierers und WMA-Decodierers (Windows Media Audio) von Microsoft. Andere CODEC-Systeme werden von der Motion Picture Experts Group als Standard Audio Layer 3 („MP3”), von der Motion Picture Experts Group 2 als Standard Advanced Audio Coding („AAC”) und Dolby AC3 bereitgestellt und spezifiziert. Weitere Informationen finden sich in den jeweiligen Standards oder technischen Veröffentlichungen.
-
Die dem Stand der Technik entstammenden Techniken und Systeme für verlustfreie Kompression von Audiodaten weisen zahlreiche Vorteile auf, nicht jedoch diejenigen, die die vorliegende Erfindung aufweist.
-
ZUSAMMENFASSUNG
-
Erfindungsgemäß wird eine Computervorrichtung bereitgestellt, die einen Entropiedecodierer zum Entropiedecodieren quantisierter Transformationskoeffizienten eines Blockes enthält, wobei der Entropiedecodierer eingerichtet ist zum Decodieren eines gegebenen quantisierten Transformationskoeffizienten des Blocks unter Verwendung eines ersten Decodiermodus, der eine erste kontext-adaptive arithmetische Decodierung eines Pegelwertes des gegebenen Koeffizienten der quantisierten Transtormationskoeffizienten einschließt, wobei die erste kontext-adaptive arithmetische Decodierung einen ersten Satz von Kontexten verwendet und einen Kontext aus dem ersten Satz von Kontexten wenigstens teilweise basierend auf Pegelwerten von zwei bereits decodierten quantisierten Transformationskoeffizienten auswählt. Der Entropiedecodierer ist weiterhin eingerichtet zum Umschalten auf einen zweiten Decodiermodus für verbleibende Koeffizienten der quantisierten Transformationskoeffizienten des Blocks. Darüber hinaus ist der Entropiedecodierer weiterhin eingereichtet zum Decodieren der verbleibenden quantisierten Transformationskoeffizienten unter Verwendung des zweiten Decodiermodus, der eine zweite kontext-adaptive arithmetische Decodierung eines ersten Pegelwertes und eines zweiten Pegelwertes eines ersten verbleibenden Koeffizienten bzw. eines zweiten verbleibenden Koeffizienten einschließt, wobei die zweite kontext-adaptive arithmetische Decodierung einen zweiten Satz von Kontexten verwendet, der vom ersten Satz von Kontexten verschieden ist, und wobei für den ersten Pegelwert im zweiten Decodiermodus die Auswahl eines Kontexts des zweiten Satzes von Kontexten den Pegelwert des gegebenen quantisierten Transformationskoeffizienten aus dem ersten Decodiermodus berücksichtigt, und wobei für den zweiten Pegelwert im zweiten Decodiermodus die Auswahl eines Kontexts aus dem zweiten Satz von Kontexten den ersten Pegelwert berücksichtigt.
-
Die Erfindung betrifft ferner ein Computersystem mit einem Display, einem Spracheingabegerät, einem Lautsprecher, einem Netzwerkadapter für Schnurloskommunikation, einer oder mehrerer Verarbeitungseinheiten, einem Speicher und einem Bus, wobei das Computersystem weiterhin einen Entropiedecodieren zum Entropiedecodieren quantisierter Transformationskoeffizienten eines Blocks enthält. Der Entropiedecodierer ist eingerichtet zum Decodieren eines gegebenen quantisierten Transformationskoeffizienten des Blocks unter Verwendung eines ersten Decodiermodus, der eine erste kontext-adaptive arithmetische Decodierung eines Pegelwertes des gegebenen Koeffizienten der quantisierten Transformationskoeffizienten einschließt, wobei die erste kontext-adaptive arithmetische Decodierung einen ersten Satz von Kontexten verwendet und eine Auswahl eines Kontexts aus dem ersten Satz von Kontexten wenigstens teilweise basierend auf Pegelwerten zweier bereits decodierter quantisierter Transformationskoeffizienten einschließt. Weiterhin ist der Entropiedecodierer eingerichtet zum Umschalten auf einen zweiten Decodiermodus für verbleibende Koeffizienten der quantisierten Transformationskoeffizienten des Blocks und zum Decodieren der verbleibenden quantisierten Transformationskoeffizienten unter Verwendung des zweiten Decodiermodus, der eine zweite kontext-adaptive arithmetische Decodierung eines ersten Pegelwertes und eines zweiten Pegelwertes eines ersten verbleibenden Koeffizienten bzw. eines zweiten verbleibenden Koeffizienten der verbleibenden quantisierten Transformationskoeffizienten des Blocks einschließt, wobei die zweite kontext-adaptive arithmetische Decodierung einen zweiten Satz von Kontexten verwendet, der vom ersten Satz von Kontexten verschieden ist. Für den ersten Pegelwert in dem zweiten Decodiermodus berücksichtigt die Auswahl eines Kontextes aus dem zweiten Satz von Kontexten den Pegelwert des gegebenen quantisierten Transformationskoeffizienten aus dem ersten Decodiermodus. Für den zweiten Pegelwert in dem zweiten Decodiermodus berücksichtigt die Auswahl eines Kontexts aus dem zweiten Satz von Kontexten den ersten Pegelwert.
-
Bevorzugte Ausgestaltungen sind in den Unteransprüchen angegeben.
-
Des Weiteren werden verschiedene Techniken und Werkzeuge für das adaptive Entropiecodieren und -decodieren von Audiodaten offenbart. Die verschiedenen Techniken und Werkzeuge können in Kombination oder unabhängig voneinander verwendet werden.
-
Gemäß einem Aspekt codiert ein Codierer einen ersten Abschnitt einer Audiodatensequenz in einem Modus des direkten variabel-dimensionalen Vektor-Huffman-Codierens, schaltet an einem Umschaltpunkt auf einen Laufpegelcodiermodus um und codiert einen zweiten Abschnitt in dem Laufpegelcodiermodus (beispielsweise kontextbasiertes arithmetisches Codieren, Huffman-Codieren, vektorielles Huffman-Codieren). Der erste Abschnitt besteht beispielsweise primär aus quantisierten Nichtnullaudiokoeffizienten, während der zweite Abschnitt primär aus quantisierten nullwertigen Audiokoeffizienten besteht. Der Umschaltpunkt kann vorgegeben (beispielsweise durch Prüfen der Effizienz des Codierens der Sequenz unter Verwendung des Umschaltpunktes) oder adaptiv bestimmt werden. Der Codierer kann ein Flag senden, das den Umschaltpunkt in einem codierten Bitstrom angibt.
-
Gemäß einem weiteren Aspekt decodiert ein Decodierer einen ersten Abschnitt einer codierten Sequenz in einem Modus des direkten variabel-dimensionalen Vektor-Huffman-Decodierens, schaltet an einem Umschaltpunkt auf einen Modus des Laufpegelcodierens um und decodiert einen zweiten Abschnitt in dem Modus des Laufpegeldecodierens (beispielsweise kontextbasiertes arithmetisches Decodieren, Huffman-Decodieren, vektorielles Huffman-Decodieren). Vor dem Umschalten kann der Decodierer ein Flag empfangen, das den Umschaltpunkt angibt.
-
Gemäß einem weiteren Aspekt codiert ein Codierer beziehungsweise decodiert ein Decodierer einen ersten Abschnitt einer Sequenz in einem direkten kontextbasierten arithmetischen Modus, schaltet an einem Umschaltpunkt in einen Laufpegelmodus um und codiert beziehungsweise decodiert einen zweiten Abschnitt in dem Laufpegelmodus. Der Laufpegelmodus kann ein kontextbasierter arithmetischer Modus sein.
-
Gemäß einem weiteren Aspekt wählt ein Codierer eine erste Code-Tabelle aus einer Menge von mehreren Code-Tabellen auf Grundlage der Anzahl von Symbolen in einem ersten Vektor aus und stellt den ersten Vektor mit einem Code aus der ersten Code-Tabelle dar. Die erste Code-Tabelle kann Codes zur Darstellung von möglichen Vektoren, die jene Anzahl von Symbolen aufweisen, sowie einen Escape-Code für weniger wahrscheinliche Vektoren enthalten. Der Codierer codiert zudem einen zweiten Vektor mit einer anderen Anzahl von Symbolen. Der erste Vektor weist beispielsweise eine größere Anzahl von Symbolen als der zweite Vektor sowie eine höhere Wahrscheinlichkeit des Auftretens als der zweite Vektor auf. Zum Codieren des zweiten Vektors kann der Codierer eine zweite andere Code-Tabelle auf Grundlage der Anzahl der Symbole in dem zweiten Vektor auswählen. Weist der zweite Vektor ein Symbol auf, kann der Codierer den zweiten Vektor unter Verwendung einer tabellenfreien Codiertechnik darstellen.
-
Gemäß einem weiteren Aspekt decodiert ein Decodierer einen ersten Vektor durch Empfangen eines ersten Codes und Nachschlagen des ersten Codes in einer ersten Code-Tabelle. Ist der erste Code ein Escape-Code, so empfängt der Decodierer einen zweiten Code und decodiert diesen zweiten Code, der nicht in der ersten Tabelle vorhanden ist. Ist der erste Code kein Escape-Code, so schlägt der Decodierer Symbole für den ersten Vektor in der ersten Tabelle nach und baut diese in einen decodierten Datenstrom ein. Die Anzahl von Symbolen in dem ersten Vektor ist die Grundlage dafür, ob der erste Code ein Escape-Code ist. Der Decodierer kann den zweiten Code durch Nachschlagen desselben in einer zweiten Tabelle decodieren. Ist der zweite Code ein Escape-Code, so empfängt der Decodierer einen dritten Code, der den ersten Vektor darstellt, der nicht in der zweiten Tabelle vorhanden ist, und decodiert diesen. Ist der zweite Code kein Escape-Code, so schlägt der Decodierer Symbole für den ersten Vektor in der zweiten Tabelle nach und baut die Symbole in den decodierten Datenstrom ein.
-
Gemäß einem weiteren Aspekt codiert ein Codierer Audiodatenkoeffizienten unter Verwendung einer tabellenfreien Codiertechnik. Ist ein Koeffizient innerhalb eines ersten Wertebereiches, so codiert der Codierer den Koeffizient mit einem 1 Bit umfassenden Code, gefolgt von einem 8 Bit umfassenden codierten Wert. Für andere Wertebereiche codiert der Codierer den Koeffizienten mit einem 2 Bit umfassenden Code, gefolgt von einem 16 Bit umfassenden codierten Wert, einem 3 Bit umfassenden Code, gefolgt von einem 24 Bit umfassenden codierten Wert oder einem anderen 3 Bit umfassenden Code, gefolgt von einem 31 Bit umfassenden codierten Wert.
-
Gemäß einem weiteren Aspekt bestimmt bei einem vektoriellen Huffman-Codierschema ein Codierer einen Huffman-Code aus einer Gruppe von derartigen Codes zur Verwendung beim Codieren eines Vektors und codiert den Vektor unter Verwendung des Huffman-Codes. Das Bestimmen des Codes basiert auf einer Summe von Werten der Audiodatensymbole in dem Vektor. Ist der Huffman-Code am Escape-Code, so wird angegeben, dass ein n-dimensionaler Vektor in Form von x n/x-dimensionalen Vektoren unter Verwendung wenigstens einer anderen Code-Tabelle codiert werden soll. Der Codierer kann die Summe mit einem Schwellenwert vergleichen, der von der Anzahl der Symbole in dem Vektor abhängt. Der Schwellenwert ist bei vier Symbolen gleich 6, bei zwei Symbolen gleich 16 oder bei einem Symbol gleich 100.
-
Gemäß einem weiteren Aspekt empfängt ein Codierer eine Sequenz von Audiodaten und codiert wenigstens einen Teil der Sequenz unter Verwendung einer kontextbasierten arithmetischen Codierung. Ein Decodierer empfängt eine codierte Sequenz von Audiodatenkoeffizienten und decodiert wenigstens einen Teil der codierten Sequenz unter Verwendung der kontextbasierten arithmetischen Decodierung.
-
Gemäß einem weiteren Aspekt codiert ein Codierer Audiodatenkoeffizienten unter Verwendung einer kontextbasierten arithmetischen Codierung. Ein oder mehrere Kontexte weisen verknüpfte Wahrscheinlichkeitsverteilungen auf, die Wahrscheinlichkeiten der Koeffizienten darstellen. Der Codierer bestimmt adaptiv einen Kontext aus einem aktuellen Koeffizienten auf Grundlage wenigstens teilweise eines Modus der Darstellung des aktuellen Koeffizienten und codiert den aktuellen Koeffizienten unter Verwendung des Kontextes. Ist beispielsweise der Modus der Darstellung direkt, so bestimmt der Codierer adaptiv den Kontext auf Grundlage wenigstens teilweise der direkten Pegel der vorhergehenden Koeffizienten (beispielsweise die beiden Koeffizienten, die dem aktuellen Koeffizienten unmittelbar vorausgehen). Ist der Modus der Darstellung der Laufpegelmodus, so bestimmt der Codierer adaptiv den Kontext auf Grundlage wenigstens teilweise des prozentualen Anteils der Nullwertkoeffizienten der vorhergehenden Lauflänge von Nullwertkoeffizienten in der Audioeingabesequenz. Ist der Modus der Darstellung der Laufpegelmodus, so bestimmt der Codierer adaptiv den Kontext auf Grundlage wenigstens teilweise der aktuellen Lauflänge der Nullwertkoeffizienten, der vorhergehenden Lauflänge der Nullwertkoeffizienten und der direkten Pegel der vorhergehenden Koeffizienten.
-
Gemäß einem weiteren Aspekt codiert ein Codierer beziehungsweise decodiert ein Decodierer einen ersten Abschnitt von Audiodaten unter Verwendung einer direkten Codierung oder Decodierung bei Halten eines Zählwertes von aufeinanderfolgenden Koeffizienten gleich einem vorherrschenden Wert (beispielsweise 0). Übersteigt der Zählwert einen Schwellenwert, so codiert der Codierer beziehungsweise decodiert der Decodierer einen zweiten Abschnitt von Audiodaten unter Verwendung der Laufpegelcodierung oder -decodierung. Der Schwellenwert kann statisch sein oder adaptiv bestimmt werden. Der Schwellenwert kann von der Größe des Blocks von Koeffizienten abhängen. Der Schwellenwert kann beispielsweise für einen Block von 256 Koeffizienten gleich 4 und für einen Block von 512 Koeffizienten gleich 8 sein.
-
Gemäß einem weiteren Aspekt codiert ein Codierer beziehungsweise decodiert ein Decodierer einen ersten Abschnitt einer Sequenz unter Verwendung einer ersten Code-Tabelle und einen zweiten Abschnitt der Sequenz unter Verwendung einer zweiten Code-Tabelle. Die erste Code-Tabelle wird verwendet, wenn längere Läufe von aufeinanderfolgenden Koeffizienten gleich einem vorherrschenden Wert (beispielsweise 0) mit größerer Wahrscheinlichkeit auftreten, während die zweite Tabelle verwendet wird, wenn kürzere Läufe von aufeinanderfolgenden Koeffizienten mit gleichem Wert wahrscheinlicher sind. Die verwendete Tabelle kann durch ein Signalbit angegeben werden.
-
Die Merkmale und Vorteile der Techniken des adaptiven Entropiecodierens und -decodierens erschließen sich besser aus der nachfolgenden Detailbeschreibung verschiedener Ausführungsbeispiele unter Bezugnahme auf die begleitende Zeichnung.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Blockdiagramm einer geeigneten Computerumgebung, in der die beschriebenen Ausführungsbeispiele implementiert sein können.
-
2 ist ein Blockdiagramm eines Audiocodierers, in dem die beschriebenen Ausführungsbeispiele implementiert sein können.
-
3 ist ein Blockdiagramm eines Audiodecodierers, in dem die beschriebenen Ausführungsbeispiele implementiert sein können.
-
4 ist ein Flussdiagramm, das eine verallgemeinerte Mehrfachmodiaudiocodiertechnik zeigt.
-
5 ist ein Flussdiagramm, das eine Mehrfachmodiaudiocodiertechnik mit adaptiver Berechnung des Umschaltpunktes zeigt.
-
6 ist ein Flussdiagramm, das eine verallgemeinerte Technik des Mehrfachmodiaudiodecodierens zeigt.
-
7 ist ein Flussdiagramm, das eine verallgemeinerte an variabeldimensionalen Vektoren vorgenommene Huffman-Codiertechnik zeigt.
-
8 ist ein Flussdiagramm, das detailliert eine Technik zum Codieren von Audiodaten unter Verwendung eines variabel-dimensionalen Vektor-Huffman-Codierens zeigt.
-
9 ist ein Flussdiagramm, das eine Technik des variabel-dimensionalen Vektor-Huffman-Codierens von direkten Signalpegeln zeigt, wobei der Codierer einen Umschaltpunkt zum Wechseln auf die Codierung von Lauflängen und Signalpegeln adaptiv bestimmt.
-
10 ist ein Flussdiagramm, das eine verallgemeinerte Technik des variabeldimensionalen Vektor-Huffman-Decodierens zeigt.
-
11 ist ein Flussdiagramm, das detailliert eine Technik zum Decodieren von Vektoren zeigt, die unter Verwendung einer variabel-dimensionalen Vektor-Huffman-Codierung codiert worden sind.
-
12 ist ein Flussdiagramm, das eine Technik des variabel-dimensionalen Vektor-Huffman-Decodierens von direkten Signalpegeln zeigt, wobei hier der Decodierer einen Umschaltpunkt zum Wechseln auf die Decodierung von Lauflängen und Signalpegeln adaptiv bestimmt.
-
13A bis 13D sind Wahrscheinlichkeitsverteilungen für Nichtlauflängenpegel in einem kontextbasierten arithmetischen Codierschema.
-
14A bis 14H sind Wahrscheinlichkeitsverteilungen für verschiedene Lauflängen in einem Schema des kontextbasierten arithmetischen Codierens.
-
15A bis 15H sind Wahrscheinlichkeitsverteilungen von lauflängencodierten Pegeln in einem Schema des kontextbasierten arithmetischen Codierens.
-
16 ist ein Flussdiagramm, das eine Technik des direkten kontextbasierten arithmetischen Codierens von Koeffizienten zeigt, wobei ein Umschaltpunkt zum Wechseln auf das Codieren von Lauflängen und -pegeln adaptiv von dem Codierer bestimmt wird.
-
17 ist ein Flussdiagramm, das eine Technik des kontextbasierten arithmetischen Decodierens zeigt, wobei der Decodierer adaptiv einen Umschaltpunkt zum Wechseln auf das Decodieren von Lauflängen und Signalpegeln bestimmt.
-
DETAILBESCHREIBUNG
-
Bei den beschriebenen Ausführungsbeispielen setzt ein Audiocodierer verschiedene Techniken des adaptiven Entropiecodierens ein. Die Techniken des adaptiven Entropiecodierens verbessern die Leistung des Codierens, wobei die Bitrate verringert und/oder die Qualität verbessert wird. Ein Decodierer setzt entsprechende Techniken des Entropiedecodierens ein. Während die hier beschriebenen Techniken als Teil eines einzigen integrierten Systems beschrieben werden, können die Techniken getrennt und gegebenenfalls auch in Kombination mit anderen Techniken eingesetzt werden.
-
Der Audiocodierer und der Audiodecodierer nehmen eine Verarbeitung an diskreten Audiosignalen vor. Bei den beschriebenen Ausführungsbeispielen sind die Audiosignale quantisierte Koeffizienten aus frequenztransformierten Audiosignalen. Alternativ verarbeiten der Codierer und der Decodierer andere Arten von diskreten Audiosignalen oder diskreten Signalen, die Videofilme oder andere Arten von Information darstellen.
-
Bei einigen Ausführungsbeispielen erfolgt durch den Audiocodierer ein adaptives Umschalten zwischen dem Codieren von direkten Signalpegeln und dem Codieren von Lauflängen und Signalpegeln. Der Codierer codiert die direkten Signalpegel unter Verwendung von skalaren Huffman-Codes, vektoriellen Huffman-Codes, arithmetischer Codierung oder einer anderen Technik. Bei der Lauflängen-/Pegelcodierung (die auch Laufpegelcodierung genannt wird) stellt jede Lauflänge einen Lauf von Null oder mehreren Nullen dar, wobei jeder Signalpegel einen Nichtnullwert darstellt. In dem Laufpegelereignisraum codiert der Codierer die Lauflängen und -pegel in dem Ereignisraum unter Verwendung von Huffman-Codes, arithmetischer Codierung oder einer anderen Technik. Ein Decodierer nimmt ein entsprechendes adaptives Umschalten während des Decodierens vor. Das adaptive Umschalten tritt auf, wenn eine Schwellenwertzahl von nullwertigen Pegeln erreicht wird. Alternativ schalten der Codierer und der Decodierer auf Grundlage von zusätzlichen oder anderen Kriterien um.
-
Bei einigen Ausführungsbeispielen setzt ein Audiocodierer eine variabel-dimensionale Vektor-Huffman-Codierung ein. Das variabel-dimensionale Vektor-Huffman-Codieren versetzt den Codierer in die Lage, Huffman-Codes zu verwenden, um stärker wahrscheinliche Kombinationen von Symbolen unter Verwendung von höher-dimensionalen Vektoren und weniger wahrscheinliche Kombinationen von Symbolen unter Verwendung von niedriger-dimensionalen Vektoren oder von Skalaren darzustellen. Ein Decodierer nimmt das entsprechende variabeldimensionale Vektor-Huffman-Decodieren vor.
-
Bei einigen Ausführungsbeispielen verwendet ein Audiocodierer eine kontextbasierte arithmetische Codierung. Die von dem Codierer verwendeten Kontexte ermöglichen eine effiziente Kompression von verschiedenen Arten von Audiodaten. Ein Decodierer nimmt eine entsprechende kontextbasierte arithmetische Decodierung vor.
-
Bei den beschriebenen Ausführungsbeispielen setzen der Audiocodierer und der Audiodecodierer verschiedene Techniken ein. Obwohl die Ausführung dieser Techniken aus darstellerischen Gründen üblicherweise in einer bestimmten sequenziellen Reihenfolge erfolgt, sollte einsichtig sein, dass die vorliegende Beschreibung geringfügige Umordnungen bei der Reihenfolge der Ausführung einschließt. Aus Gründen der Einfachheit zeigen darüber hinaus Flussdiagramme üblicherweise nicht die verschiedenen Arten, auf die die verschiedenen Techniken in Verbindung mit anderen Techniken verwendet werden können.
-
I. Computerumgebung
-
1 zeigt ein verallgemeinertes Beispiel für eine geeignete Computerumgebung 100, in der die beschriebenen Ausführungsbeispiele implementiert sein können. Die Computerumgebung 100 soll keine Beschränkungen bezüglich des Einsatzumfanges oder der Funktionalität der Erfindung beinhalten, da die vorliegende Erfindung in verschiedenen Allzweck- oder Sonderzweckcomputerumgebungen implementiert sein kann.
-
Wie in 1 gezeigt ist, umfasst die Computerumgebung 100 wenigstens eine Verarbeitungseinheit 110 und einen Speicher 120. In 1 ist die grundlegende Ausgestaltung 130 mit einer gestrichelten Linie eingeschlossen. Die Verarbeitungseinheit 110 führt computerausführbare Anweisungen aus und kann ein realer oder virtueller Prozessor sein. In einem Mehrfachverarbeitungssystem führen mehrere Verarbeitungseinheiten computerausführbare Anweisungen aus, um die Verarbeitungsleistung zu erhöhen. Der Speicher 120 kann ein flüchtiger Speicher sein (beispielsweise ein Register, ein Cache, ein RAM), ein nichtflüchtiger Speicher (beispielsweise ein ROM, ein EEPROM, ein Flash-Speicher und dergleichen) oder eine Kombination aus beidem. Der Speicher 120 speichert Software 180, die einen Audiocodierer-/Decodierer implementiert, der ein adaptives Entropiecodieren beziehungsweise Decodieren von Audiodaten vornimmt.
-
Eine Computerumgebung kann zusätzliche Merkmale aufweisen. So enthält die Computerumgebung 100 beispielsweise einen Speicher 140, eine oder mehrere Eingabevorrichtungen 150, eine oder mehrere Ausgabevorrichtungen 160 und einen oder mehrere Kommunikationsverbindungen 170. Ein Mechanismus zur wechselseitigen Verbindung (nicht gezeigt), so beispielsweise ein Bus, ein Kontroller oder ein Netzwerk, verbindet die Komponenten der Computerumgebung 100 untereinander. Üblicherweise stellt eine Betriebssystemsoftware (nicht gezeigt) eine Betriebsumgebung für eine andere Software bereit, die in der Computerumgebung 100 arbeitet, und koordiniert die Aktivitäten der Komponenten der Computerumgebung 100.
-
Der Speicher 140 kann ein herausnehmbarer Speicher oder ein nichtherausnehmbarer Speicher sein. Hierzu zählen magnetische Platten, magnetische Bänder oder Kassetten, CD-ROMs, CD-RWs, DVDs oder ein beliebiges anderes Medium, das zur Speicherung von Information verwendet werden kann und auf das innerhalb der Computerumgebung 100 zugegriffen werden kann. Der Speicher 100 speichert Anweisungen für die Software 180, die den Audiocodierer beziehungsweise Audiodecodierer implementiert, die eine adaptive Entropiecodierung beziehungsweise -decodierung der Audiodaten vornehmen.
-
Die Eingabevorrichtung beziehungsweise die Eingabevorrichtungen 150 können als berührungstechnische Eingabevorrichtungen ausgebildet sein, so beispielsweise als Tastatur, Maus, Stift, Trackball, als sprachbasierte Eingabevorrichtung, Abtastvorrichtung, Netzwerkadapter oder eine andere Vorrichtung, die eine Eingabe für die Computerumgebung 100 bereitstellt. Mit Blick auf den Audioton können eine Eingabevorrichtung beziehungsweise Eingabevorrichtungen 150 verwendet werden, die als Soundkarte oder ähnliche Vorrichtung ausgestaltet sind, die eine Audioeingabe in analoger oder digitaler Form annimmt, oder als CD-ROM-Lesegerät, das Audioabtastungen in der Computerumgebung vornimmt. Die Ausgabevorrichtung beziehungsweise Ausgabevorrichtungen 160 können als Anzeige, Drucker, Lautsprecher, CD/DVD-Schreiber, Netzwerkadapter oder andere Vorrichtung ausgebildet sein, die eine Ausgabe aus der Computerumgebung 100 bereitstellt.
-
Die Kommunikationsverbindung beziehungsweise Kommunikationsverbindungen 170 ermöglichen eine Kommunikation über ein Kommunikationsmedium mit einer anderen Computereinheit. Das Kommunikationsmedium liefert Information, so beispielsweise durch computerausführbare Anweisungen, komprimierte Audioinformation oder andere Daten in einem modulierten Datensignal. Ein moduliertes Datensignal ist ein Signal, das einen oder mehrere Parameter enthält, die derart eingestellt oder geändert sind, dass Information in dem Signal codiert ist. Zu den Kommunikationsmedien zählen beispielsweise und ohne beabsichtigte Einschränkung drahtlose oder drahtgebundene Techniken, die mit einem elektrischen, optischen, funktechnischen, infraroten, akustischen oder anderen Träger implementiert sind.
-
Die Erfindung kann im allgemeinen Kontext von computerlesbaren Medien beschrieben werden. Computerlesbare Medien sind beliebige verfügbare Medien, auf die innerhalb einer Computerumgebung zugegriffen werden kann. Innerhalb der Computerumgebung 100 zählen zu den computerlesbaren Medien beispielsweise und ohne Einschränkung ein Speicher 120, ein Speicher 140, Kommunikationsmedien sowie Kombinationen hieraus.
-
Die Erfindung kann im allgemeinen Kontext von computerausführbaren Anweisungen beschrieben werden, so beispielsweise denjenigen, die in Programmmodulen enthalten sind, die in einer Computerumgebung in einem realen oder virtuellen Prozessor ausgeführt werden. Zu den Programmmodulen zählen im Allgemeinen Routinen, Programme, Bibliotheken, Objekte, Klassen, Komponenten, Datenstrukturen und dergleichen mehr, die bestimmte Aufgaben ausführen oder bestimmte abstrakte Datentypen implementieren. Die Funktionalität der Programmmodule kann zwischen den Programmen kombiniert oder auch geteilt werden, was von dem jeweiligen Ausführungsbeispiel abhängt. Computerausführbare Anweisungen für Programmmodule können in einer örtlichen oder verteilten Computerumgebung ausgeführt werden.
-
Aus darstellerischen Gründen verwendet die Detailbeschreibung Begriffe wie „analysieren”, „senden”, „vergleichen” und „prüfen” zur Beschreibung von Computeroperationen in einer Computerumgebung. Diese Begriffe sind hochgradige Abstraktionen für Operationen, die von einem Computer vorgenommen werden, und sollten nicht mit Handlungen verwechselt werden, die ein menschliches Wesen ausführt. Die tatsächlichen Computeroperationen entsprechend diesen Begriffen variieren in Abhängigkeit von der Implementierung.
-
II. Verallgemeinerte Audiocodierer und -decodierer
-
2 ist ein Blockdiagramm eines verallgemeinerten Audiocodierers 200, bei dem die beschriebenen Ausführungsbeispiele implementiert sein können. Der Codierer 200 nimmt ein adaptives Entropiecodieren an Audiodaten vor. 3 ist ein Blockdiagramm eines verallgemeinerten Audiodecodierers 300, bei dem die beschriebenen Ausführungsbeispiele implementiert sein können. Der Decodierer 300 decodiert codierte Audiodaten.
-
Die Beziehungen, die zwischen den Modulen innerhalb des Codierers und des Decodierers gezeigt sind, geben einen Informationsfluss in einem als Beispiel angegebenen Codierer und Decodierer an. Andere Beziehungen sind aus Gründen der Einfachheit nicht gezeigt. In Abhängigkeit von der Implementierung und der Art der gewünschten Kompression können Module des Codierers oder Decodierers hinzugefügt, weggelassen, in mehrere Module aufgeteilt, mit anderen Modulen kombiniert und/oder durch gleichartige Module ersetzt werden. Bei alternativen Ausführungsbeispielen nehmen Codierer oder Decodierer mit anderen Modulen und/oder anderen Ausgestaltungen eine adaptive Entropiecodierung und -decodierung an Audiodaten vor.
-
A. Verallgemeinerter Audiocodierer
-
Der verallgemeinerte Audiocodierer 200 umfasst einen Auswähler 208, einen Mehrfachkanalvorprozessor 210, einen Partitionierer/Paketkonfigurierer 220, einen Frequenztransformierer 230, einen Wahrnehmungsmodellierer 240, einen Gewichter 242, einen Mehrfachkanaltransformierer 250, einen Quantisierer 260, einen Entropiecodierer 270, einen Kontroller bzw. eine Steuerung 280, einen gemischten/reinen verlustfreien Codierer 272 und einen zugehörigen Entropiecodierer 274 sowie einen Bitstrommultiplexer (MUX) 290. Es schließt sich eine Beschreibung von einigen der Module des Codierers 200 an. Die Beschreibung von einigen anderen Modulen des Codierers 200 bei einigen Ausführungsbeispielen findet sich in dem Abschnitt „Daten verwandter Anmeldungen”.
-
Der Codierer 200 empfängt eine zeitliche Folge von Eingabeaudioabtastungen 205 mit einer Abtasttiefe und einer Abtastrate in einem pulscodemodulierten Format (PCM-Format). Die Eingabeaudioabtastungen 205 können mehrfachkanalaudioartig (beispielsweise stereo, surround) oder mono sein. Der Codierer 200 komprimiert die Audioabtastungen 205 und multiplexiert die Information, die durch die verschiedenen Module der Codierer 200 erzeugt worden ist, um einen Bitstrom 295 in einem Format, so beispielsweise WMA (Windows Media Audio) oder ASF (Advanced Streaming Format), auszugeben. Alternativ arbeitet der Codierer 200 mit anderen Eingabe- und/oder Ausgabeformaten.
-
Zu Beginn wählt der Auswähler 208 zwischen mehreren Codiermodi für die Audioabtastungen, siehe 205, aus. Wie in 2 gezeigt ist, schaltet der Auswähler 208 zwischen zwei Modi um, nämlich einem gemischten/reinen verlustfreien Codiermodus und einem verlustbehafteten Codiermodus. Der verlustfreie Codiermodus enthält den gemischten/reinen verlustfreien Codierer 272 und wird üblicherweise für eine qualitativ hochwertige Kompression sowie eine Kompression mit hoher Bitrate verwendet. Der verlustbehaftete Codiermodus enthält Komponenten, so beispielsweise den Gewichter 242 und den Quantisierer 260, und wird üblicherweise für eine Kompression mit verstellbarer Qualität (und gesteuerter Bitrate) verwendet. Die Auswahlentscheidung an dem Auswähler 208 hängt von der Anwendereingabe (beispielsweise davon, ob ein Anwender die verlustfreie Codierung zur Erstellung qualitativ hochwertiger Audiokopien auswählt) oder von anderen Kriterien ab. Bei anderen Gegebenheiten (beispielsweise wenn die verlustbehaftete Kompression nicht in der Lage ist, eine adäquate Qualität zu liefern oder Bits überproduziert) kann der Codierer 200 von der verlustbehafteten Codierung zu der gemischten/reinen verlustfreien Codierung für ein Frame oder eine Menge von Frames umschalten.
-
Der Frequenztransformierer 230 empfängt die Audioabtastungen 205 und wandelt sie in Daten im Frequenzbereich um. Der Frequenztransformierer 230 gibt Blöcke von Frequenzkoeffizientendaten an den Gewichter 242 aus und gibt zudem Zusatzinformation, so beispielsweise Blockgrößen, an den MUX 290 aus. Der Frequenztransformierer 230 gibt sowohl die Frequenzkoeffizienten wie auch die Zusatzinformation an den Wahrnehmungsmodellierer 240 aus.
-
Der Wahrnehmungsmodellierer 240 modelliert die Eigenschaften des menschlichen Gehörsystems zur Verbesserung der wahrgenommenen Qualität des rekonstruierten Audiosignals bei gegebener Bitrate. Im Allgemeinen verarbeitet der Wahrnehmungsmodellierer 240 die Audiodaten entsprechend einem Gehörmodell, stellt anschließend Information für den Gewichter 242 bereit, die verwendet werden kann, um die Gewichtungsfaktoren für die Audiodaten zu erzeugen, Der Wahrnehmungsmodellierer 240 bedient sich verschiedener Gehörmodelle und gibt Erregungsmustereinformation oder eine andere Information an den Gewichter 242 aus.
-
Als Quantisierungsbandgewichter erzeugt der Gewichter 242 die Gewichtungsfaktoren für eine Quantisierungsmatrix auf Grundlage der Information aus dem Empfang von dem Wahrnehmungsmodellierer 240 und wendet die Gewichtungsfaktoren auf die von dem Frequenztransformierer 230 empfangenen Daten an. Der Gewichter 242 gibt Zusatzinformation, so beispielsweise die Menge von Gewichtungsfaktoren, an den MUX 290 aus. Als Kanalgewichter erzeugt der Gewichter 242 sodann kanalspezifische Gewichtungsfaktoren auf Grundlage der Information aus dem Empfang von dem Wahrnehmungsmodellierer 240 und der Qualität des örtlichen rekonstruierten Signals. Diese skalaren Gewichtungen ermöglichen, dass die rekonstruierten Kanäle annähernd gleiche Qualität aufweisen. Der Gewichter 242 gibt gewichtete Blöcke von Koeffizientendaten an den Mehrfachkanaltransformierer 250 und zudem Zusatzinformation, so beispielsweise die Menge der Kanalgewichtungsfaktoren, an den MUX 290 aus. Alternativ verwendet der Codierer 200 andere Arten der Gewichtung oder verzichtet auf die Gewichtung.
-
Bei Mehrfachkanalaudiodaten besteht oftmals eine Korrelation der Mehrfachkanäle mit rauschgeformten Frequenzkoeffizientendaten, die von dem Gewichter 242 erzeugt werden. Um diese Korrelation auszunutzen, kann sich der Mehrfachkanaltransformierer 250 einer Mehrfachkanaltransformation der Audiodaten bedienen. Der Mehrfachkanaltransformierer 250 erzeugt die Zusatzinformation für den MUX 290, so beispielsweise die verwendeten Mehrfachkanaltransformationen und die mehrfachkanaltransformierten Frames.
-
Der Quantisierer 260 quantisiert die Ausgabe des Mehrfachkanaltransformierers 250 und erzeugt dabei quantisierte Koeffizientendaten für den Entropiecodierer 270 sowie Zusatzinformation, darunter die Quantisierungsstufengrößen, für den MUX 290. Die Quantisierung führt einen irreversiblen Verlust in die Information ein, versetzt den Codierer 200 jedoch in die Lage, die Qualität und Bitrate des Ausgabebitstromes 295 im Zusammenspiel mit der Steuerung bzw. dem Kontroller 280 zu regeln. Bei einigen Ausführungsbeispielen ist der Quantisierer 260 ein adaptiver gleichmäßiger skalarer Quantisierer. Bei alternativen Ausführungsbeispielen ist der Quantisierer ein ungleichmäßiger Quantisierer, ein vektorieller Quantisierer und/oder ein nicht-adaptiver Quantisierer oder bedient sich einer anderen Form von adaptiver gleichmäßiger oder skalarer Quantisierung.
-
Der Entropiecodierer 270 nimmt eine verlustfreie Komprimierung der quantisierten Koeffizientendaten vor, die von dem Quantisierer 260 empfangen werden. Bei einigen Ausführungsbeispielen verwendet der Entropiecodierer 270 die adaptive Entropiecodierung gemäß Beschreibung in den nachfolgenden Abschnitten. Der Entropiecodierer 270 kann die Anzahl der für die Codierung der Audioinformation verwendeten Bits berechnen und diese Information an die Raten-/Qualitätssteuerung 280 weiterleiten.
-
Die Steuerung 280 arbeitet mit dem Quantisierer 260 zusammen, um die Bitrate und/oder die Qualität der Ausgabe des Codierers 200 zu regeln. Die Steuerung 280 empfängt die Informationen von anderen Modulen des Codierers 200 und verarbeitet die empfangene Information zur Bestimmung der gewünschten Quantisierungsfaktoren bei gegebenen Bedingungen. Die Steuerung 280 gibt die Quantisierungsfaktoren an den Quantisierer 260 aus, mit der Absicht, die Qualitäts- und/oder Bitratenrandbedingungen zu erfüllen.
-
Der gemischte/reine verlustfreie Codierer 272 und der zugehörige Entropiecodierer 274 komprimieren die Audiodaten in dem gemischten/reinen verlustfreien Codiermodus. Der Codierer 200 verwendet den Modus des gemischten/reinen verlustfreien Codierens für eine ganze Sequenz oder schaltet zwischen Codiermodi frameweise oder auf einer anderen Grundlage um.
-
Der MUX 290 multiplexiert die von den anderen Modulen des Audiocodierers 200 empfangene Zusatzinformation 200 zusammen mit den von dem Entropiecodierer 270 empfangenen entropiecodierten Daten. Der MUX 290 gibt die Information im WMA-Format oder einem anderen Format aus, das ein Audiodecodierer erkennt. Der MUX 290 umfasst einen virtuellen Puffer, der den Bitstrom 295 speichert, der durch den Codierer 200 ausgegeben werden soll. Eine aktuelle Überbelegung des Puffers, die Änderungsrate bei der Belegung des Puffers und andere Eigenschaften des Puffers können von dem Kontroller 280 zur Regelung der Qualität und/oder Bitrate für verschiedene Anwendungen (beispielsweise bei konstanter Qualität und variabler Bitrate oder bei oder unter einer konstanten Bitrate und einer variablen Qualität) verwendet werden.
-
B. Verallgemeinerter Audiodecodierer
-
Wie in 3 gezeigt ist, umfasst der verallgemeinerte Audiodecodierer 300 einen Bitstromdemultiplexer (DEMUX) 310, einen oder mehrere Entropiedecodierer 320, einen gemischten/reinen verlustfreien Decodierer 322, einen Paketkonfigurierungsdecodierer 330, einen inversen Mehrfachkanaltransformierer 340, einen inversen Quantisierer/Gewichter 350, einen inversen Frequenztransformierer 360, einen Überlapper/Addierer 370 sowie einen Mehrfachkanalnachprozessor 380. Der Decodierer 300 ist ein wenig einfacher als der Codierer 200 aufgebaut, da der Decodierer 300 nicht über die Module zur Raten-/Qualitätssteuerung oder zur Wahrnehmungsmodellierung verfügen muss. Eine Beschreibung von einigen der Module des Codierers 300 schließt sich an. Eine Beschreibung von bestimmten anderen Modulen des Decodierers 300 bei bestimmten Ausführungsbeispielen findet sich in dem Abschnitt „Daten verwandter Anmeldungen”.
-
Der Decodierer 300 empfängt einen Bitstrom 305 von komprimierter Audioinformation im WMA-Format oder einem anderen Format. Der Bitstrom 305 umfasst entropiecodierte Daten sowie Zusatzinformation, aus der der Decodierer 300 die Audioabtastungen 395 rekonstruiert.
-
Der DEMUX parst Information in dem Bitstrom 305 und sendet die Information an die Module des Decodierers 300. Der DEMUX 310 enthält einen oder mehrere Puffer zum Ausgleich von kurzzeitigen Schwankungen in der Bitrate aufgrund von Fluktuationen bei der Komplexität der Audiotöne, von Netzwerkzittern und/oder anderen Faktoren.
-
Der eine oder die mehreren Entropiecodierer 320 nehmen eine verlustfreie Dekompression der Entropiecodes vor, die er/sie von dem DEMUX 310 empfängt/empfangen. Aus Gründen einer einfacheren Darstellung ist in 3 nur eine Decodiermodul gezeigt, obwohl verschiedene Entropiedecodierer für verlustbehaftete und verlustfreie Codiermodi oder sogar innerhalb von Modi verwendet werden können. Aus Gründen der Einfachheit zeigt 3 nicht die Modusauswahllogik. Der Entropiedecodierer 320 wendet die jeweilige Umkehrung derjenigen Entropiecodiertechnik an, die in dem Codierer 200 verwendet worden ist. Bei der Decodierung von Daten, die im verlustbehafteten Codiermodus komprimiert worden sind, erzeugt der Entropiedecodierer 320 quantisierte Frequenzkoeffizientendaten.
-
Der gemischte/reine verlustfreie Decodierer 322 und der zugehörige Entropiedecodierer beziehungsweise die zugehörigen Entropiedecodierer 320 nehmen eine verlustfreie Dekompression von codierten Audiodaten für den gemischten/reinen verlustfreien Codiermodus vor. Der Decodierer 300 verwendet einen bestimmten Decodiermodus für eine gesamte Sequenz oder schaltet zwischen den Decodiermodi frameweise oder auf anderer Grundlage um.
-
Der inverse Mehrfachkanaltransformierer 340 empfängt die entropiedecodierten quantisierten Frequenzkoeffizientendaten von dem Entropiedecodierer beziehungsweise den Entropiedecodierern 320 wie auch die Zusatzinformation von dem DEMUX 310, die beispielsweise die verwendete Mehrfachkanaltransformation und die transformierten Teile der Frames angibt.
-
Der inverse Quantisierer/Gewichter 350 empfängt Quantisierungsfaktoren wie auch Quantisierungsmatrizen von dem DEMUX 310 und empfängt quantisierte Frequenzkoeffizientendaten von dem inversen Mehrfachkanaltransformierer 340. Der inverse Quantisierer/Gewichter 350 dekomprimiert die empfangenen Quantisierungsfaktoren und Matrixinformationen nach Bedarf und nimmt anschließend eine inverse Quantisierung und Gewichtung vor.
-
Der inverse Frequenztransformierer 360 empfängt die Frequenzkoeffizientendaten, die von dem inversen Quantisierer/Gewichter 350 ausgegeben werden, wie auch die Zusatzinformation aus dem DEMUX 310. Der inverse Frequenztransformierer 360 nimmt eine zu der in dem Codierer verwendeten Transformation inverse Frequenztransformation vor und gibt die Blöcke an den Überlapper/Addierer 370 aus.
-
Der Überlapper/Addierer 370 empfängt die decodierte Information aus dem inversen Frequenztransformierer 360 und/oder dem gemischten/reinen verlustfreien Decodierer 322. Der Überlapper/Addierer 370 überlappt und addiert die Audiodaten nach Bedarf und verschachtelt die Frames oder andere Sequenzen von Audiodaten, die in verschiedenen Modi codiert worden sind.
-
III. Adaptives Entropiecodier-/Decodiermodiumschalten
-
Verfahren des Laufpegelcodierens sind oftmals effektiver als das direkte Codieren von Pegeln, wenn in einer Eingabesequenz häufig ein einzelner Wert (beispielsweise 0) auftritt. Aufgrund der Tatsache, dass quantisierte Nichtnulltransformationskoeffizienten in Audiodateneingabesequenzen insbesondere bei niedrigeren Frequenzen üblich sind, ist das Laufpegelcodieren jedoch im gesamten Frequenzbereich nicht derart effektiv. Darüber hinaus treten bei qualitativ höherwertigen Audiodaten quantisierte Nichtnulltransformationskoeffizienten auch bei höheren Frequenzen gehäuft auf (Bei qualitativ höherwertigen Audiodaten sind die Quantisierungspegel üblicherweise kleiner). Bei einigen Ausführungsbeispielen setzt daher ein Codierer, so beispielsweise der Codierer 200 von 2, eine Technik des Mehrfachmodicodierens ein, die eine Laufpegelcodierung bei einem Abschnitt einer Audiodateneingabesequenz und eine Direktcodierung von Pegeln bei einem weiteren Abschnitt der Sequenz verwendet. Eine Decodierer, so beispielsweise der Decodierer 300 von 3, setzt eine entsprechende Mehrfachmodidecodiertechnik ein.
-
A. Adaptives Entropiecodiermodusumschalten
-
Wie in 4 gezeigt ist, codiert bei einer Technik 400 des Mehrfachmodicodierens der Codierer zunächst Signalpegel in einem Eingabestrom direkt, siehe 410. So nimmt der Codierer beispielsweise eine variabel-dimensionale Huffman-Codierung, eine kontextbasierte arithmetische Codierung oder eine andere Entropiecodiertechnik direkt an den Signalpegeln vor.
-
An einem Umschaltpunkt wechselt der Codierer während des Codierens das Codierschema, siehe 420. Der Codierer kann das Codierschema an einem vorgegebenen Umschaltpunkt wechseln, oder der Codierer analysiert gegebenenfalls die Eingabedaten, um einen geeigneten Punkt zum Wechseln des Codierschemas zu bestimmen. So kann der Codierer beispielsweise eine Eingabesequenz analysieren, um den besten Punkt zum Umschalten auf die Laufpegelcodierung zu finden, und sendet den Umschaltpunkt an den Decodierer in dem Ausgabebitstrom. Alternativ kann der Codierer den Umschaltpunkt adaptiv durch Zählen von aufeinanderfolgenden Nullen (oder alternativ eines anderen vorherrschenden Wertes) in den Eingabedaten berechnen und auf die Laufpegelcodierung umschalten, wenn eine bestimmte Schwellenwertzahl von aufeinanderfolgenden Nullen gezählt ist. Der Decodierer kann den Umschaltpunkt auf dieselbe Weise berechnen, sodass der Schaltpunkt nicht in dem Bitstrom enthalten sein muss. Alternativ verwenden der Codierer und der Decodierer andere Kriterien zur Bestimmung des Umschaltpunktes.
-
Nach dem Umschaltpunkt codiert der Codierer die verbleibenden Signalpegel unter Verwendung einer Laufpegelcodierung, siehe 430. So nimmt der Codierer beispielsweise eine Huffman-Codierung, eine kontextbasierte arithmetische Codierung oder eine andere Technik des Entropiecodierens an den Lauflängen und Signalpegeln vor. Der Codierer kann dieselbe Technik (beispielsweise die kontextbasierte arithmetische Codierung) vor und nach dem Umschaltpunkt verwenden. Alternativ kann der Codierer auch andere Techniken verwenden.
-
Darüber hinaus können, obwohl in 4 und in einigen anderen Figuren der Beschreibung nur ein einziger Umschaltpunkt gezeigt ist, zusätzliche Umschaltpunkte verwendet werden, um die Eingabedaten in mehr als zwei Abschnitte zu teilen. So können zusätzliche adaptive Schaltpunkte beispielsweise bei höheren Schwellen von aufeinanderfolgenden Nullen gesetzt werden. Andere Codierschemen können dann bei diesen anderen Abschnitten angewendet werden. Alternativ kann der Codierer mit verschiedenen Segmentierungspunkten in der Sequenz experimentieren, wobei er die Codiereffizienzen für verschiedene Segmentierungskonfigurationen gemeinsam mit dem Aufwand für die Signalisierung der verschiedenen Konfigurationen für den Decodierer gewichtet.
-
5 zeigt eine Technik des Mehrfachmodicodierens 500 mit einer Berechnung des adaptiven Umschaltpunktes entsprechend einer Implementierung. Der adaptive Umschaltpunkt hängt von einer Anzahl von aufeinanderfolgenden Nullwertkoeffizienten ab. Die Eingabedaten sind Signalpegel für quantisierte Transformationskoeffizienten, beginnend mit dem Koeffizienten mit der niedrigsten Frequenz hin zu dem Koeffizienten mit der höchsten Frequenz. In der Praxis hängt die Position des Umschaltpunktes von dem komprimierten Signal und der Bitrate/Qualität der Codierung ab. Alternativ sind die Eingabedaten in einer anderen Form und/oder Organisation der Audiodaten vorhanden.
-
Zu Beginn initialisiert der Codierer einige Variablen. Insbesondere setzt der Codierer eine Laufzählervariable auf 0, siehe 510, und eine Codierstatusvariable auf „direkt”, siehe 512.
-
Der Codierer empfängt den nächsten Koeffizienten QC als Eingabe, siehe 520. Der Codierer prüft anschließend, siehe 530, ob der Koeffizient QC gleich 0 ist. Ist der Koeffizient QC nicht gleich 0, so setzt der Codierer den Laufzähler zurück, siehe 538. Andernfalls (das heißt wenn der Koeffizient QC gleich 0 ist) inkrementiert der Codierer die Laufzählervariable, siehe 532, und prüft, ob der aktuelle Laufzähler den Laufzählerschwellenwert übersteigt, siehe 534. Der Laufzählerschwellenwert kann statisch sein oder von einem Faktor abhängen, so beispielsweise von der Größe eines Blocks von Koeffizienten (so beispielsweise ein Laufzählerschwellenwert von 4 für eine Sequenz von 256 Koeffizienten, von 8 für eine Sequenz von 512 Koeffizienten etc.). Alternativ kann der Zähler auf andere Weise adaptiv sein. Übersteigt der Laufzähler den Schwellenwert, so ändert der Codierer den Codierstatus auf die Laufpegelcodierung („RLE” run length coding), siehe 536.
-
Der Codierer codiert den Koeffizienten QC anschließend geeignet, siehe 540 (In einigen Fällen werden Gruppen von Koeffizienten gemeinsam unter Verwendung einer Technik, so beispielsweise des vektoriellen Huffman-Codierens, codiert. In derartigen Fällen kann der Codierer das Codieren des Koeffizienten QC verschieben).
-
Der Codierer prüft anschließend, siehe 550, ob der Codierer zwischen den Codiermodi umschalten sollte. Insbesondere prüft der Codierer den Codierstatus. Ist der Codierstatus nicht mehr direkt (beispielsweise wenn der Codierer den Codierstatus als Ergebnis des Erreichens einer Schwellenwertzahl von Nullkoeffizienten auf RLE umschaltet), so beginnt der Codierer mit der Laufpegelcodierung der Koeffizienten, siehe 560 (in Fällen, in denen Gruppen von Koeffizienten gemeinsam codiert werden, kann der Codierer wieder die Umschaltentscheidung bis zum Erreichen eines geeigneten Kennpunktes für eine Gruppe von Koeffizienten verschieben).
-
Nimmt der Codierer kein Umschalten der Codiermodi vor, so prüft der Codierer, ob das Codieren der Koeffizienten beendet ist, siehe 570. Ist dies der Fall, so hört der Codierer auf. Andernfalls gibt der Codierer den nächsten Koeffizienten, siehe 520, ein, um den Codiervorgang fortzusetzen.
-
B. Adaptives Entropiedecodiermodiumschalten
-
Wie in 6 gezeigt ist, decodiert bei einer Technik 600 der Mehrfachmodidecodierung der Decodierer die codierten Signalpegel direkt, siehe 610. Der Decodierer nimmt beispielsweise ein variabel-dimensionales Huffman-Decodieren, ein kontextbasiertes arithmetisches Decodieren oder eine andere Technik des Entropiedecodierens an den direkt codierten Signalpegeln vor.
-
An einem Umschaltpunkt wechselt der Decodierer während des Decodierens das Decodierschema, siehe 620. Ist der Umschaltpunkt vorgegeben, so kann der Decodierer in Form eines Flags oder eines anderen Mitteilungsmechanismus Daten empfangen, die explizit angeben, wann der Decodierer die Decodierschemen wechseln soll. Alternativ kann der Decodierer adaptiv berechnen, wann die Decodierschemen zu wechseln sind, und zwar auf Grundlage der empfangenen Eingabedaten. Berechnet der Decodierer den Umschaltpunkt, so verwendet der Decodierer dieselbe Berechnungstechnik, die von dem Codierer verwendet worden ist. Hierdurch ist sichergestellt, dass das Decodierschema am richtigen Punkt gewechselt wird. Der Decodierer zählt beispielsweise aufeinanderfolgende Nullen (oder alternativ einen anderen vorherrschenden Wert), um den Umschaltpunkt adaptiv zu bestimmen. Bei einer Implementierung bedient sich der Decodierer einer Technik entsprechend der in 5 gezeigten Codierertechnik. Alternativ bedient sich der Decodierer anderer Kriterien zur Bestimmung des Umschaltpunktes.
-
Nach dem Umschaltpunkt decodiert der Decodierer die verbleibenden laufpegelcodierten Signalpegel, siehe 630. So setzt der Decodierer beispielsweise ein Huffman-Decodieren, ein kontextbasiertes arithmetisches Decodieren oder eine andere Technik des Entropiedecodierens an den codierten Lauflängen und Signalpegeln ein. Der Decodierer kann sich vor und nach dem Umschaltpunkt derselben Technik (beispielsweise kontextbasiertes arithmetisches Decodieren) bedienen. Alternativ kann der Decodierer auch verschiedene Techniken einsetzen.
-
IV. Variabel-dimensionales Huffman-Codieren und -decodieren
-
Während Symbole, so beispielsweise direkte Signalpegel, unter Verwendung einer skalaren Huffman-Codierung codiert werden können, weist ein derartiger Lösungsansatz dann Beschränkungen auf, wenn die optimale Anzahl von Bits zum Codieren eines Symbols eine Bruchzahl ist. Das skalare Huffman-Codieren ist zudem durch die Unfähigkeit der skalaren Huffman-Codes, die statistische Korrelation zwischen den Symbolen einzubeziehen, beschränkt. Das vektorielle Huffman-Codieren ergibt eine bessere Bitratenverringerung als das skalare Huffman-Codieren (beispielsweise dadurch, dass der Codierer in die Lage versetzt wird, die Wahrscheinlichkeiten in binären Huffman-Codes als Bruchzahlen zu nutzen). Im Allgemeinen ergeben höher-dimensionale Vektoren eine bessere Bitratenverringerung als niedrigerdimensionale Vektoren. Wird ein Code jeder möglichen Symbolkombination zugewiesen, so nimmt die Größe des Codebuches exponenziell zu, wenn die Dimension des Vektors zunimmt. Die Anzahl von möglichen Kombinationen für einen vierdimensionalen Vektor ist in einem 32-Bit-System beispielsweise gleich (232)4 . Die Suchzeit zum Auffinden eines passenden Vektors und eines Huffman-Codes nimmt ebenfalls mit der Zunahme der Größe des Codebuches drastisch zu.
-
Bei einigen Ausführungsbeispielen verwendet ein Codierer, so beispielsweise der Codierer 200 von 2, zur Verringerung der Größe des Codebuches eine Technik des variabeldimensionalen Vektor-Huffman-Codierens. Anstatt des Zuweisens eines Codebuchcodes an jede mögliche n-dimensionale Kombination werden einer begrenzten Anzahl der am meisten wahrscheinlichen n-dimensionalen Vektoren Codes zugewiesen. Wird einem bestimmten n-dimensionalen Vektor kein Code zugewiesen, so wird der n-dimensionale Vektor anstelle dessen in Form von niedriger-dimensionalen (beispielsweise von zwei n/2-dimensionalen Vektoren), in Form von Skalaren mit Huffman-Codes oder von Skalaren unter Verwendung einer tabellenfreien Technik zum Darstellen von diskreten Werten codiert. Ein Decodierer, so beispielsweise der Decodierer 300 von 3, rekonstruiert einen Vektor durch Auffinden des Codes beziehungsweise der Codes für den Vektor und der zugehörigen Werte.
-
Für den Fall von vierdimensionalen Vektoren mit 256 möglichen Werten pro Symbol codiert der Codierer beispielsweise die 500 am meisten wahrscheinlichen vierdimensionalen Vektoren mit Huffman-Codes und verwendet einen Escape-Code, um andere Vektoren anzugeben. Der Codierer teilt die anderen Vektoren in zweidimensionale Vektoren. Der Codierer codiert die 500 am meisten wahrscheinlichen zweidimensionalen Vektoren mit Huffman-Codes und verwendet einen Escape-Code zur Darstellung von anderen Vektoren, die geteilt und mit skalaren Huffman-Codes codiert werden. Damit verwendet der Codierer 501 + 501 + 256 Codes.
-
Im Zusammenhang mit dem Bestimmen, welche Vektoren oder Skalare mit den Huffman-Codes in einer Tabelle dargestellt werden, sowie im Zusammenhang mit dem Zuweisen der Huffman-Codes selbst für eine Tabelle kann der Aufbau des Codebuches statisch, adaptiv bezüglich der vorher codierten Daten oder adaptiv bezüglich der noch zu codierenden Daten sein.
-
A. Variabel-dimensionales Vektor-Huffman-Codieren
-
Wie in 7 gezeigt ist, verwendet ein Codierer eine Technik 700 des variabel-dimensionalen Vektor-Huffman-Codierens („VDVH encoding”, variabel-dimension vector Huffman encoding). Der Codierer verwendet beispielsweise die Technik 700, um Signalpegel für Frequenzkoeffizienten von Audiodaten direkt zu codieren. Alternativ verwendet der Codierer die Technik 700 zum Codieren einer anderen Form von Audiodaten. Aus Gründen der einfacheren Darstellung zeigt 7 nicht den Aufbau des Codebuches. Der Aufbau des Codebuches kann statisch, adaptiv bezüglich der vorher codierten Daten oder adaptiv bezüglich der noch zu codierenden Daten sein.
-
Der Codierer empfängt den nächsten Vektor mit n Symbolen, siehe 710. Der Codierer empfängt beispielsweise die nächsten vier Symbole in der Sequenz.
-
Der Codierer prüft, siehe 720, ob das Codebuch einen Code für den Vektor enthält. Ist dies der Fall, so verwendet der Codierer, siehe 730, einen einzelnen Huffman-Code zum Codieren des Vektors. Um beispielsweise zu bestimmen, wie ein n-dimensionaler Vektor zu codieren ist, prüft der Codierer eine für n-dimensionale Vektoren bestimmte Code-Tabelle für einen mit dem Vektor verknüpften Code. Da höher-dimensionale Vektoren üblicherweise größere Bitrateneinsparungen mit sich bringen, verwendet der Codierer Huffman-Codes für die am meisten wahrscheinlichen n-dimensionalen Vektoren. Zur Beschränkung der Größe der Tabelle weisen jedoch nur einige der n-dimensionalen Vektoren zugehörige Codes auf.
-
Enthält das Codebuch keinen Code für den Vektor, so teilt der Codierer, siehe 740, den Vektor in kleinere Vektoren und/oder Skalare und codiert die kleineren Vektoren und/oder Skalare. Der Codierer teilt beispielsweise einen Vektor von n Symbolen in x n/x-Symbolvektoren. Für jeden n/x-Symbolvektor wiederholt der Codierer rekursiv die Codiertechnik und hört auf, wenn der n/x-Symbolvektor oder seine konstituierenden Vektoren/Skalare mit Huffman-Codes oder (für Skalare) unter Verwendung einer tabellenfreien Technik zum Darstellen von diskreten Werten codiert sind.
-
Der Codierer prüft anschließend, siehe 750, ob beliebige zusätzliche Vektoren vorhanden sind, die codiert werden müssen. Ist dies nicht der Fall, so hört der Codierer auf. Andernfalls empfängt der Codierer, siehe 710, den nächsten Vektor von n Symbolen.
-
1. Beispielsimplementierung
-
8 zeigt detailliert eine Technik 800 zum Codieren von Vektoren unter Verwendung der VDVH-Codierung entsprechend einer Implementierung. Bei der Technik 800 summiert der Codierer ganzzahlige Werte der Vektoren in einem Vektor von Symbolen, um zu bestimmen, ob der Vektor unter Verwendung eines einzelnen Huffman-Codes zu codieren ist oder ob der Vektor in kleinere Vektoren/Skalare zu teilen ist. Dies begrenzt effektiv die Größe des Codebuches und beschleunigt die Suche nach dem Code.
-
Die Codebuch-Tabelle für n-dimensionale Vektoren enthält Huffman-Codes für L1 n-dimensionale Vektoren. Die Codebuch-Tabelle enthält darüber hinaus einen Escape-Code. Die L1 Codes sind für jeden Vektor vorhanden, für den die Summe der Vektorkomponenten (die ganze Zahlen sind) unterhalb eines bestimmten Schwellenwertes T1 ist. Man gehe beispielsweise davon aus, dass n gleich 4 ist und der Schwellenwert T1 für vierdimensionale Vektoren gleich 6 ist. Die Codebuch-Tabelle für vierdimensionale Vektoren enthält den Escape-Code sowie 126 Codes, und zwar einen für jeden möglichen Vektor, dessen Komponenten (beispielsweise die Absolutwerte der Komponenten) sich zu weniger als 6 addieren – (0, 0, 0, 0), (0, 0, 0, 1) und so weiter. Das Begrenzen der Größe der Tabelle auf Grundlage der Summe der Komponenten der Vektoren ist effektiv, da im Allgemeinen die am meisten wahrscheinlichen Vektoren diejenigen mit den kleineren Komponentensummen sind.
-
Weist die Codebuch-Tabelle für n-dimensionale Vektoren keinen Huffman-Code für einen bestimmten n-dimensionalen Vektor auf, so addiert der Codierer einen Escape-Code zu dem Ausgabebitstrom und codiert den n-dimensionalen Vektor in Form von niedriger-dimensionalen Vektoren oder Skalaren, wobei die niedriger-dimensionalen Vektoren oder Skalare in anderen Codebuch-Tabellen nachgeschlagen werden. Die niedrigere Dimension ist beispielsweise n/2, es sei denn, n/2 = 1, wobei in diesem Fall der n-dimensionale Vektor in Skalare aufgespalten wird. Alternativ wird der n-dimensionale Vektor auf beliebige andere Weise aufgespalten.
-
Die Codebuch-Tabelle für niedriger-dimensionale Vektoren enthält Huffman-Codes für L2 niedriger-dimensionale Vektoren sowie einen Escape-Code. Die L2 Codes sind für jeden Vektor vorhanden, für den die Summe der Vektorkomponenten unterhalb eines bestimmten Schwellenwertes T2 für die niedriger-dimensionale Tabelle ist. Man gehe beispielsweise davon aus, dass die niedrigere Dimension gleich 2 und der Schwellenwert T2 für zweidimensionale Vektoren gleich 16 ist. Die Codebuch-Tabelle für zweidimensionale Vektoren enthält den Escape-Code sowie 136 Codes, und zwar einen für jeden möglichen Vektor, dessen Komponenten (beispielsweise die Absolutwerte von Komponenten) sich zu weniger als 16 addieren – (0, 0), (0, 1) etc.
-
Enthält die Codebuch-Tabelle für die niedriger-dimensionalen Vektoren keinen Huffman-Code für einen bestimmten niedriger-dimensionalen Vektor, so addiert der Codierer einen Escape-Code zu dem Ausgabebitstrom und codiert den Vektor in Form von noch niedrigerdimensionalen Vektoren oder Skalaren unter Verwendung anderer Codebuch-Tabellen. Der Vorgang wird bis hinab zur Ebene der Skalare wiederholt. Das Aufteilen erfolgt beispielsweise in Zweierpotenzen bis hinunter zur skalaren Ebene. Alternativ wird der Vektor auf beliebige andere Weise geteilt.
-
Auf der skalaren Ebene enthält die Codebuch-Tabelle Huffman-Codes für L3 Skalare sowie einen Escape-Code. Die L3 Codes sind für jeden Skalar unterhalb eines bestimmten Schwellenwertes T3 (wobei davon ausgegangen wird, dass kleinere Werte weniger wahrscheinlich sind). Man gehe beispielsweise davon aus, dass der Schwellenwert T3 für Skalare gleich 100 ist. Die Codebuch-Tabelle für Skalare enthält 100 Codes und einen Escape-Code. Weist ein Skalar keinen zugehörigen Code in der skalaren Code-Tabelle auf, so wird der Skalar mit dem Escape-Code und einem Wert (beispielsweise einem Buchstaben) entsprechend einer tabellenfreien Technik codiert. Unter Verwendung von allen numerischen Beispielen in diesem Abschnitt enthalten die Tabellen eine Gesamtzahl von 126 + 1 + 136 + 1 + 100 + 1 = 365 Codes.
-
Die Dimensionsgrößen für Tabellen, die Vektoraufspaltungsfaktoren und die Schwellenwerte für die Vektorkomponentensummen hängen von der Implementierung ab. Andere Implementierungen bedienen sich anderer Vektorgrößen, anderer Aufspaltungsfaktoren und/oder anderer Schwellenwerte. Alternativ bedient sich ein Codierer anderer Kriterien als der Vektorkomponentensummen, um Vektorgrößen/Codebuch-Tabellen beim VDVH-Codieren umzuschalten.
-
Wie in 8 gezeigt ist, empfängt der Codierer zunächst einen n-dimensionalen Vektor, siehe 810. Der n-dimensionale Vektor umfasst n Symbole, wobei jedes Symbol beispielsweise einen Wert aufweist, der den quantisierten Pegel für einen Frequenzkoeffizienten der Audiodaten darstellt.
-
Der Codierer summiert die Vektorkomponenten, siehe 812, und vergleicht die Summe mit einem Schwellenwert, siehe 820, für n-dimensionale Vektoren. Ist die Summe kleiner oder gleich dem Schwellenwert, so codiert der Codierer den n-dimensionalen Vektor mit einem Huffman-Code aus der Codetabelle, siehe 822, und fährt fort, bis das Codieren beendet ist, siehe 824. Ist die Summe größer oder gleich dem Schwellenwert, so sendet der Codierer einen Escape-Code, siehe 826, und teilt den n-dimensionalen Vektor in zwei kleinere Vektoren mit Dimensionen von jeweils n/2 auf, siehe 830.
-
Der Codierer erhält den nächsten n/2-dimensionalen Vektor, siehe 840, und summiert die Komponenten des n/2-dimensionalen Vektors, siehe 842. Der Codierer prüft die Summe gegen einen Schwellenwert in Verbindung mit n/2-dimensionalen Vektoren, siehe 850. Ist die Summe kleiner oder gleich dem Schwellenwert, so codiert der Codierer den n/2-dimensionalen Vektor mit einem Huffman-Code aus einer Code-Tabelle, siehe 852, für n/2-dimensionale Vektoren und empfängt den nächsten n/2-dimensionalen Vektor, siehe 840, wenn der Codierer das Codieren für n/2-dimensionale Vektoren nicht beendet hat, siehe 854. Ist die Summe größer als der Schwellenwert für n/2-dimensionale Vektoren, so sendet der Codierer einen weiteren Escape-Code, siehe 856.
-
Der Codierer folgt bei der Verarbeitung der Vektoren im Allgemeinen diesem Muster, indem entweder jeder Vektor codiert wird oder der Vektor in niedriger-dimensionale Vektoren geteilt wird. In Fällen, in denen der Codierer einen Vektor in zwei skalare (eindimensionale) Komponenten teilt, siehe 860, empfängt der Codierer den nächsten Skalar, siehe 870, und vergleicht den Wert des Skalars mit einem Schwellenwert in Verknüpfung mit skalaren Werten, siehe 880. Ist der skalare Wert kleiner oder gleich dem Schwellenwert, siehe 880, so codiert der Codierer den Skalar unter Verwendung eines Huffman-Codes aus einer Code-Tabelle, siehe 882, für Skalare. Ist der skalare Wert größer als der Schwellenwert, so codiert der Codierer den Skalar unter Verwendung einer tabellenfreien Technik, siehe 884. Der Codierer empfängt anschließend den nächsten Skalar, siehe 870, wenn die Verarbeitung der Skalare noch nicht abgeschlossen ist, siehe 886.
-
Alternativ verwendet der Codierer Tabellen mit verschiedenen Dimensionsgrößen, teilt Vektoren auf irgendeine andere Weise als mittels Zweierpotenzen und/oder verwendet Kriterien jenseits der Vektorkomponentensumme, um Vektorgrößen/Codebuch-Tabellen bei der VDVH-Codierung umzuschalten.
-
2. Adaptives Umschalten
-
9 zeigt eine Technik 900 zum VDVH-Codieren von Koeffizienten von direkten Signalpegeln, wobei hier der Codierer adaptiv einen Schaltpunkt zum Wechseln der Codierung von Lauflängen und Signalpegeln entsprechend einer Implementierung bestimmt. Der adaptive Umschaltpunkt hängt von einem Zähler von aufeinanderfolgenden Nullwertkoeffizienten ab. Die Eingabedaten sind Signalpegel für quantisierte Transtormationskoeffiziertten, beginnend beim Koeffizienten mit der niedrigsten Frequenz bis hin zu dem Koeffizienten mit der höchsten Frequenz. Alternativ liegen die Eingabedaten in anderer Form und/oder Organisation von Audiodaten vor.
-
Zu Beginn initialisiert der Codierer verschiedene Variablen. Insbesondere setzt der Codierer eine Laufzählervariable auf 0, siehe 910, eine aktuelle Vektorvariable auf leer, siehe 912, und eine Codierstatusvariable auf die direkte variabel-dimensionale Vektor-Huffman-Codierung („DVDVH” encoding, direct variable-dimension vector Huffman encoding), siehe 914.
-
Der Codierer empfängt den nächsten Koeffizienten QC als Eingabe, siehe 920. Der Codierer prüft anschließend, siehe 930, ob der Koeffizient gleich 0 ist. Ist der Koeffizient QC ungleich 0, so setzt der Codierer den Laufzähler, siehe 938, zurück und addiert den Koeffizienten QC zu dem aktuellen Vektor, siehe 940. Andernfalls (das heißt, wenn der Koeffizient QC gleich 0 ist) inkrementiert der Codierer die Laufzählervariable, siehe 932, und prüft, ob der aktuelle Laufzähler den Laufzählerschwellenwert, siehe 934, übersteigt. Der Laufzählerschwellenwert kann statisch sein oder von einem Faktor, so beispielsweise von der Größe eines Blocks von Koeffizienten, abhängen (beispielsweise vier Nullen in einer Eingabesequenz von 256 Koeffizienten), oder er kann auf andere Weise adaptiv sein. Diese Schwelle kann erhöht oder abgesenkt werden, und zwar unter Berücksichtigung oder auch Vernachlässigung der Anzahl der Koeffizienten in einer Eingabesequenz. Übersteigt der Laufzähler die Schwelle, so wechselt der Codierer den Codierstatus auf RLE (run level encoding RLE, Laufpegelcodierung), siehe 936, und der Koeffizient QC wird als Komponente zu dem aktuellen Vektor addiert, siehe 940.
-
Das Addieren des Koeffizienten QC zu dem aktuellen Vektor inkrementiert die Dimension des Vektors. Der Codierer bestimmt, siehe 950, ob der aktuelle Vektor zur Codierung bereit ist, indem die Anzahl der Komponenten in dem aktuellen Vektor mit der maximalen Dimension für den aktuellen Vektor verglichen wird. Ist dies der Fall, so codiert der Codierer den aktuellen Vektor unter Verwendung der DVDVH-Codierung, siehe 960. Ist der aktuelle Vektor kleiner als die maximale Dimension, der Koeffizient QC jedoch der letzte in einer Sequenz, so kann der Codierer den aktuellen Vektor auffüllen (pad) und unter Verwendung der DVDVH-Codierung codieren, siehe 960. Die maximale Dimension hängt von der Implementierung ab. Bei einer Implementierung ist diese gleich 8. Gleichwohl kann die maximale Dimension erhöht oder erniedrigt werden, was beispielsweise von der Anzahl der zum Erzeugen, Speichern und Übermitteln eines Codebuches verfügbaren Ressourcen abhängt.
-
Nach dem Codieren des Vektors prüft der Codierer den Codierstatus, siehe 970. Ist der Codierstatus nicht mehr gleich DVDVH (beispielsweise wenn der Codierer den Codierstatus als Ergebnis eines Überschreitens eines Schwellenwertes von Nullkoeffizienten gewechselt hat), so beginnt der Codierer mit dem Codieren der Koeffizienten als Lauflängen und -pegel, siehe 980. Das Laufpegelcodieren kann auf verschiedene Weisen ausgeführt werden, darunter beispielsweise unter Verwendung des Huffman-Codierens, des vektoriellen Huffman-Codierens oder des kontextbasierten arithmetischen Codierens. Bei einigen Ausführungsbeispielen wird das Laufpegel-Codieren unter Verwendung eines Huffman-Codierens mit zwei Huffman-Code-Tabellen vorgenommen, wobei eine Tabelle zum Codieren von Daten verwendet wird, bei denen kürzere Läufe wahrscheinlicher sind, und eine Tabelle zum Codieren von Daten verwendet wird, bei denen längere Läufe wahrscheinlicher sind. Der Codierer probiert jede Tabelle aus und wählt Codes aus einer der Tabellen aus, wobei ein Signalbit angibt, welche Tabelle der Codierer verwendet.
-
Hat der Codierstatus nicht gewechselt oder ist der aktuelle Vektor nicht zum Codieren bereit, so bestimmt der Codierer, siehe 990, ob weitere Koeffizienten zum Codieren vorhanden sind. Ist dies der Fall, so gibt der Codierer den nächsten Koeffizienten, siehe 920, ein und setzt den Codiervorgang fort.
-
B. Variabel-dimensionales Vektor-Huffman-Decodieren
-
10 zeigt eine VDVH-Decodiertechnik 1000 entsprechend der VDVH-Codiertechnik 700 von 7. Ein Decodierer verwendet die Technik 1000 beispielsweise zum direkten Decodieren von codierten Signalpegeln für Frequenzkoeffizienten von Audiodaten. Alternativ verwendet der Decodierer die Technik zum Decodieren einer anderen Form von Audiodaten.
-
Der Decodierer empfängt, siehe 1010, den nächsten Huffman-Code für eine für n-dimensionale Vektoren bestimmte Huffman-Code-Tabelle. Der Decodierer empfängt beispielsweise den nächsten Huffman-Code für vier Symbole in der Sequenz.
-
Der Decodierer prüft, siehe 1020, ob der Huffman-Code der Escape-Code für die für n-dimensionale Vektoren bestimmte Huffman-Code-Tabelle ist. Ist dies nicht der Fall, so empfängt der Decodierer, siehe 1030, diejenigen n Symbole, die von dem Huffman-Code dargestellt werden. Der Decodierer empfängt beispielsweise die vier Symbole, die mit dem Huffman-Code in einem für vierdimensionale Vektoren bestimmten Huffman-Codebuch verknüpft sind.
-
Ist der Code der Escape-Code, so enthält das n-dimensionale Codebuch keinen Code für den Vektor, und der Decodierer empfängt, siehe 1040, Huffman-Codes für kleinere Vektoren und/oder Skalare. So empfängt der Decodierer beispielsweise Codes für x n/x-Symbolvektoren. Für jeden n/x-Symbolvektor wiederholt der Decodierer rekursiv die Decodiertechnik, wobei er aufhört, wenn der n/x-Symbolvektor oder dessen konstituierende Vektoren/Skalare decodiert sind.
-
Der Decodierer prüft anschließend, siehe 1050, ob zusätzliche Codes für die für n-dimensionale Vektoren bestimmte Huffman-Codiertabelle zum Decodieren vorhanden sind. Ist dies nicht der Fall, so hört der Decodierer auf. Andernfalls empfängt der Decodierer, siehe 1010, den nächsten derartigen Huffman-Code.
-
1. Beispielsimplementierung
-
11 zeigt detailliert eine Technik 1100 zum Decodieren von Vektoren, die unter Verwendung der VDVH-Codierung entsprechend einer Implementierung codiert worden sind. Die Decodiertechnik 1100 entspricht der Codiertechnik 800 von 8.
-
Wie in 11 gezeigt ist, empfängt der Decodierer den nächsten Code für die für n-dimensionale Vektoren bestimmte Huffman-Code-Tabelle, siehe 1110. Der Decodierer prüft, ob der Code der Escape-Code für die für n-dimensionale Vektoren bestimmte Huffman-Code-Tabelle ist, siehe 1120. Ist dies nicht der Fall, so empfängt der Decodierer die n Symbole, die von dem Code in der n-dimensionalen Vektortabelle, siehe 1122, dargestellt werden. Der Decodierer setzt dies fort, bis er die Verarbeitung der codierten Daten beendet hat, siehe 1124.
-
Ist der Code der Escape-Code für die für n-dimensionale Vektoren bestimmte Huffman-Code-Tabelle, so decodiert der Decodierer den n-dimensionalen Vektor in Form von n/2-dimensionalen Vektoren unter Verwendung einer für n/2-dimensionale Vektoren bestimmten Huffman-Code-Tabelle. Insbesondere empfängt der Decodierer den nächsten Code für die für n/2-dimensionale Vektoren bestimmte Huffman-Code-Tabelle, siehe 1130. Der Decodierer prüft, ob der Code der Escape-Code für die für n/2-dimensionale Vektoren bestimmte Huffman-Code-Tabelle ist, siehe 1140. Ist dies nicht der Fall, so empfängt der Decodierer n/2 Symbole aus der Darstellung durch den Code in der für n/2-dimensionale Vektoren bestimmten Huffman-Code-Tabelle, siehe 1142. Der Decodierer setzt die Verarbeitung der Codes für die für n/2-dimensionale Vektoren bestimmte Huffman-Code-Tabelle fort, bis die Verarbeitung der Codes beendet ist, siehe 1144.
-
Ist der Code der Escape-Code für die für n/2-dimensionale Vektoren bestimmte Huffman-Code-Tabelle, so decodiert der Decodierer den n/2-dimensionalen Vektor in Form von vier n/4-dimensionalen Vektoren, die Skalare sein können und fährt entsprechend fort.
-
Der Decodierer folgt im Allgemeinen dem Muster der Decodierung von höher-dimensionalen Vektoren in Form von zwei niedriger-dimensionalen Vektoren, wenn Escape-Codes erfasst werden, bis die zu decodierenden Vektoren Skalare (eindimensionale Vektoren) sind. An diesem Punkt empfängt der Decodierer den nächsten Code für eine skalare Huffman-Code-Tabelle, siehe 1150. Der Decodierer prüft, ob der Code der Esacpe-Code für die skalare Huffman-Code-Tabelle ist, siehe 1160. Ist dies nicht der Fall, so empfängt der Decodierer den Skalar aus der Darstellung durch den Code in der skalaren Huffman-Code-Tabelle, siehe 1162. Der Decodierer setzt die Verarbeitung der Codes für die Skalare fort, bis die Verarbeitung dieser Codes vollständig ist, siehe 1164. Ist der Code der Escape-Code für die skalare Huffman-Code-Tabelle, so wird der Skalar unter Verwendung einer tabellenfreien Technik codiert, und der Decodierer empfängt den Wert, siehe 1170.
-
Alternativ verwendet der Decodierer Tabellen mit anderen Dimensionsgrößen und/oder Tabellen, die Vektoren auf irgendeine andere Weise als mittels Zweierpotenzen beim VDVH-Decodieren teilen.
-
2. Adaptives Umschalten
-
12 zeigt eine Technik 1200 zum Decodieren von Vektoren, die unter Verwendung der VDVH-Codierung entsprechend einer Implementierung codiert worden sind, wobei hier der Decodierer adaptiv einen Umschaltpunkt zum Wechseln auf die Decodierung von Lauflängen und Signalpegeln bestimmt. Der adaptive Umschaltpunkt hängt von einem Zähler von aufeinanderfolgenden Nullwertkoeffizientendaten in den Daten ab, die Signalpegel für quantisierte Transformationskoeffizienten darstellen, beginnend bei dem Koeffizienten mit der niedrigsten Frequenz bis hin zu dem Koeffizienten mit der höchsten Frequenz. Alternativ liegen die Daten in anderer Form und/oder Organisierung der Audiodaten vor.
-
Zu Beginn initialisiert der Decodierer einige Variablen. Insbesondere setzt der Decodierer einen Laufzähler auf 0, siehe 1210, und den Decodierstatus auf DVDVH, siehe 1212.
-
Der Decodierer decodiert den nächsten Vektor durch Nachschlagen des Codes für jenen Vektor in einer Huffman-Codiertabelle, siehe 1220. Der Decodierer setzt beispielsweise die Decodiertechnik 1100, die in 11 gezeigt ist, ein. Der Decodierer aktualisiert anschließend den Laufzähler auf Grundlage des decodierten Vektors, siehe 1230 (insbesondere unter Verwendung der Anzahl von Nullwerten in dem decodierten Vektor zum Zurücksetzen, Inkrementieren oder auf andere Weise erfolgenden Einstellen des Laufzählers).
-
Der Decodierer prüft, ob der Laufzähler einen Schwellenwert übersteigt, siehe 1240. Der Laufzählerschwellenwert kann statisch sein oder von einem Faktor, so beispielsweise der Größe eines Blocks von Koeffizienten, abhängen (beispielsweise vier Nullen in einer Eingabesequenz von 256 Koeffizienten), oder er kann auf andere Weise adaptiv sein. Übersteigt der Laufzähler den Schwellenwert, so beginnt der Decodierer mit der Decodierung der codierten Koeffizienten unter Verwendung des Laufpegeldecodierens, siehe 1250. Das Laufpegeldecodieren kann auf verschiedene Weisen ausgeführt werden, darunter beispielsweise unter Verwendung des Huffman-Decodierens, des vektoriellen Huffman-Decodierens oder des kontextbasierten arithmetischen Decodierens.
-
Bei einigen Ausführungsbeispielen wird das Laufpegeldecodieren unter Verwendung des Huffman-Decodierens mit zwei möglichen Huffman-Code-Tabellen vorgenommen, wobei die eine Tabelle für decodierte Daten verwendet wird, bei denen kürzere Läufe wahrscheinlicher sind, während die andere Tabelle für decodierte Daten verwendet wird, in denen längere Läufe wahrscheinlicher sind. Empfängt der Decodierer einen Code, so gibt ein Signalbit in dem Code an, welche Tabelle der Codierer verwendet hat, und der Decodierer schlägt den Code in der richtigen Tabelle nach.
-
Übersteigt der Laufzähler nicht den Schwellenwert, so fährt der Decodierer mit dem Verarbeiten von Vektoren fort, bis die Decodierung vollständig ist, siehe 1260.
-
V. Kontextbasiertes arithmetisches Codieren und Decodieren
-
Bei einigen Ausführungsbeispielen verwendet ein Codierer, so beispielsweise der Codierer 200 von 2, die kontextbasierte arithmetische Codierung (CDA) zur Codierung von Codesequenzen von Audiodaten. Bei der CBA-Codierung werden verschiedene Wahrscheinlichkeitsverteilungen für die Eingabesymbole mit verschiedenen Kontexten verknüpft. Die Wahrscheinlichkeitsverteilung, die zur Codierung der Eingabesequenz verwendet wird, wechselt, wenn der Kontext wechselt. Der Kontext kann durch Messen verschiedener Faktoren berechnet werden, von denen man erwartet, dass sie Auswirkungen auf die Wahrscheinlichkeit eines bestimmten Eingabesymbols haben, das in einer Eingabesequenz auftritt. Ein Decodierer, so beispielsweise der Decodierer 300 von 3, nimmt eine entsprechende arithmetische Decodierung vor.
-
Beim direkten Codieren von Koeffizienten (das heißt als direkte Pegel) verwendet der Codierer Faktoren, darunter die Werte der vorhergehenden Koeffizienten in der Sequenz, zur Berechnung des Kontextes. Bei der Codierung von Koeffizienten unter Verwendung der Laufpegelcodierung verwendet der Codierer Faktoren, darunter die Längen des aktuellen Laufes und der vorhergehenden Läufe, zusätzlich zu den Werten der vorhergehenden Koeffizienten zur Berechnung des Kontextes. Der Codierer verwendet eine Wahrscheinlichkeitsverteilung, die mit dem berechneten Kontext verknüpft ist, um den geeigneten arithmetischen Code für die Daten zu bestimmen. Damit bestimmt der Codierer durch Verwendung der verschiedenen Faktoren bei der Berechnung der Kontexte Kontexte adaptiv bezüglich der Daten und des Modus (beispielsweise direkt, Laufpegel) zur Darstellung von Daten.
-
Bei alternativen Ausführungsbeispielen kann der Codierer zusätzliche Faktoren verwenden, einige Faktoren weglassen oder vorstehend erwähnte Faktoren in anderen Kombinationen einsetzen.
-
A. Beispielsimplementierung von Kontexten
-
Tabellen 2 bis 5 sowie 13A bis 13D, 14A bis 14H und 15A bis 15H zeigen Kontexte beziehungsweise Wahrscheinlichkeitsverteilungen, die bei der CBA-Codierung und -decodierung entsprechend einer Beispielsimplementierung verwendet werden. Alternativ verwenden die CBA-Codierung und -decodierung unterschiedliche Kontexte und/oder unterschiedliche Wahrscheinlichkeitsverteilungen.
-
Obwohl die nachfolgenden Erläuterungen auf eine Kontextberechnung bei dem Codierer der Beispielsimplementierung abstellen, nimmt der Decodierer eine entsprechende Kontextberechnung während des Decodierens unter Verwendung der vorher decodierten Audiodaten vor.
-
Wie vorstehend ausgeführt worden ist, kann der Codierer Koeffizienten unter Verwendung der CBA-Codierung codieren, wobei der Codierer entweder nur direkte Pegel oder Lauflängen und direkte Pegel codiert. Bei einer Implementierung variieren die Techniken zur Berechnung der Kontexte jedoch in Abhängigkeit davon, ob der Codierer nur direkte Pegel oder Lauflängen und direkte Pegel codiert. Darüber hinaus verwendet der Codierer bei der Codierung von Lauflängen und direkten Pegeln verschiedene Kontexte in Abhängigkeit davon, ob der Codierer eine Lauflänge oder einen direkten Pegel codiert.
-
Der Codierer verwendet ein Vierkontextsystem zum Berechnen von Kontexten während einer arithmetischen Codierung von direkten Pegeln unter Verwendung eines Kausalkontextes. Der Codierer berechnet den Kontext für einen aktuellen Pegel L[n] auf Grundlage des Wertes des vorhergehenden Pegels L[n – 1] und des Pegels genau vor dem vorhergehenden Pegel L[n – 2]. Die Kontextberechnung basiert auf den Annahmen, dass (1) bei niedrigen vorhergehenden Pegeln der aktuelle Pegel wahrscheinlich niedrig ist und (2) die beiden vorhergehenden Pegel mit größerer Wahrscheinlichkeit bessere Vorhersagegrößen für die aktuellen Pegel als andere Pegel sind. Tabelle 2 zeigt die Kontexte, die mit den Werten der beiden vorhergehenden Pegel in dem Vierkontextsystem verknüpft sind.
13A bis
13D zeigen die Wahrscheinlichkeitsverteilungen für aktuelle Pegel dieser Kontexte. Tabelle 2: Kontexte für CBA-Codierung/Decodierung von direkten Pegeln
L[n – 1] | L[n – 2] | Kontext |
= 0 | = 0 | 0 |
= 0 | ≥ 1 | 1 |
= 1 | beliebig | 2 |
≥ 2 | beliebig | 3 |
-
Die Wahrscheinlichkeitsverteilungen von 13A und 13D gehen davon aus, dass für den Fall, dass die beiden vorhergehenden Pegel gleich 0 oder nahezu gleich 0 sind, die aktuellen Pegel mit größerer Wahrscheinlichkeit gleich 0 oder nahezu gleich 0 sind.
-
Der Codierer kann zudem eine CBA-Codierung bei der Durchführung einer Lauflängencodierung der Pegel einsetzen. Bei der Codierung einer Lauflänge zählen zu den Faktoren, die von dem Codierer zur Berechnung des Kontextes verwendet werden, der prozentuale Anteil von Nullen in der Eingabesequenz (ein laufender Gesamtwert über einen Teil der Sequenz oder die gesamte Sequenz) und die Länge des vorhergehenden Laufes von Nullen R[n – 1]. Der Codierer berechnet einen Nullprozentsatzindex auf Grundlage des prozentualen Anteils von Nullen in der Eingabesequenz, wie in Tabelle 3 gezeigt ist. Tabelle 3: Nullprozentsatzindex für CBA-Codierung/Decodierung von Lauflängen
Null% | Null% Index |
≥ 90 | 0 |
≥ 80 | 1 |
≥ 60 | 2 |
< 60 | 3 |
-
Der Codierer bedient sich des Nullprozentsatzindex und der Länge des vorhergehenden Laufes zur Berechnung des Kontextes zum Codieren der aktuellen Lauflänge, wie in
4 gezeigt ist.
14A bis
14H zeigen Wahrscheinlichkeitsverteilungen für unterschiedliche Lauflängenwerte im Zusammenhang mit diesen Kontexten. Tabelle 4: Kontexte für CBA-Codierung/Decodierung von Lauflängen
Null% Index | R[n – 1] | Kontext |
0 | = 0 | 0 |
0 | > 0 | 4 |
1 | = 0 | 1 |
1 | > 0 | 5 |
2 | = 0 | 2 |
2 | > 0 | 6 |
3 | = 0 | 3 |
3 | > 0 | 7 |
-
In einer Eingabesequenz, bei der beispielsweise 91% der Pegel gleich Null sind (was zu einem Nullprozentsatzindex von 0 führt) und bei der die Länge des vorhergehenden Laufes von Nullen gleich 15 ist, ist der Kontext gleich 4. Die Wahrscheinlichkeitsverteilungen von 14A und 14H zeigen, dass für den Fall, dass der prozentuale Anteil von Nullen in einer Eingabesequenz höher ist, längere Lauflängen wahrscheinlicher sind. Die Wahrscheinlichkeitsverteilungen gehen zudem davon aus, dass innerhalb eines gegebenen Nultprozentsatzindex Lauflängen im Gefolge einer Lauflänge von Null wahrscheinlich kürzer als Lauflängen im Gefolge einer Lauflänge größer als 0 sind.
-
Beim Codieren eines Pegels bei Laufpegeldaten zählen zu den Faktoren, die von dem Codierer zum Berechnen des Kontextes verwendet werden, die Länge des aktuellen Laufes R[n], die Länge des vorhergehenden Laufes R[n – 1] und die Werte der beiden vorhergehenden Pegel L[n – 1] und L[n – 2]. Die Kontextberechnung beruht auf der Beobachtung, dass der aktuelle Pegel von den vorhergehenden beiden Pegeln abhängt, solange der Abstand (das heißt die Lauflängen) zwischen den Pegeln nicht zu groß werden. Sind vorhergehende Pegel kleiner und sind vorhergehende Läufe kürzer, so ist der aktuelle Pegel wahrscheinlich niedrig. Sind vorhergehende Läufe länger, so haben vorhergehende Pegel eine geringeren Einfluss auf den aktuellen Pegel.
-
Die Kontexte im Zusammenhang mit den Werten der aktuellen Laufpegel, der vorhergehenden Lauflänge und der beiden vorhergehenden Pegel sind in Tabelle 5 gezeigt.
15A bis
15H zeigen Wahrscheinlichkeitsverteilungen für Pegel im Zusammenhang mit diesen Kontexten. Tabelle 5: Kontexte für CBA-Codierung/Decodierung von Pegeln bei Laufpegelcodierung
R[n] | R[n – 1] | L[n – 1] | L[n – 2] | Kontext |
≥ 2 | beliebig | beliebig | beliebig | 0 |
< 2 | ≥ 2 | = 1 | beliebig | 1 |
< 2 | ≥ 2 | = 2 | beliebig | 2 |
< 2 | ≥ 2 | > 2 | beliebig | 3 |
< 2 | < 2 | = 1 | = 1 | 4 |
< 2 | < 2 | = 1 | > 1 | 5 |
< 2 | < 2 | = 2 | beliebig | 6 |
< 2 | < 2 | > 2 | beliebig | 7 |
-
In einer Eingabesequenz, in der die Länge des aktuellen Laufes von Nullen beispielsweise gleich 1, die Länge des vorhergehenden Laufes von Nullen gleich 2 und der vorhergehende Pegel gleich 1 ist, ist der Kontext gleich 1. Die Wahrscheinlichkeitsverteilungen von 15A bis 15H zeigen, dass für den Fall, dass die vorhergehenden Pegel niedriger und die aktuellen und vorhergehenden Lauflängen kürzer sind, der aktuelle Pegel mit größerer Wahrscheinlichkeit gleich 0 oder nahezu gleich 0 ist.
-
B. Adaptives Umschalten
-
16 zeigt eine Technik 1600 für die CBA-Codierung von Koeffizienten von direkten Signalpegeln, wobei hier der Codierer adaptiv einen Umschaltpunkt zum Wechseln auf die Codierung der Lauflängen und Signalpegel entsprechend einer Implementierung bestimmt. Der adaptive Umschaltpunkt hängt von einem Zähler von aufeinanderfolgenden Nullwertkoeffizienten ab. Die Eingabedaten sind Signalpegel für quantisierte Transformationskoeffizienten, beginnend mit dem Koeffizienten der niedrigsten Frequenz bis hin zu dem Koeffizienten der höchsten Frequenz. Alternativ liegen die Eingabedaten in anderer Form und/oder Organisierung der Audiodaten vor.
-
Zu Beginn initialisiert der Codierer mehrere Variablen. Insbesondere setzt der Codierer eine Laufzahlervariable auf 0, siehe 1610, und eine Codierstatusvariable auf direktes kontextbasiertes arithmetisches Codieren (DCBA), siehe 1612.
-
Der Codierer empfängt den nächsten Koeffizienten QC als Eingabe, siehe 1620. Der Codierer prüft anschließend, siehe 1630, ob der Koeffizient gleich 0 ist. Ist der Koeffizient QC ungleich 0, so setzt der Codierer den Laufzähler, siehe 1638, zurück und codiert den Koeffizienten unter Verwendung der DCBA-Codierung, siehe 1640.
-
Andernfalls (das heißt wenn der Koeffizient QC gleich 0 ist) inkrementiert der Codierer die Laufzählervariable, siehe 1632, und prüft, ob der aktuelle Laufzähler den Laufzählerschwellenwert übersteigt, siehe 1634. Der Laufzähler kann statisch sein oder von einem Faktor, so beispielsweise der Größe eines Blocks von Koeffizienten abhängen (beispielsweise vier Nullen in einer Eingabesequenz von 256 Koeffizienten), oder er kann auf andere Weise adaptiv sein. Der Schwellenwert kann beispielsweise erhöht oder gesenkt werden, und zwar unter Berücksichtigung oder Vernachlässigung der Anzahl der Koeffizienten in einer Eingabesequenz. Übersteigt der Laufzähler den Schwellenwert, so wechselt der Codierer den Codierstatus auf RLE (runlevel coding RLE, Laufpegelcodierung), siehe 1636. Der Codierer codiert anschließend die Koeffizienten unter Verwendung der DCBA-Codierung, siehe 1640.
-
Nach dem Codieren des Koeffizienten prüft der Codierer den Codierstatus, siehe 1650. Ist der Codierstatus nicht mehr DCBA (das heißt, wenn der Codierer den Codierstatus als Ergebnis eines Überschreitens eines Schwellenwertes von Nullkoeffizienten auf RLE gewechselt hat) beginnt der Codierer mit dem Codieren der Koeffizienten als Lauflängen und Pegel, siehe 1660. Das Laufpegelcodieren kann auf verschiedene Weisen ausgeführt werden, darunter beispielsweise unter Verwendung des Huffman-Codierens, des vektoriellen Huffman-Codierens oder des CBA-Codierens (gegebenenfalls mit anderen Kontexten als beim vorherigen CBA-Codieren). Bei einigen Ausführungsbeispielen wird das Laufpegelcodieren unter Verwendung einer Huffman-Codierung mit Huffman-Code-Tabellen vorgenommen, wobei eine Tabelle zum Codieren von Daten verwendet wird, in denen kurze Läufe wahrscheinlicher sind, während die andere Tabelle zum Codieren von Daten verwendet wird, in denen längere Läufe wahrscheinlicher sind. Der Codierer probiert jede Tabelle aus und wählt Codes aus jeder der Tabellen aus, wobei ein Signalbit angibt, welche Tabelle der Codierer verwendet.
-
Hat der Codierstatus nicht gewechselt, so bestimmt der Codierer, siehe 1670, ob weitere Koeffizienten zum Codieren vorhanden sind. Ist dies der Fall, so gibt der Codierer den nächsten Koeffizienten, siehe 1620, ein und setzt den Codiervorgang fort.
-
C. Kontextbasiertes arithmetisches Decodieren
-
17 zeigt eine Technik 1700 zum Decodieren von Koeffizienten, die unter Verwendung der CBA-Codierung entsprechend einer Implementierung codiert worden sind, wobei der Decodierer adaptiv einen Umschaltpunkt zum Wechseln auf das Decodieren von Lauflängen und Signalpegeln bestimmt. Der adaptive Umschaltpunkt hängt von einem Zähler von aufeinanderfolgenden Nullwertkoeffizienten in den Daten ab, die Signalpegel für quantisierte Transformationskoeffizienten sind, beginnend mit dem Koeffizienten der niedrigsten Frequenz bis hin zu dem Koeffizienten der höchsten Frequenz. Alternativ liegen die Daten in anderer Form und/oder Organisierung der Audiodaten vor.
-
Zu Beginn initialisiert der Decodierer mehrere Variablen. Insbesondere setzt der Decodierer einen Laufzähler auf 0, siehe 1710, und einen Decodierstatus auf direkte kontextbasierte arithmetische Decodierung (DCBA), siehe 1712.
-
Der Decodierer decodiert den nächsten quantisierten Koeffizienten unter Verwendung von DCBA, siehe 1720, durch Heranziehen der Zahl, die der Codierer zur Darstellung des Koeffizienten bei der arithmetischen Codierung verwendet hat, und durch Extrahieren des Wertes des Koeffizienten aus jener Zahl. Der Decodierer aktualisiert anschließend den Laufzähler auf Grundlage des decodierten Koeffizienten, siehe 1730 (insbesondere auf Grundlage davon, ob der decodierte Koeffizient gleich dem Nullwert ist, um den Laufzähler zurückzusetzen oder zu inkrementieren).
-
Der Decodierer prüft, ob der Laufzähler einen Schwellenwert übersteigt, siehe 1740. Der Laufzähler kann statisch sein oder von einem Faktor, so beispielsweise der Größe eines Blockes von Koeffizienten abhängen (beispielsweise vier Nullen in einer Eingabesequenz von 256 Koeffizienten), oder er kann auf andere Weise adaptiv sein. Übersteigt der Laufzähler den Schwellenwert, so beginnt der Decodierer mit dem Decodieren der codierten Koeffizienten unter Verwendung eines Laufpegeldecodierens, siehe 1750. Das Laufpegeldecodieren kann auf verschiedene Weisen ausgeführt werden, darunter beispielsweise unter Verwendung eines Huffman-Decodierens, eines vektoriellen Huffman-Decodierens oder eines CBA-Decodierens (gegebenenfalls mit anderen Kontexten als beim vorhergehenden CBA-Decodieren). Bei einigen Ausführungsbeispielen wird das Laufpegeldecodieren unter Verwendung eines Huffman-Decodierens mit zwei möglichen Huffman-Code-Tabellen vorgenommen, wobei die eine Tabelle zum Decodieren von Daten verwendet wird, in denen kürzere Läufe wahrscheinlicher sind, während die andere Tabelle zum Decodieren von Daten verwendet wird, in denen längere Läufe wahrscheinlicher sind. Empfängt der Decodierer einen Code, so gibt ein Signalbit in dem Code an, welche Tabelle der Decodierer verwendet hat, und der Decodierer schlägt den Code in der jeweiligen Tabelle nach.
-
Überschreitet der Laufzähler den Schwellenwert nicht, so fährt der Decodierer mit der Verarbeitung der Koeffizienten fort, bis das Decodieren vollständig ist, siehe 1760.
-
VI. Tabellenfreies Codieren
-
Bei einigen Ausführungsbeispielen, bei denen das Huffman-Codieren zum Einsatz kommt, verwendet ein Codierer, so beispielsweise der Codierer 200 von 2, einen Esacpe-Code für eine Huffman-Code-Tabelle, um anzugeben, dass ein bestimmtes Symbol (oder eine Kombination von Symbolen) keinen zugehörigen Code in der Tabelle aufweist. Bisweilen wird ein Escape-Code verwendet, um anzugeben, dass ein bestimmtes Symbol (beispielsweise ein skalarer Wert für einen Pegel, der nicht in einer skalaren Huffman-Code-Tabelle für Pegel dargestellt wird, eine Lauflänge, die nicht in einer skalaren Huffman-Code-Tabelle für Lauflängen dargestellt wird, etc.) codiert werden soll, ohne einen Code aus der Huffman-Code-Tabelle zu verwenden. Mit anderen Worten, das Symbol soll unter Verwendung einer „tabellenfreien” Codiertechnik codiert werden.
-
Bei einigen Ausführungsbeispielen, bei denen das arithmetische Codieren zum Einsatz kommt, wird bisweilen ein Escape-Code verwendet, um anzuzeigen, dass ein bestimmtes Symbol nicht arithmetisch codiert werden soll. Das Symbol kann unter Verwendung eines Codes aus einer Huffman-Tabelle codiert werden, oder es kann unter Verwendung einer „tabellenfreien” Codiertechnik codiert werden.
-
Einige tabellenfreie Codiertechniken verwenden Codes fester Länge zur Darstellung von Symbolen. Die Verwendung von Codes fester Länge kann jedoch zu unnötig langen Codes führen.
-
Bei einigen Ausführungsbeispielen werden daher Symbole, so beispielsweise quantisierte Transformationskoeffizienten als Codes variabler Länge in einer tabellenfreien Codiertechnik dargestellt, wenn die Symbole nicht der andere Weise codiert werden. Ein Decodierer, so beispielsweise der Decodierer 300 von 3, setzt eine entsprechende tabellenfreie Decodiertechnik ein.
-
Tabelle 6 zeigt ein Beispiel für Pseudocode bei einer Implementierung einer derartigen tabellenfreien Codiertechnik.
-
Tabelle 6: Pseudocode für eine tabellenfreie Codiertechnik bei einer Implementierung
-
Die Anzahl der Bits, die der Codierer zur Codierung der Koeffizienten verwendet, hängt vom Wert des Koeffizienten ab. Der Codierer sendet einen 1, 2 oder 3 Bit umfassenden Wert, um die Anzahl von Bits anzuzeigen, die zum Codieren des Wertes verwendet worden sind, und sendet sodann den codierten Wert selbst unter Verwendung von 8, 16, 24 oder 31 Bit. Die Gesamtzahl von Bits, die der Codierer zur Codierung des Koeffizienten verwendet, liegt in einem Bereich von 9 Bit für einen Wert von weniger als 28 bis 34 Bit für einen Wert größer oder gleich 224, jedoch kleiner als 231.
-
Für eine Reihe von Koeffizienten sind die durchschnittlichen gesendeten Bits gleich dem nachfolgenden Ausdruck. P(0 ≤ C < 28)·9+ P(28 ≤ C < 216)·18 + P(216 ≤ C < 224)·27 + P(224 ≤ C < 231)·34
-
Hierbei ist P(m ≤ C < n) die Wahrscheinlichkeit des in einer Eingabesequenz erfolgenden Auftretens eines Koeffizienten C innerhalb des angegebenen Bereiches. Merkliche Ersparnisse von Bits sind daher möglich, wenn ein größerer prozentualer Anteil der Koeffizienten klein ist (beispielsweise kleiner als 216).
-
Als Alternativen wenden der Codierer und der Decodierer andere tabellenfreie Techniken des Codierens und Decodierens an.
-
Nach erfolgter Beschreibung und Darstellung der Prinzipien der vorliegenden Erfindung unter Bezugnahme auf zahlreiche beschriebene Ausführungsbeispiele ist einsichtig, dass die beschriebenen Ausführungsbeispiele mit Blick auf Anordnung und Einzelheiten abgewandelt werden können, ohne dass man von diesen Prinzipien abweichen würde. Es ist einsichtig, dass die Programme, Prozesse oder Verfahren gemäß vorstehender Beschreibung nicht mit nur einer bestimmten Art von Computerumgebung in Zusammenhang stehen oder hierauf beschränkt sind, es sei denn, es ist explizit anders angegeben. Verschiedene Arten von Allzweck- oder Sonderzweckcomputerumgebungen können zur Durchführung von Operationen entsprechend der hier offenbarten technischen Lehre verwendet werden. Elemente der beschriebenen Ausführungsbeispiele, die als zur Software gehörig dargestellt sind, können auch als Hardware implementiert sein und umgekehrt.
-
Eingedenk der zahlreichen möglichen Ausführungsbeispiele, bei denen die Prinzipien der vorliegenden Erfindung Anwendung finden können, werden als Erfindung all diejenigen Ausführungsbeispiele beansprucht, die in den Schutzbereich der nachfolgenden Ansprüche fallen oder hierzu äquivalent sind.
-
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 6304928 [0019]
- US 5883633 [0019]
- US 6233017 [0019]
- US 6223162 [0026]
- US 6377930 [0027]
- US 6300888 [0028]
-
Zitierte Nicht-Patentliteratur
-
- „Text Compression” von Bell et al., veröffentlicht bei Prentice Hall PTR, Seiten 105 bis 107, 1990 [0019]
- „Digital Compression for Multimedia” von Gibson et al., veröffentlicht bei Morgan Kaufmann, Seiten 17 bis 62, 1998 [0019]
- „Text Compression” von Bell et al., veröffentlicht bei Prentice Hall PTR, Seiten 105 bis 107, 1990 [0025]
- „Digital Compression for Multimedia” von Gibson et al., veröffentlicht bei Morgan Kaufmann, Seiten 17 bis 62, 199 [0025]
- „The Data Compression Book, Huffman One Better: Arithmetic Coding” von Nelson, Kapitel 5, Seiten 123 bis 165 (1992) [0031]