ES2828429T3 - Decodificador de audio, procedimiento de decodificación de audio y programa informático - Google Patents

Decodificador de audio, procedimiento de decodificación de audio y programa informático Download PDF

Info

Publication number
ES2828429T3
ES2828429T3 ES11738193T ES11738193T ES2828429T3 ES 2828429 T3 ES2828429 T3 ES 2828429T3 ES 11738193 T ES11738193 T ES 11738193T ES 11738193 T ES11738193 T ES 11738193T ES 2828429 T3 ES2828429 T3 ES 2828429T3
Authority
ES
Spain
Prior art keywords
context
value
decoded
arith
tuple
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
ES11738193T
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 Forderung der Angewandten Forschung eV
Original Assignee
Fraunhofer Gesellschaft zur Forderung 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 Forderung der Angewandten Forschung eV filed Critical Fraunhofer Gesellschaft zur Forderung der Angewandten Forschung eV
Application granted granted Critical
Publication of ES2828429T3 publication Critical patent/ES2828429T3/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/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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Signal Processing (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (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 según la USAC WD7, ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010, donde el decodificador de audio está configurado para usar una tabla ari_lookup_m [742] según la figura 21, donde el decodificador de audio está configurado para usar una tabla ari_hash_m [742] según las figuras 22 (1) a 22 (4), donde el decodificador de audio está configurado para usar una tabla ari_cf_m [64] [17] según la figura 23 (1) a 23 (3), donde el decodificador de audio está configurado para usar una tabla ari_cf_r [4] según la figura 24; donde el decodificador de audio está configurado para derivar el contexto usando 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 (MSB) y los bits menos significativos (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 cuantizados 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 por 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 matriz x_ac_quant[g][win][sfb][bin], donde una 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 se almacenan en la matriz, bin es el índice de incremento más rápido y g es el índice de incremento más lento, donde dentro de una palabra de código el orden de decodificación es a y, a continuación, b; donde los coeficientes decodificados para TCX se almacenan en una matriz x_tcx_invquant[win][bin], donde una orden de transmisión de las palabras de código de codificación silenciosa es tal que cuando se decodifican en el orden en que se reciben y almacenan en la matriz, bin es el índice de incremento más rápido y win es el índice de incremento más lento, donde dentro de una palabra de código el orden de decodificación es a y, a continuación, 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 en qs y el contexto de la trama actual q, donde un contexto pasado qs se almacena en 2 bits por línea de frecuencia; donde la función arith_map_context se define como se muestra en la figura 40a; donde el decodificador sin ruido genera 2 tuplas de coeficientes espectrales cuantizados sin signo, donde al principio, el estado c del 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 se codifica en 17 bits y es devuelto por una función arith_get_context(); donde la función arith_get_context se define como se muestra en la figura 40b; donde una vez que se calcula el estado de contexto c, el plano a lo largo de 2 bits más significativo m se decodifica utilizando el arith_decode() alimentado con la tabla de frecuencias acumuladas apropiada correspondiente al modelo de probabilidad correspondiente al estado de contexto, donde una correspondencia se realiza mediante una función arith_get_pk(); donde la función arith_get_pk se define como se muestra en la figura 40c; donde el valor m se decodifica usando la función arith_decode () llamada con la tabla de frecuencias acumulativas, arith_cf_m [pki][], donde pki corresponde al índice devuelto por arith_get_pk(), donde un algoritmo utilizado se define como se muestra en las figuras 40d y 40e; donde cuando el valor decodificado m es el símbolo de escape, ARITH_ESCAPE, la variable lev y esc_nb se incrementan en uno y se decodifica otro valor m, donde en este caso, la función get_pk () se llama 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 decodificados previamente para la misma tupla 2 y delimitados a 7; donde una vez que el valor m no es el símbolo de escape, ARITH_ESCAPE, el decodificador verifica 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ón arith_save_context (); donde si no se cumple el símbolo ARITH_STOP, los planos de bits restantes se decodifican si existe alguno para la 2-tupla presente, donde los planos de bits restantes se decodifican desde el nivel más significativo al más bajo llamando lev veces arith_decode() con la tabla de frecuencias acumulativas arith_cf_r[], donde los planos de bits decodificados r permiten refinar el valor m previamente decodificado usando un algoritmo como se muestra en la figura 40f; donde en este punto, el valor sin signo de la 2-tupla {a, b} está completamente decodificado, donde el contexto que se actualiza entonces 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 figura 40g; donde una siguiente 2-tupla de la trama se decodifica a continuación incrementando i en uno, donde si la 2-tupla lg/2 ya estaba decodificada con la trama o si apareció el símbolo de interrupción ARITH_STOP, se llama una función arith_save_context(), donde el contexto se guarda y se almacena en qs para la siguiente trama, donde la función arith_save_context() se define como se muestra en la figura 40h; y donde una vez que se decodifican todos los coeficientes espectrales cuantizados sin signo, a continuación se añade el signo, donde para cada valor cuantizado no nulo de qdec se lee un bit, donde si el valor del bit leído es igual a cero, el valor cuantizado 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.

Description

DESCRIPCIÓN
Decodificador de audio, procedimiento de decodificación de audio y programa informático
Campo técnico
[0001] Las realizaciones según la invención se refieren a 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 refieren a una decodificación sin ruido espectral mejorada usada en un decodificador de audio según el codificador de voz y audio unificado (USAC) Working Draft 7 (WD7).
[0003] Las realizaciones según la invención se refieren a 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 forma 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 realizado grandes esfuerzos sobre la creación de la posibilidad de almacenar y distribuir digitalmente contenido de audio con buena eficacia 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 refiere a la codificación y decodificación de contenido de audio y las subpartes 4 y 3 se refieren a 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 dicho Estándar, la señal de audio en el dominio de tiempo se convierte 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 se designan “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 reducir) 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] Mediante la transformación de 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 mayor 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 resulta en una compactación de energía es la llamada transformación coseno discreta modificada (MDCT).
[0007] Los valores espectrales son con frecuencia escalados y cuantizados según un modelo psico-acústico, de modo que los errores de cuantización son comparativamente menores para los valores espectrales más psicoacústicamente importantes, y son comparativamente mayores para los valores espectrales menos psicoacústicamente importantes. Los valores espectrales escalares y cuantizados son codificados para proporcionar una representación eficaz 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, que se implementa con frecuencia en un dispositivo de consumo portátil, y que por lo tanto deberá ser económico y de bajo consumo de energía, depende de la codificación usada para codificar los valores espectrales.
[0010] El artículo "Cuantificación mejorada y codificación sin pérdidas para codificación de audio de subbanda", presentado en la 118a Convención de la a Es , Barcelona, España, 28-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 codificados previamente. 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 eficacia en la cuantificación y codificación sin pérdidas utilizada en MPEG-AAC.
[0011] El artículo "Un nuevo esquema para el habla unificada de baja velocidad de bits en codificación de audio - MPEG-RM0" describe una estrategia para el diseño de un códec con alta calidad constante para habla, música y contenido mixto en un amplio intervalo de tasas de bits. El artículo describe las afirmaciones del códec y que alcanza el objetivo de una alta calidad constante para diferentes tipos de señales.
[0012] El documento "WD7 de USAC", ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010, Dresden, Alemania, presenta el Borrador de trabajo aprobado (WD) 7 de USAC.
[0013] La contribución "Información adicional con respecto a la CE sobre la codificación sin ruido espectral en USAC", ISO/IEC JTC1/SC29/WG11, MPEG2010/M17558, 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 mejor intercambio entre la eficacia de la velocidad de bits y la eficacia de 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, establecido en la reivindicación independiente 3.
[0016] Todas las apariciones siguientes de la palabra "realización(es)", si se refieren a combinaciones de características que no comprenden todas las características definidas en las reivindicaciones independientes, o equivalentes de las mismas, se refieren a ejemplos que se presentaron originalmente pero que no representan realizaciones de la invención actualmente reivindicada; estos ejemplos todavía se muestran solo con fines ilustrativos. Breve descripción de las figuras
[0017] A continuación, se describirán realizaciones según la presente invención haciendo referencia a las figuras adjuntas, en las que:
La figura 1 muestra un diagrama esquemático de bloques de un codificador de audio, según una realización de la invención;
La figura 2 muestra un diagrama esquemático de bloques de un decodificador de audio, según una realización de la invención;
La figura 3 muestra una representación de código pseudo-programa de un algoritmo "values-decode()" para decodificar valores espectrales;
La figura 4 muestra una representación esquemática de un contexto para un cálculo de estado;
La figura 5a muestra una representación de código de pseudo-programa de un algoritmo "arith_map_context()" para asignar un contexto;
La figura 5b muestra una representación de código de pseudo-programa de otro algoritmo "arith_map_context()" para asignar un contexto;
La figura 5c muestra una representación de código de pseudo-programa de un algoritmo "arith_get_context()" para obtener un valor de estado de contexto;
La figura 5d muestra una representación de código de pseudo-programa de otro algoritmo "arith_get_context()" para obtener un valor de estado de contexto;
La figura 5e muestra una representación de código de pseudo-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); La figura 5f muestra una representación de código de pseudo-programa de otro 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); La figura 5g muestra una representación de código de pseudo-programa de un algoritmo "arith_decode()" para decodificar aritméticamente un símbolo a partir de una palabra de código de longitud variable;
La figura 5i muestra una segunda parte de una representación de código de pseudo-programa del otro algoritmo "arith_decodeO" para decodificar aritméticamente un símbolo a partir de una palabra de código de longitud variable; La figura 5j muestra una representación de código de pseudo-programa de un algoritmo para derivar valores absolutos a, b de valores espectrales a partir de un valor común m;
La figura 5k muestra una representación de código de pseudo-programa de un algoritmo para introducir los valores decodificados a, b en una matriz de valores espectrales decodificados;
La figura 5l muestra una representación de código de pseudo-programa de un algoritmo "arith_update_context()" para obtener un valor de subregión de contexto sobre la base de valores absolutos a, b de valores espectrales decodificados;
La figura 5m muestra una representación de código de pseudo-programa de un algoritmo "arith_finish()" para completar entradas de una matriz de valores espectrales decodificados y una matriz de valores de subregión de contexto;
La figura 5n muestra una representación de código de pseudo-programa de otro algoritmo para derivar valores absolutos a, b de valores espectrales decodificados a partir de un valor común m;
La figura 5o muestra una representación de código de pseudo-programa de un algoritmo "arith_update_context()" para actualizar una matriz de valores espectrales decodificados y una matriz de valores de subregión de contexto;
La figura 5p muestra una representación de código de pseudo-programa de un algoritmo "arith_save_context()" para completar entradas de una matriz de valores espectrales decodificados y entradas de una matriz de valores de subregión de contexto;
La figura 5q muestra una leyenda de las definiciones;
La figura 5r muestra otra leyenda de las definiciones;
La figura 6a muestra una representación de sintaxis de un bloque de datos sin procesar de codificación de audio y habla unificada (USAC);
La figura 6b muestra una representación de sintaxis de un elemento de canal único;
La figura 6c muestra una representación de sintaxis de un elemento de par de canales;
La figura 6d muestra una representación de sintaxis de una información de control "ICS";
La figura 6e muestra una representación de sintaxis de un flujo de canales en el dominio de la frecuencia; La figura 6f muestra una representación de sintaxis de datos espectrales codificados aritméticamente;
La figura 6g muestra una representación de sintaxis para decodificar un conjunto de valores espectrales; La figura 6h muestra otra representación de sintaxis para decodificar un conjunto de valores espectrales; La figura 6i muestra una leyenda de elementos y variables de datos;
La figura 6j muestra otra leyenda de elementos y variables de datos;
La figura 6k muestra una representación de sintaxis de un elemento de canal único USAC "UsacSingleChannelElementO";
La figura 6l muestra una representación de sintaxis de un elemento de par de canales USAC "UsacChannelPairElementO";
La figura 6m muestra una representación de sintaxis de una información de control "ICS";
La figura 6n muestra una representación de sintaxis de los datos del codificador de núcleo de USAC "UsacCoreCoderData";
La figura 60 muestra una representación de sintaxis de un flujo de canal de dominio de frecuencia "fd_channel_streamO";
La figura 6p muestra una representación de sintaxis de datos espectrales codificados aritméticamente "ac_spectral_data()";
La figura 7 muestra un diagrama esquemático de bloques de un codificador de audio, según el primer aspecto de la invención;
La figura 8 muestra un diagrama esquemático de bloques de un decodificador de audio, según el primer aspecto de la invención;
La figura 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;
La figura 10 muestra un diagrama esquemático de bloques de un codificador de audio, según un segundo aspecto de la invención;
La figura 11 muestra un diagrama esquemático de bloques de un decodificador de audio, según el segundo aspecto de la invención;
La figura 12 muestra un diagrama esquemático de bloques de un codificador de audio, según un tercer aspecto de la invención;
La figura 13 muestra un diagrama esquemático de bloques de un decodificador de audio, según el tercer aspecto de la invención;
La figura 14a muestra una representación esquemática de un contexto para un cálculo de estado, tal como se usa de acuerdo con el borrador de trabajo 4 del estándar de borrador USAC;
La figura 14b muestra una descripción general de las tablas que se utilizan en el esquema de codificación aritmética según el borrador de trabajo 4 del estándar de borrador USAC;
La figura 15a muestra una representación esquemática de un contexto para un cálculo de estado, tal como se usa en las realizaciones según la invención;
La figura 15b muestra una descripción general de las tablas que se utilizan en el esquema de codificación aritmética según un ejemplo de comparación;
La figura 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 de Huffman AAC (codificación de audio avanzada);
La figura 16b muestra una representación gráfica de una demanda total de memoria de solo lectura de datos del decodificador USAC de acuerdo con un ejemplo de comparación y de acuerdo con el concepto según el borrador de trabajo 5 del borrador del estándar USAC;
La figura 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 estándar de borrador USAC con un esquema de codificación según el ejemplo de comparación;
La figura 18 muestra una representación de tabla de tasas de bits promedio producidas por un codificador aritmético USAC según el borrador de trabajo 3 del estándar de borrador USAC y según un ejemplo de comparación;
La Fig.19 muestra una representación de tabla de los niveles mínimos y máximos de reserva de bits para un decodificador aritmético según el borrador de trabajo 3 del estándar de borrador USAC y para un decodificador aritmético según un ejemplo de comparación;
La figura 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 estándar de borrador UsAc para diferentes versiones del codificador aritmético;
La figura 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;
Las figuras 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;
Las figuras 23(1) a 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
La figura 24 muestra una representación de tabla de un contenido de una tabla "ari_cf_r[]";
La figura 25 muestra una representación esquemática de un contexto para un cálculo de estado;
La figura 26 muestra una representación de tabla de un rendimiento de codificación promediado 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");
La figura 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 formadas de nuevo")
La figura 28 muestra una representación de tabla de una comparación de la demanda de memoria del codificador sin ruido para WD6, para un ejemplo de comparación ("M17588") y para una realización según la invención ("Nueva propuesta");
La figura 29 muestra una representación de tabla de características de tablas como se usa en una realización según la invención ("esquema de codificación formado de nuevo");
La figura 30 muestra una representación de tabla de números de complejidad promedio para decodificar los flujos de bits de calidad de referencia WD6 a 32 kbit/s para las diferentes versiones del codificador aritmético;
La figura 31 muestra una representación de tabla de números de complejidad promedio para decodificar los flujos de bits de calidad de referencia WD6 a 12 kbit/s para las diferentes versiones del codificador aritmético;
La figura 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;
La figura 33 muestra una representación de tabla de las tasas de bits mínima, máxima y media de USAC sobre una base de tramas utilizando el esquema propuesto;
La figura 34 muestra una representación de tabla de tasas de bits medias 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"); La figura 35 muestra una representación de tabla de los mejores y peores casos para una realización según la invención;
La figura 36 muestra una representación de tabla del límite del depósito de bits para una realización según la invención; La figura 37 muestra una representación de sintaxis de datos codificados aritméticamente "arith_data", según una realización de la invención;
La figura 38 muestra una leyenda de definiciones y elementos de ayuda;
La figura 39 muestra otra leyenda de definiciones;
La figura 40a muestra una representación de código de pseudo-programa de una función o algoritmo "arith_map_context", según una realización de la invención;
La figura 40b muestra una representación de código de pseudo-programa de una función o algoritmo "arith_get_context", según una realización de la invención;
La figura 40c muestra una representación de código de pseudo-programa de una función o algoritmo "arith_map_pk", según una realización de la invención;
La figura 40d muestra una representación de código de pseudo-programa de una primera porción de una función o algoritmo "arith_decode", según una realización de la invención;
La figura 40e muestra una representación de código de pseudo-programa de una segunda porción de una función o algoritmo "arith_decode", según una realización de la invención;
La figura 40f muestra una representación de código de pseudo-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;
La figura 40g muestra una representación de código de pseudo-programa de una función o algoritmo "arith_update_context", según una realización de la invención;
La figura 40h muestra una representación de código de pseudo-programa de una función o algoritmo "arith_save_context", según una realización de la invención;
Las figuras 41(1) y 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;
Las figuras 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;
Las figuras 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
La figura 44 muestra una representación de 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 figura 7
[0018] La figura 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.
[0019] 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 comprenda un conjunto de valores espectrales.
[0020] El codificador de audio 700 comprende también 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 (que puede comprender, por ejemplo, una pluralidad de palabras de código de longitud variable).
[0021] 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.
[0022] 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).
[0023] 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.
[0024] La hash_table (también designada como “ari_hash_m” en lo sucesivo) se define preferiblemente como se da en la representación de tabla de las figuras 22(1), 22(2), 22(3) y 22(4).
[0025] Además, el codificador aritmético está configurado preferiblemente para evaluar la tabla de búsqueda (ari_hash_m), para determinar si 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.
[0026] En algunos casos, el valor de índice de la regla de asignación puede estar 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 estar 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 son definidos preferiblemente por las entradas de la tabla de búsqueda).
[0027] Como puede observarse 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 puede ser configurado para dar seguimiento al 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 tomar la forma preferiblemente 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 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 e intervalos de 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 la figura 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.
[0028] Preferiblemente, pero no necesariamente, un valor del índice de la regla de asignación puede estar asociada 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 estar asociado con diferentes valores de contexto numérico que se encuentren dentro de un intervalo limitado por los límites del intervalo.
[0029] 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 del 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 selecciona una regla de asignación apropiada, se evalúan los valores del contexto numérico actual 754 proporcionados por un seguidor de estado 750. Dado 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 se deberá asociar una regla de asignación particular para obtener una buena eficacia de codificación.
[0030] Se ha encontrado que la selección de una regla de asignación de dependencia de un valor de un contexto numérico actual puede ser efectuada con una eficacia computacional particularmente alta si las entradas de una sola tabla de búsqueda define 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 figuras 22(1), 22(2), 22(3), 22(4) proporciona una eficacia 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 esta 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 la figura 22(1), 22(2), 22(3), 22(4) y definen ambos valores de estado significativos y los límites de los intervalos de los valores del contexto numérico (actual) puede gestionar de manera eficaz diferentes casos, en los cuales, por ejemplo, existen 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 eficacia 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 si 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 se encuentran los intervalos de los valores de estado no significativos del valor del contexto numérico actual. En consecuencia, el número de accesos de la tabla que, consumen tiempo y consumen energía, se puede mantener reducido. De este modo el selector de la regla de asignación 760 que usa la tabla de búsqueda 762 puede ser considerado como un selector de la regla de asignación particularmente eficaz en términos de la complejidad computacional, permitiendo a la vez obtener una buena eficacia de codificación (en términos de la velocidad de bits).
[0031] 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 serán descritos más adelante.
2. Decodificador de audio según la figura 8
[0032] La figura 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.
[0033] 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.
[0034] El decodificador de audio 800 comprende también 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.
[0035] 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 puede estar configurado 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).
[0036] El decodificador aritmético 820 está configurado para seleccionar una regla de asignación (por ejemplo una tabla 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).
[0037] 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.
[0038] El decodificador aritmético está configurado también 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]) se definen como se da en la representación en tabla de las figuras 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.
[0039] 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.
[0040] 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 van a ser decodificados, 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, se pueden aprovechar las dependencias estadísticas entre los valores espectrales adyacentes que van a ser decodificados. Además, el decodificador aritmético 820 puede ser implementado de manera eficaz, con un buen intercambio entre la complejidad computacional, el tamaño de la tabla y la eficacia de codificación, usando el selector de la regla de asignación 828. Mediante la evaluación de 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 figuras 22(1), 22(2), 22(3), 22(4) proporciona una eficacia 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. Mediante el uso de la tabla de búsqueda 829, como se describió anteriormente y como se define en la representación en tabla de las figuras 22(1) a 22(4), es posible aprovechar 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 regla 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.
[0041] 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 eficacia 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.
[0042] Los detalles adicionales se describirán más adelante.
3. Mecanismo de búsqueda del valor de contexto según la figura 9
[0043] En lo sucesivo, se describirá un mecanismo de búsqueda de contexto, el cual puede ser implementado 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 figuras 22(1) a 2(4), puede usarse para implementar el mecanismo de búsqueda del valor del contexto.
[0044] Tomando como referencia ahora la figura 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 figura 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 "incorrectos" que describe los estados significativos “incorrectos", donde un estado significativo "incorrecto" 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.
[0045] Como puede observarse, 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 puede observarse, 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 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 sea 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".
[0046] Además, un valor del índice de la regla de asignación mriv2 puede estar asociado con valores de contexto numérico que se encuentran dentro de un intervalo 934. Un límite inferior del intervalo 934 es determinado por el valor del contexto numérico c1, que es 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 es determinado 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 mayor del intervalo 934 sea igual a c2 - 1. El valor del contexto numérico c2 es un denominado valor de contexto numérico "incorrecto", el cual es descrito 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 estar 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 "incorrecto" 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 limitado también 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 mriv2, está asociado con valores del contexto numérico de los intervalos 936.
[0047] Como puede observarse, 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 superior, en 1, que el valor del índice de la tabla de búsqueda i1.
[0048] Como puede observarse de la figura 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 "incorrecto"), 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 "incorrectos") 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 cuyos intervalos 932, 934, 936 se encuentra el valor del contexto numérico actual (en el caso de que el valor del contexto numérico actual no sea igual a un valor de estado significativo) puede ser efectuada usando una sola búsqueda de la tabla de búsqueda común.
[0049] 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 puede ser configurado para obtener, evaluando una sola 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.
[0050] 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 de la tabla de búsqueda (por ejemplo, i1-1, i1 o i2) obtenido 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.
[0051] 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 figuras 5e y 5f).
[0052] 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 figura 10
[0053] La figura 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 figura 10 es similar al codificador de audio 700 según la figura 7, de modo que las señales y medios idénticos son designados con números de referencia idénticos en las figuras 7 y 10.
[0054] 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 comprende también 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).
[0055] El codificador aritmético 1030 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 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 de 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 van a ser codificados (por ejemplo, para seleccionar una regla de asignación correspondiente).
[0056] Como se puede observar, la asignación de un valor espectral, o de una pluralidad de valores espectrales, o 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 se puede efectuar por una codificación del valor espectral 740 mediante el uso de 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 puede estar configurado 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 codificados, 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 que van a ser codificados. 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 seguidor 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 de 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.
[0057] 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 puede estar configurado para usar una tabla de búsqueda "ari_hash_m[742]", como se define en la representación en tabla de las figuras 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 figuras 7 y 8.
[0058] 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.
[0059] 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 asociado con uno o más valores espectrales que van a ser codificados. Esta estrategia permite evitar calcular de manera completa el valor del contexto numérico actual, cuyo recálculo completo consume una cantidad significativa de recursos en estrategias 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.
[0060] 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 uso en combinación con la tabla de búsqueda ari_hash_m como se define en la representación de la tabla de las figuras 22(1), 22(2), 22(3), 22(4).
[0061] En consecuencia, se puede lograr una codificación eficaz manteniendo el cálculo de contexto suficientemente simple.
5. Decodificador de audio según la figura 11
[0062] La figura 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 figura 8, de modo que las señales, medios y funcionalidades idénticas son designadas con números de referencia idénticos.
[0063] 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 comprende también 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.
[0064] 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 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 estar configurado 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.
[0065] 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 que 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 van a ser decodificados. 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 puede ser efectuada 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 puede estar configurado para usar una tabla de búsqueda "ari_hash_m[742]", como se define en la representación en tabla de las figuras 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 figuras 7 y 8.
[0066] 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 que va a ser decodificado, cuando se seleccione 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 aprovechar las dependencias estadísticas entre los valores espectrales adyacentes que se van a decodificar.
[0067] 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 van a ser decodificados, 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 figuras 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 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 pueden mantenerse relativamente reducidos. También, es posible aprovechar 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 eficacia computacional de la derivación del contexto, es decir, de la derivación del valor del contexto numérico actual, se puede lograr aprovechando 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) se puede aprovechar de manera eficaz modificando solo 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.
[0068] Para concluir, los conceptos descritos en esta invención permiten una eficacia computacional particularmente buena cuando se derive el valor del contexto numérico actual.
[0069] Los detalles adicionales se describirán más adelante.
6. Codificador de audio según la figura 12
[0070] La figura 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 figura 12 es similar al codificador de audio 700 según la figura 7, de modo que los medios, señales, y funcionalidades idénticas son designados con números de referencia idénticos.
[0071] 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 comprenda un conjunto de valores espectrales. El codificador de audio 1200 comprende también 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).
[0072] 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 van a ser codificados 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.
[0073] Como puede observarse, la asignación de un valor espectral, o de una pluralidad de valores espectrales, o de un plano de bits más significativo de un valor espectral o de una pluralidad de valores espectrales, sobre un valor de código puede efectuarse 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 de 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 está configurado también 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 describen 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 puede estar configurado para usar la tabla de búsqueda "ari_hash_m[742]", de acuerdo a lo definido en la representación de la tabla de las figuras 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 figuras 7 y 8.
[0074] 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.
[0075] 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.
[0076] Mediante el cálculo de 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 van a ser codificados, 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 la estrategia discutida 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 que va a ser almacenada para su uso posterior. También, se ha encontrado que el cálculo de una norma de un vector de valores espectrales previamente codificados es una estrategia razonable para la derivación de un valor de subregión de contexto, puesto que el efecto de la promediación, que se obtiene típicamente del cálculo de la norma, deja la información más importante acerca del estado del contexto substancialmente inalterada. 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 se presenta la información más relevante acerca del estado del contexto a pesar de la reducción de la cantidad de información.
[0077] 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]", de acuerdo a lo definido en la representación en tabla de las figuras 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 figuras 7 y 8.
[0078] En consecuencia, se puede lograr una codificación eficaz de información de audio de entrada 710, manteniendo a la vez el esfuerzo computacional y la cantidad de datos que van a ser almacenados por el codificador aritmético 1230 lo suficientemente reducidos.
7. Decodificador de audio según la figura 13
[0079] La figura 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 figura 8 y al decodificador de audio 1100 según la figura 11, los medios, señales y funcionalidades idénticas son designados con números idénticos.
[0080] 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 un decodificador aritmético 1320 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 1300 comprende también 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.
[0081] 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 es descrito 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.
[0082] 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 figuras 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 figuras 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 está configurado también 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 van a ser decodificados 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.
[0083] 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 van a ser decodificados dependiendo de los valores de subregión de contexto almacenados. La selección de las reglas de asignación puede ser efectuada 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.
[0084] 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 van a ser decodificados, 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 aprovechar las dependencias estadísticas entre los valores espectrales adyacentes que van a ser decodificados.
[0085] Sin embargo, se ha encontrado que es eficaz, 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 eficacia de la codificación, la eficacia computacional y la eficacia de almacenamiento.
[0086] Los detalles adicionales serán descritos más adelante.
8. Codificador de audio según la figura 1
[0087] En lo sucesivo, se describirá un codificador de audio según una realización de la presente invención. La figura 1 muestra un diagrama esquemático de bloques de ese codificador de audio 100.
[0088] 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 comprende también un transformador de señales en el dominio del tiempo al dominio de la frecuencia que compacta energía 130, el cual se designa también 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 misma, 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 puede estar configurado 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 puede estar configurado 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.
[0089] 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 formación de ventana 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.
[0090] El codificador de audio 100 puede además, comprender, opcionalmente, un post-procesador 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 post-procesada 142. El post-procesador espectral 140 puede, por ejemplo, estar configurado para efectuar una formación de ruido temporal y/o predicción a largo plazo y/o cualquier otro post-procesamiento espectral conocido en la técnica. El codificador de audio comprende además, opcionalmente, un escalador/cuantizador 150, el cual está configurado para recibir una representación de audio del dominio de la frecuencia 132 o la versión post-procesada 142 de la misma y para proporcionar una representación de audio en el dominio de la frecuencia escalada y cuantizada 152.
[0091] 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 post-procesada 110a de la misma) para proporcionar sobre la base de la misma, información de control opcional, que puede usarse 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 post-procesador espectral opcional 140 y/o para el control del escalador/cuantizador opcional 150. Por ejemplo, el procesador de modelo psico-acústico 160 puede estar configurado para analizar la información de audio de entrada, para determinar qué componentes de la información de audio de entrada 110, 110a son particularmente importantes para la percepción humana del contenido de audio y qué 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 psico-acústico 160 puede proporcionar información de control, la cual es usada por el codificador de audio 100 para ajustar el escalamiento de la representación de audio en el dominio de la frecuencia 132, 142 por el escalador/cuantizador 150 y/o la resolución de cuantización aplicadas el escalador/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 mayores que los valores espectrales de frecuencias perceptualmente menos importantes.
[0092] El codificador de audio comprende también 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 post-procesada 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.
[0093] El codificador de audio 100 comprende también 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, está configurado también típicamente para recibir información adicional, como, por ejemplo, información del factor de escala que describe los factores de escala que han sido aplicados por el escalador/cuantizador 150. Además, el formateador de la carga útil del flujo de bits 190 puede estar configurado 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 de acuerdo a una sintaxis del flujo de bits deseada, la cual será descrita más adelante.
[0094] 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 post-procesados 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 significativo 174, o incluso de dos valores espectrales, el cual está configurado para extraer un plano de bits más significativo m de un valor espectral. Cabe observar aquí que el plano de bits más significativo puede comprender uno o incluso 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 significativo 176 de un valor espectral.
[0095] De manera alternativa, sin embargo, el extractor del plano bits más significativo 174 puede proporcionar un valor del plano de bits más significativo 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 significativo del valor espectral a se designa con una m. De manera alternativa, el valor del plano de bits más significativo combinado de una pluralidad de valores espectrales a, b se designa con m.
[0096] El codificador aritmético 170 comprende también 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 significativo m. Opcionalmente, el determinador de la palabra de código 180 puede proporcionar también una o más palabras de código de escape (también designadas en esta invención 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 significativo). El primer determinador de palabra de código 180 puede estar configurado para proporcionar la palabra de código asociada con un valor del plano de bits más significativo m mediante el uso de una tabla de frecuencias acumulativas seleccionadas que tenga (o sea mencionada por) un índice de tabla de frecuencias acumulativas pki.
[0097] Para determinar qué tabla de frecuencias acumulativas deberá ser seleccionada, el codificador aritmético comprende preferiblemente un seguidor de estado 182, el cual está configurado para seguir el estado del codificador aritmético, por ejemplo, observando los valores espectrales que 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 comprende también 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, es seleccionada 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] que codifica el valor del plano de bits más significativo 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.
[0098] 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.
[0099] El codificador aritmético 170 comprende además un extractor del plano de bits menos significativo 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 van a ser codificados excede el intervalo de valores codificables usando el plano de bits más significativo ú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 significativo 189a proporciona una información del plano de bits menos significativo 189b. El codificador aritmético 170 comprende también 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 puede estar configurado 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 significativo "acod_r" de la información del plano de bits menos significativo 189b.
[0100] 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 va a ser codificado es comparativamente pequeño, de modo que pueda existir un plano de bits menos significativo si el valor espectral escalado y cuantizado actual que va a ser codificado es de un intervalo medio y de modo que pueda existir más de un plano de bits menos significativo si el valor espectral escalado y cuantizado que va a ser codificado toma un valor comparativamente grande.
[0101] Para resumir lo anterior, el codificador aritmético 170 está configurado para codificar valores espectrales escalados y cuantizados, los cuales son descritos por la información 152, usando un procedimiento de codificación jerárquico. El plano de bits más significativo (que comprende, por ejemplo, uno, dos o tres bits por valor espectral) de uno o 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 significativo m. Uno o más planos de bits menos significativos (cada uno de los planos de bits menos significativos que comprende, 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 significativo, el valor m del valor de bits más significativo se asigna a una palabra de código acod_m[pki][m]. Para este propósito, están disponibles 64 tablas de frecuencias acumulativas diferentes 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
[0102] El codificador de audio 100 puede estar configurado 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 puede estar configurado para proporcionar una información de reajuste (por ejemplo, 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 deberá ser reajustado.
[0103] Los detalles con respecto al formato del flujo de bits y las tablas de frecuencia acumulativa aplicadas serán se discutirán más adelante.
9. Decodificador de audio según la figura 2
[0104] En lo sucesivo, se describirá un decodificador de audio según una realización de la invención. La figura 2 muestra un diagrama esquemático de bloques de tal decodificador de audio 200.
[0105] 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.
[0106] El decodificador de audio 200 comprende un 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 puede estar configurado para extraer del flujo de bits 210 datos espectrales codificados 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 significativo 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 significativo 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 figura 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".
[0107] El decodificador de audio 200 comprende un decodificador aritmético 230, el cual también es designado 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á configurado también 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 son descritos por la representación de audio en el dominio de la frecuencia codificada 220.
[0108] El decodificador de audio 200 comprende también 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.
[0109] El decodificador de audio 200 comprende además un pre-procesador 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 pre-procesada 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 comprende también un transformador de señales del dominio de la frecuencia al dominio del tiempo 260, el cual también es designado como un "convertidor de señales". El transformador de señales 260 está configurado para recibir la versión pre-procesada 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 modificada inversa (IMDCT) y una formación de ventana apropiada (así como otras funcionalidades apropiadas, como, por ejemplo, una superposición y adición).
[0110] El decodificador de audio 200 puede comprender además un post-procesador 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 post-procesamiento en el dominio del tiempo. Sin embargo, si se omite el post-procesamiento, la representación en el dominio del tiempo 262 puede ser idéntica a la información de audio decodificada 212.
[0111] Cabe observar aquí que el cuantizador/reescalador inverso 240, el pre-procesador espectral 250, el transformador de señales del dominio de la frecuencia al dominio del tiempo 260 y el post-procesador en el dominio del tiempo 270 puede ser controlado 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.
[0112] Para resumir la funcionalidad total del decodificador de audio 200, una representación de 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 pre­ procesados. En consecuencia, se obtiene un conjunto de valores espectrales cuantizados de manera inversa, reescalados y pre-procesados (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 pre-procesados 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 adición 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, al estándar internacional ISO/IEC 14496-3, parte 3, subparte 4, donde se da una discusión detallada. Sin embargo, se pueden usar otros esquemas de superposición y cancelación de alias más elaborados.
[0113] 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 significativo m. El determinador del plano de bits más significativo 284 puede estar configurado para usar una tabla de frecuencias acumulativas de un conjunto que comprende 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]".
[0114] El determinador del plano de bits más significativo 284 está configurado para derivar valores 286 de un plano de bits más significativo 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 significativo 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 significativo 288 está configurado para proporcionar valores decodificados 290 de uno o más planos de bits menos significativos. El decodificador de audio 200 comprende también 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 está 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.
[0115] 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, que tiene 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] de acuerdo a lo definido por la representación en tabla de las figuras 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 puede ser opcionalmente reajustada 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 significativo m dependiendo del código de palabra "acod_m".
[0116] Para resumir la funcionalidad del decodificador de audio 200, el decodificador de audio 200 está configurado para recibir una representación de audio del 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 aprovecha 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 se aprovechan seleccionando diferentes tablas de frecuencias acumulativas de un conjunto que comprende 64 tablas de frecuencias acumulativas diferentes dependiendo de un índice de estado 298, el cual se obtiene observando los valores espectrales decodificados previamente calculados.
[0117] 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
[0118] 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.
[0119] Se colocó el enfoque sobre la descripción del algoritmo de decodificación. Cabe observar, sin embargo, que se puede efectuar 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 van a ser codificados toman el lugar de los valores espectrales que van a ser decodificados.
[0120] Cabe observar que la decodificación, la cual será discutida en lo sucesivo, se usa para permitir la llamada "codificación espectral sin ruido" de valores espectrales típicamente post-procesados, 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, que se usa en realizaciones de la invención, se basa en una codificación aritmética en conjunto con un contexto adaptado dinámicamente.
[0121] En algunas realizaciones según la invención, el esquema de codificación espectral sin ruido se basa en 2-tuplas, es decir, que dos coeficientes espectrales vecinos son combinados. Cada 2-tuplas 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 figura 4. Las tablas de frecuencias acumulativas (que se explicarán más adelante) son usadas 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).
[0122] 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.
[0123] La codificación sin ruido para el plano de bits o plano de bits menos significativo restante 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 significativo restante.
[0124] 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 2-tuplas 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 figura 4. Las tablas de frecuencias acumulativas son utilizadas entonces por el codificador aritmético para generar un código binario de longitud variable.
[0125] 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
[0126] En lo sucesivo, se dará un resumen del procedimiento de codificación de un valor espectral tomando como referencia la figura 3, la cual muestra una representación de un pseudocódigo del programa del procedimiento de decodificación de una pluralidad de valores espectrales.
[0127] 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. Tanto el reajuste del contexto como la derivación del contexto actual de un contexto previo se discutirán más adelante. Preferiblemente, se puede usar la función "arith_map_context(N, arith_reset_flag)" según la figura 5a, pero se puede usar alternativamente la función según la figura 5b.
[0128] La decodificación de una pluralidad de valores espectrales comprende también 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 es efectuada 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 1g/2 veces, donde 1g/2 indica el número de 2-tuplas de valores espectrales que van a ser decodificados (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 1g valores espectrales comprende también una decodificación de signos 314 y una etapa de finalización 315.
[0129] 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 significativo 312b, una detección del símbolo aritmético de parada 312c, una adición del plano de bits menos significativo 312d y una actualización de la matriz 312e.
[0130] 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 figura 5c o 5d. Preferiblemente, se usa la función "arith_get_context(c,i,N)" según la figura 5c. En consecuencia, se proporciona 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 puede observarse, 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.
[0131] 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 es inicializada 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 figuras 5e y 5f). Preferiblemente, se usa la función "arith_get_pk(c)" según la figura 5e. El algoritmo 312ba comprende también la selección de una tabla de frecuencias acumulativas dependiendo del índice de estado "pki", que es devuelto por la llamada de la función "arith_get_pk", donde una variable "cum_freq" se puede ajustar a una dirección de inicio de una de 64 tablas (o subtablas) de frecuencias acumulativas dependiendo del índice de estado "pki". La variable "cfl" puede ser inicializada también 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 valores diferentes 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 significativo m es 17, puesto que pueden ser decodificados 16 valores de plano de bits más significativo diferente 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 figuras 23(1), 23(2), 23(3), la cual define la 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.
[0132] Posteriormente, se puede obtener un valor del plano de bits más significativo m ejecutando una función "arith_decode()", teniendo en cuenta la tabla de frecuencias acumulativas seleccionada (descrita por la variable "cum_freq" y la variable "cfl"). Cuando se deriva el valor del plano de bits más significativo m, los bits llamados "acod_m" del flujo de bits 210 pueden ser evaluados (véase, por ejemplo, la figura 6g o la figura 6h). Preferiblemente, se usa la función "arith_decode(cum_freq,cfl)" según la figura 5g, pero de manera alternativa se puede usar la función "arith_decode(cum_freq,cfl) "según las figuras 5h y 5i.
[0133] El algoritmo 312ba comprende también la verificación de si el valor del plano de bits más significativo m es igual a un símbolo de escape "ARITH_ESCAPE", o no. Si el valor del plano de bits más significativo 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 son entonces omitidas. En consecuencia, la ejecución del procedimiento continúa 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 ajusta 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").
[0134] Tan pronto como el plano de bits más significativo se decodifique usando una ejecución temporal o ejecución iterativa del algoritmo 312ba, es decir, que un valor del plano de bits más significativo m diferente del símbolo de escape aritmético sidote haya decodificado, el valor espectral variable "b" se ajustará igual a una pluralidad de (por ejemplo 2) bits más significativos del valor del plano de bits más significativo m, y el valor espectral variable "a" se ajustará 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 se pueden observar, por ejemplo, en la referencia numérica 312bb.
[0135] 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 significativo 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 significativo 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 significativo 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 significativo 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.
[0136] Después de la evaluación de si existe una condición de interrupción aritmética, que 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 figura 3. Por cada plano de bits menos significativo, 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 es designado por la variable lev.
[0137] 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 es determinado por la variable "lev". Cabe observar aquí que la primera iteración del algoritmo 212da es efectuada sobre la base de los valores de las variables a, b, como en la etapa 212bb. Las iteraciones adicionales del algoritmo 212da son efectuadas sobre la base de valores de variables actualizados de las variables a, b.
[0138] Al inicio de una iteración, se selecciona una tabla de frecuencias acumulativas. Posteriormente, se efectúa la 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 un bit menos significativo asociado con la variable b. La función "ARITH_DECODE" (por ejemplo, como se define en la figuras 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.
[0139] Posteriormente, 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 sean decodificados.
[0140] 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 dicha matriz que tienen índices de matriz 2*i y 2*i+1.
[0141] Posteriormente, se actualiza el estado del contexto llamando la función "arith_update_context(i,a,b)", cuyos detalles se explicarán más adelante tomando como referencia la figura 5g. Preferiblemente, se puede usar la función "arith_update_context(i,a,b)", como se define en la figura 5l.
[0142] Después de la actualización del estado del contexto, que 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 1g/2 o se detecta una condición de interrupción aritmética.
[0143] Posteriormente, se efectúa un quinto algoritmo "arith_fnish()", como se puede observar 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 figura 5m.
[0144] 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 que son diferentes de cero son identificados individualmente. En el algoritmo 314, se leen los signos de todos los valores espectrales que tengan índices i entre i = 0 e i = 1g-1, que sean diferentes de cero. Por cada valor espectral diferente de cero que tenga un índice de valor espectral i entre i = 0 e i = lg-1, se lee un valor s (típicamente un solo bit), del flujo de bits. Si el valor de s, que se lee del flujo de bits es igual a 1, el signo del valor espectral se invierte. 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.
[0145] 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.
[0146] 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 de acuerdo a la presente invención. En algunas realizaciones, la decodificación de cualquier plano de bits menos significativo puede aún omitirse. De manera alternativa, pueden usarse diferentes algoritmos de decodificación para este propósito.
11.2 Orden de decodificación según la figura 4
[0147] En lo sucesivo, se describirá el orden de decodificación de los valores espectrales.
[0148] Los coeficientes espectrales cuantizados "x_ac_dec[]" se codifican de manera no ruidosa y se transmiten (por ejemplo en el flujo de bits) partiendo del coeficiente de menor frecuencia y progresando hacia el coeficiente de mayor frecuencia.
[0149] En consecuencia, los coeficientes espectrales cuantizados "x_ac_ec[]" son decodificados 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 son decodificados por grupos de dos coeficientes sucesivos (por ejemplo adyacentes en frecuencia) a y b reunidos en una llamada 2-2-tupla (a, b) (también designada con {a, b}). Cabe observar aquí que los coeficientes espectrales cuantizados son algunas veces designados también con "qdec".
[0150] Los coeficientes decodificados "x_ac_dec[]" para un modo en el dominio de la frecuencia (por ejemplo, los coeficientes decodificados para una codificación de audio avanzada, por ejemplo, obtenidos usando una transformación cosinusoidal discreta modificada, como se describe en el ISO/IEC 14496, parte 3, subparte 4) son entonces almacenados 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 se decodifican en el orden recibido y se almacenan 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 un código de palabra, el orden de decodificación es a, b (es decir, a y, a continuación, b).
[0151] Los coeficientes decodificados "x_ac_dec[]" para la excitación codificada por transformación (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 y se almacenan en la matriz, "bin" es el índice que se incrementa más rápidamente, y "win" 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, a continuación, 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 son típicamente codificados y decodificados antes de un coeficiente espectral asociado con una frecuencia más alta.
[0152] De manera notable, el decodificador de audio 200 puede estar configurado 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 como un filtro de predicción lineal excitado por la salida del transformador de señales del dominio de la frecuencia al dominio del tiempo.
[0153] En otras palabras, el decodificador aritmético, la funcionalidad del cual se discute aquí con detalle, es muy adecuada para decodificar valores espectrales de una representación en el dominio del tiempo - frecuencia de 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 gestionar tanto el contenido de audio codificado en el dominio de la frecuencia como el 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 figuras 5a y 5b
[0154] 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.
[0155] 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 figura 5a y un segundo ejemplo del cual se muestra en la figura 5b.
[0156] Como puede observarse, 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).
[0157] Haciendo referencia al algoritmo ejemplar "arith_map_context" en la figura 5a, la variable N describe una longitud de una ventana actual y la variable de entrada "arith_reset_flag" indica si el contexto deberá ser reajustado. 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 2-tuplas 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.
[0158] Primero, cabe observar que el indicador "arith_reset_flag" determina si el contexto debe ser reajustado.
[0159] Tomando como referencia el ejemplo de la figura 5a, se puede efectuar la asignación del contexto según el algoritmo "arith_mapcontext()". 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 deberá ser reajustado. De otro modo, si el indicador "arith_reset_flag" está inactivo, las entradas "q[0][j]" de la matriz del contexto actual q son derivadas 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 figura 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.
[0160] 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 figura 5a para los detalles.
[0161] Además, se devuelve un valor de inicialización para el valor del contexto numérico actual c 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 es inicializado apropiadamente para una actualización iterativa.
[0162] Además, la figura 5b muestra otro ejemplo de un algoritmo "arith_map_context()" que se puede usar de manera alternativa. Para los detalles, se hace referencia al pseudocódigo del programa de la figura 5b.
[0163] Para resumir lo anterior, el indicador "arith_reset_flag" determina si se debe ajustar el contexto. 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 son almacenados en 4 bits por 2-tupla. El copiado y/o asignación del elemento del contexto se efectúan, por ejemplo, en un subalgoritmo 500b.
[0164] 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.
[0165] En el ejemplo de la figura 5b, el procedimiento de decodificación comienza con una fase de inicialización donde se efectúa una asignación entre el contexto anterior recuperado y almacenado en qs y l contexto de la trama actual q. El contexto pasado qs se almacena en 2 bits por línea de frecuencia.
11.4 Cálculo del valor de estado según las figuras 5c y 5d
[0166] En lo sucesivo, se describirá con mayor detalle el cálculo del valor de estado 312a.
[0167] Se describirá un primer algoritmo preferido tomando como referencia la figura 5c y se describirá un segundo algoritmo ejemplar alternativo tomando como referencia la figura 5d.
[0168] Cabe observar que el valor del contexto numérico actual c (como se muestra en la figura 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 figura 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 figura 5d.
[0169] Con respecto al cálculo del valor de estado, también se hace referencia a la figura 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 figura 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 puede observarse en la figura 4, una tupla 420 de valores espectrales que se van 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 puede observarse, para el índice de tiempo t0, las tuplas que tienen los índices de frecuencia i-1, i-2 y i-3 se decodifican fácilmente en el momento en el cual los valores espectrales de la tupla 120, que tienen el índice de frecuencia i, se vana decodificar. Como puede observarse a partir de la figura 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 sea considerada para el contexto que se usa para la decodificación de la tupla 420 de valores espectrales. De 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, se decodifican fácilmente antes de que la tupla 420 de valores espectrales se decodifique, y son consideradas para la determinación del contexto, que 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 son decodificados y considerados para el contexto son mostrados por un cuadro sombreado. En contraste, algunos otros valores espectrales ya decodificados (en el momento cuando los valores espectrales de la tupla 420 son decodificados) 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 han decodificado en el momento cuando los valores espectrales de la tupla 420 se han decodificado) son mostrados 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 usan para determinar el contexto para la decodificación de los valores espectrales de la tupla 420.
[0170] Sin embargo, cabe observar que algunos de estos valores espectrales, que no se usan 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.
[0171] Tomando como referencia ahora la figura 5c, se describirán los detalles del algoritmo "arith_get_context(c,i,N)". La figura 5c muestra la funcionalidad de la función "arith_get_context(c,i,N)" en forma de pseudocódigo de programa, que usa las convenciones del lenguaje C y/o el lenguaje C++ bien conocidos. De este modo, se describirán algunos o más detalles con respecto al cálculo del valor del contexto numérico actual "c" el cual es efectuado por la función "arith_get_context(c,i,N)".
[0172] 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 2-tupla de valores espectrales que se van 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.
[0173] 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 puede ser considerado 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[][].
[0174] 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) son desechados. 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.
[0175] Además, si el índice i de la 2-tupla es menor de N/4-1, es decir, que no toma un valor máximo, el valor del contexto numérico actual se modifica dado que el valor de la entrada q[0][i+1] se suma a los bits 12 a 15 (es decir, a los bits que tienen un peso numérico de 212, 213, 214 y 215) del valor del contexto desplazado que 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, que 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, de acuerdo a lo definido con referencia a la figura 4) y con una frecuencia mayor (por ejemplo, una frecuencia que tiene el índice de frecuencia i 1 de acuerdo a lo definido con referencia a la figura 4) que la tupla de valores espectrales que van a ser decodificados 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.
[0176] La adición selectiva de la entrada q[0][i l] de la matriz q[][] (desplazada hacia la izquierda 12 bits) se muestra en la referencia numérica 504b. Como puede observarse, 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-l.
[0177] 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.
[0178] En una etapa 504d, el valor de la entrada q[1][i-1] se suma al valor de la variable c, que 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-tupla que se va a decodificar es mayor que cero. Cabe observar que la entrada q[1][i-l] 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 van a ser decodificados usando el valor del contexto numérico actual. Por ejemplo, la entrada q[1][i-1] de la matriz q[][] puede estar asociada 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 devuelto por la presente ejecución de la función "arith_get_context(c,i,N)".
[0179] 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 son desechados 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) son ajustados 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 de contexto numérico previo desplazado (es decir, los bits 4, 5, 6 y 7 del valor del contexto numérico previo original) son sobrescritos por el valor de la subregión del contexto [1][i-1] en las etapas 504c y 504d.
[0180] 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, que se introduce en la función "arith_get_context(c,i,N)", está asociado con la decodificación de la tupla 430 de valores espectrales.
[0181] El valor del contexto numérico actual, que 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, puede observarse 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, se incluyen también 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 son desechados 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.
[0182] 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 tupla que se va a decodificar es mayor que un número predeterminado de, por ejemplo, 3. En este caso, es decir, si i es mayor 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][il] comprenden un valor de suma particularmente pequeño. Por ejemplo, el bit 16 del valor del contexto numérico actual puede actuar como un indicador para indicar tal condición.
[0183] 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 se suma a la variable c. En consecuencia, el valor de la variable c obtenida en las etapas 504a, 504b, 504c, 504d es devuelto, 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, que 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 es devuelto, en la etapa 504e, si se cumple la condición evaluada en la etapa 540e.
[0184] Para resumir lo anterior, cabe observar que el decodificador sin ruido produce 2-tuplas 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 2-tupla 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 2-tuplas decodificadas (el cual se designa como un valor del contexto numérico previo), considerando únicamente dos nuevas 2-tuplas (por ejemplo, las 2-tuplas 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 es devuelto por la función "arith_get_context()". Para los detalles, se hace referencia a la representación de código de programa de la figura 5c.
[0185] 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 figura 5d. La función "arith_get_context(c,i)" según la figura 5d es similar a la función "arith_get_context(c,i,N)" según la figura 5c. Sin embargo, la función "arith_get_context(c,i)" según la figura 5d no comprende una gestión o decodificación especial de tuplas de valores espectrales que comprendan 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
[0186] En lo sucesivo, se describirá la selección de una regla de asignación, por ejemplo, una tabla de frecuencias acumulativas que 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 es descrito por el valor del contexto numérico actual c.
11.5.1 Selección de la regla de asignación mediante el uso del algoritmo según la figura 5e
[0187] 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()" es llamada o recuperada al inicio del sub-algoritmo 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)" es llamada 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)" es llamada o recuperada con un argumento que 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 sub-algoritmo 312ba, la función "arith_get_pk(c)" es llamada con un argumento que 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 mayores, la variable de entrada de la función "arith_get_pk()" se modifica dado que el valor de la variable "esc_nb", se toma en consideración, como se muestra en la figura 3.
[0188] Tomando como referencia ahora la figura 5e, que 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", que describe un índice de un modelo de probabilidad y que puede ser considerada como un valor del índice de regla de asignación.
[0189] Tomando como referencia la figura 5e, puede observarse 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 que 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 figura 18). En consecuencia, las variables "i_min" y "i_max" definen un intervalo. Por ejemplo, i_max se puede inicializar al valor 741.
[0190] Posteriormente, se efectúa una búsqueda 506b para identificar un valor de índice que designe una entrada de la tabla "ari_hash_m", que se escoge de acuerdo a lo definido en la representación de las figuras 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.
[0191] En la búsqueda 506b, se repite un sub-algoritmo 506ba, mientras que una diferencia entre las variables "i_max" y "i_min" es mayor de 1. En el sub-algoritmo 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 figuras 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" e "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[]", cuya entrada se encuentra en 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 de 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" e "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]".
[0192] 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 un 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)").
[0193] Para resumir lo anterior, se evalúa una entrada "ari_hash_m[i]", los bits más superiores (bits 8 y hacia arriba) de los cuales describen 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()" se compara 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 mayor que el valor del estado significativo descrito por la entrada de la tabla "ari_hash_m[i]", el límite inferior (que es descrito por el valor de la variable "i_min") del intervalo de la tabla se incrementa. En ambos de esos casos, el sub-algoritmo 506ba se repite, a menos que el tamaño del intervalo (definido por la diferencia entre "i_max" e "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]", 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]".
[0194] Si, sin embargo, la búsqueda 506b termina debido a que el tamaño del intervalo alcanza 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()" es determinado por una entrada "ari_lookup_m[i_max]" de la tabla ["ari_lookup_m]", lo cual se puede observar en el número de referencia 506c. La tabla ari_lookup_m[] se escoge preferiblemente de acuerdo a lo definido en la representación en tabla de la figura 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 figuras 22(1), 22(2), 22(3), 22(4) definen valores de estado significativos y límites de intervalos. En el sub-algoritmo 506ba, los límites del intervalo de búsqueda "i_min" e "i_max" son adaptados 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 sub-algoritmo 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[]".
[0195] Si, sin embargo, la repetición iterativa del sub-algoritmo 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", que designa un límite superior del intervalo, se usa no obstante. El valor superior "i_max" del intervalo, que se alcanza en la última iteración del sub-algoritmo 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 figura 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, son definidos 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 cuyo intervalo de valores del contexto numérico (fuera de la pluralidad de intervalos, los límites de los cuales son definidos por valores de estado significativo) se encuentra el valor del contexto descrito por la variable de entrada c. De este modo, el algoritmo 506b cumple una doble funcionalidad para determinar si el valor de entrada c describe un valor de estado significativo y si este no es el caso, para identificar un intervalo, limitado por valores de estado significativos, en el cual e encuentra el valor del contexto representado por la variable de entrada c. En consecuencia, el algoritmo 506e es particularmente eficaz y requiere solo un número comparativamente pequeño de accesos a la tabla.
[0196] 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" de acuerdo a 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 figura 5e.
[0197] Para resumir aún más lo anterior, el valor de m se decodifica usando la función "arith_decode()" (que 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()", que se describe con referencia a la figura 5e en forma de un pseudocódigo.
11.5.2 Selección de la regla de asignación mediante el uso del algoritmo según la figura 5f
[0198] 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 figura 5f, que muestra una representación de pseudocódigo de programa de ese algoritmo, que se puede usar en la decodificación de una tupla de valores espectrales. El algoritmo según la figura 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()".
[0199] El algoritmo de "arith_get_pk()" según la figura 5f recibe, como una variable de entrada, una variable c que describe el estado del contexto. La variable de entrada c puede, por ejemplo, representar un valor del contexto numérico actual.
[0200] El algoritmo "arith_get_pk()" proporciona, como una variable de entrada, una variable "pki", que 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.
[0201] El algoritmo según la figura 5f comprende una definición del contenido de la matriz "i_diff[]". Como puede observarse, una primera entrada de la matriz "i_diff[]" (que tiene un í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.
[0202] 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[]" puede estar adaptado naturalmente a un tamaño de la tabla de búsqueda "ari_hash_m [i]".
[0203] Cabe observar que la variable "i_min" se inicializa para que tome un valor de 0 a la derecha del inicio del algoritmo "arith_get_pk()".
[0204] 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.
[0205] 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" que 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 de í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.
[0206] La búsqueda de tabla 508b comprende una ejecución iterativa de un sub-algoritmo 508ba, donde el sub­ algoritmo 508ba se ejecuta durante un número predeterminado de, por ejemplo, nueve iteraciones. En la primera etapa del sub-algoritmo 508ba, la variable i se ajusta a una variable que 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, que se incrementa, partiendo de un valor inicial de k = 0, con cada iteración del sub-algoritmo 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.
[0207] En una segunda etapa del sub-algoritmo 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.
[0208] En una tercera etapa del sub-algoritmo 508ba, el valor de la variable S se compara 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 sub-algoritmo 508ba se repiten durante un número predeterminado de veces, por ejemplo, nueve veces. De este modo, en cada ejecución del sub-algoritmo 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 "ijriin" se incrementa (iterativamente) en cada ejecución del sub-algoritmo 508ba si (y solo si) 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]]".
[0209] 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 sub-algoritmo 508ba. En consecuencia, el algoritmo 508ba es particularmente eficaz 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 sub-algoritmo 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 sub-algoritmo 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 mayor 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.
[0210] Por esta razón, se toma la provisión del valor de retorno basado en la decisión 508c. La variable 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).
[0211] 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 devuelve como el valor de salida de la función “arith_get_pk()”. En el segundo caso (c<(j>>i)), una entrada “ari_lookup_m[i_min]” de la tabla “ari_lookup_m[]” designada por el valor del índice de tabla “i_min” se devuelve como el valor de retorno de la función “arith_get_pk()”. En el tercer caso (es decir si 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 devuelve 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()”.
[0212] 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 si 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, que se efectúa después de la búsqueda de la tabla 508b, se 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”, que se determina en la evaluación de la tabla 508b, se considera para seleccionar un valor del índice de la regla de asignación incluso si 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]”.
[0213] Cabe observar además que la comparación en el algoritmo deberá preferiblemente (o alternativamente) realizarse 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 8°s 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 si el contexto c presente es mayor que ari_hash_m[i]>>8, lo cual es equivalente a detectar si s=c<<8 es también mayor que ari_hash_m[i].
[0214] Para resumir lo anterior, una vez calculado el estado de contexto (el cual puede, por ejemplo, alcanzarse mediante el uso del algoritmo “arith_get_context(c,i,N)” según la figura 5c, el algoritmo “arith_get_context(c,i)” según la figura 5d, el plano a lo largo de los 2 bits más significativos se codifica mediante el uso del algoritmo “arith_decode” (que 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 realiza por “arith_get_pk()”, por ejemplo, la función “arith_get_pk()” que se ha discutido con referencia a la figura 5f.
11.6 Decodificación aritmética
11.6.1 Decodificación aritmética mediante el uso del algoritmo según la figura 5g
[0215] En lo sucesivo, se discutirá la funcionalidad de una implementación preferida de la función “arith_decodeO” con detalle con referencia a la figura 5g. La figura 5g muestra un pseudocódigo C que describe el algoritmo usado.
[0216] Cabe observar que la función “arith_decode()” usa la función auxiliar “arith_first_symbol(void)”, que devuelve VERDADERO si 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)”, que obtiene y proporciona el siguiente bit del flujo de bits.
[0217] 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[]”, que 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 sub­ tabla de las frecuencias acumulativas (preferiblemente, una de las sub-tablas ari_cf_m[pki=0][17] a ari_cf_m[pki=63][17] de la tabla ari_cf_m[64][17], de acuerdo a lo definido por la representación en tabla de las figuras 23(1), 23(2), 23(3)). También, la función “arith_decode()” usa la variable de entrada “cf1”, que indica la longitud de la tabla de frecuencias acumuladas o sub-tablas de frecuencias acumuladas seleccionadas designadas por la variable “cum_freq[]”.
[0218] La función “arith_decode()” comprende, como una primera etapa, una inicialización de la variable 570a, que se realiza si la función auxiliar “arith_first_symbol()” indica que el primer símbolo de una frecuencia de símbolo se está decodificando. La inicialización del valor 550a inicia la variable “valor” dependiendo de una pluralidad de, por ejemplo, 16 bits, que se obtienen del flujo de bits mediante el uso de 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.
[0219] En una segunda etapa 570b, la variable “intervalo” se fija en un valor, que es mayor, en 1, que la diferencia entre los valores de las variables “alto” y “bajo”. La variable “cum” se fija en un valor que 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 216 dependiendo del valor de la variable “valor”.
[0220] El indicador p se inicializa a un valor que es más pequeño, en 1, que la dirección inicial de la tabla o sub-tabla de frecuencia acumulativa seleccionada.
[0221] El algoritmo “arith_decode()”comprende también 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 cf1 sea menor 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 que es igual a la suma del valor actual de la variable indicadora p y la mitad del valor de la variable “cf1”. Si el valor de la entrada *q de la entrada de frecuencias acumulativas seleccionada, cuya entrada es dirigida por la variable indicadora q, es mayor que el valor de la variable “cum”, la variable indicadora p se ajusta en un valor de la variable indicadora q, y la variable “cf1” se incrementa. Finalmente, la variable “cf1” se desplaza hacia la derecha un bit, dividiendo por lo tanto de manera efectiva el valor de la variable “cf1” por 2 y despreciando la porción del módulo.
[0222] 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 es limitada por las entradas de la 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 seleccionadas definen intervalos, donde un valor de símbolos respectivo está asociado con cada uno de los intervalos de la tabla de frecuencias acumulativas seleccionadas. 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 sub-tablas de frecuencias acumulativas disponibles serán discutidos más adelante tomando como referencia la figura 23.
[0223] Tomando como referencia de nuevo la figura 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”.
[0224] El algoritmo “arith_decode” comprende también 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 que es determinado 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 sub-tablas de frecuencias acumulativas seleccionadas. 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.
[0225] En consecuencia, si se detecta un valor del símbolo que tiene una baja probabilidad, el intervalo entre los valores de las variables “bajo” y “alto” se reduce hasta un ancho estrecho. En contraste, si el valor del símbolo detectado comprende una probabilidad 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.
[0226] El algoritmo “arith_decode()”comprende también una renormalización del intervalo 570f, en la cual el intervalo determinado en la etapa 570e es desplazado y escalado 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 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, no se cumplen ninguna de las condiciones anteriores, la renormalización interna es abortada.
[0227] Si, sin embargo, cualquiera de las condiciones mencionadas anteriormente, las cuales son evaluadas 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, que 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” sea lo suficientemente grande.
[0228] Con respecto a la funcionalidad del algoritmo “arith_decode()”, cabe observar que el intervalo entre los valores de las variables “bajo” y “alto” se reduce 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 si los valores adyacentes están comparativamente cercanos entre sí, el intervalo entre dos valores de las variables “bajo” y “alto”, que se obtiene en la etapa 570e, será comparativamente pequeño. En contraste, si dos entradas adyacentes de la tabla de frecuencias acumulativas están separadas adicionalmente, el intervalo entre los valores de las variables “bajo” y “alto” que se obtiene en la etapa 570e, será comparativamente grande.
[0229] En consecuencia, si el intervalo entre los valores de las variables “bajo” y “alto”, que se obtiene en la etapa 570e, es comparativamente pequeño, se ejecutará un gran número 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 cumpla). 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.
[0230] Para resumir lo anterior, si se decodifica un símbolo, que comprende una probabilidad comparativamente alta, y al cual se asocia un intervalo grande por medio de las entradas de la tabla de frecuencias acumulativas seleccionada, únicamente se leerá un número comparativamente pequeño de bits 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 esté asociado con un intervalo pequeño por las entradas de la tabla de frecuencias acumulativas seleccionada, se tomará un número comparativamente grande del flujo de bits para preparar una decodificación del siguiente símbolo.
[0231] 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 aprovechar las dependencias estocásticas entre los diferentes símbolos lo cual permite una modificación eficaz en cuanto a la velocidad de bits particular de los símbolos subsecuentes (o adyacentes).
[0232] Para resumir lo anterior, la función “arith_decode()”, que se ha descrito con referencia a la figura 5g, es recuperada con la tabla de frecuencias acumulativas “arith_cf_m[pki][]”, que corresponde al índice “pki” devuelto a la función “arith_get_pk()” para determinar el valor del plano de bits más significativos m (que se puede ajustar al valor del “símbolo” representado por el “símbolo” de la variable de retorno).
[0233] 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.
[0234] El código de programa informático según la figura 5g describe el algoritmo usado de acuerdo a una realización de la invención.
11.6.2 Decodificación aritmética mediante el uso del algoritmo según las figuras 5h y 5i
[0235] Las figuras 5h y 5i muestran una representación de pseudocódigo de programa de otra realización del algoritmo “arith_decode()”, que se puede usar como una alternativa al algoritmo “arith_decode” descrito con referencia a la figura 5g.
[0236] Cabe observar que ambos algoritmos según la figura 5g y las figuras 5h y 5i se pueden usar en el algoritmo “values_decode()” según la figura 3.
[0237] 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 sub-tabla de la tabla ari_cf_m[67][17] definida en las representaciones de las figuras 23(1), 23(2), 23(3)) donde “pki” corresponde al índice devuelto 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 figuras 5h y 5i describe el algoritmo usado.
11.7 Mecanismo de escape
[0238] En lo sucesivo, se discutirá de manera breve el mecanismo de escape, que se usa en el algoritmo de decodificación “values_decode()” según la figura 3.
[0239] Cuando el valor decodificado m (que se proporciona 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 se decodifica otro valor m. 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.
[0240] Para resumir, si se identifica un símbolo de escape, se asume que 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 sub-algoritmo 312ba.
11.8 Mecanismo de interrupción aritmética
[0241] 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.
[0242] En una realización, se puede implementar un mecanismo de interrupción aritmética del siguiente modo: una vez que el valor de m no sea el símbolo de escape, “ARITH_ESCAPE”, el decodificador verifica si la m sucesiva forma un símbolo “ARITH_STOP”. Si la condición “(esc_nb>&&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()” que 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 bits menos significativo
[0243] En lo sucesivo, se describirá la decodificación de uno o más planos de bits menos significativos. La decodificación del plano de bits menos significativo, se efectúa, por ejemplo, en la etapa 312d mostrada en la figura 3. De manera alternativa, sin embargo, se pueden usar los algoritmos como se muestra en las figuras 5j y 5n donde el algoritmo de la figura 5j es un algoritmo preferido.
11.9.1 Decodificación del plano de bits menos significativo según la figura 5i
[0244] Tomando como referencia ahora la figura 5j, puede observarse 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 derecho 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 bits, del valor de la variable m.
[0245] Posteriormente, se repite una decodificación aritmética de los valores del plano de bits menos significativo r, donde el número de repeticiones se determina por el valor de la variable “lev”. El valor del plano de bits 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 bits 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 bits 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.
[0246] 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 bits más significativo m, y uno o más bits menos significativos (si los hay) de los valores a y b son determinados por uno o más valores del plano de bits menos significativo r.
[0247] Para resumir lo anterior, si no se cumple el símbolo “ARITH_STOP”, los planos de bits restantes se decodifican entonces, si existe alguno, para la 2-tupla presente. Los planos de bits restantes se decodifican del nivel más significativo al menos significativo llamando la función “arith_decode()” un número lev de veces con la tabla de frecuencias acumulativas ”arith_cf_r[]”. Los planos de bits decodificados r permiten refinar el valor previamente decodificado m según el algoritmo, un pseudocódigo de programa que se muestra en la figura 5j.
11.9.2 Decodificación de la banda de bits menos significativa según la figura 5n
[0248] De manera alternativa, sin embargo, el algoritmo, una representación de pseudocódigo de programas del cual se muestra en la figura 5n se puede usar también para la decodificación de los planos menos significativos. En este caso, si el símbolo “ARITH_STOP” no se cumple, los planos de bits restantes se decodifican entonces, si existe alguno, para la 2-tupla presente. Los planos de bits restantes 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 bits decodificados permiten la refinación del valor previamente decodificado m según el algoritmo mostrado con la figura 5n.
11.10 Actualización del contexto
11.10.1 Actualización del contexto según las figuras 5k, 5l, y 5m
[0249] En lo sucesivo, se describirán las operaciones usadas para completar la decodificación de la tupla de valores espectrales, tomando como referencia las figuras 5k y 5l. Además, se describirá una operación que 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.
[0250] Cabe observar que los algoritmos según las figuras 5k, 5l, y 5m son los preferidos, aunque se pueden usar algoritmos alternativos.
[0251] Tomando como referencia ahora la figura 5k, puede observarse que la entrada que tiene el índice de entrada 2*i de la matriz “x_ac_dec[]” de la ecuación se fija igual que a, y la entrada que tiene el índice de entrada “2*i+1” de la matriz “x_ac_dec[]”se fija igual a b después de decodificar el bit menos significativo 312d. En otras palabras, en el punto después de la decodificación de bit menos significativo 312d, el valor no firmado de la 2-tupla {a,b}, se decodifica completamente. Este se guarda en la matriz (por ejemplo la matriz “x_ac_dec[]”) que contiene los coeficientes espectrales según el algoritmo mostrado en la figura 5k.
[0252] Posteriormente, el contexto “q” se actualiza también para la siguiente 2-tupla. Cabe observar que esta actualización del contexto tiene que ser efectuada también 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 figura 5l.
[0253] Tomando ahora como referencia la figura 5l, puede observarse que la función “arith_update_context(i,a,b)” recibe, como variables de entrada, coeficientes espectrales (o valores espectrales) cuantizados, no firmados, decodificados a,b de la 2-tupla. Además, la función ”arith_update_contex” recibe también como una variable de entrada, un índice i (por ejemplo, un índice de frecuencia) del coeficiente espectral cuantizado que se va a decodificar. En otras palabras, la variable de entrada i puede, por ejemplo, ser un índice de la tupla de valores espectrales, cuyos valores absolutos son definidos por las variables de entrada a,b. Como se puede observar, la entrada “q[1][i]” de la matriz “q[][]” se puede ajustar a un valor que sea igual a a+b+1. Además, el valor de la entrada “q[1][i]” de la matriz “q[][]” puede estar limitado 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.
[0254] Cabe observar aquí que la entrada “q[1][i]” de la matriz “q[][]” puede ser considerada 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).
[0255] Cabe observar aquí que la sumatoria de los valores absolutos de a y b de los dos valores espectrales totalmente decodificados (versiones firmadas de los cuales se almacenan en las entradas “x_ac_dec[2*i]” y “x_ac_dec[2*i+1]” de la matriz “x_ac_dec[]”), se pueden considerar como el cálculo de una norma (por ejemplo una norma L1) de los valores espectrales decodificados.
[0256] Se ha encontrado que los valores de la subregión del contexto (es decir, las entradas de la matriz “q[][]”), que describen una norma de un vector formado por una pluralidad de valores espectrales previamente decodificados son particularmente significativos y eficaces en cuanto a la memoria. Se ha encontrado que esa norma, que 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 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, incluso 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 eficaz 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 eficacia 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 particularmente simple computacionalmente eficaz del valor del contexto numérico actual, que se ha descrito, por ejemplo, con referencia a las figuras 5c y 5d. Al limitar 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 eficaz, que se ha discutido tomando como referencia las figuras 5c y 5d.
[0257] 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 eficacia de la memoria debido a que 4 bits son suficientes para almacenar ese valor de la subregión del contexto.
[0258] 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.
[0259] La siguiente 2-tupla de la trama se decodifica después de la conclusión de la función “arith_update_contex” incrementando i en 1 repitiendo el mismo procedimiento como se describió anteriormente, partiendo de la función “arith_get_context()”.
[0260] Cuando se decodifican 2-tuplas lg/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.
[0261] Los detalles con respecto a la decodificación de los signos se han discutido en referencia a la figura 3, donde la decodificación de los signos se muestra en la referencia numérica 314.
[0262] Una vez codificados todos los coeficientes especiales cuantizados no firmados, se añade 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 al valor no firmado previamente decodificado. De otro modo (es decir si 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 son leídos en las frecuencias bajas a altas. Para los detalles, se hace referencia a la figura 3 y con las explicaciones con respecto a la decodificación de los signos 314.
[0263] La decodificación finaliza llamando la función “arith_finish()”. Los coeficientes espectrales restantes son ajustados a 0. Los estados de contexto respectivos se actualizan de manera correspondiente.
[0264] Para los detalles, se hace referencia a la figura 5m, que muestra una representación de pseudocódigo de programa de la función “arith_finish()”. Como puede observarse, la función “arith_finish()”recibe un valor de entrada 1g que 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 ha sido 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.
[0265] La función “arith_finish” recibe también, 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.
[0266] La función “arith_finish” está configurada para ajustar las entradas de la matriz o vector “x_ac_dec”, para el cual no se han decodificado 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]”, que están asociados con valores espectrales para los cuales no se ha 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.
[0267] 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]”, incluso en la presencia de una condición de interrupción aritmética.
11.10.2 Actualización del contexto según las figuras 5o y 5p
[0268] En lo sucesivo, se describirá otra realización de la actualización del contexto tomando como referencia las figuras 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 se actualiza entonces para la siguiente 2-tupla. La actualización se efectúa también si la 2-tupla presente es la última 2-tupla. Ambas actualizaciones son efectuadas por la función “arith_update_context()”, una representación del pseudocódigo del programa de la cual se muestra en la figura 5o.
[0269] La siguiente 2-tupla de la trama se decodifica entonces incrementando en 1 y llamando la función arith_decode(). Si las 2-tuplas 1g/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 se recupera y almacena 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 figura 5p.
[0270] Una vez decodificados todos los coeficientes especiales cuantizados no firmados, entonces se añade 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 son leídos en la frecuencia baja a alta.
11.11 Resumen del procedimiento de decodificación
[0271] 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 figuras 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}).
[0272] 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 se almacenan 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, a continuación 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 recibido y se almacenan 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, a continuación b.
[0273] Primero, el indicador "arith_reset_flag" determina si el contexto debe ser reajustado. Si el indicador es verdadero, este es considerado en la función "arith_map_context".
[0274] 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 figura 5a.
[0275] El decodificador sin ruido produce 2-tuplas de coeficientes espectrales cuantizados no firmados. En primer lugar, el estado c del contexto se calcula sobre la base de los coeficientes espectrales previamente decodificados que rodean la 2-tupla que se va 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 es devuelto 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 figura 5c.
[0276] 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 figura 5e.
[0277] 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 devuelto 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 figura 5gdescribe el algoritmo usado.
[0278] 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 2-tupla y limitados a 7.
[0279] 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, se detecta el símbolo de "ARITH_STOP" 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.
[0280] Si no se cumple el símbolo de "ARITH_STOP", los planos de bits restantes son entonces decodificados, si existen, por la 2-tupla presente. Los planos de bits restantes son decodificados del nivel más significativo al menos significativo, llamando a "arith_decode()" lev un número de veces con la tabla de frecuencias acumulativas "[]arifh_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 figura 5j. En este punto, el valor no firmado de la 2-tupla (a,b) se decodifica por completo. Este 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 figura 5k.
[0281] El contexto "q" se actualiza también para la siguiente 2-tupla. Cabe observar que la actualización del contexto tiene que efectuarse también 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 de programa de la cual se muestra en la figura 5l.
[0282] La siguiente 2-tupla de la primera trama se decodifica entonces incrementando i en 1 y repitiendo el mismo procedimiento que se describió anteriormente, partiendo de la función "arith_get_context()". Cuando 1g/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.
[0283] La decodificación se finaliza llamando a 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 figura 5m.
[0284] Una vez decodificados todos los coeficientes espectrales cuantizados, se añade 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 son leídos de las frecuencias baja y alta.
11.12 Leyendas
[0285] La figura 5q muestra una leyenda de las definiciones relacionadas con los algoritmos según las figuras 5a, 5c, 5e, 5f, 5g, 5j, 5k, 5l y 5m.
[0286] La figura 5r muestra una leyenda de las definiciones relacionadas con el algoritmo según las figuras 5b, 5d, 5f, 5h, 5i, 5n, 5o y 5p.
12. Tablas de Asignación
[0287] En una realización según la invención, se usan 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 figura 5e o la figura 5f, y para la ejecución de la función "arith_decode()", que se discutió con referencia a las figuras 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 figuras 22(1), 22(2), 22(3) y 22(4)
[0288] Un contenido de una implementación particularmente ventajosa de la tabla "ari_hash_m", la cual es usada por la función "arith_get_pk", una primera realización preferida de la cual se describió con referencia a la figura 5e, y una segunda realización preferida de la cual se describió con referencia a la figura 5f, se muestra en la tabla de las figuras 22(1) a 22(4). Cabe observar que la tabla de las figuras 22(1) a 22(4) enumera las 742 entradas de la tabla (o matriz) "ari_hash_m[742]". También cabe observar que la representación en tabla de las figuras 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 de modo que el último valor "0xFFFFFF00UL" 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, cabe observar 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).
[0289] Además, cabe observar que las entradas de tabla de la tabla "ari_hash_m[]" según las figuras 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()".
[0290] 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 pueden ser consideradas 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".
[0291] 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 han sido discutidos anteriormente.
12.2 Tabla "ari lookup m" según la figura 21
[0292] Un contenido de una realización particularmente ventajosa de la tabla "ari_lookup_m" se muestra en la tabla de la figura 21. Cabe observar aquí que la tabla de la figura 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") que se designa, por ejemplo, con "i_max" o "i_min" o "i". Cabe observar que la tabla "ari_lookup_m", que comprende un total de 742 entradas, es muy adecuada para ser usada por la función "arith_get__pk" según la figura 5e o figura 5f. También cabe observar que la tabla "ari_lookup_m" según la figura 21 está adaptada para cooperar con la tabla "ari_hash_m" según la figura 22.
[0293] Cabe observar que las entradas de la tabla "ari_lookup_m [742]" se enumeran 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 se describen 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.
[0294] También cabe observar que las entradas de la tabla "ari_lookup_m[]" están asociadas 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 son definidos por las entradas de la tabla "arith_hash_m".
12.3. Tabla "ari cf m[641[171 " según las figuras 23(1), 23(2) y 23(3)
[0295] La figura 23 muestra un conjunto de 64 tablas (o subtablas) de frecuencias acumulativas "ari_cf_m[pki][17]", una de las cuales es seleccionada 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. La seleccionada de las 64 tablas (o subtablas) de frecuencias acumulativas mostradas en las figuras 23(1) a 23(3) toma la función de la tabla "cum_freq[]" en la ejecución de la función "arith_decode()".
[0296] Como puede observarse en las figuras 23(1) a 23(3), cada sub-bloque o línea representa una tabla de frecuencias acumulativas que tiene 17 entradas. Por ejemplo, un primer sub-bloque o línea 2310 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki = 0". Un segundo sub-bloque o línea 2312 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki = 1". Finalmente, un 64 sub-bloque o línea 2364 representa las 17 entradas de una tabla de frecuencias acumulativas para "pki = 63". De este modo, las figuras 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 está representada por un subbloque (entre llaves) o línea, y donde cada una de las tablas de frecuencias acumulativas comprende 17 entradas.
[0297] Dentro de un sub-bloque o línea (por ejemplo un sub-bloque o línea 2310 o 2312, o un sub-bloque o línea 2396), un primer valor (por ejemplo, un primer valor 708 del primer sub-bloque 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 sub-bloque o línea, y un último valor (por ejemplo, un último valor de 0 para el primer sub-bloque 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 sub-bloque o línea.
[0298] En consecuencia, cada sub-bloque o línea 2310, 2312, 2364 de la representación en tabla de la figura 23 representa las entradas de una tabla de frecuencias acumulativas que va a ser usada en la función "arith_decode" según la figura 5g, o según las figuras 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") deberá usarse para la decodificación de los coeficientes espectrales actuales.
12.4 Tabla "ari cf rn" según la figura 24
[0299] La figura 21 muestra el contenido de la tabla “ari_cf_r[]”.
"
[0300] Las cuatro entradas de la tabla se muestran en la figura 24. Sin embargo, cabe observar que la tabla "ari_cf_r" puede ser eventualmente diferente en otras realizaciones.
13. Perspectiva general, evaluación y ventajas de rendimiento
[0301] Las realizaciones según la invención usan 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 eficacia de codificación.
[0302] 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 (Codificación de Voz y Audio Unificada).
[0303] 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
[0304] 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), se aprobó un esquema de codificación espectral sin ruido mejorado (también conocido como esquema de codificación de entropía). Este esquema de codificación espectral sin ruido mejorado ayuda a codificar de manera más eficaz coeficientes espectrales cuantizados sin ruido. Por lo tanto, los coeficientes espectrales se asignan 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 determinan una distribución de probabilidad (tabla de frecuencia acumulativa), que se usa para la codificación aritmética del coeficiente espectral.
[0305] 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 describir el contexto, cabe observar que la tecnología de codificación espectral sin ruido convencional consiste en primer lugar en un algoritmo y en segundo lugar en 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, se han aplicado 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, que 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 rendimiento de compresión que cualquiera de los esquemas presentados anteriormente.
[0306] Según la presente la invención, se propone reemplazar las tablas entrenadas convencionales por tablas reentrenadas como las presentadas aquí, lo que resulta en un incremento en el rendimiento de la codificación. 13.2. Introducción
[0307] En lo sucesivo, se proporciona una introducción.
[0308] 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 89a 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 rendimiento basados en los flujos de bits de calidad de referencia WD4 de la USAC sobre una base de datos de formación WD 4.
[0309] 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 a 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 corresponde a la última revisión de WD.
[0310] 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 van a ser codificados y decodificados. 13.3. Breve descripción del algoritmo
[0311] En lo sucesivo, se proporcionará una breve descripción del algoritmo.
[0312] Para superar el problema de huella de memoria y complejidad computacional, se propuso 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 eficacia 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.
[0313] 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 mediante el uso de coeficientes espectrales previamente decodificados, que provienen como en el WD6/7 de la trama pasada y presente. Sin embargo, los coeficientes espectrales se codifican ahora combinando 2 coeficientes juntos para formar una 2-tupla. Otra diferencia reside en el hecho de que los coeficientes espectrales se dividen ahora en tres partes, el signo, el MSB y el 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 son codificadas directamente por la codificación MSB. De otro modo, se transmite una palabra de código de escape primero para señalar cualquier plano de bits adicional. En la versión básica, la información ausente, la LSB y el signo son ambas codificadas mediante el uso de la distribución de probabilidad uniforme.
[0314] La reducción de tamaño de la tabla es todavía posible puesto que:
• Únicamente necesitan ser almacenadas probabilidades para 17 símbolos: {[0; 3], [0; 3]} símbolo ESC;
• No existe la necesidad de almacenar una tabla de agolpamiento (grupos e, grupos d, vectores dg); y
• El tamaño de la tabla de búsqueda podría reducirse con una preparación apropiada.
13.3.1 Codificación MSB
[0315] En lo sucesivo, se describirá la codificación MSB.
[0316] 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 se consideraron 4-tuplas para la generación del contexto y la codificación sin ruido. En presentaciones anteriores, se usó 1-tupla 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 figura 22, tres 2-tuplas provienen de la trama pasada y una de la trama actual.
[0317] 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 preparación apropiada.
[0318] Aunque la dimensión se redujo de 4 a 2, se mantuvo la complejidad como en el WD6/7. Esto se logró simplificando tanto la generación del contexto como el acceso a la tabla de búsqueda.
[0319] Las diferentes simplificaciones y optimizaciones se efectuaron de manera que el desempeño de la codificación no se vio afectado y mejoró incluso ligeramente.
13.3.2 Codificación LSB
[0320] Las LSB se codifican con una distribución de probabilidad uniforme. En comparación con la WD6/7, las LSBs se consideran ahora dentro de 2-tuplas en lugar de 4-tuplas. Sin embargo, es posible la codificación diferente de los bits menos significativos.
13.3.3 Codificación del Signo
[0321] El signo se codifica sin usar el codificador de núcleo aritmético con el propósito de reducir la complejidad. El signo se transmite 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
[0322] Esta 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, que resultan de un procedimiento de entrenamiento, el algoritmo permanece sin cambios.
[0323] Para investigar el efecto del reentrenamiento, los requisitos de eficacia y codificación y memoria de las nuevas tablas se compara frente a 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 Eficacia de codificación
[0324] Primero, la eficacia de codificación del nuevo conjunto de tablas propuesto se compara frente a la USAC WD6 y la CE propuesta en la M17558. Como puede observarse en la representación en tabla de la figura 26, mediante un simple reentrenamiento del incremento promedio en la eficacia de la codificación (en comparación con la WD6) podría incrementarse del 1,74 % (M17558) al 2,45 % (nueva propuesta, de acuerdo con una realización de la invención). En comparación con la M17558, la compresión podría de este modo incrementarse en aproximadamente un 0,7 % en realizaciones según la invención.
[0325] La figura 27 visualiza de nuevo la compresión para todos los puntos de operación. Como puede observarse, se puede alcanzar una ganancia de compresión de al menos el 2 % usando las realizaciones de acuerdo con la invención en comparación con la WD6. Para velocidades bajas, tales como de 12 kbit/s y 16 kbits/s, la ganancia de compresión se incrementa incluso ligeramente. El buen rendimiento también es retenido a velocidades de bits más altas tales como 64 kbit/s, donde se puede observar un incremento significativo en la eficacia de la codificación de más del 3 %.
[0326] Cabe observar que se demostró que la transcodificación sin ruido de todos los flujos de bits sin calidad de referencia de la WD6 es posible sin infringir las restricciones de depósito de bits. En la sección 13.6 se darán resultados más detallados.
13.4.2 Demanda de memoria y complejidad
[0327] En segundo lugar, la demanda de memoria y complejidad se compararon frente a la USAC WD6 y la CE propuesta en la M17558. La tabla de la figura 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 puede observarse claramente, la demanda de memoria se redujo significativamente adoptando el nuevo algoritmo, como se propone en la M17558. Además puede observarse que para la nueva propuesta el tamaño total de la tabla podría reducirse incluso ligeramente en 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 pequeño ahorro 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 figura 29.
[0328] En términos de la complejidad, la complejidad computacional de los esquemas recién propuestos se comparó de nuevo con una versión optimizada de la corriente sin ruido actual en la USAC. Se encontró por medio de un procedimiento "pluma y papel" e instruyendo al código que el nuevo esquema de codificación tiene el mismo orden de complejidad que el esquema actual. Como se notifica en la tabla 15 para el estéreo de 32 kbps y la tabla de la figura 31 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 se pueden considerar insignificantes.
13.5. Conclusión
[0329] En lo sucesivo, se proporcionarán algunas conclusiones.
[0330] Se presentó un nuevo conjunto de tablas para el esquema de codificación espectral sin ruido USAC. En contraste con la propuesta anterior, que es el resultado de un entrenamiento basado en flujos de bits más antiguos, las tablas de la nueva propuesta son ahora entrenadas sobre los flujos de bits de la USAC WD, donde se ha usado un concepto de entrenamiento avanzado. Mediante este reentrenamiento, la eficacia 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
[0331] La información detallada sobre la transcodificación de los flujos de bits del borrador de trabajo 6 (WD6) puede observarse en las representaciones de las figuras 32, 33, 34, 35 y 36.
[0332] La figura 32 muestra una representación de tabla de las velocidades de bits promedio producidas por el codificador aritmético en una realización según la invención y en el WD6.
[0333] La figura 33 muestra una representación de tabla de las velocidades de bits mínima, máxima y promedio de la USAC sobre una base de trama usando el esquema propuesto.
[0334] La figura 34 muestra una representación de tabla 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").
[0335] La figura 35 muestra una representación de tabla del mejor y peor de los casos para una realización según la invención.
[0336] La figura 36 muestra una representación de tabla del límite de depósito 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
[0337] 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.
[0338] En particular, se describirán los cambios al texto de WD. En otras palabras, esta sección enumera el conjunto completo de cambios contra el WD7 de la especificación de la USAC.
14.1. Cambios a la descripción técnica
[0339] 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
[0340] La figura 7 muestra una representación de una sintaxis de los datos codificados aritméticamente "arith_dataQ". Se marcaron las diferencias principales.
[0341] En lo sucesivo, se describirán los cambios con respecto a las cargas útiles del codificador espectral sin ruido.
[0342] 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, a continuación, 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.
[0343] Sin embargo, es un cambio adicional que cada 2-tuplas se dividen en el signo s, el plano a lo largo de 2 bits más significativo, 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 forman 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.
[0344] 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
[0345] Los cambios a las definiciones y elementos auxiliares se muestran en la representación de las definiciones y elementos auxiliares en la figura 38.
14.2 Codificación espectral sin ruido
[0346] En lo sucesivo, se resumirá la codificación espectral sin ruido según una realización.
14.2.1 Descripción de la herramienta
[0347] La codificación espectral sin ruido se usa para reducir aún más la redundancia del espectro cuantizado.
[0348] 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 consideraciones tiene en cuenta, como se ilustra en la figura 25. Las tablas de frecuencias acumulativas son usadas entonces por el codificador aritmético para generar un código binario de longitud variable.
[0349] 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 mediante la asignación de un intervalo de probabilidad, donde el conjunto de símbolos se encuentra, a una palabra de código.
14.2.2 Definiciones
[0350] Las definiciones y elemento auxiliares se describen en la figura 39. Se marcaron los cambios cuando se compararon con versiones previas de la codificación aritmética.
14.2.3 Procedimiento de decodificación
[0351] Los coeficientes espectrales cuantizados qdec se decodifican sin ruido partiendo del coeficiente de frecuencia más baja y progresando hacia el coeficiente de frecuencia más alta. Se decodifican por grupos de dos coeficientes sucesivos a y b reunidos en una llamada 2-tupla {a, b}.
[0352] Los coeficientes decodificados para AAC se almacenan entonces en la matriz x_ac_quant[g][w in] [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 se almacenan 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 y, a continuación, b.
[0353] Los coeficientes decodificados para TCX se almacenan en la matriz x_tcx_invquant[w in][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 recibido y se almacenan en la matriz, bin es el índice que se incrementa más rápidamente 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 y, a continuación, b.
[0354] El procedimiento de decodificación comienza con una fase de inicialización donde se efectúa una asignación entre el contexto pasado recuperado almacenado en qs y el contexto de la trama actual q. El contexto pasado qs se almacena en 2 bits por línea de frecuencia.
[0355] Para los detalles, se hace referencia a la representación de pseudocódigo de programa del algoritmo "arith_map_context" en la figura 40a.
[0356] 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 es devuelto por la función arith_get_context().
[0357] Una representación del pseudocódigo de programa de la función "arith_get_context()" se muestra en la figura 40b.
[0358] Una vez calculado el estado del contexto c, el plano a lo largo de 2 bits más significativos m, se decodifica usando la arith_decode() alimentada con la tabla de frecuencias acumulativas apropiada correspondiente para al modelo de probabilidad que corresponda al estado del contexto. La correspondencia es efectuada por la función arith_get_pk().
[0359] Una representación del pseudocódigo de programa de la función arith_get_pk() se muestra en la figura 40c.
[0360] El valor de m se decodifica usando la función arith_decode() llamada con la tabla de frecuencias acumulativas, arith_cf_m[pki][], donde pki corresponde al índice devuelto por arith_get_pk(). El codificador aritmético es una implementación de entero que usa el procedimiento de generación de etiqueta con escalamiento. El pseudocódigo c mostrado en las figuras 40d y 40e describe el algoritmo usado.
[0361] Cuando el valor de m decodificado es el símbolo de escape, A R IT H _E S C A P E , las variables lev y esc_nb se incrementan en uno 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_n b <<17 como argumento de entrada, donde esc_nb es el número de símbolos de escape previamente decodificados por la misma 2-tupla y limitados a 7.
[0362] Una vez que el valor de m no es el símbolo de escape, A R IT H _E S C A P E , el decodificador verifica si las m sucesivas forman un símbolo ARITH_STOP. Si la condición (esc_n b >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ón arith_save_context(). La condición significa que el resto de la trama está compuesta de valores de cero.
[0363] 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 veces arith_decode() con la tabla de frecuencias acumulativas arith_cf_r[]. Los planos de bits decodificados r permiten refinar el valor de m previamente decodificado por la función o el algoritmo cuya representación del pseudocódigo de programa se muestra en la figura 40f.
[0364] En este punto, el valor no firmado de la 2-tupla {a, b} se decodifica completamente. El contexto q se actualiza entonces para la siguiente 2-tupla. Si es la última 2-tupla, también. Ambas actualizaciones son efectuadas por la función arith_update_context(), una representación del pseudocódigo de programa de la cual se muestra en la figura 40g.
[0365] La siguiente 2-tupla de la trama se decodifica entonces incrementando i en uno y llamando a la función. Si ya estaba decodificada la 2-tupla 1g/2 con la trama o si ocurrió el símbolo de interrupción A R IT H _ S T O P , se llama la función a rith _ sa ve _ co n te x t(). El contexto se guarda y almacena en qs para la siguiente trama. Una representación del pseudocódigo de programa para la función o algoritmo a rith _ sa v e _ co n te x t() se muestra en la figura 40h.
[0366] Una vez decodificados todos los coeficientes espectrales cuantizados no firmados, entonces se añade el signo. Para cada valor cuantizado no nulo de q d e c se 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 son leídos de la frecuencia baja a la alta.
14.2.4 Tablas actualizadas
[0367] Un conjunto de tablas reentrenadas para su uso con los algoritmos descritos anteriormente se muestra en las figuras 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.
[0368] Las figuras 41(1) y 41(2) muestran una representación en tabla de un contenido de una tabla "arijookup_m[742]", según una realización de la invención;
[0369] Las figuras 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;
[0370] Las figuras 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
[0371] La figura 44 muestra una representación en tabla de una tabla "ari_cf_r[4]”, según una realización de la invención.
[0372] Para resumir lo anterior, puede observarse que las realizaciones según la presente invención proporcionan un intercambio particularmente bueno entre la complejidad computacional, requisitos de memoria y eficacia de la codificación.
15. Sintaxis del flujo de bits
15.1 Cargas útiles del codificador espectral sin ruido
[0373] 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 psico-acústico y una versión formada por ruido de contenido de audio se codifica en el dominio de la frecuencia.
[0374] Los coeficientes espectrales para ambas de las señales codificadas en el “dominio de predicción lineal” y la señal codificada en el “dominio de la frecuencia” son cuantizadas escalarmente y codificadas a continuación sin ruido por una codificación aritmética dependiente del contexto, de manera adaptable. Los coeficientes de cuantización se reúnen 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 bits menos significativos r (si 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 bits 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 decodifican 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.
[0375] El procedimiento de codificación aritmética detallado se describe en esta invención.
15.2 Elementos de la sintaxis según las figuras 6a a 6i
[0376] 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 figuras 6a a 6j.
[0377] La figura 6a muestra una representación de la sintaxis del llamado bloque de datos sin procesar USAC (“usac_raw_data_block()”.
[0378] El bloque de datos sin procesar 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()”).
[0379] Tomando ahora como referencia la figura 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.
[0380] La figura 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 comprende también 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.
[0381] La información de configuración “ics_info()”, una representación de la sintaxis de la cual se muestra en la figura 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.
[0382] 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 figura 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, por el escalador 150 y el reescalador 240. El flujo del canal en el dominio de la frecuencia comprende también datos espectrales codificados aritméticamente (“ac_spectral_data ()”), que representan valores espectrales codificados aritméticamente.
[0383] Los datos espectrales codificados aritméticamente “ac_spectral_data()”), una representación de la sintaxis como se muestra en la figura 6f, comprenden un indicador de reajuste aritmético opcional (“arith_reset_flag”), que 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.
[0384] En lo sucesivo, se describirá la estructura del bloque de datos codificados aritméticamente tomando como referencia la figura 6g, que 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 1g de valores espectrales que van a ser codificados, el estado del indicador de reajuste aritmético y también del contexto, es decir los valores espectrales previamente codificados.
[0385] 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 se han explicado anteriormente, tomando como referencia las figuras 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.
[0386] Si, sin embargo, se requiere uno o más planos de bits menos significativo (además del plano de bits más significativo) para una representación apropiada para los valores espectrales, esto se señala 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 determinan cuántos planos de bits (el plano de bits menos significativo, posiblemente, uno o más planos de bits menos significativo adicionales) son requeridos. Si se requiere uno o más planos de bits menos significativo, esto es señalado por una o más palabras de código de escape aritmético “acod_m[pki][ARITH_ESCAPE]”, que son codificadas 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 se adapta, como puede observarse en los números de referencia 664, 662, si una o más de las palabras de código de escape aritméticas son incluidas 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 bits 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 bits más significativo del valor espectral que se va a codificar o decodificar (donde m es diferente de la palabra de código “ARITH_ESCAPE”).
[0387] Como se discutió anteriormente, la presencia de cualquier plano de bits 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 bit de plano menos significativo de un primer valor espectral y cada uno de los cuales representa también un bit del plano menos significativo 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, que 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]”.
[0388] 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 2 tuplas subsecuentes de valores espectrales.
[0389] La figura 6i muestra una leyenda de las definiciones y elementos auxiliares que definen la sintaxis del bloque de datos codificados aritméticamente.
[0390] Además, una sintaxis alternativa de los datos aritméticos “arith_data()” se muestra en la figura 6h, con una leyenda correspondiente de las definiciones y elementos auxiliares mostrados en la figura 6j.
[0391] Para resumir lo anterior, sidote ha descrito un formato de flujo de bits que puede ser proporcionado por el codificador de audio 100 y que puede ser evaluado por el decodificador de audio 200. El flujo de bits de los valores espectrales codificados aritméticamente se codifica de modo que se ajuste al algoritmo de decodificación discutido anteriormente.
[0392] Además, cabe observar de manera general que la codificación es la operación inversa de la decodificación de modo que puede asumirse de manera general que el codificador efectúa una búsqueda en la tabla usando las tablas discutidas anteriormente, que 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 podrá diseñar fácilmente un codificador aritmético, que proporciona los datos definidos en la sintaxis del flujo de bits requeridos por un decodificador aritmético.
[0393] 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 figuras 6k, 6l, 6m, 6n, 6o y 6p
[0394] En lo sucesivo, se describirá un extracto de una sintaxis de flujo de bits alternativa, tomando como referencia las figuras 6k, 6l, 6m, 6n, 6o y 6p.
[0395] La figura 6k muestra una representación de la sintaxis de un elemento del flujo de bits “UsacSingleChannelElement(indepFlag)”. Dicho elemento de la sintaxis “UsacSingleChannelElement(indepFlag)” comprende un elemento de sintaxis “UsacCoreCoderData” que describe un canal del codificador central.
[0396] La figura 6l muestra una representación de la sintaxis de un elemento del flujo de bits “UsacSingleChannelPairElement(indepFlag)”. Dicho 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.
[0397] La figura 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 puede observarse en la figura 6m.
[0398] La figura 6n muestra una representación de la sintaxis de un elemento del flujo de bits “UsacCoreCoderDataQ”. 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 se puede incluir alguna u otra información de control opcionalmente en el elemento del flujo de bits “UsacCoreCoderDataO”, como puede observarse en la figura 6n.
[0399] La figura 6o muestra una representación de la sintaxis de un elemento del flujo de bits “fd_channel_streamO”. 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()”.
[0400] La figura 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()”comprende opcionalmente un elemento del flujo de bits “arith_reset_flag”. Además, el elemento del flujo de bits comprende también 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 figura 6g.
16. Alternativas de implementación
[0401] 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 característica de una etapa del procedimiento. De manera análoga los aspectos descritos en el contexto de una etapa del procedimiento también representan una descripción de un bloque o elemento o característica correspondiente de un aparato correspondiente. Algunas o todas las etapas del procedimiento pueden ser ejecutadas 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 ejecutadas por ese aparato.
[0402] La señal de audio codificada por la invención puede ser almacenada 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 por cable tal como Internet.
[0403] 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 memoria instantánea (FLASH), que tenga señales de control legibles electrónicamente almacenadas en el, que cooperen (o sean capaces de cooperar) con un sistema informático programable de modo que se lleve a cabo el procedimiento respectivo. Por lo tanto, el medio de almacenamiento digital puede ser legible por un ordenador.
[0404] Algunas realizaciones según la invención comprenden un soporte de datos que tiene señales de control legibles electrónicamente, los cuales son capaces de cooperar con un sistema informático programable, de modo que se ha efectuado uno de los procedimientos descritos en esta invención.
[0405] 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, siendo el código de programa operativo para efectuar uno de los procedimientos cuando 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.
[0406] 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.
[0407] 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 en esta invención, cuando el programa informático se ejecuta en un ordenador.
[0408] Una realización adicional de los procedimientos de la invención es, por lo tanto, un soporte de datos (o un medio de almacenamiento digital, o un medio legible por ordenador) que comprende, registrado en él, el programa informático para efectuar uno de los procedimientos descritos en esta invención. El soporte de datos, el medio de almacenamiento digital o el medio grabado son típicamente tangibles y/o no transitorios.
[0409] Una realización adicional 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 puede estar configurado por ejemplo para ser transferido vía una conexión de comunicación de datos, por ejemplo, vía Internet.
[0410] 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.
[0411] Una realización adicional comprende un ordenador que tiene instalada en él el programa informático para efectuar uno de los procedimientos descritos en esta invención.
[0412] Una realización adicional según la invención 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, por ejemplo, comprender un servidor de archivos para transmitir el programa informático al receptor.
[0413] 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 son efectuados preferiblemente por un aparato de hardware.
[0414] Las realizaciones descritas anteriormente son meramente ilustrativas de los principios de la presente invención. Deberá comprenderse que las modificaciones y variaciones de las disposiciones y detalles descritos en esta invención serán evidentes para aquellos expertos en la técnica. Se pretende, por lo tanto, estar 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 esta invención.
17. Conclusiones
[0415] Para concluir, las realizaciones según la invención comprenden uno o más de los siguientes aspectos, donde los aspectos se pueden usar individualmente o en combinación.
a) Mecanismo de búsqueda del estado del contexto
[0416] Según un aspecto de la invención, los estados en la tabla de búsqueda son considerados como estados significativos y límites grupales. Esto permite reducir significativamente el tamaño de las tablas requeridas.
b) Actualización creciente del contexto
[0417] Según un aspecto, algunas realizaciones según la invención comprenden una forma computacionalmente eficaz 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
[0418] Según un aspecto de la invención, 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
[0419] Según un aspecto de la invención, se aplican las tablas optimizadas ari_hash_m[742], ari_lookup_m[742] y ari_cf_m[64][17], que proporcionan un compromiso particularmente bueno entre la eficacia de la codificación y la complejidad computacional.
[0420] Algunas otras tecnologías, que se aplican según la invención, se describen en 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 se consideran valores no firmados para el contexto.
[0421] Sin embargo, las solicitudes de patente internacional mencionadas anteriormente describen aspectos de los cuales están en uso en algunas realizaciones según la invención.
[0422] Por ejemplo, una identificación de una región de cero se usa en algunas realizaciones de la invención. En consecuencia, se ajusta un llamado “small-value-flag” (por ejemplo, 16 bits del valor del contexto numérico actual c) .
[0423] En algunas realizaciones, se puede usar el cálculo del contexto dependiente de la región. Sin embargo, en otras realizaciones, se puede omitir un cálculo del contexto dependiente de la región para conservar la complejidad y el tamaño de las tablas razonablemente pequeñas.
[0424] Además, la búsqueda de contexto que usa una función de búsqueda es un aspecto importante de la invención. La búsqueda del contexto puede basarse en el contexto de dos tablas que 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 eficacia computacional. No obstante, en algunas otras realizaciones según la invención, se puede usar la búsqueda del contexto que se describe en las solicitudes de patentes internacionales referidas anteriormente.
[0425] Además cabe observar que la búsqueda reciente del contexto es más simple y computacionalmente eficaz. También, la independencia del contexto del signo de los valores, que se usa en algunas realizaciones de la invención, ayuda a simplificar el contexto, manteniendo por lo tanto los requisitos de memoria razonablemente bajos.
[0426] En algunas realizaciones de la invención 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.
[0427] En algunas realizaciones, se usa un indicador de valor pequeño que puede ser similar a una identificación de un grupo de una pluralidad de valores cero.
[0428] En algunas realizaciones según la invención, se usa un mecanismo de interrupción aritmética. El concepto es similar al uso de un símbolo “fin de bloque” en JPEG, que tiene una nueva función comparable. 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 está configurado para detectar una combinación de símbolos existentes, los cuales normalmente no se usan 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.
[0429] Una realización según la invención usa un mecanismo de búsqueda de concepto de dos tablas.
[0430] Para resumir aun 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 las amplitudes y limitación.
[0431] Para concluir aun más, un aspecto de las realizaciones según la presente invención recibe en la actualización reciente del contexto. Las realizaciones según la invención comprenden un concepto eficaz para la actualización del concepto, que evita los cálculos extensos del borrador de trabajo (por ejemplo, del borrador de trabajo 5). En su lugar, se usan operaciones de desplazamiento y operaciones lógicas simples en algunas realizaciones. La actualización de contexto simple facilita el cálculo del contexto significativamente.
[0432] En algunas realizaciones, el contexto es independiente del signo de los valores (por ejemplo, los valores espectrales decodificados). Esta independencia del contexto del signo de los valores conlleva una complejidad reducida del contexto variable. Este concepto se basa en el descubrimiento de que un incumplimiento del signo en el contexto no conlleva una degradación severa de la eficacia de la codificación.
[0433] Según un aspecto de la invención, 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, que representa la suma de dos valores espectrales, se puede considerar como una ventaja en algunos casos.
[0434] 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 algunas ventajas.
[0435] En algunas realizaciones, se usa el llamado “indicador de valor pequeño”. Al obtener la variable de contexto c (que también es designada como un valor del contexto numérico actual), se coloca un indicador si los valores de algunas entradas “q[1][i-3]” a “q[1][i-1]” son muy pequeños. En consecuencia, el cálculo del contexto se puede efectuar con una alta eficacia. Se puede obtener un valor de contexto particularmente significativo (por ejemplo el valor del contexto numérico actual).
[0436] En algunas realizaciones, se usa un mecanismo de interrupción aritmética. El mecanismo “ARITH_STOP” proporciona una interrupción eficaz de la codificación o decodificación aritmética únicamente si existen valores de cero a la izquierda. En consecuencia, la eficacia de la codificación puede ser moderada a costes moderados en términos de la complejidad.
[0437] Según un aspecto de la invención, 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 “arijookup_m”. Este algoritmo es más eficaz que el algoritmo de WD3.
[0438] En lo sucesivo, se describirán algunos detalles adicionales.
[0439] 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 solo í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) y el segundo se usa para asignar un grupo de contexto consecutivo delimitado por los índices de contexto en “arith_hash_m[]”, en un solo modelo de probabilidad.
[0440] Cabe observar además que la tabla “arith_cf_m sb[64][16]” se puede usar como una alternativa a la tabla “ari_cf_m[64][17]”, incluso cuando las dimensiones sean ligeramente diferentes. “ari_cf_m[][]” y “ari_cf_msb[][]” pueden referirse a la misma tabla, puesto que los 17°s coeficientes 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.
[0441] Para resumir lo anterior, algunas realizaciones según la invención proporcionan una nueva codificación (codificación o decodificación) sin ruido, que 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.
[0442] Como conclusión cabe observar que el prefijo “ari” y el prefijo “arith” en nombres de las variables, matrices, funciones y así sucesivamente se usan de manera intercambiable.

Claims (3)

REIVINDICACIONES
1. Un decodificador de audio según la USAC WD7, ISO/IEC JTC1/SC29/WG11, N11299, abril de 2010,
donde el decodificador de audio está configurado para usar una tabla ari_lookup_m [742] según la figura 21,
donde el decodificador de audio está configurado para usar una tabla ari_hash_m [742] según las figuras 22 (1) a 22 (4),
donde el decodificador de audio está configurado para usar una tabla ari_cf_m [64] [17] según la figura 23 (1) a 23 (3) donde el decodificador de audio está configurado para usar una tabla ari_cf_r [4] según la figura 24;
donde el decodificador de audio está configurado para derivar el contexto usando 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 (MSB) y los bits menos significativos (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 cuantizados 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 por grupos de dos coeficientes sucesivos ay b reunidos en una denominada 2-tupla {a, b},
donde los coeficientes decodificados para AAC se almacenan en una matriz x_ac_quant[g][win][sfb][bin],
donde una 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 se almacenan en la matriz, bin es el índice de incremento más rápido y g es el índice de incremento más lento,
donde dentro de una palabra de código el orden de decodificación es a y, a continuación, b;
donde los coeficientes decodificados para TCX se almacenan en una matriz x_tcx_invquant[win][bin],
donde una orden de transmisión de las palabras de código de codificación silenciosa es tal que cuando se decodifican en el orden en que se reciben y almacenan en la matriz, bin es el índice de incremento más rápido y
win es el índice de incremento más lento,
donde dentro de una palabra de código el orden de decodificación es a y, a continuación, 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 en qs y el contexto de la trama actual q,
donde un contexto pasado qs se almacena en 2 bits por línea de frecuencia;
donde la función arith_map_context se define como se muestra en la figura 40a;
donde el decodificador sin ruido genera 2 tuplas de coeficientes espectrales cuantizados sin signo,
donde al principio, el estado c del 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 se codifica en 17 bits y es devuelto por una función arith_get_context();
donde la función arith_get_context se define como se muestra en la figura 40b;
donde una vez que se calcula el estado de contexto c, el plano a lo largo de 2 bits más significativo m se decodifica utilizando el arith_decode() alimentado con la tabla de frecuencias acumuladas apropiada correspondiente al modelo de probabilidad correspondiente al estado de contexto,
donde una correspondencia se realiza mediante una función arith_get_pk();
donde la función arith_get_pk se define como se muestra en la figura 40c;
donde el valor m se decodifica usando la función arith_decode () llamada con la tabla de frecuencias acumulativas, arith_cf_m [pki][], donde pki corresponde al índice devuelto por arith_get_pk(),
donde un algoritmo utilizado se define como se muestra en las figuras 40d y 40e;
donde cuando el valor decodificado m es el símbolo de escape, ARITH_ESCAPE, la variable lev y esc_nb se incrementan en uno y se decodifica otro valor m,
donde en este caso, la función get_pk () se llama 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 decodificados previamente para la misma tupla 2 y delimitados
a 7;
donde una vez que el valor m no es el símbolo de escape, ARITH_ESCAPE, el decodificador verifica 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ón arith_save_context ();
donde si no se cumple el símbolo ARITH_STOP, los planos de bits restantes se decodifican si existe alguno para
la 2-tupla presente,
donde los planos de bits restantes se decodifican desde el nivel más significativo al más bajo llamando lev veces arith_decode() con la tabla de frecuencias acumulativas arith_cf_r[],
donde los planos de bits decodificados r permiten refinar el valor m previamente decodificado usando un algoritmo
como se muestra en la figura 40f;
donde en este punto, el valor sin signo de la 2-tupla {a, b} está completamente decodificado, donde el contexto q
se actualiza entonces 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 figura 40g;
donde una siguiente 2-tupla de la trama se decodifica a continuación incrementando i en uno,
donde si la 2-tupla lg/2 ya estaba decodificada con la trama o si apareció el símbolo de interrupción ARITH_STOP, se llama una función arith_save_context(), donde el contexto se guarda y se almacena en qs para la siguiente trama,
donde la función arith_save_context() se define como se muestra en la figura 40h; y
donde una vez que se decodifican todos los coeficientes espectrales cuantizados sin signo, a continuación se añade el signo,
donde para cada valor cuantizado no nulo de qdec se lee un bit, donde si el valor del bit leído es igual a cero, el valor cuantizado 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 es según la USAC WD7, ISO / IEC JTC1 / SC29 / WG11, N11299, abril de 2010, donde el procedimiento utiliza una tabla ari_lookup_m[742] según la figura 21,
donde el procedimiento utiliza una tabla ari_hash_m[742] según las figuras 22(1) a 22(4),
donde el procedimiento utiliza una tabla ari_cf_m [64][17] según la figura 23(1) a 23(3),
donde el procedimiento usa una tabla ari_cf_r[4] según la figura 24;
donde el contexto se deriva usando 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 (MSB) y los bits menos significativos (LSB),
donde tres 2-tuplas de una trama pasada y una 2-tupla de una trama actual se consideran para una derivación de contexto,
donde los coeficientes espectrales cuantizados 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 por 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 matriz x_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 se almacenan en la matriz, bin es el índice de incremento más rápido y g es el índice de incremento más lento,
donde dentro de una palabra de código el orden de decodificación es ay, a continuación, b;
donde los coeficientes decodificados para TCX se almacenan en una matriz x_tcx_invquant[win][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 se almacenan en la matriz, bin es el índice de incremento más rápido y win es el índice de incremento más lento,
donde dentro de una palabra de código el orden de decodificación es ay, a continuación, 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 en qs y el contexto de la trama actual q,
donde un contexto pasado qs se almacena en 2 bits por línea de frecuencia;
donde la función arith_map_context se define como se muestra en la figura 40a;
donde la decodificación sin ruido genera 2-tuplas de coeficientes espectrales cuantizados sin signo,
donde al principio, el estado c del 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 de forma incremental utilizando el estado de contexto de la última 2-tupla decodificada considerando solo dos 2-tuplas nuevas,
donde el estado se codifica en 17 bits y se devuelve por una función arith_get_context();
donde la función arith_get_context se define como se muestra en la figura 40b;
donde una vez que se calcula el estado de contexto c, el plano a lo largo de 2 bits más significativo m se decodifica utilizando el arith_decode() alimentado con la tabla de frecuencias acumulativas apropiada correspondiente al modelo de probabilidad correspondiente al estado de contexto,
donde una correspondencia se realiza mediante una función arith_get_pk();
donde la función arith_get_pk se define como se muestra en la figura 40c;
donde el valor m se decodifica usando la función arith_decode() llamada con la tabla de frecuencias acumulativas, arith_cf_m[pki][], donde pki corresponde al índice devuelto por arith_get_pk(),
donde un algoritmo utilizado se define como se muestra en las figuras 40d y 40e;
donde cuando el valor decodificado m es el símbolo de escape, ARITH_ESCAPE, la variable lev y esc_nb se incrementan en uno y se decodifica otro valor m,
donde en este caso, la función get_pk() se llama 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 decodificados previamente para la misma 2-tupla y limitados a 7; donde una vez que el valor m no es el símbolo de escape, ARITH_ESCAPE, el decodificador verifica 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ón arith_save_context ();
donde si no se cumple el símbolo ARITH_STOP, los planos de bits restantes se decodifican si existe alguno para la 2-tupla presente,
donde los planos de bits restantes se decodifican desde el nivel más significativo al más bajo llamando lev veces arith_decode() con la tabla de frecuencias acumulativas arith_cf_r[],
donde los planos r de bits decodificados permiten refinar el valor m previamente decodificado usando un algoritmo como se muestra en la figura 40f;
donde en este punto, el valor sin signo de la 2-tupla {a, b} está completamente decodificado, donde el contexto q se actualiza entonces 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 figura 40g;
donde una siguiente 2-tupla de la trama se decodifica incrementando i en uno,
donde si la 2-tupla lg/2 ya estaba decodificada con la trama o si el símbolo de interrupción ARITH_STOP se produjo, se llama una función arith_save_context(), donde el contexto se guarda y almacena en qs para la siguiente trama, donde la función arith_save_context() se define como se muestra en la figura 40h; y
donde una vez que se decodifican todos los coeficientes espectrales cuantizados sin signo, se añade el signo, donde para cada valor cuantizado no nulo de qdec se lee un bit, donde si el valor del bit leído es igual a cero, el valor cuantizado 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.
3. Un programa informático que comprende instrucciones que, cuando el programa es ejecutado por un ordenador, hacen que el ordenador lleve a cabo el procedimiento de la reivindicación 2.
ES11738193T 2010-07-20 2011-07-20 Decodificador de audio, procedimiento de decodificación de audio y programa informático Active ES2828429T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US36593610P 2010-07-20 2010-07-20
PCT/EP2011/062478 WO2012016839A1 (en) 2010-07-20 2011-07-20 Audio encoder, audio decoder, method for encoding an audio information, method for decoding an audio information and computer program using an optimized hash table

Publications (1)

Publication Number Publication Date
ES2828429T3 true ES2828429T3 (es) 2021-05-26

Family

ID=44509264

Family Applications (2)

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
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

Country Status (16)

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

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI451403B (zh) * 2009-10-20 2014-09-01 Fraunhofer Ges Forschung 音訊編碼器、音訊解碼器、用以將音訊資訊編碼之方法、用以將音訊資訊解碼之方法及使用區域從屬算術編碼對映規則之電腦程式
KR101647576B1 (ko) * 2012-05-29 2016-08-10 노키아 테크놀로지스 오와이 스테레오 오디오 신호 인코더
CN103035249B (zh) * 2012-11-14 2015-04-08 北京理工大学 一种基于时频平面上下文的音频算术编码方法
TR201900472T4 (tr) * 2014-04-24 2019-02-21 Nippon Telegraph & Telephone Frekans alanı parametre dizisi oluşturma metodu, kodlama metodu, kod çözme metodu, frekans alanı parametre dizisi oluşturma aparatı, kodlama aparatı, kod çözme aparatı, programı ve kayıt ortamı.
US9640376B1 (en) 2014-06-16 2017-05-02 Protein Metrics Inc. Interactive analysis of mass spectrometry data
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
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
US10546736B2 (en) 2017-08-01 2020-01-28 Protein Metrics Inc. Interactive analysis of mass spectrometry data including peak selection and dynamic labeling
US11626274B2 (en) 2017-08-01 2023-04-11 Protein Metrics, Llc Interactive analysis of mass spectrometry data including peak selection and dynamic labeling
US10510521B2 (en) 2017-09-29 2019-12-17 Protein Metrics Inc. Interactive analysis of mass spectrometry data
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
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
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
EP3483880A1 (en) 2017-11-10 2019-05-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Temporal noise shaping
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
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
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
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
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
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
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
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 Публичное Акционерное Общество "Сбербанк России" (Пао Сбербанк) Способ внесения цифровых меток в цифровое изображение и устройство для осуществления способа
WO2022047368A1 (en) 2020-08-31 2022-03-03 Protein Metrics Inc. Data compression for multidimensional time series data

Family Cites Families (15)

* 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
AU2003221378B9 (en) * 2002-03-27 2009-01-08 Panasonic Intellectual Property Corporation Of America Variable length encoding method, storage medium, and variable length encoding device.
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
EP2077551B1 (en) * 2008-01-04 2011-03-02 Dolby Sweden AB Audio encoder and decoder
KR101247891B1 (ko) * 2008-04-28 2013-03-26 고리츠다이가쿠호징 오사카후리츠다이가쿠 물체 인식용 화상 데이터베이스의 작성 방법, 처리 장치 및 처리용 프로그램
PL2346029T3 (pl) * 2008-07-11 2013-11-29 Fraunhofer Ges Forschung Koder sygnału audio, sposób kodowania sygnału audio i odpowiadający mu program komputerowy
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
EP3937167B1 (en) * 2008-07-11 2023-05-10 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Audio encoder and audio decoder
MX2011003824A (es) * 2008-10-08 2011-05-02 Fraunhofer Ges Forschung Esquema de codificacion/decodificacion de audio conmutado de resolucion multiple.
KR20100136890A (ko) * 2009-06-19 2010-12-29 삼성전자주식회사 컨텍스트 기반의 산술 부호화 장치 및 방법과 산술 복호화 장치 및 방법
TWI451403B (zh) * 2009-10-20 2014-09-01 Fraunhofer Ges Forschung 音訊編碼器、音訊解碼器、用以將音訊資訊編碼之方法、用以將音訊資訊解碼之方法及使用區域從屬算術編碼對映規則之電腦程式

Also Published As

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

Similar Documents

Publication Publication Date Title
ES2828429T3 (es) Decodificador de audio, procedimiento de decodificación de audio y programa informático
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
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
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