ES3035367T3 - Audio decoder, audio decoding method and computer program - Google Patents

Audio decoder, audio decoding method and computer program

Info

Publication number
ES3035367T3
ES3035367T3 ES22196723T ES22196723T ES3035367T3 ES 3035367 T3 ES3035367 T3 ES 3035367T3 ES 22196723 T ES22196723 T ES 22196723T ES 22196723 T ES22196723 T ES 22196723T ES 3035367 T3 ES3035367 T3 ES 3035367T3
Authority
ES
Spain
Prior art keywords
value
context
decoded
arith
spectral
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES22196723T
Other languages
English (en)
Inventor
Guillaume Fuchs
Vignesh Subbaraman
Markus Multrus
Nikolaus Rettelbach
Matthias Hildenbrand
Oliver Weiss
Arthur Tritthart
Patrick Warmbold
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fraunhofer Gesellschaft zur Foerderung der Angewandten Forschung eV
Original Assignee
Fraunhofer Gesellschaft zur Foerderung der Angewandten Forschung eV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fraunhofer Gesellschaft zur Foerderung der Angewandten Forschung eV filed Critical Fraunhofer Gesellschaft zur Foerderung der Angewandten Forschung eV
Application granted granted Critical
Publication of ES3035367T3 publication Critical patent/ES3035367T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/008Multichannel audio signal coding or decoding using interchannel correlation to reduce redundancy, e.g. joint-stereo, intensity-coding or matrixing
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/0017Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/06Determination or coding of the spectral characteristics, e.g. of the short-term prediction coefficients
    • G10L19/07Line spectrum pair [LSP] vocoders
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/02Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using spectral analysis, e.g. transform vocoders or subband vocoders

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Mathematical Physics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Stereo-Broadcasting Methods (AREA)

Abstract

Un decodificador de audio para proporcionar información de audio decodificada a partir de información de audio codificada comprende un decodificador aritmético que proporciona una pluralidad de valores espectrales decodificados a partir de una representación codificada aritméticamente de dichos valores, y un conversor de dominio de frecuencia a dominio de tiempo que proporciona una representación de audio en dominio de tiempo utilizando los valores espectrales decodificados para obtener la información de audio decodificada. El decodificador aritmético está configurado para seleccionar una regla de mapeo que describe el mapeo de un valor de código que representa un valor espectral, o un plano de bits más significativo de un valor espectral, en forma codificada, sobre un código de símbolo que representa un valor espectral, o un plano de bits más significativo de un valor espectral, en forma decodificada, en función de un estado de contexto descrito por un valor numérico de contexto actual. El decodificador aritmético está configurado para determinar el valor numérico de contexto actual en función de una pluralidad de valores espectrales decodificados previamente. El decodificador aritmético está configurado para evaluar una tabla hash, cuyas entradas definen tanto los valores de estado significativos entre los valores de contexto numérico como los límites de los intervalos de dichos valores, para seleccionar la regla de mapeo. La tabla hash ari_hash_m se define como se muestra en las figuras 22(1), 22(2), 22(3) y 22(4). El decodificador aritmético está configurado para evaluar la tabla hash, determinar si el valor de contexto numérico actual es idéntico a un valor de contexto de tabla descrito por una entrada de la tabla hash o determinar un intervalo descrito por las entradas de la tabla hash dentro del cual se encuentra dicho valor, y derivar un valor de índice de regla de mapeo que describe la regla de mapeo seleccionada en función del resultado de la evaluación. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Decodificador de audio, procedimiento y programa informático para decodificación de audio
Campo técnico
[0001]Las realizaciones según la invención se relacionan con un decodificador de audio para proporcionar una información de audio decodificada sobre la base de una información de audio codificada, un procedimiento para proporcionar una información de audio decodificada sobre la base de una información de audio codificada, y un programa informático.
[0002]Las realizaciones según la invención se relacionan con una codificación sin ruido espectral mejorada, la cual se puede usar en un decodificador de audio, según el codificador de voz y audio unificado (Unified Speech and Audio Coding, USAC), borrador de trabajo 7 (Working Draft 7,WD7).
[0003]Las realizaciones según la invención se relacionan con una actualización de las tablas usadas para la decodificación espectral sin ruido.
Antecedentes de la invención
[0004]En lo sucesivo, se explicarán de manera breve los antecedentes de la invención para facilitar la comprensión de la invención y las ventajas de la misma. Durante la década pasada, se han efectuado grandes esfuerzos sobre la creación de la posibilidad de almacenar y distribuir digitalmente contenido de audio con buena eficiencia de la velocidad de bits. Un logro importante de esta manera es la definición del Estándar Internacional ISO/IEC 14496-3. La parte 3 de este Estándar se relaciona con la codificación y decodificación de contenido de audio y las subpartes 4 y 3 se relacionan con la codificación de audio en general. La parte 3 y la subparte 4 de la ISO/IEC 14496 definen un concepto para codificar y decodificar contenido de audio en general. Además, se han propuesto mejoras adicionales para mejorar la calidad y/o reducir la velocidad de bits requerida.
[0005]Según el concepto descrito en el Estándar, la señal de audio en el dominio de tiempo es convertida en una representación tiempo-frecuencia. La transformación del dominio del tiempo al dominio de tiempo-frecuencia se efectúa típicamente usando bloques de transformación, en los cuales también son designados “tramas”, de muestra de dominio del tiempo. Se ha encontrado que es ventajoso usar tramas superpuestas, las cuales están desviadas, por ejemplo, media trama debido a que la superposición permite evitar eficientemente (o al menos reducirse) los artefactos. Además, se ha encontrado que se crearía una ventana para evitar los artefactos que se originen de este procesamiento de tramas limitadas temporalmente.
[0006]Transformando una porción de ventana de señal de audio de entrada de un dominio del tiempo al dominio de tiempo-frecuencia, se obtiene una compactación de energía en muchos casos, de modo que algunos de los valores espectrales comprenden una magnitud significativamente más grande que una pluralidad de otros valores espectrales. En consecuencia, existen, en muchos casos, un número comparativo menor de valores espectrales que tengan una magnitud, la cual es significativamente superior a una magnitud promedio de valores espectrales. Un ejemplo típico de una transformación del dominio del tiempo al dominio de tiempo-frecuencia que da como resultado una compactación de energía es la llamada transformación coseno discreta modificada (Modified-Discrete-Cosine-Transform, MDCT).
[0007]Los valores espectrales se escalan y cuantifican con frecuencia según un modelo psicoacústico, de modo que los errores de cuantización son comparativamente menores para los valores espectrales más psicoacústicamente importantes, y son comparativamente más grandes para los valores espectrales menos psicoacústicamente importantes. Los valores espectrales escalares y cuantizados se codifican para proporcionar una representación eficiente en cuanto a la velocidad de los bits de los mismos.
[0008]Por ejemplo, el uso de la llamada codificación de Huffman de los coeficientes espectrales cuantizados se describe en el Estándar Internacional ISO/IEC 14496-3:2005 (E), parte 3, subparte 4.
[0009]Sin embargo, se ha encontrado que la calidad de la codificación de los valores espectrales tiene un impacto significativo sobre la velocidad de bits requerida. También se ha encontrado que la complejidad de un decodificador de audio, el cual con frecuencia es implementado en un dispositivo de consumo portátil, y que por lo tanto deberá ser barato y de bajo consumo de energía, depende de la codificación usada para codificar los valores espectrales.
[0010]El artículo "Improved Quantization and Lossless Coding for Subband Audio Coding", presentado en la 118ª Convención de la AES, Barcelona, España, del 28 al 31 de mayo de 2005, describe un algoritmo de codificación de fuente basado en un modelo clásico de Markov que utiliza cuantificación vectorial y codificación aritmética junto con un contexto adaptado dinámicamente de índices vectoriales previamente codificados. El núcleo de este algoritmo es una asignación optimizada numéricamente de una gran cantidad de estados fuente a una pequeña cantidad de tablas de códigos diferentes. Esto permite su aplicación a la codificación de audio, donde proporciona una alta eficiencia en la cuantificación y codificación sin pérdidas que se utiliza en MPEG-AAC.
[0011]El artículo "A Novel Scheme for Low Bitrate Unified Speech in Audio Coding - MPEG-RM0" describe un enfoque para el diseño de un códec con alta calidad constante para voz, música y contenido mixto en una amplia gama de velocidades de bits. El artículo describe las afirmaciones del códec y que alcanza el objetivo de alta calidad constante para diferentes tipos de señales.
[0012]El documento "WD7 of USAC", ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010, Dresden, Alemania, presenta el borrador de trabajo (Working Draft, WD) 7 aprobado de USAC.
[0013]La contribución "Extra Information Regarding the CE on the Spectral Noiseless Coding in USAC", ISO/IEC JTC1/SC29/WG11, MPEG2010/M17588, abril de 2010, Dresden, Alemania, presenta cambios en la decodificación sin ruido espectral de USAC WD6.
[0014]En vista de esta situación, existe la necesidad de un concepto para la codificación y decodificación de un contenido de audio, que proporcione un equilibrio mejorado entre la eficiencia de la tasa de bits y la eficiencia de los recursos.
Resumen de la invención
[0015]La presente invención proporciona un decodificador de audio, como se establece en la reivindicación independiente 1, un procedimiento de decodificación de audio, como se establece en la reivindicación independiente 2, y un programa informático, como se establece en la reivindicación independiente 3.
Breve descripción de las Figuras
[0016]A continuación, se describirán realizaciones que no están englobadas en la redacción de las reivindicaciones pero que se consideran útiles para la comprensión de la presente invención definidas por las reivindicaciones anexas haciendo referencia a las figuras adjuntas, donde:
Fig.1 muestra un diagrama esquemático de bloques de un codificador de audio, según una realización de la invención; Fig.2 muestra un diagrama esquemático de bloques de un decodificador de audio, según una realización de la invención:
Fig.3 muestra una representación de pseudo código de programa de un algoritmo "values_decode()" para decodificar valores espectrales;
Fig.4 muestra una representación esquemática de un contexto para un cálculo de estado;
Fig.5a muestra una representación de pseudo código de programa de un algoritmo "arith_map_context()" para asignar un contexto;
Fig.5b muestra una representación de pseudo código de programa de otro algoritmo "arith_map_context()" para asignar un contexto;
Fig.5c muestra una representación de pseudo código de programa de un algoritmo "arith_get_context()" para obtener un valor de estado de contexto;
Fig.5d muestra una representación de pseudo código de programa de otro algoritmo "arith_get_context()" para obtener un valor de estado de contexto;
Fig. 5e muestra una representación de pseudo código de programa de un algoritmo "arith_get_pk()" para derivar un valor de índice de tabla de frecuencias acumulativas "pki" a partir de un valor de estado (o una variable de estado); Fig.5f muestra una representación de pseudo código de programa de otro algoritmo "arith_get_pk()" para derivar un valor de índice de tabla de frecuencias acumuladas "pki" a partir de un valor de estado (o una variable de estado); Fig.5g muestra una representación de pseudo código de programa de un algoritmo "arith_decode()" para decodificar aritméticamente un símbolo a partir de una palabra de código de longitud variable;
Fig.5h muestra una primera parte de una representación de pseudo código de programa de otro algoritmo "arith_decode()" para decodificar aritméticamente un símbolo de una palabra de código de longitud variable;
Fig.5i muestra una segunda parte de una representación de pseudo código de programa del otro algoritmo "arith_decode()" para decodificar aritméticamente un símbolo de una palabra de código de longitud variable;
Fig.5j muestra una representación de pseudo código de programa de un algoritmo para derivar valores absolutos a,b de valores espectrales a partir de un valor común m;
Fig.5k muestra una representación de pseudo código de programa de un algoritmo para introducir los valores decodificados a,b en una matriz de valores espectrales decodificados;
Fig.5l muestra una representación de pseudo código de programa de un algoritmo "arith_update_context()" para obtener un valor de subregión de contexto a partir de los valores absolutos a,b de los valores espectrales decodificados; Fig.5m muestra una representación de pseudo código de programa de un algoritmo "arith_finish()" para rellenar las entradas de una matriz de valores espectrales descodificados y una matriz de valores de subregión de contexto; Fig.5n muestra una representación de pseudo código de programa de otro algoritmo para derivar valores absolutos a,b de valores espectrales descodificados a partir de un valor común m;
Fig. 5o muestra una representación de pseudo código de programa de un algoritmo "arith_update_context()" para actualizar una matriz de valores espectrales descodificados y una matriz de valores de subregión de contexto contexto;
Fig.5p muestra una representación de pseudo código de programa de un algoritmo "arith_save_context()" para rellenar las entradas de una matriz de valores espectrales descodificados y las entradas de una matriz de valores de subregión de contexto valores de subregión;
Fig.5q muestra una leyenda de definiciones;
Fig.5r muestra otra leyenda de definiciones;
Fig.6a muestra una representación de sintaxis de un bloque de datos sin procesar de codificación unificada de voz y audio (Unified-Speech-And-Audio-Coding, USAC);
Fig.6b muestra una representación de sintaxis de un solo elemento de canal;
Fig.6c muestra una representación de sintaxis de un elemento de par de canales;
Fig.6d muestra una representación de sintaxis de una información de control "ICS";
Fig.6e muestra una representación de sintaxis de un flujo de canal de dominio de frecuencia;
Fig.6f muestra una representación de sintaxis de datos espectrales codificados aritméticamente;
Fig.6g muestra una representación de sintaxis para decodificar un conjunto de valores espectrales;
Fig.6h muestra otra representación de sintaxis para decodificar un conjunto de valores espectrales;
Fig.6i muestra una leyenda de elementos de datos y variables;
Fig.6j muestra otra leyenda de elementos de datos y variables;
Fig.6k muestra una representación de sintaxis de un elemento de canal único USAC "UsacSingleChannelElement()"; Fig.6l muestra una representación de sintaxis de un elemento de par de canales USAC "UsacChannelPairElement()"; Fig.6m muestra una representación de sintaxis de una información de control "ICS";
Fig.6n muestra una representación de sintaxis de los datos del codificador central USAC "UsacCoreCoderData"; Fig.6o muestra una representación de sintaxis de un flujo de canal de dominio de frecuencia ''fd_channel_stream()"; Fig.6p muestra una representación de sintaxis de datos espectrales codificados aritméticamente "ac_spectral_data()"; Fig.7 muestra un diagrama esquemático de bloques de un codificador de audio, según el primer aspecto de la invención;
Fig. 8 muestra un diagrama esquemático de bloques de un decodificador de audio, según el primer aspecto de la invención;
Fig.9 muestra una representación gráfica de una asignación de un valor de contexto actual numérico sobre un valor de índice de regla de asignación, según el primer aspecto de la invención;
Fig. 10 muestra un diagrama esquemático de bloques de un codificador de audio, según un segundo aspecto de la invención;
Fig.11 muestra un diagrama esquemático de bloques de un decodificador de audio, según el segundo aspecto de la invención
Fig. 12 muestra un diagrama esquemático de bloques de un codificador de audio, según un tercer aspecto de la invención;
Fig. 13 muestra un diagrama esquemático de bloques de un decodificador de audio, según el tercer aspecto de la invención;
Fig.14a muestra una representación esquemática de un contexto para un cálculo de estado, tal como se utiliza según el borrador de trabajo 4 del borrador del estándar USAC;
Fig.14b muestra una descripción general de las tablas tal como se utilizan en el esquema de codificación aritmética según el borrador de trabajo 4 del borrador del estándar USAC;
Fig. 15a muestra una representación esquemática de un contexto para un cálculo de estado, tal como se utiliza en realizaciones según la invención;
Fig.15b muestra una descripción general de las tablas tal como se utilizan en el esquema de codificación aritmética según un ejemplo de comparación;
Fig.16a muestra una representación gráfica de una demanda de memoria de solo lectura para el esquema de codificación sin ruido según un ejemplo de comparación, y según el borrador de trabajo 5 del borrador del estándar USAC, y según la codificación Huffman AAC (codificación de audio avanzada);
Fig.16b muestra una representación gráfica de una demanda total de memoria de sólo lectura de datos del decodificador USAC según un ejemplo de comparación y según el concepto según el borrador de trabajo 5 del borrador del estándar USAC;
Fig. 17 muestra una representación esquemática de una disposición para una comparación de una codificación sin ruido según el borrador de trabajo 3 o el borrador de trabajo 5 del borrador del estándar USAC con un esquema de codificación según el ejemplo de comparación;
Fig.18 muestra una representación de tabla de tasas de bits promedio producidas por un codificador aritmético de USAC según el borrador de trabajo 3 del borrador del estándar de USAC y según un ejemplo de comparación; Fig.19 muestra una representación de tabla de los niveles de depósito de bits mínimo y máximo para un decodificador aritmético según el borrador de trabajo 3 del borrador del estándar USAC y para un decodificador aritmético según un ejemplo de comparación;
Fig.20 muestra una representación de tabla de números de complejidad promedio para decodificar un flujo de bits de 32 kbits según el borrador de trabajo 3 del borrador del estándar USAC para diferentes versiones del codificador aritmético;
Fig.21 muestra una representación de tabla de un contenido de una tabla "ari_lookup_m[742]", según una realización de la invención;
Figs 22(1) a 22(4) muestran una representación de tabla de un contenido de una tabla "ari_hash_m[742]", según una realización de la invención;
Figs 23(1) to 23(3) muestran una representación de tabla de un contenido de una tabla "ari_cf_m[64][17]", según una realización de la invención; y
Fig.24 muestra una representación de tabla de un contenido de una tabla "ari_cf_r[]";
Fig.25 muestra una representación esquemática de un contexto para un cálculo de estado;
Fig.26 muestra una representación de tabla de un rendimiento de codificación promedio para la transcodificación de flujos de bits de calidad de referencia WD6 para un ejemplo de comparación ("M17558") y para una realización según la invención ("Nueva propuesta");
Fig.27 muestra una representación de tabla de un rendimiento de codificación para la transcodificación de flujos de bits de calidad de referencia WD6 por punto operativo para un ejemplo de comparación ("M17558") y para una realización según la invención ("Tablas re-entrenadas")
Fig.28 muestra una representación de tabla de una comparación de la demanda de memoria del codificador silencioso para WD6, para un ejemplo de comparación ("M17588") y para una realización según la invención ("Nueva propuesta"); Fig.29 muestra una representación en tabla de las características de las tablas tal como se utilizan en una realización según la invención ("Esquema de codificación reentrenado");
Fig.30 muestra una representación de tabla de números de complejidad promedio para decodificar los flujos de bits de calidad de referencia WD6 de 32 kbit/s para las diferentes versiones del codificador aritmético;
Fig.31 muestra una representación de tabla de números de complejidad promedio para decodificar los flujos de bits de calidad de referencia WD6 de 12 kbit/s para las diferentes versiones del codificador aritmético;
Fig.32 muestra una representación de tabla de tasas de bits promedio producidas por el codificador aritmético en una realización según la invención y en el WD6;
Fig.33 muestra una tabla de representación de las tasas de bits mínimas, máximas y promedio de USAC por trama usando el esquema propuesto;
Fig.34 muestra una representación de tabla de tasas de bits promedio producidas por un codificador USAC que usa un codificador aritmético WD6 y un codificador según una realización según la invención ("nueva propuesta");
Fig.35 muestra una representación de tabla de los mejores y peores casos para una realización según la invención; Fig.36 muestra una representación en tabla del límite del depósito de bits para una realización según la invención; Fig.37 muestra una representación de sintaxis de datos codificados aritméticamente "arith_data", según una realización de la invención;
Fig.38 muestra una leyenda de definiciones y elementos de ayuda;
Fig.39 muestra otra leyenda de definiciones;
Fig.40a muestra una representación de pseudo código de programa de una función o algoritmo "arith_map_context", según una realización de la invención;
Fig.40b muestra una representación de pseudo código de programa de una función o algoritmo "arith_get_context", según una realización de la invención;
Fig.40c muestra una representación de pseudo código de programa de una función o algoritmo "arith_map_pk", según una realización de la invención;
Fig.40d muestra una representación de pseudo código de programa de una primera parte de una función o algoritmo "arith_decode", según una realización de la invención;
Fig.40e muestra una representación de pseudo código de programa de una segunda parte de una función o algoritmo "arith_decode", según una realización de la invención;
Fig.40f muestra una representación de pseudo código de programa de una función o algoritmo para decodificar uno o más bits menos significativos, según una realización de la invención;
Fig.40g muestra una representación de pseudo código de programa de una función o algoritmo "arith_update_context", según una realización de la invención;
Fig.40h muestra una representación de pseudo código de programa de una función o algoritmo "arith_save_context", según una realización de la invención;
Figs.41(1) and 41(2) muestran una representación de tabla de un contenido de una tabla "ari_lookup_m[742]", según una realización de la invención;
Figs.42(1),(2),(3),(4) muestran una representación de tabla de un contenido de una tabla "ari_hash_m[742]", según una realización de la invención;
Figs. 43(1),(2),(3),(4),(5),(6) muestran una representación de tabla de un contenido de una tabla "ari_cf_m[96][17]", según una realización de la invención; y
Fig.44 muestra una representación en tabla de una tabla "ari_cf_r[4]", según una realización de la invención.
Descripción detallada de las realizaciones
1. Codificador de audio según la Fig.7
[0017]La Fig.7 muestra un diagrama esquemático de bloques de un codificador de audio, según una realización de la invención. El codificador de audio 700 está configurado para recibir una información de audio de entrada 710 y proporcionar, sobre la base del mismo, una información de audio codificada 712.
[0018]El codificador de audio comprende un convertidor del dominio del tiempo al dominio de la frecuencia que compacta energía 720, el cual está configurado para proporcionar una representación de audio en el dominio de la frecuencia 722 sobre la base de una representación en el dominio del tiempo en la información de audio de entrada 710, de modo que la representación de audio en el dominio de la frecuencia 722 comprende un conjunto de valores espectrales.
[0019]El codificador de audio 700 también comprende un codificador aritmético 730 configurado para codificar un valor espectral (fuera del conjunto de valores espectrales que forman la representación de audio en el dominio de la frecuencia 722), o una versión preprocesada del mismo, usando una palabra de código de longitud variable para obtener la información de audio codificada 712 (la cual puede comprender, por ejemplo, una pluralidad de palabras de código de longitud variable).
[0020]El codificador aritmético 730 está configurado para asignar un valor espectral, o un valor de un plano de bits más significativo de un valor espectral, sobre un valor de código (es decir, sobre una palabra de código de longitud variables) dependiendo de un estado de contexto.
[0021]El codificador aritmético está configurado para seleccionar una regla de asignación que describa una asignación de un valor espectral, o de un plano de bits más significativos de un valor espectral, sobre un valor de código dependiendo de un estado de contexto (actual). El codificador aritmético está configurado para determinar el estado de contexto actual, o un valor de contexto numérico actual que describa el estado de contexto actual dependiendo de una pluralidad de valores espectrales previamente codificados (preferiblemente, pero no necesariamente, adyacente).
[0022]Para este propósito, el codificador aritmético está configurado para evaluar un estado de búsqueda, las entradas de la cual definen valores de estado significativos entre los valores del contexto numérico y los límites de los intervalos de los valores del contexto numérico.
[0023]La hash_table (también designada como “ari_hash_m” en lo sucesivo) es definida preferiblemente como se da en la representación en tabla de las Figs.22(1), 22(2), 22(3) y 22 (4).
[0024]Además, el codificador aritmético está configurado preferiblemente para evaluar la tabla de búsqueda (ari_hash_m), para determinar sí el valor del contexto numérico actual es idéntico a un valor de contexto de la tabla descrito por entradas de la tabla de búsqueda (ari_hash_m) y/o para determinar un intervalo descrito por entradas de la tabla de búsqueda (ari_hash_m) dentro de la cual se encuentra el contexto numérico actual, y para derivar un valor del índice de la regla de asignación (por ejemplo, designado con “pki”) que describa una regla de asignación seleccionada dependiendo del resultado de la evaluación.
[0025]En algunos casos, el valor de índice de la regla de asignación puede ser asociado individualmente a un valor de contexto numérico (actual) que sea de un valor significativo. También, un valor del índice de la regla de asignación común puede ser asociado con diferentes valores de contexto numérico (actuales) que se encuentran dentro de un intervalo limitado por los límites del intervalo (donde los límites del intervalo se definen preferiblemente por las entradas de la tabla de búsqueda).
[0026]Como se puede observar la asignación de un valor espectral (de la representación de audio en el dominio de la frecuencia 722), o de un plano de bits más significativos de un valor espectral, sobre un valor de código (de la información de audio codificada 712), puede ser efectuado por una codificación del valor espectral 740 usando una regla de asignación 742. Un seguidor de estado 750 se puede configurar para dar seguimiento el estado del contexto. El seguidor de estado 750 proporciona información 754 que describe el estado del contexto actual. La información 754 que describe el estado del contexto actual puede preferiblemente tomar la forma de un valor de contexto numérico actual. Un selector de regla de asignación 760 está configurado para seleccionar una regla de asignación, por ejemplo, una tabla de frecuencia es acumulativa, que describa una asignación de un valor espectral, o de un plano de bits más significativo de un valor espectral, sobre un valor de código. En consecuencia, el selector de la regla de asignación 760 proporciona la información de la regla de asignación 742 a la codificación del valor espectral 740. La información de la regla de asignación 742 puede tomar la forma de un valor de índice de la regla de asignación o de una tabla de frecuencias acumulativas seleccionadas dependiendo del valor del índice de la regla de asignación. El selector de la regla de asignación 760 comprende (o al menos evalúa) una tabla de búsqueda 752, las entradas de la cual definen valores de estados significativos entre los valores del contexto numérico y los límites de intervalos los valores del contexto numérico. Preferiblemente las entradas de la tabla de búsqueda 762 (ari_hash_m[742]) son definidas como se da en la representación de tabla en las Figs.22(1) a 22(4). La tabla de búsqueda 762 se evalúa para seleccionar la regla de asignación, es decir para proporcionar la información de la regla de asignación 742.
[0027]Preferiblemente, pero no necesariamente, un valor del índice de la regla de asignación se puede asociar individualmente con un valor del contexto numérico que sea un valor de estado significativo, y un valor del índice de la regla de asignación común puede ser asociado con diferentes valores de contexto numérico que se cuenten dentro de un intervalo limitado por los límites del intervalo.
[0028]Para resumir lo anterior, el codificador de audio 700 efectúa una codificación aritmética de una representación de audio en el dominio de frecuencia proporcionada por el convertidor del dominio del tiempo al dominio de la frecuencia. La codificación aritmética depende del contexto, de modo que una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) se selecciona dependiendo de los valores espectrales previamente codificados. En consecuencia, los valores espectrales en la frecuencia del tiempo y/o frecuencia (o, al menos, dentro de un ambiente predeterminado) entre sí y/o con relación al valor espectral actualmente codificado (es decir, los valores espectrales dentro de un ambiente predeterminado el valor espectral totalmente especificado) son considerados en la codificación aritmética para ajustar la distribución de probabilidad evaluada por la codificación aritmética. Cuando se seleccione una regla de asignación apropiada, los valores del contexto numérico actual 754 proporcionados por un seguidor de estado 750 son evaluados. Esto que típicamente el número de varias reglas de asignación es significativamente menor que el número de los posibles valores de los valores del contexto numérico actual 754, el selector de la regla de asignación 760 asigna las mismas reglas de asignación (descritas, por ejemplo, por un valor del índice de la regla de asignación) a un número comparativamente grande de diferentes valores del contexto numérico. No obstante, existen configuraciones espectrales específicas típicas (representadas por valores de contexto numérico específico) con las cuales deberá ser asociado una regla de asignación particular para obtener una buena eficiencia de codificación.
[0029]Se ha encontrado que la selección de una regla de asignación de dependencia de un valor de un contexto numérico actual se puede efectuar con una eficiencia computacional particularmente alta si las entradas de una sola tabla de búsqueda definen ambos de los valores de estados significativos y los límites de los intervalos de los valores de contexto numéricos (actual). Además, se ha encontrado que el uso de la tabla de búsqueda como se define en las Figs.22(1), 22(2), 22(3), 22(4) proporciona una eficiencia de codificación particularmente alta. Se ha encontrado que este mecanismo en combinación con la tabla de búsqueda está bien adaptado a los requisitos de la selección de la regla de asignación, debido a que existen muchos casos de los cuales un solo valor de estado significativo (o valor del contexto numérico significativo) está incluido entre un intervalo del lado izquierdo de una pluralidad de valores de estado no significativo (de los cuales está asociada una regla de asignación común) y un intervalo al lado derecho de una pluralidad de valores de estado no significativos (con los cuales está asociada una regla de asignación común). También, el mecanismo de uso de una sola tabla de búsqueda, las entradas de las cuales son definidas en las tablas de las Figs.22(1), 22(2), 22(3), 22(4) y definen ambos de los estados significativos y los límites de los intervalos de los valores del contexto numérico (actual) puede manejar de manera eficiente diferentes casos, en los cuales, por ejemplo, existan dos intervalos adyacentes de valores de estado no significativo (también designados como valores de contexto numérico no significativo) sin un valor de estado significativo entre ellos. Se logra una eficiencia computacional particularmente alta debido a un número de accesos de tabla que se mantienen pequeños. Por ejemplo, una búsqueda iterativa simple en una tabla es suficiente en la mayoría de las realizaciones para encontrar sí el valor del contexto numérico actual es igual a cualquiera de los valores significativos definidos por las entradas de la tabla de búsqueda, en la cual los intervalos de los valores de estado no significativos del valor del contexto numérico actual se encuentran. En consecuencia, el número de accesos de la tabla que, consumen tiempo y consumen energía, pueden ser mantenida pequeña. De este modo el selector de la regla de asignación 760 que usa la tabla de búsqueda 762 se puede considerar como un selector de la regla de asignación particularmente eficiente en términos de la complejidad computacional, permitiendo a la vez obtener una buena eficiencia de codificación (en términos de la velocidad de bits).
[0030]Los detalles adicionales con respecto a la derivación de la información de la regla de asignación 742 del valor del contexto numérico actual 754 se describirán más adelante.
2. Decodificador de audio según la Fig.8
[0031]La Fig.8 muestra un diagrama esquemático de bloques de un decodificador de audio 800. El decodificador de audio 800 está configurado para recibir una información de audio codificada 810 y para proporcionar, sobre la base de la misma, una información de audio decodificada 812.
[0032]El decodificador de audio 800 comprende un decodificador aritmético 820 el cual está configurado para proporcionar una pluralidad de valores espectrales 822 sobre la base de una representación codificada aritméticamente 821 de los valores espectrales.
[0033]El decodificador de audio 800 también comprende un convertidor del dominio de la frecuencia al domino del tiempo 830 el cual está configurado para recibir los valores espectrales decodificados 822 y para proporcionar la representación de audio en el dominio del tiempo 812, la cual puede constituir información de audio decodificada, usando los valores espectrales decodificados 822, para obtener una información de audio decodificada 812.
[0034]El decodificador aritmético 820 comprende un determinador del valor espectral 824, el cual está configurado para asignar un valor de código de la representación codificada aritméticamente 821 de los valores espectrales sobre un código de símbolo que representa uno o más de los valores espectrales decodificados, o al menos una porción (por ejemplo, un plano de bits más significativos) de uno o más de los valores espectrales decodificados. El determinador del valor espectral 824 se puede configurar para efectuar una asignación dependiendo de la regla de asignación, la cual puede ser descrita por una información de la regla de asignación 828a. La información de la regla de asignación 828a puede, por ejemplo, tomar la forma de un valor de índice de la regla de asignación o de una tabla de frecuencias acumulativas seleccionadas (seleccionadas, por ejemplo, dependiendo del valor del índice de la regla de asignación).
[0035]El decodificador aritmético 820 está configurado para seleccionar una regla de asignación (por ejemplo una de frecuencias acumulativas) que describa una asignación de valores de código (descritos por la representación codificada aritméticamente 821 de los valores espectrales) sobre un código de símbolo (que describa uno o más valores espectrales, o un plano de bits más significativos de los mismos, en una forma decodificada) dependiendo del estado del contexto (el cual puede ser descrito por la información de estado del contexto 826a).
[0036]El decodificador aritmético 820 está configurado para determinar el estado actual del contexto (descrito por el valor del contexto numérico actual) dependiendo de una pluralidad de valores espectrales previamente decodificados. Para este propósito, se puede usar un seguidor de estado 826, el cual recibe una información que describe los valores espectrales previamente decodificados y que proporciona, sobre la base de los mismos, un valor del contexto numérico actual 826a que describe el estado del contexto actual.
[0037]El decodificador aritmético también está configurado para evaluar una tabla de búsqueda 829, las entradas de la cual definen valores de estado significativos entre los valores de contexto numérico y límites de intervalos de valores del contexto numérico, para seleccionar la regla de asignación. Preferiblemente, las entradas de la tabla de búsqueda 829 (ari_hash_m[742]) son definidas como se da en la representación en tabla de las Figs.22(1) a 22(4). La tabla de búsqueda 829 se evalúa para seleccionar la regla de asignación, es decir, para proporcionar la información de la regla de asignación 829.
[0038]Preferiblemente, un valor del índice de la regla de asignación está asociado individualmente con un valor del contexto numérico que es un valor de estado significativo, y un valor del índice de la regla de asignación común está asociado con diferentes valores de contexto numérico que se encuentran dentro de un intervalo limitado por los límites del intervalo. La evaluación de la tabla de búsqueda 829 puede, por ejemplo, ser efectuada usando un evaluador de la tabla de búsqueda el cual puede ser parte del selector de la regla de asignación 828. En consecuencia, una información de la regla de asignación 828a, por ejemplo, en forma de un valor de índice de la regla de asignación, se obtiene sobre la base del valor del contexto numérico actual 826a que describe el estado del contexto actual. El selector de la regla de asignación 828 puede, por ejemplo, determinar el valor del índice de la regla de asignación 828a dependiendo del resultado de la evaluación de la tabla de búsqueda 829. De manera alternativa, la evaluación de la tabla de búsqueda 829 puede proporcionar directamente el valor de índice de regla de asignación.
[0039]Con respecto a la funcionalidad del decodificador de señales de audio 800, cabe observar que el decodificador aritmético 820 está configurado para seleccionar una regla de asignación (por ejemplo una tabla de frecuencias acumulativas) la cual está en promedio, bien adaptada a los valores espectrales que se van a decodificar, puesto que la regla de asignación se selecciona dependiendo del estado del contexto actual (descrito, por ejemplo, por el valor del contexto numérico actual), el cual a su vez se determina dependiendo de una pluralidad de valores espectrales previamente decodificados. En consecuencia, las dependencias estadísticas entre los valores espectrales adyacentes que se van a decodificar se pueden explotar. Además, el decodificador aritmético 820 se puede implementar de manera eficiente, con un buen intercambio entre la complejidad computacional, el tamaño de la tabla y la eficiencia de codificación, usando el selector de la regla de asignación 828. Evaluando una (sola) tabla de búsqueda 829, las entradas de la cual describen valores de estado significativo y límites de intervalo de los intervalos de valor y estado no significativo, una sola búsqueda iterativa de la tabla puede ser suficiente para derivar la información de la regla de asignación 828a del valor del contexto numérico actual 826a. Además, se ha encontrado que el uso del valor de la tabla de búsqueda como se define en las Figs. 22(1), 22(2), 22(3), 22(4) proporciona una eficiencia de codificación particularmente alta. En consecuencia, es posible asignar un número comparativamente grande de posibles valores de contexto numéricos (actual) diferentes sobre un número comparativamente menor de valores del índice de la regla de asignación diferentes. Usando la tabla de búsqueda 829, como se describió anteriormente y como se define en la representación en tabla de las Figs.22(1) a 22(4), es posible explotar el descubrimiento de que, en muchos casos, un solo valor de estado significativo aislado (valor de contexto significativo) está incluido entre un intervalo a la izquierda de valores de estado no significativos (valores de contexto no significativos) y un intervalo a la derecha de valores de estado no significativo (valores de contexto no significativos), donde un valor de índice de matriz de asignación diferente está asociado con el valor de estado significativo (valor de contexto significativo), cuando se comparan con los vales de estado (valores de contexto) del intervalo a la izquierda y los valores de estado (valores de contexto) del intervalo a la derecha. Sin embargo, el uso de la tabla de búsqueda 829 también es muy adecuado para situaciones en las cuales dos intervalos de valores de estado numéricos están inmediatamente adyacentes, sin un valor de estado significativo entre ellos.
[0040]Para concluir, el selector de la regla de asignación 828, el cual evalúa la tabla de búsqueda 829 "ari_hash_m[742]", proporciona una eficiencia particularmente buena cuando se selecciona una regla de asignación (o cuando se proporciona un valor de índice de la regla de asignación) dependiendo del estado del contexto actual (o dependiendo del valor del contexto numérico actual que describa el estado del contexto actual), debido a que el mecanismo de búsqueda está bien adaptado a escenarios de contexto típicos en el decodificador de audio.
[0041]Los detalles adicionales se describirán más adelante.
3. Mecanismo de búsqueda del valor de contexto según la Fig.9
[0042]En lo sucesivo, se describirá un mecanismo de búsqueda de contexto, el cual se puede implementar en el selector de la regla de asignación 760 y/o el selector de la regla de asignación 828. La tabla de búsqueda 762 y/o la tabla de búsqueda 829, como se define en la representación en tabla de las Figs.22(1) a 22(4), se puede utilizar para implementar el mecanismo de búsqueda del valor del contexto.
[0043]Tomando como referencia ahora la Fig.9, la cual muestra un escenario de búsqueda del valor del contexto numérico actual, se describirán detalles adicionales. En la representación gráfica de la Fig.9, las abscisas 910 describen valores del valor del contexto numérico actual (es decir, valores de contexto numérico). Las ordenadas 912 describen valores del índice de la regla de asignación. Las marcas 914 describen los valores del índice de la regla de asignación para valores de contexto numérico no significativos (se describen estados no significativos). Las marcas 916 describen valores del índice de la regla de asignación para valores de contexto numérico significativos (individuales) "verdaderos” que describen estados significativos (verdaderos) individuales. Las marcas 916 describen valores del índice de la regla de asignación para valores de contexto numérico "impropios" que describe los estados significativos “impropios", donde un estado significativo "impropio" es un estado significativo al cual está asociado el mismo valor del índice de la regla de asignación a uno de los intervalos adyacentes a los valores de contexto numérico no significativos.
[0044]Como se puede observar, una entrada de la tabla de búsqueda "ari_hash_m[i1]" describe un estado significativo (verdadero) individual que tiene un valor de contexto numérico de c1. Como se puede observar, el valor del índice de la regla de asignación mriv1 está asociado con el estado significativo (verdadero) individual que tiene el valor de contexto numérico c1. En consecuencia, tanto el valor del contexto numérico c1 y como el valor del índice de la regla de asignación mriv1 pueden ser descritos por la entrada de la tabla de búsqueda "ari_hash_m[i1]". Un intervalo 932 de los valores de contexto numérico es limitado por el valor del valor del contexto numérico c1, donde el valor del contexto numérico c1 no pertenece al intervalo 932, de modo que el valor del contexto numérico más grande del intervalo 932 es igual a c1 - 1. Un valor del índice de la regla de asignación de mriv4 (el cual es diferente del mriv1) está asociado con valores de contexto numérico del intervalo 932. El valor del índice de la regla de asignación mriv4 puede, por ejemplo, ser descrito por la entrada de la tabla "ari_lookup_m[i1-1]" de una tabla adicional "ari_lookup_m".
[0045]Además, un valor del índice de la regla de asignación mriv2 puede ser asociado con valores de contexto numérico que se encuentra dentro de un intervalo 934. Un límite inferior del intervalo 934 se determina por el valor del contexto numérico c1, el cual un valor de contexto numérico significativo, donde el valor del contexto numérico c1 no pertenece al intervalo 932. En consecuencia, el valor más pequeño del intervalo 934 es igual a c1 1 (asumiendo valores de contexto numérico enteros). Otro límite del intervalo 934 se determina por el valor de contexto numérico c2, donde el valor de contexto numérico c2 no pertenece al intervalo 934, de modo que el valor más grande del intervalo 934 sea igual a c2 - 1. El valor del contexto numérico c2 es un llamado valor de contexto numérico "impropio", el cual se describe por una entrada de la tabla de búsqueda "ari_hash_m[i2]". Por ejemplo, el valor del índice de la regla de asignación mriv2 puede ser asociado con el valor del contexto numérico c2, de modo que el valor de contexto numérico asociado con el valor de contexto numérico significativo "impropio" c2 sea igual al valor del índice de la regla de asignación asociado con el intervalo 934 limitado por el valor de contexto numérico c2. Además, un intervalo 936 del valor de contexto numérico es también limitado por el valor de contexto numérico c2, donde el valor de contexto numérico c2 no pertenece al intervalo 936, de modo que el valor de contexto numérico más pequeño del intervalo 936 sea igual a c2 1. Un valor del índice de la regla de asignación mriv3, el cual es típicamente diferente del valor del índice de la regla de asignación índice mriv2, está asociado con valores del contexto numérico de los intervalos 936.
[0046]Como se puede observar, el valor del índice de la regla de asignación mriv4, el cual está asociado con el intervalo 932 de los valores del contexto numérico, puede ser descrito por una entrada "ari_lookup_m[il-1]" de una tabla "ari_lookup_m", el índice de la regla de asignación mriv2, el cual está asociado con los valores del contexto numérico del intervalo 934, puede ser descrito por una entrada de la tabla "ari_lookup_m[il]" de la tabla "ari_lookup_m", y el valor del índice de la regla de asignación mriv3 puede ser descrito por una entrada de la tabla "ari_lookup_m[i2]" de la tabla "ari_lookup_m". En el ejemplo dado aquí, el valor del índice de la tabla de búsqueda i2, puede ser más grande en 1, que el valor del índice de la tabla de búsqueda i1.
[0047]Como se puede observar de la Fig.9, el selector de la regla de asignación 760 o el selector de la regla de asignación 828 puede recibir un valor de contexto numérico actual 764, 826a y decidir, evaluando las entradas de la tabla "ari_hash_m", si el valor del contexto numérico actual es un valor de estado significativo (sin importar si este es un valor de estado significativo "individual" o un valor de estado significativo "impropio"), o si el valor de contexto numérico actual se encuentra dentro de uno de los intervalos de 932, 934, 936, que estén limitados por valores de estado significativos ("individuales" o "impropios") c1, c2. Ambos verifican si el valor del contexto numérico actual es igual a un valor de estado significativo c1, c2 y la evaluación en la cual los intervalos 932, 934, 936 se encuentra el valor del contexto numérico actual (en el caso que el valor del contexto numérico actual no sea igual a un valor de estado significativo) se puede efectuar usando una sola búsqueda de la tabla de búsqueda común.
[0048]Además, la evaluación de la tabla de búsqueda "ari_hash_m" se puede usar para obtener un valor del índice de la tabla de búsqueda (por ejemplo, i1-1, i1 o i2). De este modo, el selector de la regla de asignación 760, 828 se puede configurar para obtener, evaluando una sola la tabla de búsqueda 762, 829 (por ejemplo, la tabla de búsqueda "ari_hash_m"), un valor del índice de la tabla de búsqueda (por ejemplo, i1-1, i1 o i2) que designa un valor de estado significativo (por ejemplo, c1 o c2) y/o un intervalo (por ejemplo, 932, 934, 936) y una información para ver si el valor del contexto numérico actual es un valor de contexto significativo (también designado como valor de estado significativo) o no.
[0049]Además, se encontró en la evaluación de la tabla de búsqueda 762, 829, "ari_hash_m", que el valor del contexto numérico actual no es un valor de contexto "significativo" (o un valor de estado "significativo"), el valor del índice la tabla de búsqueda (por ejemplo, i1-1, i1 o i2) obtenida de la evaluación de la tabla de búsqueda ("ari_hash_m") se puede usar para obtener un valor del índice de la regla de asignación asociado con un intervalo 932, 934, 936 de valores del contexto numéricos. Por ejemplo, el valor del índice de la tabla de búsqueda (por ejemplo, i1-1, i1 o i2) se puede usar para designar una entrada de una tabla de asignación adicional (por ejemplo, "ari_lookup_m"), la cual describe los valores del índice de la regla de asignación asociados con el intervalo 932, 934, 936 dentro del cual se encuentra el valor del contexto numérico actual.
[0050]Para detalles adicionales, se hace referencia a la siguiente discusión detallada del algoritmo "arith_get_pk" (donde existen diferentes opciones para este algoritmo "arith_get_pk()", ejemplos de los cuales se muestran en las Figs..5e y 5f).
[0051]Además, cabe observar que el tamaño de los intervalos puede diferir de un caso a otro. En algunos casos, un intervalo de valores de contexto numérico comprende un solo valor de contexto numérico. Sin embargo, en muchos casos, un intervalo puede comprender una pluralidad de valores de contexto numérico.
4. Codificador de audio según la Fig.10
[0052]La Fig.10 muestra un diagrama de bloques esquemático de un codificador de audio 1000 según una realización de la invención. El codificador de audio 1000 según la Fig.10 es similar al codificador de audio 700 según la Fig.7, de modo que las señales y medios idénticos son designados con números de referencia idénticos en las Figs.
7 y 10.
[0053]El codificador de audio 1000 está configurado para recibir una información de audio de entrada 710 y, para proporcionar, sobre la base de la misma, una información de audio codificada 712. El codificador de audio 1000 comprende un convertidor del domino del tiempo al dominio de la frecuencia que compacta energía 720, el cual está configurado para proporcionar una representación en el dominio de la frecuencia 722 sobre la base de la representación en el dominio del tiempo de la información de audio de entrada 710, de modo que la representación de audio en el dominio de la frecuencia 722 comprende un conjunto de valores espectrales. El codificador de audio 1000 también comprende un codificador aritmético 1030 configurado para codificar un valor espectral (fuera del conjunto de valores espectrales que forman la representación de audio en el dominio de la frecuencia 722), o una versión preprocesada de la misma, usando una palabra de código de longitud variable para obtener la información de audio codificada 712 (que puede comprender, por ejemplo, una pluralidad de palabras de código de longitud variable).
[0054]El codificador aritmético 1030 está configurado para asignar un valor espectral, o una pluralidad de valores espectrales, o un valor de un plano bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código (es decir, sobre una palabra de código de longitud variable) dependiendo del estado de contexto. El codificador aritmético 1030 está configurado para seleccionar una regla de asignación que describa una asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código dependiendo del estado del contexto. El codificador aritmético está configurado para determinar el estado del contexto actual dependiendo de la pluralidad de valores espectrales codificados previamente (preferiblemente, pero no necesariamente adyacentes). Para este propósito, el codificador aritmético está configurado para modificar una representación numérica de un valor de contexto numérico previo, que describa un estado de contexto asociado con uno o más valores espectrales previamente codificados (por ejemplo, para seleccionar una regla de asignación correspondiente), dependiendo del valor de la subregión del contexto, para obtener una representación numérica de un valor de contexto numérico actual que describa un estado de contexto asociado con uno o más valores espectrales que se van a codificar (por ejemplo, para seleccionar una regla de asignación correspondiente).
[0055]Como se puede observar, la asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano bit más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código se puede efectuar por una codificación del valor espectral 740 usando una regla de asignación descrita por una información de la regla de asignación 742. Un seguidor o rastreador de estado 750 puede configurarse para rastrear el estado del contexto. El seguidor o rastreador de estado 750 se puede configurar para modificar una representación numérica de un valor de contexto numérico previo, que describa un estado de contexto asociado con una codificación de uno o más valores espectrales previamente codificadas, dependiendo del valor de la subregión del contexto, para obtener una representación numérica de un valor de contexto numérico actual que describa un estado de contexto asociado con una codificación de uno o más valores espectrales a ser codificador. La modificación de la representación numérica del valor del contexto numérico previo puede, por ejemplo, ser efectuada por un modificador de la representación numérica 1052, el cual recibe el valor del contexto numérico previo y uno o más valores de subregión de contexto y proporciona el valor del contexto numérico actual. En consecuencia, el perseguidor o rastreador de estado 1050 proporciona una información 754 que describe el estado de contexto actual, por ejemplo, en la forma de un valor del contexto numérico actual. Un selector de la regla de asignación 1060 puede seleccionar una regla de asignación, por ejemplo, una tabla de frecuencias acumulativas, que describa una asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código. En consecuencia, el selector de la regla de asignación 1060 proporciona la información de la regla de asignación 742 a la codificación espectral 740.
[0056]Cabe observar que, en algunas realizaciones, el seguidor de estado 1050 puede ser idéntico al seguidor de estado 750 o al seguidor de estado 826. También cabe observar que el selector de la regla de asignación 1060, puede, en algunas realizaciones, ser idéntico al selector de la regla de asignación 760, o el selector de la regla de asignación 828. Preferiblemente, el selector de la regla de asignación 828 se puede configurar para usar una tabla de búsqueda "ari_hash_m[742]", como se define en la representación en tabla de las Figs.22(1) a 22(4), para la selección de la regla de asignación. Por ejemplo, el selector de la regla de asignación puede efectuar la funcionalidad como se describió anteriormente, con referencia a las Figs.7 y 8.
[0057]Para resumir lo anterior, el codificador de audio 1000 efectúa una codificación aritmética de una representación de audio en el dominio de la frecuencia proporcionada por el convertidor del dominio del tiempo al dominio de la frecuencia. La codificación aritmética depende del contexto, de modo que se seleccione una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) dependiendo de los valores espectrales previamente codificados. En consecuencia, los valores espectrales adyacentes en el tiempo y/o frecuencia (o al menos dentro de un ambiente predeterminado) entre sí y/o al valor espectral actualmente codificado (es decir, el valor espectral dentro de un ambiente predeterminado del valor espectral actualmente codificado) son considerados en la codificación aritmética para ajustar la distribución de probabilidad evaluada por la codificación aritmética.
[0058]Cuando se determina el valor del contexto numérico actual una representación numérica de un valor de contexto numérico previo, se describe un estado de contexto asociado con uno o más valores espectrales previamente codificados, se modifica dependiendo del valor de la subregión del contexto, para obtener una representación numérica de un valor del contexto numérico actual que describe un estado de contexto asociada con uno o más valores espectrales que se van a codificar. Este procedimiento permite evitar calcular de manera completa el valor del contexto numérico actual, recálculo completo el cual consume una cantidad significativa de recursos en procedimientos convencionales. Existe una gran variedad de posibilidades para la modificación de la representación numérica del valor del contexto numérico previo, incluyendo una combinación de un reescalamiento de una representación numérica del valor del contexto numérico previo, una adición de un valor de la subregión del contexto o un valor derivado del mismo a la representación numérica del valor de contexto numérico previo o una representación numérica procesada del valor del contexto numérico previo, un reemplazo de una porción de la representación numérica (en lugar de toda la representación numérica) del valor de contexto numérico previo dependiendo del valor de la subregión del contexto y así sucesivamente. De este modo, típicamente la representación numérica del valor del contexto numérico actual se obtiene sobre la base de la representación numérica del valor del contexto numérico previo y también sobre la base de al menos un valor de subregión de contexto, donde típicamente se efectúa una combinación de operaciones para combinar el valor de contexto numérico previo con un valor de la subregión de contexto, como por ejemplo, dos o más operaciones de una operación de adición, una operación de sustracción, una operación de multiplicación, una operación de división, una operación AND Booleana, una operación OR Booleana, una operación NAND Booleana, una operación NOR booleana, una operación de negación booleana, una operación de complemento o una operación de desviación. En consecuencia, al menos una porción de la representación numérica del valor de contexto numérico previo se mantiene típicamente sin cambio (excepto por un cambio opcional a una posición diferente) cuando derive el valor del contexto numérico actual del valor del contexto numérico previo. En contraste, otras porciones de la representación numérica del valor del contexto numérico previo cambian dependiendo de uno o más valores de la subregión del contexto. De este modo, el valor del contexto numérico actual puede obtenerse con un esfuerzo computacional comparativamente, evitando a la vez un recálculo completo del valor del contexto numérico actual.
[0059]De este modo, se puede obtener un valor del contexto numérico actual significativo, el cual es muy adecuado para ser usado por el selector de la regla de asignación 1060, y que es particularmente muy adecuado para su usarse en combinación con la tabla de búsqueda ari_hash_m como se define en la representación de la tabla de Figs.22(1), 22(2), 22(3), 22(4).
[0060]En consecuencia, se puede lograr una codificación eficiente manteniendo el cálculo de contexto suficientemente simple.
5. Decodificador de audio según la Fig.11
[0061]La Fig.11 muestra un diagrama esquemático de bloque de un decodificador de audio 1100. El decodificador de audio 1100 es similar al decodificador de audio 800 según la Fig. 8, de modo que las señales, medios y funcionalidades idénticas son designadas con números de referencia idénticos.
[0062]El decodificador de audio 1100 está configurado para recibir una información de audio codificada 810 y para proporcionar, sobre la base de la misma, una información de audio decodificada 812. El decodificador de audio 1100 comprende un decodificador aritmético 1120 que está configurado para proporcionar una pluralidad de valores espectrales decodificados 822 sobre la base de una representación codificada aritméticamente 821 de los valores espectrales. El decodificador de audio 1100 también comprende un convertidor del dominio de la frecuencia al dominio del tiempo 830 el cual está configurado para recibir los valores espectrales decodificados 822 y para proporcionar la representación de audio en el dominio del tiempo 812, la cual puede constituir la información de audio decodificada, usando los valores espectrales decodificados 822, para obtener una información de audio decodificada 812.
[0063]El decodificador aritmético 1120 comprende un determinador del valor espectral 824, el cual está configurado para asignar un valor de código de la representación codificada aritméticamente 821 de los valores espectrales sobre un código de símbolo que representa uno o más de valores espectrales decodificados, o al menos una porción (por ejemplo, un plano de bits más significativo) de uno o más de los valores espectrales decodificados. El determinador del valor espectral 824 se puede configurar para efectuar la asignación dependiendo de la regla de asignación, la cual puede ser descrita por una información de la regla de asignación 828a. La información de la regla de asignación 828a puede, por ejemplo, comprender un valor del índice de la regla de asignación, o puede comprender un conjunto seleccionado de entradas de una tabla de frecuencias acumulativas.
[0064]El decodificador aritmético 1120 está configurado para seleccionar una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) que describa una asignación de un valor de código (descrito por la representación codificada aritméticamente 821 de los valores espectrales) sobre un código de símbolo (que describa uno o más valores espectrales) dependiendo de un estado del contexto, estado del contexto el cual puede ser descrito por la información de estado del contexto 1126a. La información de estado del contexto 1126a puede tomar la forma de un valor del contexto numérico actual. El decodificador aritmético 1120 está configurado para determinar el estado del contexto actual dependiendo de la pluralidad de valores espectrales previamente decodificados 822. Para este propósito, se puede usar un seguidor de estado 1126, el cual recibe una información que describe los valores espectrales previamente decodificados. El decodificador aritmético está configurado para modificar una representación numérica del valor de contexto numérico previo, que describe un estado de contexto asociado con uno o más valores espectrales previamente decodificados, dependiendo del valor de la subregión del contexto, para obtener una representación numérica de un valor del contexto numérico actual que describa un estado de contexto asociado con uno o más valores espectrales que se van a decodificar. Una modificación de la representación numérica del valor del contexto numérico previo puede, por ejemplo, ser efectuada por un modificador de representación numérica 1127, el cual es parte del seguidor de estado 1126. En consecuencia, la información del estado del contexto actual 1126a se obtiene, por ejemplo, en forma de un valor de contexto numérico actual. La selección de la regla de asignación se puede efectuar por un selector de la regla de asignación 1128, el cual deriva una información de la regla de asignación 828a de la información del estado del contexto actual 1126a, y que proporciona la información de la regla de asignación 828a al determinador del valor espectral 824. Preferiblemente, el selector de la regla de asignación 1128 se puede configurar para usar una tabla de búsqueda "ari_hash_m[742]", como se define en la representación en tabla de las Figs.22(1) a 22(4), para la selección de la regla de asignación. Por ejemplo, el selector de la regla de asignación puede efectuar la funcionalidad como se describió anteriormente con referencia a las Figs.7 y 8.
[0065]Con respecto a la funcionalidad del decodificador de señales de audio 1100, cabe observar que el decodificador aritmético 1120 está configurado para seleccionar una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) la cual, en promedio, está bien adaptada al valor espectral a ser decodificado, cuando sea seleccionada la regla de asignación dependiendo del estado del contexto actual, el cual, a su vez, se determina dependiendo de una pluralidad de valores espectrales previamente decodificados. En consecuencia, se pueden explotar las dependencias estadísticas entre los valores espectrales adyacentes que se van a decodificarse pueden explotar.
[0066]Además, modificando una representación numérica de un valor de contexto numérico previo que describa un estado de contexto asociado con una decodificación de uno o más valores espectrales previamente decodificados, dependiendo de un valor de subregión de contexto, para obtener una representación numérica de un valor del contexto numérico actual que describa un estado de contexto asociado por una decodificación de uno o más valores espectrales que se van a decodificar, es posible obtener una información significativa acerca del estado actual del contexto, el cual es muy adecuado para la asignación a un valor del índice de la regla de asignación, y que es particularmente muy adecuado para usarse en combinación con la tabla de búsqueda ari_hash_m como se define en la representación en tabla de las Figs.22(1), 22(2), 22(3), 22(4), con esfuerzos computacionales comparativamente pequeños. Manteniendo al menos una porción de una representación numérica del valor de contexto numérico previo (posiblemente en una versión desplazada por bits o escalada) actualizando a la vez otra porción de la representación numérica del valor de contexto numérico previo dependiendo de los valores de la subregión del contexto que no hayan sido considerados en el valor del contexto numérico previo pero que se deberán ser considerados en el valor del contexto numérico actual, los números de operaciones para derivar el valor del contexto numérico actual puede mantenerse relativamente pequeño. También, es posible explotar el hecho de que los contextos usados para decodificar valores espectrales adyacentes son típicamente similares o están correlacionados. Por ejemplo, un contexto para decodificar un primer valor espectral (o de una primera pluralidad de valores espectrales) depende de un primer conjunto de valores espectrales previamente decodificados. Un contexto para la decodificación de un segundo valor espectral (o un segundo conjunto de valores espectrales), que esté adyacente al primer valor espectral (o al primer conjunto de valores espectrales) puede comprender un segundo conjunto de valores espectrales previamente decodificados. Cuando se asuma que el primer valor espectral y el segundo valor espectral están adyacentes (por ejemplo, con respecto a las frecuencias asociadas), el primer conjunto de valores espectrales, el cual determina el contexto para la codificación del primer valor espectral, puede comprender alguna superposición con el segundo conjunto de valores espectrales, lo cual determina el contexto para la decodificación del segundo valor espectral. En consecuencia, puede comprenderse fácilmente que el estado del contexto para la decodificación del segundo valor espectral comprende alguna correlación con el estado del contexto para la decodificación del primer valor espectral. Una eficiencia computacional de la derivación del contexto, es decir, de la derivación del valor del contexto numérico actual, puede ser lograda explotando estas correlaciones. Se ha encontrado que la correlación entre los estados del contexto para una decodificación de los valores espectrales adyacentes (por ejemplo, entre el estado del contexto descrito por el valor del contexto numérico previo y el estado del contexto descrito por el valor del contexto numérico actual) puede ser explotado de manera eficiente modificando sólo aquellas partes del valor del contexto numérico previo que dependan de los valores de la subregión del contexto no considerados para la derivación del estado del contexto numérico previo y derivando el valor del contexto numérico actual del valor numérico de contexto anterior previo.
[0067]Para concluir, los conceptos descritos aquí permiten una eficiencia computacional particularmente buena cuando se derive el valor del contexto numérico actual.
[0068]Los detalles adicionales se describirán más adelante.
6. Codificador de audio según la Fig.12
[0069]La Fig.12 muestra un diagrama esquemático de bloques de un codificador de audio, según una realización de la invención. El codificador de audio 1200 según la Fig.12 es similar al codificador de audio 700 según la Fig. 7, de modo que los medios, señales, y funcionalidades idénticas son designados con números de referencia idénticos.
[0070]El codificador de audio 1200 está configurado para recibir una información de audio de entrada 710 y, para proporcionar, sobre la base de la misma, una información de audio codificada 712. El codificador de audio 1200 comprende un convertidor del dominio del tiempo al dominio de la frecuencia que compacta energía 720 el cual está configurado para proporcionar una representación de audio en el dominio de la frecuencia 722 sobre la base de una representación de audio en el dominio del tiempo de la información de audio entrada 710, de modo que la representación de audio en el dominio de la frecuencia 722 comprende un conjunto de valores espectrales. El codificador de audio 1200 también comprende un codificador aritmético 1230 configurado para codificar un valor espectral (en el conjunto de valores espectrales que forman la representación de audio en el dominio de la frecuencia 722), o una pluralidad de valores espectrales, o una versión preprocesada de los mismos, usando una palabra de código de longitud variable para obtener la información de audio codificada 712 (la cual puede comprender, por ejemplo, una pluralidad de palabras de código de longitud variable.
[0071]El codificador aritmético 1230 está configurado para asignar un valor espectral, o una pluralidad de valores espectrales, o un valor de un plano de bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código (es decir, sobre una palabra de código de longitud variable), dependiendo de un estado del contexto. El codificador aritmético 1230 está configurado para seleccionar una regla de asignación que describa una asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código, dependiendo del estado del contexto. El codificador aritmético está configurado para determinar el estado del contexto actual dependiendo de una pluralidad de valores espectrales previamente codificados (preferiblemente, pero no necesariamente, adyacentes). Para este propósito, el codificador aritmético está configurado para obtener una pluralidad de valores de subregión del contexto, y para derivar un valor del contexto numérico actual asociado con uno o más valores espectrales que se van a codificar dependiendo de los valores de subregión de contexto almacenados. Además, el codificador aritmético está configurado para calcular la norma de un vector formado por una pluralidad de valores espectrales previamente codificados, para obtener un valor de subregión de contexto común asociado con la pluralidad de valores espectrales previamente codificados.
[0072]Como se puede observar, la asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano bits más significativos de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código se puede efectuar por una codificación del valor espectral 740 usando una regla de asignación descrita, por una información de la regla de asignación 742. Un seguidor de estado 1250 puede configurarse para seguir el estado del contexto y puede comprender un ordenador del valor de la subregión contexto 1252, para calcular la norma de un vector formado por una pluralidad de valores espectrales previamente codificados, para obtener valores de subregión de contexto comunes asociados con la pluralidad de valores espectrales previamente codificados. El seguidor de estado 1250 también está configurado preferiblemente para determinar el estado del contexto actual dependiendo del resultado del cálculo de un valor de subregión del contexto efectuado por el ordenador y el valor de la subregión de contexto 1252. En consecuencia, el seguidor de estado 1250 proporciona una información 1254, que describe el estado del contexto actual. Un selector de la regla de asignación 1260 puede seleccionar una regla de asignación, por ejemplo, las tablas de frecuencias acumulativas que describa una asignación de un valor espectral, o de un plano de bits más significativos de un valor espectral, sobre un valor de código. En consecuencia, el selector de la regla de asignación 1260 proporciona la información de la regla de asignación 742 a la codificación espectral 740. Preferiblemente, el selector de la regla de asignación 1260 se puede configurar para usar la tabla de búsqueda "ari_hash_m[742]", según lo definido en la representación de la tabla de las Figs.22(1) a 22(4), para la selección de la regla de asignación. Por ejemplo, el selector de la regla de asignación puede efectuar la funcionalidad como se describió anteriormente con referencia a las Figs.7 y 8.
[0073]Para resumir lo anterior, el codificador de audio 1200 efectúa una codificación aritmética de una representación de audio en el dominio de la frecuencia proporcionada por el convertidor del dominio del tiempo al dominio de la frecuencia 720. La codificación aritmética depende del contexto, de modo que se seleccione una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) dependiendo de los valores espectrales previamente decodificados. En consecuencia, los valores espectrales adyacentes en tiempo y/o frecuencia (o, al menos, dentro de un ambiente predeterminado) entre sí y/o al valor espectral actualmente codificado (es decir, los valores espectrales dentro de un ambiente predeterminado del valor espectral actualmente codificado) son considerados en la codificación aritmética para ajustar la distribución de probabilidad evaluada por la codificación aritmética.
[0074]Para proporcionar un valor del contexto numérico actual, se obtiene un valor de subregión de contexto asociado con una pluralidad de valores espectrales previamente codificados sobre la base de un cálculo de una norma de un vector formado por una pluralidad de valores espectrales previamente codificados. El resultado de la determinación del valor del contexto numérico actual es aplicado en la selección del estado del contexto actual, es decir, en la selección de una regla de asignación.
[0075]Calculando la norma de un vector formado por una pluralidad de valores espectrales previamente codificados, puede obtenerse una información significativa que describe una porción del contexto de uno o más valores espectrales que se van a codificar, donde la norma de un vector de valores espectrales previamente codificados puede ser representada típicamente con un número comparativamente pequeño de bits. De este modo, la cantidad de la información de contexto, que necesita ser almacenada para su uso posterior en la derivación de un valor del contexto numérico actual, puede mantenerse suficientemente pequeña aplicando el procedimiento discutido anteriormente para el cálculo de los valores de la subregión del contexto. Se ha encontrado que la norma de un vector de valores espectrales previamente codificados típicamente comprende la información más significativa con respecto al estado del contexto. En contraste, se ha encontrado que el signo de los valores espectrales previamente codificados típicamente comprende un impacto subordinado sobre el estado del contexto, de modo que tiene sentido despreciar el signo de valores espectrales previamente decodificados para reducir la cantidad de información a ser almacenada para su uso posterior. También, se ha encontrado que cálculo de una norma de un vector de valores espectrales previamente codificados es un procedimiento razonable para la derivación de un valor de subregión de contexto, puesto que el efecto de la promediación, el cual se obtiene típicamente del cálculo de la norma, deja la información más importante acerca del estado del contexto substancialmente sin ser afectada. Para resumir, el cálculo del valor de subregión de contexto efectuado por el ordenador del valor de la subregión del contexto 1252 permite proporcionar una información de subregión de contexto compacta para su almacenamiento y reutilización posterior, donde la información más relevante acerca del estado del contexto es presentada a pesar de la reducción de la cantidad de información.
[0076]Además, se ha encontrado que el valor del contexto numérico actual obtenido como se discutió anteriormente es muy adecuado para una selección de una regla de asignación usando la tabla de búsqueda “ari_hash_m[742]", según lo definido en la representación en tabla de las Figs.22(1) a 22(4). Por ejemplo, el selector de la regla de asignación puede efectuar la funcionalidad como se describió anteriormente con referencia a las Figs.
7 y 8.
[0077]En consecuencia, se puede lograr una codificación eficiente de información de audio de entrada 710, manteniendo a la vez el esfuerzo computacional y la cantidad de datos a ser almacenados por el codificador aritmético 1230 suficientemente pequeño.
7. Decodificador de audio según la Fig, 13
[0078]La Fig. 13 muestra un diagrama esquemático de bloques de un decodificador de audio 1300. Puesto que el decodificador de audio 1300 es similar al decodificador de audio 800 según la Fig.8 y al decodificador de audio 1100 según la Fig.11, los medios, señales y funcionalidades idénticas son designados con números idénticos.
[0079]El decodificador de audio 1300 está configurado para recibir una información de audio codificada 810 y para proporcionar, sobre la base de la misma, una información de audio decodificada 812. El decodificador audio 1300 comprende de un decodificador aritmético 1320 que está configurado para proporcionar una pluralidad de valores espectrales decodificadas 822 sobre la base de una representación codificada aritméticamente 821 de los valores espectrales. El decodificador de audio 1300 también comprende un convertidor del dominio de la frecuencia al dominio del tiempo 830 el cual está configurado para recibir los valores espectrales decodificados 822 y para proporcionar una representación del audio en el dominio del tiempo 812, la cual puede constituir la información de audio decodificada, usando los valores espectrales decodificados 822, para obtener una información de audio decodificada 812.
[0080]El decodificador aritmético 1320 comprende un determinador del valor espectral 824 el cual está configurado para asignar un valor de código de la representación codificada aritméticamente 821 de valores espectrales sobre un código de símbolo que representa uno o más de los valores espectrales decodificados, o al menos una porción (por ejemplo, un plano de bits más significativo) de uno o más de los valores espectrales decodificados. El determinador del valor espectral 824 puede configurarse para efectuar una asignación dependiendo de la regla de asignación, lo cual se describe por la información de la regla de asignación 828a. La información de la regla de asignación 828a puede, por ejemplo, comprender un valor del índice de la regla de asignación, o un conjunto seleccionado de entradas de una tabla de frecuencias acumulativas.
[0081]El decodificador aritmético 1320 está configurado para seleccionar una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) que describa una asignación de un valor de código (descrito por la representación codificada aritméticamente 821 de los valores espectrales) sobre un código de símbolo (que describe uno o más valores espectrales) dependiendo de un estado del contexto (el cual puede ser descrito por la información de estado del contexto 1326a). Preferiblemente, el decodificador aritmético 1320 puede configurarse para usar una tabla de búsqueda "ari_hash_m[742]", como se define en la representación en tabla de las Figs. 22(1) a 22(4), para la selección de la regla de asignación. Por ejemplo, el decodificador aritmético 1320 puede efectuar la funcionalidad como se describió anteriormente con referencia a las Figs.7 y 8. El decodificador aritmético 1320 está configurado para determinar el estado del contexto actual dependiendo de una pluralidad de valores espectrales previamente decodificados 822. Para este propósito, se puede usar un seguidor de estado 1326, el cual recibe una información que describe los valores espectrales previamente decodificados. El decodificador aritmético también está configurado para obtener una pluralidad de valores de subregión de contexto sobre la base de valores espectrales previamente decodificados y para almacenar valores de la subregión del contexto. El decodificador aritmético está configurado para derivar un valor de contexto numérico actual asociado con uno o más valores espectrales que se van a decodificar dependiendo de los valores de subregión de contexto. El decodificador espectral 1320 está configurado para calcular la norma de un vector formado por una pluralidad de valores espectrales previamente decodificados, para obtener un valor de subregión de contexto común asociado con la pluralidad de valores espectrales previamente decodificados.
[0082]El cálculo de la norma de un vector formado por una pluralidad de valores espectrales previamente codificados, para obtener un valor de subregión de contexto común asociado con la pluralidad de valores espectrales previamente decodificados, puede, por ejemplo, ser efectuado por el calculador del valor de la subregión de contexto 1327, el cual es parte del seguidor de estado 1326. En consecuencia, se obtiene una información del estado del contexto actual 1326a sobre la base de los valores de subregión de contexto, donde el seguidor de estado 1326 proporciona preferiblemente un valor del contexto numérico actual asociado con uno o más valores espectrales que se van a decodificar dependiendo de los valores de subregión de contexto almacenados. La selección de las reglas de asignación se puede efectuar por un selector de la regla de asignación 1328, el cual deriva una información de la regla de asignación 828a de la información del estado actual del contexto 1326a, y que proporciona la información de la regla de asignación 828a al determinador del valor espectral 824.
[0083]Con respecto a la funcionalidad del decodificador de la señal de audio 1300, cabe observar que el decodificador aritmético 1320 está configurado para seleccionar una regla de asignación (por ejemplo, una tabla de frecuencias acumulativas) que, en promedio, está bien adaptada a los valores espectrales que se van a decodificar, puesto que la regla de asignación se selecciona dependiendo del estado del contexto actual, el cual, a su vez, se determina dependiendo de la pluralidad de valores espectrales previamente decodificados. En consecuencia, se pueden explotar las dependencias estadísticas entre los valores espectrales adyacentes que se van a decodificarse pueden explotar.
[0084]Sin embargo, se ha encontrado que es eficiente, en términos del uso de memoria, almacenar valores de subregión de contexto, que se basen en el cálculo de una norma de un vector formado de una pluralidad de valores espectrales previamente decodificados, para su uso posterior en la determinación del valor del contexto numérico. También se ha encontrado que esos valores de subregión de contexto comprenden aún la información del contexto más relevante. En consecuencia, el concepto usado por el seguidor de estado 1326 constituye un buen compromiso entre la eficiencia de la codificación, la eficiencia computacional y la eficiencia de almacenamiento.
[0085]Los detalles adicionales se describirán más adelante.
8. Codificador de audio según la Fig.1
[0086]En lo sucesivo, se describirá un codificador de audio según una realización de la presente invención. La Fig.1 muestra un diagrama esquemático de bloques de ese codificador de audio 100.
[0087]El codificador de audio 100 está configurado para recibir una información de audio de entrada 110 para proporcionar, sobre la base de la misma, un flujo de bits 112, el cual constituye una información de audio codificada. El codificador de audio 100 comprende opcionalmente un preprocesador 120, el cual está configurado para recibir la información de audio de entrada 110 y para proporcionar, sobre la base de la misma, una información de audio de entrada preprocesada 110a. El codificador de audio 100 también comprende un transformador de señales en el dominio del tiempo al dominio de la frecuencia que compacta energía 130, el cual también se designa como convertidor de señales. El convertidor de señales 130 está configurado para recibir la información de audio de entrada 110, 110a y proporcionar, sobre la base de la mismas, una información de audio en el dominio de la frecuencia 132 la cual preferiblemente toma la forma de un conjunto de valores espectrales. Por ejemplo, el transformador de señales 130 se puede configurar para recibir una trama de la información de audio de entrada 110, 110a (por ejemplo, un bloque de muestras en el dominio del tiempo) y para proporcionar un conjunto de valores espectrales que representan el contenido de audio de la trama de audio respectiva. Además, el transformador de señales 130 se puede configurar para recibir una pluralidad de tramas de audio subsecuentes, superpuestas o no superpuestas de la información de audio de entrada 110, 110a y para proporcionar, sobre la base de la misma, una representación de audio en el dominio del tiempo - frecuencia, que comprende una secuencia de conjuntos subsecuentes de valores espectrales, un conjunto de valores espectrales asociados con cada trama.
[0088]El transformador de señales del dominio del tiempo al dominio de la frecuencia que compacta energía 130 puede comprender un banco de filtros que compacta energía, el cual proporciona valores espectrales asociados con diferentes intervalos de frecuencia superpuestos o no superpuestos. Por ejemplo, el transformador de señales 130 puede comprender un transformador MDCT de ventanas 130a, que está configurado para abrir una ventana de información de audio de entrada 110, 110a (o una trama de la misma) usando una ventana de transformación y para efectuar una transformación cosinusoidal discreta modificada de la información de audio de entrada abierta en forma de ventana 110, 110a (o la trama de ventana de la misma). En consecuencia, la representación de audio en el dominio de la frecuencia 132 puede comprender un conjunto de, por ejemplo, 1024 valores espectrales en forma de coeficientes de MDCT asociados con una trama de la información de audio de entrada.
[0089]El codificador de audio 100 puede, además, comprender, opcionalmente, un postprocesador espectral 140, el cual está configurado para recibir la representación de audio en el dominio de la frecuencia 132 y para proporcionar, sobre la base de la misma, una representación de audio en el dominio de la frecuencia postprocesada 142. El postprocesador espectral 140 puede, por ejemplo, ser configurado para efectuar una formación de ruido temporal y/o predicción a largo plazo y/o cualquier otro postprocesamiento espectral conocido en la técnica. El codificador de audio comprender, además, opcionalmente, un sellador/cuantizador 150, el cual está configurado para recibir una representación de audio del dominio de la frecuencia 132 o la versión postprocesada 142 de la misma y para proporcionar una representación de audio en el dominio de la frecuencia escalada y cuantizada 152.
[0090]El codificador de audio 100 comprende además, opcionalmente, un procesador de modelo psicoacústico 160, el cual está configurado para recibir la información de audio de entrada 110 (o la versión postprocesada 110a de la misma) para proporcionar sobre la base de la misma, información de control opcional, la cual se puede usar para el control del transformador de señales en el dominio del tiempo al dominio de la frecuencia que compacta energía 130, para el control del postprocesador espectral opcional 140 y/o para el control del sellador/cuantizador opcional 150. Por ejemplo, el procesador de modelo psicoacústico 160 se puede configurar para analizar la información de audio de entrada, para determinar cuáles componentes de la información de audio de entrada 110, 110a son particularmente importantes para la percepción humana del contenido de audio y cuales componentes de la información de audio de entrada 110, 110a son menos importantes para la percepción del contenido de audio. En consecuencia, el procesador de modelo psicoacústico 160 puede proporcionar información de control, la cual se usa por el codificador de audio 100 para ajustar el escalamiento de la representación de audio en el dominio de a frecuencia 132, 142 por el sellador /cuantizador 150 y/o la resolución de cuantización aplicadas el sellador/cuantizador 150. En consecuencia, las bandas del factor de escala perceptualmente importantes (es decir, los grupos de valores espectrales adyacentes los cuales son particularmente importantes para la percepción humana del contenido de audio) son escaladas en factor de escalamiento grande y cuantizadas con una resolución comparativamente alta, mientras que las bandas de factor de escala perceptualmente menos importante (es decir, los grupos de valores espectrales adyacentes) son escaladas con un factor de escalamiento comparativamente más pequeño, y cuantizadas con una resolución de cuantización comparativamente menor. En consecuencia, los valores espectrales escalados de las frecuencias perceptualmente más importantes son típicamente, significativamente más grandes que los valores espectrales de frecuencias perceptualmente menos importantes.
[0091]El codificador de audio también comprende un codificador aritmético 170, el cual está configurado para recibir la versión escalada y cuantizada 152 de la representación de audio en el dominio de la frecuencia 132 (o, alternativamente, la versión postprocesada 142 de la representación de audio en el dominio de la frecuencia 132, o aún la representación de audio en el dominio de la frecuencia 132 en sí) y para proporcionar información de palabra de código aritmética 172a sobre la base de la misma, de modo que la información de la palabra de código aritmética represente la representación de audio en el dominio de la frecuencia 152.
[0092]El codificador de audio 100 también comprende un formateador de la carga útil de flujo de bits 190, el cual está configurado para recibir la información de la palabra de código aritmética 172a. El formateador de la carga útil del flujo de bits 190, también está configurado típicamente para recibir información adicional, como, por ejemplo, información del factor de escala que describe cuales factores de escala han sido aplicados por el sellador/ cuantizador 150. Además, el formateador de la carga útil del flujo de bits 190 se puede configurar para recibir otra información de control. El formateador de la carga útil del flujo de bits 190 está configurado para proporcionar el flujo de bits 112 sobre la base de la información recibida montando el flujo de bits según una sintaxis del flujo de bits deseada, la cual se describirá más adelante.
[0093]En lo sucesivo, se describirán los detalles con respecto al codificador aritmético 170. El codificador aritmético 170 está configurado para recibir una pluralidad de valores espectrales postprocesados y escalados y cuantizados de la representación de audio en el dominio de la frecuencia 132. El codificador aritmético comprende un extractor del plano de bits más significativos 174, o aun de dos valores espectrales, el cual está configurado para extraer un plano de bits más significativos m de un valor espectral. Cabe observar aquí que el plano de bits más significativo puede comprender uno o aún más bits (por ejemplo, dos o tres bits), los cuales son los bits más significativos del valor espectral. De este modo, el extractor del plano de bits más significativo 174 proporciona un valor del plano de bits más significativos 176 de un valor espectral.
[0094]De manera alternativa, sin embargo, el extractor del plano bits más significativos 174 puede proporcionar un valor del plano de bits más significativos m combinando los planos de bits más significativos de una pluralidad de valores espectrales (por ejemplo, de los valores espectrales a y b). El plano de bits más significativos del valor espectral a se designa con una m. De manera alternativa, el valor del plano de bits más significativos combinado de una pluralidad de valores espectrales a, b se designa con m.
[0095]El codificador aritmético 170 también comprende un primer determinador de la palabra de código 180, el cual está configurado para determinar una palabra de código aritmética acod_m[pki][m] que representa el valor del plano de bits más significativos m. Opcionalmente, el determinador de la palabra de código 180 también puede proporcionar una o más palabras de código de escape (también designadas aquí con "ARITH_ESCAPE") que indiquen, por ejemplo, cuántos planos de bits menos significativos están disponibles (y, en consecuencia, indicando el peso numérico del plano de bits más significativos). El primer determinador de palabra de código 180 se puede configurar para proporcionar la palabra de código asociada con un valor del plano de bits más significativos m usando una tabla de frecuencias acumulativas seleccionadas que tenga (o sea referencia por) una índice de tabla de frecuencias acumulativas pki.
[0096]Para determinar qué tabla de frecuencias acumulativas deberá ser seleccionada, el codificador aritmético preferiblemente comprende un seguidor de estado 182, el cual está configurado para seguir el estado del codificador aritmético, por ejemplo, observando cuales valores espectrales han sido codificados previamente. El seguidor de estado 182 proporciona en consecuencia una información de estado 184, por ejemplo, un valor de estado designado con "s" o "t" o "c". El codificador aritmético 170 también comprende un selector de tabla de frecuencias acumulativas 186, el cual está configurado para recibir la información de estado 184 y para proporcionar una información 188 que describa la tabla de frecuencias acumulativas seleccionada al determinador de la palabra de código 180. Por ejemplo, un selector de la tabla de frecuencias acumulativas 186 puede proporcionar un índice de tabla de frecuencias acumulativas "pki" que describa las tablas de frecuencias acumulativas, de un conjunto de 64 tablas de frecuencias acumulativas, se selecciona para ser usada por el determinador de la palabra de código. De manera alternativa, el selector de la tabla de frecuencias acumulativas 186 puede proporcionar toda la tabla de frecuencias acumulativas o una subtabla al determinador de la palabra de código. De este modo, el determinador de la palabra de código 180 puede usar la tabla de frecuencias acumulativas seleccionada o una subtabla con la condición de que la palabra de código acod_m[pki][m] del valor del plano de bits más significativos m, de modo que la palabra de código real acod_m[pki][m] codifique el valor del plano de bits más significativos m dependa del valor de m y el índice de la tabla de frecuencias acumulativas pki y en consecuencia en la información de estado actual 184. Los detalles adicionales con respecto al procedimiento de codificación y el formato de la palabra de código obtenido se describirán más adelante.
[0097]Cabe observar, sin embargo, que en algunas realizaciones, el seguidor de estado 182 puede ser idéntico a, o tomar la funcionalidad de, el seguidor de estado 750, el seguidor de estado 1050 o el seguidor de estado 1250. También cabe observar que el selector de la tabla de frecuencias acumulativas 186 puede, en algunas realizaciones, ser idéntico a, o tomar la funcionalidad del, selector de la regla de asignación 760, el selector de la regla de asignación 1060 o el selector de la regla de asignación 1260. Además, el primer determinador de la palabra de código 180 puede, en algunas realizaciones, ser idéntico a, o tomar la funcionalidad de la codificación del valor espectral 740.
[0098]El codificador aritmético 170 comprende además un extractor del plano de bits menos significativos 189a, el cual está configurado para extraer uno o más planos de bits menos significativos de la representación de audio en el dominio de la frecuencia escalada y cuantizada 152, si uno o más de los valores espectrales que se van a codificar excede el intervalo de valores codificables usando el plano de bits más significativos únicamente. Los planos de bits menos significativos pueden comprender uno o más bits, según se desee. En consecuencia, el extractor del plano de bits menos significativos 189a proporciona una información del plano de bits menos significativos 189b. El codificador aritmético 170 también comprende un segundo determinador de la palabra de código 189c, el cual está configurado para recibir la información del plano de bits menos significativo 189d y para proporcionar, sobre la base de la misma, 0, 1 o más palabras de código "acod_r" que representan el contenido de 0, 1 o más planos de bits menos significativos. El segundo determinador de la palabra de código 189c se puede configurar para aplicar un algoritmo de codificación aritmética o cualquier otro algoritmo de codificación para derivar las palabras de código del plano de bits menos significativos "acod_r" de la información del plano de bits menos significativos 189b.
[0099]Cabe observar aquí que el número de planos de bits menos significativos puede variar dependiendo del valor de los valores espectrales escalados y cuantizados 152, de modo que no puedan existir planos de bits menos significativos del todo, si el valor espectral escalado y cuantizado que se van a codificar es comparativamente pequeño, de modo que pueda existir un plano de bits menos significativos si el valor espectral escalado y cuantizado actual que se van a codificar es de un intervalo medio y de modo que pueda existir más de un plano de bits menos significativos si el valor espectral escalado y cuantizado que se van a codificar toma un valor comparativamente grande.
[0100]Para resumir lo anterior, el codificador aritmético 170 está configurado para codificar valores espectrales escalados y cuantizados, los cuales se describen por la información 152, usando un procedimiento de codificación jerárquico. El plano de bits más significativos (comprendiendo, por ejemplo, uno, dos o tres bits por valor espectral) de uno más valores espectrales, se codifica para obtener una palabra de código aritmético "acod_m[pki][m]" de un valor del plano de bits más significativos m. Uno o más planos de bits menos significativos (cada uno de los planos de bits menos significativos comprendiendo, por ejemplo, uno, dos o tres bits) de uno o más valores espectrales se codifican para obtener una o más palabras de código "acod_r". Cuando se codifique el plano de bits más significativos, el valor m del valor de bits más significativos es asignado a una palabra de código acod_m[pki][m]. Para este propósito, 64 están disponibles diferentes tablas de frecuencias acumulativas para la codificación del valor m dependiendo de un estado del codificador aritmético 170, i.e. dependiendo de los valores espectrales previamente codificados. En consecuencia, se obtiene la palabra de código "acod_m[pki][m]". Además, se proporcionan e incluyen una o más palabras de código "acod_r" en el flujo de bits si están presentes uno o más planos de bits menos significativos.
Descripción del reajuste
[0101]El codificador de audio 100 se puede configurar opcionalmente para decidir si se puede obtener una mejora en la velocidad de bits reajustando el contexto, por ejemplo, ajustando el índice de estado a un valor predeterminado. En consecuencia, el codificador de audio 100 se puede configurar para proporcionar una información de reajuste (p. ej. llamada "arith_reset_flag") que indica si el contexto para la codificación aritmética se ajustó, y también indica si el contexto para la codificación aritmética en un decodificador correspondiente se deberá reajustar.
[0102]Los detalles con respecto al formato del flujo de bits y las tablas de frecuencia acumulativa aplicadas se discutirán más adelante.
9. Decodificador de audio según la Fig.2
[0103]En lo sucesivo, se describirá un decodificador de audio según una realización de la invención. La Fig.2 muestra un diagrama esquemático de bloques de tal decodificador de audio 200.
[0104]El decodificador de audio 200 está configurado para recibir un flujo de bits 210, el cual representa una información de audio codificada y la cual puede ser idéntica al flujo de bits 112 proporcionado por el codificador de audio 100. El decodificador de audio 200 proporciona una información de audio decodificada 212 sobre la base del flujo de bits 210.
[0105]El decodificador de audio 200 comprende reasignador de formato de carga útil de flujo de bits opcional 220, el cual está configurado para recibir el flujo de bits 210 y para extraer del flujo de bits 210 una representación de audio en el dominio de la frecuencia codificada 222. Por ejemplo, el reasignador de formato de la carga útil del flujo de bits 220 se puede configurar para extraer del flujo de bits 210 datos espectrales codificadas aritméticamente como, por ejemplo, una palabra de código aritmético "acod_m[pki][m]" que representa el valor del plano de bits más significativos m de un valor espectral a, o de una pluralidad de valores espectrales a, b, y una palabra de código "acod_r" que representa un contenido de un plano de bits menos significativos del valor espectral a, o de una pluralidad de valores espectrales a, b, de la representación de audio en el dominio de la frecuencia. De este modo, la representación de audio en el dominio de la frecuencia codificada 222 constituye (o comprende) una representación codificada aritméticamente de valores espectrales. El reasignador de formato de la carga útil del flujo de bits 220 está configurado para extraer la información de control adicional del flujo de bits, la cual no se muestra en la Fig.2. Además, el reasignador de formato de la carga útil del flujo de bits está opcionalmente configurado para extraer del flujo de bits 210, una información de reajuste de estado 224, la cual también es designada como indicador de reajuste aritmético o "arith_reset_flag".
[0106]El decodificador de audio 200 comprende un decodificador aritmético 230, el cual también se designa como "decodificador sin ruido espectral". El decodificador aritmético 230 está configurado para recibir la representación de audio en el dominio de la frecuencia codificada 220 y, opcionalmente, la información de reajuste de estado 224. El decodificador aritmético 230 está también configurado para proporcionar una representación de audio en el dominio del tiempo codificada 232, la cual puede comprender una representación decodificada de valores espectrales. Por ejemplo, la representación de audio en el dominio de la frecuencia codificada 232 puede comprender una representación decodificada de valores espectrales, los cuales se describen por la representación de audio en el dominio de la frecuencia codificada 220.
[0107]El decodificador de audio 200 también comprende un cuantizador/reescalador inverso opcional 240, el cual está configurado para recibir la representación de audio en el dominio de la frecuencia codificada 232 y para proporcionar, sobre la base de la misma, una representación de audio en el dominio de la frecuencia cuantizada y escalada de manera inversa 242.
[0108]El decodificador de audio 200 comprende además un preprocesador espectral opcional 250, el cual está configurado para recibir la representación de audio en el dominio de la frecuencia cuantizada y reescalada de manera inversa 242 y para proporcionar, sobre la base de la misma, una versión preprocesada 252 de la representación de audio en el dominio de la frecuencia cuantizada y reescalada de manera inversa 242. El decodificador de audio 200 también comprende un transformador de señales del dominio de la frecuencia al dominio del tiempo 260, el cual también se designa como un "convertidor de señales". El transformador de señales 260 está configurado para recibir la versión preprocesada 252 de la representación de audio en el dominio de la frecuencia cuantizada y reescalada de manera inversa 242 (o, de manera alternativa, la representación de audio en el dominio de la frecuencia cuantizada y reescalada de manera inversa 242 o la representación de audio en el dominio de la frecuencia codificada 232) y para proporcionar, sobre la base de la misma, una representación en el dominio del tiempo 262 de la información de audio. El transformador de señales del dominio de la frecuencia al dominio del tiempo 260 puede, por ejemplo, comprender un transformador para efectuar una transformación cosinusoidal discreta modifica inversa (Inverse-Modified-Discrete-Cosine Transform, IMDCT) y la creación de una ventana apropiada (así como otras funcionalidades apropiadas, como, por ejemplo, una superposición y suma).
[0109]El decodificador de audio 200 puede además comprender un postprocesador en el dominio del tiempo opcional 270, el cual está configurado para recibir la representación en el dominio del tiempo 262 de la información de audio y para obtener la información de audio decodificada 212 usando un postprocesamiento en el dominio del tiempo. Sin embargo, si el postprocesamiento es omitido, la representación en el dominio del tiempo 262 puede ser idéntica a la información de audio decodificada 212.
[0110]Cabe observar aquí que el cuantizador/reescalador inverso 240, el preprocesador espectral 250, el transformador de señales del dominio de la frecuencia al dominio del tiempo 260 y el postprocesador en el dominio del tiempo 270 se puede controlar dependiendo de la información de control, la cual es extraída del flujo de bits 210 por el reasignador de formato de la carga útil del flujo de bits 220.
[0111]Para resumir la funcionalidad total del decodificador de audio 200, una representación audio en el dominio de la frecuencia 232, por ejemplo, se puede obtener un conjunto de valores espectrales asociados con una trama de audio de la información de audio codificada, sobre la base de la representación en el dominio de la frecuencia codificada 222 usando el decodificador aritmético 230. Posteriormente, el conjunto, por ejemplo, 1024 valores espectrales, los cuales pueden ser coeficientes de MDCT, son cuantizados de manera inversa, reescalados y preprocesados. En consecuencia, se obtiene un conjunto de valores espectrales cuantizados de manera inversa, reescalados y preprocesados (por ejemplo, 1024 coeficientes de MDCT). Posteriormente, se deriva una representación en el dominio del tiempo de una trama de audio del conjunto de valores en el dominio de la frecuencia, cuantizados de manera inversa, reescalados, y preprocesados espectralmente (por ejemplo, coeficientes de MDCT). En consecuencia, se obtiene una representación en el dominio del tiempo de una trama de audio. La representación en el dominio del tiempo de una trama de audio dada puede combinarse con representaciones en el dominio del tiempo de tramas de audio previas y/o posteriores. Por ejemplo, se puede efectuar una superposición y suma entre las representaciones en el dominio del tiempo de tramas de audio posterior para suavizar las transiciones entre las representaciones en el dominio de tiempo entre las tramas de audio adyacentes y para obtener una cancelación de asignación de un alias. Para más detalles con respecto a la reconstrucción de la información de audio decodificada 212 sobre la base de la representación de audio en el dominio del tiempo-frecuencia decodificada 232, se hace referencia, por ejemplo, a estándar internacional ISO/IEC 14496-3, parte 3, subparte 4, donde se da una discusión detallada. Sin embargo, se pueden utilizar otros esquemas de superposición y cancelación de alias más elaborados.
[0112]En lo sucesivo, se describirán algunos detalles con respecto al decodificador aritmético 230. El decodificador aritmético 230 comprende un determinador del plano de bits más significativo 284, el cual está configurado para recibir el código de palabra aritmética acod_m[pki][m] que describe el valor del plano de bits más significativos m. El determinador del plano de bits más significativo 284 se puede configurar para usar una tabla de frecuencias acumulativas de un conjunto comprendiendo una pluralidad de 64 tablas de frecuencias acumulativas para derivar el valor de plano de bits más significativo m del código de palabra aritmética "acod_m[pki][m]".
[0113]El determinador del plano de bits más significativo 284 está configurado para derivar valores 286 de un plano de bits más significativos de uno o más valores espectrales sobre la base del código de palabra acod_m. El decodificador aritmético 230 comprende además un determinador del plano de bits menos significativos 288, el cual está configurado para recibir una o más palabras de código "acod_r" que representen uno o más planos de bits menos significativos de un valor espectral. En consecuencia, el determinador del plano de bits menos significativos 288 está configurado para proporcionar valores decodificados 290 de uno o más planos de bits menos significativos. El decodificador de audio 200 también comprende un combinador del plano de bits 292, el cual está configurado para recibir los valores codificados 286 del plano de bits más significativos de uno o más valores espectrales y los valores decodificados 290 de uno o más planos de bits más significativos de los valores espectrales si esos planos de bits menos significativos están disponibles para los valores espectrales actuales. En consecuencia, el combinador del plano de bits 292 proporciona valores espectrales decodificados, los cuales son parte de la representación de audio en el dominio de la frecuencia decodificada 232. Naturalmente, el decodificador aritmético 230 es configurado típicamente para proporcionar una pluralidad de valores espectrales para obtener un conjunto completo de valores espectrales decodificados asociados con una trama actual del contenido de audio.
[0114]El decodificador aritmético 230 comprende además un selector de tabla de frecuencias acumulativas 296, el cual está configurado para seleccionar una de 64 tablas de frecuencias acumulativas 64 ari_cf_m[64][17] (cada tabla ari_cf_m[pki][17], con 0≤pki≤63, teniendo 17 entradas) dependiendo de un índice de estado 298 que describa un estado del decodificador aritmético. Para seleccionar una de las tablas de frecuencias acumulativas, el selector de la tabla de frecuencias acumulativas preferiblemente evalúa la tabla de búsqueda ari_hash_m[742] según lo definido por la representación en tabla de las Figs.22(1), 22(2), 22(3) y 22(4). Los detalles con respecto a esta evaluación de la tabla de búsqueda ari_hash_m[742] se describirán más adelante. El decodificador aritmético 230 comprende además un seguidor de estado 299, el cual está configurado para seguir un estado del decodificador aritmético dependiendo de los valores espectrales previamente decodificados. La información de estado se puede reajustar opcionalmente a una información de estado predeterminado en respuesta a la información de reajuste de estado 224. En consecuencia, el selector de la tabla de frecuencias acumulativas 296 está configurado para proporcionar un índice (por ejemplo, pki) de una tabla de frecuencias acumulativas seleccionada, o una tabla o subtabla de frecuencias acumulativas seleccionada en sí, para la aplicación en la decodificación del valor del plano de bits más significativos m dependiendo del código de palabra "acod_m".
[0115]Para resumir la funcionalidad del decodificador audio 200, el decodificador audio 200 está configurado para recibir una representación audio dominio de la frecuencia codificada eficientemente por la velocidad de bits 222 y para obtener una representación de audio en el dominio de la frecuencia decodificada sobre la base de la misma. En el decodificador aritmético 230, el cual se usa para obtener la representación de audio en el dominio de la frecuencia decodificada 232 sobre la base de la representación de audio en el dominio de la frecuencia codificada 222, se explota una probabilidad de bits de diferentes combinaciones de valores del plano de bits más significativos de los valores espectrales adyacentes usando un decodificador aritmético 280, el cual está configurado para aplicar una tabla de frecuencias acumulativas. En otras palabras, las dependencias estadísticas entre los valores espectrales son explotadas seleccionando diferentes tablas de frecuencias acumulativas de un conjunto comprendiendo 64 tablas de frecuencias acumulativas diferentes dependiendo de un índice de estado 298, el cual se obtiene observando los valores espectrales decodificados previamente calculados.
[0116]Cabe observar que el seguidor de estado 299 puede ser idéntico a, o puede tomar la funcionalidad del, seguidor de estado 826, el seguidor de estado 1126 o el seguidor de estado 1326. El selector de la tabla de frecuencias acumulativas 296 puede ser idéntico a, o puede tomar la funcionalidad del, selector de la regla de asignación 828, el selector de la regla de asignación 1128 o el selector de la regla de asignación 1328. El determinador del plano de bits más significativo 284 puede ser idéntico a, o puede tomar la funcionalidad del, determinador del valor espectral 824.
10. Panorama general de la herramienta para la codificación espectral sin ruido
[0117]En lo sucesivo, se explicarán los detalles con respecto al algoritmo de codificación y decodificación, el cual se efectúa, por ejemplo, por el codificador aritmético 170 y el decodificador aritmético 230.
[0118]Se colocó el foco sobre la descripción del algoritmo de decodificación. Cabe observar, sin embargo, que puede ser efectuado un algoritmo de codificación correspondiente según las enseñanzas del algoritmo de decodificación, donde las asignaciones entre los valores espectrales codificados y decodificados son inversas, y donde el cálculo del valor del índice de la regla de asignación es sustancialmente idéntico. En un codificador, los valores espectrales codificados toman el lugar de los valores espectrales decodificados. También, los valores espectrales que se van a codificar toman el lugar de los valores espectrales que se van a decodificar.
[0119]Cabe observar que la decodificación, la cual se discutirá en lo sucesivo, se usa para permitir la llamada "codificación espectral sin ruido" de valores espectrales típicamente postprocesados, escalados y cuantizados. La codificación espectral sin ruido se usa en un concepto de codificación/decodificación de audio (o en cualquier otro concepto de codificación/decodificación) para reducir aún más la redundancia del espectro cuantizado, el cual se obtiene, por ejemplo, por un transformador del dominio del tiempo al dominio de la frecuencia que compacta energía. El esquema de codificación espectral sin ruido, el cual se usa en realizaciones de la invención, se basa en una codificación aritmética en conjunto con un contexto adaptado dinámicamente.
[0120]En algunas realizaciones según la invención, el esquema de codificación espectral sin ruido se basa en 2-tuplas, es decir, que se combinan dos coeficientes espectrales vecinos. Cada 2-tupla se divide en el signo, el plano a lo largo de 2 bits más significativos y los planos de bits menos significativos restantes. La codificación sin ruido para el plano a lo largo de 2 bits más significativos m usa tablas de frecuencias acumulativas dependientes del contexto derivadas de cuatro 2-tuplas decodificadas previamente. La codificación sin ruido es alimentada, por ejemplo, por los valores espectrales y cuantizados y usa tablas de frecuencias acumulativas dependientes del contexto derivadas de cuatro 2-tuplas vecinas previamente decodificadas. Aquí, se toman en cuenta preferiblemente las vecinas tanto en el tiempo como en la frecuencia, como se ilustra en la Fig. 4. Las tablas de frecuencias acumulativas (las cuales se explicarán más adelante) se usan entonces por el codificador aritmético para generar un código binario de longitud variable (y por el decodificador aritmético para derivar los valores codificados un código binario de longitud variable).
[0121]Por ejemplo, el codificador aritmético 170 produce un código binario para un conjunto dado de símbolos y sus probabilidades respectivas (es decir, dependiendo de las probabilidades respectivas). El código binario se genera asignando un intervalo de probabilidad, donde el conjunto de símbolos se encuentra, a un código de palabra.
[0122]La codificación sin ruido para el plano de bits o plano de bits menos significativos restantes r usa, por ejemplo, una sola tabla de frecuencias acumulativas. Las frecuencias acumulativas corresponden, por ejemplo, a una distribución uniforme de los símbolos que ocurren en los planos de bits menos significativos, es decir, que se espera que exista la misma probabilidad de que ocurra un 0 o un 1 en los planos de bits menos significativos. Sin embargo, se pueden usar otras soluciones para la codificación del plano de bits menos significativos restantes.
[0123]En lo sucesivo, se dará otra descripción panorámica breve de la herramienta de la codificación espectral sin ruido. La codificación espectral sin ruido se usa para reducir aún más la redundancia del espectro cuantizado. El esquema de codificación espectral sin ruido se basa en una codificación aritmética, en conjunto con un contexto adaptado dinámicamente. La codificación sin ruido es alimentada por los valores espectrales cuantizados y usa tablas de frecuencias acumulativas dependientes del contexto derivadas de, por ejemplo, cuatro duplas vecinas previamente decodificadas de valores espectrales. Aquí, se toman en cuenta las vecinas tanto en el tiempo como en la frecuencia, como se ilustra en la Fig.4. Las tablas de frecuencias acumulativas son utilizadas entonces por el codificador aritmético para generar un código binario de longitud variable.
[0124]El codificador aritmético produce un código binario para un conjunto dado de símbolos y sus probabilidades respectivas. El código binario se genera trazando un intervalo de probabilidad, donde el conjunto de símbolos se encuentra, a un código de palabra.
11. Procedimiento de decodificación
11.1 Resumen del procedimiento de decodificación
[0125]En lo sucesivo, se dará un resumen del procedimiento de codificación de un valor espectral tomando como referencia la Fig.3, la cual muestra una representación de un pseudocódigo del programa del procedimiento de decodificación de una pluralidad de valores espectrales.
[0126]El procedimiento de decodificación de una pluralidad de valores espectrales comprende una inicialización 310 de un contexto. La inicialización 310 del contexto comprende una derivación del contexto actual de un contexto previo, usando la función "arith_map_context(N, arith_reset_flag)". La derivación del contexto actual de un contexto previo puede comprender selectivamente un reajuste del contexto. En tanto el reajuste del contexto y la derivación del contexto actual de un contexto previo serán discutidas más adelante. Preferiblemente, se puede usar la función "arith_map_context(N, arith_reset_flag)" según la Fig.5a, pero se puede usar alternativamente la función según la Fig.5b.
[0127]La decodificación de una pluralidad de valores espectrales también comprende una iteración de una decodificación del valor espectral 312 y una actualización de contexto 313, actualización de contexto 313 la cual se efectúa por la función "arith_update_context(i,a,b)" la cual se describe más adelante. La decodificación del valor espectral 312 y la actualización del contexto 312 se repiten Ig/2 veces, donde Ig/2 indica el número de duplas de valores espectrales que se van a decodificar (por ejemplo, para una trama de audio), a menos que se detecte el llamado símbolo de "ARITH_STOP". Además, la decodificación de un conjunto de Ig valores espectrales también comprende una decodificación de signos 314 y una etapa de finalización 315.
[0128]La decodificación 312 de una tupla de valores espectrales comprende un cálculo de valor del contexto 312a, una decodificación del plano de bits más significativos 312b, una detección del símbolo aritmético de alto 312c, una adición del plano de bits menos significativos 312d y una actualización de la matriz 312e.
[0129]El cálculo del valor del estado 312a comprende una llamada de la función "arith_get_context(c,i,N)" como se muestra, por ejemplo, en la Fig.5c o 5d. Preferiblemente, se usa la función "arith_get_context(c,i,N)" según la Fig. 5c. En consecuencia, un es proporcionado un valor (estado) del contexto numérico actual c como valor de retorno de la llamada de la función "arith_get_context(c,i,N)". Como se puede observar, el valor del contexto numérico previo (también designado como "c"), el cual sirve como una variable de entrada a la función "arith_get_context(c,i,N)", se actualiza para obtener, como un valor de retorno, el valor del contexto numérico actual c.
[0130]La decodificación del plano de bits más significativa 312b comprende una ejecución iterativa de un algoritmo de decodificación 312ba y una derivación 312bb de valores a, b del valor del resultado m del algoritmo 312ba. En preparación del algoritmo 312ba, la variable lev se inicializa a cero. Se repite el algoritmo 312ba, hasta que se alcance una instrucción (o condición) de "interrupción". El algoritmo 312ba comprende un cálculo de un índice de estado "pki" (el cual también sirve como un índice de tabla de frecuencias acumulativas) dependiendo del valor del contexto numérico actual c y también depende del valor del nivel "esc_nb" usando una función "arith_get_pk()", la cual se discute más adelante (y realizaciones de la cual se muestran, por ejemplo, en las Figs.5e y 5f). Preferiblemente, se usa la función "arith_get_pk(c)" según la Fig.5e. El algoritmo 312ba también comprende la selección de una tabla de frecuencias acumulativas dependiendo del índice de estado "pki", que sea regresado por la llamada de la función "arith_get_pk", donde una variable "cum_freq" ser ajustada a una dirección de inicio una de 64 tablas (o subtablas) de frecuencias acumulativas dependiendo del índice de estado "pki". La variable "cfl" también se puede inicializar a una longitud de la tabla (o una subtabla) de frecuencias acumulativas seleccionada, la cual es, por ejemplo, igual a un número de símbolos en el alfabeto, es decir, el número de diferentes valores que pueden ser decodificados. La longitud de todas las tablas (o subtablas) de frecuencias acumulativas de "ari_cf_m[pki=0][17]" a "ari_cf_m[pki=63][17]" disponibles para la decodificación del valor de plano de bits más significativos m es 17, puesto que pueden ser decodificados 16 valores de plano de bits más significativos diferentes y un símbolo de escape ("ARITH_ESCAPE"). Preferiblemente, la tabla de frecuencias acumulativas ari_cf_m[64][17], como se define en la representación en tabla según las Figs.
23(1), 23(2), 23(3), la cual define las tablas (o subtablas) de frecuencias acumulativas "ari_cf_m[pki=0][17]" a "ari_cf_m[pki=63][17]", se evalúa, para obtener la tabla (o subtabla) de frecuencias acumulativas.
[0131]Posteriormente, se puede obtener un valor del plano de bits más significativa m ejecutando una función "arith_decode()", tomando en consideración la tabla de frecuencias acumulativas seleccionada (descrita por la variable "cum_freq" y la variable "cfl"). Cuando se derive el valor del plano de bits más significativos m, los bits llamados "acod_m" del flujo de bits 210 se pueden evaluar (véase, por ejemplo, la Fig.6g o la Fig.6h). Preferiblemente, se usa la función "arith_decode(cum_freq,cfl)" según la Fig.5g, pero de manera alternativa se puede usar la función "arith_decode(cum_freq,cfl)" según las Figs.5h y 5i.
[0132]El algoritmo 312ba también comprende la verificación de si el valor del plano de bits más significativos m es igual a un símbolo de escape "ARITH_ESCAPE", o no. Si el valor del plano de bits más significativos m no es igual al símbolo de escape aritmético, el algoritmo 312ba es abortado (condición de "interrupción") y las instrucciones restantes del algoritmo 312ba se omiten entonces. En consecuencia, la ejecución del procedimiento continua y el ajuste del valor b y del valor a en la etapa 312bb. En contraste, si el valor del plano de bits más significativo decodificado m es idéntico al símbolo de escape aritmético, o "ARITH_ESCAPE", el valor del nivel "lev" se incrementa en uno. El valor del nivel "esc_nb" se ajusta igual al valor de nivel "lev", a menos que "lev" variable sea mayor de siete, caso en el cual el "esc_nb" variable se ajuste igual a siete. Como se mencionó, el algoritmo 312ba se repite entonces hasta que el valor del plano de bits más significativo decodificado m sea diferente del símbolo de escape aritmético, donde se usa un contexto modificado (debido a que el parámetro de la función "arith_get_pk()" se adapta dependiendo del valor de la variable "esc_nb").
[0133]En cuanto se decodifica el plano bit más significativos se decodificausando una ejecución temporal o ejecución iterativo del algoritmo 312ba, es decir, que un valor del plano de bits más significativos m diferente del símbolo de escape aritmético ha sido decodificado, el valor espectral variable "b" se ajusta igual a una pluralidad de (por ejemplo 2) bits más significativos del valor del plano de bits más significativos m, y el valor espectral variable "a" se ajusta a los bits más bajos (por ejemplo 2) del valor del plano de bits más significativo m. Los detalles con respecto a esta funcionalidad pueden ser observados, por ejemplo, en la referencia numérica 312bb.
[0134]Posteriormente, se verifica en la etapa 312c, si está presente un símbolo de interrupción aritmético. Este es el caso si el valor del plano de bits más significativos m es igual a cero y la variable "lev" es mayor de cero. En consecuencia, se señala una condición de interrupción aritmética por una condición "inusual", en la cual el valor del plano de bits más significativos m es igual a cero, mientras que la variable "lev" indica que está asociado un peso numérico incrementado con el valor del plano de bits más significativos m. En otras palabras, se detecta una condición de interrupción aritmética si el flujo de bits indica que deberá darse un peso numérico incrementado, mayor que un peso numérico mínimo, a un valor del plano de bits más significativos que es igual a cero, condición la cual no ocurre en una situación de codificación normal. En otras palabras, se señala una condición de interrupción aritmética si un símbolo de escape aritmético codificado es seguido por un valor del plano de bits más significativo codificado de 0.
[0135]Después de la evaluación de si existe una condición de interrupción aritmética, la cual se efectúa en la etapa 212c, se obtienen los planos de bits menos significativos, por ejemplo, como se muestra en el número de referencia 212d en la Fig.3. Por cada plano de bits menos significativos, se decodifican dos valores binarios. Uno de los valores binarios está asociado con la variable a (o el primer valor espectral de una tupla de valores espectrales) y uno de los valores binarios está asociado con la variable b (o un segundo valor espectral de una tupla de valores espectrales). Un número de planos de bits menos significativos se designa por la variable lev.
[0136]En la decodificación de uno o más planos de bits menos significativos (si los hay) se ejecuta iterativamente un algoritmo 212da, donde un número de ejecuciones del algoritmo 212da se determina por la variable "lev". Cabe observar aquí que la primera iteración del algoritmo 212da se efectúa sobre la base de los valores de las variables a, b, como en la etapa 212bb. Las iteraciones adicionales del algoritmo 212da se efectúan sobre la base de valores de variables actualizados de las variables a, b.
[0137]Al inicio de una iteración, se selecciona una tabla de frecuencias acumulativas. Posteriormente, se efectúa decodificación aritmética para obtener un valor de una variable r, donde el valor de la variable r designa una pluralidad de bits menos significativos, por ejemplo, un bit menos significativo asociado con la variable a y bit menos significativo asociado con la variable b. La función "ARITH_DECODE" (por ejemplo, como se define en la Fig.5g) se usa para obtener el valor r, donde la tabla de frecuencias acumulativas "arith_cf_r" se usa para la decodificación aritmética.
[0138]Posteriormente, se actualizan los valores de las variables a y b se actualizan. Para este propósito, la variable a se desplaza hacia la izquierda en un bit, y el bit menos significativo de la variable desplazada a se ajusta al valor definido por el bit menos significativo del valor r. La variable b se desplaza a la izquierda un bit, y el bit menos significativo de la variable desplazada b se ajusta al valor definido por el bit 1 de la variable r, donde el bit 1 de la variable r tiene un peso numérico de 2 en la representación binaria de la variable r. Entonces se repite el algoritmo 412ba hasta que todos los bits menos significativos se decodifiquen.
[0139]Después de la decodificación de los planos de bits menos significativos, se actualiza una matriz "x_ac_dec" en que los valores de las variables a, b se almacenan en entradas de la matriz que tienen índices de matriz 2*i y 2*i+1.
[0140]Posteriormente, se actualiza el estado del contexto llamando la función "arith_update_context(i,a,b)", los detalles de la cual se explicarán más adelante tomando como referencia la Fig.5g. Preferiblemente, se puede usar la función "arith_update_context(i,a,b)", como se define en la Fig.5l.
[0141]Después de la actualización del estado del contexto, la cual se efectúa en la etapa 313, los algoritmos 312 y 313 se repiten, hasta que la variable de ejecución alcanza el valor de Ig/2 o se detecta una condición de interrupción aritmética.
[0142]Posteriormente, se efectúa un quinto algoritmo "arith_finish()", como debe ser observado en el número de referencia 315. Los detalles del algoritmo de finalización "arith_finish()" se describirán más adelante, tomando como referencia la Fig.5m.
[0143]Después del algoritmo de finalización 315, los signos de los valores espectrales se decodifican usando el algoritmo 314. Como se puede observar, los signos de los valores espectrales los cuales son diferentes de cero se identifican individualmente. En el algoritmo 314, se leen los signos de todos los valores espectrales que tengan índices i entre i=0 e i=Ig-1, que sean diferentes de cero. Por cada valor espectral diferente de cero que tenga un índice de valor espectral i entre i = 0 y i = Ig-1, se lee un valor s (típicamente un solo bits), del flujo de bits. Si el valor de s, que sea leído del flujo de bits es igual a 1, el signo del valor espectral es invertido. Para este propósito, se da acceso a la matriz “x_ac_dec”, para determinar si el valor espectral que tiene el índice i es igual a cero y para actualizar el signo de los valores espectrales decodificados. Sin embargo, cabe observar que los signos de los valores a, b se dejan sin cambio en la decodificación del signo 314.
[0144]Efectuando el algoritmo de finalización 315 antes de la decodificación de los signos 314, es posible reajustar todas las bandejas necesarias después de un símbolo ARITH_STOP.
[0145]Cabe observar aquí que el concepto para obtener los valores de los planos de bits menos significativos no es de relevancia particular en algunas realizaciones según la presente invención. En algunas realizaciones, la decodificación de cualquier plano de bits menos significativos se puede omitir aún. De manera alternativa, se pueden usar diferentes algoritmos de decodificación para este propósito.
11.2 Orden de decodificación según la Fig.4
[0146]En lo sucesivo, se describirá el orden de decodificación de los valores espectrales.
[0147]Los coeficientes espectrales cuantizados "x_ac_dec[]" se codifican de manera no ruidosa y transmitidos (por ejemplo, en el flujo de bits) partiendo del coeficiente de menor frecuencia y progresando hacia el coeficiente de mayor frecuencia.
[0148]En consecuencia, los coeficientes espectrales cuantizados "x_ac_ec[]" se decodifican de manera no ruidosa partiendo del coeficiente de frecuencia más baja y progresando hacia el coeficiente de frecuencia más alta. Los coeficientes espectrales cuantizados se decodifican por grupos de dos coeficientes sucesivos (por ejemplo, adyacentes en frecuencia) a y b reunidos en una llamada dupla (a,b) (también designada con {a,b}). Cabe observar aquí que los coeficientes espectrales cuantizados se designan también algunas veces con "qdec".
[0149]Los coeficientes decodificados "x_ac_dec[]" para un modo en el dominio de la frecuencia (por ejemplo, los coeficientes decodificados para una codificación audio avanzada, por ejemplo, obtenidos usando una transformación cosinusoidal discreta modificada, como se describe en el ISO/IEC 14496, parte 3, subparte 4) se almacenan entonces en una matriz "x_ac_quant[g][win][sfb][bin]". El orden de transformación de las palabras de código de codificación sin ruido es tal que cuando ellas se decodifican en el orden recibo y almacenadas en la matriz, la “bin” es el índice que se incrementa más rápidamente, y "g" es el índice que se incrementa más lentamente. Dentro de un código de palabra, el orden de decodificación es a, b (es decir, a y entonces b).
[0150]Los coeficientes decodificados "x_ac_dec[]" para la excitación codificada por transformación (Transform Coded-Excitation, TCX) se almacenan, por ejemplo, directamente en una matriz "x_tcx_invquant[win][bin]" y la matriz de la transmisión del código de palabra de codificación sin ruido es tal que cuando se decodifican en el orden recibido se almacenen en la matriz, "bin" es el índice que se incrementa más rápidamente, y "win" es el índice de incrementa más lentamente. Dentro de un código de palabra, del orden de decodificación es a, b (es decir, a y entonces b). En otras palabras, si los valores espectrales describen una excitación codificada por transformación de un filtro de predicción lineal de un codificador de voz, los valores espectrales a, b son asociados con frecuencias adyacentes y crecientes de la excitación codificada por transformación. Los coeficientes espectrales asociados con una frecuencia más baja se codifican y decodifican de forma característica antes de un coeficiente espectral asociado con una frecuencia más alta.
[0151]De manera notable, el decodificador de audio 200 se puede configurar para aplicar la representación en el dominio de la frecuencia decodificada 232, la cual es proporcionada por el decodificador aritmético 230, tanto para una generación "directa" de una representación de una señal de audio en el dominio del tiempo usando un transformador de señales del dominio de la frecuencia al dominio del tiempo como para una provisión "indirecta" de una representación de una señal de audio en dominio del tiempo usando tanto un decodificador del dominio de la frecuencia al dominio del tiempo y un filtro de predicción lineal excitado por la salida del transformador de señales del dominio de la frecuencia al dominio del tiempo.
[0152]En otras palabras, el decodificador aritmético, cuya funcionalidad se discute aquí con detalle, es muy adecuada para decodificar valores espectrales de una representación en el dominio del tiempo - frecuencia un contenido de audio codificado en el dominio de la frecuencia, y para la provisión de una representación del dominio del tiempo - frecuencia de una señal de estímulo para un filtro de predicción lineal adaptado para decodificar (o sintetizar) un señal de voz codificada en el dominio de predicción lineal. De este modo, el decodificador aritmético es muy adecuado para usarse en un decodificador de audio que sea capaz de manejar tanto contenido de audio codificado en el dominio de la frecuencia como contenido de audio codificado en el dominio de la frecuencia predictiva lineal (modo del dominio de predicción lineal de excitación codificada por transformación).
11.3 Inicialización del contexto según las Figs.5a y 5b
[0153]En lo sucesivo, se describirá la inicialización del contexto (también designada como una "asignación de contexto"), que se efectúa en la etapa 310.
[0154]La inicialización del contexto comprende una asignación entre un contexto pasado y un contexto actual según el algoritmo "arith_map_context()", un primer ejemplo del cual se muestra en la Fig.5a y un segundo ejemplo del cual se muestra en la Fig.5b.
[0155]Como se puede observar, el contexto actual se almacena en una variable global "q[2][n_contexf]", la cual toma la forma de una matriz que tiene una primera dimensión de 2 y una segunda dimensión de "n_context". Un contexto pasado puede ser opcionalmente (pero no necesariamente) almacenado en una variable "qs[n_context]" la cual toma la forma de una tabla que tiene una dimensión de "n_context" (si se usa).
[0156]Haciendo referencia al algoritmo ejemplar "arith_map_context" en la Fig.5a, la variable N describe una longitud de una ventana actual y la variable de entrada "arith_reset_flag" indica si el contexto se deberá reajustar. Además, la variable global "previous_N" describe la longitud de una ventana previa. Cabe observar aquí que típicamente un número de valores espectrales asociados con una ventana es, al menos aproximadamente, igual a la mitad de la longitud de la ventana en términos de las muestras en el dominio del tiempo. Además, cabe observar que un número de duplas de valores espectrales es, en consecuencia, al menos aproximadamente igual a un cuarto de la longitud de la ventana en términos de las muestras en el dominio de tiempo.
[0157]Primero, cabe observar que el indicador "arith_reset_flag" determina si el contexto se debe reajustar.
[0158]Tomando como referencia el ejemplo de la Fig.5a, se puede efectuar la asignación del contexto según el algoritmo "arith_map_context()". Cabe observar aquí que la función "arith_map_context()" ajusta las entradas "q[0][j]" de la matriz del contexto actual q a cero para j=0 a j=N/4-1, si el indicador "arith_reset_flag" está activo y en consecuencia indica que el contexto se deberá reajustar. De otro modo, si el indicador "arith_reset_flag" está inactivo, las entradas "q[0][j]" de la matriz del contexto actual q se derivan de las entradas "q[1][k]" de la matriz del contexto actual q. cabe observar que la función "arith_map_context()" según la Fig.5a ajusta las entradas "q[0][j]" de la matriz del contexto actual q a los valores "q[1][k]" de la matriz del contexto actual q, si el número de valores espectrales asociados con la trama de audio actual (por ejemplo, codificada en el dominio de la frecuencia) marco es idéntica al número de valores espectrales asociados con la trama de audio previa para j=k=0 a j=k=N/4-1.
[0159]Se efectúa una asignación más complicada si el número de valores espectrales asociados con la trama de audio actual es diferente del número de valores espectrales asociados con la trama de audio previa. Sin embargo, los detalles con respecto a esta asignación en este caso no son particularmente relevantes para la idea clave de la presente invención, de modo que se hace referencia al pseudocódigo de programa de la Fig.5a para los detalles.
[0160]Además, se retorna un valor de inicialización para el valor del contexto numérico de actual por la función "arith_map_context()". Este valor de inicialización es, por ejemplo, igual al valor de la entrada "q[0][0]" desplazada hacia la izquierda 12 bits. En consecuencia, el valor del contexto numérico (actual) c se inicializa apropiadamente para una actualización iterativa.
[0161]Además, la Fig.5b muestra otro ejemplo de un algoritmo "arith_map_context()" el cual se puede usar de manera alternativa. Para los detalles, se hace referencia al pseudocódigo del programa de la Fig.5b.
[0162]Para resumir lo anterior, el indicador "arith_reset_flag" determina si el contexto se debe ajustar. Si el indicador es verdadero, se recupera un subalgoritmo de reajuste 500a del algoritmo "arith_map_context()". De manera alternativa, si el indicador "arith_reset_flag" está inactivo (lo cual indica que no se deberá efectuar el reajuste del contexto), el procedimiento de decodificación comienza con una fase de inicialización donde el vector (o matriz) del elemento del contexto q se actualiza copiando y asignando los elementos del contexto de la trama previa asignada en q[1][] a q[0][]. Los elementos del contexto dentro de q se almacenan en 4 bits por dupla. El copiado y/o trazo del elemento del contexto se efectúan, por ejemplo, en un subalgoritmo 500b.
[0163]Además, cabe observar que, si el contexto no se puede determinar fácilmente, por ejemplo, si los datos de la trama previa no están disponibles, y si el "arith_reset_flag" no se ajustó, entonces la decodificación de los datos espectrales no puede continuar y la lectura del elemento "arith_data()" actual deberá omitirse.
[0164]En el ejemplo de la Fig.5b, el procedimiento de decodificación comienza con una fase de inicialización donde se efectúa una asignación entre contexto anterior recuperado y almacenado en qs y contexto de la trama actual q. El contexto basado en qs se almacena en 2 bits por línea de frecuencia.
11.4 Cálculo del valor de estado según las Figs.5c y 5d
[0165]En lo sucesivo, se describirá con mayor detalle el cálculo del valor de estado 312a.
[0166]Será descrito un primer algoritmo preferido tomando como referencia la Fig. 5c y se describirá un segundo algoritmo ejemplar alternativo tomando como referencia la Fig.5d.
[0167]Cabe observar que el valor del contexto numérico actual c (como se muestra en la Fig.3) se puede obtener como un valor de retorno de la función "arith_get_context(c,i,N)", una representación de pseudocódigo de programa de la cual se muestra en la Fig. 5c. De manera alternativa, sin embargo, el valor del contexto numérico actual c se puede obtener como un valor de retorno de la función "arith_get_context(c,i)", una representación de pseudocódigo de programa de la cual se muestra en la Fig.5d.
[0168]Con respecto al cálculo del valor de estado, también se hace referencia a la Fig.4, la cual muestra el contexto usado para una evaluación del estado, es decir, para el cálculo de un valor del contexto numérico actual c. La Fig.4 muestra una representación bidimensional de valores espectrales, tanto sobre el tiempo como sobre la frecuencia. Las abscisas 410 describen el tiempo, y las ordenadas 412 describen la frecuencia. Como se puede observar en la Fig.4, una tupla 420 de valores espectrales a decodificar (preferiblemente utilizando el valor del contexto numérico actual), está asociada con un índice del tiempo t0 y un índice de frecuencia i. Como se puede observar, para el índice de tiempo t0, las tuplas que tienen los índices de frecuencia i-1, i-2 y i-3 son fácilmente decodificadas en el momento en el cual los valores espectrales de la tupla 120, que tienen el índice de frecuencia i, que se van a decodificar. Como se puede observar de la Fig. 4, un valor espectral 430 que tiene un índice de tiempo t0 y un índice de frecuencia i-1 se decodifica fácilmente antes de que la tupla 420 de valores espectrales se decodifique y la tupla 430 de valores espectrales se tenga en cuenta para el contexto que se utilice para la decodificación de la tupla 420 de valores espectrales. Manera similar, una tupla 440 de valores espectrales que tengan un índice de tiempo t0-1 y un índice de frecuencia de i-1, una tupla 450 de valores espectrales que tengan un índice de tiempo t0-1 y un índice de frecuencia de i, y una tupla 460 de valores espectrales que tengan un índice de tiempo t0-1 y un índice de frecuencia de i+1, son fácilmente decodificadas antes de que la tupla 420 de valores espectrales se decodifique, y se tienen en cuenta para la determinación del contexto, el cual se usa para la decodificación de la tupla 420 de valores espectrales. Los valores (coeficientes) espectrales ya decodificados en el momento cuando los valores espectrales de la tupla 420 se decodifican y considerados para el contexto se muestran por un cuadro sombreado. En contraste, algunos otros valores espectrales ya decodificados (en el momento cuando los valores espectrales de la tupla 420 se decodifican) pero no considerados para el contexto (para la decodificación de los valores espectrales de la tupla 420) son representados por cuadros que tienen líneas punteadas, y otros valores espectrales (los cuales aún no se decodifican en el momento cuando los valores espectrales de la tupla 420 se decodifican) se muestran por círculos que tienen líneas punteadas. Las tuplas representadas por cuadrados que tienen líneas punteadas y las tuplas representadas por círculos que tienen líneas punteadas no se utilizan para determinar el contexto para la decodificación de los valores espectrales de la tupla 420.
[0169]Sin embargo, cabe observar que algunos de estos valores espectrales, los cuales no se utilizan para el cálculo "regular" o "normal" del contexto para la decodificación de los valores espectrales de la tupla 420 pueden, no obstante, ser evaluados para la detección de una pluralidad de valores espectrales adyacentes previamente decodificados que satisfacen, individualmente o tomados juntos, una condición predeterminada con respecto a sus magnitudes. Los detalles con respecto a este aspecto se discutirán más adelante.
[0170]Tomando como referencia ahora la Fig. 5c, se describirán los detalles del algoritmo "arith_get_context(c,i,N)". La Fig.5c muestra la funcionalidad de la función "arith_get_context(c,i,N)" en forma de pseudocódigo de programa, la cual usa las convenciones del lenguaje C y/o lenguaje C++ bien conocidos. De este modo, algunos o más detalles con respecto al cálculo del valor del contexto numérico actual "c" el cual se efectúa por la función "arith_get_context(c,i,N)" se describirán.
[0171]Cabe observar que la función "arith_get_context(c,i,N)" recibe, como variables de entrada, un "contexto de estado viejo", el cual puede ser descrito por un valor del contexto numérico previo c. La función "arith_get_context(c,i,N)" también recibe, como una variable de entrada, un índice i de una dupla de valores espectrales a decodificar.
El índice i es típicamente un índice de frecuencia. Una variable de entrada N describe una longitud de ventana de una ventana, para la cual se decodifican los valores espectrales.
[0172]La función "arith_get_context(c,i,N)" proporciona, como un valor de salida, una versión actualizada de la variable de entrada c , la cual describe un contexto de estado actualizado, y que se puede considerar como un valor del contexto numérico actual. Para resumir, la función "arith_get_context(c,i,N)" recibe un valor del contexto numérico previo c como una variable de entrada y proporciona una versión actualizada, del mismo, el cual se considera como un valor del contexto numérico actual. Además, la función "arith_get_context" considera las variables i, N y también el acceso a la matriz "global" q[][].
[0173]Con respecto a los detalles de la función "arith_get_context(c,i,N)", cabe observar que la variable c, la cual inicialmente representa el valor del contexto numérico previo en una forma binaria, se desplaza a la derecha en 4 bits en una etapa 504a. En consecuencia, los cuatro bits menos significativos del valor del contexto numérico previo (representado por la variable de entrada c) se desechan. También, los pesos numéricos de los otros bits de los valores del contexto numérico previo se reducen, por ejemplo, en un factor de 16.
[0174]Además, si el índice i de la dupla es menor de N/4-1, es decir, que no toma un valor máximo, el valor del contexto numérico actual es modificado dado que el valor de la entrada q[0][i+1] se sumado a los bits 12 a 15 (es decir, a los bits que tienen un peso numérico de 2<12>, 2<13>, 2<14>y 2<15>) el valor del contexto desplazado se obtuvo en la etapa 504a. Para este propósito, la entrada q[0][i+1] de la matriz q[][] (o, de manera más precisa, una representación binaria del valor representado por la entrada) se desplaza hacia la izquierda 12 bits. La versión desplazada del valor representado por la entrada q[0][i+1] se suma entonces al valor del contexto c, el cual se deriva en la etapa 504a, es decir, a una representación numérica desplazada de los bits (desplazada a la derecha 4 bits) del valor del contexto numérico previo. Cabe observar aquí que la entrada q[0][i+1] representa un valor de subregión asociada con una porción previa del contenido de audio (por ejemplo, una porción del contenido de audio que teniendo el índice de tiempo t0-1, según lo definido con referencia a la Fig.4) y con una frecuencia mayor (por ejemplo una frecuencia que tiene el índice de frecuencia i 1 según lo definido con referencia a la Fig.4) que la tupla de valores espectrales que se van a decodificar actualmente (usando el valor del contexto numérico actual c producido por la función "arith_get_context(c,i,N)"). En otras palabras, si la tupla 420 de valores espectrales se va a decodificar usando el valor del contexto numérico actual, la entrada q[0][i+1] puede basarse en la tupla 460 de valores espectrales previamente decodificados.
[0175]La adición selectiva de la entrada q[0][i+1] de la matriz q[][] (desplazada hacia la izquierda 12 bits) se muestra en la referencia numérica 504b. Como se puede observar, la adición del valor representado por la entrada q[0][i+1] se efectúa naturalmente solo si el índice de frecuencia i no designa una tupla de valores espectrales que tengan el índice de frecuencia más alto i=N/4-1.
[0176]Posteriormente, en una etapa 504c, se efectúa una operación AND booleana, en la cual el valor de la variable c es AND combinado con un valor hexadecimal de 0xFFF0 para obtener un valor actualizado de la variable c. Efectuando esa operación de AND, los cuatro bits menos significativos de la variable c son efectivamente ajustados a cero.
[0177]En una etapa 504d, el valor de la entrada q[1][i-1] se suma al valor de la variable c, la cual se obtiene en la etapa 504c, para actualizar por lo tanto el valor de la variable c. Sin embargo, la actualización de la variable c en la etapa 504d se efectúa únicamente si el índice de frecuencia i de la 2-dupla a decodificar es mayor que cero. Cabe observar que la entrada q[1][i-1] es un valor de la subregión del contexto basado en una tupla de valores espectrales previamente decodificados de la porción actual del contenido de audio para frecuencias menores que las frecuencias de los valores espectrales que se van a decodificar usando el valor del contexto numérico actual. Por ejemplo, la entrada q[1][i-1] de la matriz q[][] se puede asociar con la tupla 430 que tiene el índice de tiempo t0 y el índice de frecuencia i-1, si se asume que la tupla 420 de valores espectrales se va a decodificar usando el valor del contexto numérico actual retornado por la presente ejecución de la función "arith_get_context(c,i,N)".
[0178]Para resumir, los bits 0, 1, 2 y 3 (es decir, una porción de los cuatro bits menos significativos) del valor del contexto numérico previo se desechan en la etapa 504a desplazándolos hacia fuera de la representación numérica binaria del valor del contexto numérico previo. Además, los bits 12, 13, 14 y 15 de la variable desplazada c (es decir, el valor del contexto numérico previo desplazado) se ajustan para tomar los valores definidos por el valor de la subregión del contexto q[0][i+1] en la etapa 504b. Los bits 0, 1, 2 y 3 del valor contexto numérico previo desplazado (es decir, los bits 4, 5, 6 y 7 del valor del contexto numérico previo original) se sobrescriben por el valor de la subregión del contexto [1][i-1] en las etapas 504c y 504d.
[0179]En consecuencia, puede decirse que los bits 0 a 3 del valor del contexto numérico previo representan el valor de la subregión de contexto asociada con la tupla 432 de valores espectrales, los bits 4 a 7 del valor del contexto numérico previo representan el valor de la subregión del contexto asociado con una tupla 434 de valores espectrales previamente decodificados, los bits 8 a 11 del valor del contexto numérico previo representan el valor de la subregión del contexto asociado con la tupla 440 de valores espectrales previamente decodificados y los bits 12 a 15 del valor del contexto numérico previo representan un valor de la subregión del contexto asociado con la tupla 450 de los valores espectrales previamente decodificado. El valor del contexto numérico previo, el cual alimentado a la función "arith_get_context(c,i,N)", está asociado con la decodificación de la tupla 430 de valores espectrales.
[0180]El valor del contexto numérico actual, el cual se obtiene como una variable de salida de la función "arith_get_context(c,i,N)", está asociado con una decodificación de la tupla 420 de valores espectrales. En consecuencia, los bits 0 a 3 de los valores del contexto numérico actual describen el valor de la subregión del contexto asociado con la tupla 430 de los valores espectrales, los bits 4 a 7 del valor del contexto numérico actual describen el valor de la subregión del contexto asociado con la tupla 440 de los valores espectrales, los bits 8 a 11 del valor del contexto numérico actual describen el valor de la subregión numérica asociada con la tupla 450 de valores espectrales y los bits 12 a 15 del valor del contexto numérico actual describen el valor de la subregión del contexto asociado con la tupla 460 de valores espectrales. De este modo, se puede observar que una porción del valor del contexto numérico previo, es decir, los bits 8 al 15 del valor del contexto numérico previo, también es incluido en el valor del contexto numérico actual, como los bits 4 a 11 del valor del contexto numérico actual. En contraste, los bits 0 a 7 del valor del contexto numérico previo se desechan cuando se deriva la representación numérica del valor del contexto numérico actual de la representación numérica del valor del contexto numérico previo.
[0181]En una etapa 504e, la variable c que representa el valor del contexto numérico actual se actualiza selectivamente si el índice de frecuencia de la dupla a decodificar es mayor que un número predeterminado de, por ejemplo, 3. En este caso, es decir, si i es más grande de 3, se determina si la suma de los valores de la subregión del contexto q[1][i-3], [1][i-2], y q [1][i-1] es menor que (o igual a) un valor predeterminado de, por ejemplo 5. Si se encuentra que la suma de los valores de la subregión del contexto es menor que el valor predeterminado, se suma un valor hexadecimal, de, por ejemplo, 0x10000, a la variable c. En consecuencia, la variable c se ajusta de modo que la variable c indique si existe una condición en la cual los valores de la subregión del contexto q[1][i-3], q[1][i-2] y q[1][i-l] comprenden un valor se suma particularmente pequeño. Por ejemplo, el bit 16 del valor del contexto numérico actual puede actuar como un indicador para indicar esa condición.
[0182]Para concluir, el valor de retorno de la función "arith_get_context(c,i,N)" se determina por las etapas 504a, 504b, 504c, 504d y 504e, donde el valor del contexto numérico actual se deriva del valor del contexto numérico previo en las etapas 504a, 504b, 504c y 504d, y donde un indicador que indica un ambiente de valores espectrales previamente decodificados que tienen, en promedio, valores absolutos particularmente pequeños, se deriva en la etapa 504e y sumado a la variable c. En consecuencia, el valor de la variable c obtenida en las etapas 504a, 504b, 504c, 504d se retorna, en una etapa 504f, como un valor de retorno de la función "arith_get_context(c,i,N)", si la condición evaluada en la etapa 504e no se cumple. En contraste, el valor de la variable c, el cual se deriva en las etapas 504a, 504b, 504c y 504d, se incrementa en el valor hexadecimal de 0x10000 y el resultado de esta operación creciente se retorna, en la etapa 504e, si se cumple la condición evaluada en la etapa 540e.
[0183]Para resumir lo anterior, cabe observar que el decodificador sin ruido produce duplas de coeficientes espectrales cuantizados no firmados (como se describirá con mayor detalle más adelante). En el primer estado c del contexto se calcula sobre la base de los coeficientes espectrales previamente decodificados "que rodean" la dupla que se va a decodificar. En una realización preferida, el estado (el cual es, por ejemplo, representado por un valor del contexto numérico c) se actualiza de manera creciente usando el estado del contexto de las últimas duplas decodificadas (el cual se designa como un valor del contexto numérico previo), considerando únicamente dos nuevas duplas (por ejemplo, las duplas 430 y 460). El estado se codifica sobre 17 bits (por ejemplo, usando una representación numérica de un valor del contexto numérico actual) y se retorna por la función "arith_get_context()". Para los detalles, se hace referencia a la representación de código de programa de la Fig.5c.
[0184]Además, cabe observar que un pseudocódigo de programa de una realización alternativa de una función "arith_get_context()" se muestra en la Fig.5d. La función "arith_get_context(c,i)" según la Fig.5d es similar a la función "arith_get_context(c,i,N)" según la Fig.5c. Sin embargo, la función "arith_get_context(c,i)" según la Fig.5d no comprende un manejo o decodificación especial de tuplas de valores espectrales comprendiendo un índice de frecuencia mínimo de i=0 o un índice de frecuencia máximo de i=N/4-1.
11.5 Selección de regla de asignación
[0185]En lo sucesivo, se describirá la selección de una regla de asignación, por ejemplo, una tabla de frecuencias acumulativas el cual describe una asignación de un valor de código de palabra en un código de símbolo. La selección de la regla de asignación se efectúa dependiendo de un estado de contexto, el cual se describe por el valor del contexto numérico actual c.
11.5.1 Selección de la regla de asignación usando el algoritmo según la Fig.5e
[0186]En lo sucesivo se describirá, la selección de una regla de asignación usando la función "arith_get_pk(c)".
Cabe observar que la función "arith_get_pk()" se llama o recuperada al inicio del subalgoritmo 312ba cuando se decodifique un valor de código "acod_m" para proporcionar una tupla de valores espectrales. Cabe observar que la función "arith_get_pk(c)" se llama con diferentes argumentos en diferentes iteraciones del algoritmo 312b. Por ejemplo, en una primera iteración del algoritmo 312b, la función "arith_get_pk(c)" se llama o recuperada con un argumento el cual es igual al valor del contexto numérico actual c, proporcionado por la ejecución previa de la función "arith_get_context(c,i,N)" en la etapa 312a. En contraste, en iteraciones adicionales del subalgoritmo 312ba, la función "arith_get_pk(c)" se llama con un argumento el cual es la suma del valor del contexto numérico actual c proporcionado por la función "arith_get_context(c,i,N)" en la etapa 312a, y una versión desplazada en bits del valor de la variable "esc_nb", donde el valor de la variable "esc_nb" está desplazado hacia la izquierda 17 bits. De este modo, el valor del contexto numérico actual c proporcionado por la función "arith_get_context(c,i,N)" se usa como un valor de entrada de la función "arith_get_pk()" en la primera iteración del algoritmo 312ba, es decir, en la decodificación de valores espectrales comparativamente pequeños. En contraste, cuando se decodifican valores espectrales comparativamente más grandes, la variable de entrada de la función "arith_get_pk()" es modificada dado que el valor de la variable "esc_nb", es tomada en consideración, como se muestra en la Fig.3.
[0187]Tomando como referencia ahora la Fig. 5e, la cual muestra una representación de pseudocódigo de programa de una primera realización preferida de la función "arith_get_pk(c)", cabe observar que la función "arith_get_pk()" recibe la variable c como un valor de entrada, donde la variable c describe el estado del contexto, y donde la variable de entrada c de la función "arith_get_pk()" es igual al valor del contexto numérico actual proporcionado como una variable de retorno por la función "arith_get_context()" en al menos algunas situaciones. Además, cabe observar que la función "arith_get_pk()" proporciona, como una variable de salida, la variable "pki", la cual describe un índice de un modelo de probabilidad y que se puede considerar como un valor del índice de regla de asignación.
[0188]Tomando como referencia la Fig.5e, se puede observar que la función "arith_get_pk()" comprende una inicialización de la variable 506a, donde la variable "i_min" se inicializa para tomar el valor de -1. De manera similar, la variable i se ajusta para ser igual a la variable "i_min", de modo que la variable i también se inicialice a un valor de -1. La variable "i_max" se inicializa para tomar un valor el cual sea más pequeño, en 1, que el número de entradas de la tabla "ari_lookup_m[]" (los detalles de la cual se describirán tomando como referencia la Fig.21). En consecuencia, las variables "i_min" y "i_max" definen un intervalo. Por ejemplo, i_max se puede inicializar al valor 741.
[0189]Posteriormente, se efectúa una búsqueda 506b para identificar un valor de índice que designe una entrada de la tabla "ari_hash_m", la cual es elegida según lo definido en la representación de las Figs.22(1), 22(2), 22(3), 22(4), de modo que el valor de la variable de entrada c de la función "arith_get_pk()" se encuentre dentro de un intervalo definido por la entrada y una entrada adyacente.
[0190]En la búsqueda 506b, se repite un subalgoritmo 506ba, mientras que una diferencia entre las variables "i_max" y "i_min" es mayor de 1. En el subalgoritmo 506ba, la variable i se ajusta para que sea igual a una media aritmética de los valores de las variables "i_min" y "i_max". En consecuencia, la variable i designa una entrada de la tabla "ari_hash_m[]" (como se define en las representaciones en tabla de las Figs.22(1), 22(2), 22(3) y 22(4) a la mitad de un intervalo de la tabla definido por los valores de las variables "i_min" y "i_max". Posteriormente, la variable j se ajusta para que sea igual al valor de la entrada "ari_hash_m[]" de la tabla "ari_hash_m[]". De este modo, la variable j toma un valor definido por la entrada de la tabla "ari_hash_m[]", entrada de la cual se encuentra la mitad de un intervalo de la tabla definido por las variables "i_min" e "i_max". Posteriormente, el intervalo definido por las variables "i_min" e "i_max" se actualiza si el valor de la variable de entrada c de la función "arith_get_pk()" es diferente de un valor de estado definido por los bits más superiores de la entrada de la tabla "j=ari_hash_m[i]" de la tabla "ari_hash_m[]". Por ejemplo, los "bits superiores" (bits 8 y hacia arriba) de las entradas de la tabla "ari_hash_m[]" describen valores de estado significativos. En consecuencia, el valor "j>>8" describe un valor de estado significativo representado por la entrada "j=ari_hash_m[i]" de la tabla "ari_hash_m[]" designada por el valor del índice de la tabla de búsqueda i. En consecuencia, si el valor de la variable c es menor que el valor "j>>8", esto significa que el valor del estado descrito por la variable c es menor que un valor de estado significativo descrito por la entrada "ari_hash_m[i]" de la tabla "ari_hash_m[]". En este caso, el valor de la variable "i_max" se ajusta para que sea igual al valor de la variable i, lo cual a su vez tiene el efecto que el tamaño del intervalo definido por "i_min" y "i_max" se reduce, donde el nuevo intervalo es aproximadamente igual a la mitad inferior del intervalo previo. Si encuentra que la variable de entrada c de la función "arith_get_pk()" es mayor que el valor "j>>8", lo cual significa que el valor del contexto descrito por la variable c es mayor que un valor del estado significativo descrito por la entrada "ari_hash_m[i]" de la matriz "ari_hash_m[]", el valor de la variable "i_min" se ajusta para que sea igual al valor de la variable i. En consecuencia, el tamaño del intervalo definido por los valores de las variables "i_min" y "i_max" se reduce a aproximadamente la mitad del tamaño del intervalo previo, definido por los valores previos de las variables "i_min" y "i_max". Para ser más precisos, el intervalo definido por el valor actualizado de la variable "i_min" y por el valor previo (sin cambios) de la variable "i_max" es aproximadamente igual a la mitad superior del intervalo previo en el caso de que el valor de la variable c sea mayor que el valor de estado significativo definido por la entrada "ari_hash_m [i]".
[0191]Si, sin embargo, se encuentra que el valor del contexto descrito por la variable de entrada c del algoritmo "arith_get_pk()" es igual al valor del estado significativo definido por la entrada "ari_hash_m [i]" (es decir, c==(j>>8)), se devuelve como valor del índice de la regla de asignación definido por los 8 bits más pequeños de la entrada "ari_hash_m [i]" como el valor de retorno de la función "arith_get_pk()" (instrucción "return(j&0xFF)").
[0192]Para resumir lo anterior, se evalúa una entrada "ari_hash_m[i]", los bits más superiores (bits 8 y hacia arriba) los cuales un estado significativo en cada iteración, y el valor del contexto (o valor del contexto numérico actual) descrito por la variable de entrada c de la función "arith_get_pk()" es comparado con el valor del estado significativo descrito por la entrada de la tabla "ari_hash_m[i]". Si el valor del contexto representado por la variable de entrada c es menor que el valor del estado significativo representado por la entrada de la tabla "ari_hash_m[i]", el límite superior (descrito por el valor "i_max") del intervalo de la tabla se reduce, y si el valor del contexto descrito por la variable de entrada c es más grande que el valor del estado significativo descrito por la entrada de la tabla "ari_hash_m[i]", el límite inferior (el cual se describe por el valor de la variable "i_min") del intervalo de la tabla se incrementa. En ambos de esos casos, el subalgoritmo 506ba se repite, a menos que el tamaño del intervalo (definido por la diferencia entre "i_max" y "i_min") sea menor que o igual a 1. Si, en contraste, el valor del contexto descrito por la variable c es igual al valor del estado significativo descrito por la entrada de la tabla "ari_hash_m[i]", se aborta la función "arith_get_pk()"se aborta, donde el valor de retorno es definido por los 8 bits más bajos de la entrada de la tabla "ari_hash_m[i]".
[0193]Si, sin embargo, la búsqueda 506b termina debido a que el tamaño del intervalo alcance su valor mínimo ("i_max - "i_min" es menor que o igual a 1), el valor de retorno de la función "arith_get_pk()" se determina por una entrada "ari_lookup_m[i_max]" de la tabla "ari_lookup_m[]", lo cual puede ser observado en el número de referencia 506c. La tabla ari_lookup_m[] es elegida preferiblemente según lo definido en la representación en tabla de la Fig.21 y por lo tanto puede ser igual a la tabla ari_lookup_m[742]. En consecuencia, las entradas de la tabla "ari_hash_m[]" (la cual es preferiblemente igual a la tabla ari_hash_m[742] como se define en las Figs. 22(1), 22(2), 22(3), 22(4) definen valores de estado significativos y límites de intervalos. En el subalgoritmo 506ba, los límites del intervalo de búsqueda "i_min" e "i_max" se adaptan iterativamente de modo que la entrada "ari_hash_m[i]" de la tabla "ari_hash_m[]", un índice de la tabla de búsqueda i de la cual se encuentra, al menos aproximadamente, en el centro del intervalo de búsqueda definido por los valores del límite del intervalo "i_min" e "i_max", al menos se aproxima a un valor del contexto descrito por la variable de entrada c. De este modo se logra que el valor del contexto descrito por la variable de entrada c se encuentre dentro de un intervalo definido por "ari_hash_m[i_min]" y "ari_hash_m[i_max]" después de la conclusión de las iteraciones del subalgoritmo 506ba, a menos que el valor del contexto descrito por la variable de entrada c sea igual a un valor del estado significativo por una entrada de la tabla "ari_hash_m[]".
[0194]Si, sin embargo, termina la repetición iterativa del subalgoritmo 506ba se termina debido a que el tamaño del intervalo (definido por "i_max - i_min") alcanza o excede su valor mínimo, se asume que el valor del contexto descrito por la variable de entrada c no es un valor de estado significativo. En este caso, el índice de "i_max", el cual designa un límite superior del intervalo, se usa no obstante. El valor superior "i_max" del intervalo, el cual se alcanza en la última iteración del subalgoritmo 506ba, se reutiliza como un valor de índice de tabla para el acceso a la tabla "ari_lookup_m" (la cual puede ser igual a la tabla ari_lookup_m[742] de la Fig.21). La tabla "ari lookup_m[]" describe los valores del índice de la regla de asignación asociados con los intervalos de una pluralidad de valores de contexto numérico adyacentes. Los intervalos, con los cuales los valores del índice de regla de asignación descritos por las entradas de la tabla "ari_lookup_m[]" están asociados, se definen por valores de estado significativos descritos por las entradas de la tabla "ari_hash_m[]". Las entradas de la tabla "ari_hash_m" definen valores de estado significativos y límites de intervalo de intervalos de valores de contexto numérico adyacentes. La ejecución del algoritmo 506b, se determina si el valor del contexto numérico descrito por la variable de entrada c es igual a un valor de estado significativo, y si este no es el caso, en el cual intervalo de valores del contexto numérico (fuera de la pluralidad de intervalos, los límites de los cuales se definen por valores de estado significativo) el valor del contexto descrito por la variable de entrada c se encuentra. De este modo, el algoritmo 506b satisface una doble funcionalidad para determinar el valor de entrada c describe un valor de estado significativo y si este no es el caso, para identificar un intervalo, es limitado por valores de estado significativos, en el cual el valor del contexto representado por la variable de entrada c se encuentra. En consecuencia, el algoritmo 506e es particularmente eficiente y requiere sólo un número comparativamente pequeño de accesos a la tabla.
[0195]Para resumir lo anterior, el estado del contexto c determina la tabla de frecuencias acumulativas usada para decodificar el plano a lo largo de 2 bits más significativos m. La asignación de c al índice de la tabla de frecuencias acumulativas correspondiente "pki" según lo efectuado por la función "arith_get_pk()". Una representación de pseudocódigo de programa de la función "arith_get_pk()" se ha explicado tomando como referencia la Fig.5e.
[0196]Para resumir aún más lo anterior, el valor de m se decodifica usando la función "arith_decode()" (la cual se describe con mayor detalle más adelante) llamada con la tabla de frecuencias acumulativas "arith_cf_m[pki][]", donde "pki" corresponde al índice (también designado como valor del índice de la regla de asignación) retomado por la función "arith_get_pk()", la cual se describe con referencia a la Fig.5e en forma de un pseudocódigo C.
11.5.2 Selección de la regla de asignación usando el algoritmo según la Fig.5f
[0197]En lo sucesivo, se describirá otra realización de un algoritmo de selección de la regla de asignación "arith_get_pk()" con referencia a la Fig.5f, la cual muestra una representación de pseudocódigo de programa de ese algoritmo, el cual se puede usar en la decodificación de una tupla de valores espectrales. El algoritmo según la Fig.5f se puede considerar como una versión optimizada (por ejemplo, versión de velocidad optimizada) del algoritmo, "get_pk()" o del algoritmo "arith_get_pk()".
[0198]El algoritmo de "arith_get_pk()" según la Fig.5f recibe, como una variable de entrada, una variable c la cual describe el estado del contexto. La variable de entrada c puede, por ejemplo, representar un valor del contexto numérico actual.
[0199]El algoritmo "arith_get_pk()" proporciona, como una variable de entrada, una variable "pki", el cual describe una distribución de probabilidad (o modelo de probabilidad) asociada con un estado del contexto descrito por la variable de entrada c. La variable "pki" puede, por ejemplo, ser un valor de índice de regla de asignación.
[0200]El algoritmo según la Fig. 5f comprende una definición del contenido de la matriz "i_diff[]". Como se puede observar, una primera entrada de la matriz "i_diff[]" (que tiene índice de matriz 0) es igual a 299 y las más entradas adicionales de la matriz (que tienen índices de matriz 1 a 8) toman los valores de 149, 74, 37, 18, 9, 4, 2 y 1. En consecuencia, el tamaño de la etapa para la selección de un valor del índice de la tabla de búsqueda "i_min" se reduce con cada iteración, puesto que las entradas de las matrices "i_diff[]" definen los tamaños de la etapa. Para más detalles, se hace referencia a la discusión más adelante.
[0201]Sin embargo, en realidad se pueden elegir diferentes tamaños de etapa, por ejemplo, diferentes contenidos de la matriz "i_diff[]",donde el contenido de la matriz "i_diff[]" se puede adaptar naturalmente a un tamaño de la tabla de búsqueda "ari_hash_m[i]".
[0202]Cabe observar que la variable "i_min" inicializada para que tome un valor de 0 a la derecha del inicio del algoritmo "arith_get_pk()".
[0203]En una etapa de inicialización 508a, una variable s se inicializa dependiendo de la variable de entrada c, donde la representación numérica de la variable c se desplaza a la izquierda 8 bits para obtener la representación numérica de la variable s.
[0204]Posteriormente, se efectúa una búsqueda de tabla 508b, para identificar un valor del índice de la tabla de búsqueda "i_min" de una entrada de tabla de búsqueda "[ari_hash_m]", de modo que el valor del contexto descrito por el valor del contexto c se encuentre en un intervalo que sea limitado por el valor del contexto descrito por la entrada de la tabla de búsqueda "ari_hash_m[i_min]" y un valor del contexto descrito por otra entrada de tabla de búsqueda "ari_hash_m", otra entrada "ari_hash_m" la cual está adyacente (en términos de su valor del índice de la tabla de búsqueda) a la entrada de la tabla de búsqueda "ari_hash_m[i_min]". De este modo, el algoritmo 508b permite la determinación de un valor índice de la tabla de búsqueda "i_min" que designa una entrada "j=ari_hash_m[i_min]" de la tabla de búsqueda "ari_hash_m[]", de modo que la entrada de la tabla de búsqueda "ari_hash_m[i_min]" se aproxime al menos al valor del contexto descrito por la variable de entrada c.
[0205]La búsqueda de tabla 508b comprende una ejecución iterativa de un subalgoritmo 508ba, donde el subalgoritmo 508ba se ejecuta durante un número predeterminado de, por ejemplo, nueve iteraciones. En la primera etapa del subalgoritmo 508ba, la variable i se ajusta a una variable la cual es igual a la suma de un valor de una variable "i_min" y un valor de una entrada de tabla "i_diff[k]". Cabe observar aquí que k es una variable de ejecución, la cual se incrementa, partiendo de un valor inicial de k=0, con cada iteración del subalgoritmo 508ba. La matriz "i_diff[]" define valores crecientes predeterminados, donde los valores crecientes disminuyen con el incremento del índice de la tabla k, es decir, con el incremento del número de iteraciones.
[0206]En una segunda etapa del subalgoritmo 508ba, se copia un valor de una entrada de la tabla "ari_hash_m[]"en una variable j. Preferiblemente, los bits más superiores de las entradas de la tabla de la tabla "ari_hash_m[]" describen valores de estado significativos de un valor del contexto numérico y los bits más inferiores (bits 0 a 7) de las entradas de la tabla "ari_hash_m[]" describen valores del índice de la regla de asignación asociados con los valores de estado significativo respectivos.
[0207]En una tercera etapa del subalgoritmo 508ba, el valor de la variable S comparado con el valor de la variable j y la variable "i_min" se ajusta selectivamente al valor "i+1" si el valor de la variable c es mayor que el valor de la variable j. Posteriormente, la primera etapa, la segunda etapa, y la tercera etapa del subalgoritmo 508ba se repiten durante un número predeterminado de veces, por ejemplo, nueve veces. De este modo, en cada ejecución del subalgoritmo 508ba, el valor de la variable "i_min" se incrementa en i_diff[]+1, si y únicamente si, el valor del contexto descrito por el índice de la tabla de búsqueda actualmente válido i_min i_diff[] es menor que el valor del contexto descrito por la variable de entrada c. En consecuencia, el valor del índice de la tabla de búsqueda "i_min" se incrementa (iterativamente) en cada ejecución del subalgoritmo 508ba si (y solo sí) el valor del contexto descrito por la variable de entrada c y, en consecuencia, por la variable s, es mayor que el valor del contexto descrito por la entrada "ari_hash_m[i=i_min diff[k]]".
[0208]Además, cabe observar que únicamente se efectúa una sola comparación, es decir, la comparación para ver si el valor de la variable s es mayor que el valor de la variable j, en cada ejecución del subalgoritmo 508ba. En consecuencia, el algoritmo 508ba es particularmente eficiente desde el punto de vista computacional. Además, cabe observar que existen diferentes posibles resultados con respecto al valor final de la variable “i_min". Por ejemplo, es posible que el valor de la variable "i_min" después de la última ejecución del subalgoritmo 512ba sea tal que el valor del contexto descrito por la entrada de la tabla "ari_hash_m[i_min]" sea menor que el valor del contexto descrito por la variable de entrada c y que el valor del contexto descrito por la entrada de la tabla "ari_hash_m[i_min 1]" sea mayor que el valor del contexto descrito por la variable de entrada c. De manera alternativa, puede ocurrir que después de la última ejecución del subalgoritmo 508ba, el valor del contexto descrito por la entrada de la tabla de búsqueda "ari_hash_m[i_min-1]" sea menor que el valor del contexto descrito por la variable de entrada c, y el valor del contexto descrito por la entrada "ari_hash_m[i_min]" sea más grande que el valor del contexto descrito por la variable de entrada c. De manera alternativa, sin embargo, puede ocurrir que el valor del contexto descrito por la entrada de la tabla de búsqueda "ari_hash_m[i_min]" sea idéntico al valor del contexto descrito por la variable de entrada c.
[0209]Por esta razón, se toma la provisión del valor de retorno basado en la decisión 508c. La Tabla j se ajusta para tomar el valor de la entrada de la tabla de búsqueda "ari_hash_m[i_min]". Posteriormente, se determina si el valor del contexto descrito por la variable de entrada c (y también por la variable s) es mayor que el valor del contexto descrito por la entrada "ari_hash_m[i_min]" (primer caso definido por la condición "s>j"), o si el valor del contexto descrito por la variable de entrada c es menor que el valor del contexto descrito por la entrada de la tabla de búsqueda "ari_hash_m[i_min]" (segundo caso definido por la condición "c<j>>8"), o si el valor del contexto descrito por la variable de entrada c es igual al valor contexto descrito por la entrada "ari_hash_m[i_min]" (tercer caso).
[0210]En el primer caso, (s>j), una entrada “ari_lookup_m[i_min 1]” de la tabla “ari_lookup_m[]” designada por el valor del índice de tabla “i_min+1” se retorna como el valor de salida de la función “arith_get_pk()”. En el segundo caso (c<(j>>8)), una entrada “ari_lookup_m[i_min]” de la tabla “ari_lookup_m[]” designada por el valor del índice de tabla “i_min” se retorna como el valor de retorno de la función “arith_get_pk()”. En el tercer caso (es decir sí el valor del contexto descrito por las variables de entrada de c es igual al valor de estado significativo descrito por la entrada de la tabla “ari_hash_m[i_min]”), se retorna un valor del índice de la regla de asignación descrito por los 8 bits más inferiores de la tabla de la entrada de búsqueda “ari_hash_m[i_min]” como el valor de retorno de la función “arith_get_pk()”.
[0211]Para resumir lo anterior, se efectúa una búsqueda de tabla simple particular en la etapa 508b, donde la búsqueda de la tabla proporciona un valor variable de una variable “i_min” sin distinguir sí el valor del contexto descrito por la variable de entradas c es igual a un valor de estado significativo definido por una de las entradas de estado de la tabla “ari_has_m[]” o no. En la etapa 508c, el cual se efectúa después de la búsqueda de la tabla 508b, evalúa una relación de magnitud entre el valor del contexto de la variable de entrada c y un valor de estado significativo descrito por la entrada de búsqueda “ari_hash_m[i_min]” y el valor de retorno de la función “arith_get_pk()” se selecciona dependiendo del resultado de la evaluación, donde el valor de la variable “i_min”, el cual se determina en la evaluación de la tabla 508b, se considera para seleccionar un valor del índice de la regla de asignación aún sí el valor del contexto descrito por la variable de entrada c es diferente del valor del estado significativo descrito por la entrada de la tabla de búsqueda “ari_hash_m[i_min]”.
[0212]Cabe observar además que la comparación en el algoritmo deberá preferiblemente (o alternativamente) ser efectuada entre el índice del contexto (valor de contexto numérico) c y j=ari_hash_m[i]>>8. En realidad, cada entrada de la tabla “ari_hash_m[]” representa un índice de contexto, codificado más allá de los 8vos bits, en el modelo de probabilidad correspondiente codificado sobre los 8 primeros bits (los bits menos significativos). En la implementación actual, estamos interesados principalmente en saber sí el contexto c de la presente es mayor que ari_hash_m[i]>>8, lo cual es equivalente detectar sí s=c<<8 es también mayor que ari_hash_m[i].
[0213]Para resumir lo anterior, una vez calculado el contexto (el cual puede, por ejemplo, se ha alcanzado el algoritmo “arith_get_context(c,i,N)” según la Fig.5c, el algoritmo “arith_get_context(c,i)” según la Fig.5d, el plano a lo largo de los 2 bits más significativos se codifica usando el algoritmo “arith_decode” (el cual se describirá más adelante), recuperado con la tabla de frecuencias acumulativas apropiada correspondiente al modelo de probabilidad correspondiente al estado del contexto. La correspondencia se efectúa por “arith_get_pk()”, por ejemplo, la función “arith_get_pk()” la cual se ha discutido con referencia a la Fig.5f.
11.6 Decodificación aritmética
11.6.1 Decodificación aritmética usando el algoritmo según la Fig.5g
[0214]En lo sucesivo, se discutirá la funcionalidad de una implementación preferida de la función “arith_decode()” con detalle con referencia a la Fig.5g. La Fig.5g muestra un pseudo código C que describe el algoritmo usado.
[0215]Cabe observar que la función “arith_decode()” usa la función auxiliar “arith_first_symbol(void)”, la cual retorna VERDADERO sí este es el primer símbolo de la secuencia y FALSO de otro modo. La función “arith_decode()” también usa la función auxiliar “arith_get_next_bit(void)”, la cual obtiene y proporciona el siguiente bit del flujo de bits.
[0216]Además, la función “arith_decode()” usa las variables globales “bajo”, “alto” y “valor”. Además, la función “arith_decode()” recibe, como una variable de entrada, la variable “cum_freq[]”, la cual apunta hacia una primera entrada o elemento (que tiene el índice de elemento o índice de entrada 0) de la tabla de frecuencias acumulativas o la subtabla de las frecuencias acumulativas (preferiblemente, una de las subtablas ari_cf_m[pki=0][17] a ari_cf_m[pki=63][17] de la tabla ari_cf_m[64][17], según lo definido por la representación en tabla de las Figs.23(1), 23(2), 23(3)). También, la función “arith_decode()” usa la variable de entrada “cf1”, la cual indica la longitud de la tabla de frecuencias acumuladas o subtablas de frecuencias acumuladas seleccionada designada por la variable “cum_freq[]”.
[0217]La función “arith_decode()” comprende, como una primera etapa, una inicialización de la variable 570a, la cual se efectúa sí la función auxiliar “arith_first_symbol()” indica que el primer símbolo de una frecuencia de símbolo está siendo decodificada. La inicialización del valor 550a inicia la variable “valor” dependiendo de una pluralidad de, por ejemplo, 16 bits, los cuales se obtienen del flujo de bits usando la función auxiliar “arith_get_next_bit”, de modo que la variable “valor” tome el valor representado por los bits. También, la variable “bajo” se inicializa para tomar el valor de 0, y la variable “alta” se inicializa para tomar el valor de 65535.
[0218]En una segunda etapa 570b, la variable “intervalo” se fija en un valor, el cual es mayor, en 1, que entre los valores de las variables “alto” y “bajo”. La variable “cum” se fija en un valor el cual representa una posición relativa del valor de la variable “valor” entre el valor de la variable “bajo” y el valor de la variable “alto”. En consecuencia, la variable “cum” toma, por ejemplo, un valor entre 0 y 2<16>dependiendo del valor de la variable “valor”.
[0219]El indicador p se inicializa a un valor el cual es más pequeño, en 1, que la dirección inicial de la tabla o subtabla de frecuencia acumulativa seleccionada.
[0220]El algoritmo “arith_decode()” también comprende una búsqueda de la tabla de frecuencias acumulativas iterativa 570c. La búsqueda de la tabla de frecuencias acumulativas iterativa se repite hasta que la variable se efectúe que es cfl es más pequeña o igual a 1. En la búsqueda de la tabla de frecuencias acumulativas iterativa 570c, el indicador de la variable q se ajusta en un valor el cual es igual a la suma del valor actual del variable indicador p y la mitad del valor de la variable “cfl”. Si el valor de la entrada *q de la entrada de frecuencias acumulativas seleccionada, la entrada de la cual es dirigida por la variable indicadora q, es mayor que el valor de la variable “cum”, variable indicadora p se ajusta en un valor de la variable indicadora q, y la variable “cf1” se incrementa. Finalmente, la variable “cfl” se desplaza hacia la derecha un bit, dividiendo por lo tanto de manera efectiva el valor de la variable “cfl” por 2 y despreciando la porción del módulo.
[0221]En consecuencia, la búsqueda de la tabla de frecuencias acumulativas iterativa 570c compara efectivamente el valor de la variable “cum” con una pluralidad de entradas de la tabla de frecuencias acumulativas seleccionada, para identificar un intervalo dentro de la tabla de frecuencias acumulativas seleccionada, la cual se limita por las entradas de las frecuencias acumulativas, de modo que el valor de cum se encuentre dentro del intervalo identificado. En consecuencia, las entradas de la tabla de frecuencias acumulativas seleccionada definen intervalos, donde un valor de símbolos respectivo está asociado con cada uno de los intervalos de la tabla de frecuencias acumulativas seleccionada. También, los anchos de los intervalos entre dos valores adyacentes de la tabla de frecuencias acumulativas definen probabilidades de los símbolos asociados con los intervalos de modo que la tabla de frecuencias acumulativas seleccionadas en su totalidad defina una distribución de probabilidad de diferentes símbolos (o valores de símbolos). Los detalles con respecto a las tablas de frecuencias acumulativas o subtablas de frecuencias acumulativas disponibles se discutirán más adelante tomando como referencia la Fig.23.
[0222]Tomando como referencia nuevamente la Fig.5g, el valor del símbolo se deriva del valor de la variable indicadora p donde el valor del símbolo se deriva como se muestra en la referencia numérica 570d. De este modo, se evalúa la diferencia entre el valor de la variable indicadora p y la dirección inicial “cum_freq” para obtener el valor del símbolo, el cual es representado por la variable “símbolo”.
[0223]El algoritmo “arith_decode” también comprende una adaptación 570e de las variables “alto” y “bajo”. Si el valor del símbolo representado por la variable “símbolo” es diferente de 0, la variable “alto” se actualiza, como se muestra en el número de referencia 570e. También, el valor de la variable “bajo” se actualiza como se muestra en el número de referencia 570e. La variable “alto se ajusta en un valor el cual se determina por el valor de la variable “bajo”, la variable “intervalo” y la entrada que tiene un índice “símbolo -1” de la tabla de frecuencias acumulativas a subtablas de frecuencias acumulativas seleccionada. La variable “bajo” se incrementa, donde la magnitud del incremento es determinada por la variable “intervalo” y la entrada de la tabla de frecuencias acumulativas seleccionada que tiene el índice “símbolo”. En consecuencia, la diferencia entre los valores de las variables “bajo” y “alto” se ajusta dependiendo de la diferencia numérica entre dos entradas adyacentes de la tabla de frecuencias acumulativas seleccionada.
[0224]En consecuencia, si se detecta un valor del símbolo con una baja de probabilidades, el intervalo entre los valores de las variables “bajo” y “alto” se reduce hasta un ancho estrecho. En contraste, sí el valor del símbolo detectado comprende una probabilidad de relativamente grande, el ancho del intervalo de los valores de las variables “bajo” y “alto” se ajusta a un valor comparativamente grande. De nuevo, el ancho del intervalo entre los valores de las variables “bajo” y “alto” depende del símbolo detectado y las entradas correspondientes de la tabla de frecuencias acumulativas.
[0225]El algoritmo “arith_decode()” también comprende una renormalización del intervalo 570f, en la cual el intervalo determinado en la etapa 570e se desplaza y escala iterativamente hasta que se alcanza la condición “interrupción”. En la renormalización del intervalo 570f, se efectúa una operación selectiva de desplazamiento hacia abajo 570fa. Si la variable “alto" es menor que 32768, no se hace nada, y la renormalización del intervalo continúa con una operación de incremento del tamaño del intervalo 570fb. Si, sin embargo, la variable “alto” no es menor que 32768 y la variable “bajo” es mayor que o igual que a 32768, las variables “valores”, “bajo” y “alto” se reducen todas en 32768, de modo que un intervalo definido por las variables “bajo” y “alto” se desplaza hacia abajo de modo que el valor de la variable “valor” también se desplaza hacia abajo. Sin embargo, se encontró que el valor de la variable “alto” no es menor de 32768, y que la variable “bajo” no es mayor que o igual a 32768, y que la variable “bajo” es mayor que o igual a 16384, y que la variable “alto” es menor que 49152, las variables “valor”, “bajo” y “alto” se reducen todas en 16384, desplazando por lo tanto hacia abajo el intervalo entre los valores de las variables “alto” y “bajo” y también el valor de la variable “valor”. Si, sin embargo, ninguna de las condiciones anteriores se cumplen, la renormalización interna se aborta.
[0226]Si, sin embargo, cualquiera de las condiciones mencionadas anteriormente, las cuales se evalúan en la etapa 570fa, se cumplen, se ejecuta la operación del incremento del intervalo 570fb. En la operación del incremento del intervalo 570fb, el valor de la variable “bajo” se duplica. También, el valor de la variable “alto”, se duplica, y el resultado de la duplicación se incrementa en 1. También, el valor de la variable “valor” se duplica (desplazándose hacia la izquierda un bit), y un bit del flujo de bits, el cual se obtiene por la función auxiliar “arith_get_next_bit” se usa con el bit menos significativo. En consecuencia, el tamaño del intervalo entre los valores de las variables “bajo” y “alto” se duplica aproximadamente, y la precisión de la variable “valor” incrementa un nuevo bit del flujo de bits. Como se mencionó anteriormente, las etapas 570fa y 570fb se repiten hasta que se alcance la condición “interrupción”, es decir hasta que el intervalo entre los valores de las variables “bajo” y “alto” suficientemente grande.
[0227]Con respecto a la funcionalidad del algoritmo “arith_decode()”, cabe observar que el intervalo entre los valores de las variables “bajo” y “alto” se reducen en la etapa 570e dependiendo de las dos entradas adyacentes de la tabla de frecuencias acumulativas referida por la variable de “cum_freq”. Si un intervalo entre dos valores adyacentes de la tabla de frecuencias acumulativas seleccionada es pequeño, es decir sí los valores adyacentes están comparativamente cercanos entre sí, el intervalo entre dos valores de las variables “bajo” y “alto”, el cual se obtiene en la etapa 570e, la comparativamente pequeño. En contraste, sí dos entradas adyacentes de la tabla de frecuencias acumulativas están separadas más el intervalo entre los valores de las variables “bajo” y “alto” el cual se obtiene en la etapa 570e, será comparativamente grande.
[0228]En consecuencia, si el intervalo entre los valores es de las variables “bajo” y “alto”, el cual se obtiene en la etapa 570e, comparativamente pequeño, se ejecutará un número grande de etapas de renormalización del intervalo para reescalar el intervalo a un tamaño “suficiente” (de modo que ninguna de las condiciones de la evaluación de las condiciones 570fa se ha satisfecha). En consecuencia, se usará un número comparativamente grande de bits del flujo de bits para incrementar la precisión de la variable “valor”. Si, en contraste, el tamaño del intervalo obtenido en la etapa 570e es comparativamente grande, únicamente requerirá un pequeño número de repeticiones de las etapas de normalización del intervalo 570fa y 570fb para renormalizar el intervalo entre los valores de las variables “bajo” y “alto” hasta un tamaño “suficiente”. En consecuencia, únicamente un número comparativamente pequeño de bits del flujo de bits será para incrementar la precisión de la variable “valor” y para preparar una decodificación de un siguiente símbolo.
[0229]Para resumir lo anterior, si un símbolo se decodifica, lo cual comprende una probabilidad comparativamente alta, de lo cual se asocia un intervalo grande por medio de las entradas de la tabla de frecuencias acumulativas seleccionada, únicamente un número comparativamente pequeño de bits será leído para permitir la decodificación de un símbolo subsecuente. En contraste, si se decodifica un símbolo, que comprenda una probabilidad comparativamente pequeña y que este asociado con un intervalo pequeño por las entradas de la tabla de frecuencias acumulativas seleccionada, será tomado un número comparativamente grande del flujo de bits para preparar una decodificación del siguiente símbolo.
[0230]En consecuencia, las entradas de las tablas de frecuencias acumulativas reflejan la probabilidad de diferentes símbolos y también reflejan un número de bits requeridos para decodificar una secuencia de símbolos. Haciendo variar la tabla de frecuencias acumulativas dependiendo del contexto es decir dependiendo de los símbolos (o valores espectrales) previamente decodificados, por ejemplo, seleccionando diferentes tablas de frecuencias acumulativas dependiendo del contexto, se pueden explotar las dependencias estocásticas entre los diferentes símbolos lo cual permite una modificación eficiente en cuanto a la velocidad de bits particular de los símbolos subsecuentes (o adyacentes).
[0231]Para resumir lo anterior, la función “arith_decode()”, la cual se ha descrito con referencia a la Fig.5g, se recupera con la tabla de frecuencias acumulativas “arith_cf_m[pki][]”, que corresponde al índice “pki” retornado a la función “arith_get_pk()” para determinar el valor del plano de bits más significativos m (el cual se puede ajustar al valor del “símbolo” representado por la variable de retorno).
[0232]Para resumir lo anterior, el decodificador aritmético es una implementación entera que usa el procedimiento de generación de etiquetas con escalamiento. Para los detalles hace referencia al libro “Introduction to Data Compression” de K. Sayood, Tercera edición, 2006, Elsevier Inc.
[0233]El código de programa informático según la Fig.5g describe el algoritmo usado según una realización de la invención.
11.6.2 Decodificación aritmética usando el algoritmo según las Figs.5h y 5i
[0234]Las Figs.5h y 5i muestran una representación de pesudocódigo de programa de otra realización del algoritmo “arith_decode()”, la cual se puede usar como una alternativa al algoritmo “arith_decode” descrito con referencia a la Fig.5g.
[0235]Cabe observar que ambos algoritmos con la Fig.5g y las Figs.5h y 5i se pueden utilizar en el algoritmo “values_decode()” según la Fig.3.
[0236]Para resumir, el valor m se decodifica usando la función “arith_decode()” recuperada con la tabla de frecuencias acumulativas “arith_cf_m[pki][]” (la cual, es preferiblemente, una subtabla de la tabla ari_cf_m[67][17] definida en las representaciones de las Figs. 23(1), 23(2), 23(3)) donde “pki” corresponde al índice regresado por la función “arith_get_pk()”. El codificador (o decodificador) aritmético es una implementación entera que usa el procedimiento de generación de etiquetas con escalamiento. Para los detalles, se hace referencia al libro “Introduction to Data Compression” de K. Sayood, Tercera Edición, 2006, Elsevier Inc. El código de programa informático según las Figs.
5h y 5i describe el algoritmo usado.
11.7 Mecanismo de escape
[0237]En lo sucesivo, será discutido de manera breve el mecanismo de escape, que se usa en el algoritmo de decodificación “values_decode()” según la Fig.3.
[0238]Cuando el valor decodificado m (el cual es proporcionado como un valor de retorno de la función “arith_decode()”) es el símbolo de escape “ARITH_ESCAPE”, las variables “lev” y “esc_nb” se incrementan en 1, y otro valor m se decodifica. En este caso, la función “arith_get_pk()” (o “get_pk()”) se recupera una vez más con el valor “c+esc_nb<<17” como argumento de entrada, donde la variable “esc_nb” describe el número de símbolos de escape previamente decodificados por la misma 2-tupla y limitados a 7.
[0239]Para resumir, si se identifica un símbolo de escape, se asume el valor del plan de bit más significativo m comprende un peso numérico incrementado. Además, se repite la decodificación numérica actual, donde se usa un valor del contexto numérico actual modificado “c+esc_nb<<17” como una variable de entrada a la función “arith_get_pk()”. En consecuencia se obtiene típicamente un valor “pki” del índice de la regla de asignación diferente en diferentes iteraciones del subalgoritmo 312ba.
11.8 Mecanismo de interrupción aritmética
[0240]En lo sucesivo, se describirán los mecanismos de interrupción aritmética. El mecanismo de interrupción aritmética permite la reducción del número de bits requeridos en el caso de que la porción de la frecuencia superior sea totalmente cuantizada a 0 en un codificador de audio.
[0241]En una realización, se puede implementar un mecanismo de interrupción aritmética como sigue: Una vez que el valor de m no sea el símbolo de escape, “ARITH_ESCAPE”, el decodificador verifica sí m sucesiva forma un símbolo “ARITH_STOP”. Si la condición “(esc_nb>0&&m==0)” es verdadera, se detecta el símbolo “ARITH_STOP” y finaliza el procedimiento de decodificación. En este caso, el decodificador salta directamente a la decodificación del signo descrita más adelante o a la función “arith_finish()” la cual se describirá más adelante. La condición significa que el resto de la trama está compuesta de valores de cero.
11.9 Decodificación del plano de bit menos significativo
[0242]En lo sucesivo, se describirá la decodificación de uno o más planos de bit menos significativo. La decodificación del plano de bit menos significativo, se efectúa, por ejemplo, en la etapa 312d mostrado en la Fig. 3. De manera alternativa, sin embargo, se pueden utilizar los algoritmos como se muestra en las Figs. 5j y 5n donde el algoritmo de la Fig.5j es un algoritmo preferido.
11.9.1 Decodificación del plano de bit menos significativo según la Fig.5j
[0243]Tomando como referencia ahora la Fig.5j, se puede observar que las variables de los valores a y b se derivan del valor m. Por ejemplo, la representación numérica de valor m se desplaza hacia el lado derecha 2 bits para obtener la representación numérica de la variable b. Además, el valor de la variable a se obtiene sustrayendo una versión desplazada en bit de la variable b, desplazada hacia la izquierda 2 bit, del valor de la variable m.
[0244]Posteriormente, se repite una decodificación aritmética de los valores del plano de bit menos significativo r donde el número de repeticiones se determina por el valor de la variable “lev”. El valor del plano de bit menos significativo r se obtiene usando la función “artih_decode”, donde se usa una tabla de frecuencias acumulativas adaptada a la decodificación del plano de bit menos significativa (tabla de frecuencias acumulativas “arith_cf_r”). El bit menos significativo (que tiene un peso numérico de 1) de la variable r describe un plano de bit menos significativo del valor espectral representado por la variable a, y un bit que tiene un peso numérico de 2 de la variable r describe un bit menos significativo del valor espectral representado por la variable b. En consecuencia, la variable a se actualiza desplazando la variable a hacia la izquierda 1 bit que tiene el peso numérico de 1 de la variable r como del bit menos significativo. De manera similar, la variable b se actualiza desplazando la variable b a la izquierda un bit y sumando el bit que tiene el peso numérico de 2 de la variable r.
[0245]En consecuencia, los dos bits que contienen una información más significativa de las variables a,b son determinados por el valor del plano de bit más significativo m, y uno o más bits menos significativos (sí los hay) de los valores a y b son determinados por uno o más valores del plano de bit menos significativos r.
[0246]Para resumir lo anterior, sí el símbolo “ARITH_STOP” no se cumple, los planos de bit restante se decodifican entonces, sí existe alguno, para la 2-tupla presente. Los planos de bit restante se decodifican del nivel más significativo al menos significativo llamando la función “arith_decode()” un número de lev de veces con la tabla de frecuencias acumulativas”arith_cf_r[]”. Los planos de bit decodificados r permiten refinar el valor previamente decodificado m según el algoritmo, cuyo pseudocódigo de programa se muestra en la Fig.5j.
11.9.2 Decodificación de la banda de bit menos significativa según la Fig.5n
[0247]De manera alternativa, sin embargo, el algoritmo, una representación de pseudocódigo de programas del cual se muestra en la Fig.5n también se puede usar para la decodificación de los planos menos significativos. En este caso, sí el símbolo “ARITH_STOP” no se cumple, los planos de bit restantes se decodifican entonces, sí existe alguno, para la 2-tupla presente. Los planos de bit restante se decodifican del nivel más significativo al menos significativo llamando “lev” veces “arith_decode()” con la tabla de frecuencias acumulativas “arith_cf_r()”. Los planos de bit decodificados permiten la refinación del valor previamente decodificado m según el algoritmo mostrado con la Fig.5n.
11.10 Actualización del contexto
11.10.1 Actualización del contexto según las Figs.5k, 5l, y 5m
[0248]En lo sucesivo, se describirán las operaciones usadas para completar la decodificación de la tupla de valores espectrales, tomando como referencia las Figs.5k y 5l. Además, se describirá una operación la cual se usa para completar una decodificación en conjunto de tuplas de valores espectrales asociados con una porción actual, (por ejemplo, una trama actual) de un contenido de audio.
[0249]Cabe observar que los algoritmos según las Figs. 5k, 5l, y 5m son los preferidos, aunque se pueden utilizar algoritmos alternativos.
[0250]Tomando como referencia ahora la Fig. 5k, se puede observar que la entrada que tiene el índice de entrada 2*i de la matriz “x_ac_dec[]” de la ecuación se fija igual a, y la entrada que tiene el índice de entrada “2*i+1” de la matriz “x_ac_dec[]” la ecuación se fija igual a b después de decodificar el bit menos significativo 312d. En otras palabras, en el punto después la decodificación de bit menos significativo 312d, el valor no firmado de la 2-tupla {a,b}, es completamente decodificado. Este es guardado en la matriz (por ejemplo, la matriz “x_ac_dec[]”) que contiene los coeficientes espectrales según el algoritmo mostrado en la Fig.5k.
[0251]Posteriormente, el contexto “q” también se actualiza para la siguiente 2-tupla. Cabe observar que esta actualización del contexto también se tiene que efectuar para la última 2-tupla. Esta actualización del contexto se efectúa por la función “arith_update_context()”, una representación pseudocódigo de programa de la cual se muestra en la Fig.5I.
[0252]Tomando ahora como referencia la Fig. 5l, se puede observar que la función “arith_update_context(i,a,b)” como variable de entrada, coeficientes espectrales (o valores espectrales) cuantizados, no firmados, decodificado a,b de la 2-tupla. Además, la función ”arith_update_contex” también recibe como una variable de entrada, un índice i (por ejemplo, un índice de frecuencia) del coeficiente espectral cuantizado a decodificar. En otras palabras, la variable de entrada i puede, por ejemplo, ser un índice de la tupla de valores espectrales de los valores absolutos de los cuales se definen por las variables de entrada a,b. Como se puede observar, la entrada “q[1][i]” de la matriz “q[][]” puede ser ajustada a un valor el cual se ha igual a a+b+1. Además, el valor de la entrada “q[1][i]” de la matriz “q[][]” se puede limitar a un valor hexadecimal de “0xF”. De este modo, la entrada “q[1][i]” de la matriz “q[][]” se obtiene calculando una suma de los valores absolutos de la tupla actualmente codificada {a,b} de espectrales que tienen un índice de frecuencia i, y sumando 1 al resultado de la suma.
[0253]Cabe observar aquí que la entrada “q[1][i]” de la matriz “q[][]” se puede considerar como un valor de la subregión del contexto, debido a que describe una subregión del contexto que se usa para una decodificación posterior de los valores espectrales (o tuplas de valores espectrales).
[0254]Cabe observar que la sumatoria de los valores absolutos de a y b de los dos valores espectrales totalmente decodificados (versiones firmadas de los cuales son almacenadas en las entradas “x_ac_dec[2*i]” y “x_ac_dec[2*i+1]” de la matriz “x_ac_dec[]”), pueden ser considerados como el cálculo de una norma (por ejemplo, una norma L1) de los valores espectrales decodificados.
[0255]Se ha encontrado que los valores de la subregión del contexto (es decir, las entradas de la matriz “q[][]”), se describe una norma de un vector formado por una pluralidad de valores espectrales previamente decodificados son particularmente significativos y eficientes en cuanto a la memoria. Se ha encontrado que esa norma, la cual se calcula sobre la base de una pluralidad de valores espectrales previamente decodificados, comprende información de contexto significativa de una forma compacta. Se ha encontrado que el signo de los valores espectrales es típicamente no es particularmente relevante para la elección del contexto. También se ha encontrado que la formación de una norma a través de una pluralidad de valores espectrales previamente decodificados típicamente mantiene la información más importante, aun cuando algunos detalles se han descartado. Además, se ha encontrado que una limitación del valor del contexto numérico actual a un valor máximo típicamente no da como resultado una pérdida severa de información. Más bien se ha encontrado que es eficiente usar el mismo estado del contexto para valores espectrales significativos que sean mayores que un valor umbral predeterminado. De este modo, la limitación de los valores de la subregión del contexto conlleva una mejora adicional de la eficiencia de la memoria. Además se ha encontrado que la limitación de los valores de la subregión del contexto a un cierto valor máximo permite una actualización y un particularmente simple computacionalmente eficiente del valor del contexto numérico actual, lo cual se ha descrito, por ejemplo, con referencia a las Figs.5c y 5d. Limitando la subregión del contexto a un valor comparativamente pequeño (por ejemplo a un valor de 15), un estado de contexto que se base en una pluralidad de valores de subregión de contexto se puede representar de forma eficiente, el cual se ha discutido tomando como referencia las Figs.5c y 5d.
[0256]Además, se ha encontrado que una limitación de los valores de la subregión del contexto a valores entre 1 y 15, proporciona un compromiso particularmente bueno entre la exactitud y eficiencia de la memoria debido a que 4 bits son suficientes para almacenar ese valor de la subregión del contexto.
[0257]Sin embargo, cabe observar que, en algunas otras realizaciones, un valor de la subregión del contexto puede basarse en un solo valor espectral decodificado únicamente. En este caso, la formación de una norma se puede omitir opcionalmente.
[0258]La siguiente 2-tupla de la trama es decodificada después de la conclusión de la función “arith_update_contex” incrementando y en 1 repitiendo el mismo procedimiento como se describió anteriormente, partiendo de la función “arith_get_context()”.
[0259]Cuando se decodifican 2-tuplas Ig/2 dentro de la trama, o dentro del símbolo de interrupción ocurre “ARITH_STOP”, el procedimiento de decodificación de la amplitud espectral termina y comienza la decodificación de los signos.
[0260]Los detalles con respecto a la decodificación con los signos han sido discutidos en referencia a la Fig. 3, donde la decodificación de los signos se muestra en la referencia numérica 314.
[0261]Una vez codificados todos los coeficientes especiales cuantizados no firmados se agrega el signo. Para cada valor cuantizado no nulo “x_ac_dec” se lee un bit. Si el valor del bit leído es igual a 1, el valor cuantizado es positivo, no se hace nada y el valor firmado es igual el valor no firmado previamente decodificado. De otro modo (es decir sí el valor del bit leído es igual a 0), el coeficiente decodificado (o valor espectral) es negativo y se toma el complemento de los dos ante el valor no firmado. Los bits firmados se leen en las frecuencias bajas a altas. Para los detalles, se hace referencia la Fig.3 y con las explicaciones con respecto la codificación de los signos 314.
[0262]La decodificación finaliza llamando la función “arith_finish()”. Los coeficientes espectrales restantes se ajustan a 0. Los estados de contexto respectivos se actualizan de manera correspondiente.
[0263]Para los detalles, se hace referencia a la Fig.5m, la cual muestra una representación de pseudocódigo de programa de la función “arith_finish()” como pueden observarse la función “arith_finish()” se recibe un valor de entrada 1g el cual describe los coeficientes espectrales cuantizados decodificados. Preferiblemente, la variable de entrada 1g de la función “arith_finish” describe un número de coeficientes espectrales realmente decodificados, dejando los coeficientes espectrales no considerados, a los cuales se ha asignado un valor de 0 en respuesta a la detección de un símbolo “ARITH_STOP”. Una variable de entrada N de la función “arith_finish” describe una longitud de ventana de una ventana actual (es decir una ventana asociada con la porción actual del contenido de audio). Típicamente un número de valores espectrales asociados con una ventana de longitud N es igual a N/2 y un número de 2-tuplas de valores espectrales asociados con una ventana de longitud de ventana N es igual a N/4.
[0264]La función “arith_finish” también recibe, como un valor de entrada, un vector “x_ac_dec” de valores espectrales decodificados, o al menos una referencia a ese vector de coeficientes espectrales decodificados.
[0265]La función “arith_finish” se configura para ajustar las entradas de la matriz o vector “x_ac_dec”, para el cual no han sido decodificados valores espectrales debido a la presencia de una condición de interrupción aritmética igual a 0. Además, la función “arith_finish” ajusta los valores de la subregión del contexto “q[1][i]”, los cuales están asociados con valores espectrales para los cuales no ha sido decodificado un valor debido a la presencia de una condición de interrupción aritmética, a un valor predeterminado de 1. El valor predeterminado de uno corresponde a una tupla de los valores espectrales donde ambos valores espectrales son iguales a 0.
[0266]En consecuencia, la función “arith_finish()” permite actualizar toda la matriz (o vector) “x_ac_dec[]” los valores espectrales y también toda la matriz de la subregión del contexto “q[1][i]” aun en la presencia de una condición de interrupción aritmética.
11.10.2 Actualización del contexto según las Figs.5o y 5p
[0267]En lo sucesivo, se describirá otra realización de la actualización del contexto tomando como referencia las Figs.5o y 5p. En el punto en el cual el valor no firmado de la 2-tupla (a,b) se decodifica completamente, el contexto q es entonces actualizado para la siguiente 2-tupla. La actualización también se efectúa sí la 2-tupla presente es la última 2-tupla. Ambas actualizaciones se efectúan por la función “arith_update_context()”, una representación del pseudocódigo del programa de la cual se muestra en la Fig.5o.
[0268]La siguiente 2-tupla de la trama se decodifica entonces incrementando en 1 y llamando la función arith_decode(). Si las 2-tuplas Ig/2 ya estaban decodificadas con la trama, o si ocurrió el símbolo de interrupción “ARITH_STOP” se llama la función “arith_finish”. El contexto es recuperado y almacenado en la matriz (o vector) “qs” para la siguiente trama. Un pseudocódigo de programa de la función “arith_save_context()” se muestra en la Fig.5p.
[0269]Una vez decodificados todos los coeficientes especiales cuantizados no firmados, entonces se agrega el signo. Por cada valor no cuantizado “qdec”, se lee un bit. Si el valor del bit leído es igual a 0, el valor cuantizado es positivo, no se hace nada y el valor firmado es igual al valor no firmado previamente decodificado. De otro modo, el coeficiente decodificado es negativo y el complemento de los dos componentes se toma del valor no firmado. Los bits firmados se leen en la frecuencia baja a alta.
11.11 Resumen del procedimiento de decodificación
[0270]En lo sucesivo, se resumirá brevemente el procedimiento de decodificación. Para los detalles se hace referencia a la discusión anteriormente y también a las Figs. 3, 4, 5a, 5c, 5e, 5g, 5j, 5k, 5l y 5m. Los coeficientes espectrales cuantizados “x_ac_dec[]” se decodifican en ruido partiendo del coeficiente de frecuencia más baja y progresando hasta el coeficiente de frecuencia más alta. Se decodifican por grupos de dos coeficientes sucesivos a,b reunidos en la llamada 2-tupla (a,b) (también designada con {a,b}).
[0271]Los coeficientes decodificados “x_ac_dec[]” para el dominio de la frecuencia (es decir para un modo en el dominio de la frecuencia) se almacenan entonces en la matriz “x_ac_quant[g][win][sfb][bin]”. El orden de transmisión de las palabras de código y codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenadas en la matriz, “bin” es el índice que se incrementa más rápidamente y “g” es el índice que se incrementa más lentamente.
Dentro de una palabra de código, el orden de decodificación es a entonces b. Los coeficientes decodificados “x_ac_dec[]” para el “TCX” (es decir para una decodificación de audio usando una excitación codificada por transformación) se almacenan (por ejemplo, directamente) en la matriz “x_tex_invquant[win][bin]” y el orden de la transmisión de las palabras de código de codificación sin ruido es tal que cuando se decodifican en el orden de un recibido y almacenadas en la matriz, “bin” es el índice que se incrementa más rápido y “win” es el índice que se incrementa más lentamente. Dentro de una palabra de código, el orden de decodificación es a, entonces b.
[0272]Primero, el indicador "arith_reset_flag" determina si debe el contexto se debe reajustar. Si el indicador es verdadero, este se considera en la función "arith_map_context".
[0273]El procedimiento de decodificación comienza con la fase de inicialización donde el vector del elemento del contexto "q" se actualiza copiando y asignando los elementos del contexto de la trama previa almacenada en "q[1][]" en "q[0][]". Los elementos del contexto dentro de "q" se almacenan en 4 bits por 2-tupla. Para los detalles, se hace referencia al pseudocódigo de programa de la Fig.5a.
[0274]El decodificador sin ruido produce 2-tuplas de coeficientes espectrales cuantizados no firmados. En primer lugar, es calculado el estado c del contexto sobre la base de los coeficientes espectrales previamente decodificados que rodean la 2-tupla a decodificar. Por lo tanto, el estado se actualiza crecientemente usando el estado del contexto de la última 2-tupla decodificada considerando únicamente dos nuevas 2-tuplas. El estado se decodifica sobre 17 bits y se retorna por la función "arith_get_context". Una representación del pseudocódigo de programa de la función "arith_get_context" se muestra en la Fig.5c.
[0275]El estado del contexto c determina la tabla de frecuencias acumulativas usada para decodificar el plano a lo largo de 2 bits más significativos m. La asignación de c al índice de la tabla de frecuencias acumulativas correspondiente "pki" se efectúa por la función "arith_get_pk()". Una representación del pseudocódigo de programa de la función "arith_get_pk()" se muestra en la Fig.5e.
[0276]El valor de m se decodifica usando la función "arith_decode()" con la tabla de frecuencias acumulativas, "arith_cf_m[pki][]", donde "pki" corresponde al índice regresado por "arith_get_pk()". El codificador (y el decodificador) aritmético es una implementación entera que usa un procedimiento de generación de etiquetas con escalamiento. El pseudocódigo de programa según la Fig.5g describe el algoritmo usado.
[0277]Cuando el valor decodificado de m es el símbolo de escape "ARITH_ESCAPE", las variables "lev" y "esc_nb" se incrementan en 1 y se decodifica otro valor de m. En este caso, se llama la función "get_pk()" una vez más con el valor "c+esc_nb<<17" como argumento de entrada, donde "esc_nb" es el número de símbolos de escape previamente decodificados por la misma dupla y limitados a 7.
[0278]Una vez que el valor de m no es el símbolo de escape "ARITH_ESCAPE", el decodificador verifica si m sucesivas forman un símbolo "ARITH_STOP". Si la condición "(esc_nb>0&&m==0)" es verdadera, el símbolo de "ARITH_STOP" se detecta y el procedimiento de decodificación finaliza. El decodificador salta directamente a la decodificación de signos descrita posteriormente. La condición significa que el resto de la trama está compuesta de valores de 0.
[0279]Si el símbolo de "ARITH_STOP" no se cumple, los planos de bits restantes se decodifican entonces, si existen, por la 2-tupla presente. Los planos de bits restantes se decodifican del nivel más significativo al menos significativo, llamando "arith_decode()" lev número de veces con la tabla de frecuencias acumulativas "arith_cf_r[]”. Los planos de bits decodificados r permiten refinar el valor previamente decodificado de m, según el algoritmo de un pseudocódigo de programa que se muestra en la Fig.5j. En este punto, el valor no firmado de la 2-tupla (a,b) se decodifica completamente. Se guarda en el elemento que contiene los coeficientes espectrales según el algoritmo, una representación de pseudocódigo de programa del cual se muestra en la Fig.5k.
[0280]El contexto "q" también se actualiza para la siguiente 2-tupla. Cabe observar que la actualización del contexto también se tiene que efectuar para la última 2-tupla. La actualización de contexto se efectúa mediante la función "arith_update_context()", una representación de pseudocódigo programa de la cual se muestra en la Fig.5I.
[0281]La siguiente 2-tupla de la primera trama se decodifica entonces incrementando i en 1 y por repitiendo el mismo procedimiento que se describió anteriormente, partiendo de la función "arith_get_context()". Cuando Ig/22-tuplas se decodifican dentro de la trama, o cuando ocurre el símbolo de interrupción "ARITH_STOP", el procedimiento de decodificación de la amplitud espectral termina y comienza la decodificación de los signos.
[0282]La decodificación se finaliza llamando la función "arith_finish()". Los coeficientes espectrales restantes se ajustan a 0. Los estados del contexto respectivos se actualizan de manera correspondiente. Una representación del pseudocódigo de programa de la función "arith_finish" se muestra en la Fig.5m.
[0283]Una vez decodificados todos los coeficientes espectrales cuantizados, se agrega el signo en consecuencia. Para cada valor cuantizado no nulo "x_ac_dec", se lee un bit. Si el valor del bit leído es igual a 1, el valor cuantizado es positivo y no se hace nada, y el valor firmado es igual al valor no firmado previamente decodificado. De otro modo, el coeficiente decodificado es negativo y se toma el complemento de los dos del valor no firmado. Los bits firmados se leen de las frecuencias baja y alta.
11.12 Leyendas
[0284]La Fig.5q muestra una leyenda de las definiciones relacionadas con los algoritmos según las Figs.5a, 5c, 5e, 5f, 5g, 5j, 5k, 5l y 5m.
[0285]La Fig.5r muestra una leyenda de las definiciones relacionadas con el algoritmo según las Figs.5b, 5d, 5f, 5h, 5i, 5n, 5o y 5p.
12. Tablas de asignación
[0286]En una realización según la invención, se utilizan tablas particularmente ventajosas "ari_lookup_m”, "ari_hash_m" y "ari_cf_m" se utilizan para la ejecución de la función "arith_get_pk()" según la Fig.5e o la Fig. 5f, y para la ejecución de la función "arith_decode()", la cual fue discutida con referencia a las Figs.5g, 5h y 5i. Sin embargo, cabe observar que se pueden usar tablas diferentes en algunas realizaciones alternativas.
12.1 Tabla "ari_hash_m[742]" según las Figs.22(1), 22(2), 22(3) y 22(4)
[0287]Un contenido de una implementación particularmente ventajosa de la tabla "ari_hash_m", la cual se usa por la función "arith_get_pk", una primera realización preferida de la cual se describió con referencia a la Fig.5e, y una segunda realización preferida de la cual se describió con referencia a la Fig.5f, se muestra en la tabla de las Figs.
22(1) a 22(4). Cabe observar que la tabla de las Figs. 22(1) a 22(4) lista las 742 entradas de la tabla (o matriz) "ari_hash_m[742]". También cabe observar que la representación en tabla de las Figs. 22(1) a 22(4) muestra los elementos en el orden de los índices del elemento, de modo que el primer valor "0x00000104UL" corresponda a una entrada de la tabla "ari_hash_m[0]" que tenga un índice de elemento (o índice de tabla) de 0, y que de modo que el último valor "0xFFFFFFOOUL" corresponda a una entrada de la tabla "ari_hash_m[741]" que tenga el índice de elemento o índice de tabla 741. Además, cabe observar que "0x" indica que las entradas de tabla de la tabla "ari_hash_m[]" están representadas en un formato hexadecimal. Además, deberá notarse aquí que el sufijo "UL" indica que las entradas de tabla de la tabla "ari_hash_m[]" están representadas como valores enteros "largos" no firmados (que tienen una precisión de 32 bits).
[0288]Además, cabe observar que las entradas de tabla de la tabla "ari_hash_m[]" según las Figs. 22(1) a 22(4) están dispuestas en un orden numérico, para permitir la ejecución de la búsqueda de la tabla 506b, 508b, 510b de la función "arith_get_pk()".
[0289]Cabe observar además que los 24 bits más significativos de las entradas de tabla de la tabla "ari_hash_m" representan ciertos valores de estado significativos (y se pueden considerar como una primera subentrada), mientras que los 8 bits menos significativos representan los valores del índice de la regla de asignación "pki" (y puede considerarse como una segunda subentrada). De este modo, las entradas de la tabla "ari_hash_m[]" describen una asignación de "golpe directo" de un valor de contexto sobre un valor del índice de la regla de asignación "pki".
[0290]Sin embargo, los 24 bits más superiores de las entradas de la tabla "ari_hash_m[]",representan al mismo tiempo, límites de intervalo de intervalos de valores de contexto numérico, con los cuales está asociado el mismo valor del índice de la regla de asignación. Los detalles con respecto a este concepto ya se han discutido anteriormente.
12.2 Tabla "ari_lookup_m" según la Fig.21
[0291]Un contenido de una realización particularmente ventajosa de la tabla "ari_lookup_m" se muestra en la tabla de la Fig.21. Cabe observar aquí que la tabla de la Fig.21 muestra las entradas de la tabla "ari_lookup_m". Las entradas son referidas por un índice de entrada del tipo entero unidimensional (también designado como "índice de elemento" o "índice de matriz" o "índice de tabla") el cual se designa, por ejemplo, con "i_max" o "i_min" o "i". Cabe observar que la tabla "ari_lookup_m", la cual comprende un total de 742 entradas, es muy adecuada para ser usada por la función "arith_get_pk" según la Fig.5e o Fig.5f. También cabe observar que la tabla "ari_lookup_m" según la Fig.21 está adaptada para cooperar con la tabla "ari_hash_m" según la Fig.22.
[0292]Cabe observar que las entradas de la tabla "ari_lookup_m[742]" se listan en un orden ascendente del índice de la tabla "i" (por ejemplo "i_min" o "i_max" o "i") entre 0 y 741. El término "0x" indica que las entradas de la tabla son descritas en un formato hexadecimal. En consecuencia, la primera entrada en la tabla "0x01" corresponde a la entrada de la tabla "ari_lookup_m[0]" que tiene un índice de tabla de 0 y la última entrada de la tabla "0x27" corresponde a la entrada de la tabla "ari_lookup_m[741]" que tiene un índice de tabla 741.
[0293]También cabe observar que las entradas de la tabla "ari_lookup_m[]" están asociados con intervalos definidos por entradas adyacentes de la tabla "arith_hash_m[]". De este modo, las entradas de la tabla "ari_lookup_m" describen valores del índice de la regla de asignación asociados con intervalos de valores del contexto numérico, donde los intervalos se definen por las entradas de la tabla "arith_hash_m".
12.3. Tabla "ari_cf_m[64][17] " según las Figs.23(1), 23(2) y 23(3)
[0294]La Fig. 23 muestra un conjunto de 64 tablas (o subtablas) de frecuencias acumulativas "ari_cf_m[pki][17]", se selecciona por un decodificador de audio 100, 700 o un decodificador de audio 200, 800, por ejemplo, para la ejecución de la función "arith_decode()", es decir, para la decodificación del valor del plano de bits más significativo más. La seleccionada de las 64 tablas (o subtablas) de frecuencias acumulativas mostradas en las Figs.23(1) a 23(4), la función de la tabla "cum_freq[]" en la ejecución de la función "arith_decode()".
[0295]Como se puede observar de las Figs. 23(1) a 23(3), cada subbloque o línea representa una tabla de frecuencias acumulativas que tiene 17 entradas. Por ejemplo, un primer subbloque o línea 2310 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki=0". Un segundo subbloque o línea 2312 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki=1". Finalmente, un 64 subbloque o línea 2364 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki=63". De este modo, las Figs.23(1) a 23(3) representan efectivamente 64 tablas (o subtablas) de frecuencias acumulativas diferentes para "pki=0" a "pki=95", donde cada una de las 64 tablas de frecuencias acumulativas es representada por un subbloque (encerrado por llaves) o línea, y donde cada una de las tablas de frecuencias acumulativas comprende 17 entradas.
[0296]Con un subbloque o línea (por ejemplo un subbloque o línea 2310 o 2312, o un subbloque o línea 2396), un primer valor (por ejemplo, un valor primer 708 de la primer subbloque 2310) describe una primera entrada de la tabla de frecuencias acumulativas (que tiene un índice de matriz o índice de tabla de 0) representada por el subbloque o línea, y un último valor (por ejemplo, un último valor de 0 para el primer subbloque o línea 2310 o) describe una última entrada de la tabla de frecuencias acumulativas (que tiene un índice de matriz o índice de tabla de 16) representado por el subbloque o línea.
[0297]En consecuencia, cada subbloque o línea 2310, 2312, 2364 de la representación en tabla de la Fig.23 representa las entradas de una tabla de frecuencias acumulativas para ser usada en la función "arith_decode" según la Fig.5g, o según las Figs.5h y 5i. La variable de entrada "cum_freq[]" de la función "arith_decode" describe cuál de las 64 tablas de frecuencias acumulativas (representadas por los bloques individuales de 17 entradas de la tabla "arith_cf_m") se deberá utilizar para usarse para la decodificación de los coeficientes espectrales actuales.
12.4 Tabla "ari_cf_r[]" según la Fig.24
[0298]La Fig.24 muestra el contenido de la tabla “ari_cf_r[]”.
[0299]Las cuatro entradas de la tabla son mostradas en la Fig.24. Sin embargo, cabe observar que la tabla "ari_cf_r" puede ser eventualmente diferente en otras realizaciones.
13. Panorama general, evaluación y ventajas de desempeño
[0300]Las realizaciones según la invención usando funciones (o algoritmos) actualizados y un conjunto actualizado de tablas, como se discutió anteriormente, para obtener un mejor intercambio entre la complejidad computacional, requisitos de memoria y eficiencia de codificación.
[0301]Hablando de manera general, las realizaciones según la invención crean una codificación espectral sin ruido mejorada. Las realizaciones según la presente invención describen una mejora de la codificación espectral sin ruido en la USAC.
[0302]Las realizaciones según la invención crean una propuesta actualizada para la CE sobre la codificación espectral sin ruido de coeficientes espectrales mejorada, basada en los esquemas presentados en los documentos de entrada MPEG m16912 y m17002. Ambas propuestas fueron evaluadas, eliminadas las desventajas potenciales y combinadas las fortalezas. Además las realizaciones de la invención comprenden una actualización de las tablas de codificación espectral sin ruido para aplicarse en una especificación USAC actual.
13.1. Perspectiva general
[0303]En lo sucesivo, se dará una perspectiva general breve. En el curso de la estandarización en curso de la USAC (codificación de voz y audio unificada), fue aprobado un esquema de codificación espectral sin ruido mejorado (esquema de codificación de entropía aka). Este esquema de codificación espectral sin ruido mejorado ayuda a codificar de manera más eficiente coeficientes espectrales cuantizados sin ruido. Por lo tanto, los coeficientes espectrales son asignados a palabras de código correspondientes de longitud variable. Este esquema de codificación de entropía se basa en un esquema de codificación aritmética basado en el contexto. El contexto (es decir, los coeficientes espectrales vecinos) de un coeficiente espectral determina una distribución de probabilidad (tabla de frecuencia acumulativa), que se usa para la codificación aritmética del coeficiente espectral.
[0304]Las realizaciones según la presente invención usan un conjunto actualizado de tablas para el esquema de codificación espectral, como se propuso anteriormente en el contexto de la USAC. Para dar sustento, cabe observar que la tecnología de codificación espectral sin ruido convencional consiste en primer lugar de un algoritmo y en segundo lugar de un conjunto de tablas entrenadas (o, al menos, comprende un algoritmo y un conjunto de tablas entrenadas). Este conjunto convencional de tablas entrenadas se basa en los flujos de bits WD4 de la USAC. Puesto que la USAC ahora ha progresado a WD7, han sido aplicados cambios significativos a la especificación de la USAC en tiempo breve, se usa un nuevo conjunto de tablas entrenadas en realizaciones según la invención, las cuales se basan en la versión más reciente de la USAC WD7. El algoritmo en sí permanece sin cambio. Como un efecto lateral, las tablas entrenadas proporcionan mejor desempeño de compresión que cualquiera de los esquemas presentados anteriormente.
[0305]Según la presente la invención, se propone reemplazar las tablas entrenadas convencionales por tablas reestrenadas como las presentadas aquí, lo cual da como resultado un incremento en el desempeño de la codificación.
13.2. Introducción
[0306]En lo sucesivo, se proporciona una introducción.
[0307]Para el elemento de trabajo de la USAC, se presentaron varias propuestas sobre la actualización del esquema de codificación sin ruido durante la última reunión en una forma colaborativa. Sin embargo, este trabajo se inició básicamente en la 89ª reunión. Desde entonces ha sido una práctica común para todas las propuestas sobre la codificación de coeficientes espectrales mostrar resultados de desempeño basados en los flujos de bits de calidad de referencia WD4 de la USAC sobre una base de datos de formación WD 4.
[0308]Mientras tanto, se han incorporado grandes mejoras a otros campos de la USAC, en particular al procesamiento y formación de ventanas estéreo, en la especificación de la USAC actual. Se encontró que esas mejoras también afectan ligeramente las estadísticas de la codificación espectral sin ruido. Los resultados mostraron que la codificación sin ruido CE se puede considerar por lo tanto como subóptima, puesto que no corresponden a la última revisión de WD.
[0309]En consecuencia, se sugirieron tablas de codificación espectral sin ruido que estén mejor adaptadas al algoritmo actualizado y a las estadísticas de los valores espectrales que se van a codificar y decodificados.
13.3. Breve descripción del algoritmo
[0310]En lo sucesivo, se proporcionará una breve descripción del algoritmo.
[0311]Para superar el problema de huella de memoria y complejidad computacional, fue propuesto un esquema de codificación sin ruido mejorado para reemplazar el esquema en el borrador de trabajo 6/7 (WD6/7). El enfoque principal en el desarrollo fue reducir la demanda de memoria manteniendo la eficiencia de compresión y no incrementar la complejidad computacional. De manera más específica, el objetivo fue alcanzar el mejor intercambio en el espacio de complejidad multidimensional de desempeño de la compresión, complejidad y requisitos de memoria.
[0312]El esquema de codificación propuesto presenta la característica principal del codificador sin ruido WD6/7, es decir, la adaptación al contexto. El contexto se deriva usando coeficientes espectrales previamente decodificados, los cuales provienen como en el WD6/7 de la trama pasada y presente. Sin embargo, los coeficientes espectrales son ahora codificados combinando 2 coeficientes juntos para formar una 2-tupla. Otra diferencia reside en el hecho de que los coeficientes espectrales son ahora divididos en tres partes, el signo, los MSB y los LSB. El signo se codifica independientemente de la magnitud que además se divide en dos partes, los dos bits más significativos y el resto de los bits si existen. Las 2-tuplas para las cuales la magnitud de los dos elementos es menor o igual a 3 se codifican directamente por la codificación de los MSB. De otro modo, se transmite una palabra código de escape primero para señalar cualquier plano de bits adicional. En la versión básica, la información ausente, los LSB y el signo son ambas codificadas usando la distribución de probabilidad uniforme.
[0313]La reducción de tamaño de la tabla es todavía posible puesto que:
• Unicamente necesitan ser almacenadas probabilidades para 17 símbolos: {[0;+3], [0;+3]} símbolo ESC; • No existe la necesidad de almacenar una tabla de agrupamiento (grupos e, grupos d, vectores dg); y • El tamaño de la tabla de búsqueda podría reducirse con un entrenamiento apropiado.
13.3.1 Codificación de los MSB
[0314]En lo sucesivo, se describirá la codificación de los MSB.
[0315]Como ya se mencionó, la diferencia principal entre la WD6/7, las propuestas anteriores y la propuesta actual, es la dimensión de los símbolos. En la WD6/7 fueron consideradas 4-tuplas para la generación del contexto y la codificación sin ruido. En presentaciones anteriores, fueron usadas 1-tuplas en su lugar para reducir los requisitos de ROM sin incrementar la complejidad computacional. En lugar de considerar cuatro 4-tuplas para la derivación del contexto, ahora se consideraron cuatro 2-tuplas. Como se muestra en la Fig.25, tres 2-tuplas provienen de la trama pasada y una de la trama actual.
[0316]La reducción del tamaño de la tabla se debe a tres factores principales. Primero, únicamente necesitan almacenarse probabilidades para 17 símbolos (es decir, {[0;+3], [0;+3]} símbolo ESC). No se necesitan ya tablas de agrupamiento (es decir, grupos e, grupos d, vectores dg). Además, el tamaño de la tabla de búsqueda se redujo efectuando una capacitación o entrenamiento apropiado.
[0317]Aunque la dimensión se redujo de 4 a 2, se mantuvo la complejidad como en el WD6/7. Esto fue logrado simplificando tanto la generación del contexto como el acceso a la tabla de búsqueda.
[0318]Las diferentes simplificaciones y optimizaciones fueron efectuadas de manera que el desempeño de la codificación no fue afectado y mejoró aun ligeramente.
13.3.2 Codificación de los LSB
[0319]Los LSB se codifican con una distribución de probabilidad uniforme. En comparación con la WD6/7, los LSB son ahora consideradas dentro de 2-tuplas en lugar de 4-tuplas. Sin embargo, es posible la diferente codificación de los bits menos significativos.
13.3.3 Codificación del signo
[0320]El signo se codifica sin usar el codificador de núcleo aritmético con el propósito de reducir la complejidad. El signo es transmitido en 1 bit únicamente cuando la magnitud correspondiente no es nula.0 significa un valor positivo y 1 un valor negativo.
13.4. Actualización de tablas propuestas
[0321]La contribución proporciona un conjunto actualizado de tablas para el esquema de codificación espectral sin ruido de la USAC. Las tablas fueron reentrenadas sobre la base de los flujos de bits de la USAC WD6/7. Además de las tablas actuales, las cuales resultan de un procedimiento de entrenamiento, el algoritmo permanece sin cambio.
[0322]Para investigar el efecto del reentrenamiento, los requisitos de eficiencia y codificación y memoria de las nuevas tablas es comparado contra la propuesta anterior (M17558) y WD6. La WD6 se selecciona como punto de referencia puesto que a) en la 92a reunión se dieron resultados con respecto a esta referencia y b) las diferencias entre WD6 y WD7 son muy pequeñas (corrección de errores únicamente, sin efecto sobre la codificación de entropía o distribución de coeficientes espectrales).
13.4.1 Eficiencia de codificación
[0323]Primero, la eficacia de codificación del nuevo conjunto de tablas propuesto es comparada contra la USAC WD6 y la CE propuesta en la M17558. Como se puede observar en la representación en tabla de la Fig.26, mediante un simple reentrenamiento del incremento promedio en la eficiencia de la codificación (en comparación con la WD6) podría incrementarse de 1,74 % (M17558) a 2,45 % (nueva propuesta, según una realización de la invención). Comparada con la M17558, la compresión podría de este modo incrementarse en aproximadamente 0,7 % en realizaciones según la invención.
[0324]La Fig. 27 visualiza la ganancia de compresión para todos los puntos de operación. Como se puede observar, puede ser alcanzada una ganancia de compresión de al menos 2 % usando las realizaciones según la invención en comparación con la WD6. Para velocidades bajas, como de 12 kbit/s y 16 kbits/s, la ganancia de compresión se incrementa aun ligeramente. El buen desempeño también es retenido a velocidades de bits más altas como 64 kbit/s, donde puede ser observado un incremento significativo en la eficiencia de la codificación de más del 3 %.
[0325]Cabe observar que la transcodificación sin ruido de todos los flujos de bits sin calidad de referencia de la WD6 probó ser posible sin violar las restricciones de reservorio de bits. En la sección 13.6 se darán resultados más detallados.
13.4.2 Demanda de memoria y complejidad
[0326]En segundo lugar, la demanda de memoria y complejidad se compararon contra la USAC WD6 y la CE propuesta en la M17558. La tabla de las Fig.28 compara la demanda de memoria para el codificador sin ruido en la WD6, propuesta en M17558 y la nueva propuesta según una realización de la invención. Como se puede observar claramente, la demanda de memoria se redujo significativamente adoptando el nuevo algoritmo, como se propone en la M17558. Además, se puede observar que para la nueva propuesta el tamaño total de la tabla podría aún reducirse ligeramente casi 80 palabras (32 bits), dando como resultado una demanda de ROM total de 1441 palabras y una demanda de RAM total de 64 palabras (32 bits) por canal de audio. El ahorro pequeño en la demanda de ROM es el resultado de un mejor intercambio entre el número de modelos de probabilidad y tamaño de la tabla de búsqueda, encontrado por el algoritmo de entrenamiento automático basado en el nuevo conjunto de flujos de bits de entrenamiento de la WD6. Para más detalles, se hace referencia a la tabla de la Fig.29.
[0327]En términos de la complejidad, la complejidad computacional de los esquemas recién propuestos fue comparada nuevamente contra una versión optimizada de la corriente sin ruido actual en la USAC. Se encontró por medio de un procedimiento "pluma y papel" instruyendo al código que el nuevo esquema de codificación tiene el mismo orden de complejidad que el esquema actual. Como se reporta en la tabla 15 para el estéreo de 32 kbps y la tabla 16 para los puntos de operación mono de 12 kbps, la complejidad estimada muestra un incremento de 0,006 MOPS ponderados y 0,024 MOPS ponderado respectivamente sobre una implementación optimizada del decodificador sin ruido WD6. En comparación con una complejidad total de aproximadamente 11,7 CPU [2], esas diferencias pueden considerarse despreciables.
13.5. Conclusión
[0328]En lo sucesivo, se proporcionarán algunas conclusiones.
[0329]Se presentó un nuevo conjunto de tablas para el esquema de codificación espectral sin ruido USAC. En contraste con la propuesta anterior, la cual es el resultado de un entrenamiento basado sobre flujos de bits más viejos, las tablas de la nueva propuesta son ahora entrenadas sobre los flujos de bits de la USAC WD, donde se ha utilizado un concepto de entrenamiento avanzado. Mediante este reentrenamiento, la eficiencia de la codificación en los flujos de bits de la USAC actual, podría mejorar, sin sacrificar la baja demanda de memoria o incrementar la complejidad en comparación con las propuestas anteriores. En comparación con USAC WD6, la demanda de memoria podría reducirse significativamente.
13.6. Información detallada sobre la transcodificación de flujos de bits de la WD6
[0330]La información detallada sobre la transcodificación de los flujos de bits del borrador de trabajo 6 (Working Draft 6, WD6) se puede observar en las representaciones en tablas de las Figs.32, 33, 34, 35 y 36.
[0331]La Fig.32 muestra una representación en las velocidades de bits promedio producidas por el codificador aritmético en una realización según la invención y en el WD6.
[0332]La Fig.33 muestra una representación en de las velocidades de bits mínima, máxima y promedio de la USAC sobre una base de trama usando el esquema propuesto.
[0333]La Fig.34 muestra una representación en de las velocidades de bits promedio producidas por un codificador de USAC usando el codificador aritmético del WD6 y un codificador según una realización según la invención ("nueva propuesta").
[0334]La Fig.35 muestra una representación en el mejor y peor de los casos para una realización según la invención.
[0335]La Fig.36 muestra una representación en de límite de reservorio de bits para una realización según la invención.
14. Cambios cuando se compara el borrador de trabajo 6 o el borrador de trabajo 7
[0336]En lo sucesivo, se describirán los cambios de la codificación sin ruido cuando se comparan con una codificación sin ruido convencional. En consecuencia, una realización se define en términos de las modificaciones cuando se compara con el borrador de trabajo 6 o borrador de trabajo 7 del borrador USAC estándar.
[0337]En particular, se describirán los cambios al texto de WD. En otras palabras, esta sección lista el conjunto completo de cambios contra el WD7 de la especificación de la USAC.
14.1. Cambios a la descripción técnica
[0338]La nueva codificación sin ruido propuesta genera las modificaciones en el MPEG USAC WD que se describirán en lo sucesivo. Se marcaron las diferencias principales.
14.1.1. Cambios de la sintaxis y la carga útil
[0339]La Fig. 7 muestra una representación de una sintaxis de los datos codificados aritméticamente "arith_data()". Se marcaron las diferencias principales.
[0340]En lo sucesivo, se describirán los cambios con respecto a las cargas útiles del codificador espectral sin ruido.
[0341]Los coeficientes espectrales de ambas señales codificadas en el "dominio de predicción lineal" y la señal codificada en el "dominio de la frecuencia" son cuantizados escalarmente y entonces codificados sin ruido por una codificación aritmética dependiente del contexto, de manera adaptable. Los coeficientes cuantizados son reunidos en 2-tuplas antes de ser transmitidos de la frecuencia más baja a la frecuencia más alta. Cabe observar que el uso de 2-tuplas constituye un cambio cuando se compara con las versiones anteriores de la codificación espectral sin ruido.
[0342]Sin embargo, un cambio mayor es que cada 2-tupla se divide en el signo s, el plano a lo largo de 2 bits más significativos, m, y los planos de bits menos significativos restantes, r. También, es un cambio que el valor de m se codifica según la cercanía del coeficiente y los planos de bits menos significativos restantes, r, se codifican por entropía sin considerar el contexto. También, es un cambio con respecto a algunas versiones anteriores que los valores de m y r de los símbolos del codificador aritmético. Finalmente, es un cambio con respecto a algunas de las versiones anteriores que los signos s se codifican fuera del codificador aritmético usando 1 bit por coeficiente cuantizado no nulo.
[0343]Un procedimiento de decodificación aritmética detallado se describe más adelante en la sección 14.2.3.
14.1.2 Cambios de las definiciones y elementos auxiliares
[0344]Los cambios a las definiciones y elementos auxiliares se muestran en la representación de las definiciones y elementos auxiliares en la Fig.38.
14.2 Codificación espectral sin ruido
[0345]En lo sucesivo, se resumirá la codificación espectral sin ruido según una realización.
14.2.1 Descripción de la herramienta
[0346]La codificación espectral sin ruido se usa para reducir aún más la redundancia del espectro cuantizado.
[0347]El esquema de codificación espectral sin ruido se basa en una codificación aritmética en conjunto con un contexto adaptado dinámicamente. La codificación sin ruido es alimentada por los valores espectrales cuantizados y usa tablas de frecuencias acumulativas dependientes del contexto derivadas de cuatro vecinas previamente decodificadas. Aquí, la vecindad tanto en el tiempo como la frecuencia es tomada en consideración, como se ilustra en la Fig.25. Las tablas de frecuencias acumulativas se usan entonces por el codificador aritmético para generar un código binario de longitud variable.
[0348]El codificador aritmético produce un código binario para un conjunto dado de símbolos y sus probabilidades respectivas. El código binario se genera asignando un intervalo de probabilidad, donde el conjunto de símbolos se encuentra, a una palabra de código.
14.2.2 Definiciones
[0349]Las definiciones y elemento auxiliares se describen en la Fig.39. Se marcaron los cambios cuando se compararon con versiones previas de la codificación aritmética.
14.2.3 Procedimiento de decodificación
[0350]Los coeficientes espectrales cuantizadosqdecse decodifican sin ruido partiendo del coeficiente de frecuencia más baja y progresando hacia el coeficiente de frecuencia más alta. Ellos se decodifican por grupos de dos coeficientes sucesivos a y b reunidos en una llamada 2-tupla {a, b}.
[0351]Los coeficientes decodificados para AAC se almacenan entonces en la matrizx_ac_quant[g][win][sfb][bin]. El orden de transmisión de las palabras de código de codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenadas en la matriz,bines el índice que se incrementa más rápidamente yges el índice que se incrementa más lentamente. Dentro de una palabra de código el orden de decodificación esay entoncesb.
[0352]Los coeficientes decodificados para TCX se almacenan en la matrizx_tcx_invquant[win][bin]y el orden de la transmisión de las palabras de código codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenadas en la matriz,bines el índice que se incrementa más rápidamente ywines el índice que se incrementa más lentamente. Dentro de una palabra de código el orden de decodificación esay entoncesb.
[0353]El procedimiento de decodificación comienza con una fase de inicialización donde se efectúa una asignación entre el contexto basado recuperado almacenado enqsy el contexto de la trama actualq. El contexto pasadoqsse almacena en 2 bits por línea de frecuencia.
[0354]Para los detalles, se hace referencia a la representación de pseudocódigo de programa del algoritmo "arith_map_context" en la Fig.40a.
[0355]El decodificador sin ruido produce 2-tuplas de coeficientes espectrales cuantizados no firmados. En primer lugar, se calcula el estado c del contexto sobre la base de los coeficientes espectrales previamente decodificados que rodean la 2-tupla que se va a decodificar. El estado se actualiza de manera creciente usando el estado del contexto de la última 2-tupla decodificada considerando únicamente dos nuevas 2-tuplas. El estado se decodifica sobre 17 bits y se devuelve por la funciónarith_get_context().
[0356]Una representación del pseudocódigo de programa de la función "arith_get_context()" se muestra en la Fig.40b.
[0357]Una vez calculado el estado del contexto c, el plano a lo largo de 2 bits más significativos m, se decodifica usando laarith_decode()alimentada con la tabla de frecuencias acumulativas apropiada correspondiente para al modelo de probabilidad que corresponda al estado del contexto. La correspondencia se efectúa por la funciónarith_get_pk().
[0358]Una representación del pseudocódigo de programa de la función arith_get_pk() se muestra en la Fig. 40c.
[0359]El valor de m se decodifica usando la funciónarith_decode()llamada con la tabla de frecuencias acumulativas,arith_cf_m[pki][], dondepkicorresponde al índice regresado porarith_get_pk(). El codificador aritmético es una implementación entera que usa el procedimiento de generación de etiqueta con escalamiento. El pseudocódigo c mostrado en las Figs.40d y 40e describe el algoritmo usado.
[0360]Cuando el valor de m decodificado es el símbolo de escape,ARITH_ESCAPE, las variables lev yesc_nbse incrementan en uno y se decodifica otro valor de m. En este caso, se llama la funciónget_pk()una vez más con el valorc&esc_nb<<17como argumento de entrada, dondeesc_nbes el número de símbolos de escape previamente decodificados por la misma 2-tupla y limitados a 7.
[0361]Una vez que el valor de m no es el símbolo de escape,ARITH_ESCAPE, el decodificador verifica si las m sucesivas forman un símbolo ARITH_STOP. Si la condición (esc_nb>0&&m==0) es verdadera, se detecta el símbolo ARITH_STOP y el procedimiento de decodificación finaliza. El decodificador salta directamente a la funciónarith_save_context(). La condición significa que el resto de la trama está compuesta de valores de cero.
[0362]Si el símbolo ARITH_STOP no se cumple, los planos de bits restantes se decodifican si existen para la 2-tupla presente. Los planos de bits restantes se decodifican del nivel más significativo al menos significativo llamando lev vecesarith_decode()con la tabla de frecuencias acumulativasarith_cf_r[]. Los planos de bits decodificados r permiten refinar el valor de m previamente decodificado por la función o algoritmo la representación del pseudocódigo de programa de la cual se muestra en la Fig.40f.
[0363]En este punto, el valor no firmado de la 2-tupla {a, b} se decodifica completamente. El contexto q es entonces actualizado para la siguiente 2-tupla. Si es la última 2-tupla, también. Ambas actualizaciones se efectúan por la funciónarith_update_context(), una representación del pseudocódigo de programa de la cual se muestra en la Fig. 40g.
[0364]La siguiente 2-tupla de la trama se decodifica entonces incrementando en uno y llamando a la función. Si ya estaba decodificada la 2-tupla Ig/2 con la trama o si ocurrió el símbolo de interrupción ARITH_STOP, se llama la función arith_save_context(). El contexto es salvaguardado y almacenado en qs para la siguiente trama. Una representación del pseudocódigo de programa para la función o algoritmo arith_save_context() se muestra en la Fig.40h.
[0365]Una vez decodificados todos los coeficientes espectrales cuantizados no firmados, entonces se agrega el signo. Para cada valor cuantizado no nulo deqdecse lee un bit. Si el valor del bit leído es igual a cero, el valor cuantizado es positivo, no se hace nada y el valor firmado es igual al valor no firmado previamente decodificado. De otro modo, el coeficiente decodificado es negativo y se toma el complemento de los del valor no firmado. Los bits de signos se leen de la frecuencia baja a la alta.
14.2.4 Tablas actualizadas
[0366]Un conjunto de tablas reentrenadas para usarse con los algoritmos descritos anteriormente se muestra en las Figs.41(1), 41(2), 42(1), 42(2), 42(3), 42(4), 43(1), 43(2), 43(3), 43(4), 43(5), 43(6) y 44.
Las Figs.41(1) y 41(2) muestran una representación en tabla de un contenido de una tabla "ari_lookup_m[742]", según una realización de la invención;
Las Figs.42(1),(2),(3),(4) muestran una representación en tabla de un contenido de una tabla "ari_hash_m [742]", según una realización de la invención;
Las Figs. 43(1),(2),(3),(4),(5),(6) muestran una representación en tabla de un contenido de una tabla "ari_cf_m[96][17]", según una realización de la invención; y
La Fig.44 muestra una representación en tabla de una tabla "ari_cf_r[4]”, según una realización de la invención.
[0367]Para resumir lo anterior, se puede observar que realizaciones según la presente invención proporcionan un intercambio particularmente bueno entre la complejidad computacional, requisitos de memoria y eficiencia de la codificación.
15. Sintaxis del flujo de bits
15.1 Cargas útiles del codificador espectral sin ruido
[0368]En lo sucesivo, se describirán algunos detalles con respecto a las cargas útiles del codificador espectral sin ruido. En algunas realizaciones, existe una pluralidad de diferentes modos de codificación, como, por ejemplo, el llamado modo de codificación en el “dominio de predicción lineal” y un modo de codificación en el “dominio de la frecuencia”. En el modo de codificación en el dominio de predicción lineal, se efectúa una formación de ruidos sobre la base de un análisis de predicción lineal de la señal de audio y se codifica una señal formada por el dominio de la frecuencia. En el modo de codificación en el dominio de la frecuencia se efectúa una formación de ruidos sobre la base de un análisis psicoacústico y una versión formada por ruido de contenido de audio se codifica en el dominio de la frecuencia.
[0369]Los coeficientes espectrales para ambas de las señales codificada en el “dominio de predicción lineal” y la señal codificada en el “dominio de la frecuencia” son cuantizadas escalarmente y entonces codificadas sin ruido por una codificación aritmética dependiente del contexto, de manera adaptable. Los coeficientes de cuantización son reunidos en 2-tuplas antes de ser transmitidos de la frecuencia más baja a la frecuencia más alta. Cada 2-tupla está dividida en un signo s, el plano a lo largo de 2 bits más significativo m, y el resto de uno o más planos de bit menos significativos r (sí existen). El valor de m se codifica según un contexto definido por coeficientes espectrales vecinos. En otras palabras, m se codifica según los coeficientes vecinos. Los planos de bit menos significativos restantes r se codifican por entropías sin considerar el contexto. Por medio de m y r, la amplitud de esos coeficientes espectrales puede ser reconstruida sobre el lado del decodificador. Para todos los símbolos no nulos, los signos m se codifican fuera del codificador aritmético usando un bit. En otras palabras, m y r forman los símbolos del codificador aritmético. Finalmente, los signos s se codifican fuera del codificador aritmético usando un bit por coeficiente cuantizado no nulo.
[0370]El procedimiento de codificación aritmética detallado se describe en esta invención.
15.2 Elementos de la sintaxis según las Figs.6a a 6i
[0371]En lo sucesivo, se describirá la sintaxis del flujo de bits de un flujo de bits que transporta la información espectral codificada aritméticamente tomando como referencia las Figs.6a a 6j.
[0372]La Fig. 6a muestra una representación de la sintaxis del llamado bloque de datos sin tratar USAC (“usac_raw_data_block()”.
[0373]El bloque de datos sin tratar USAC comprende uno o más elementos de canal individuales (“single_channel_element()”) y/o uno o más elementos de pares de canales (“channel_pair_element()”).
[0374]Tomando ahora como referencia la Fig. 6b, se describe la sintaxis del elemento de un solo canal. El elemento de un solo canal comprende un flujo de canal en el dominio de predicción lineal (“lpd_channel_stream()”) o un flujo de canal en el dominio de la frecuencia (“fd_channel_stream()”) dependiendo del modo central.
[0375]La Fig.6c muestra una representación de la sintaxis de un elemento de un par de canales. Un elemento de un par de canales comprende información del modo central (“core_mode0”, “core_mode1). Además, el elemento del par de canales puede comprender una información de configuración “ics_info()”. Adicionalmente, dependiendo de la información del modo central el elemento del par de canales comprende un flujo de canal en el dominio de predicción lineal o un flujo de canal en el dominio de la frecuencia asociado con uno primero de los canales y el elemento del par de canales también comprende un flujo de canal en el dominio de predicción lineal o un flujo de canal en el dominio de la frecuencia asociado con uno segundo de los canales.
[0376]La información de configuración “ics_info()”, una representación de la sintaxis de la cual se muestra en la Fig.6d, comprende una pluralidad de diferentes elementos de información de configuración, los cuales no son de relevancia en particular para la presente invención.
[0377]Un flujo de canal en el dominio de la frecuencia (“fd_channel_stream()”), una representación de la sintaxis el cual se muestra en la Fig.6e, comprende una información de ganancias (“global_gain”) y una información de configuración (“ics_info()”). Además, el flujo del canal en el dominio de la frecuencia comprende datos de factor de escala (“scale_factor_data()”), los cuales describen los factores de escala usados para el escalamiento de valores espectrales de diferentes bandas de factor de escala, y que son aplicados, por ejemplo, el sellador 150 y el sellador 240. El flujo del canal en el dominio de la frecuencia también comprende datos espectrales codificados aritméticamente (“ac_spectral_data()”), los cuales representan valores espectrales codificados aritméticamente.
[0378]Los datos espectrales codificados aritméticamente “ac_spectral_data()”), una representación de la sintaxis como se muestra en la Fig.6f, comprenden un indicador de reajuste aritmético opcional (“arith_reset_flag”), el cual se usa para el reajuste selectivo del contexto, como se describió anteriormente. Además, los datos espectrales codificados aritméticamente comprenden una pluralidad de bloques de datos aritméticos (“arith_data”), los cuales contienen los valores espectrales codificados aritméticamente. La estructura de los bloques de datos codificados aritméticamente depende del número de bandas de frecuencia (representadas por la variable num_bands”) y también del estado del indicador del reajuste aritmético, como se discutirá en lo sucesivo.
[0379]En lo sucesivo, se describirá la estructura del bloque de datos codificados aritméticamente tomando como referencia la Fig. 6g, la cual muestra una representación de la sintaxis de los bloques de datos codificados aritméticamente. La representación de datos dentro del bloque de datos codificados aritméticamente depende del número Ig de valores espectrales que se van a codificar, el estado del indicador de reajuste aritmético y también del contexto, es decir los valores espectrales previamente codificados.
[0380]El contexto para la codificación del conjunto actual (por ejemplo, 2-tupla) de valores espectrales se determina según el algoritmo de determinación del contexto mostrado en el número de referencia 660. Los detalles con respecto al algoritmo de determinación de contexto ya han sido explicados anteriormente, tomando como referencia las Figs.5a y 5b. El bloque de datos codificados aritméticamente comprende 1g/2 conjuntos de palabras de código, representando cada conjunto de palabras de código una pluralidad (por ejemplo, una 2-tupla) de valores espectrales. Un conjunto de palabras de código comprende una palabra de código aritmética “acod_m[pki][m]” representa un valor del plano de bit más significativo m de la tupla de valores espectrales usando entre 1 y 20 bits. Además, el conjunto de palabras de código comprende una o más palabras de código “acod_r[r]” si la tupla de valores espectrales requiere más planos de bit más significativos para una representación correcta. La palabra de código “acod_r[r]” representa un plano de bits menos significativos que usa entre 1 y 14 bits.
[0381]Si, sin embargo, se requiere uno o más planos de bit menos significativo (además del plano de bit más significativo) para una representación apropiada para los valores espectrales, esto es señalando usando una o más palabras de código de escape (“ARITH_ESCAPE”). De este modo, puede decirse de manera general que para un valor espectral, se determina cuantos planos de bits (el plano de bit menos significativo, posiblemente, uno o más planos de bit menos significativo adicionales) son requeridos. Si se requiere uno o más planos de bit menos significativo, esto es señalado por una o más palabras de código de escape aritmético “acod_m[pki][ARITH_ESCAPE]”, las cuales se codifican según una tabla de frecuencias acumulativas actualmente seleccionadas, un índice de tabla de frecuencias acumulativas de la cual es proporcionado por la variable “pki”. Además, el contexto está adaptado, como se puede observar en los números de referencia 664, 662, sí una o más de las palabras de código de escape aritméticas se incluyen en el flujo de bits. Después de una o más palabras de código de escape aritmético se incluye una palabra de código aritmética “acod_m[pki][m]” en el flujo de bit como se muestra en el número de referencia 663, donde “pki” designa el índice del modelo de probabilidad actualmente valido (tomando en consideración la adaptación del contexto causada por la inclusión de las palabras de código de escape aritmético) y donde m designa el valor del plano de bit de más significativos del valor espectral que se van a codificar o decodificado (donde m es diferente de la palabra de código “ARITH_ESCAPE”).
[0382]Como se discutió anteriormente, la presencia de cualquier plano de bit menos significativo da como resultado la presencia de una o más palabras de código “acod_r[r]”, cada una de las cuales representa un 1bit de plano menos significativos de un primer valor espectral en cada uno de los cuales también representa un 1bit del plano menos significativos de un segundo valor espectral. Una o más palabras de código “acod_r[r]” se codifican según una tabla de frecuencias acumulativas correspondientes, la cual puede, por ejemplo, ser constante y depender del contexto. Sin embargo, son posibles diferentes mecanismos para la selección de la tabla de frecuencias acumulativas para la decodificación de una o más palabras de código “acod_r[r]”.
[0383]Además, cabe observar que el contexto se actualiza después de la codificación de cada tupla de valores espectrales, como se muestra en el número de referencia 668, de modo que el contexto sea diferente para la codificación y decodificación de dos tuplas subsecuentes de valores espectrales.
[0384]La Fig. 6i muestra una leyenda de las definiciones y elementos auxiliares que definen la sintaxis del bloque de datos codificados aritméticamente.
[0385]Además, una sintaxis alternativa de los datos aritméticos “arith_data()” se muestra en la Fig. 6h, con una leyenda correspondiente de las definiciones y elementos auxiliares mostrados en la Fig.6j.
[0386]Para resumir lo anterior, se ha descrito un formato de flujo de bit lo cual puede ser proporcionado por el codificador de audio 100 y que puede ser evaluado por el decodificador de audio 200. El flujo de bit de los valores espectrales codificados aritméticamente se codifica de modo que se ajuste al algoritmo de decodificación discutido anteriormente.
[0387]Además, cabe observar de manera general que la codificación es la operación inversa de la decodificación de modo que asumirse de manera general el codificador efectúa una búsqueda en la tabla usando las tablas discutidas anteriormente, la cual es aproximadamente inversa a la búsqueda de tabla efectuada por el decodificador. De manera general, puede decirse que un experto en la técnica que conozca el algoritmo de decodificación y/o la sintaxis del flujo de bits deseada fácilmente podrá diseñar un codificador aritmético, el cual proporciona los datos definidos en la sintaxis del flujo de bits requeridos por un decodificador aritmético.
[0388]Además, cabe observar que los mecanismos para determinar el valor del contexto numérico actual y para derivar un valor del índice de la regla de asignación pueden ser idénticos en un codificador de audio y en un decodificador de audio, debido a que típicamente se desea que el decodificador de audio use el mismo contexto que el codificador de audio, de modo que la decodificación se adapte a la codificación.
15.3. Elementos de sintaxis según las Figs.6k, 6l, 6m, 6n, 6o y 6p
[0389]En lo sucesivo, se describirá un extracto de una sintaxis de flujo de bit alternativa, tomando como referencia las Figs.6k, 6l, 6m, 6n, 6o y 6p.
[0390]La Fig.6k muestra una representación de la sintaxis de un elemento del flujo de bits “UsacSingleChannelElement(indepFlag)”. El elemento de la sintaxis “UsacSingleChannelElement(indepFlag)” comprende un elemento de sintaxis “UsacCoreCoderData” que describe un canal del codificador central.
[0391]La Fig.6l muestra una representación de la sintaxis de un elemento del flujo de bits “UsacSingleChannelPairElement(indepFlag)”. El elemento de la sintaxis “UsacSingleChannelPairElement(indepFlag)” comprende una sintaxis “UsacCoreCoderData” que describe uno o más canales del codificador central, dependiendo de la configuración estéreo.
[0392]La Fig.6m muestra una representación de la sintaxis de un elemento del flujo de bits “ics_info()” que comprende definiciones un número de parámetros, como se puede observar en la Fig.6m.
[0393]La Fig.6n muestra una representación de la sintaxis de un elemento del flujo de bits “UsacCoreCoder-Data()”. El elemento del flujo de bits “UsacCoreCoderData()” comprende uno o más flujos del canal del dominio de predicción lineal “lpd_channel_stream()” y/o uno o más flujo del canal en el dominio de la frecuencia “fd_channel_stream()”. También puede ser incluida alguna u otra información de control opcionalmente en el elemento del flujo de bits “UsacCoreCoderData()”, como se puede observar en la Fig.6n.
[0394]La Fig. 6o muestra una representación de la sintaxis de un elemento del flujo de bits “fd_channel_stream()”. El elemento del flujo de bits “fd_channel_stream()” comprende, entre otros elementos opcionales del flujo de bits, un elemento del flujo de bits “scale_factor_data()” y un elemento del flujo de bits “ac_spectral_data()”.
[0395]La Fig. 6p muestra una representación de la sintaxis de un elemento del flujo de bits “ac_spectral_data()”.El elemento del flujo de bits “ac_spectral_data()” opcionalmente comprende un elemento del flujo de bits “arith_reset_flag”. Además, el elemento del flujo de bits también comprende un número de datos codificados aritméticamente “arith_data()”. Los datos codificados aritméticamente pueden, por ejemplo, seguir la sintaxis del flujo de bits descrita con referencia a la Fig.6g.
16. Alternativas de implementación
[0396]Aunque se han descrito algunos aspectos en el contexto de un aparato está claro que esos aspectos también representan una descripción del procedimiento correspondiente, donde un procedimiento de dispositivo corresponde a una etapa del procedimiento o una trama de la etapa del procedimiento. De manera análoga los aspectos descritos en el contexto de una etapa de procedimiento también representan una descripción de un bloque o elemento o característica correspondiente de un aparato correspondiente. Algunos o todas las etapas del procedimiento pueden ser ejecutados por (o usando) un aparato de hardware, como por ejemplo un microprocesador, un ordenador programable o un circuito electrónico. En algunas realizaciones, algunas o más de las etapas del procedimiento más importantes pueden ser ejecutados por ese aparato.
[0397]La señal de audio codificada por la invención se puede almacenar en un medio de almacenamiento digital o puede ser transmitida sobre un medio de transmisión como un medio de transmisión inalámbrica o un medio de transmisión alámbrica tal como Internet.
[0398]Dependiendo de ciertos requisitos de implementación, las realizaciones de la invención se pueden implementar en hardware o software. La implementación se puede efectuar usando un medio de almacenamiento digital, como por ejemplo un disco flexible, un DVD, un Blue Ray, un CD, una ROM, una PROM, una EPROM, una EEPROM, o una FLASH, que tenga señales de control legibles electrónicamente almacenadas en él, que cooperen (o sean capaces de cooperar) con un sistema de ordenador programable de modo que se ha efectuado el procedimiento respectivo. Por lo tanto, el medio de almacenamiento digital puede ser legible por un ordenador.
[0399]Algunas realizaciones según la invención comprenden un portador de datos que tienen señales de control legibles electrónicamente, los cuales son capaces de cooperar con un sistema de ordenador programable, de modo que se ha efectuado uno de los procedimientos descritos en esta invención.
[0400]De manera general, las realizaciones de la presente invención se pueden implementar como un producto de programa informático con un código de programa operando el código de programa para efectuar uno de los procedimientos donde el producto de programa informático se ejecute en un ordenador. El código del programa se puede almacenar por ejemplo en un soporte legible por una máquina.
[0401]Otras realizaciones comprenden el programa informático para efectuar uno o más de los procedimientos descritos en esta invención, almacenados en un soporte legible por una máquina.
[0402]En otras palabras, una realización del procedimiento de la invención es, por lo tanto, un programa informático que tiene un programa informático para efectuar uno de los procedimientos descritos aquí, cuando el programa informático se ejecuta en un ordenador.
[0403]Una realización más de los procedimientos de la invención es, por lo tanto, un soporte portador de datos (o un medio de almacenamiento digital, o un medio legible por ordenador) comprendiendo, dado en el, programa informático para efectuar uno de los procedimientos descritos aquí. El soporte o portador de datos, el medio de almacenamiento digital o el medio grabado son típicamente tangibles y/o no transitorios.
[0404]Una realización del procedimiento de la invención es, por lo tanto, un flujo de datos o una secuencia de señales o representan el programa informático para efectuar uno de los procedimientos descritos en esta invención. El flujo de datos de secuencia de señales se puede configurar por ejemplo para ser transferido vía una conexión de comunicación de datos, por ejemplo, vía Internet.
[0405]Una realización adicional comprende medios de procesamiento, por ejemplo, un ordenador, o un dispositivo lógico programable configurado para o adaptado para efectuar uno de los procedimientos descritos en esta invención.
[0406]Una realización adicional comprende un ordenador que tiene instalado en él el programa informático para efectuar uno de los procedimientos descritos en esta invención.
[0407]Una realización adicional comprende un aparato o un sistema configurado para transmitir (por ejemplo, electrónica u ópticamente) un programa informático para efectuar uno de los procedimientos descritos en esta invención a un receptor. El receptor puede, por ejemplo, ser un ordenador, un dispositivo móvil, un dispositivo de memoria o similar. El aparato o sistema puede comprender, por ejemplo, un servidor de archivos para transmitir el programa informático al receptor.
[0408]En algunas realizaciones, se puede usar un dispositivo lógico programable (por ejemplo, una matriz de compuertas programable en el campo) para efectuar una o todas las funcionalidades del procedimiento descrito en esta invención. En algunas realizaciones la matriz de compuertas programable en el campo puede comparar un microprocesador para efectuar uno de los procedimientos descritos en esta invención. De manera general, los procedimientos se efectúan preferiblemente por un aparato de hardware.
[0409]Las realizaciones descritas anteriormente son meramente ilustrativas de los principios de la presente invención. Deberá comprenderse que las modificaciones y variaciones de las matrices y detalles descritos aquí serán evidentes aquellos expertos en la técnica. Se pretende, por lo tanto, ser limitados únicamente por el alcance de las reivindicaciones de la patente y no por los detalles específicos presentados a modo de descripción de las realizaciones de la presente invención.
17. Conclusiones
[0410]Para concluir, las realizaciones según la invención comprenden uno o más de los siguientes aspectos, donde los aspectos se pueden utilizar individualmente o en combinación.
a) Un mecanismo de búsqueda del estado del contexto
[0411]Según un aspecto, los estados del contexto en la tabla de búsqueda son considerables como estados significativos y limites grupales. Esto permite reducir significativamente el tamaño de las tablas requeridas.
b) Actualización creciente del contexto
[0412]Según un aspecto, algunas realizaciones comprenden una forma computacionalmente eficiente para actualizar el contexto. Algunas realizaciones usan una actualización de contexto creciente en la cual el valor del contexto numérico se deriva de un valor de un contexto numérico previo.
c) Derivación del contexto
[0413]Según un aspecto, el uso de la suma de dos valores espectrales absolutos es la asociación de una truncación. Esta es un tipo de cuantización de vector de ganancia de los coeficientes espectrales (en oposición a la cuantización del vector de ganancia de forma convencional). Su objetivo es limitar el orden del contexto, llevando a la vez la información más significativa desde la vecindad.
d) Tablas actualizadas
[0414]Según un aspecto de la invención, son aplicadas las tablas optimizadas ari_hash_m[742], ari_lookup_m[742] y ari_cf_m[64][17], las cuales proporcionan un compromiso particularmente bueno entre la eficiencia de la codificación y la complejidad computacional.
[0415]Algunas otras tecnologías son descritas las solicitudes de patentes PCT EP2010/065725, PCT EP2010/065726, y PCT EP2010/065727. Además, en algunas realizaciones según la invención, se usa un símbolo de interrupción. Además, en algunas realizaciones, únicamente son considerados valores no firmados para el contexto.
[0416]Por ejemplo, una identificación de una región de cero se usa en algunas realizaciones.
[0417]En consecuencia, se ajusta un llamado “small-value-flag” (por ejemplo, 16 bit del valor del contexto numérico actual c).
[0418]En algunas realizaciones, se puede usar el cálculo del contexto dependiente de la región. Sin embargo, en otras realizaciones, puede ser omitido un cálculo del contexto dependiente de la región para conservar la complejidad y el tamaño de las tablas razonablemente pequeñas.
[0419]Además, el uso de la búsqueda de contexto usando una función de búsqueda es un aspecto importante.
[0420]La búsqueda del contexto puede basarse en el contexto de dos tablas el cual se describe en las solicitudes de patentes Internacionales prepublicadas referidas anteriormente. Sin embargo, se pueden usar adaptaciones específicas de la búsqueda del contexto en algunas realizaciones para incrementar la eficiencia computacional. No obstante, en algunas otras realizaciones, se puede usar la búsqueda del contexto que se describe en las solicitudes de patentes Internacionales referidas anteriormente.
[0421]Además, cabe observar que la búsqueda reciente del contexto es más simple y computacionalmente eficiente. También, la independencia del contexto del signo de los valores, ayuda a simplificar el contexto, manteniendo por lo tanto los requisitos de memoria razonablemente bajos.
[0422]En algunas realizaciones se usa una derivación de contexto usando la suma de dos valores espectrales y una limitación del contexto. Esos dos aspectos se pueden combinar. Tanto como el propósito de eliminar el orden del contexto como de llevar la información más significativa desde la vecindad.
[0423]En algunas realizaciones, se usa un indicador de valor pequeño el cual puede ser similar a una identificación de un grupo de una pluralidad de valores cero.
[0424]En algunas realizaciones, se usa un mecanismo de interrupción aritmética. El concepto es similar al uso de un símbolo “end-of-block” en JPEG, el cual tiene una nueva función comparar. Sin embargo, en algunas realizaciones de la invención, el símbolo (“ARITH_STOP”) no se incluye explícitamente en el codificador de entropía. En su lugar, se usa una combinación de símbolos ya existentes, que no podría ocurrir previamente, es decir “ESC+0”. En otras palabras, el decodificador de audio se configura para detectar una combinación de símbolos existentes, los cuales normalmente no se utilizan para representar un valor numérico y para interpretar la ocurrencia de esa combinación de símbolos ya existentes con una condición de interrupción aritmética.
[0425]Una realización usa un mecanismo de búsqueda de contexto de dos tablas.
[0426]Para resumir aún más, algunas realizaciones según la invención pueden comprender uno o más de los siguientes cinco aspectos principales.
� tablas mejoradas;
� contexto extendido para detectar regiones de cero o regiones de amplitud pequeña en la vecindad;
� búsqueda de contexto;
� generación del estado del contexto: actualización creciente del estado del contexto; y
� derivación del contexto: cuantización específica de los valores del contexto incluyendo la suma de amplitud sin limitaciones.
[0427]Para concluir aún más, un aspecto de las realizaciones recibe en la actualización reciente del contexto. Las realizaciones comprenden un concepto eficiente para la actualización del concepto, lo cual evita los cálculos extintivos del borrador de trabajo (por ejemplo, del borrador de trabajo 5). En su lugar, se utilizan operaciones de desplazamiento y operaciones lógicas simples en algunas realizaciones. La actualización de contexto simple facilita el cálculo del contexto significativamente.
[0428]En algunas realizaciones, el contexto depende del signo de los valores (por ejemplo, los valores espectrales decodificados). Esta dependencia del contexto del signo los valores conllevan una complejidad reducida del contexto variable. Este concepto se basa en el descubrimiento de que despreciar el signo en el contexto no conlleva una degradación severa de la eficiencia de la codificación.
[0429]Según un aspecto, el contexto se deriva usando la suma de dos valores espectrales. En consecuencia, los requisitos de memoria para el almacenamiento del contexto se reducen significativamente. En consecuencia, el uso de un valor de contexto, el cual representa la suma de dos valores espectrales, se puede considerar con una ventaja en algunos casos.
[0430]También, la limitación del contexto conlleva una mejora significativa en algunos casos. Además de la derivación del contexto que usa la suma de dos valores espectrales, las entradas de la matriz del contexto “q” no se limitan al valor por máximo “0xF” en algunas realizaciones, lo cual a su vez da como resultado una limitación de los requisitos de memoria. Esta limitación de los valores de la matriz del contexto “q” proporciona en algunas ventajas.
[0431]En algunas realizaciones, se usa el llamado “indicador de valor pequeño”. La obtención de la variable de contexto c (la cual también es designada como un valor del contexto numérico actual), se coloca un indicador sí los valores de algunas entradas “q[1][i-3]” a “q[1][i-1]” son muy pequeñas. En consecuencia, el cálculo del contexto se puede efectuar con una alta eficiencia. Puede ser obtenido un valor de contexto obtenido particularmente significativo (por ejemplo, el valor del contexto numérico actual).
[0432]En algunas realizaciones, son usados un mecanismo de interrupción aritmética. El mecanismo “ARITH_STOP” proporciona una interrupción eficiente de la codificación o decodificación aritmética únicamente existen valores de cero a la izquierda. En consecuencia, la eficiencia de la codificación puede ser moderada a costes moderados en términos de la complejidad.
[0433]Según un aspecto, se usa un mecanismo de búsqueda de contexto de dos tablas. La asignación del contexto se efectúa usando un algoritmo de división de intervalo que evalúa la tabla “ari_hash_m” en combinación con la evaluación de la tabla de búsqueda subsiguiente de la tabla “ari_lookup_m”. Este algoritmo es más eficiente que el algoritmo de WD3.
[0434]En lo sucesivo, se discutirán algunos detalles adicionales.
[0435]Cabe observar aquí que las tablas “arith_hash_m[742]” y "arith_lookup_m[742]" son dos tablas distintas. La primera se usa para asignar un sólo índice de contexto (por ejemplo, el valor del contexto numérico) a un índice de modelo de probabilidad (por ejemplo, el valor del índice de la regla de asignación) el segundo se usa para asignar un grupo de contexto consecutivos delimitado por los índices de contexto en “arith_hash_m[]”, en un solo modelo de probabilidad.
[0436]Cabe observar además que la tabla “arith_cf_m se[64][16]” se puede usar como una alternativa a la tabla “ari_cf_m[64][17]”, aun cuando las dimensiones se han ligeramente diferentes. “ari_cf_m[][]” y “ari_cf_msb[][]” puede referirse por la misma tabla, puesto que los 17<m°>coeficiente de los modelos de probabilidad son siempre cero. Esto algunas veces no se toma en cuenta cuando se considera el espacio requerido para el almacenamiento de las tablas.
[0437]Para resumir lo anterior, algunas realizaciones según la invención proporcionan una nueva codificación (codificación o decodificación) sin ruido, la cual genera modificaciones en el borrador de trabajo MPEG USAC (por ejemplo, en el borrador de trabajo 5 MPEG USAC). Las modificaciones se pueden observar en las figuras anexas y también en la descripción relacionada.
[0438]Como conclusión cabe observar que el prefijo “ari” y el prefijo “arith” los nombres de las variables, matrices, funciones y así sucesivamente se utilizan de manera intercambiable.

Claims (3)

REIVINDICACIONES
1. Un decodificador de audio,
donde el decodificador de audio se basa en USAC WD7, ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010, donde el decodificador de audio está configurado para utilizar una tabla ari_lookup_m[742] según la Fig.21, donde el decodificador de audio está configurado para utilizar una tabla ari_hash_m[742] según las Figs.22(1) a 22(4),
donde el decodificador de audio está configurado para usar una tabla ari_cf_m[64][17] según las Figs. 23(1) a 23(3),
donde el decodificador de audio está configurado para obtener el contexto utilizando coeficientes espectrales previamente decodificados que provienen tanto de la trama pasada como de la presente,
donde los coeficientes espectrales se dividen en tres partes, el signo, los bits más significativos (Most Significant Bits, MSB) y los bits menos significativos (Least Significant Bits, LSB),
donde tres 2-tuplas de una trama pasada y una 2-tupla de una trama presente se consideran para una derivación de contexto,
donde el decodificador espectral sin ruido está configurado para llevar a cabo el siguiente procedimiento:
donde los coeficientes espectrales cuantificados qdec se decodifican sin ruido comenzando desde el coeficiente de frecuencia más baja y progresando hasta el coeficiente de frecuencia más alta,
donde se decodifican mediante grupos de dos coeficientes sucesivos a y b reunidos en una denominada 2-tupla {a,b},
donde los coeficientes decodificados para AAC se almacenan en una matrizx_ac_quant[g][win][sfb][bin],donde un orden de transmisión de las palabras clave de codificación sin ruido es tal que cuando se decodifican en el orden recibido y se almacenan en la matriz,bines el índice que se incrementa más rápidamente yges el índice que se incrementa más lentamente,
donde dentro de una palabra de código el orden de decodificación es a y luego b;
donde los coeficientes decodificados para TCX se almacenan en una matrizx_tcx_invquant[win][bin],donde un orden de transmisión de las palabras clave de codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenado en la matriz,bines el índice que se incrementa más rápidamente ywines el índice que se incrementa más lentamente,
donde dentro de una palabra de código el orden de decodificación esay luegob;
donde el procedimiento de decodificación comienza con una fase de inicialización donde se realiza una asignación entre el contexto pasado guardado almacenado enqsy el contexto de la trama actualq,
donde un contexto pasadoqsse almacena en 2 bits por línea de frecuencia;
donde la función arith_map_context se define como se muestra en la Fig.40a;
donde el decodificador sin ruido emite 2-tuplas de coeficientes espectrales cuantificados sin signo, donde en un primer momento, el estadocdel contexto se calcula en base a los coeficientes espectrales previamente decodificados que rodean la 2-tupla que se va a decodificar,
donde el estado se actualiza incrementalmente usando el estado de contexto de la última 2-tupla decodificada considerando solo dos nuevas 2-tuplas,
donde el estado está codificado en 17 bits y es devuelto por una funciónarith_get_context();donde la función arith_get_context se define como se muestra en la Fig.40b;
donde una vez que se calcula el estado de contexto c, el plano sabio m de 2 bits más significativo se decodifica usandoarith_decode()alimentado con la tabla de frecuencias acumuladas apropiada correspondiente al modelo de probabilidad correspondiente al estado de contexto,
donde una correspondencia es hecha por una funciónarith_get_pk();
donde la función arith_get_pk se define como se muestra en la Fig.40c;
donde el valor m se decodifica usando la funciónarith_decode()llamada con la tabla de frecuencias acumuladas,arith_cf_m[pki][],dondepkicorresponde al índice devuelto porarith_get_pk(),
donde se define un algoritmo usado como se muestra en las Figs.40d y 40e;
donde cuando el valor decodificado m es el símbolo de escape,ARITH_ESCAPE, la variablelevyesc_nbse incrementan en uno y se decodifica otro valor m,
donde en este caso, la funciónget_pk()se llama una vez más con el valorc&esc_nb<<17como argumento de entrada, dondeesc_nbes el número de símbolos de escape previamente decodificados para la misma 2-tupla y acotados a 7;
donde una vez que el valor m no es el símbolo de escape,ARITH_ESCAPE,el decodificador comprueba si los sucesivos m forman un símbolo ARITH_STOP,
donde si la condición{esc_nb>0&&m==0)es verdadera, se detecta el símbolo ARITH_STOP y el procedimiento de decodificación finaliza y el decodificador salta directamente a la funciónarith_save_context();donde si no se cumple el símbolo ARITH_STOP, los planos de bits restantes se decodifican, si existe alguno, para la presente 2-tupla,
donde en este punto, el valor sin signo de la 2-tupla{a,b}se decodifica completamente,
donde el contexto q se actualiza luego para la siguiente 2-tupla, si es también la última 2-tupla; donde ambas actualizaciones se realizan mediante una función arith_update_context, que se define como se muestra en la Fig.40g; donde luego se decodifica una siguiente tupla de 2 de la trama incrementando i en uno, donde si la 2-tupla lg/2 ya se decodificó con la trama o si se produjo el símbolo de parada ARITH_STOP, se llama a una función arith_save_context(), donde el contexto se guarda y almacena en qs para el siguiente marco, donde la función arith_save_context() se define como se muestra en la Fig.40h; y
donde una vez que se decodifican todos los coeficientes espectrales cuantificados sin signo, se agrega el signo, donde para cada valor cuantificado no nulo deqdecse lee un bit,
donde si el valor del bit de lectura es igual a cero, el valor cuantificado es positivo, no se hace nada y el valor con signo es igual al valor sin signo previamente decodificado, y
donde de lo contrario, el coeficiente decodificado es negativo y el complemento a dos se toma del valor sin signo,
donde los bits de signo se leen desde las frecuencias bajas a las altas.
2. Un procedimiento de decodificación de audio,
donde el procedimiento se basa en USAC WD7, ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010, donde el procedimiento utiliza una tabla ari_lookup_m[742] según la Fig.21,
donde el procedimiento utiliza una tabla ari_hash_m[742] según las Figs.22(1) a 22(4),
donde el procedimiento utiliza una tabla ari_cf_m[64][17] según las Figs.23(1) a 23(3),
donde el contexto se deriva utilizando coeficientes espectrales previamente decodificados que provienen tanto de la trama pasada como de la presente,
donde los coeficientes espectrales se dividen en tres partes, el signo, los bits más significativos (Most Significant Bits, MSB) y los bits menos significativos (Least Significant Bits, LSB),
donde tres 2-tuplas de una trama pasada y una 2-tupla de una trama presente se consideran para una derivación de contexto,
donde los coeficientes espectrales cuantificados qdec se decodifican sin ruido comenzando desde el coeficiente de frecuencia más baja y progresando hasta el coeficiente de frecuencia más alta,
donde se decodifican mediante grupos de dos coeficientes sucesivos a y b reunidos en una 2-tupla {a,b}, donde los coeficientes decodificados para AAC se almacenan en una matrizx_ac_quant[g][win][sfb][bin],donde un orden de transmisión de las palabras de código de codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenado en la matriz,bines el índice que se incrementa más rápidamente yges el índice que se incrementa más lentamente,
donde dentro de una palabra de código el orden de decodificación es a y luego b;
donde los coeficientes decodificados para TCX se almacenan en una matrizx_tcx_invquant[win][bin],donde un orden de transmisión de las palabras clave de codificación sin ruido es tal que cuando se decodifican en el orden recibido y almacenado en la matriz,bines el índice que se incrementa más rápidamente ywines el índice que se incrementa más lentamente,
donde dentro de una palabra de código el orden de decodificación es a y luego b;
donde el procedimiento de decodificación comienza con una fase de inicialización donde se realiza una asignación entre el contexto pasado guardado almacenado enqsy el contexto de la trama actualq,
donde un contexto pasadoqsse almacena en 2 bits por línea de frecuencia;
donde la función arith_map_context se define como se muestra en la Fig.40a;
donde la decodificación sin ruido genera 2-tuplas de coeficientes espectrales cuantificados sin signo, donde en un primer momento, el estadocdel contexto se calcula en base a los coeficientes espectrales previamente decodificados que rodean la 2-tupla para decodificar,
donde el estado se actualiza incrementalmente usando el estado de contexto de la última 2-tupla decodificada considerando solo dos nuevas 2-tuplas,
donde el estado está codificado en 17 bits y es devuelto por una funciónarith_get_context();
donde la función arith_get_context se define como se muestra en la Fig.40b;
donde una vez que se calcula el estado de contexto c, el plano sabio m de 2 bits más significativo se decodifica usandoarith_decode()alimentado con la tabla de frecuencias acumuladas apropiada correspondiente al modelo de probabilidad correspondiente al estado de contexto,
donde una correspondencia es hecha por una funciónarith_get_pk();
donde la función arith_get_pk se define como se muestra en la Fig.40c;
donde el valor m se decodifica usando la funciónarith_decode()llamada con la tabla de frecuencias acumuladas,arith_cf_m[pki][],dondepkicorresponde al índice devuelto porarith_get_pk(),
donde se define un algoritmo usado como se muestra en las Figs.40d y 40e;
donde cuando el valor decodificado m es el símbolo de escape,ARITH_ESCAPE,la variablelevyesc_nbse incrementan en uno y se decodifica otro valor m,
donde en este caso, la funciónget_pk()se llama una vez más con el valorc&esc_nb<<17como argumento de entrada, dondeesc_nbes el número de símbolos de escape previamente decodificados para la misma 2-tupla y acotados a 7;
donde una vez que el valor m no es el símbolo de escape,ARITH_ESCAPE,el decodificador comprueba si los sucesivos m forman un símbolo ARITH_STOP,
donde si la condición(esc_nb>0&&m==0)es verdadera, se detecta el símbolo ARITH_STOP y el procedimiento de decodificación finaliza y el decodificador salta directamente a la funciónarith_save_context();
donde si no se cumple el símbolo ARITH_STOP, los planos de bits restantes se decodifican, si existe alguno, para la presente 2-tupla,
donde en este punto, el valor sin signo de la 2-tupla{a,b}se decodifica completamente, donde el contexto q se actualiza luego para la siguiente 2-tupla, si es también la última 2-tupla;
donde ambas actualizaciones se realizan mediante una función arit_update_context, que se define como se muestra en la Fig.40g; donde luego se decodifica una siguiente 2-tupla de la trama incrementando i en uno, donde si la 2-tupla Ig/2 ya se decodificó con la trama o si se produjo el símbolo de parada ARITH_STOP, se llama a una funciónarith_save_context(),donde el contexto se guarda y almacena en qs para la siguiente trama, donde la funciónarith_save_context()se define como se muestra en la Fig.40h; y
donde una vez que se decodifican todos los coeficientes espectrales cuantificados sin signo, se agrega el signo, donde para cada valor cuantificado no nulo deqdecse lee un bit, donde si el valor del bit leído es igual a cero, el valor cuantificado es positivo, nada es hecho y el valor con signo es igual al valor sin signo previamente decodificado, y en caso contrario, el coeficiente decodificado es negativo y el complemento a dos se toma del valor sin signo,
donde los bits de signo se leen desde las frecuencias bajas a las altas.
3. Un programa informático para realizar el procedimiento según la reivindicación 2 cuando el programa informático se ejecuta en un ordenador.
ES22196723T 2010-07-20 2011-07-20 Audio decoder, audio decoding method and computer program Active ES3035367T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US36593610P 2010-07-20 2010-07-20

Publications (1)

Publication Number Publication Date
ES3035367T3 true ES3035367T3 (en) 2025-09-02

Family

ID=44509264

Family Applications (3)

Application Number Title Priority Date Filing Date
ES20179316T Active ES2937066T3 (es) 2010-07-20 2011-07-20 Decodificador de audio, procedimiento y programa informático para decodificación de audio
ES22196723T Active ES3035367T3 (en) 2010-07-20 2011-07-20 Audio decoder, audio decoding method and computer program
ES11738193T Active ES2828429T3 (es) 2010-07-20 2011-07-20 Decodificador de audio, procedimiento de decodificación de audio y programa informático

Family Applications Before (1)

Application Number Title Priority Date Filing Date
ES20179316T Active ES2937066T3 (es) 2010-07-20 2011-07-20 Decodificador de audio, procedimiento y programa informático para decodificación de audio

Family Applications After (1)

Application Number Title Priority Date Filing Date
ES11738193T Active ES2828429T3 (es) 2010-07-20 2011-07-20 Decodificador de audio, procedimiento de decodificación de audio y programa informático

Country Status (16)

Country Link
US (1) US8914296B2 (es)
EP (3) EP3751564B1 (es)
JP (1) JP5600805B2 (es)
KR (1) KR101573829B1 (es)
CN (1) CN103119646B (es)
AU (1) AU2011287747B2 (es)
CA (1) CA2806000C (es)
ES (3) ES2937066T3 (es)
FI (1) FI3751564T3 (es)
MX (1) MX338171B (es)
MY (1) MY179769A (es)
PL (3) PL2596494T3 (es)
PT (2) PT3751564T (es)
RU (1) RU2568381C2 (es)
SG (1) SG187164A1 (es)
WO (1) WO2012016839A1 (es)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
PT2491553T (pt) 2009-10-20 2017-01-20 Fraunhofer Ges Forschung Codificador de áudio, descodificador de áudio, método para codificar uma informação de áudio, método para descodificar uma informação de áudio e programa de computador que utiliza uma redução iterativa de tamanho de intervalo
CN104509130B (zh) * 2012-05-29 2017-03-29 诺基亚技术有限公司 立体声音频信号编码器
CN103035249B (zh) * 2012-11-14 2015-04-08 北京理工大学 一种基于时频平面上下文的音频算术编码方法
ES2901749T3 (es) * 2014-04-24 2022-03-23 Nippon Telegraph & Telephone Método de descodificación, aparato de descodificación, programa y soporte de registro correspondientes
US9640376B1 (en) 2014-06-16 2017-05-02 Protein Metrics Inc. Interactive analysis of mass spectrometry data
EP2980795A1 (en) * 2014-07-28 2016-02-03 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Audio encoding and decoding using a frequency domain processor, a time domain processor and a cross processor for initialization of the time domain processor
US9385751B2 (en) * 2014-10-07 2016-07-05 Protein Metrics Inc. Enhanced data compression for sparse multidimensional ordered series data
US20160227235A1 (en) * 2015-02-02 2016-08-04 Yaniv Frishman Wireless bandwidth reduction in an encoder
US10354421B2 (en) 2015-03-10 2019-07-16 Protein Metrics Inc. Apparatuses and methods for annotated peptide mapping
EP3522155B1 (en) * 2015-05-20 2020-10-14 Telefonaktiebolaget LM Ericsson (publ) Coding of multi-channel audio signals
CN105070292B (zh) * 2015-07-10 2018-11-16 珠海市杰理科技股份有限公司 音频文件数据重排序的方法和系统
RU2611022C1 (ru) * 2016-01-28 2017-02-17 федеральное государственное казенное военное образовательное учреждение высшего образования "Военная академия связи имени Маршала Советского Союза С.М. Буденного" Министерства обороны Российской Федерации Способ совместного арифметического и помехоустойчивого кодирования (варианты)
FR3048808A1 (fr) * 2016-03-10 2017-09-15 Orange Codage et decodage optimise d'informations de spatialisation pour le codage et le decodage parametrique d'un signal audio multicanal
US10319573B2 (en) 2017-01-26 2019-06-11 Protein Metrics Inc. Methods and apparatuses for determining the intact mass of large molecules from mass spectrographic data
GB2559200A (en) 2017-01-31 2018-08-01 Nokia Technologies Oy Stereo audio signal encoder
US11626274B2 (en) 2017-08-01 2023-04-11 Protein Metrics, Llc Interactive analysis of mass spectrometry data including peak selection and dynamic labeling
US10546736B2 (en) 2017-08-01 2020-01-28 Protein Metrics Inc. Interactive analysis of mass spectrometry data including peak selection and dynamic labeling
US12400846B2 (en) 2017-08-01 2025-08-26 Protein Metrics, Llc Interactive analysis of mass spectrometry data including peak selection and dynamic labeling
US12224169B2 (en) 2017-09-29 2025-02-11 Protein Metrics, Llc Interactive analysis of mass spectrometry data
US10510521B2 (en) 2017-09-29 2019-12-17 Protein Metrics Inc. Interactive analysis of mass spectrometry data
EP3483882A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Controlling bandwidth in encoders and/or decoders
EP3483886A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Selecting pitch lag
EP3483884A1 (en) * 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Signal filtering
WO2019091576A1 (en) 2017-11-10 2019-05-16 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Audio encoders, audio decoders, methods and computer programs adapting an encoding and decoding of least significant bits
EP3483879A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Analysis/synthesis windowing function for modulated lapped transformation
EP3483878A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Audio decoder supporting a set of different loss concealment tools
EP3483883A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Audio coding and decoding with selective postfiltering
EP3483880A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Temporal noise shaping
WO2019091573A1 (en) 2017-11-10 2019-05-16 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Apparatus and method for encoding and decoding an audio signal using downsampling or interpolation of scale parameters
US11044495B1 (en) 2018-02-13 2021-06-22 Cyborg Inc. Systems and methods for variable length codeword based data encoding and decoding using dynamic memory allocation
GB2574873A (en) * 2018-06-21 2019-12-25 Nokia Technologies Oy Determination of spatial audio parameter encoding and associated decoding
EP3818637B1 (en) * 2018-07-06 2025-06-18 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Arithmetic encoders, arithmetic decoders, video encoder, video decoder, methods for encoding, methods for decoding and computer program
US11640901B2 (en) 2018-09-05 2023-05-02 Protein Metrics, Llc Methods and apparatuses for deconvolution of mass spectrometry data
GB2579568B (en) * 2018-12-03 2022-04-27 Advanced Risc Mach Ltd Encoding data arrays
US11093682B2 (en) 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US10491240B1 (en) 2019-01-17 2019-11-26 Cyborg Inc. Systems and methods for variable length codeword based, hybrid data encoding and decoding using dynamic memory allocation
US11308036B2 (en) * 2019-04-11 2022-04-19 EMC IP Holding Company LLC Selection of digest hash function for different data sets
US11346844B2 (en) 2019-04-26 2022-05-31 Protein Metrics Inc. Intact mass reconstruction from peptide level data and facilitated comparison with experimental intact observation
RU2739936C1 (ru) * 2019-11-20 2020-12-29 Публичное Акционерное Общество "Сбербанк России" (Пао Сбербанк) Способ внесения цифровых меток в цифровое изображение и устройство для осуществления способа
US11276204B1 (en) 2020-08-31 2022-03-15 Protein Metrics Inc. Data compression for multidimensional time series data

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6269338B1 (en) * 1996-10-10 2001-07-31 U.S. Philips Corporation Data compression and expansion of an audio signal
PT2391019E (pt) * 2002-03-27 2014-08-29 Panasonic Ip Corp America Método de descodificação de comprimento variável, suporte de armazenamento, dispositivo de descodificação de comprimento ariável
US6915256B2 (en) * 2003-02-07 2005-07-05 Motorola, Inc. Pitch quantization for distributed speech recognition
KR20050087956A (ko) * 2004-02-27 2005-09-01 삼성전자주식회사 무손실 오디오 부호화/복호화 방법 및 장치
KR100561869B1 (ko) * 2004-03-10 2006-03-17 삼성전자주식회사 무손실 오디오 부호화/복호화 방법 및 장치
KR101346358B1 (ko) * 2006-09-18 2013-12-31 삼성전자주식회사 대역폭 확장 기법을 이용한 오디오 신호의 부호화/복호화방법 및 장치
DE102007017254B4 (de) * 2006-11-16 2009-06-25 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Vorrichtung zum Kodieren und Dekodieren
ATE518224T1 (de) * 2008-01-04 2011-08-15 Dolby Int Ab Audiokodierer und -dekodierer
WO2009133856A1 (ja) * 2008-04-28 2009-11-05 公立大学法人大阪府立大学 物体認識用画像データベースの作成方法、処理装置および処理用プログラム
CN102089814B (zh) * 2008-07-11 2012-11-21 弗劳恩霍夫应用研究促进协会 对编码的音频信号进行解码的设备和方法
PL2346030T3 (pl) * 2008-07-11 2015-03-31 Fraunhofer Ges Forschung Koder audio, sposób kodowania sygnału audio oraz program komputerowy
PL3573056T3 (pl) * 2008-07-11 2022-12-19 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Koder audio i dekoder audio
EP2144230A1 (en) 2008-07-11 2010-01-13 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Low bitrate audio encoding/decoding scheme having cascaded switches
CN102177426B (zh) * 2008-10-08 2014-11-05 弗兰霍菲尔运输应用研究公司 多分辨率切换音频编码/解码方案
KR20100136890A (ko) * 2009-06-19 2010-12-29 삼성전자주식회사 컨텍스트 기반의 산술 부호화 장치 및 방법과 산술 복호화 장치 및 방법
PT2491553T (pt) * 2009-10-20 2017-01-20 Fraunhofer Ges Forschung Codificador de áudio, descodificador de áudio, método para codificar uma informação de áudio, método para descodificar uma informação de áudio e programa de computador que utiliza uma redução iterativa de tamanho de intervalo

Also Published As

Publication number Publication date
ES2937066T3 (es) 2023-03-23
SG187164A1 (en) 2013-02-28
EP4131258C0 (en) 2025-05-14
EP4131258A1 (en) 2023-02-08
EP2596494A1 (en) 2013-05-29
PL3751564T3 (pl) 2023-03-06
KR101573829B1 (ko) 2015-12-02
PT2596494T (pt) 2020-11-05
CN103119646B (zh) 2016-09-07
US20130226594A1 (en) 2013-08-29
PT3751564T (pt) 2023-01-06
EP3751564B1 (en) 2022-10-26
AU2011287747A1 (en) 2013-02-28
CA2806000C (en) 2016-07-05
JP2013538364A (ja) 2013-10-10
PL4131258T3 (pl) 2025-09-15
MX2013000749A (es) 2013-05-17
ES2828429T3 (es) 2021-05-26
PL2596494T3 (pl) 2021-01-25
EP4131258B1 (en) 2025-05-14
MY179769A (en) 2020-11-13
RU2013107375A (ru) 2014-08-27
US8914296B2 (en) 2014-12-16
AU2011287747B2 (en) 2015-02-05
FI3751564T3 (fi) 2023-01-31
CA2806000A1 (en) 2012-02-09
JP5600805B2 (ja) 2014-10-01
CN103119646A (zh) 2013-05-22
WO2012016839A1 (en) 2012-02-09
KR20130054993A (ko) 2013-05-27
RU2568381C2 (ru) 2015-11-20
EP3751564A1 (en) 2020-12-16
MX338171B (es) 2016-04-06
EP2596494B1 (en) 2020-08-05

Similar Documents

Publication Publication Date Title
ES3035367T3 (en) Audio decoder, audio decoding method and computer program
ES2532203T3 (es) Codificador de audio, decodificador de audio, método para codificar y decodificar una información de audio y programa de computación que obtiene un valor de contexto de sub-región basado en una norma de valores espectrales previamente decodificados
ES2454020T3 (es) Codificador de audio, decodificador de audio, procedimiento para codificar información de audio, procedimiento y programa de computación que usa una regla dependiente de la región para un mapeado mediante codificación aritmética
HK40090557B (en) Audio decoder, audio decoding method and computer program
HK40090557A (en) Audio decoder, audio decoding method and computer program
HK40041900B (en) Audio decoder, audio decoding method and computer program
HK40041900A (en) Audio decoder, audio decoding method and computer program
BR122021003398B1 (pt) Método para prover uma informação de áudio decodificada
BR122021003390B1 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio
BR122024007444B1 (pt) Decodificador de áudio, para prover uuma informação de áudio decodificada
BR122024007446B1 (pt) Decodificador de áudio, para prover uuma informação de áudio decodificada
BR122024007449B1 (pt) Decodificador de áudio, para prover uuma informação de áudio decodificada
BR122024007438B1 (pt) Decodificador de áudio, para prover uuma informação de áudio decodificada
BR122021003398A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio e programa de computador que utiliza uma tabela hash otimizada
HK1185441B (en) Audio decoder, audio decoding method and computer program
HK1185441A (en) Audio decoder, audio decoding method and computer program
BR122024007438A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio e método de decodificação de uma informação de áudio.
BR112013001535B1 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio e método de decodificação de uma informação de áudio
BR122024007446A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio
BR122021003390A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio e programa de computador que utiliza uma tabela hash otimizada
BR122024007444A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio
BR122024007449A2 (pt) Codificador de áudio, decodificador de áudio, método de codificação e informação de áudio, método de decodificação de uma informação de áudio
HK1177649B (en) Audio encoder, audio decoder, method for encoding and decoding an audio information, and computer program obtaining a context sub-region value on the basis of a norm of previously decoded spectral values