ES2821432T3 - Cuantificación de audio mediante indexación de vectores de complejidad reducida - Google Patents

Cuantificación de audio mediante indexación de vectores de complejidad reducida Download PDF

Info

Publication number
ES2821432T3
ES2821432T3 ES18166266T ES18166266T ES2821432T3 ES 2821432 T3 ES2821432 T3 ES 2821432T3 ES 18166266 T ES18166266 T ES 18166266T ES 18166266 T ES18166266 T ES 18166266T ES 2821432 T3 ES2821432 T3 ES 2821432T3
Authority
ES
Spain
Prior art keywords
vector
leader
vectors
index
sets
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
ES18166266T
Other languages
English (en)
Inventor
Adriana Vasilache
Lasse Juhani Laaksonen
Anssi Rämö
Mikko Tapio Tammi
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.)
Nokia Technologies Oy
Original Assignee
Nokia Technologies Oy
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 Nokia Technologies Oy filed Critical Nokia Technologies Oy
Application granted granted Critical
Publication of ES2821432T3 publication Critical patent/ES2821432T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • 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
    • G10L19/032Quantisation or dequantisation of spectral components
    • G10L19/038Vector quantisation, e.g. TwinVQ audio
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/94Vector quantisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Acoustics & Sound (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Un método para cuantificar datos de audio, que comprende: indexar un vector de entrada que representa datos de audio contenidos en un conjunto de vectores de una pluralidad de conjuntos de vectores, en donde dichos conjuntos de vectores son clases líder que definen un libro de códigos de malla, y en donde cada clase líder comprende un vector líder diferente y permutaciones de dicho vector líder, en donde dichas clases líder tienen signo, y en donde dicha indexación produce un índice de posición representativo de las posiciones de los valores en dicho vector de entrada y un índice de signo representativo de los signos de las componentes de dicho vector de entrada, en donde dicha indexación comprende: realizar, en caso de que dicho vector de entrada esté contenido en un conjunto de vectores de un grupo predefinido de uno o más conjuntos de vectores de dicho libro de códigos de malla, un procesamiento específico que está caracterizado por adaptarse a una característica de dichos conjuntos de vectores en dicho grupo predefinido de conjuntos de vectores de dicho libro de códigos de malla y solo es aplicable en el caso de vectores de entrada contenidos en conjuntos de vectores con dicha característica, en donde, en dicho procesamiento específico, dicho índice de signo se determina junto con un recuento de las componentes de valor no nulo del vector de entrada en un bucle, en donde el bucle comprende verificar el signo de cada componente vectorial del vector de entrada y calcular una matriz que consiste en valores de índice que representan la posición de la componente vectorial en el vector de entrada para cada componente vectorial que tiene un valor diferente de cero, en donde dicho índice de posición se determina basándose en el recuento, la matriz y la dimensión de malla una vez que se ha completado el bucle y en donde dicha característica a la que se adapta el procesamiento específico es que dicho grupo predefinido de clases líder solo contiene clases líder con vectores líder cuyas componentes son o bien un valor no nulo par o bien cero, y; realizar, en caso de que dicho vector de entrada no esté contenido en un conjunto de vectores de dicho grupo predefinido de conjuntos de vectores de dicho libro de códigos de malla, un procesamiento general en el que dicho índice de posición y dicho índice de signo se determinan uno tras otro.

Description

DESCRIPCIÓN
Cuantificación de audio mediante indexación de vectores de complejidad reducida
Campo de la invención
La presente invención se refiere a la indexación y desindexación de vectores.
Antecedentes de la invención
Los algoritmos de baja complejidad para la codificación de habla y de audio son un activo muy relevante para las comunicaciones basadas en terminales móviles. Debido al bajo almacenamiento y a la baja complejidad, al tiempo que se conserva la eficiencia de codificación, se prefieren los libros de códigos estructurados, por ejemplo, para la cuantificación, en varios códecs de habla y de audio del estado de la técnica tales como Tasa Múltiple Adaptativa de Banda Ancha (AMR-WB) o G.EV-VBR, que se encuentra actualmente bajo normalización en SG16/Q9 de UIT-T. Los libros de códigos usados dentro de los métodos de cuantificación de los códecs de habla y de audio se pueden basar, por ejemplo, en estructuras de malla, como se describe en la referencia "Low-complexity multi-rate lattice vector quantization with application to wideband TCX speech coding at 32 kbit/s" de S. Ragot, B. Bessette y R. Lefebvre, Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing, 2004 (ICASSP '04), Montreal, Canadá, 17 a 21 de mayo de 2004, vol. 1, páginas 501-504. Esta referencia también describe el proceso de cuantificación con más detalle.
Cuando se usan estructuras de malla como libros de códigos, se requieren algoritmos para indexar los puntos de malla.
Es posible definir un libro de códigos de malla como una unión de clases líder, cada una de las cuales está caracterizada por un vector líder. Un vector líder es un vector de n dimensiones, cuyas componentes están ordenadas (por ejemplo, de forma decreciente). Correspondiendo la clase líder a vectores obtenidos a través de todas las permutaciones con signo del vector líder (con algunas restricciones posibles).
Un algoritmo para indexar puntos de una malla que se define como una unión de clases líder puede ser, por ejemplo, del tipo que indexa en líderes. En este contexto, se pueden aplicar, entre otros, algoritmos lexicográficos y binomiales, como se describe en la referencia "Robust indexing of lattices and permutation codes over binary symmetric channels" de A. Vasilache e I. Tabus, en Signal Processing vol. 83, n.° 7, págs. 1467-1486, 2003.
La publicación de IEEE a partir de Transactions on circuits and systems for video technology, vol. 8, n.° 2, páginas 206-220, abril de 1999, "Lattice Labeling Algorithms for Vector Quantization", de los autores Chun Wang y col., presenta algoritmos para etiquetar dos categorías grandes de mallas enteras, en concreto, las mallas de Construcción-A y las de Construcción B en las que una malla entera es una malla que consiste en puntos cuyas coordenadas son, todas ellas, números enteros. En particular, se divulga que los algoritmos se desarrollan basándose en las relaciones entre mallas y códigos de bloques lineales, así como en transformaciones entre varias mallas específicamente definidas y sus traslaciones. Los algoritmos binomiales son generalmente menos complejos debido a que estos consideran varias componentes vectoriales a la vez.
Sumario
Existe la posibilidad de reducir adicionalmente la complejidad de la indexación y/o desindexación.
De acuerdo con un primer aspecto de la presente invención, se divulgan un método y un aparato para cuantificar datos de audio, como se expone en las reivindicaciones independientes 1 y 2.
Este primer aspecto de la invención será evidente a partir de, y se aclarará con referencia a, la descripción detallada presentada posteriormente en el presente documento.
Breve descripción de las figuras
En las figuras se muestran:
Figura 1: Un diagrama de bloques esquemático del codificador de G.EV-VBR;
Figura 2: un diagrama de flujo de un método para indexar un vector de entrada de acuerdo con una realización ilustrativa del primer aspecto de la presente invención;
Figura 3: un diagrama de flujo de un método para determinar un vector objetivo basándose en un índice asociado con el vector objetivo; y
Figura 4: un diagrama de bloques esquemático de un dispositivo capaz de implementar el método de acuerdo con el primer aspecto de la presente invención.
Descripción detallada de la invención
En la siguiente descripción detallada de la presente invención, se describirán realizaciones ilustrativas de la presente invención en el contexto de la indexación y desindexación de puntos de malla en el contexto del cuantificador de malla propuesto para el códec G.EV-VBR o sus derivados. Sin embargo, la presente invención no se limita a este códec, a este cuantificador de malla particular, ni a la indexación/desindexación de estructuras de malla; esta también se puede aplicar en todos los demás escenarios en donde se requiera la indexación y desindexación de vectores.
El códec G.EV-VBR está en proceso de normalización en SG16/Q9 de UIT-T. Este es un códec ajustable a escala e integrado de habla y de audio para señales de banda ancha con tasas de bits de codificación de 8, 12, 16, 24 y 32 kbits/s.
La figura 1 es un diagrama de bloques esquemático del codificador de G.EV-VBR 1. Las dos primeras capas se basan en la predicción lineal excitada por código (CELP) y se indican como "códec medular" (véase la unidad de códec medular 101). Las capas restantes se obtienen a través de la codificación de los coeficientes de la Transformada de Coseno Discreta Modificada (MDCT) (véase la unidad de MDCT 104) de la señal de diferencia 103 entre la señal original 100 y la señal sintetizada de códec medular, en donde la señal de diferencia se obtiene a partir del sumador 102. La cuantificación de los coeficientes de MDCT (para la capa correspondiente a la tasa de bits de 24 kbit/s) está usando un cuantificador 105 basándose en clases líder obtenidas a partir de clases líder a partir de la malla 2RE8, que es una versión rotada de la malla E8 ajustada a escala con el factor 2. Entonces, las dos primeras capas se combinan con las capas restantes en la unidad de generación de flujo de bits 106.
Las mallas generalmente usadas en la cuantificación se pueden representar como uniones de clases líder. Como consecuencia, las estructuras de cuantificación basándose en mallas se pueden describir como uniones de clases líder.
Un vector líder es un vector entero de n dimensiones, cuyas componentes están ordenadas (por ejemplo, de forma decreciente):
(v-i, K, v-i, V2, K, V2, Vm, K, Vm), en donde v > V2 > K > Vm, v EN.
Hay ni valores v¡. La clase líder correspondiente al vector líder consiste en los vectores obtenidos a través de todas las permutaciones con signo de la clase líder con algunas restricciones posibles. Las restricciones, cuando estas son de aplicación, están relacionadas con el número de componentes vectoriales negativas que podrían ser pares o impares. El número de vectores en la clase líder es
n! C(v) = 2m_|p| n 1!n2!Knm! (1) en donde p es la paridad que puede ser 0 (sin restricciones de signo), 1 (número par de componentes negativas) o -1 (número impar de componentes negativas).
Para ilustrar la indexación binomial, considérese el vector líder de 4 dimensiones (2, 1, 1, 0). En el presente caso se consideran las permutaciones sin tener en cuenta el signo.
Los vectores que pertenecen a la clase líder de (2, 1, 1, 0) se dan en la tabla 1 a continuación, en donde se presentan dos variantes de indexación diferentes:
T l 1: l lí r r v r lí r 2 1 1
Figure imgf000003_0001
continuación
Figure imgf000004_0002
Con respecto a la primera variante de la tabla 1, se puede observar que, en el primer grupo (con índices 0-3, es decir, los primeros cuatro vectores, indicados por la línea horizontal), la posición relativa de los valores 1 y 0 es la misma, pero la posición del valor 2 está cambiando de un vector a otro. Lo mismo ocurre en el segundo grupo (con índices 4-7), y así sucesivamente. La diferencia entre el primer y segundo grupo radica en cómo están situadas las componentes que tienen el valor 1 en las tres posiciones que están disponibles después de decidir la posición para la componente que tiene el valor 2. El número de disposiciones posibles de estos dos valores en tres posiciones ( 33
= 3
viene dado por el coeficiente binomial v2y Por lo tanto, hay tres grupos en la primera variante, en donde, en ( 4 \
= 4
cada grupo, solo se cambia la posición del valor 2, de tal modo que hay v 1 vectores en cada uno de los tres grupos.
Por lo tanto, se puede concluir que una forma de enumerar los vectores en una clase líder es considerar los diferentes valores en el vector, uno de cada vez, y verificar sus posiciones posibles. Para el ejemplo considerado (variante 1), se consideran en primer lugar las posiciones posibles del valor 2, entonces se consideran, de entre las 3 posiciones restantes, las posiciones de las componentes que tienen el valor 1. Las posiciones de la componente que tiene valor 0 dependen de la posición de los dos primeros valores (debido a que es el último valor), por lo que no necesita ser considerada por separado.
La variante 2 en la tabla 1 sigue un enfoque similar. Sin embargo, la posición del valor 2 no se cambia dentro de un grupo, sino entre grupos. En consecuencia, ahora hay cuatro grupos (con índices 0-2, 3-5, 6-8 y 9-11, respectivamente). En cada uno de estos grupos, los tres vectores difieren en la disposición del valor 1, que está r33 = 3
presente dos veces, en las tres posiciones disponibles, es decir, v^v
Volviendo al cuantificador de malla ilustrativo propuesto para el códec G.EV-VBR bajo normalización en SG16/Q9 de UIT-T, en la tabla 2 a continuación se reproducen los vectores líder definidos allí (estos vectores líder pueden diferir de los vectores líder normalizados por un factor de ajuste a escala). La dimensión de los vectores líder (y, por lo tanto, de la malla) es ocho, y hay un total de 36 vectores líder. Allí, los vectores líder con componentes de valor impar tienen restricciones de signo. En particular, si la suma de los valores absolutos de las ocho componentes es un múltiplo de cuatro, el número de componentes negativas debería ser par; de lo contrario, este debería ser impar. Por ejemplo, el vector líder con índice 0 (1, 1, 1, 1, 1, 1, 1, 1) tiene suma 8, que es un múltiplo de cuatro, por lo tanto, debería haber un número par de -1 en los vectores a partir de la clase líder que le corresponde. El vector líder con índice 3 (3, 1, 1, 1, 1, 1, 1, 1) tiene una suma 10, que no es un múltiplo de 4, por lo tanto, el número de componentes negativas debería ser impar.
Tabla 2: Vectores líder en el códec G. EV-VBR
Figure imgf000004_0001
continuación
Figure imgf000005_0001
El procedimiento de indexación binomial para un vector que pertenece a una clase líder se puede describir mediante el siguiente código de indexación general ilustrativo, escrito en ANSI-C usando (para la simulación de un Procesador de Señales Digitales (DSP) genérico, por ejemplo, las funciones sub(), add(), L_mult0(), move16()) la biblioteca de punto fijo proporcionada por el Manual de Usuario de 2005 de la Biblioteca de Herramientas de Software de UIT-T UIT G.191. Allí, se proporcionan comentarios al código detrás de una barra diagonal doble "//' o entre los signos "/*" y "*/".
Este código de indexación es general, es decir, es aplicable a vectores de entrada contenidos en cualquier clase líder de la tabla 2.
pi = DIM; move16();
index = 0; move16();
i = 0; move16();
tmp = sub(no_vals_[idx_lead],1) ;
// tmp =no_vals_[idx_lead]-1;
WHILE(tmp>0)
{
tmp = sub(tmp,1); // tmp --;
IF (tmp > 0) {
find_pos_elim_fx(abs_cv,DIM,vals_[idx_lead][i],p);
idx = c2idx_fx(pi,p,no_vals_ind_[idx_lead][i]);
pi = sub(pi,no_vals_ind_[idx_lead][i]);
// pi = pi-no_vals_ind_[idx_lead][i];
q = number_fx(sub(no_vals_[idx_lead], add(1,i)),&no_vals_ind_[idx_lead][i+1],pi);
index = add(index, extract_l(L_mult0(idx, q)));
// index = index idx*q; i = add(i,1); // i +
}
ELSE{
find_pos_fx(abs_cv,DIM,vals_[idx_lead][i] ,p);
idx = c2idx_fx(pi,p,no_vals_ind_[idx_lead][i]);
index = add(index, idx); // index = index idx;
}
}
En este código de indexación, las variables y funciones/procedimientos tienen el siguiente significado:
■ DIM es la dimensión de malla, es decir, 8.
■ La variable int no_vals_[36] almacena el número de valores diferentes para cada vector líder.
■ La variable int no_vals_ind_[36][4] almacena el número de cada valor individual en cada vector líder.
■ La variable int vals_[36][4] almacena los valores que pertenecen a cada vector líder.
■ La variable int idx_lead representa el índice de la clase líder a la que pertenece el vector de entrada a indexar.
■ La variable int abs_cv[8] mantiene los valores absolutos del vector de entrada a indexar.
■ La función find_pos_elim_fx (int * abs_cv, int dim, int val, int * p) halla las posiciones de las componentes que tienen el valor val dentro del vector de dim dimensiones de valores absolutos abs_cv, los coloca en la matriz p y los elimina del vector abs_cv, para preparar este para la búsqueda del siguiente valor.
■ La función find_pos_fx(int * abs_cv, int dim, int val, int * p) es la misma que find_pos_elim_fx sin eliminar las componentes. Se llama a esta función para el penúltimo valor en el vector líder debido a que no hay búsqueda adicional para el último valor, por lo tanto, no hay necesidad alguna de eliminar la componente que tiene el penúltimo valor.
■ La función int c2idx_fx(int dim, int *p, int no_vals) asigna un índice al posicionamiento de no_vals componentes en un total de dim componentes posibles.
Por ejemplo:
(x x 00) índice 0
(x 0 x 0) índice 1
(x 00 x) índice 2
(0 x x 0) índice 3
(0 x 0 x) índice 4
(0 0 x x) índice 5,
en donde no_vals = 2, DIM = 4 y la posición de dos "x" en cuatro posiciones posibles están indexadas.
■ La función int number_fx(int no_vals, int * no_vals_ind_, int dim) cuenta el número de vectores obtenidos a través de las permutaciones sin signo de un vector de dim dimensiones que tiene un número no_vals de valores, teniendo cada uno el número de apariciones en la matriz no_vals_ind_. Esta corresponde a la fórmula de la Ec. (1) sin el factor 2m-|p|.
El funcionamiento del código de indexación general presentado anteriormente se puede entender a partir del siguiente ejemplo. Considérese una vez más la clase líder ilustrativa de la variante 2 de la tabla 1. El vector líder en este ejemplo es (2, 1, 1, 0), y se supone que la clase líder está asociada con idx_lead = 5, aunque esto no reviste importancia para el ejemplo. Además, supóngase que el vector de entrada a indexar es (1, 0, 2, 1), es decir, la dimensión del ejemplo es más pequeña que en el cuantificador de malla ilustrativo en la tabla 2, que usa vectores de 8 dimensiones. Sin embargo, debido a la generalidad del código de indexación anterior, esto no importa.
Las variables en el código de indexación anterior se inicializan entonces con los siguientes valores:
abs_cv=(1,0,2,1) // Vector de entrada a indexar
// en la clase líder 5
DIM=4 // Vectores de cuatro dimensiones
no_vals[5]=3 // tres valores diferentes en el
// vector objetivo, es decir, vector
// objetivo de tres valores
no_vals_ind_[5] = (1,2,1) // los tres valores diferentes
// tienen lugar una vez, dos veces y
// una vez en el vector de entrada,
// respectivamente
vals_[5] = (2,1,0) // los tres valores diferentes en
// el vector de entrada son 2, 1y
// 0, respectivamente
El código de indexación anterior produce entonces los siguientes resultados (al final de cada iteración while ("mientras")):
Figure imgf000006_0002
Como resultado final de la indexación del vector de entrada (1, 0, 2, 1) que está contenido en la clase líder idx_lead = 5 mostrada como variante 2 en la tabla 1 anterior, se obtiene de este modo el índice (de posición) 7 que, de hecho, corresponde al vector (1, 0, 2, 1) en la clase líder 5.
Volviendo al código de indexación general presentado anteriormente, además del índice de posición que es representativo de las posiciones de los valores en el vector de entrada, se debería codificar la información relacionada con el signo de los valores no nulos en el vector de entrada. El índice para el signo se calcula como:
Figure imgf000006_0001
en donde S es el número de componentes no nulas en el vector a indexar, bi es 0 si la i-ésima componente no nula es positiva, y 1 de lo contrario. El valor de S es el mismo para todos los vectores en una clase líder.
El índice final I (que comprende información tanto de índice de signo como de posición, así como información representativa de la clase líder en la que está contenido el vector de entrada) se calcula entonces como:
I = shl(index, idx_sign_max_bit[idx_lead]);
// I = index<<idx_sign_max_bit[idx_lead];
Figure imgf000007_0001
Allí, las variables usadas tienen el siguiente significado:
• int idx_sign_max_bit[36] es una variable que almacena el número de bits en los que se representa el índice de signo. Esta corresponde en la práctica al número de valores no nulos en el vector si la paridad es cero, o al número de valores no nulos - 1 si la paridad es /-1.
• uint offset_lead[36+1] representa el desplazamiento líder para cada clase líder. Esta significa en la práctica que, si hay n1 vectores en la primera clase líder, n2 en la segunda, y así sucesivamente, la offset_lead será: 0, n- n n2... De esta manera, se puede incluir, en el índice final I, información representativa de la clase líder en la que está contenido el vector de entrada.
• El índice final I se obtiene poniendo en la práctica la idx_sign en los últimos idx_sign_max_bits[] bits del índice desplazado (es decir, concatenando los bits de índice de posición e idx_sign bits, al tiempo que se sabe que idx_sign puede usar como máximo idx_sign_max_bits, y añadiendo el desplazamiento para la clase líder a la que pertenece el vector actual a indexar.
El primer aspecto de la presente invención propone reducir la complejidad de la indexación general descrita anteriormente aplicando un procesamiento específico si un vector de entrada a indexar está contenido en una clase líder que pertenece a un grupo predefinido de clases líder, y aplicando un procesamiento general de lo contrario. La figura 2 es un diagrama de flujo 2 que ilustra un método para la indexación de un vector de entrada de acuerdo con una realización ilustrativa del primer aspecto de la presente invención.
En una primera etapa 200, se recibe un vector de entrada. El vector de entrada se puede determinar, por ejemplo, durante un proceso de cuantificación, por ejemplo, como la coincidencia más cercana a todos los vectores en una malla que es una unión de clases líder. En la etapa 200 también se recibe una identificación de la clase líder en la que está contenido el vector de entrada. Esta puede ser, por ejemplo, un índice para la clase líder, o el vector líder de la clase líder en la que está contenido el vector de entrada, por nombrar solo unos pocos ejemplos.
En una etapa 201, se determina entonces si la clase líder está contenida en un grupo predefinido de una o más clases líder. Si este es el caso, se aplica un procesamiento específico en la etapa 202. De lo contrario, se aplica un procesamiento general en una etapa 203. Se analizarán a continuación, con más detalle, ejemplos para el grupo predefinido de clases líder y para el procesamiento específico aplicado cuando se indexan vectores de entrada que están contenidos en las clases líder de un grupo predefinido, de este tipo, de clases líder.
De acuerdo con una primera realización ilustrativa del primer aspecto de la presente invención, solo la clase líder que está asociada con el vector líder con índice 20 (véase la tabla 2), es decir, {6, 4, 2, 0, 0, 0, 0, 0}, se somete a un procesamiento específico. Por lo tanto, el grupo predefinido de clases líder solo contiene una clase líder, identificada por el índice 20.
En particular, la llamada de la función number_fx() en el código de indexación general descrito anteriormente puede ser sustituida por el siguiente código:
IF (sub(idx_lead,20)==0) // if (idx_lead == 20)
{
q = 42; move16();
if (sub(tmp,1) ==0){// if (tmp == 1)
q = 6; move16();
}
}
ELSE{
q = C[sub(pi,1)][(no_vals_ind_[idx_lead][add(i,1)])];
move16();
// q = C[pi-1][no_vals_ind_[idx_lead][i+1]];
}
Allí, la variable C[DIM+1][DIM+1] almacena los coeficientes binomiales hasta la dimensión 8.
En la presente realización, el procesamiento específico se representa mediante el código que se ejecuta en caso de que idx_lead sea igual a 20, y el procesamiento general se representa mediante el código que se ejecuta si idx_lead no es igual a 20.
En el contexto de la presente realización, los inventores de la presente invención han observado que la clase líder con índice 20 es la única líder que tiene 4 valores diferentes. El vector líder con índice 20, que es el único con cuatro valores diferentes, obliga a la tabla no_vals_ind_ a ser de dimensión de 36 x 4 (36 clases líder y un número máximo de cuatro valores diferentes por clase líder), es decir, no_vals_ind_[idx_lead][i] solo es diferente de cero para idx_lead = 20 e i = 3 (i varía de 0 a 3). Sin embargo, en el código de indexación general presentado anteriormente, la única referencia a este valor no nulo de no_vals_ind_ tiene lugar para idx_lead = 20 en la función number_fx(). Por lo tanto, es instructivo dividir la función number_fx() en un procesamiento específico (para la clase líder con índice de vector líder 20) y un procesamiento general (para las clases líder restantes), en donde, en el procesamiento general, ahora solo se requiere una referencia a una tabla no_vals_ind_ con dimensiones 36 x 3. La introducción del procesamiento específico permite, por lo tanto, optimizar el procesamiento general.
En el contexto de una segunda realización ilustrativa del primer aspecto de la presente invención, los inventores de la presente invención han observado que, en algunos casos de uso práctico, un pequeño subconjunto de las clases líder está teniendo lugar con más frecuencia que las otras. Por ejemplo, para los datos que se cuantifican con el cuantificador de malla dentro del códec G.EV-VBR con la estructura de malla que se construye sobre los vectores líder de la tabla 2, es más probable que se use el vector líder con índice 1, es decir, (2, 2, 0, 0, 0, 0, 0, 0) y, en general, es más probable que se usen los vectores para los que el vector líder tiene dos valores diferentes (por ejemplo, los vectores líder con índices 1, 2, 3, 4, 5, 6, 9, etc.) que los otros vectores. Estos llegaron a la conclusión de que sería razonable pensar en un método de indexación para el que la complejidad fuera menor, en particular para estos vectores.
Para el cálculo del índice para el signo, es necesario un bucle para verificar el signo de cada componente vectorial. Es menos complejo considerar por separado/específicamente los vectores líder que tienen solo dos valores diferentes, debido a que el procedimiento de indexación maneja la posición de solo un valor (el primero) sin tener que hacer preparativos adicionales para verificar las posiciones de los siguientes valores. Además, la mayoría de los vectores líder con solo dos valores, tienen un valor nulo (véanse, por ejemplo, los vectores líder con índice 1, 2, 4, etc., en la tabla 2), por lo que la creación del índice de posición se puede acoplar eficientemente con la creación del índice de signo en el mismo bucle.
Hay dos tipos de líderes con dos valores, teniendo un tipo solo valores pares (véanse, por ejemplo, los vectores líder con índices 1, 2, 4, 5, etc., en la tabla 2) y teniendo el otro solo valores impares (véanse los índices 3, 6, 9, etc.). Para el primer tipo, la mayoría de las componentes tienen el valor 0, mientras que, para el segundo tipo, la mayoría de las componentes tienen el valor 1.
Por ejemplo, se puede usar el siguiente procedimiento específico para sustituir todo el código de indexación general descrito anteriormente para procesar los vectores de dos valores con componentes pares.
idx sign = 0; move16();
index = 0; /* usado como cnt */ move16();
FOR(i=0;i<DIM;i++)
{
q = cv[i]; move16(); logic16();
if (q)
{
p[index] = i; move16(); // para índice de posición
}
if (q<0)
{
tmp = shl(1,index); // para índice de signo
}
if (q<0){
idx_sign = add(idx_sign, tmp); // para índice de signo
}
if (q){
index = add(index,1);
}
}
index = c2idx_fx(DIM,p,index); // índice de posición
De manera similar, el segundo tipo (vectores de dos valores con valores impares) se puede tratar por separado usando, por ejemplo, el siguiente procedimiento:
idx sign = 0; move16();
index = 0; move16();
FOR(i=0;i<DIM;i++)
{
q = cv[i]; move16();
if (q <0)
{
tmp = shl(1,i);
}
if (q<0)
{
idx_sign = add(idx_sign,tmp);
}
if (q<0){
q = sub(0,q);
}
tmp = sub(q,1);
if (tmp)
{
p[index] = i; move16();
}
if (tmp) {
index = add(index,1);
}
}
idx_sign = shl(idx_sign,1); // debido a una paridad no nula
index = c2idx_fx(DIM,p,index);
En esta segunda realización ilustrativa del primer aspecto de la presente invención, el grupo predefinido de clases líder comprende, por lo tanto, todas las clases líder con solo vectores líder de dos valores (es decir, clases líder con índices de vector líder 1, 2, 3, 4, 5, 6, 9, etc.). El procesamiento específico se representa mediante los dos segmentos de código que especifican el procesamiento para los vectores líder de dos valores con componentes pares e impares, respectivamente, y el procesamiento general se representa mediante el código de indexación general que se aplica para todas las demás clases líder (por ejemplo, clases líder con los índices de vector líder 0, 7, 8, 10, etc., en la tabla 2). Allí, se ha de hacer notar que el grupo predefinido se divide en dos subgrupos en el presente caso, un primer subgrupo con vectores líder de dos valores con componentes pares, y un segundo subgrupo con vectores líder de dos valores con componentes impares, y que, para cada uno de estos subgrupos, se realizan acciones diferentes en el procesamiento específico.
Como primera modificación de la segunda realización ilustrativa del primer aspecto de la presente invención, también sería posible prescindir del procesamiento específico para los vectores líder de dos valores con componentes impares (por ejemplo, índices 3, 6, 9, etc.) y, en su lugar, realizar el código de indexación general. El grupo predefinido de clases líder solo contendría entonces las clases líder con vectores líder de dos valores con componentes pares. Como alternativa, se podría prescindir del procesamiento específico para los vectores líder de dos valores con componentes pares.
Como segunda modificación de la segunda realización ilustrativa del primer aspecto de la presente invención, también sería posible restringir el procesamiento específico a la determinación de solo el índice de posición ("índice"), o a la determinación de solo el índice de signo ("idx_sign"). Por supuesto, esta modificación también se podría aplicar a la primera modificación de la segunda realización ilustrativa del primer aspecto de la presente invención.
El primer aspecto de la presente invención se dirige a la indexación de un vector de entrada que representa datos de audio durante la cuantificación de los datos de audio. Lo siguiente se dirige a la desindexación, es decir, a determinar (o recuperar) un vector objetivo basándose en un índice asociado con el vector objetivo.
Un procedimiento de desindexación binomial para un vector objetivo que pertenece a una clase líder como se define en la tabla 2 se puede describir mediante el siguiente código de desindexación general ilustrativo. Este código de desindexación es general, es decir, es aplicable a vectores objetivo contenidos en cualquier clase líder de la tabla 2. Las variables y funciones usadas en este código de desindexación corresponden a las usadas en el código de indexación general presentado en el contexto del primer aspecto de la presente invención anterior. El procedimiento de desindexación recibe la variable idx_lead, que identifica la clase líder, y la variable index_loc, que identifica el índice de posición (que es representativo de las posiciones de los valores en el vector objetivo), como entrada, y determina el vector objetivo cv como salida. Allí, no se considera el signo del vector objetivo, este se puede recuperar en un procedimiento separado.
FOR(j=0;j<DIM;j++){
cv[j] = vals_[idx_lead][sub(no_vals_[idx_lead],1)];
move16(); /* poner por defecto el último valor */
occ_pos[j] = 0; move16();
}
/*------------------------------------------------------- */
no_places_old = DIM; move16();
FOR(i=0;i<sub(no_vals_[idx_lead],1);i++)
{
no_vals_crt = no_vals_[idx_lead]; no_places=sub(no_places_old,no_vals_ind_[idx_lead][i]);
tmp = sub(no_vals_[idx_lead], add(2,i));
IF (tmp>0){
quotient = number_fx(sub(no_vals_crt, add(1,i)),
&no_vals_ind_[idx_lead][i], no_places);
idx = div_int(index_loc, quotient, &index_loc);
/* división entera: index_loc/quotient = idx, reminder
index_loc */
/* p es una tabla con las posiciones del valor vals[i]
de entre posiciones disponibles de no_places */
idx2c_fx(no_places_old, p,
no_vals_ind_[idx_lead][i],idx);
no_places_old = no_places; move16();
/* poner el i-ésimo valor en el vector de código */
IF (i==0)
{
FOR(j=0;j<no_vals_ind_[idx_lead][i];j++)
{
pos = p[j]; move16();
cv[pos] = vals_[idx_lead][i]; move16();
occ_pos[pos] = 1; move16();
}
}ELSE{
FOR(j=0;j<no_vals_ind_[idx_lead][i] ;j++)
{
pos = offset [p[j]]; move16(); move16();
cv[pos] = vals_[idx_lead][i]; move16();
occ_pos[pos] = 1; move16();
}
}
/* actualizar offset (desplazamiento) */
l=0; move16();
FOR(j=0; j<DIM; j++)
{
IF (occ_pos[j]==0)
{
offset[l]=j; move16();
1 = add(l,1);
}
}
}
ELSE{
idx2c_fx(no_places_old, p,
no_vals_ind_[idx_lead][i],index_loc);
/* poner el penúltimo valor en el vector de código */ FOR(j=0;j<no_vals_ind_[idx_lead][i];j++)
{
pos = offset [p[j]]; move16(); move16();
cv[pos] = vals_[idx_lead][i]; move16();
}
}
}
Allí, la función idx2c_fx(int dim, int* p, int no_vals, int index_loc) es complementaria a la función c2idx_fx analizada anteriormente y devuelve el posicionamiento p de no_vals componentes en un vector de dim dimensiones de acuerdo con lo prescrito por index_loc.
Además, la variable int occ_pos[8] realiza un seguimiento de las posiciones en las que se han colocado las componentes de los valores ya descodificados. La variable int offset[8] se usa para averiguar la posición real de los valores, debido a que si, por ejemplo, ya se ha colocado un valor en un vector de 8 dimensiones, el índice de posición para el siguiente valor es relativo solo a siete posiciones. Por ejemplo, para el líder de 4 dimensiones (211 0), si, cuando se descodifica la posición del valor 2, da (x 2 x x), y el índice de posición para el valor 1 es 0, esta corresponde a las posiciones (0, 1) para los dos valores uno, pero los unos se colocarán en la práctica en las posiciones (0, 2) debido a que el primer valor, 2, ya está en la posición 1.
La figura 3 es un diagrama de flujo 3 que ilustra un método para determinar un vector objetivo basándose en un índice asociado con el vector objetivo. Este método se puede realizar, por ejemplo, durante un proceso de descuantificación.
En una primera etapa 300, se recibe un índice asociado con un vector objetivo que se va a determinar. El índice puede ser, por ejemplo, un índice que selecciona un vector de entre los vectores de una clase líder, en donde los vectores en la clase líder se pueden indexar, por ejemplo, binomialmente. Además del índice, se recibe una identificación de la clase líder en la que está contenido el vector objetivo. Sin embargo, esto es opcional, debido a que la identificación de la clase líder en la que está contenido el vector objetivo también puede estar contenida en el índice asociado con el vector objetivo. El índice y la identificación de la clase líder recibidos en la etapa 300 se pueden obtener, por ejemplo, a partir de un índice que contiene toda la siguiente información: una identificación de la clase líder, información acerca de qué vector en la clase líder se determinará como vector objetivo e información de signo para el vector objetivo.
El vector objetivo que se va a determinar en el diagrama de flujo 3 de la figura 3 se puede haber seleccionado, por ejemplo, como la coincidencia más cercana a todos los vectores en una malla durante un proceso de cuantificación. En una etapa 301, se determina entonces si la clase líder está contenida en un grupo predefinido de una o más clases líder. Si este es el caso, se aplica un procesamiento específico en la etapa 302. De lo contrario, se aplica un procesamiento general en una etapa 303. Se analizarán a continuación, con más detalle, ejemplos para el grupo predefinido de clases líder y para el procesamiento específico aplicado cuando se desindexan vectores objetivo que están contenidos en las clases líder de un grupo predefinido, de este tipo, de clases líder.
De acuerdo con un primer ejemplo, solo la clase líder que está asociada con el vector líder con índice 20 (véase la tabla 2), es decir, {6, 4, 2, 0, 0, 0, 0, 0}, se somete a un procesamiento específico. Por lo tanto, el grupo predefinido de clases líder solo contiene una clase líder, identificada por el índice 20.
En particular, el primer bucle FOR ("para") (encima de la línea discontinua horizontal) del código de desindexación general presentado anteriormente puede ser sustituido entonces por el siguiente código:
FOR(j=0;j<DIM;j++){
if (sub(idx_lead,20)==0){
cv[j] = 0; move16();
}
if (sub(idx_lead,20))
{
cv[j] = vals_[idx_lead] [sub(no_vals_[idx_lead],1)];
move16();
}
occ_pos[j] = 0; move16();
}
Además, la llamada de la función number_fx() en el código de desindexación general puede ser sustituida entonces por el siguiente código:
IF (sub(idx_lead, 20)==0)
{
quotient = 42; move16();
if (sub(tmp,1) ==0){
quotient = 6; move16();
}
}
ELSE{
quotient = C[sub(no_places,1)][(no_vals_ind_[idx_lead] [add
(i,1)])]; move16();
}
Allí, como ya se ha explicado anteriormente, la variable C[DIM+1] [DIM+1] almacena los coeficientes binomiales hasta la dimensión 8.
En este ejemplo, el procesamiento específico se representa mediante el código que se ejecuta en caso de que idx_lead sea igual a 20, y el procesamiento general se representa mediante el código que se ejecuta si idx_lead no es igual a 20.
En el contexto de este ejemplo, los inventores de la presente invención han observado que la clase líder con índice 20 es la única líder que tiene 4 valores diferentes. El vector líder con índice 20, que es el único con cuatro valores diferentes, obliga tanto a la tabla no_vals_ind_ como a la tabla vals_ a ser de dimensión de 36 x 4 (36 clases líder y un número máximo de cuatro valores diferentes por clase líder), es decir, no_vals_ind_[idx_lead][i] y vals_[idx_lead][i] existen solo para idx_lead = 20 e i = 3 (i varía de 0 a 3). Sin embargo, en el código de desindexación general presentado anteriormente, la única referencia a los valores respectivos de no_vals_indx_ y vals_ tiene lugar para idx_lead = 20 en las porciones del código de desindexación general que han sido sustituidas por el código específico. Entonces, en el resto del código de desindexación general, ahora solo se requiere referencia a las tablas no_vals_ind_ y vals_ con dimensiones 36 x 3. La introducción del procesamiento específico permite, por lo tanto, optimizar el procesamiento general.
De acuerdo con un segundo ejemplo, el grupo predefinido de clases líder solo contiene la clase líder con el vector de clase líder con índice 1 (véase la tabla 2), es decir, (2, 2, 0, 0, 0, 0, 0, 0). En lugar de realizar siempre una desindexación general, es decir, una desindexación que es aplicable en el caso de vectores objetivo contenidos en cualquier clase líder (y que se ha presentado con referencia al código de desindexación general anterior), por ejemplo, se puede realizar el siguiente procesamiento específico en el caso de un vector objetivo que está contenido en la clase líder con el vector de clase líder con índice 1, y el procesamiento general solo se realiza de lo contrario. Obsérvese que, como en el código de desindexación general presentado anteriormente, el siguiente procesamiento específico solo produce el vector objetivo sin signo cv.
FOR(i=0;i<DIM;i++)
{
cv[i] = 0; move16();
}
idx2c_fx(DIM, p, 2,index_loc);
FOR(i=0;i<2;i++)
{
cv[p[i]]=2; move16(); move16();
}
En el códec G.EV.VBR (es decir, para el libro de códigos basándose en los vectores líder definidos en la tabla 2) y datos de habla y de música a tasas de bits de 16, 24 y 32 kbits/s), el vector líder (2, 2, 0, 0, 0, 0, 0, 0) es, con mucho, el más probable, de tal modo que la aplicación de un procesamiento específico a su clase líder reduce la complejidad global del procedimiento de desindexación.
La figura 4 un diagrama de bloques esquemático de un dispositivo 4 que es capaz de implementar el método de acuerdo con el primer aspecto de la presente invención. Este dispositivo puede ser, por ejemplo, un teléfono móvil, un ordenador o cualquier otro dispositivo electrónico. El dispositivo comprende una unidad central de procesamiento (CPU) 400, que tiene acceso a una memoria de programa 401 y a una memoria 402. La CPU 400 puede ejecutar, por ejemplo, un programa informático que se almacena en la memoria de programa 401. Allí, la memoria de programa 401 se puede instalar de forma fija en el dispositivo 4 o ser extraíble. Por ejemplo, la memoria de programa 401 se puede materializar como un medio legible por ordenador que tiene el programa informático almacenado en el mismo. La memoria 402 se puede materializar, por ejemplo, como memoria de acceso aleatorio (RAM). La memoria de programa 401 y la memoria 402 también se pueden incorporar como un único componente. La CPU 400 controla además un controlador de micrófono que, a su vez, controla un micrófono, un controlador de altavoz 403 que, a su vez, controla un altavoz, y una interfaz 405, a través de la cual se pueden intercambiar datos con otros dispositivos. La interfaz 405 se puede materializar, por ejemplo, como una interfaz de radio.
El dispositivo 4 comprende por lo tanto todas las componentes requeridas para establecer una comunicación basada en audio con otra entidad. Las señales de audio recibidas a través del controlador de micrófono 404 pueden ser codificadas por la CPU 400 y enviarse a través de la interfaz 405 a otro dispositivo. Asimismo, los datos de audio a partir de otros dispositivos se pueden recibir a través de la interfaz 405, pueden ser descodificados por la CPU 400 y procesarse a través del controlador de altavoz 403.
Allí, para realizar una codificación y descodificación, la CPU 400 del dispositivo 4 ejecuta un códec, por ejemplo, el códec G.EV-VBR. Este códec se puede materializar, por ejemplo, como un programa informático que se almacena en la memoria de programa 401. De esta manera, el dispositivo 4 puede, por ejemplo, implementar los bloques estructurales 101, 104, 105 y 106 de la figura 1.
La CPU 400 se puede entender como un componente de procesamiento que realiza una indexación de vectores de entrada (de acuerdo con el diagrama de flujo de la figura 2) y/o una determinación de un vector objetivo basándose en un índice asociado con el vector objetivo (de acuerdo con el diagrama de flujo de la figura 3) y, en lo que respecta a dicha indexación, realiza un procesamiento específico y general de acuerdo con el primer aspecto de la presente invención. Asimismo, el códec, o partes del mismo, se pueden implementar en el hardware dedicado 406 (por ejemplo, un procesador de señales digitales (DSP), una matriz de puertas programables en campo (FPGA), un circuito integrado de aplicación específica (ASIC) o cualquier otro hardware dedicado) y, entonces, el hardware dedicado 406 se puede entender como un componente de procesamiento que realiza una indexación de vectores de entrada y/o una determinación de un vector objetivo basándose en un índice asociado con el vector objetivo y, en lo que respecta a dicha indexación, realiza un procesamiento específico y general de acuerdo con el primer aspecto de la presente invención.
El código de programa ejecutado por la CPU 400 también se puede ver como que comprende tales componentes de procesamiento en forma de módulos funcionales.

Claims (2)

REIVINDICACIONES
1. Un método para cuantificar datos de audio, que comprende:
indexar un vector de entrada que representa datos de audio contenidos en un conjunto de vectores de una pluralidad de conjuntos de vectores, en donde dichos conjuntos de vectores son clases líder que definen un libro de códigos de malla, y en donde cada clase líder comprende un vector líder diferente y permutaciones de dicho vector líder, en donde dichas clases líder tienen signo, y en donde dicha indexación produce un índice de posición representativo de las posiciones de los valores en dicho vector de entrada y un índice de signo representativo de los signos de las componentes de dicho vector de entrada, en donde dicha indexación comprende:
realizar, en caso de que dicho vector de entrada esté contenido en un conjunto de vectores de un grupo predefinido de uno o más conjuntos de vectores de dicho libro de códigos de malla, un procesamiento específico que está caracterizado por adaptarse a una característica de dichos conjuntos de vectores en dicho grupo predefinido de conjuntos de vectores de dicho libro de códigos de malla y solo es aplicable en el caso de vectores de entrada contenidos en conjuntos de vectores con dicha característica, en donde, en dicho procesamiento específico, dicho índice de signo se determina junto con un recuento de las componentes de valor no nulo del vector de entrada en un bucle, en donde el bucle comprende verificar el signo de cada componente vectorial del vector de entrada y calcular una matriz que consiste en valores de índice que representan la posición de la componente vectorial en el vector de entrada para cada componente vectorial que tiene un valor diferente de cero, en donde dicho índice de posición se determina basándose en el recuento, la matriz y la dimensión de malla una vez que se ha completado el bucle y en donde dicha característica a la que se adapta el procesamiento específico es que dicho grupo predefinido de clases líder solo contiene clases líder con vectores líder cuyas componentes son o bien un valor no nulo par o bien cero, y;
realizar, en caso de que dicho vector de entrada no esté contenido en un conjunto de vectores de dicho grupo predefinido de conjuntos de vectores de dicho libro de códigos de malla, un procesamiento general en el que dicho índice de posición y dicho índice de signo se determinan uno tras otro.
2. Un aparato para cuantificar datos de audio, configurado para:
indexar un vector de entrada que representa datos de audio contenidos en un conjunto de vectores de una pluralidad de conjuntos de vectores, en donde dichos conjuntos de vectores son clases líder que definen un libro de códigos de malla, y en donde cada clase líder comprende un vector líder diferente y permutaciones de dicho vector líder, en donde dichas clases líder tienen signo, y en donde dicha indexación produce un índice de posición representativo de las posiciones de los valores en dicho vector de entrada y un índice de signo representativo de los signos de las componentes de dicho vector de entrada, en donde el aparato configurado para indexar está configurado además para:
realizar, en caso de que dicho vector de entrada esté contenido en un conjunto de vectores de un grupo predefinido de uno o más conjuntos de vectores de dicho libro de códigos de malla, un procesamiento específico que está caracterizado por adaptarse a una característica de dichos conjuntos de vectores en dicho grupo predefinido de conjuntos de vectores y solo es aplicable en el caso de vectores de entrada contenidos en conjuntos de vectores con dicha característica, en donde, en dicho procesamiento específico, dicho índice de signo se determina junto con un recuento de las componentes de valor no nulo del vector de entrada en un bucle, en donde el bucle comprende verificar el signo de cada componente vectorial del vector de entrada y calcular una matriz que consiste en valores de índice que representan la posición de la componente vectorial en el vector de entrada para cada componente vectorial que tiene un valor diferente de cero, en donde dicho índice de posición se determina basándose en el recuento, la matriz y la dimensión de malla una vez que se ha completado el bucle y en donde dicha característica a la que se adapta el procesamiento específico es que dicho grupo predefinido de clases líder solo contiene clases líder con vectores líder cuyas componentes son o bien un valor no nulo par o bien cero, y;
realizar, en caso de que dicho vector de entrada no esté contenido en un conjunto de vectores de dicho grupo predefinido de conjuntos de vectores de dicho libro de códigos de malla, un procesamiento general en el que dicho índice de posición y dicho signo se determinan uno tras otro.
ES18166266T 2008-02-15 2008-02-15 Cuantificación de audio mediante indexación de vectores de complejidad reducida Active ES2821432T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
PCT/EP2008/051901 WO2009100768A1 (en) 2008-02-15 2008-02-15 Reduced-complexity vector indexing and de-indexing
EP18166266.9A EP3367381B1 (en) 2008-02-15 2008-02-15 Audio quantizing by reduced-complexity vector indexing

Publications (1)

Publication Number Publication Date
ES2821432T3 true ES2821432T3 (es) 2021-04-26

Family

ID=39495330

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18166266T Active ES2821432T3 (es) 2008-02-15 2008-02-15 Cuantificación de audio mediante indexación de vectores de complejidad reducida

Country Status (10)

Country Link
US (1) US8762141B2 (es)
EP (2) EP2260486B1 (es)
KR (1) KR101170137B1 (es)
CN (1) CN101981618B (es)
AR (1) AR070125A1 (es)
ES (1) ES2821432T3 (es)
PL (1) PL3367381T3 (es)
TW (1) TWI480859B (es)
WO (1) WO2009100768A1 (es)
ZA (1) ZA201006498B (es)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
MX2012011943A (es) * 2010-04-14 2013-01-24 Voiceage Corp Libro de códigos de innovacion combinado, flexible y escalable para uso en codificador y decodificador celp.
US9082412B2 (en) * 2010-06-11 2015-07-14 Panasonic Intellectual Property Corporation Of America Decoder, encoder, and methods thereof
IL295473B2 (en) 2010-07-02 2023-10-01 Dolby Int Ab After–selective bass filter
WO2012069886A1 (en) * 2010-11-26 2012-05-31 Nokia Corporation Coding of strings
CN103329198B (zh) 2010-11-26 2015-07-08 诺基亚公司 低复杂度目标矢量识别
EP2668651A4 (en) 2011-01-28 2014-07-30 Nokia Corp CODING BY COMBINING CODE VECTORS
ES2745143T3 (es) * 2012-03-29 2020-02-27 Ericsson Telefon Ab L M Cuantificador vectorial
KR101996503B1 (ko) * 2012-04-13 2019-07-05 삼성디스플레이 주식회사 액정표시장치 및 그 제조방법
WO2016018185A1 (en) * 2014-07-28 2016-02-04 Telefonaktiebolaget L M Ericsson (Publ) Pyramid vector quantizer shape search
CN108028045A (zh) 2015-07-06 2018-05-11 诺基亚技术有限公司 用于音频信号解码器的位错误检测器

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4493045A (en) 1981-10-19 1985-01-08 Fairchild Camera & Instrument Corp. Test vector indexing method and apparatus
US5105353A (en) 1987-10-30 1992-04-14 International Business Machines Corporation Compressed LR parsing table and method of compressing LR parsing tables
US6084595A (en) 1998-02-24 2000-07-04 Virage, Inc. Indexing method for image search engine
CA2388358A1 (en) 2002-05-31 2003-11-30 Voiceage Corporation A method and device for multi-rate lattice vector quantization
US20070094035A1 (en) 2005-10-21 2007-04-26 Nokia Corporation Audio coding
US20070168197A1 (en) * 2006-01-18 2007-07-19 Nokia Corporation Audio coding

Also Published As

Publication number Publication date
TW200947420A (en) 2009-11-16
EP3367381A1 (en) 2018-08-29
ZA201006498B (en) 2012-02-29
KR20100113172A (ko) 2010-10-20
US8762141B2 (en) 2014-06-24
US20110010169A1 (en) 2011-01-13
KR101170137B1 (ko) 2012-07-31
CN101981618B (zh) 2014-06-18
EP2260486A1 (en) 2010-12-15
CN101981618A (zh) 2011-02-23
TWI480859B (zh) 2015-04-11
PL3367381T3 (pl) 2020-12-14
AR070125A1 (es) 2010-03-17
EP3367381B1 (en) 2020-09-02
WO2009100768A1 (en) 2009-08-20
EP2260486B1 (en) 2018-04-18

Similar Documents

Publication Publication Date Title
ES2821432T3 (es) Cuantificación de audio mediante indexación de vectores de complejidad reducida
US7680670B2 (en) Dimensional vector and variable resolution quantization
ES2922451T3 (es) Indicación de la reusabilidad de parámetros de un marco para la codificación de vectores
ES2629453T3 (es) Codificador, descodificador y procedimiento de codificación
ES2733878T3 (es) Codificación mejorada de señales de audio digitales multicanales
KR101790463B1 (ko) 오디오/비디오 샘플 벡터의 피라미드 벡터 양자화 인덱싱 및 디인덱싱을 위한 방법 및 장치
ES2559981T3 (es) Método de codificación, método de decodificación, dispositivo, programa y medio de registro
ES2628127T3 (es) Cuantificador avanzado
US10366698B2 (en) Variable length coding of indices and bit scheduling in a pyramid vector quantizer
JP4601690B2 (ja) ベクトル符号化/復号化方法、装置、及びストリーム・メディア・プレイヤー
BRPI0611546A2 (pt) codificação sem perdas de informações com taxa de bits máxima garantida
ES2619369T3 (es) Método de codificación, método de descodificación, aparato, programa y soporte de registro
WO2011097963A1 (zh) 编码方法、解码方法、编码器和解码器
US9425820B2 (en) Vector quantization with non-uniform distributions
JP6289627B2 (ja) 信号の符号化および復号化の方法および装置
ES2366551T3 (es) Codificación y decodificación dependiente de una fuente de múltiples libros de códigos.
EP2668651A1 (en) Coding through combination of code vectors
RU2461079C2 (ru) Упрощенная индексация и деиндексация векторов
US8487789B2 (en) Method and apparatus for lossless encoding and decoding based on context
ES2296489B1 (es) Metodo escalable de compresion de audio e imagenes.
JPWO2011045927A1 (ja) 符号化装置、復号装置およびこれらの方法
Mustiere et al. Sparse audio coding via targeted dithering and combinatorial decoding