ES2586712T3 - 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
ES2586712T3
ES2586712T3 ES15733942.5T ES15733942T ES2586712T3 ES 2586712 T3 ES2586712 T3 ES 2586712T3 ES 15733942 T ES15733942 T ES 15733942T ES 2586712 T3 ES2586712 T3 ES 2586712T3
Authority
ES
Spain
Prior art keywords
vector
loop
tmp
pulse
max
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
ES15733942.5T
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 ES2586712T3 publication Critical patent/ES2586712T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/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
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/0017Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/002Dynamic bit allocation
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/02Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using spectral analysis, e.g. transform vocoders or subband vocoders
    • G10L19/032Quantisation or dequantisation of spectral components
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/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 TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/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 TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L2019/0001Codebooks
    • G10L2019/0013Codebook search algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Signal Processing (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Transmission And Conversion Of Sensor Element Output (AREA)
  • Analogue/Digital Conversion (AREA)

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 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 (102, 204), 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 bucle de dimensión interior próximo (103).

Description

imagen1
imagen2
imagen3
imagen4
imagen5
5
10
15
20
25
30
35
imagen6
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:
imagen7
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.
imagen8
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 imagen9 imagen10K pulsos unidad a la primera
posición 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:
imagen11
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/2^15= 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/2^12), 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.
imagen12
imagen13
5
10
15
20
25
30
35
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.
imagen14
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 bestCorrSq16 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).
bits requeridos para PVQ(N,K)
N=8 N=16 N=32
K=4
11,4594 15,4263 19,4179
K=5
13,2021 18,1210 23,1001
K=6
14,7211 20,5637 26,5222
K=7
16,0631 22,7972 29,7253
imagen15
imagen16
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
5 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
10 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.
imagen17
Si además hay pulsos unidad a añadir, es decir, cuando pulsetot < K, se inicia un nuevo bucle interior con un nuevo
15 análisis corrupshift 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
20 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
25 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.
imagen18
Anteriormente, se presentaron y especificaron dos metodologías de precisión: 5
10
15
20
25
30
35
40
“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 “En16 x CorrSq32” 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 Energía mejor bestEn16 hasta ahora, según:
imagen19
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 bestCorrSq16 hasta ahora, según:
imagen20
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”.
5
10
15
20
25
30
35
40
45
50
55
60
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.
imagen21
imagen22
imagen23
imagen24
5
10
15
20
25
30
35
40
45
50
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
5 -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
10 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 15 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
20 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
25 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
30 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 35 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
40 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.
45 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 50 bajos. Como se explicó anteriormente, el umbral se podría fijar para ser igual a cero en una realización. Se podría
5
10
15
20
25
30
35
40
45
50
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 imagen25
los K pulsos unidad a una primera posición ( ) y los pulsos unidad restantes a una última posición (y[N1]=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.
imagen26
imagen27
static Word 16 max_val_fx( /* o : valor máximo en el vector de entrada */ const Word16 *vec, /* i : vector de entrada */ const Word16 lvec /* i : longitud de vector de entrada */ ) { Word16 j,tmp; tmp = vec[0]; move16(); FOR ( j=1 ; j<lvec ; j++ ) { tmp = s_max(vec[j],tmp); } return tmp; }
/* El bucle de búsqueda interior para un único pulso unidad adicional, que comienza desde pulse_tot, con información acerca de la precisión/reducción de energía requerida para el bucle tenue en en_dn_shift y el valor absoluto de max_xabs actual a ser usado para un cambio ascendente de correlación casi óptima, devuelve el índice del pulso unidad colocado mejor en imax */ static Word16 one_pulse_search(const Word16 dim, /* dimension de vector */ const Word16* x_abs, /* valores de vector absolutos */ Word16* y, /* vector de salida */ Word16 *pulse_tot_ptr, Word32* L_xy_ptr, /* correlación acumulada */ Word32* L_yy_ptr, /* energía acumulada */ Word16 high_prec_active, Word16 en_dn_shift, Word16 max_xabs) /* amplitud máxima acumulada actual para pulsos */ { Word16 i, corr_up_shift, corr_tmp, imax, corr_sq_tmp, en_max_den, cmax_num, en_tmp; Word32 L_tmp_en_lc, L_tmp_corr ; Word32 L_tmp_en, L_en_max_den, L_corr_sq_max, L_tmp_corr_sq; Word32 L_left_h, L_right_h;
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 1ª 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 */
imax = i; move16(); /* 1 op. */ }
}/* tenue */ } ELSE { /* Sección de alta resolución activada cuando la energía de vector está llegando a ser alta (con picos o muchos
pulsos) */ /* Operador BASOP Mpy32_32_ss usado para permitir resolución más alta tanto para el término CorrSq como Energía */ /* Rendimiento: cercano a referencia flotante */
L_en_max_den = L_deposit_l(0); /* 1 op */ L_corr_sq_max = L_deposit_l(-1); /* solicitar forzar una 1ª actualización */ /* 1 op. */
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 );/* valor de WC dentro del bucle real */ Mpy_32_32_ss(L_tmp_corr,L_tmp_corr, &L_tmp_corr_sq, &UL_dummy); /* CorrSq 32 bits, 4 op. */
L_tmp_en = L_mac(*L_yy_ptr, 1, y[i]); /* Q1,la energía puede extenderse hasta señalar
+19 bits , 1 op. */ /* Para una exactitud de más alta usar pares de valores con signo de 32x32 bits cambiados ascendentemente máximos */
/* (L_tmp_corr_sq / L_tmp_en) > (L_corr_sq_max/L_en_max_den) */
/* (L_tmp_corr_sq * L_en_max_den) > (L_corr_sq_max * L_tmp_en) */ Mpy_32_32_ss( L_en_max_den, L_tmp_corr_sq, &L_left_h, &UL_left_I); /* 4 op. */ Mpy_32_32_ss( L_tmp_en, L_corr_sq_max, &L_right_h, &UL_right_I); /* 4 op. */
/* comparación de 32/64 bits WC (1+1+2x2+4 +(2+2+1) = 15 */ L_tmp = L_sub(L_left_h, L_right_h); /* comprobar palabra con signo alta 1 op. */
UL_tmp = UL_subNs(UL_right_I, UL_left_I, &u_sgn);
/* comprobar palabra con signo baja, señalar conmutador debido a ">=" en UL_subNs, 1 op. */ IF( ( L_tmp >0) || (L_tmp ==0) && (u_sgn !=0))) /* SI 4 op. */ {
L_corr_sq_max = L_tmp_corr_sq; move32(); /* 2 op. */
L_en_max_den = L_tmp_en; move32(); /* 2 op. */ imax = i; move16(); /* 1 op. */ } } /* bucle tenue */ }/* finalmente añadir contribución de pulso unidad encontrada a L_xy, Lyy pasados, para el siguiente bucle de pulso */
*L_xy_ptr = L_mac(*L_xy_ptr, x_abs[imax], 1); /* xy_flt += xabs[imax]; Q12+1 */ *L_yy_ptr = L_mac(*L_yy_ptr, 1, y[imax]); /* yy_flt += y[imax]; */ y[imax] = add(y[imax], 1); move16(); /* pulso añadido de Q0 */ (*pulse_tot_ptr) = add((*pulse_tot_ptr) ,1); /* incremento de suma de pulsos total */ return imax; }
/*----------------------------------------------------------------------* * Función pvq_encode_fx() * * * * Algoritmo de búsqueda de PVQ básico: * * Proyección de norma L1 selectiva a la pirámide ~(K-1) menor * * seguida por una búsqueda fina de adición de pulso unidad tipo ACELP * *----------------------------------------------------------------------*/ void pvq_encode_fx( Encoder_State_fx *st_fx, const Word 16 *x, /* i: vector para cuantificar Q15-3=>Q12 */ Word16 *y, /*o: pulsos en bruto de Q0 (corto no escalado) */ Word16 *xq, /*o: vector cuantificado Q15 */ const short pulses, /* i: número de pulsos asignados */ const short dim, /* i: Longitud de vector == N */ const Word16 neg_gain /* i: -Ganancia de Subvector usamos –ganancia negativa en Q15 0..1 ) { Word16 i; Word16 pulse_tot; Word16 xabs[PVO_MAX_BAND _SIZE]; Word16 max_xabs; Word32 L_xsum; Word32 L_proj_fac; Word32 L_yy, L_xy; Word16 max_amp_y, imax; Word16 k, en_margin, en_dn_shift, high_prec_active ; Word32 L_num, L_tmp; Word16 proj_fac, tmp, shift_den,shift_num,shift_delta, num,den; UWord16 u16_tmp; Word16 dim_m1; Word32 L_isqrt; Word16 neg_gain_norm, shift_tot; Word16 high_pulse_density_flag;
*/
PvqEntry_fx entry;
/* Crear vector absoluto y calcular suma de vector abs */ L_xsum = L_deposit_h(0); max_xabs = -1; move16(); FOR( i =0; i < dim; i++) { xabs[i] = abs_s(x[i]); move16(); /* Q12 */ max_xabs = s_max(max_xabs, xabs[i] ); /* para escalado de correlación de búsqueda eficiente */ L_xsum = L_mac0(L_xsum, 1, xabs[i] ); /* permanecer en Q12 */ y[i] =0; move16(); /* inic. */ }
test(); IF( L_xsum ==0 || neg_gain ==0 ) { /* entrada cero o caso de ganancia cero */ /* poner una suma de “medios” pulsos primero y último o todos los pulsos en pos. 0 */ pulse_tot = pulses; move16(); dim_m1 = sub(dim,1); y[dim_m1] = 0; move16(); y[0] = shr(pulses, 1); move16(); y[dim_m1] = add(y[dim_m1], sub(pulses, y[0])); move16(); L_yy = L_mult(y[0],y[0]); /* L_yy necesario para normalización */ if(dim_m1 !=0) { L_yy = L_mac(L_yy, y[dim_m1],y[dim_m1]); /*( basop único) */ } }
ELSE { /* búsqueda habitual */ /* proj_fac_flt = (pulses -1)/xsum_flt; */ /* normalizar a norma L1 = pirámide k-1 absoluta */ num = sub(pulses, 1); high_pulse_density_flag =0; move16(); if ( sub(pulses, shr(dim, 1)) >0) { high_pulse_density_flag = 1; move16(); } test(); IF( (num >0) && (high_pulse_density_flag !=0)) { shift_den = norm_l(L_xsum); /* entrada x_sum Q12 */
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) + 1^2 % 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.: 1^2 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)^2, 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(127^2) = 13,9774 bits, encaja en Q1 con signo, con Q1 la división previa por 2 trabajos
k=255=>log2(255^2) = 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 , ( (127^2)*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; move16();
} /* 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 */
imagen28
Pulsos <= 127, Algoritmo En{energy-bits} x CorrSq{corrSq-bits}
SNR Min (dB) SegSNR(dB) vectores idénticos % WMOPS de Caso Peor WMOPS Media Observación
"En16 x CorrsSq16" que usa un método de escalado de correlación de la técnica conocida “OPUS”, usando un número de pulsos unidad acumulado.
-6,021 180,556 94,6 6,826 5,476 El algoritmo es el peor bit (minSNR menor menos impactos idénticos) en una complejidad muy similar
"En32 x CorrSq16" bloqueado, analizar previamente max(x_abs)
4,771 188,803 99,3 8,970 6,961 Innecesario usar En32 para pulsos <=127, ya que la energía nunca excede dinámica de 16 bits
"En16 x CorrSq32" bloqueado, analizar previamente entrada max(x_abs)
190,0 190,0 100 9,386 7,248 2,5 WMOPS extra requeridas para los últimos 0,7% impactos
"En32 x CorrSq32" bloqueado, analizar previamente max(x_abs)
190,0 190,0 100 10,474 7,999 0,9 WMOPS innecesarias aumentan comparado con “En16xCorrSq32”Bloqueado
Tabla 2 Resultados para K > 127
Pulsos > 127, Algoritmo En{energy-bits} x CorrSq{corrSq-bits}
minSNR (dB) segSNR (dB) vectores idénticos % WMOPS de Caso Peor WMOPS Media Observación
AccEn mezclado controlado"En16xCorrSq16’/"E n32x CorrSq32’, pre_analyze entrada, precisión controlada de energía acumulada
32,686 160,316 80,4% 6,843 (WC aún desde secciones 16x16) 5,496 Una solución bastante buena WC aún es para 16x16, WC no se aumenta
AccEn mezclado controlado"En16xCorrSq16’/ "En16x CorrSq32’ pre_analyze entrada, precisión controlada de energía acumulada
32,686 130,258 59,3% n/a n/a La información de energía se trunca ocasionalmente causando SNR baja
AccEn mezclado controlado"En16 x CorrSq16’/"En32x CorrSq16’ pre_analyze entrada, precisión controlada de energía acumulada
32,686 117,634 50,6% n/a n/a La información de correlación tiene baja precisión, causando baja SNR
Pulsos > 127, Algoritmo En{energy-bits} x CorrSq{corrSq-bits}
minSNR (dB) segSNR (dB) vectores idénticos % WMOPS de Caso Peor WMOPS Media Observación
"En16 x CorrSq16’ bloqueado, pre_analyze entrada,
32,686 113,629 47,8% n/a n/a La información de energía truncada ocasionalmente y la información de correlación tiene baja precisión, causando SNR baja
"En32 x CorrSq16’ bloqueado, pre_analyze entrada
32,686 117,634 50,6% n/a n/a La información de correlación tiene baja precisión, causando SNR baja
"En16 x CorrSq32’ bloqueado, pre_analyze entrada
40,994 159,714 78,8% n/a n/a La información de energía se trunca ocasionalmente , causando SNR baja
"En32 x CorrSq32’bloqueado, pre_analyze entrada
49,697 189,773 99,8% 7,1 5,7 WC ahora en sección 32x32, WC de complejidad más alta

Claims (1)

  1. imagen1
    imagen2
    imagen3
ES15733942.5T 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide Active ES2586712T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462029586P 2014-07-28 2014-07-28
US201462029586P 2014-07-28
PCT/SE2015/050743 WO2016018185A1 (en) 2014-07-28 2015-06-25 Pyramid vector quantizer shape search

Publications (1)

Publication Number Publication Date
ES2586712T3 true ES2586712T3 (es) 2016-10-18

Family

ID=53502817

Family Applications (4)

Application Number Title Priority Date Filing Date
ES16165702T Active ES2718049T3 (es) 2014-07-28 2015-06-25 Búsqueda de forma de cuantificador de vector en pirámide
ES15733942.5T Active ES2586712T3 (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
ES19209199T Active ES2874511T3 (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
ES16165702T Active ES2718049T3 (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
ES19209199T Active ES2874511T3 (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) EP3467825B1 (es)
JP (4) JP6170575B2 (es)
KR (3) KR102034419B1 (es)
CN (2) CN109979470B (es)
AR (1) AR101332A1 (es)
AU (3) AU2015297066B2 (es)
CA (1) CA2955765C (es)
DK (2) DK2992529T3 (es)
ES (4) ES2718049T3 (es)
HU (2) HUE028802T2 (es)
IL (1) IL249104A (es)
MX (3) MX2018006677A (es)
MY (1) MY177842A (es)
NZ (1) NZ726879A (es)
PL (3) PL2992529T3 (es)
PT (2) PT2992529T (es)
RU (2) RU2665898C2 (es)
SG (3) SG10201704724TA (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
WO2016018185A1 (en) * 2014-07-28 2016-02-04 Telefonaktiebolaget L M Ericsson (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
EP3579418A4 (en) * 2017-08-07 2020-06-10 Shenzhen Goodix Technology Co., Ltd. DIGITAL TO ANALOG CONVERSION CIRCUIT OF VECTOR QUANTIFICATION FOR SUPER-SAMPLING CONVERTER
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 华为技术有限公司 一种矢量量化方法及矢量量化器
TWI388218B (zh) * 2007-10-30 2013-03-01 Nippon Telegraph & Telephone 影像編碼方法與解碼方法、其程式及記錄有程式的記錄媒體
KR101170137B1 (ko) * 2008-02-15 2012-07-31 노키아 코포레이션 복잡성이 축소된 벡터 인덱싱 및 탈-인덱싱
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 武汉大学 球面矢量量化编解码方法
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
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
ES2745143T3 (es) * 2012-03-29 2020-02-27 Ericsson Telefon Ab L M Cuantificador vectorial
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
BR112016010273B1 (pt) 2013-11-07 2022-05-31 Telefonaktiebolaget Lm Ericsson (Publ) Método para particionamento de vetores de entrada para codificação de sinais de áudio, unidade de particionamento, codificador e meio não-transitório legível por máquina
MX365684B (es) 2013-11-12 2019-06-11 Ericsson Telefon Ab L M Codificacion de vector de ganancia y forma dividida.
CN110033779B (zh) 2014-02-27 2023-11-17 瑞典爱立信有限公司 用于棱椎矢量量化编索引和解索引的方法和装置
WO2016018185A1 (en) * 2014-07-28 2016-02-04 Telefonaktiebolaget L M Ericsson (Publ) Pyramid vector quantizer shape search

Also Published As

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

Similar Documents

Publication Publication Date Title
ES2586712T3 (es) Búsqueda de forma de cuantificador de vector en pirámide
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
OA18156A (en) Pyramid vector quantizer shape search