ES2874511T3 - Búsqueda de forma de cuantificador de vector en pirámide - Google Patents

Búsqueda de forma de cuantificador de vector en pirámide Download PDF

Info

Publication number
ES2874511T3
ES2874511T3 ES19209199T ES19209199T ES2874511T3 ES 2874511 T3 ES2874511 T3 ES 2874511T3 ES 19209199 T ES19209199 T ES 19209199T ES 19209199 T ES19209199 T ES 19209199T ES 2874511 T3 ES2874511 T3 ES 2874511T3
Authority
ES
Spain
Prior art keywords
loop
vector
enloopy
search
bit word
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
ES19209199T
Other languages
English (en)
Inventor
Jonas Svedberg
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.)
Telefonaktiebolaget LM Ericsson AB
Original Assignee
Telefonaktiebolaget LM Ericsson AB
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 Telefonaktiebolaget LM Ericsson AB filed Critical Telefonaktiebolaget LM Ericsson AB
Application granted granted Critical
Publication of ES2874511T3 publication Critical patent/ES2874511T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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 OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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
    • 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 OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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/002Dynamic bit allocation
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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/08Determination or coding of the excitation function; Determination or coding of the long-term prediction parameters
    • G10L19/10Determination or coding of the excitation function; Determination or coding of the long-term prediction parameters the excitation function being a multipulse excitation
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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/16Vocoder architecture
    • G10L19/167Audio streaming, i.e. formatting and decoding of an encoded audio signal representation into a data stream for transmission or storage purposes
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; 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
    • G10L2019/0001Codebooks
    • G10L2019/0013Codebook search algorithms

Abstract

Un método para búsqueda de forma de Cuantificador de Vector en Pirámide, PVQ, realizada por un codificador, el PVQ que toma un vector objetivo x como vector de entrada y que deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior, el método que se caracteriza por: antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad: determinar (203) en base a un valor absoluto máximo, xabSmax, del vector de entrada, x, un posible cambio ascendente, en una palabra de bit, de un valor de correlación dentro del bucle acumulado del siguiente bucle de búsqueda de dimensión interior, corrxy, entre el vector de entrada x y el vector y

Description

DESCRIPCIÓN
Búsqueda de forma de cuantificador de vector en pirámide
Campo de la invención
La descripción en la presente memoria se refiere a cuantificación de vector (VQ) realizada por un codificador.
Antecedentes
Es conocido que la cuantificación de vector sin restricciones es el método de cuantificación óptimo para muestras agrupadas, es decir, vectores, de una cierta longitud. No obstante, la implementación de cuantificación de vector sin restricciones implica altos requisitos en términos de complejidad y capacidad de memoria. Un deseo de permitir implementación de cuantificación de vector también en situaciones con restricciones de memoria y complejidad de búsqueda, ha conducido al desarrollo de los llamados cuantificadores de vector estructurados. Diferentes estructuras dan diferentes compromisos en términos de requisitos de complejidad de búsqueda y memoria. Un método tal es la llamada cuantificación de vector de ganancia-forma, donde el vector objetivo t se representa usando un vector de forma x y un valor de ganancia G:
t
X = — (Ec. 0)
g
El concepto de cuantificación de vector de ganancia-forma es para cuantificar el par {x, G} en lugar de cuantificar directamente el vector objetivo t. Los componentes de la ganancia (G) y la forma (x) se codifican usando un cuantificador de forma que se sintoniza para la entrada de forma normalizada y un cuantificador de ganancia que maneja la dinámica de la señal. Esta estructura de ganancia-forma se usa frecuentemente en codificación de audio dado que la división en dinámica y forma, también denotada estructura fina, se ajusta bien con el modelo de auditoría perceptiva. El concepto de ganancia-forma también se puede aplicar a coeficientes de Transformada Coseno Discreta u otros coeficientes usados en codificación de vídeo.
Muchos códec de habla y audio tales como G.718 de la ITU-T y Opus (RFC 6716) del IETF usan una VQ de ganancia-forma basada en una PVQ estructurada a fin de codificar los coeficientes espectrales de la señal de habla/audio objetivo.
El concepto de codificación PVQ se introdujo por R. Fischer en el periodo de tiempo 1983-1986 y ha evolucionado a un uso práctico desde entonces con la llegada de Procesadores de Señal Digital, DSP, más eficientes. El concepto de codificación PVQ implica la búsqueda de localización y luego codificación de un punto en una hiperpirámide N-dimensional con la norma L1 de entero de K pulsos unidad. La denominada norma L1 es la suma de los valores absolutos del vector, es decir, la suma absoluta del vector de PVQ entero con signo se restringe a ser exactamente K, donde un pulso unidad se representa por un valor entero de “1”. Un entero con signo es capaz de representar enteros negativos, en relación a sin signo que solamente pueden representar enteros no negativos.
Uno de los beneficios de interés con el planteamiento de codificación PVQ estructurada a diferencia de muchas otras VQ estructuradas es que no hay límite inherente con respecto a la dimensión N, de manera que los métodos desarrollados para codificación PVQ deberían ser aplicables a cualquier dimensión N y a cualquier valor K.
Un problema con la cuantificación de forma PVQ estructurada es encontrar el mejor vector cuantificado posible usando una cantidad razonable de complejidad. Para codificación de habla y audio de tasa más alta, cuando el número de pulsos unidad permitido K, pueda llegar a ser muy alto y la dimensión N también pueda ser alta, hay demandas incluso más fuertes de tener una búsqueda de PVQ eficiente, al tiempo que se mantiene la calidad, por ejemplo, en términos de Relación Señal a Ruido, SNR, del habla/audio reconstruido.
Además, el uso del concepto PVQ no está restringido al área de codificación de habla y audio. Actualmente, el denominado Grupo de Trabajo de Ingeniería de Internet, IETF, está persiguiendo el desarrollo de un códec de vídeo donde los coeficientes de Transformada Coseno Discreta, DCT, se codifican usando un algoritmo basado en PVQ. En codificación de vídeo es incluso más importante que en codificación de audio tener un procedimiento de búsqueda eficiente, ya que el número de coeficientes puede llegar a ser muy grande con visualizadores grandes. Una manera de realizar una cuantificación de vector en pirámide de la forma se describe en la sección 3.2 de Valin et al. “A full-bandwidth audio codec with low complexity and very low delay”, EUSIPCO, 2009.
Compendio
Para una PVQ estructurada se desea permitir una búsqueda computacionalmente eficiente que aún proporcione una relación Señal a Ruido alta. Especialmente para implementaciones que implican un DSP de precisión fija. La solución proporcionada en la presente memoria permite una búsqueda de forma de PVQ computacionalmente eficiente, proporcionando una búsqueda fina de PVQ mejorada.
Según un primer aspecto, se proporciona un método para búsqueda de forma de PVQ, a ser realizada por un codificador. La PVQ toma un vector objetivo x como vector de entrada y deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior. El método proporcionado comprende, antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad: determinar en base a un valor absoluto máximo, xabSmax, del vector de entrada, x, un posible cambio ascendente, en una palabra de bit, de un valor de correlación dentro del bucle acumulado del siguiente bucle de búsqueda de dimensión interior, corrxy, entre el vector de entrada x y el vector y.
Según un segundo aspecto, se proporciona un codificador, para búsqueda de forma de PVQ. La PVQ toma un vector objetivo x como vector de entrada y deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior. El codificador se configura para, antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad: determinar, en base a un valor absoluto máximo, xabSmax, del vector de entrada, x, un posible cambio ascendente, en una palabra de bit, del valor de correlación dentro del bucle acumulado del siguiente bucle de búsqueda de dimensión interior, corrxy, entre el vector de entrada x y el vector y. El método puede comprender y el codificador se puede configurar para, antes de entrar en el siguiente bucle de dimensión interior para adición de pulso unidad: determinar en base a una amplitud de pulso máxima, maxampy , del vector y actual, si se necesita más de una longitud de palabra de bit actual para representar, de una manera sin pérdidas, una variable, enloopy , relacionada con una energía acumulada de y, en el siguiente bucle de búsqueda de dimensión interior.
El método puede comprender y el codificador se puede configurar para, cuando se necesita más de la longitud de palabra de bit actual para representar enloopy , realizar los cálculos de bucle interior usando una longitud de palabra de bit más larga para representar enloopy .
El método puede comprender y el codificador se puede configurar para, cuando se necesita más de la longitud de palabra de bit actual para representar enloopy , realizar los cálculos de bucle interior usando una longitud de palabra de bit más larga para representar un valor de correlación dentro del bucle acumulada cuadrada, corrxy2, entre x y el vector y, en el bucle interior.
El método puede comprender además y el codificador se puede configurar para, cuando no se necesita más de la longitud de palabra de bit actual para representar enloopy :
- realizar los cálculos de bucle interior empleando un primer bucle de adición de pulso unidad usando una primera longitud de palabra de bit para representar enloopy y:
cuando se necesita más la una longitud de palabra de bit actual para representar enloopy :
- realizar los cálculos de bucle interior empleando un segundo bucle de adición de pulso unidad usando una longitud de palabra de bit más larga para representar enloopy que el primer bucle de adición de pulso unidad.
La determinación, basada en maxampy, de si se necesita más de la longitud de palabra de bit actual para representar enloopy puede comprender determinar las características del caso cuando, en el siguiente bucle de búsqueda de dimensión interior, el pulso unidad se añade a la posición en y que está asociada con maxampy .
El método puede comprender además y el codificador se puede configurar para, en el bucle de búsqueda de dimensión interior para adición de pulso unidad:
- determinar una posición, nbest, en y para adición de un pulso unidad evaluando una multiplicación cruzada, para cada posición n en y, de un valor de correlación y de energía para la n actual; y un valor de correlación cuadrada, BestCorrSq y uno de energía, bestEn, guardados a partir de valores previos de n; como:
corrXy2 * bestEn > BestCorrSq * enloopy
donde
n best = n ^
bestEn — enloopy ( cuancj0 corrxy2 * bestEn > BestCorrSq * enloopy BestCorrSq — corrxy)
El método también puede comprender y el codificador se puede configurar para hacer el seguimiento de maxampy cuando un valor final de K, asociado con el vector objetivo x, excede un valor umbral. Aquí el método puede comprender y el codificador se puede configurar para calcular un margen de energía, en_margin, solamente si un valor actual de K excede un valor umbral que puede ser el valor umbral mencionado en la frase precedente.
Según un tercer aspecto, se proporciona un dispositivo de comunicación, que comprende un codificador según el segundo aspecto.
Breve descripción de los dibujos
Los precedentes y otros objetos, rasgos y ventajas de la tecnología descrita en la presente memoria serán evidentes a partir de la descripción más particular de las realizaciones que se ilustran en los dibujos anexos. Los dibujos no están necesariamente a escala, en su lugar, el énfasis se pone en ilustrar los principios de la tecnología descrita en la presente memoria.
Las figuras 1-4 ilustran un método para búsqueda de forma de PVQ (búsqueda fina), según diferentes realizaciones ejemplares.
La figura 5 muestra pasos de una realización de una búsqueda de forma de PVQ (búsqueda fina), según una realización ejemplar.
La figura 6 muestra pasos de la búsqueda de forma de PVQ (búsqueda fina) de la figura 5 en más detalle, según una realización ejemplar.
La figura 7 ilustra realizaciones de una búsqueda de forma de PVQ.
La figura 8 muestra una realización de un dispositivo de comunicación equipado con un codificador EVS.
La figura 9 muestra una realización de un dispositivo de comunicación y
La figura 10 también muestra una realización de un dispositivo de comunicación.
Las figuras 11 a-c muestran un codificador según realizaciones ejemplares.
La figura 12 muestra un ejemplo de un sistema de codificación de audio de PVQ, donde al menos una parte del sistema está comprendida en un codificador y/o códec que a su vez está comprendido en un dispositivo de comunicación, tal como un teléfono móvil.
Descripción detallada
En aritmética de punto flotante no hay ningún problema importante relacionado con establecer la dinámica de parámetros de iteración de búsqueda de forma de PVQ de bucle interior, no obstante en los DSP de precisión fija por ejemplo con acumuladores (un registro en el que se almacenan resultados aritméticos y/o lógicos intermedios) y variables limitados de 16/32 bits, es muy importante emplear métodos de búsqueda eficientes donde se maximiza el rango dinámico limitado de las variables de DSP y se maximiza la precisión, mientras que es capaz de usar tantas de las operaciones de DSP de rango dinámico limitado rápidas disponibles como sea posible.
El término “precisión” anterior se refiere a ser capaz de representar tantos números como sea posible, es decir, el número de bits después del punto decimal para una longitud de palabra específica. Otra forma de decirlo es que la precisión corresponde a la resolución de la representación, que se define de nuevo por el número de decimales o dígitos binarios. La razón para que la precisión en las realizaciones descritas más adelante se pueda decir que correlaciona con el número de bits después del punto decimal y no necesariamente con la longitud de palabra en sí misma es que en aritmética de punto fijo, puede haber diferentes precisiones para la misma longitud de palabra. Por ejemplo, los formatos de datos 1Q15 y 2Q14 ambos tienen longitud de palabra 16, pero el primero tiene 15 bits después del punto decimal y el otro 14 bits. El menor número representable sería entonces 2A-15 y 2A-14 respectivamente.
Una manera de realizar cuantificación de vector en pirámide de la forma se describe en la sección 3.2 de Valin et al., “A full-bandwidth audio codec with low complexity and very low delay”, EUSIPCO, 2009. En este documento se presenta un códec MDCT donde los detalles, es decir, la forma, en cada banda se cuantifican algebraicamente usando un libro de códigos esférico y donde la asignación de bits se infiere a partir de información compartida entre el codificador y el decodificador. Aspectos y realizaciones de la descripción de esta solicitud al menos se refieren aproximadamente a cómo hacer una búsqueda según las Ecuaciones 4-7 en Valin et al., de una forma eficiente en punto fijo limitado a, por ejemplo, aritmética de 16/32 bits en lugar de valores flotantes como en Valin et. al.
En algunos aspectos y realizaciones descritas en lo sucesivo, dado un vector objetivo x(n) (t en la Ecuación 0) de cierta dimensión N y dado un cierto número de pulsos unidad K, se analiza la forma y se determina un vector de reconstrucción adecuado xq(n)=func(y)n)), que minimiza el error de cuantificación de forma y de esta manera maximiza una calidad percibida por ejemplo en caso de codificación de audio. Al menos algunos de los aspectos y realizaciones se implementan para aspirar al hallazgo de la constelación óptima de K pulsos unidad, en un vector y(n) que necesita adherirse a la norma L1, mientras que mantiene la complejidad bajo control, es decir, tan baja como sea posible en la práctica.
En lugar de usar los métodos de bucle abierto de la técnica anterior para determinar valores aproximados para el rango dinámico de bucle interior y precisión de acumulador, algunos de los aspectos y realizaciones se diseñan para usar un coste bajo, en términos de ciclos del DSP necesarios y en términos de Memoria Sólo de Lectura (ROM) de Programa adicional necesaria, análisis previo “casi óptimo” del numerador de peor caso y/o del denominador de peor caso antes de comenzar las evaluaciones costosas del cociente de distorsión de forma de PVQ en el bucle de búsqueda más interior. El análisis previo “casi óptimo” no se dirige a escalar los valores al rango dinámico máximo óptimo exacto, sino que en su lugar el análisis previo determina la potencia casi óptima de factor de 2 escalas, ya que la potencia de 2 escalas se puede implementar como cambios de un número binario y tales cambios tienen un bajo coste en ciclos del DSP y en ROM del DSP.
La selección de precisión del denominador se motiva perceptualmente como regiones con picos espectralmente que se asignarán con más precisión que regiones más planas.
Aunque algunos de los conceptos principales descritos en la descripción cubren diversas modificaciones y construcciones alternativas, las realizaciones de los aspectos se muestran en los dibujos y código ejemplar y se describirán en detalle en lo sucesivo.
Introducción de optimización general de búsqueda de PVQ
Un cuantificador de PVQ estructurado de norma L1 permite varias optimizaciones de búsqueda, donde una optimización primaria es mover el objetivo al “cuadrante” todo positivo (también se podría denotar ortante o hiperoctante) en un espacio N dimensional y una segunda optimización es usar una proyección de norma L1 como una aproximación de inicio para y(n). Una norma L1 de K para una PVQ(N,K) significa que la suma absoluta de todos los elementos en el vector de PVQ y(n) tiene que ser K, justo como la suma absoluta de todos los elementos en el vector de forma objetivo x(n).
Una tercera optimización es actualizar iterativamente los términos del cociente Qpvq de corrxy2 y energyy , en lugar de volver a calcular la Ec. 4 (de más adelante) sobre el espacio de vector entero N para cada cambio candidato al vector y(n) en la búsqueda de alcanzar el K de norma L1, que se requiere para el paso de indexación posterior. Los tres pasos de optimización principales anteriores son optimizaciones que pueden existir generalmente en implementaciones de PVQ pasadas tales como CELT e IETF-Opus y parcialmente en la G.718, no obstante para la exhaustividad de la descripción de los aspectos y las realizaciones, estos pasos se perfilan también brevemente más adelante.
Búsqueda de forma del vector PVQ eficiente
Una descripción general de un sistema de codificación y decodificación de audio que aplica una realización de la búsqueda de forma de PVQ propuesta en la presente memoria se puede ver en la Fig. 12. Una búsqueda de forma general que usa una proyección en pirámide seguida por un flujo de búsqueda (de forma) fina se puede ver por ejemplo en la figura 5. Otra realización de una parte de búsqueda fina de una búsqueda de forma se representa en la figura 6. Una búsqueda de forma de PVQ puede comprender una proyección en pirámide y una búsqueda fina. Cuando no se aplica una proyección en pirámide, la búsqueda de forma solamente comprende la búsqueda fina. Por lo tanto, “búsqueda fina” y “búsqueda de forma” se pueden usar algunas veces intercambiablemente en la presente memoria, dado que la búsqueda fina es una parte de la búsqueda de forma y cuando no hay búsqueda tosca inicial, mediante proyección en pirámide, la realización de la búsqueda de forma es incluso la misma cosa que la realización de la búsqueda fina. En otras palabras, la búsqueda fina algunas veces puede ser o constituir la búsqueda de forma y cuando se aplica proyección en pirámide, la búsqueda fina es parte de la búsqueda de forma.
Introducción a la búsqueda de PVQ
La meta del procedimiento de búsqueda de PVQ(N,K) es encontrar el vector de salida escalado y normalizado xq(n) mejor. xq(n) se define como:
Figure imgf000005_0001
(Ec. 1)
Donde y = yN,Kes un punto en la superficie de una hiperpirámide N dimensional y la norma L1 de yN,Kes K. En otras palabras, yN,K es el vector de código de forma de entero seleccionado de tamaño N, también denotado dimensión N, según:
Figure imgf000006_0001
Es decir, el vector xqes el subvector entero normalizado de energía unidad yN,K. El vector y mejor es el que minimiza el error de forma cuadrático medio entre el vector objetivo x(n) y el vector de salida cuantificado normalizado escalado xq. Esto se logra minimizando la siguiente distorsión de búsqueda:
Figure imgf000006_0002
O de manera equivalente, elevando al cuadrado el numerador y denominador, maximizando el cociente Qpvq:
Figure imgf000006_0003
donde corrxy es la correlación entre x e y. En la búsqueda de la forma de vector de PVQ óptima y(n) con norma L1 de K, las actualizaciones iterativas de las variables de Qpvq se hacen en el “cuadrante” todo positivo en un espacio N dimensional según:
corr YV (ky n) - corrY 'V (k - 1) 1 * x(n 7 ) (Ec. 5)
energyy ( k,n ) = energyy (k - 1) 2 • l 2 y(k - 1, n) + 12
(Ec. 6)
donde corrxy(k-l) significa la correlación lograda hasta ahora colocando k-1 pulsos unidad previos y energyy(k-l) significa la energía acumulada lograda hasta ahora colocando k-1 pulsos unidad e y(k-1, n) significa la amplitud de y en la posición n a partir de la colocación previa de k-1 pulsos unidad. Para acelerar aún más el procesamiento iterativo dentro del bucle el término de energía energyy(k) se reduce a 2, eliminando de esta manera una multiplicación en el bucle interior.
Figure imgf000006_0004
donde enloopy(k,n) es la variable de energía preferida usada y acumulada dentro del bucle de búsqueda de pulso unidad más interior, ya que su actualización iterativa requiere una multiplicación menor que energyy(k,n).
Figure imgf000006_0005
La posición mejor nbest para el pulso unidad de orden k, se actualiza iterativamente aumentando n desde 0 a N-1: nbest ~ n > si Q p VQ ,«) > Q p v o ik ,n best)
(Ec. 9)
Para evitar divisiones costosas, lo cual es especialmente importante en aritmética de punto fijo, la decisión de actualización de maximización de Qpvq se realiza usando una multiplicación cruzada del numerador de correlación cuadrada mejor bestCorrSq guardado y el denominador de energía mejor bestEn guardado hasta ahora, que se podría expresar como:
Figure imgf000007_0001
La maximización iterativa de QpvQ(k,n) puede comenzar a partir de un número cero de pulsos unidad colocados o a partir de un número de colocación previa de coste menor adaptativo de pulsos unidad, en base a una proyección entera a un punto por debajo de la superficie de la pirámide de orden K, con un subimpulso garantizado de pulsos unidad en la norma L1 objetivo K.
Análisis de preparación de búsqueda de PVQ
Debido a la naturaleza estructurada del vector entero de PVQ yN,K, donde se permiten todas las combinaciones de signos posibles y es posible codificar todas las combinaciones de signos, siempre que el vector resultante se adhiera a la norma L1 de K pulsos unidad, la búsqueda se realiza en el primer “cuadrante” todo positivo (la razón para las comillas en “cuadrante” es que un cuadrante verdadero solamente existe cuando N=2 y N puede ser aquí más de 2). Además, como se ha dado cuenta el inventor, para lograr tan alta precisión como sea posible para una implementación de precisión limitada, el valor absoluto máximo xabsmax de la señal de entrada x(n) se puede analizar previamente para uso futuro en la configuración del procedimiento de acumulación de correlación de bucle interior.
Figure imgf000007_0002
Manejo de objetivos de energía muy baja y subvectores de energía muy baja
En caso de que el vector objetivo de entrada (x en la Ec. 3 o t en la Ec. 0) sea un vector todo ceros y/o la ganancia del vector (por ejemplo, G en la Ec. 0) sea muy baja, la búsqueda de PVQ se puede dejar de lado y un vector y de PVQ válido se puede crear de manera determinística asignando la mitad de los K pulsos unidad a la primera
Figure imgf000007_0003
posición (y[oi = [f j)
y los pulsos unidad restantes a la última posición
El término “objetivos de energía muy baja” y “ganancia de vector muy baja” es una realización tan baja como cero, que se ilustra en el código ANSI C ejemplar descrito más adelante, donde el código correspondiente es:
IF{ L_xsum == 0 || neg qain == 0 )
{ /* caso de entrada cero o ganancia cero */
No obstante, también puede ser menor o igual que épsilon o EPS, donde EPS es el valor más bajo que es mayor que cero y que se considera como que es digno de que se represente en una precisión seleccionada. Por ejemplo, en una precisión Q15 en una palabra de 16 bits con signo, la ganancia de subvector llega a ser menor o igual que EPS 1/2a15= 1/32.768 (por ejemplo, una ganancia de vector menor o igual que 0,000030517578125) y en caso de precisión Q12 en una palabra de 16 bits con signo para el vector objetivo x(n), entonces el valor “muy bajo” llega a ser EPS = (1/2A12), por ejemplo sum(abs(x(n))) menor o igual que 0,000244140625. En una realización de aritmética de DSP de punto fijo con palabra de 16 bits, un formato de entero sin signo puede tomar cualquier valor entero desde 0 a 65.546, en donde un entero con signo puede tomar el valor de -32.768 a 32.767. Usando un formato de fracción sin signo, los 565.536 niveles se extienden uniformemente entre 0 y 1, mientras que en una realización de formato de fracción con signo los niveles se separarían por igual entre -1 y 1.
Aplicando este paso opcional relacionado con vectores cero y valores de ganancia baja, se reduce la complejidad de búsqueda de PVQ y la complejidad de indexación se extiende/comparte entre el codificador que indexa y decodificador que desindexa, es decir, no se “gasta” ningún procesamiento para buscar un vector objetivo cero o un vector objetivo muy bajo que se podría reducir de cualquier forma a cero.
Proyección de búsqueda previa de PVQ opcional
Si la relación de densidad de pulso K/N es mayor que 0,5 pulsos unidad por coeficiente, por ejemplo coeficiente de transformada coseno discreta modificada, se hace una proyección de bajo coste a la subpirámide K-1 y se usa como un punto de inicio para y. Por otra parte, si la relación de densidad de pulso es menor que 0,5 pulsos unidad por coeficiente, la búsqueda de PVQ iterativa comenzará desde 0 pulsos unidad colocados previamente. La proyección de bajo coste a “K-1” es típicamente menos cara computacionalmente en ciclos del DSP que repetir la búsqueda de bucle interior de pulso unidad K-1 veces. No obstante, un inconveniente de la proyección de bajo coste es que producirá un resultado inexacto debido a la aplicación de la función suelo N dimensional. La norma L1 resultante de la proyección de bajo coste que usa la función suelo típicamente puede ser cualquiera entre “K-1" a aproximadamente “K-5”, es decir, el resultado después de la proyección necesita ser buscado de manera fina para alcanzar la norma objetivo de K.
La proyección de bajo coste se realiza como:
Figure imgf000008_0001
Si no se hace ninguna proyección, el punto de inicio es un vector y(n) todo de ceros. El coste del DSP de la proyección en ciclos del DSP está en los alrededores de N(suma absoluta)+25(la división)+2N(multiplicación y suelo) ciclos.
En la preparación de la búsqueda fina para alcanzar la superficie de la pirámide de orden K el número acumulado de pulsos unidad pulsetot, la correlación acumulada corrxy(pulsetot) y la energía acumulada energyy(pulsetot) para el punto de inicio se calculan como:
Figure imgf000008_0002
n = N - 1
corrxy (pulse tot) = ^ y(n) xabs(n)
« = 0 (Ec. 16)
Figure imgf000008_0003
e n l o o f y ( p u l s q o t) = e n e r g x [ , ( p u l s q o í ) ! 2
(Ec. 18)
Búsqueda fina de PVQ
La solución descrita en la presente memoria se relaciona con la búsqueda fina de PVQ (que constituye o es parte de la búsqueda de forma de PVQ, como se describió previamente). Lo que se ha descrito en las secciones precedentes es principalmente la PVQ de la técnica anterior, excepto para la determinación por adelantado de xabsmax, que se describirá además más adelante. El vector de forma entero final y(n) de dimensión N debe adherirse a la norma L1 de K pulsos. La búsqueda fina se supone que está configurada para comenzar desde un punto más bajo en la pirámide, es decir por debajo de la pirámide de orden K y encontrar iterativamente su forma para la superficie de la hiperpirámide de orden K N dimensional. El valor K en la búsqueda fina puede oscilar típicamente de 1 a 512 pulsos unidad.
El inventor se ha dado cuenta, que a fin de mantener la complejidad de la búsqueda e indexación de PVQ a un nivel razonable, la búsqueda se puede dividir en dos ramales principales, donde un ramal se usa cuando se conoce que la representación de energía dentro del bucle de y(n) permanecerá dentro de una palabra de 16 bits con signo o sin signo durante una siguiente iteración de bucle de búsqueda interior y otro ramal se usa cuando la energía dentro del bucle puede exceder el rango dinámico de una palabra de 16 bits durante una siguiente iteración de bucle de búsqueda interior.
Búsqueda fina de precisión fija para un número bajo de pulsos unidad
Cuando el K final es menor o igual que un umbral de tp=127 pulsos unidad, la dinámica de la energyy(K) siempre permanecerá dentro de 14 bits y la dinámica del cambio ascendente de 1 bit enloopy(K) siempre permanecerá dentro de 15 bits. Esto permite el uso de una palabra de 16 bits con signo para representar cada enloopy(k) dentro de todas las iteraciones de bucle interior de búsqueda de pulso fina hasta k=K. En otras palabras, no habrá necesidad de una longitud de bit de palabra que exceda 16 bits para representar energyy(K) o enloopy(K) en cualquier iteración de bucle interior de búsqueda de pulso fina cuando K<127.
En el caso de la disponibilidad de los operadores eficientes Multiply, MultiplyAdd(multiplicar-sumar) y MutiplySubstract (multiplicar-restar) de DSP para variables de 16 bits sin signo, el umbral se puede aumentar a tp = 255, ya que entonces enloopy(K) permanecerá siempre dentro de una palabra de 16 bits sin signo. MultiplyAdd es aquí en una realización instrucciones multiplicar-sumar u operaciones equivalentes para multiplicar valores de datos que representan señales de audio y vídeo por valores de filtro o transformación y acumular los productos para reproducir un resultado. Las operaciones MultiplySubstract son las mismas que las operaciones MultiplyAdd, excepto que las sumas se sustituyen por restas.
En la preparación de la siguiente adición de pulso unidad, el cambio ascendente máximo posible casi óptimo del valor de correlación dentro del bucle acumulado del siguiente bucle, corrxy, en una palabra de 32 bits con signo se analiza previamente usando el valor de entrada máximo absoluto calculado previamente xabs max como:
corrupshift = 31 - [log2 ( corrxy(pulsetot) 2 ■ (1 ■ xabsmax)j | (Ec. 19)
El cambio ascendente calculado en la Ec. 19 representa el “peor caso” y cubre el cambio ascendente máximo posible que se puede hacer en el siguiente bucle interior y de esta manera asegura que la información más significativa relacionada con correlación no se perderá o desplazará hacia fuera, durante la interacción de bucle interior, incluso para el escenario del peor caso.
Este análisis dinámico de bucle interior previo de peor caso se puede realizar en 2-3 ciclos en la mayoría de las arquitecturas de DSP usando instrucciones MultiplyAdd y Norm (normalización) y el análisis es siempre el mismo independiente de la dimensión N. En un DSP de 16/32 bits virtual de la G.191 de la ITU-T las operaciones en la Ec.
19 llegan a ser: “corr_upshift = norm_l(L_mac(*L_corrxy,1, xabs_max));” con un coste de 2 ciclos. Se debería señalar que norm_l(x) aquí corresponde a “31 - ceil(log2(x))” y se podría denotar alternativamente 31 - ceil(log2(x)), donde ceil(x) es la denominada función techo, que correlaciona un número real al entero siguiente más pequeño. Con más precisión, ceiling(x)= es el entero más pequeño no menor que x. Para corrupshift el término dentro de los corchetes con la barra horizontal superior es siempre un número positivo. La corrupshift se podría calcular alternativamente usando una función suelo como:
Figure imgf000009_0001
donde floor(x) = _ x j es el entero más grande no mayor que x.
Otro beneficio del planteamiento sugerido en la presente memoria para escalado de correlación de búsqueda de forma casi óptima es que el método propuesto no requiere un vector objetivo normalizado previamente x, lo cual ahorrará alguna complejidad adicional antes de comenzar la búsqueda de forma.
Para hacer la actualización de la Ec. 10 iterativa tan eficiente como sea posible, el numerador corrxy(k,n)2 se puede representar por una palabra con signo de 16 bits, incluso cuando se comprende más información que encaja en una palabra de 16 bits, mediante el siguiente planteamiento.
Figure imgf000010_0001
donde la función “Round16” extrae los 16 bits superiores de una variable de 32 bits con signo con redondeo. El cambio ascendente casi óptimo (Ec. 10) y el uso de una representación de 16 bits de la correlación cuadrada bestCorrSqi6 permite una búsqueda de bucle interior muy rápida usando solamente ~9 ciclos para realizar la prueba de la Ec. 21 y las tres actualizaciones variables, cuando se usan unas funciones Multiply, MultiplyAdd, MultiplySubstract optimizadas de los DSP.
La ubicación del siguiente pulso unidad en el vector y se determina ahora iterando sobre las n=0,..., N-1 posiciones posibles en el vector y, mientras que se emplean las ecuaciones Ec. 20, Ec. 6 y Ec. 21.
Cuando se ha determinado la posición mejor nbest para el pulso unidad (en el vector y logrado hasta ahora), se actualizan la correlación acumulada corrxy(k), la energía dentro del bucle acumulada enloopy(k) y el número de pulsos unidad acumulados pulsetot.
Si hay pulsos unidad adicionales para añadir, es decir, cuando pulsetot < K, un nuevo bucle interior se inicia con un nuevo análisis corrupshift casi óptimo (Ec. 19) para la adición de un siguiente pulso unidad.
En total, este planteamiento sugerido tiene una complejidad de peor caso para cada pulso unidad añadido a y(n) de aproximadamente 5/N+15 ciclos por coeficiente cuantificado. En otras palabras, un bucle sobre un vector de tamaño N para añadir un pulso unidad tiene una complejidad de peor caso de alrededor de N*(5/N+15) ciclos, es decir, 5+15*N ciclos.
Búsqueda fina de precisión fija para un número alto de pulsos unidad
Cuando K es mayor que un umbral tp, el cual en esta realización ejemplar que supone un DSP restringido de 16/32 bits, es tp=127 pulsos unidad, la dinámica del parámetro energyy(K) puede exceder 14 bits y la dinámica del cambio ascendente de 1 bit enloopy(K) puede exceder 15 bits. De esta manera, a fin de no usar precisión innecesariamente alta, la búsqueda fina se configura para elegir adaptativamente entre representación de 16 bits y representación de 32 bits del par {corrxy(k,n)2, enloopy(k,n)} cuando K es mayor que tp. Cuando K para el vector y(n) se conoce que termina en un valor final mayor que 127 por adelantado, la búsqueda fina hará el seguimiento de la amplitud de pulso máxima maxampy en y lograda hasta ahora. Esto también se puede conocer a medida que se determina esa maxampy. Esta información de amplitud de pulso máxima se usa en un paso de análisis previo antes de entrar en el bucle de dimensión interior optimizado. El análisis previo comprende la determinación de qué precisión se debería usar para el bucle interior de adición de pulso unidad próximo. Como se muestra en la figura 12 mediante la entrada de N, K para la búsqueda de forma de PVQ, la asignación de bits se conoce/determina antes de que se inicie la búsqueda de PVQ. La asignación de bit puede usar fórmulas o almacenar tablas para obtener, determinar y/o calcular el K a ser introducido a la búsqueda de forma de PVQ, por ejemplo, K= function(bits(band),N) para una cierta banda con la dimensión N y un cierto número de bits(banda).
Figure imgf000010_0002
Por ejemplo, una tabla almacenada como la mostrada anteriormente se puede usar para determinar o seleccionar un valor de K. Si la dimensión N es 8 y los bits disponibles para la banda bits(band) es 14,0, entonces K se seleccionará para ser 5, ya que PVQ(N=8,K=6) requiere 14,7211 bits lo cual es mayor que el número de bits disponibles 14,0.
Si el análisis previo indica que se necesita más de una palabra de 16 bits con signo para representar la energía dentro del bucle sin perder ninguna información de energía, se emplea un bucle de adición de pulso unidad de precisión más alta y precisión alta computacionalmente más intensiva, donde tanto el termino de correlación cuadrada mejor guardado como el término de energía acumulada mejor guardado se representan por palabras de 32 bits.
e n m a rg in = 31 - |)og2 ^ 1 energyy (pulsetot) + 2 ■ ( l ■ m axam pj,)^ |
(Ec. 22)
highprecisionactive = falsa , i e n m arg ín — ^ )
highprecisionactive - verdadera, s/ {enm arg /í; < 16 )
* (Ec. 23)
El análisis dinámico de bucle interior previo de peor caso se puede realizar en 5-6 ciclos adicionales en la mayoría de los DSP y el coste del análisis es el mismo para todas las dimensiones. En un DSP de 16/32 bits virtual de STL 2009 de la G.191 de la ITU-T las operaciones en la Ec. 22 y Ec. 23 llegan a ser:
"L_energy_y = L_add(L_energy_y, 1); /* añadido 0,5 */
en_margin = norm_l(L_mac(L_energy_y, 1, maxamp_y));
highprecision_active= 1; move16();
if(sub(16,en_margin <= 0){
highprecision_active = 0; move16();
}”,
con un coste de máximo 6 ciclos.
El código correspondiente en un ejemplo de código ANSI-C más adelante es:
L_yy =L_add(L_yy,1); /* añadido 0,5 */
en_margin =norm_l(L_mac(L_yy,1, max_amp_y)); /* buscar “adición” máxima, margen, ~2 ops.*/ en_dn_shift=sub(16, en_margin); /* calc. cambio a palabra inferior */
high_prec_active = 1; move16();
if( en_dn_shift <=0){ /* usar solamente energía de 32 bits si se necesita realmente */
high_prec_active = 0; move16();
}
Alternativamente el margen de energía en_margin en la Ec.(22) se podría calcular en línea con una operación de la función STL de la G.191 norm_I() usando la función suelo como:
Figure imgf000011_0001
Si highprecisionactive es FALSA, es decir, =0, se emplea el bucle de búsqueda interior de menor precisión en la Ec.
20, Ec. 6 y Ec. 21, por otra parte, cuando highprecisionactive es VERDADERA, es decir, =1, la ubicación del siguiente pulso unidad se realiza empleando un bucle interior de mayor precisión, que representa enloopy y corrxy2 con palabras de 32 bits en este ejemplo. Es decir, cuando highprecisionactive es VERDADERA, la ubicación del siguiente pulso unidad en y(n) se determina iterando sobre n=0,..., N-1 posiciones posibles, usando las ecuaciones Ec. 24, Ec. 6 y Ec. 25.
Figure imgf000012_0001
En otras palabras, en_margin es indicativo de cuántos cambios ascendentes se pueden usar para normalizar la energía en el siguiente bucle. Si se pueden usar 16 o más cambios ascendentes, entonces la energía permanece en la longitud de palabra inferior, suponiendo longitudes de palabra de 16/32 bits y no hay necesidad del bucle de precisión alta (representación de 32 bits), así highprecisionactive se fija a FALSA. Una razón de implementación para hacerlo de esta manera (permitiendo que la información de energía permanezca en la parte baja de la palabra de 32 bits L_energy) es que es computacionalmente más barato: cuesta solamente 1 ciclo calcular extract_I(L_energy) mientras que un round_fx(L_shI(L_energy,en_margin)) alternativo lleva dos ciclos.
Cuando se ha determinado la posición mejor nbest del pulso unidad, la correlación acumulada corrxy (k), se actualizan la energía dentro del bucle acumulada enloopy (k) y el número de pulsos unidad acumulados pulsetot. Además la amplitud máxima maxampy en el mejor vector y entero hasta ahora, se mantiene actualizada, es decir, determinada, para el siguiente bucle de adición de pulso unidad.
m axam py - m ax [m axam pv , y\tit>est ])
(Ec. 26)
Si además hay pulsos unidad a añadir, es decir, cuando pulsetot < K, se inicia un nuevo bucle interior con un nuevo análisis corrupshm casi óptimo Ec. 19 y un nuevo análisis de precisión de energía Ec. 22 y Ec. 23 y entonces se comienza el siguiente bucle de pulso unidad con las ecuaciones Ec. 24, Ec. 6 y Ec. 26.
La complejidad del peor caso del planteamiento de alta precisión (en este ejemplo palabras de 32 bits) para cada pulso unidad añadido a y(n) es aproximadamente de 7/N+31 ciclos por coeficiente cuantificado.
El efecto de la selección de precisión de bucle interior basada en energía acumulada dentro del bucle es que los subvectores objetivo que tienen unos picos altos o tienen una granularidad muy fina, es decir, el K final es alto, estarán usando el bucle de precisión más alta y más ciclos más a menudo, mientras que los subvectores sin picos o de granularidad de pulsos baja usarán más a menudo el bucle de precisión menor y menos ciclos.
Se debería señalar que el análisis descrito en la sección anterior se podría realizar también cuando K<tp. No obstante, se puede hacer una realización más eficiente mediante la introducción de un umbral tp para aplicar el análisis anterior.
Finalización y normalización del vector de PVQ
Después de la búsqueda de forma, se asigna a cada elemento de vector de PVQ no cero su signo adecuado y el vector se normaliza L2 (también conocida como normalización Euclidiana) a energía unidad. Adicionalmente, si la banda se dividió, se escala además con una ganancia de subvector.
í f {y(«) > 0 )n (xO ) < 0)=> y(«) = -yO),para n = 0,...,N - 1
(Ec. 27)
Figure imgf000012_0002
Anteriormente, se presentaron y especificaron dos metodologías de precisión:
“En16 x CorrSq16”, como se define en la sección anterior, (ecuaciones 19 hasta 21) y
“En32 x CorrSq32”, (ecuaciones 22 hasta 26). Se describen más adelante dos métodos adicionales de complejidad media donde se varían la precisión del término de numerador Correlación Cuadrada y el término Energía.
Métodos “En16 x CorrSq32” y “En32 x CorrSq16”
El método “En16x CorrSq32” es similar al “En32x CorrSq32”, pero con la diferencia de que la actualización de pulso unidad mejor encontrada del bucle interior y la comparación usa una representación de 16 bits de la Energía mejor bestEni6 hasta ahora, según:
Figure imgf000013_0001
El coste aproximado del método “En16 x CorrSq32” por pulso unidad es 5/N 21 ciclos.
El método “En32 x CorrSq16” es similar al “En32 x CorrSq32”, pero con la diferencia de que la actualización de pulso unidad mejor encontrada del bucle interior y la comparación usa una representación de 16 bits de la correlación cuadrada mejor bestCorrSqm hasta ahora, según:
^ best ~ n
bestCorrSq j^ - corrxvy(,(k, n)~ , si corrxy\6 (k, n) ■ bestEn 32 > bestCorrSq 16 * enloop v(k,n) bestEn 32 = enloop (k ,n)
(Ec. 31)
El coste aproximado del método “En32 x CorrSq16” por adición de pulso unidad es 6/N 20 ciclos por coeficiente. Aspectos y realizaciones ejemplares
Más adelante, se describirán con referencia a las figuras 1-4 algunas realizaciones ejemplares de la solución descrita en la presente memoria.
La figura 1 es un diagrama de flujo que ilustra un método que concierne a una búsqueda fina de búsqueda de forma de PVQ. El método pretende que sea realizado por un codificador, tal como el codificador de medios para señales de audio y/o vídeo. El PVQ toma un vector de forma objetivo x como entrada y deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior. El método se refiere a un análisis previo, que se hace antes de entrar en el bucle interior. Un vector de salida xq entonces se derivará en base al vector y, como se describió previamente. No obstante, la formación de xq no es central para la solución descrita en la presente memoria y por lo tanto no se describirá aún más aquí.
En el método ilustrado en la figura 1, se puede suponer que el codificador hace el seguimiento de un valor maxampy de un vector y actual. Por “vector y actual” se entiende aquí el vector y compuesto, encontrado o construido hasta ahora, es decir para un k < K. Como se describió previamente, un punto de inicio para el vector y puede ser una proyección a una superficie por debajo de la pirámide de orden K o un vector de todo ceros vacío. El método ilustrado en la figura 1 comprende, antes de entrar en un próximo bucle de búsqueda de dimensión interior para adición de pulso unidad, determinar 101, en base a la amplitud de pulso máxima, maxampy, de un vector y actual, si se necesita más de una longitud de palabra de bit actual para representar enloopy, de una manera sin pérdida en el bucle de dimensión interior próximo. La variable enloopy se refiere a una energía acumulada del vector y. La realización de este método permite al codificador mantener la complejidad de la búsqueda en un nivel razonable. Por ejemplo, permite al codificador aplicar un bucle de precisión aumentada (que implica una complejidad más alta) solamente cuando se pueda necesitar, analizando si el “escenario del peor caso” en el bucle interior próximo requeriría un bucle interior con una precisión más alta que la usada actualmente.
El análisis previo descrito anteriormente se realiza antes de cada entrada 102 al bucle interior, es decir, antes de cada adición de un pulso unidad al vector y. En una realización ejemplar donde solamente están disponibles dos representaciones de bit diferentes, es decir, longitudes de palabra de bit tales como 16 y 32 bits, el bucle interior se realizará usando una representación de 16 bits de enloopy hasta que se determine que se necesita una palabra de bit más larga para representar enloopy, después de lo cual la longitud de palabra de bit más alta, es decir, la representación de 32 bits se aplicará para los cálculos de bucle interior. El bucle que usa una representación de 16 bits puede ser referido como un “bucle de precisión baja” y el bucle que usa una representación de 32 bits puede ser referido como un “bucle de precisión alta”.
La determinación 102 de si se necesita más de una longitud de palabra de bit inicial o actual se podría expresar alternativamente como que se determina que la longitud de palabra de bit, de entre al menos dos longitudes de palabra de bit diferentes, alternativas, que se requerirán para representar el “peor caso” (aumento mayor posible) enloopy durante el siguiente bucle interior. Las al menos dos longitudes de palabra de bit diferentes podrían comprender al menos por ejemplo longitudes de palabra de 16 y 32 bits.
En otras palabras, cuando se determina 102 que se necesita más de una longitud de palabra de bit actual para representar enloopy en el siguiente bucle interior, los cálculos de bucle interior se realizan 103 con una longitud de palabra de bit más larga, que una longitud de palabra de bit inicial o actual, para representar enloopy en el bucle interior. Por otra parte, cuando se determina que no se necesita más de una longitud de palabra de bit para representar enloopy, los cálculos de bucle interior se pueden realizar empleando un primer bucle de adición de pulso unidad que usa una longitud de palabra de bit primera o actual para representar enloopy, es decir, la longitud de palabra de bit actual puede seguir siendo usada. Esto se ilustra también, por ejemplo, en la figura 4, como el uso de dos bucles diferentes. La figura 4 muestra uno, un bucle interior de precisión baja, que se ejecuta 405 cuando se determina 403 que es suficiente con una longitud de palabra de bit actual (menor); y uno, un bucle interior de precisión alta, que se ejecuta cuando se determina 403 que se necesita una longitud de palabra de bit más alta para representar la energía en el bucle interior, a fin de no perder información.
El método construye sobre la realización que el aumento máximo posible de una variable energía, tal como enloopy, en un siguiente bucle interior ocurrirá cuando el pulso unidad se añada a la posición en y asociada con la maxampy actual. Habiendo realizado esto, es posible determinar, antes de entrar en el bucle interior, si hay un riesgo o no de exceder la capacidad de representación de la longitud de palabra de bit usada actualmente, por ejemplo, 16 bits, durante el siguiente bucle interior. En otras palabras, la determinación de si se necesita más de una longitud de palabra de bit actual para representar enloopy comprende determinar las características del caso cuando, en el bucle de búsqueda interior próximo, el pulso unidad se añade a la posición en y que está asociada con maxampy . Por ejemplo, el número de bits necesario para representar enloopy en el bucle interior próximo se puede determinar o, alternativamente, un margen restante en una palabra de bit que representa enloopy en el bucle interior próximo.
Para vectores de forma objetivo que están asociados con un K bajo, es posible decir por adelantado que no habrá ninguna necesidad de una longitud de palabra de bit más larga que la ofrecida por la longitud de palabra de bit usada inicial o actualmente. Por lo tanto, sería posible aplicar un valor umbral Tk, de manera que se realicen ciertas operaciones solamente para vectores de forma objetivo que están asociados con un K que excede el valor umbral Tk. Para tales vectores objetivo, el codificador hará el seguimiento de maxampy actualizando este valor después de cada adición de pulso. Para vectores objetivo asociados con un K que es menor que el valor umbral, no es necesario hacer el seguimiento de maxampy. Para el ejemplo con palabras de 16 y 32 bits, un posible Tk sería 127, como se describió previamente. En otras palabras, la realización del seguimiento de maxampy y la determinación de si se necesita más de una longitud de palabra de bit actual se realiza, por ejemplo, solamente cuando el valor final de K asociado con el vector de forma objetivo de entrada excede un valor umbral Tk.
Una realización ilustrada en la figura 2 comprende hacer el seguimiento de o determinar 201 maxampy y determinar 202 xabsmax. El valor de maxampy se puede cambiar cuando se añade un nuevo pulso unidad en el bucle interior y por lo tanto maxampy necesita ser actualizado, a fin de ser mantenido actualizado después de cada bucle. Por ejemplo, la acción 201 puede comprender hacer el seguimiento de maxampy hasta que un valor de k haya alcanzado un valor umbral donde la longitud de palabra de bit inicial o actual usada para representar enloopy puede no ser ya suficiente y se comienza el análisis representado por ejemplo por la acción 204. La actualización de maxampy después de un bucle interior que sigue al análisis de, por ejemplo, la acción 204 se ilustra como la acción 206 en la figura 2. Se debería señalar, no obstante, que xabsmax no se cambia en el proceso y, por lo tanto, solamente necesita ser determinada 202 una vez. Como se ilustra en la figura 2, una realización del método también podría comprender, antes de entrar en 205 un siguiente bucle de dimensión interior para adición de pulso unidad, determinando 203, en base a un valor absoluto máximo, xabsmax, del vector de forma de entrada, x, un cambio ascendente posible, en una palabra de bit, del valor de correlación dentro del bucle del siguiente bucle, corrxy, entre x y el vector y. El cambio ascendente también podría indicar un escalado ascendente. La ecuación 19 anterior ilustra la determinación del cambio ascendente máximo posible. Realizando esto, se puede asegurar que se mantienen tantos bits de información de correlación como sean posibles durante la evaluación de bucle interior, especialmente los más significativos. Se debería señalar aquí que el valor de correlación corrxy, en forma de corrxy2, no necesita ser representado necesariamente de una manera sin pérdidas. La determinación del cambio ascendente máximo se puede realizar en una palabra de bit “más larga”, con independencia de la longitud de palabra de bit actual usada en el bucle interior. Es decir, el cambio ascendente máximo posible se puede determinar para una palabra de 32 bits incluso cuando una palabra de 16 bits se use en el bucle interior. Cuando va a ser usada una palabra de bit más corta en el bucle interior, el cambio ascendente determinado entonces se “redondeará” a la palabra de bit más corta, como se ilustra por la Ec. 20. Señalar que el valor de correlación, corrxy, siempre es menor o igual que uno (1,0) en la precisión del DSP aplicada para el valor de correlación, es decir, corrxy<1,0 y, por lo tanto, el cambio ascendente máximo determinado para corrxy también es válido para corrxy2.
Cuando se determina que se necesita más de una longitud de palabra de bit actual para representar enloopy, los cálculos de bucle interior se pueden realizar usando una longitud de palabra de bit más larga (que la longitud de palabra de bit actual, por ejemplo, 32 en lugar de 16 bits) para representar enloopy.
En una realización, cuando se determina que se necesita más de una longitud de palabra de bit actual para representar enloopy , los cálculos de bucle interior se realizan con una longitud de palabra de bit más larga (que la longitud de palabra de bit actual), que representa también un valor de correlación dentro del bucle acumulado, corrxy2 , en el bucle interior. Esto se ilustra por ejemplo en la figura 3, en la acción 305. Es decir, una longitud de palabra de bit determinada para el valor de energía enloopy también se puede aplicar para corrxy2.
Como se mencionó previamente, se prefiere evitar realizar la división de la Ec. 8 en el bucle de búsqueda de dimensión interior para la adición de pulso unidad. Por lo tanto, se puede realizar una multiplicación cruzada, como se ilustra en la Ec. 10. Es decir, una posición nbest en y para adición de un pulso unidad, se podría determinar evaluando una multiplicación cruzada, para cada posición n en y, de un valor de correlación y de energía para la n actual; y una correlación “mejor hasta ahora”, BestCorrSq y un valor de energía “mejor hasta ahora” bestEn, guardados a partir de valores previos de n, como:
corrXy2 * bestEn > BestCorrSq * enloopy
donde
^best ^ \
bestEn = enloopy ( cuanC|o corrXy2 * bestEn > BestCorrSq * enloopy
BestCorrSq — co rra l
La posición nbest podría ser referida como una posición “mejor” en y para adición de un pulso unidad. Se debería señalar que “>” se podría usar en las expresiones anteriores en lugar de “>”. No obstante, “>”, es decir “mayor que” se puede preferir cuando se intenta mantener el coste de cálculo tan bajo como sea posible, por ejemplo, con respecto a un número de ciclos.
La realización del método según cualquiera de las realizaciones descritas anteriormente permite que esta multiplicación cruzada sea realizada de una manera eficiente (por ejemplo, no usando una precisión más alta que la necesaria realmente).
Implementaciones
Los métodos y técnicas descritas anteriormente se pueden implementar en un codificador o códec, que puede estar comprendido por ejemplo en un dispositivo de comunicación.
Codificador, figuras 11a-11c
Una realización ejemplar de un codificador se ilustra de una manera general en la figura 11a. El codificador puede ser un codificador de medios, configurado para codificación de, por ejemplo, señales de audio y/o vídeo. El codificador 1100 se configura para realizar al menos una de las realizaciones del método descritas anteriormente con referencia a cualquiera de las figuras 1-5. El codificador 1100 está asociado con los mismos rasgos técnicos, objetos y ventajas que las realizaciones del método descritas previamente. En algunas implementaciones, el codificador está asociado con restricciones con respecto a memoria y/o complejidad, tales como, por ejemplo, cuando el codificador se configura con un DSP de precisión fija. El codificador se describirá brevemente a fin de evitar una repetición necesaria.
El codificador se puede implementar y/o describir como sigue:
El codificador 1100 se configura para una Cuantificación de Vector en Pirámide, incluyendo la denominada búsqueda fina o búsqueda de forma fina, donde un Cuantificador de Vector en Pirámide, PVQ, se configura para tomar un vector objetivo x como entrada y deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior. El vector de entrada x tiene una dimensión N y una norma L1 de K. El codificador 1100 comprende circuitería de procesamiento o medios de procesamiento 1101 y una interfaz de comunicación 1102. La circuitería de procesamiento 1101 se configura para hacer al codificador 1100, antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de un pulso unidad: determinar, en base a una amplitud de pulso máxima, maxampy, de un vector y actual, si se necesita más de una longitud de palabra de bit actual para representar, de una manera sin pérdidas, una variable, enloopy, relacionada con una energía acumulada de y, en el bucle de dimensión interior próximo. La interfaz de comunicación 1102, que también se puede denotar por ejemplo interfaz de Entrada/Salida (I/O), incluye una interfaz para enviar datos a y recibir datos desde otras entidades o módulos.
La circuitería de procesamiento 1101 podría, como se ilustra en la figura 11b, comprender un medio de procesamiento, tal como un procesador 1103, por ejemplo, una CPU y una memoria 1104 para almacenar o contener las instrucciones. La memoria entonces comprendería instrucciones, por ejemplo, en forma de un programa de ordenador 1105, que cuando se ejecutan por el medio de procesamiento 1103 hacen al codificador 1100 realizar las acciones descritas anteriormente.
Una implementación alternativa de la circuitería de procesamiento 1101 se muestra en la figura 11c. La circuitería de procesamiento aquí comprende una unidad de determinación 1106, configurada para hacer al codificador 1100, antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de un pulso unidad: determinar, en base a una amplitud de pulso máxima, maxampy, de un vector y actual, si se necesita una precisión más alta que la que se permite con una longitud de palabra de bit actual para representar, de una manera sin pérdidas, una variable, enloopy, relacionada con una energía acumulada de y, en el bucle de dimensión interior próximo. La circuitería de procesamiento 1101 podría comprender más unidades, tales como una unidad de búsqueda fina 1107, configurada para hacer al codificador ejecutar un bucle de dimensión interior con una cierta longitud de palabra de bit y/o una cierta precisión.
Los codificadores descritos anteriormente se podrían configurar para las diferentes realizaciones del método descritas en la presente memoria, tales como, por ejemplo, realizar los cálculos de bucle interior usando una palabra de bit más larga que representa enloopy y posiblemente corrxy2, cuando se determina que más de una longitud de palabra de bit actual es necesaria para representar enloopy. “Más larga”, aquí se refiere a más larga que una longitud de palabra de bit actual o inicial.
El codificador 1100 se puede suponer que comprende funcionalidad adicional, para llevar a cabo funciones habituales de codificador.
El codificador descrito anteriormente puede estar comprendido en un dispositivo, tal como un dispositivo de comunicación. El dispositivo de comunicación puede ser un equipo de usuario (UE) en forma de un teléfono móvil, cámara de vídeo, grabadora de sonido, tableta, ordenador de sobremesa, ordenador portátil, receptor multimedia digital de TV o servidor doméstico/pasarela doméstica/punto de acceso doméstico/encaminador doméstico. El dispositivo de comunicación puede ser, en algunas realizaciones, un dispositivo de red de comunicaciones adaptado para codificación y/o transcodificación. Ejemplos de tales dispositivos de red de comunicaciones son servidores, tales como servidores de medios, servidores de aplicaciones, encaminadores, pasarelas y estaciones base radio. El dispositivo de comunicación también se puede adaptar para ser colocado en, es decir, que se integre en, un buque, tal como un barco, avión radiocontrolado, avión o un vehículo de carretera, tal como un coche, autobús o camión. Tal dispositivo integrado pertenecería típicamente a una unidad telemática del vehículo o sistema de información y entretenimiento del vehículo.
Los pasos, funciones, procedimientos, módulos, unidades y/o bloques descritos en la presente memoria se pueden implementar en hardware usando cualquier tecnología convencional, tal como tecnología de circuitos discretos o circuitos integrados, incluyendo tanto circuitería electrónica de propósito general como circuitería de aplicaciones específicas.
Ejemplos particulares incluyen uno o más procesadores de señal digital configurados adecuadamente y otros circuitos electrónicos conocidos, por ejemplo, puertas lógicas discretas interconectadas para realizar una función especializada o Circuitos Integrados de Aplicaciones Específicas (ASIC).
Alternativamente, al menos algunos de los pasos, funciones, procedimientos, módulos, unidades y/o bloques descritos anteriormente se pueden implementar en software tal como un programa de ordenador para ejecución por circuitería de procesamiento adecuada incluyendo una o más unidades de procesamiento. El software se podría transportar por un portador, tal como una señal electrónica, una señal óptica, una señal radio o un medio de almacenamiento legible por ordenador antes y/o durante el uso del programa de ordenador en el dispositivo de comunicación.
El diagrama o diagramas de flujo presentados en la presente memoria se pueden considerar como un diagrama o diagramas de flujo de ordenador, cuando se realizan por uno o más procesadores. Un aparato correspondiente se puede definir por un grupo de módulos de función, donde cada paso realizado por el procesador corresponde a un módulo de función. En este caso, los módulos de función se implementan como un programa de ordenador que se ejecuta en el procesador. Se tiene que entender que los módulos de función no tienen que corresponder a módulos software reales.
Ejemplos de circuitería de procesamiento incluyen, pero no se limitan a, uno o más microprocesadores, uno o más Procesadores de Señal Digitales, DSP, una o más Unidades Centrales de Proceso, CPU y/o cualquier circuitería de lógica programable adecuada tal como una o más Disposiciones de Puertas Programables en Campo, FPGA o uno o más Controladores Lógicos Programables, PLC. Es decir, las unidades o módulos en las disposiciones en los diferentes dispositivos descritos anteriormente se podrían implementar por una combinación de circuitos analógicos y digitales y/o uno o más procesadores configurados con software y/o microprogramas, por ejemplo, almacenados en una memoria. Uno o más de estos procesadores, así como el otro hardware digital, se puede incluir en una única circuitería integrada de aplicaciones específicas, ASIC o varios procesadores y diverso hardware digital se puede distribuir entre varios componentes separados, ya sea empaquetados o ensamblados individualmente en un sistema en un chip, SoC.
También se debería entender que puede ser posible reutilizar las capacidades generales de procesamiento de cualquier dispositivo o unidad convencional en el que se implementa la tecnología propuesta. También puede ser posible reutilizar software existente, por ejemplo, mediante la reprogramación de software existente o añadiendo nuevos componentes software.
Realizaciones ejemplares adicionales
Expresado de una manera ligeramente diferente, la descripción en la presente memoria se refiere a, por ejemplo, los siguientes aspectos y realizaciones.
Uno de los aspectos es un codificador/códec, en donde el codificador/códec se configura para realizar uno, más de uno o incluso todos los siguientes pasos, ilustrados, por ejemplo, en las figuras 5-6:
- determinar, calcular u obtener un valor absoluto máximo (xabsmax) de un vector objetivo de entrada (x(n)), por ejemplo, según las ecuaciones 11 y 12 anteriores y como se ilustra, por ejemplo, con el paso S1 en la figura 5 en una realización,
- determinar, calcular u obtener un cambio ascendente posible de un valor de correlación en base al menos al valor absoluto máximo (xabsmax), por ejemplo, calculando el cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo a través de la ecuación 19 anterior e ilustrado con el paso S2 en la figura 5 en una realización,
- si el número de pulsos unidad finales (K) terminase siendo más alto que un umbral (tp), el cual, por ejemplo, puede ser 127 pulsos unidad, determinar, por ejemplo, hacer el seguimiento de/almacenar, un valor/información de amplitud de pulso máxima (maxampy) calculado, por ejemplo, según la ecuación 26 anterior de un vector (y(n)), que se puede definir según las ecuaciones 13 y 14 anteriores y
o determinar/calcular/decidir/seleccionar en base a la amplitud de pulso máxima almacenada, por ejemplo, a través de un cálculo según las ecuaciones 22 y 23 de más adelante y como se ilustra por el paso S3 en la figura 6, si se necesita o se debería usar más de una cierta longitud de palabra, por ejemplo, más de una palabra de 16 bits con signo o más de una palabra de 32 bits con signo para representar energía dentro del bucle sin perder o sustancialmente perder, cualquier información de energía,
o representar un término/parámetro/valor de correlación cuadrada mejor y un término/parámetro/valor de energía acumulada mejor mediante más de la cierta longitud de palabra, por ejemplo, palabras de 32 bits o palabras de 64 bits, si se necesita más de la cierta longitud de palabra y
o si se necesita menos de la cierta longitud de palabra, ejecutar un primer bucle,
o si se necesita más de la cierta longitud de palabra, ejecutar un segundo bucle, alternativo, con el término de energía acumulada “mejor hasta ahora” (casi óptima) y el término de correlación cuadrada mejor representados por las más de las palabras de cierta longitud de palabra.
El segundo bucle puede ser un bucle de pulso unidad de mayor precisión y alta precisión más intensivo computacionalmente que el primer bucle de menor precisión (es decir, en relación con el segundo bucle). La selección basada en energía acumulada dentro del bucle de la precisión de bucle interior tiene el efecto de que los subvectores objetivo que tienen picos altos o tienen una granularidad muy fina, (K final es alto) usarán o podría ser que usen el bucle de precisión más alta y más ciclos más a menudo, mientras que los subvectores de granularidad de pulsos sin picos o baja usarán o podrían usar más a menudo el bucle de precisión menor y menos ciclos.
Un aspecto se refiere a un dispositivo de comunicación 1, ilustrado en la figura 9, que comprende un codificador o códec 2 para codificación de vídeo o audio, por ejemplo, un codificador EVS.
El codificador o códec se puede implementar total o parcialmente como un DSP colocado en el dispositivo de comunicación. En una primera realización el codificador/códec se configura para hacer una búsqueda de forma de PVQ en base a un subvector objetivo (x(n)), el número de pulsos unidad finito (K), un valor de dimensión de subvector (N) del subvector objetivo y opcionalmente también uno o más valores de ganancia (gsub). El codificador o códec también se puede configurar para hacer una división de banda de PVQ y en tal caso la búsqueda de forma de PVQ también se basaría en un número/valor de subvectores de una banda (Ns) y una ganancia más grande de un vector de ganancia G, (gmax = max (G) = max (go ... g<Ns-i)). El codificador o códec se configura además para sacar a partir de la búsqueda de forma de PVQ un vector entero (y) y/o un subvector de forma xq (n) a ser usado por el codificador para indexar un PVQ. El vector entero (y) comprende valores de elemento y tiene la misma longitud que el valor de dimensión de subvector (N) y una suma absoluta de todos los valores de elemento es igual al número de pulsos unidad (K).
El codificador/códec/dispositivo de comunicación se configura para realizar la búsqueda de forma de PVQ, en donde el codificador/códec/dispositivo de comunicación se configura para:
- determinar, calcular u obtener (S1, S23) un valor absoluto máximo (xabsmax) del vector de entrada (objetivo) (x(n)), por ejemplo, según las ecuaciones 11 y 12 anteriores,
- determinar, calcular u obtener (S2, S28) un cambio ascendente posible de un valor de correlación en base al menos al valor absoluto máximo (xabsmax), por ejemplo, calculando el cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo a través de la ecuación 19 anterior,
- si el número de pulsos unidad finales (K) terminase siendo más alto que un umbral (tp), el cual, por ejemplo, puede ser 127 pulsos unidad, hacer el seguimiento de/almacenar (S30) un valor/información de amplitud de pulso máxima (maxampy) calculado, por ejemplo, según la ecuación 26 anterior de un vector (y(n)), que se puede definir según las ecuaciones 13 y 14 anteriores y
o determinar/calcular/decidir/seleccionar (S3, S32) en base a la amplitud de pulso máxima almacenada, por ejemplo, a través de un cálculo según las ecuaciones 22 y 23 anteriores, si se necesita o se debería usar más de una cierta longitud de palabra, por ejemplo, más de una palabra de 16 bits con signo o más de una palabra de 32 bits con signo, para representar energía dentro del bucle,
o representar (S34) un término/parámetro/valor de correlación cuadrada mejor y un término/parámetro/valor de energía acumulada mejor mediante más de la cierta longitud de palabra, por ejemplo, palabras de 32 bits o palabras de 64 bits, si se necesita más de la cierta longitud de palabra y
o si se determina menos de la cierta longitud de palabra, ejecutar (S33) un primer bucle,
o si se determina más de la cierta longitud de palabra, ejecutar (S35) un segundo bucle, alternativo, con el término de energía acumulada mejor y el término de correlación cuadrada mejor representados por las más de las palabras de cierta longitud de palabra.
La búsqueda de forma de PVQ anterior, que puede ser una búsqueda de forma de PVQ de precisión limitada, se realiza en una realización por un cuantificador de vector, el cual es parte del codificador/códec y se puede implementar, al menos parcialmente, pero también completamente como una unidad de DSP, que se puede colocar en o adaptar para ser colocada en un dispositivo de comunicación. De esta manera, el codificador/códec se puede implementar completamente o parcialmente como una unidad hardware, por ejemplo, un DSP o una disposición de puertas programables en campo (FPGA). Se puede implementar, no obstante, en realizaciones alternativas con la ayuda de un procesador de propósito general y un programa de ordenador de códec que cuando se ejecuta en el procesador de propósito general hace al dispositivo de comunicación realizar uno o más de los pasos mencionados en el párrafo anterior. El procesador también puede ser un procesador de Cálculo de Conjunto de Instrucciones Reducido (RISC).
Otro aspecto de la descripción en la presente memoria es, como se indicó en el párrafo anterior, un programa de ordenador 6 ilustrado en la figura 10 y donde se describe completamente una realización por el ejemplo de código ANSI-C en el apéndice 1 de más adelante, tal como un programa de ordenador de codificador o programa de ordenador de códec, que comprende un código legible por ordenador, que cuando se ejecuta en un procesador/unidad de procesador 4 de un dispositivo de comunicación 1 hace al dispositivo de comunicación realizar uno o más de los pasos mencionados en conjunto con el método en el párrafo de más adelante o cualquiera de los pasos mencionados en conjunto con la figura 7.
Aún otro aspecto es un método de búsqueda de forma de PVQ realizado por un dispositivo de comunicación/códec/codificador, en donde el método comprende uno o más de los siguientes pasos:
- determinar, calcular u obtener (S1) un valor absoluto máximo (xabsmax) del vector de entrada (objetivo) (x(n)), por ejemplo, según las ecuaciones 11 y 12 anteriores,
- determinar, calcular u obtener (S2, S28) un cambio ascendente posible de un valor de correlación en base al menos al valor absoluto máximo (xabsmax), por ejemplo, calculando el cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo a través de la ecuación 19 anterior,
- si el número de pulsos unidad finales (K) terminase siendo más alto que un umbral (tp), el cual, por ejemplo, puede ser 127 pulsos unidad, hacer el seguimiento de/almacenar un valor/información de amplitud de pulso máxima (maxampy) calculado, por ejemplo, según la ecuación 26 anterior de un vector (y(n)), que se puede definir según las ecuaciones 13 y 14 anteriores y
o determinar/calcular/decidir/seleccionar (S3) en base a la amplitud de pulso máxima almacenada, por ejemplo, a través de un cálculo según las ecuaciones 22 y 23 anteriores, si se necesita o se debería usar más de una cierta longitud de palabra, por ejemplo, más de una palabra de 16 bits con signo o más de una palabra de 32 bits con signo, para representar energía dentro del bucle,
o representar un término/parámetro/valor de correlación cuadrada mejor y un término/parámetro/valor de energía acumulada mejor mediante más de la cierta longitud de palabra, por ejemplo, palabras de 32 bits o palabras de 64 bits, si se necesita más de la cierta longitud de palabra y
o si se determina menos de la cierta longitud de palabra, ejecutar un primer bucle,
o si se determina más de la cierta longitud de palabra, ejecutar un segundo bucle, alternativo, con el término de energía acumulada mejor y el término de correlación cuadrada mejor representados por las más de las palabras de cierta longitud de palabra.
El dispositivo de comunicación puede ser un equipo de usuario (UE) en forma de un teléfono móvil, cámara de vídeo, grabadora de sonido, tableta, ordenador de sobremesa, ordenador portátil, receptor multimedia digital de TV o servidor doméstico/pasarela doméstica/punto de acceso doméstico/encaminador doméstico, etc. como se definió anteriormente.
Aún otro aspecto es un medio de almacenamiento legible por ordenador 5 (ver la figura 10) en el cual se almacena cualquiera de las realizaciones anteriores del programa de ordenador. El medio de almacenamiento legible por ordenador puede ser en forma de una memoria volátil o no volátil, por ejemplo una EEPROM (PROM Borrable Eléctricamente), FPGA, una memoria instantánea (incluyendo una unidad de estado sólido) y un disco duro.
Una realización del dispositivo de comunicación 1 se ilustra en la figura 9. El dispositivo de comunicación comprende, para la realización de una búsqueda de forma de PVQ, una o más de una o todas de las siguientes unidades:
- una primera unidad de determinación, U1, para determinar, calcular u obtener un valor absoluto máximo (xabsmax) del vector de entrada (objetivo) (x(n)), por ejemplo, según las ecuaciones 11 y 12 anteriores,
- una segunda unidad de determinación, U2, para determinar, calcular u obtener un cambio ascendente posible de un valor de correlación en base al menos al valor absoluto máximo (xabsmax), por ejemplo, calculando el cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo a través de la ecuación 19 anterior,
- una unidad de almacenamiento, U3, para hacer el seguimiento de/almacenar un valor/información de amplitud de pulso máxima (maxampy) calculado, por ejemplo, según la ecuación 26 anterior de un vector (y(n)), que se puede definir según las ecuaciones 13 y 14 anteriores, si el número de pulsos unidad finales (K) terminase siendo más alto que un umbral (tp),
- una unidad de selección, U4, para determinar/calcular/decidir/seleccionar en base a la amplitud de pulso máxima almacenada, por ejemplo, a través de un cálculo según las ecuaciones 22 y 23 anteriores, si se necesita o se debería usar más de una cierta longitud de palabra, por ejemplo, más de una palabra de 16 bits con signo o más de una palabra de 32 bits con signo, para representar energía dentro del bucle,
- una unidad de representación, U5, para generar un término/parámetro/valor de correlación cuadrada mejor y un término/parámetro/valor de energía acumulada mejor con una longitud de palabra, por ejemplo, palabras de 32 bits o palabras de 64 bits, que son más de la cierta longitud de palabra si se selecciona por la unidad de selección más de la cierta longitud de palabra y
- una unidad de procesamiento de bucle interior, U6, para
o ejecutar un primer bucle, si se selecciona por la unidad de selección menos de la cierta longitud de palabra y
o ejecutar un segundo bucle, alternativo, con el término de energía acumulada mejor y el término de correlación cuadrada mejor representados por las más de las palabras de cierta longitud de palabra, si se determina más de la cierta longitud de palabra.
Las unidades mencionadas en el párrafo anterior pueden estar comprendidas en un códec/codificador 2 en forma de un DSP en la unidad de comunicación y pueden estar comprendidas además en un cuantificador de vector hardware del DSP. En una realización alternativa, todas las unidades en el párrafo anterior se implementan en el dispositivo de comunicación como software.
Como se ilustra además en la figura 9, el dispositivo de comunicación 1 también puede comprender unidades adicionales relacionadas con el codificador/códec y en particular unidades relacionadas con cuantificación de vector y búsqueda de forma de PVQ. Tales unidades se configuran para permitir búsquedas de forma según la descripción y figuras comprendidas en esta solicitud. Las unidades ejemplares ilustradas en la figura 9 son:
- una unidad de división de banda de PVQ U7 para realizar el paso opcional S21 descrito en conjunto con la figura 7, - una unidad de comparación U8 para realizar el paso S24 descrito en conjunto con la figura 7 de más adelante, - una unidad de generación de vector de PVQ U9 para realizar el paso S25 descrito más adelante, - una unidad de generación de punto de inicio U10 para realizar el paso S26 descrito más adelante,
- una unidad de cálculo de parámetro U11 para realizar el paso S27 descrito más adelante,
- una unidad de asignación de bit U12 para, por ejemplo, suministrar K y N a la búsqueda de forma y
- una unidad de indexación de PVQ U13, que se puede ver como un receptor de la salida a partir de la búsqueda de forma de PVQ descrita en la presente memoria,
- una unidad de normalización U14 para realizar el paso S36 descrito más adelante y
- una unidad de salida U15 para realizar el paso S37 descrito más adelante.
En el caso de una implementación software en un dispositivo de comunicación, una realización del dispositivo de comunicación 1 se puede definir como un dispositivo de comunicación que comprende un procesador 4 y un producto de almacenamiento de programa de ordenador 5 en forma de una memoria, dicha memoria que contiene instrucciones ejecutables por dicho procesador, por lo cual dicho dispositivo de comunicación es operativo para realizar una, más de una o todas de las siguientes:
- determinar, calcular u obtener un valor absoluto máximo (xabsmax) del vector de entrada (objetivo) (x(n)), por ejemplo, según las ecuaciones 11 y 12 anteriores,
- determinar, calcular u obtener un cambio ascendente posible de un valor de correlación en base al menos al valor absoluto máximo (xabsmax), por ejemplo, calculando el cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo a través de la ecuación 19 anterior, - si el número de pulsos unidad finales (K) terminase siendo más alto que un umbral (tp), el cual, por ejemplo, puede ser 127 pulsos unidad, hacer el seguimiento de/almacenar un valor/información de amplitud de pulso máxima (maxampy) calculado, por ejemplo, según la ecuación 26 anterior de un vector (y(n)), que se puede definir según las ecuaciones 13 y 14 anteriores y
o determinar/calcular/decidir/seleccionar en base a la amplitud de pulso máxima almacenada, por ejemplo, a través de un cálculo según las ecuaciones 22 y 23 anteriores, si se necesita o se debería usar más de una cierta longitud de palabra, por ejemplo, más de una palabra de 16 bits con signo o más de una palabra de 32 bits con signo, para representar energía dentro del bucle,
o representar un término/parámetro/valor de correlación cuadrada mejor y un término/parámetro/valor de energía acumulada mejor mediante más de la cierta longitud de palabra, por ejemplo, palabras de 32 bits o palabras de 64 bits, si se necesita más de la cierta longitud de palabra y
o si se determina menos de la cierta longitud de palabra, ejecutar un primer bucle,
o si se determina más de la cierta longitud de palabra, ejecutar un segundo bucle, alternativo, con el término de energía acumulada mejor y el término de correlación cuadrada mejor representados por las más de las palabras de cierta longitud de palabra.
Para ilustrar aspectos y realizaciones adicionales, algunos de ellos están yendo a ser descritos a continuación en conjunto con las figuras 7-8.
La figura 8 proporciona una descripción general de un lado de transmisión del EVS del 3GPP emergente, incluyendo un codificador EVS 3, que aquí está comprendido en el dispositivo de comunicación 1.
La figura 7 ilustra algunos pasos del método en una forma alternativa de descripción de algunas realizaciones, en relación a las realizaciones ilustradas en las figuras 5-6. Incluso aunque algunos de los pasos mencionados con respecto a la figura 7 se puede decir que se hacen en conjunto con una búsqueda de forma de PVQ, también debería ser evidente que algunos de los pasos también se podría decir que se realizan antes de la búsqueda de forma de PVQ. En un primer paso opcional S21, se realiza una división de banda de PVQ.
Los subvectores objetivo de forma, opcionalmente desde el paso S21, se reciben en un segundo paso S22, en donde, en dependencia de la realización, también se pueden recibir gsub, gmax y Ns .
En un tercer paso S23, que corresponde al paso S1 en la figura 5, se determina un valor absoluto máximo de un vector objetivo, por ejemplo, calculando primero el valor absoluto del subvector x(n) del vector objetivo y entonces seleccionando el valor absoluto más grande del subvector.
En un cuarto paso opcional S24, se determina si el valor del vector objetivo es igual a o está por debajo de un primer umbral. El umbral se fija para “filtrar” los vectores objetivo que se considera que tienen valores de energía muy bajos. Como se explicó anteriormente, el umbral se podría fijar para ser igual a cero en una realización. Se podría decidir también en este cuarto paso si una ganancia de subvector es igual a o está por debajo de un segundo umbral. En una realización el segundo umbral se fija a cero, pero en otras realizaciones se puede fijar para ser la Épsilon de la Máquina en dependencia de la precisión usada para palabras procesadas.
Si se determina en el cuarto paso S24 que el vector objetivo es igual o está por debajo del primer umbral y/o la ganancia de subvector está por debajo o es igual al segundo umbral, entonces se crea un vector de PVQ en un quinto paso S25 opcional. La creación se crea en una realización de manera determinística asignando la mitad de
>1 [0 ] =
los K pulsos unidad a una primera posición ( J) y los pulsos unidad restantes a una última posición (y[N-1]=y[N-1]+(K-y[0])). Este paso se podría ver en conjunto con el cuarto paso S24 como que deja de lado la búsqueda de forma de PVQ real entera, pero también se puede ver como una subrutina dentro del contexto de un procedimiento de búsqueda de forma de PVQ general.
En un sexto paso S26 opcional, un valor inicial (punto de inicio) para y, y_start se fija para la búsqueda de forma de PVQ para seguir, en donde el valor inicial es dependiente de la relación entre K y N. Si la relación es mayor que un tercer valor umbral, el cual puede ser 0,5 pulsos unidad por coeficiente, una primera proyección a una subpirámide K-1 se usa como el vector inicial y_start en un siguiente paso. La primera proyección se puede calcular como en las ecuaciones 13 y 14 anteriores. Si es menor que el tercer umbral, entonces el vector inicial y_start se decide que parta desde 0 pulsos unidad colocados previamente.
En la preparación para los pasos de búsqueda de forma de PVQ posteriores, todos los valores de vector iniciales en y_start se fijan a cero en un séptimo paso S27. En este paso se calculan un primer parámetro, aquí llamado el número acumulado de pulsos unidad, pulsetot y un segundo parámetro, aquí la correlación acumulada, corrxy(pulsetot) y un tercer parámetro, aquí llamado la energía acumulada energyy(pulsetot) para el punto de inicio, por ejemplo, según las ecuaciones 15-17 respectivamente. Un cuarto parámetro, aquí llamado enloopy(pulsetot) se puede calcular también en este paso según la ecuación 18 anterior.
En un octavo paso S28, se inicia una búsqueda de forma de PVQ o en una forma alternativa de mirarla, la segunda parte de búsqueda, fina, de la búsqueda de forma de PVQ se inicia para los pulsos unidad restantes hasta K con la ayuda de K, N, X_abs, max_xabs e y obtenidos, determinados o calculados previamente y en algunas realizaciones también gsub, gmax y Ns . Los pasos detallados de algunas realizaciones de esta búsqueda fina se ilustran minuciosamente por ejemplo por la figura 6, pero se podría enfatizar que en algunas realizaciones la búsqueda fina comprende una determinación de un quinto parámetro/valor, aquí llamado un cambio ascendente de un valor de correlación, corrupshift, se calcula para al menos algunos y en algunas realizaciones todos, los pulsos unidad para los cuales se hace la búsqueda fina o bucle interior. En algunas realizaciones un cambio ascendente posible de un valor de correlación dentro del bucle acumulado del siguiente bucle en una palabra de 32 bits con signo se calcula en base a la ecuación 19 anterior y corrupshift se usa entonces como entrada a un cálculo de un valor de correlación corrxy en la ecuación 20.
En un noveno paso S29, que se puede decir que es una parte de la búsqueda de forma de PVQ fina, se determina si el número de pulsos unidad finales K terminaría siendo más alto que un tercer umbral, tp, para el número de pulsos unidad finales. Si este es el caso, entonces en un décimo paso S30, se almacena la amplitud de pulso máxima maxampy .
En un undécimo paso S31, un sexto parámetro enmargin se calcula según, por ejemplo, la ecuación 22.
En un duodécimo paso S32, el sexto parámetro se compara con el cuarto valor umbral, que corresponde a una cierta longitud de palabra.
Si la respuesta es SÍ (en S32 de la Fig. 7) o Falso (en el ejemplo de código ANSI en el Apéndice 1), es decir, enmargin en la ecuación/decisión ejemplar 23 es mayor o igual que el cuarto umbral “16”, entonces en un paso S33, un primer bucle, más rápido y “más tosco” se ejecuta en un segundo bucle de la búsqueda fina. Las realizaciones del primer bucle se muestran, por ejemplo, en la figura 6.
Si la respuesta es “No” (en S32 de la Fig. 7) o Verdadero (en el ejemplo de código ANSI en el Apéndice 1), es decir, enmargin en la ecuación/decisión ejemplar 23 es menor que “16”, entonces en un decimocuarto paso S34, un séptimo parámetro, el término/parámetro/valor de correlación cuadrada mejor y un octavo parámetro, el término/parámetro/valor de energía acumulada mejor, se generan/transforman para llegar a ser más de la cierta longitud de palabra, que entonces en un decimoquinto paso S35 se usan en el segundo bucle interior, más detallado, de la búsqueda fina. Las realizaciones del segundo bucle se muestran en más detalle por ejemplo en la figura 6.
En un decimosexto paso S36, se asigna su signo adecuado a al menos cada elemento de subvector de PVQ no cero y el vector se normaliza L2 a energía unidad. Si, en algunas realizaciones, se ha dividido una banda, entonces se escala con una ganancia de subvector gsub.
Un Xq normalizado también se puede determinar en base a la ecuación 28. Un procedimiento ejemplar para este paso se describió anteriormente más minuciosamente.
En un decimoséptimo paso S37, el xq normalizado e y se sacan a partir del proceso de búsqueda de forma de PVQ y se reenvían a un proceso de indexación de PVQ incluido por ejemplo en el códec.
Algunas ventajas de realizaciones y aspectos
Más adelante están algunas ventajas sobre la técnica anterior habilitadas en al menos algunos de los aspectos y realizaciones descritas anteriormente.
El método/algoritmo de escalado de correlación propuesto que usa un análisis previo de la correlación máxima acumulada actual, mejora el rendimiento de la SNR del peor caso (mínima) de una implementación de búsqueda de cuantificación de forma de PVQ de precisión. El criterio adaptativo para análisis de margen de correlación por adelantado requiere una complejidad adicional muy marginal. Además se requiere una normalización previa no costosa del vector objetivo x por ejemplo a energía unidad.
El criterio adaptativo que usa seguimiento de la amplitud de pulso máxima en el resultado preliminar, seguido por un análisis previo de la energía acumulada del peor caso, por ejemplo para la decisión de bucle interior de precisión de 16/32 bits suave requiere muy poca complejidad de cálculo adicional y proporciona un buen compromiso donde la complejidad se puede mantener baja mientras que aún se usan métricas de correlación de alta precisión y de energía de alta precisión para señales de entrada relevantes y se asignará más precisión a señales de pico subjetivamente más importantes. En otras palabras, al menos algunas de las realizaciones y aspectos mejoran el funcionamiento de un ordenador/procesador en sí mismo.
En las Tablas 2/3 anteriores en el apéndice 2 más adelante, uno puede encontrar que un ejemplo de sistema basado en PVQ que usa coste lógico de precisión adaptativa será 6,843 WMOPS, si uno usase precisión de energía y de correlación cuadrada de 32 bits en todos (cualquier K) los bucles de búsqueda interior el coste se eleva a 10,474 WMOPS.
Observaciones finales
Las realizaciones descritas anteriormente se dan meramente como ejemplos y se debería entender que la tecnología propuesta no está limitada a las mismas. Se entenderá por los expertos en la técnica que se pueden hacer diversas modificaciones, combinaciones y cambios a las realizaciones sin apartarse del presente alcance. En particular, diferentes soluciones parciales en diferentes realizaciones se pueden combinar en otras configuraciones, donde sea técnicamente posible.
Cuando se usa la palabra “comprende” o “que comprende” se entenderá como no limitante, es decir, que significa “consta al menos de”.
También se debería señalar que en algunas implementaciones alternativas, las funciones/actos señalados en los bloques pueden ocurrir fuera del orden señalado en los diagramas de flujo. Por ejemplo, dos bloques mostrados en sucesión se pueden ejecutar de hecho sustancialmente concurrentemente o los bloques se pueden ejecutar algunas veces en el orden inverso, dependiendo de la funcionalidad/actos implicados. Además, la funcionalidad de un bloque dado de los diagramas de flujo y/o diagramas de bloques se puede separar en múltiples bloques y/o la funcionalidad de dos o más bloques de los diagramas de flujo y/o diagramas de bloques se puede integrar al menos parcialmente. Finalmente, se pueden añadir/insertar otros bloques entre los bloques que se ilustran y/o se pueden omitir bloques/operaciones sin apartarse del alcance de los conceptos inventivos.
Se tiene que entender que la elección de unidades de interacción, así como la denominación de las unidades dentro de esta descripción son solamente con propósito ejemplar y los nodos adecuados para ejecutar cualquiera de los métodos descritos anteriormente se pueden configurar de una pluralidad de formas alternativas a fin de ser capaces de ejecutar las acciones del procedimiento sugeridas.
También se debería señalar que las unidades descritas en esta descripción se tienen que considerar como entidades lógicas y no necesariamente como entidades físicas separadas.
Con referencia a un elemento en singular no se pretende que signifique “uno y solamente uno” a menos que se exponga así explícitamente, sino más bien “uno o más”. Todos los equivalentes estructurales y funcionales a los elementos de las realizaciones descritas anteriormente que son conocidos por los expertos en la técnica se incorporan expresamente en la presente memoria por referencia y se pretende que estén abarcados por este medio. Además, no es necesario para un dispositivo o método abordar todos y cada uno de los problemas que se busca sean resueltos por la tecnología descrita en la presente memoria, para ser abarcados por este medio.
En algunos casos en la presente memoria, se omiten descripciones detalladas de dispositivos, circuitos y métodos bien conocidos para no oscurecer la descripción de la tecnología descrita con detalle innecesario. Todas las declaraciones en la presente memoria que recitan principios, aspectos y realizaciones de la tecnología descrita, así como ejemplos específicos de los mismos, se pretende que abarquen tanto equivalentes estructurales como funcionales de las mismos. Adicionalmente, se pretende que tales equivalentes incluyan tanto equivalentes conocidos actualmente así como equivalentes desarrollados en el futuro, por ejemplo, cualquier elemento desarrollado que realice la misma función, con independencia de la estructura.
Abreviaturas
N dimensión de vector
Ns dimensión de subvector
x vector objetivo
Xq vector de forma cuantificado
Yfinal vector entero que se adhiere a la norma L1 de K
K Número de pulsos unidad finales
k número de índice de pulsos unidad acumulados
n coeficiente o índice de muestra
i índice de subvector
MDCT Transformada Coseno Discreta Modificada
PVQ Cuantificador de Vector en Pirámide (Cuantificación)
WC Peor caso
WMOPS Millón de Operaciones Ponderadas Por Segundo
AccEn Energía Acumulada
ROM Memoria de Sólo Lectura
PROM ROM de Programa
SNR Relación Señal a Ruido
EVS Servicio de Voz Mejorado
3GPP Proyecto de Cooperación de 3a Generación
DSP Procesador de Señal Digital
CELT Transformada Repetida de Energía Limitada
IEFT Grupo de Trabajo de Ingeniería de Internet
MAC Multiplicar-Acumular
ACELP Predicción lineal excitada por código algebraico
EPS Épsilon de la máquina
Apéndice 1: Implementación ejemplar de realización en código ANSI-C
Más adelante está un ejemplo de una implementación de una realización ejemplar en código ANSI C que usa 16/32 bits virtuales de STL 2009 de la G.191 (una simulación de un DSP).
Figure imgf000024_0001
UWord32 UL_left_I, UL_right_I, UL_dummy;
#ifndef NONBE_PVQ_SEARCH_FIX
Word16 corr_margin;
#endif
#ifdef BE_CLEAN_PVQ_SEARCH
Word32 L_tmp;
UWord32 UL_tmp;
UWord16 u_sgn;
#endif
/* maximizar la precisión de correlación, anterior a cada adición de pulso unidad en el vector */ corr_up_shift = norm_l(L_mac(*L_xy_ptr, 1, max_xabs));
/* analizar previamente la actualización de L_xy de peor caso en el bucle tenue , 2 op. */
/* borrar código BE, con bucles de precisión baja/alta divididos */
/* activar sección de búsqueda de en/corr de baja complejidad condicionalmente si la energía resultante está dentro de los límites */
/* caso típico para dimensiones más altas */
IF( high_prec_active == 0 )
{
en_max_den = 0; /*move16()*/; /* OPT: mover guardado usando high_prec_active como en_max_den */
cmax_num = -1; move16(); /* solicitar forzar una 1a actualización para n==0 */
FOR(i =0; i < dim; i++) /* PARA 3 op. */
{
L_tmp_corr = L_shl(L_mac(*L_xy_ptr, 1,x_abs[i]), corr_up_shift ); /*objetivo dentro del bucle real */
corr_tmp = round_fx(L_tmp_corr);
corr_sq_tmp = mult(corr_tmp, corr_tmp); /* CorrSq, tiene 16bit para multiplicación cruzada de baja complejidad */
L_tmp_en_lc = L_mac(*L_yy_ptr, 1,y[i] );
/*resultado de Q1, la energía puede abarcar hasta ~14+1(Q1)+1(signo)=16 bits, 1 op. */
/* extract_I sin cambio se puede usar siempre para esta sección ya que se garantiza que permanece energía en la palabra inferior, 1 op */
en_tmp = extract_l(L_tmp_en_lc);
/* L_shl round_fx también se podrían usar pero entonces añade un coste de cambio ascendente (2-3 op.)*/
/* comparación de 16/32 bits WC (4 1+1 (1+1+1) = 9 */
/* corr_sq_tmp/en_tmp_den > cmax_num/en_max_den */
/* corr_sq_tmp * en_max_den > cmax_num * en_tmp */ /* SI 4 op */
IF( L_msu(L_mult(corr_sq_tmp, en_max_den),cmax_num, en_tmp) >0) /* 2 op */
{
cmax_num = corr_sq_tmp; move16(); /* 1 op */
en_max_den = en_tmp; move16(); /* 1 op */
Figure imgf000026_0001
Figure imgf000027_0001
Figure imgf000028_0001
den = extract_h(L_shl(L_xsum, shift_den)); /* ahora en Q12+shift_den */
L_num = L_deposit_l(num);
shift_num = sub(norm_l(L_num) ,1);
L_num = L_shl(L_num, shift_num) ; /* ahora en Q0 shift_num -1 */
proj_fac = div_l(L_num, den); /* L_num siempre tiene que ser menor que den<<16 */
shift_delta=sub(shift_num,shift_den);
L_proj_fac = L_shl(L_deposit_l(proj_fac), sub(9, shift_delta)); /* llevar a un Q12 fijo */
}
pulse_tot = 0; move16();
L_yy = L_deposit_l(0);
L_xy = L_deposit_l(0);
/* Encontrar una posición de inicio en una subpirámide inferior, si la densidad de pulsos es mayor que 0,5 */ IF((num > 0) && (high_pulse_density_flag !=0))
{
FOR( i =0; i < dim ; i++) /* máximo 64 */
{
/* y_flt[i] = (short)floor(xabs_flt[i] * proj_fac_flt); */ /* truncado de pirámide FLOAT */ /* y[i] = shr(xabs[i]*L_proj_fac); */ /* truncado de pirámide BASOP */ Mpy_32_ 16_ss(L_proj_fac,xabs[i],&L_tmp,&u16_tmp); /*Q12 *Q12 1 */ y[i] = extract_l(L_shr( L_tmp, 12+12-16+1 )); move16(); /* el “truncado” de pirámide */
/* Q12 *Q12 -> 00 */
pulse_tot = add(pulse_tot, y[i]); /* Q0 */
L_yy = L_mac(L_yy, y[i], y[i]); /* Resultado de energía aumentará en 2 por L_mac */ L_xy = L_mac(L_xy, xabs[i], y[i]); /* Corr, Q0*Q12 1 --> Q13 */ }
}
/* Descripción de bucle de búsqueda fina de PVQ */
/* Ejecutar una búsqueda de CorrSq/Energy completa de tipo ACELP */
/* la lógica de búsqueda básica es para probar añadir un pulso unidad a cada posición n en el vector y de salida y actualizar los términos de correlación y energía iterativamente.
Rxy(k,n) = Rxy(k-1) 1*abs(x(k,n)) % añadir correlación unidad de veces el objetivo
Ryy(k,n) = Ryy(k-1) 2*y(k-1,n) 1A2 % contribución de energía unidad añadida
RxySq(k,n) = Rxy(k,n)*Rxy(k,n)
minimizar ( -Rxy(k,n)/Sqrt(Ryy(k,n)) ), sobre n y k
( o maximizar equivalente ( RxySq(k,n)/Ryy(k,n) ), sobre n y and k )
RxySq(k,n) bestRxySq
.............. > ................ ? actualizar mejor candidato
Ryy(k,n) bestRyy
bestRyy * RxySq(k,n) > bestRxySq * Ryy(k,n) ? actualizar mejor candidato
Misc.:
1A2 en Ryy(k,n) se puede añadir antes del bucle de dimensión
Ryy(k,n) se puede disminuir previamente de manera opcional en 2,0 para evitar una multiplicación/cambio Rxy(k,n) se puede escalar dinámicamente para cada bucle de pulso unidad para optimizar RxySq.
CorrSqTerm =(Rxy(k,n)A2, debería tener una precisión máxima en una variable Word16/Word32
Término de energía:Ryy(k, n)
no debería llegar a ser cero, es decir, muy a menudo tiene suficiente precisión para no llegar a ser truncado es decir, usar preferiblemente una variable de 32 bits si se acumulan en Q1 más de 127 pulsos.
k=127=>log2(127A2) = 13,9774 bits, encaja en Q1 con signo, con Q1 la división previa por 2 trabajos
k=255=>log2(255A2) = 15,9887 bits, es decir escalar 1 bit, encaja en valor de 16 bits de Q1 sin signo
Aspectos de dimensión:
tenue 6 y más alto siempre es de ahorro de energía de 16 bits ya que los pulsos máximos son 96 (para palabras de código cortas de 1+31 bits)
tenue 5, 4, 3, 2 se puede asignar mayor que 127 pulsos (o menor)
tenue 1 no necesita realmente una búsqueda, solamente es relevante el signo.
Actualmente tenemos KMAX=512, o con más precisión para DIM 5 kmax es 238
DIM 4,3,2,1 kmax es 512
También se podría usar una aritmética de DSP sin signo,
pero entonces el caso de “arranque”/ahora un centinela negativo tiene que ser manejado de una forma especial y además UL_mac,UL_mac0,UL_msu,UL_msu0 actualmente no está disponible como basops sin signo de STL
Para hacer el trabajo de código de búsqueda de PVQ eficientemente hacemos:
1. Siempre usar escalado ascendente dinámico basado en la norm_l casi óptimo del término de correlación, analizando la correlación acumulada hasta ahora. (Rxy para k-1 pulsos)
y usar un valor objetivo máximo posible analizado previamente max_xabs.
2. Usar selectivamente una representación de 16 o 32 bits del término de
energía, dependiendo de la energía acumulada previamente.
Además si el término de energía Ryy necesita más de 16 bits, conmutamos a una representación de energía de 32 bits
_______y también una precisión de 32 bits más alta para la correlación Rxy y___________________________ aumentar la precisión en los cálculos de multiplicación cruzada de distorsión a casi 64 bits.
*/
/* Rxy_max=(k,*)= max( L_xy 1*max_x_abs)
análisis necesario para normalización L_xy (corr, corrSq) casi óptima */
/* Ryy_max(k,*) = max(L_yy(k-1) 0,5 1*max_amp_y(k-1 ))
análisis necesario para selección de precisión de energía (L_yy) cuando los pulsos > 127 ,
( (127A2)*2 encaja en Word16 con Signo) */
L_yy=L_shr(L_yy, 1); /* disminuir por 2 para dominio de bucle de búsqueda */
IF (sub(pulses,127)<=0)
{ /* bucle interior LC, entra aquí siempre para dimensiones 6 y más altas,
y también algunas veces para dimensiones 1..5 */
/* ( si la precisión de energía está inactiva, no se necesita max_amp_y,
ni actualizar max_amp_y(k-1) ) */
FOR (k=pulse_tot; k<pulses;k++){
L_yy = L_add(L_yy, 1); /* añadido 0,5 a energía para pulse_tot+1 */
imax = one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0, 0,max_xabs);
}
}
ELSE
{ /* bucles interiores HC o LC+HC */
max_amp_y = max_val_fx(y, dim); /* esto hace bucles por encima de 5 valores máximo */
/* se necesita max_amp_y a partir de y proyectada cuando pulses_sum excede 127 */
/* La primera sección con energía de 32 bits inactiva, max_amp_y se mantiene actualizada sin embargo */ FOR( k=pulse_tot; k<128; k++){
L_yy = L_add(L_yy, 1); /* añadido 0,5 */
imax = one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0,0,max_xabs);
max_amp_y = s_max(max_amp_y, y[imax]);
}
/* Segunda sección con número de pulsos más alto, precisión de energía de 32 bits seleccionada adaptativamente, max_amp_y mantenida actualizada */
FOR( k=pulse_tot; k<pulses; k++){
L_yy = L_add(L_yy, 1); /* añadido 0,5 */
en_margin = norm_l(L_mac(L_yy,1, max_amp_y)); /‘ encontrar "adición" máxima, margen,~2 op.
*/
en_dn_shift = sub(16, en_margin); /*calc. cambio a palabra inferior */
high_prec_active = 1; move16();
if( en_dn_shift <=0){ /* usar solamente energía de 32 bits si se necesita realmente */
______high prec active =0; move16Q;_________________________________________________________ }
/* activar energía y corr de 32 bit adaptativamente, max_amp_y mantenida actualizada */
imax = one_pulse_search(dim,xabs,y,&pulse_tot,&L_xy,&L_yy,high_prec_active,
en_dn_shift, max_xabs);
max_amp_y = s_max(max_amp_y, y[imax]);
}
}
L_yy = L_shl(L_yy, 1); /* yy= yy*2,0 */ /* compensar cambio descendente de energía de análisis de bucle de búsqueda en 1, para hacer energía correcta para cálculo de ganancia unidad/inversa */ }
/* Aplicar escalado de normalización (L2) de energía unidad, siempre que se necesite comprobar al menos un pulso de manera no dividida por cero */
L_isqrt = L_deposit_l(0);
IF( neg_gain != 0 ){
L_isqrt = lsqrt(L_shr(L_yy, 1)); /* Nota: un factor de ganancia único como en el ajuste no se calcula */ }
shift_num = norm_s(pulse_tot); /* cuenta para amplitud de pulso máxima posible en y,
se puede usar incluso cuando max_amp_y no esté disponib. */ shift_den = norm_s(neg_gain); /* cuenta para cambio de reducción de escala de ganancia */ neg_gain_norm = shl(neg_gain, shift_den); /* hasta 10 dB de pérdida sin esta norma */
shift_tot = sub(add(shift_num, shift_den), 15);
/* DSP OPT : para ahorrar complejidad media se puede hacer un bucle especial para el caso de ganancia común ==1,0 */
/* DSP OPT PROM : reutilizar un bucle de normalización de decodificador común */
L_isqrt = L_negate(L_isqrt);
FOR( i =0; i < dim; i++)
{
tmp = shl(y[i],shift_num); /* abs(y[i]) cambiado ascendentemente usado en escalado */
if( x[i] <0)
{
tmp = negate(tmp); /* aplicar signo */
}
if( y[i] !=0 )
{
y[i] = shr(tmp, shift_num); move16(); /* actualiza signo de y[i},~intervalo -/+ 512),mover disposición */ Mpy_32_16_ss( L_isqrt, tmp, &L_tmp, &u16_tmp); /* Q31*Q(0+x) 1 */
Mpy_32_ 16_ss( L_tmp, neg gain norm, &L_tmp, &u16_tmp); /* Q31*Q(0+x) *Q15 1 */
L_tmp = L_shr(L_tmp, shift_tot); /* Q31+x */
xq[i] = round_fx(L_tmp); move16(); /*Q15, mover disposición */
L_xq[i] = L_tmp; /* Q31 actualmente sin uso */
Figure imgf000033_0001
El código anterior debería ser fácil de leer para todas las personas expertas en la técnica y no debería ser explicado en más detalle. No obstante, para las personas no expertas se menciona que el operador relacional “= =” es un operador que en un ejemplo de “A= =B” devuelve un valor lógico fijado a un 1 lógico (verdadero) cuando los valores A y B son iguales; y de otro modo devuelve un 0 lógico (falso). L_mac es un multiplicar-acumular dentro del significado de que L_mac (L_v3, v1, v2) = L_v3+v1*v2.
Apéndice 2: Resultados de simulación puestos en tabla
Antecedentes de la simulación
Se han simulado realizaciones de la descripción en la presente memoria. Para todas las simulaciones de búsqueda de forma de PVQ hechas, la tasa de bit usada fue 64.000 bps y el códec se operó en modo MDCT, con tamaños de subbanda de coeficiente MDCT inicial de [8, 12, 16, 24, 32] coeficientes. Estas bandas se pueden dividir muy bien en secciones de banda menores, cada una representada por un subvector, por un algoritmo de división de banda de PVQ. Por ejemplo, una banda de tamaño 8 se puede dividir en subsecciones más pequeñas, por ejemplo, “4, 4” o “3, 3, 2”, si se asignan suficientes bits. Típicamente, cada banda se divide de tal forma que se pueden usar un máximo de 32 bits para codificación de forma de cada subvector final.
En esta implementación de indexación de PVQ una banda de tamaño 8 puede tener hasta 36 pulsos unidad, una subsección de tamaño 7 puede tener hasta 53 pulsos unidad, una sección de tamaño 6 puede tener hasta 95 pulsos unidad, una sección de tamaño 5 puede tener hasta 238 pulsos unidad, una sección de tamaño 4, 3, 2, 1 puede tener hasta 512 pulsos unidad. Como las secciones más cortas con un alto número de pulsos se crean dinámicamente dividiendo la banda, son menos frecuentes que los tamaños de subvectores más largos. Las cifras WMOPS en las Tablas de Resultados de más adelante incluyen: (Búsqueda previa de PVQ, búsqueda fina de PVQ, normalización de PVQ e indexación de PVQ). Las cifras “idéntico %” en las Tablas de Resultados de más adelante, es el número de vectores idénticos encontrados en el Algoritmo de búsqueda de forma de precisión limitada evaluada, comparado con una búsqueda de forma de PVQ de punto flotante no restringido.
Tablas de resultados
Tabla 1 Resultados para K final <= 127
Figure imgf000033_0002
Figure imgf000034_0001
Tabla 2 Resultados para K > 127
Figure imgf000034_0002
Figure imgf000035_0001

Claims (19)

REIVINDICACIONES
1. Un método para búsqueda de forma de Cuantificador de Vector en Pirámide, PVQ, realizada por un codificador, el PVQ que toma un vector objetivo x como vector de entrada y que deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior, el método que se caracteriza por:
antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad: determinar (203) en base a un valor absoluto máximo, xabSmax, del vector de entrada, x, un posible cambio ascendente, en una palabra de bit, de un valor de correlación dentro del bucle acumulado del siguiente bucle de búsqueda de dimensión interior, corrxy, entre el vector de entrada x y el vector y
2. El método según la reivindicación 1, en donde el método además comprende, antes de entrar en el siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad:
- determinar (102, 204), en base a una amplitud de pulso máxima, maxampy, del vector actual y, si se necesita más de una longitud de palabra de bit actual para representar, de una manera sin pérdidas, una variable, enloopy, relacionada con una energía acumulada de y, en el siguiente bucle de búsqueda de dimensión interior (103).
3. El método según la reivindicación 2, que además comprende:
cuando se necesita más de la longitud de palabra de bit actual (102, 204, 304, 403) para representar enloopy:
- realizar (103, 205, 305, 404) los cálculos de bucle interior usando una longitud de palabra de bit más larga para representar enloopy.
4. El método según una cualquiera de las reivindicaciones 2-3, que además comprende:
cuando se necesita más de la longitud de palabra de bit actual para representar enloopy:
- realizar (305) los cálculos de bucle interior usando una longitud de palabra de bit más larga para representar un valor de correlación dentro del bucle acumulado cuadrado, corrxy2, entre x y el vector y, en el bucle.
5. El método según una cualquiera de las reivindicaciones 2-4, que además comprende, cuando no se necesita más de la longitud de palabra de bit actual para representar enloopy:
- realizar (405) los cálculos de bucle interior empleando un primer bucle de adición de pulso unidad usando una primera longitud de palabra de bit para representar enloopy y:
cuando se necesita más de la longitud de palabra de bit actual para representar enloopy:
- realizar (404) los cálculos de bucle interior empleando un segundo bucle de adición de pulso unidad usando una longitud de palabra de bit más larga para representar enloopy que el primer bucle de adición de pulso unidad.
6. El método según una cualquiera de las reivindicaciones precedentes, que además comprende, cuando no se necesita más de la longitud de palabra de bit actual para representar enloopy:
- realizar (405) los cálculos de bucle interior empleando un primer bucle de adición de pulso unidad que tiene una cierta precisión y:
cuando se necesita más de una longitud de palabra de bit actual para representar enloopy:
- realizar (404) los cálculos de bucle interior empleando un segundo bucle de adición de pulso unidad que tiene una precisión mayor que el primer bucle de adición de pulso unidad.
7. El método según una cualquiera de las reivindicaciones 2-6, en donde la determinación, basada en maxampy, de si se necesita más de la longitud de palabra de bit actual para representar enloopy comprende determinar las características del caso cuando, en el siguiente bucle de búsqueda de dimensión interior, el pulso unidad se añade a la posición en y que está asociada con maxampy.
8. El método según una cualquiera de las reivindicaciones 2-7, que además comprende:
en el bucle de búsqueda de dimensión interior para adición de pulso unidad:
- determinar una posición, nbest, en y para adición de un pulso unidad evaluando una multiplicación cruzada, para cada posición n en y, de un valor de correlación y energía para la n actual; y un valor de correlación cuadrada, BestCorrSq y uno de energía, bestEn, guardados a partir de valores previos de n; como:
corrxy2 * bestEn > BestCorrSq * enloopy
donde
n best = n ^
bestEn — enloopy ( cuancj0 corrxy2 * bestEn > BestCorrSq * enloopy BestCorrSq — corrxy)
9. El método según una cualquiera de las reivindicaciones 2-8, que además comprende,
- hacer un seguimiento de maxampy cuando un valor final de K, asociado con el vector objetivo x, excede un valor umbral.
10. Un codificador configurado para búsqueda de forma de Cuantificación de Vector en Pirámide, PVQ; la PVQ que toma un vector objetivo x como vector de entrada y que deriva un vector y añadiendo iterativamente pulsos unidad en un bucle de búsqueda de dimensión interior, el codificador que se caracteriza por estar configurado para: antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad: determinar, en base a un valor absoluto máximo, xabSmax, del vector de entrada, x, un posible cambio ascendente, en una palabra de bit, del valor de correlación dentro del bucle acumulado del siguiente bucle de búsqueda de dimensión interior, corrxy, entre el vector de entrada x y el vector y.
11. El codificador según la reivindicación 10, que además se configura para, antes de entrar en un siguiente bucle de búsqueda de dimensión interior para adición de pulso unidad:
- determinar, en base a una amplitud de pulso máxima, maxampy, de un vector actual y, si se necesita más de una longitud de palabra de bit actual para representar, de una manera sin pérdidas, una variable, enloopy, relacionada con una energía acumulada de y, en el siguiente bucle de búsqueda de dimensión interior.
12. El codificador según la reivindicación 11, que además se configura para:
- realizar los cálculos de bucle interior usando una longitud de palabra de bit más larga para representar enloopy, cuando se necesita más de la longitud de palabra de bit actual para representar enloopy.
13. El codificador según cualquiera de las reivindicaciones 11-12, que se configura para:
- realizar los cálculos de bucle interior empleando un primer bucle de adición de pulso unidad usando una primera longitud de palabra de bit cuando no se necesita más de la longitud de palabra de bit actual para representar enloopy y:
- realizar los cálculos de bucle interior empleando un segundo bucle de adición de pulso unidad usando una longitud de palabra de bit más larga que el primer bucle de adición de pulso unidad cuando se necesita más de la longitud de palabra de bit actual para representar enloopy.
14. El codificador según cualquiera de las reivindicaciones 11-13, que además se configura para:
- realizar los cálculos de bucle interior empleando un primer bucle de adición de pulso unidad, que tiene una cierta precisión, cuando no se necesita más de la longitud de palabra de bit actual para representar enloopy; y para - realizar los cálculos de bucle interior empleando un segundo bucle de adición de pulso unidad, que tiene una precisión mayor que el primer bucle de adición de pulso unidad, cuando se necesita más de la longitud de palabra de bit actual para representar enloopy.
15. El codificador según una cualquiera de las reivindicaciones 11-14, en donde la determinación, basada en maxampy, de si se necesita más de la longitud de palabra de bit actual para representar enloopy se configura para comprender determinar las características del caso cuando, en el siguiente bucle de búsqueda de dimensión interior, el pulso unidad se añade a la posición en y que está asociada con maxampy.
16. El codificador según una cualquiera de las reivindicaciones 11-15, que además se configura para:
en el bucle de búsqueda de dimensión interior para adición de pulso unidad:
- determinar una posición, nbest, en y para adición de un pulso unidad evaluando una multiplicación cruzada, para cada posición n en y, de un valor de correlación y energía para la n actual; y un valor de correlación, BestCorrSq y de energía, bestEn, guardados a partir de valores previos de n; como:
corrxy2 * bestEn > BestCorrSq * enloopy
donde
n best = n ^
bestEn — enloopy ( cuancj0 corrxy2 * bestEn > BestCorrSq * enloopy
BestCorrSq — corrxy)
17. El codificador según una cualquiera de las reivindicaciones 11-16, que además se configura para hacer el seguimiento de maxampy cuando un número de pulsos unidad finales, K, asociado con el vector objetivo x, excede un valor umbral.
18. El codificador según una cualquiera de la reivindicaciones 10-17, en donde el codificador se configura con un procesador de señal digital de precisión fijada.
19. Dispositivo de comunicación que comprende el codificador según una cualquiera de las reivindicaciones 10-18.
ES19209199T 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide Active ES2874511T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US201462029586P 2014-07-28 2014-07-28

Publications (1)

Publication Number Publication Date
ES2874511T3 true ES2874511T3 (es) 2021-11-05

Family

ID=53502817

Family Applications (4)

Application Number Title Priority Date Filing Date
ES15733942.5T Active ES2586712T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide
ES19209199T Active ES2874511T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide
ES18206322T Active ES2785041T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide
ES16165702T Active ES2718049T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide

Family Applications Before (1)

Application Number Title Priority Date Filing Date
ES15733942.5T Active ES2586712T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide

Family Applications After (2)

Application Number Title Priority Date Filing Date
ES18206322T Active ES2785041T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide
ES16165702T Active ES2718049T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide

Country Status (22)

Country Link
US (3) US9792922B2 (es)
EP (4) EP3633675B1 (es)
JP (4) JP6170575B2 (es)
KR (3) KR101959156B1 (es)
CN (2) CN109979470B (es)
AR (1) AR101332A1 (es)
AU (3) AU2015297066B2 (es)
CA (1) CA2955765C (es)
DK (2) DK3065135T3 (es)
ES (4) ES2586712T3 (es)
HU (2) HUE028802T2 (es)
IL (1) IL249104A (es)
MX (3) MX2021007880A (es)
MY (1) MY177842A (es)
NZ (1) NZ726879A (es)
PL (3) PL3467825T3 (es)
PT (2) PT3633675T (es)
RU (2) RU2665898C2 (es)
SG (3) SG10202000575WA (es)
TR (1) TR201901612T4 (es)
WO (1) WO2016018185A1 (es)
ZA (2) ZA201802791B (es)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NZ726879A (en) * 2014-07-28 2017-10-27 ERICSSON TELEFON AB L M (publ) Pyramid vector quantizer shape search
US10366698B2 (en) * 2016-08-30 2019-07-30 Dts, Inc. Variable length coding of indices and bit scheduling in a pyramid vector quantizer
WO2019028602A1 (zh) 2017-08-07 2019-02-14 深圳市汇顶科技股份有限公司 应用于超取样转换器的向量量化数模转换电路
US10586546B2 (en) 2018-04-26 2020-03-10 Qualcomm Incorporated Inversely enumerated pyramid vector quantizers for efficient rate adaptation in audio coding
US10573331B2 (en) * 2018-05-01 2020-02-25 Qualcomm Incorporated Cooperative pyramid vector quantizers for scalable audio coding
US10734006B2 (en) 2018-06-01 2020-08-04 Qualcomm Incorporated Audio coding based on audio pattern recognition
WO2023100494A1 (ja) * 2021-12-01 2023-06-08 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 符号化装置、復号装置、符号化方法、及び、復号方法

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4720861A (en) * 1985-12-24 1988-01-19 Itt Defense Communications A Division Of Itt Corporation Digital speech coding circuit
JP4132109B2 (ja) * 1995-10-26 2008-08-13 ソニー株式会社 音声信号の再生方法及び装置、並びに音声復号化方法及び装置、並びに音声合成方法及び装置
US6128415A (en) * 1996-09-06 2000-10-03 Polaroid Corporation Device profiles for use in a digital image processing system
JP3707153B2 (ja) * 1996-09-24 2005-10-19 ソニー株式会社 ベクトル量子化方法、音声符号化方法及び装置
US6006179A (en) * 1997-10-28 1999-12-21 America Online, Inc. Audio codec using adaptive sparse vector quantization with subband vector classification
US6360204B1 (en) * 1998-04-24 2002-03-19 Sarnoff Corporation Method and apparatus for implementing rounding in decoding an audio signal
US6236960B1 (en) * 1999-08-06 2001-05-22 Motorola, Inc. Factorial packing method and apparatus for information coding
AU7486200A (en) * 1999-09-22 2001-04-24 Conexant Systems, Inc. Multimode speech encoder
JP3960932B2 (ja) 2002-03-08 2007-08-15 日本電信電話株式会社 ディジタル信号符号化方法、復号化方法、符号化装置、復号化装置及びディジタル信号符号化プログラム、復号化プログラム
JP3731575B2 (ja) * 2002-10-21 2006-01-05 ソニー株式会社 符号化装置及び復号装置
KR100487719B1 (ko) * 2003-03-05 2005-05-04 한국전자통신연구원 광대역 음성 부호화를 위한 엘에스에프 계수 벡터 양자화기
WO2004090864A2 (en) * 2003-03-12 2004-10-21 The Indian Institute Of Technology, Bombay Method and apparatus for the encoding and decoding of speech
CN1240050C (zh) * 2003-12-03 2006-02-01 北京首信股份有限公司 一种用于语音编码的固定码本快速搜索方法
US7961890B2 (en) * 2005-04-15 2011-06-14 Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung, E.V. Multi-channel hierarchical audio coding with compact side information
US8255207B2 (en) 2005-12-28 2012-08-28 Voiceage Corporation Method and device for efficient frame erasure concealment in speech codecs
US7461106B2 (en) * 2006-09-12 2008-12-02 Motorola, Inc. Apparatus and method for low complexity combinatorial coding of signals
CN100530979C (zh) * 2006-09-13 2009-08-19 华为技术有限公司 一种矢量量化方法及矢量量化器
CN101345530B (zh) * 2007-07-11 2010-09-15 华为技术有限公司 一种矢量量化方法及矢量量化器
TWI433545B (zh) * 2007-10-30 2014-04-01 Nippon Telegraph & Telephone 影像編碼裝置及影像解碼裝置
EP3367381B1 (en) * 2008-02-15 2020-09-02 Nokia Technologies Oy Audio quantizing by reduced-complexity vector indexing
EP2304722B1 (en) * 2008-07-17 2018-03-14 Nokia Technologies Oy Method and apparatus for fast nearest-neighbor search for vector quantizers
CN102081926B (zh) 2009-11-27 2013-06-05 中兴通讯股份有限公司 格型矢量量化音频编解码方法和系统
CN102222505B (zh) * 2010-04-13 2012-12-19 中兴通讯股份有限公司 可分层音频编解码方法系统及瞬态信号可分层编解码方法
CN101986630B (zh) * 2010-10-18 2012-11-21 武汉大学 球面矢量量化编解码方法
US9009036B2 (en) * 2011-03-07 2015-04-14 Xiph.org Foundation Methods and systems for bit allocation and partitioning in gain-shape vector quantization for audio coding
US8838442B2 (en) * 2011-03-07 2014-09-16 Xiph.org Foundation Method and system for two-step spreading for tonal artifact avoidance in audio coding
FI3547261T3 (fi) * 2012-03-29 2023-09-26 Ericsson Telefon Ab L M Vektorikvantisoija
US8749408B1 (en) * 2012-12-27 2014-06-10 Mediatek Singapore Pte. Ltd. Methods for simplified MMI VQ based HARQ buffer reduction for LTE
US9560386B2 (en) * 2013-02-21 2017-01-31 Mozilla Corporation Pyramid vector quantization for video coding
US9425820B2 (en) * 2013-06-03 2016-08-23 Mozilla Corporation Vector quantization with non-uniform distributions
WO2015069177A1 (en) 2013-11-07 2015-05-14 Telefonaktiebolaget L M Ericsson (Publ) Methods and devices for vector segmentation for coding
MX365684B (es) 2013-11-12 2019-06-11 Ericsson Telefon Ab L M Codificacion de vector de ganancia y forma dividida.
CN109905718B (zh) 2014-02-27 2023-05-12 瑞典爱立信有限公司 用于棱椎矢量量化编索引和解索引的方法和装置
NZ726879A (en) * 2014-07-28 2017-10-27 ERICSSON TELEFON AB L M (publ) Pyramid vector quantizer shape search

Also Published As

Publication number Publication date
JP6574287B2 (ja) 2019-09-11
EP2992529A1 (en) 2016-03-09
PL2992529T3 (pl) 2017-03-31
ZA201802791B (en) 2019-07-31
SG10201704724TA (en) 2017-07-28
HUE042095T2 (hu) 2019-06-28
RU2018128976A3 (es) 2021-10-20
US20160027449A1 (en) 2016-01-28
CA2955765C (en) 2018-02-13
JP2020010353A (ja) 2020-01-16
EP3065135B1 (en) 2018-12-26
TR201901612T4 (tr) 2019-02-21
KR101777994B1 (ko) 2017-09-13
SG11201609926YA (en) 2016-12-29
AU2015297066B2 (en) 2017-09-07
EP3065135A1 (en) 2016-09-07
AR101332A1 (es) 2016-12-14
ES2785041T3 (es) 2020-10-05
PT2992529T (pt) 2016-08-18
HUE028802T2 (en) 2017-01-30
JP2018156099A (ja) 2018-10-04
KR20170020540A (ko) 2017-02-22
AU2019204328B2 (en) 2020-05-28
US20170301359A1 (en) 2017-10-19
JP2016527527A (ja) 2016-09-08
CN109979470B (zh) 2023-06-20
JP6644939B2 (ja) 2020-02-12
JP6347872B2 (ja) 2018-06-27
CA2955765A1 (en) 2016-02-04
NZ726879A (en) 2017-10-27
MY177842A (en) 2020-09-23
AU2017265085A1 (en) 2017-12-14
US9792922B2 (en) 2017-10-17
EP3467825B1 (en) 2020-01-22
RU2762329C2 (ru) 2021-12-17
ES2586712T3 (es) 2016-10-18
EP2992529B1 (en) 2016-05-25
RU2018128976A (ru) 2019-03-14
JP6170575B2 (ja) 2017-07-26
KR20170102047A (ko) 2017-09-06
US20230086320A1 (en) 2023-03-23
AU2019204328A1 (en) 2019-07-11
US11942102B2 (en) 2024-03-26
CN109979470A (zh) 2019-07-05
SG10202000575WA (en) 2020-03-30
EP3633675B1 (en) 2021-04-28
RU2017106160A3 (es) 2018-08-28
CN105431901A (zh) 2016-03-23
PT3633675T (pt) 2021-06-01
KR20190027959A (ko) 2019-03-15
MX2018006677A (es) 2021-06-29
CN105431901B (zh) 2019-03-19
MX357398B (es) 2018-07-06
AU2015297066A1 (en) 2016-12-15
ES2718049T3 (es) 2019-06-27
AU2017265085B2 (en) 2019-07-11
KR101959156B1 (ko) 2019-03-15
MX2021007880A (es) 2022-12-06
PL3633675T3 (pl) 2021-11-15
EP3467825A1 (en) 2019-04-10
IL249104A (en) 2017-11-30
JP2017216696A (ja) 2017-12-07
RU2017106160A (ru) 2018-08-28
IL249104A0 (en) 2016-12-29
ZA201902319B (en) 2020-08-26
MX2016016095A (es) 2017-03-10
DK2992529T3 (en) 2016-08-29
WO2016018185A1 (en) 2016-02-04
RU2665898C2 (ru) 2018-09-04
KR102034419B1 (ko) 2019-10-18
EP3633675A1 (en) 2020-04-08
DK3065135T3 (en) 2019-03-25
PL3467825T3 (pl) 2020-08-10

Similar Documents

Publication Publication Date Title
ES2874511T3 (es) Búsqueda de forma de cuantificador de vector en pirámide
ES2646021T3 (es) Método y aparato para codificación, procesamiento y decodificación de envolvente de señal de audio mediante modelado de una representación de suma acumulativa que emplea cuantificación de distribución y codificación
ES2635026T3 (es) Aparato y procedimiento de codificación, procesamiento y decodificación de envolvente de señal de audio por división de la envolvente de la señal de audio utilizando cuantización y codificación de distribución
BR112016030902B1 (pt) Método para pesquisa de formato por quantizador vetorial em pirâmide, codificador, e, dispositivo de comunicação
OA18156A (en) Pyramid vector quantizer shape search