ES2880779T3 - Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video - Google Patents

Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video Download PDF

Info

Publication number
ES2880779T3
ES2880779T3 ES15713034T ES15713034T ES2880779T3 ES 2880779 T3 ES2880779 T3 ES 2880779T3 ES 15713034 T ES15713034 T ES 15713034T ES 15713034 T ES15713034 T ES 15713034T ES 2880779 T3 ES2880779 T3 ES 2880779T3
Authority
ES
Spain
Prior art keywords
sign
index
vector
coefficient
indexing
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
ES15713034T
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=52774513&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=ES2880779(T3) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Telefonaktiebolaget LM Ericsson AB filed Critical Telefonaktiebolaget LM Ericsson AB
Application granted granted Critical
Publication of ES2880779T3 publication Critical patent/ES2880779T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • 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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/94Vector quantisation

Landscapes

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

Abstract

Un método para la indexación de cuantificación vectorial piramidal de muestras de audio/video, en donde dicho método comprende los pasos de: obtener (402) un vector de entrada que representa muestras de señales de audio/video, teniendo dicho vector de entrada un número de coeficientes de valores enteros; indexar (406) dicho vector de entrada con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con un signo principal representan dichos coeficientes de valores enteros, siendo dicho signo principal un signo de un último coeficiente distinto de cero en dicho vector de entrada en una dirección de procesamiento de dicho vector de entrada; en donde dicho paso de indexación (406) se realiza mediante un procedimiento de enumeración iterativo que comprende la repetición de una iteración, en el que un coeficiente actual y una dimensión actual de dicho vector de entrada se seleccionan para su consideración; dicha iteración que comprende: actualizar (330) un desplazamiento de indexación que representa el número de vectores de dimensión n y norma L1 de k, donde n es la dimensión actual y k es el número de pulsos unitarios que se han contabilizado antes de dicho coeficiente actual; aumentar un índice acumulado (324) mediante dicho desplazamiento de indexación; para cada coeficiente distinto de cero después del primer coeficiente distinto de cero, duplicar (312) el índice acumulado y añadir al índice acumulado un valor de una siguiente indicación de signo que indica un signo de un coeficiente anterior distinto de cero; para cada coeficiente distinto de cero, establecer (318, 322) la siguiente indicación de signo para indicar un signo del coeficiente actual distinto de cero; en donde dicha repetición continúa con los coeficientes de dicho vector de entrada que se seleccionan uno tras otro como dicho coeficiente actual hasta que se hayan considerado todos los coeficientes de dicho vector de entrada; dicho procedimiento de enumeración iterativa que comprende un paso de terminación en el que dicho índice de salida se establece igual a dicho índice acumulado y dicho signo principal se establece igual a la indicación del siguiente signo actual después de que se hayan terminado todos los pasos de iteración; y emitir (408) dicho signo principal como primera palabra de código y dicho índice de salida como segunda palabra de código en un flujo de bits saliente.

Description

DESCRIPCIÓN
Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video
Campo técnico
La tecnología propuesta generalmente se refiere a la codificación/decodificación de señales de audio/video y, en particular, a métodos y aparatos para indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video.
Antecedentes
Cuando se van a transmitir o almacenar señales de audio o video, las señales típicamente se codifican. En un codificador, los vectores que representan muestras de señales de audio/video se codifican para ser representados por una serie de coeficientes o parámetros. Estos coeficientes o parámetros pueden luego transmitirse o almacenarse de manera eficiente. Cuando se reciben o recuperan los coeficientes o parámetros, se realiza una decodificación de los coeficientes o parámetros en muestras de señales de audio/video para recuperar la señal de audio/video original. Se han utilizado muchos tipos diferentes de técnicas de codificación para señales de audio/video.
Un enfoque se basa en la cuantificación vectorial (VQ). Se sabe que la cuantificación vectorial (VQ) sin restricciones es el método de cuantificación óptimo para muestras agrupadas (vectores) de una determinada longitud. Sin embargo, las limitaciones de la memoria y la complejidad de la búsqueda han llevado al desarrollo de cuantificadores vectoriales estructurados. Las diferentes estructuras ofrecen diferentes compromisos en términos de complejidad de búsqueda y requisitos de memoria. Uno de tales métodos es la cuantificación vectorial de gananciaforma, donde el vector objetivo x se representa usando un vector de forma vec y una ganancia G:
vec x = —
G
El concepto es, en lugar de cuantificar directamente el vector objetivo, cuantificar pares de {vec, G}. Los componentes de ganancia y forma se codifican entonces utilizando 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 se usa bien en, por ejemplo, codificación de audio ya que la división en dinámica y forma (o estructura fina) encaja bien con el modelo auditivo perceptivo.
En primer lugar, se busca una entrada válida en el cuantificador vectorial estructurado seleccionado utilizando el conocimiento de la estructura (por ejemplo, normalización de L1 (amplitud absoluta) o normalización de L2 (energía)). Después de que se ha encontrado un vector válido, es necesario crear de manera eficiente un índice (o palabra de código) que represente ese vector específico y luego transmitir ese índice al receptor. La creación del índice (también conocida como indexación o enumeración) utilizará las propiedades de la estructura seleccionada y creará un índice único (palabra clave) para el vector encontrado en la VQ estructurada.
En el lado de recepción, el decodificador necesita descomponer eficientemente el índice en el mismo vector que se determinó en el lado del codificador. Esta descomposición se puede hacer muy poco compleja en términos de operaciones mediante el uso de una búsqueda de tablas grandes, pero luego a costa de enormes tablas de Memoria de Solo Lectura (ROM) almacenadas. Alternativamente, se puede diseñar la descomposición (también conocida como desindexación) de modo que utilice el conocimiento de la estructura seleccionada y potencialmente también las operaciones numéricas de hardware de destino disponibles para descomponer algorítmicamente el índice en el vector único, de una manera eficiente.
Una VQ estructurada bien diseñada tiene un buen equilibrio entre la complejidad de búsqueda del codificador, la complejidad de la indexación del codificador y la complejidad de la desindexación del decodificador en términos de Millones de Operaciones por Segundo (MOPS) y en términos de ROM de programa y Memoria de Acceso Aleatorio (RAM) dinámica requerida, y en términos de ROM de tabla.
Muchos códec de audio tales como CELT, IETF/Opus-Audio e ITU-T G.719 utilizan una VQ de envolvente y forma y una VQ de ganancia-forma mixta de envolvente para codificar los coeficientes espectrales de la señal de audio de destino (en el dominio de la Transformada de Coseno Discreta Modificada (MDCT)). CELT/IETF OPUS-Audio usan un Cuantificador Vectorial PVQ, mientras que G.719 usa un Cuantificador Vectorial Algebraico RE8 ligeramente extendido para codificación R = 1 bit/dimensión y un cuantificador D8 Lattice de muy baja complejidad para tasas de VQ superiores a 1 bit/dimensión. PVQ representa Cuantificador Vectorial Piramidal, es una VQ que usa la norma L1 (£abs (vector)) para permitir una búsqueda rápida. También se ha descubierto que PVQ puede proporcionar una indexación bastante eficiente. El PVQ existe desde hace algún tiempo, pero Fischer lo desarrolló inicialmente en 1983-86.
Los cuantificadores PVQ también se han utilizado para codificar muestras de dominio residual de Predicción Lineal (LP) y dominio de tiempo en codificadores de voz, y para codificar coeficientes de T ransformada de Coseno Discreta (DCT) en el dominio de frecuencia. Una ventaja de la PVQ en comparación con otras VQ estructuradas es que, naturalmente, puede manejar cualquier dimensión vectorial, mientras que otras VQ estructuradas a menudo se limitan a que la dimensión sea múltiplo, por ejemplo, múltiplos de 4 o múltiplos de 8.
El códec IETF/OPUS en modo Audio está empleando un esquema recursivo de indexación y desindexación de PVQ que tiene un tamaño máximo de índices de PVQ/palabras de código (cortas) establecidas en 32 bits. Si el vector de destino que se va a cuantificar requiere más de 32 bits, el vector de destino original se divide recursivamente en mitades en dimensiones inferiores, hasta que todos los subvectores encajan en el dominio de indexación de la palabra de código corta de 32 bits. En el curso de la división de dimensión binaria recursiva hay un costo añadido de agregar una palabra de código para codificar la relación de energía (las energías relativas, que pueden ser representadas por un ángulo cuantificado) entre los dos subvectores de destino divididos. En OPUS-Audio, la búsqueda de PVQ estructurada se realiza en los subvectores de destino de dimensión más pequeña divididos resultantes.
El códec CELT original (desarrollado por Valin, Terribery y Maxwell en 2009), está empleando un esquema de indexación/desindexación de PVQ similar, (con un límite de palabra de código de 32 bits) pero la división de dimensión binaria en CELT se realiza en el dominio de indexación después de buscar y después de establecer el vector de PVQ estructurada inicial. El vector PVQ entero a indexar se reduce entonces recursivamente a subunidades del vector de PVQ menores o iguales que 32 bits en el dominio entero. Esto se logra nuevamente agregando una palabra de código adicional para la división, esta vez para la relación entera entre el subvector entero 'izquierdo' y el subvector entero 'derecho', de modo que se pueda conocer la norma L1 de cada uno de los subvectores de PVQ en el decodificador. El enfoque de división de indexación de enteros posterior a la búsqueda de CELT conduce a una tasa variable (índice de tamaño total variable), que puede ser una desventaja si el transporte de medios requiere una codificación de tasa fija.
En 1997 y 1998 Hung, Tsern y Meng, investigaron la robustez del error de algunas variaciones de indexación de PVQ, resumieron el problema de enumeración (indexación) de PVQ de esta manera (1 es la dimensión del vector y k es el número de pulsos unitarios):
"La enumeración asigna un índice único a todos los vectores posibles en el libro de códigos de PVQ, P (l, k), impartiendo un orden de clasificación a los vectores del libro de códigos de PVQ".
"La clasificación sistemática para la enumeración se realiza a través de fórmulas de recuento para el número de vectores en la pirámide; este es un concepto común a todas las técnicas de enumeración de pirámides".
"El número de vectores en el libro de códigos de la pirámide P (l, k) se denota N (l, k). Esto está relacionado con una longitud de índice de palabra de código binaria que es techo(log2 (N (l, k))) bits. N (l, k) se puede ver como el número de formas en que l valores enteros en un vector pueden tener una suma absoluta de k".
Hung et al, estudiaron la robustez del error de bit de las palabras de código de PVQ para un par de variaciones de esquemas de enumeración/indexación de PVQ, pero no enfocaron el estudio en hacer que la implementación de la enumeración de PVQ sea eficiente y de una complejidad suficientemente baja para un implementación real del hardware. Las implementaciones de PVQ de CELT y ÉTF/OPUS-Audio de la indexación de PVQ están fuertemente enfocadas a proporcionar una enumeración compleja lo más baja posible (tanto codificación como decodificación), dado un hardware basado en enteros sin signo de 32 bits, pero sin tener en cuenta la sensibilidad de PVQ a los errores de bits. También en 1999 Ashley propuso una forma de reducir la complejidad para implementar la enumeración de PVQ de código de producto mediante el uso de una aproximación determinista de baja complejidad de la función combinatoria binomial utilizada para el cálculo de tamaño y cálculo de desplazamiento, Ashley et al llaman a esta técnica Codificación de Pulso Factorial (FPC), y se ha empleado en el estándar de códec de voz ITU-G.718.
En CELT e IETF/OPUS-Audio, la palabra de código de PVQ no está limitada por la granularidad de un solo bit. Los dos códec utilizan un esquema de granularidad más alto, usando una resolución de un octavo (1/8) de bits. Esto se logra mediante el uso de un codificador/decodificador aritmético como un paso intermedio en la interfaz para el flujo de bits de transporte, (CELT/OPUS-Audio utiliza una implementación de un codificador/decodificador de rango como el codificador/decodificador aritmético) donde el número de bits utilizado por la palabra de código de PVQ se puede convertir en bits fraccionarios. Con una resolución de bits BITRES = 8 (octavos), la longitud de la palabra de código de PVQ fraccional se convierte en techo (log2 (N (l, k) * BITRES))/BITRES. Por ejemplo, si l = 64, k = 5 y BITRES = 8, esto conduce a que NPVQ = N (l, k) = 286680704, log2 (NPVQ) = 28,0948696 y techo (log2 (NPVQ) * BITRES)/BITRES = 28,125 bits. Al usar bits fraccionarios, habrá mucha menos pérdida de truncamiento para muchos de los tamaños de palabras de código de PVQ N (l, k) y, especialmente cuando un códec está usando muchas llamadas/instancias de un cuantificador de PVQ, esto aumentará la eficiencia del códec.
Un problema general con la cuantificación vectorial estructurada es encontrar un compromiso global adecuado que incluya los métodos para una búsqueda eficiente, una indexación eficiente de palabras de código y una desindexación eficiente de palabras de código.
Las palabras de código de índice largas (por ejemplo, una palabra de código entera de 400 bits) proporcionan una mayor sobrecarga de complejidad en los cálculos de indexación y desindexación (y se necesitarán rutinas de software especiales para multiplicar y dividir estos números enteros grandes en la composición y descomposición de la palabra de código larga).
Las palabras de código de índice corto pueden usar operadores de hardware eficientes (por ejemplo, instrucciones de Datos Múltiples de Instrucción Única (SIMD) en un Procesador de Señal Digital (DSP) de 32 bits), sin embargo, a costa de requerir la división previa de los vectores de VQ de destino (como en IETF/OPUS-Audio), o después de la búsqueda dividiendo el vector de resultado de búsqueda de PVQ entero (como en CELT original). Estos métodos de división de dimensiones agregan un costo de transmisión para la palabra de código de información de división (sobrecarga de división), y cuanto más cortas son las posibles palabras de código de índice, se requiere un número más alto de divisiones y el resultado es una sobrecarga aumentada para la división de palabras de código de índice largo. Por ejemplo, las palabras de código de PVQ cortas de 16 bits darán como resultado muchas más divisiones que las palabras de código cortas de 32 bits y, por lo tanto, una sobrecarga más alta para la división.
El PVQ (Cuantificador Vectorial Piramidal) permite fácilmente una búsqueda muy eficiente, a través de la normalización L1. Típicamente, se crea el vector objetivo normalizado de suma absoluta, seguido del truncamiento (o redondeo) del valor del vector y luego se ejecuta un conjunto limitado de iteraciones correctivas para alcanzar la norma L1 objetivo (k) para el vector de PVQ (PVQ-vec).
El problema de los esquemas de indexación de palabras de código cortas de la técnica anterior CELT/OPUS mencionados anteriormente es que están limitados a un rango de enteros de 32 bits (enteros de 32 bits sin signo) y, además, no pueden implementarse de manera eficiente en una arquitectura de DSP que solo admite instrucciones rápidas para enteros de 32 bits con signo.
Compendio
Es un objeto de la tecnología presentada aquí expandir el tamaño de los vectores indexados por PVQ que se pueden procesar en un hardware que tiene un tamaño de bit de operación óptimo.
Este y otros objetivos se cumplen mediante realizaciones de la tecnología propuesta.
Según un primer aspecto, se proporciona un método para la indexación de cuantificación vectorial piramidal de muestras de audio/video. El método comprende la obtención de un vector de entrada, cuyo vector de entrada representa muestras de señales de audio/video y tiene un número de coeficientes de valores enteros. El método comprende indexar el vector de entrada con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con un signo principal representan los coeficientes de valores enteros, y el signo principal es un signo de un último coeficiente distinto de cero en el vector de entrada en una dirección de procesamiento del vector de entrada. El paso de indexación se realiza mediante un procedimiento de enumeración iterativo que comprende la repetición de una iteración, en la que se selecciona un coeficiente actual y una dimensión actual del vector de entrada para su consideración. La iteración comprende actualizar un desplazamiento de indexación que representa el número de vectores de dimensión n y norma L1 de k, donde n es la dimensión actual y k es el número de pulsos unitarios que se han contabilizado antes del coeficiente actual, aumentando un índice acumulado por el desplazamiento de indexación, y para cada coeficiente distinto de cero después del primer coeficiente distinto de cero duplicando el índice acumulado y añadiendo al índice acumulado un valor de una siguiente indicación de signo que indica un signo de un coeficiente anterior distinto de cero. Para cada coeficiente distinto de cero, la siguiente indicación de signo se establece para indicar un signo del coeficiente actual distinto de cero. La repetición continúa con los coeficientes del vector de entrada que se seleccionan uno tras otro como el coeficiente actual hasta que se hayan considerado todos los coeficientes en el vector de entrada. El procedimiento de enumeración iterativa comprende un paso de terminación en el que el índice de salida se establece igual al índice acumulado y el signo principal se establece igual a la indicación del siguiente signo actual después de que se hayan terminado todos los pasos de iteración. El método emite el signo principal como una primera palabra de código y el índice de salida como una segunda palabra de código en un flujo de bits saliente.
En una realización, un desplazamiento de indexación, en esta descripción denotado como U (n, k), se define como el número de vectores enteros de dimensión n y norma L1 de k, que no tiene un cero principal, y no tiene el valor principal k, tiene un valor positivo principal y un tiene un signo principal siguiente positivo. El desplazamiento de indexación U se usa en esa realización para el cálculo del esquema de indexación usado en la enumeración. En otra realización, el cálculo del índice es dependiente tanto del parámetro U como de un desplazamiento de indexación, en esta descripción denotado como A (n, k), que se define como el número de vectores enteros de dimensión n y norma L1 de k, que tiene un valor principal positivo y no tiene un cero principal. En otra realización más, el cálculo del índice en la enumeración es dependiente en parte de los procedimientos de enumeración basados en U o una combinación de U y A. En otras palabras, la enumeración puede emplear una etapa inicial de enumeración de signos principales de MPVQ seguida de cualquier otro esquema de enumeración de PVQ eficiente, para el resto del vector.
Según un segundo aspecto, se proporciona un método para la desindexación de cuantificación vectorial piramidal de muestras de audio/video. El método comprende recibir, desde un flujo de bits entrante, un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código, el signo principal junto con el índice de entrada que representa coeficientes de valores enteros, cuyo signo principal es un signo de un primer coeficiente distinto de cero en un vector de salida que se va a crear, teniendo el vector de salida un número de coeficientes de valores enteros que representan muestras de señales de audio/video. El método comprende desindexar el índice de entrada en el vector de salida según un esquema de desenumeración de cuantificación vectorial piramidal, en donde el índice de entrada se ha creado mediante un esquema de enumeración de cuantificación vectorial piramidal que está diseñado para despreciar el signo del primer coeficiente distinto de cero. El paso de desindexación se realiza mediante un procedimiento de desenumeración iterativo que comprende: un paso de inicialización, en el que un índice restante se establece igual a dicho índice de entrada, y una repetición de una iteración, en la que un coeficiente actual y una dimensión n actual de dicho vector de salida se selecciona para su consideración. La iteración comprende encontrar un desplazamiento de indexación, que se define como el número de vectores enteros de dimensión n y norma L1 de k, donde k es el número de pulsos unitarios restantes, siendo el desplazamiento de indexación el desplazamiento de indexación más grande de la dimensión actual que es menor o igual que el índice restante, reduciendo el índice restante por dicho desplazamiento de indexación, y estableciendo una amplitud de dicho coeficiente actual de dicho vector de salida para que sea igual a una amplitud asociada con dicho desplazamiento de indexación. La repetición continúa con los coeficientes de dicho vector de salida que se seleccionan uno tras otro como dicho coeficiente actual hasta que dicho índice restante se vuelve igual a cero. El método comprende asignar un signo del primer coeficiente distinto de cero en el vector de salida según el signo principal recibido y emitir el vector de salida.
Según un tercer aspecto, se proporciona un codificador para indexar muestras de audio/video mediante cuantificación vectorial piramidal. El codificador está configurado para obtener un vector de entrada, cuyo vector de entrada representa muestras de señales de audio/video y tiene un número de coeficientes de valores enteros. El codificador está configurado para indexar el vector de entrada con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con el signo principal representan los coeficientes de valores enteros, y el signo principal es un signo de un último coeficiente distinto de cero en el vector de entrada en una dirección de procesamiento del vector de entrada. El codificador está configurado para realizar la indexación mediante un procedimiento de enumeración iterativo que comprende la repetición de una iteración, en la que un coeficiente actual y una dimensión actual del vector de entrada se seleccionan para su consideración. La iteración comprende actualizar un desplazamiento de indexación que representa el número de vectores de dimensión n y norma L1 de k, donde n es la dimensión actual y k es el número de pulsos unitarios que se han contabilizado antes del coeficiente actual, aumentando un índice acumulado por el desplazamiento de indexación, y para cada coeficiente distinto de cero después del primer coeficiente distinto de cero duplicando el índice acumulado y añadiendo al índice acumulado un valor de una siguiente indicación de signo que indica un signo de un coeficiente anterior distinto de cero. Para cada coeficiente distinto de cero, la siguiente indicación de signo se establece para indicar un signo del coeficiente actual distinto de cero. La repetición continúa con los coeficientes del vector de entrada que se seleccionan uno tras otro como el coeficiente actual hasta que se hayan considerado todos los coeficientes del vector de entrada. El procedimiento de enumeración iterativa comprende un paso de terminación en el que el índice de salida se establece igual al índice acumulado y el signo principal se establece igual a la indicación del siguiente signo actual después de que se hayan terminado todos los pasos de iteración. El codificador está configurado para generar el signo principal como primera palabra de código y el índice de salida como segunda palabra de código en un flujo de bits saliente.
Según un cuarto aspecto, se proporciona un decodificador para desindexar muestras de audio/video mediante cuantificación vectorial piramidal. El decodificador está configurado para recibir, desde un flujo de bits entrante, un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código, el signo principal junto con el índice de entrada que representa coeficientes de valores enteros, cuyo signo principal es un signo de un primer coeficiente distinto de cero en un vector de salida que se va a crear, teniendo el vector de salida un número de coeficientes de valores enteros que representan muestras de señales de audio/video. El decodificador está configurado para desindexar el índice de entrada en el vector de salida según un esquema de desenumeración de cuantificación vectorial piramidal, en donde el índice de entrada ha sido creado por un esquema de enumeración de cuantificación vectorial piramidal que está diseñado para descuidar el signo del primer coeficiente distinto de cero. El decodificador está configurado para realizar dicha desindexación mediante un procedimiento de desenumeración iterativo, en donde dicho procedimiento de desenumeración iterativo comprende un paso de inicialización, en el que un índice restante se establece igual a dicho índice de entrada, y una repetición de una iteración, en la que un coeficiente actual y una dimensión n actual de dicho vector de salida se seleccionan para su consideración. La iteración comprende encontrar un desplazamiento de indexación, que se define como el número de vectores enteros de dimensión n y norma L1 de k, donde k es el número de pulsos unitarios restantes, siendo dicho desplazamiento de indexación el desplazamiento de indexación más grande de la dimensión actual que es menor o igual que dicho índice restante, reduciendo dicho índice restante por dicho desplazamiento de indexación, y estableciendo una amplitud de dicho coeficiente actual de dicho vector de salida para que sea igual a una amplitud asociada con dicho desplazamiento de indexación. La repetición continúa con los coeficientes de dicho vector de salida que se seleccionan uno tras otro como dicho coeficiente actual hasta que dicho índice restante se vuelve igual a cero. El decodificador está configurado para asignar un signo del primer coeficiente distinto de cero según el signo principal recibido y para generar el vector de salida.
Una ventaja de las técnicas presentadas aquí es que reduce el rango dinámico necesario para los desplazamientos de indexación requeridos, reduciendo así las demandas sobre el tamaño de bit aceptado del hardware utilizado. El algoritmo de indexación descompone preferiblemente de forma iterativa la estructura de PVQ y los índices en secciones de signos principales. La descomposición se realiza de tal manera que, independientemente del número de elementos distintos de cero en el vector de PVQ encontrado para indexar, siempre se extrae un signo principal. Esta extracción de signos de baja complejidad permite además la creación de un rango dinámico reducido para los desplazamientos de indexación de PVQ calculados en tiempo de ejecución.
Como ejemplo particular, los algoritmos de indexación y desindexación mejorados permitirán el uso de índices de PVQ de 33 bits en hardware de DSP de 32 bits, con un costo adicional marginal en términos de MOPS, RAM, ROM y Memoria de Solo Lectura de Programa (P-ROM) en general. Además, el algoritmo permitirá el uso de índices de PVQ de 32 bits en un hardware de DSP que solo admite aritmética de 32 bits con signo.
Se apreciarán otras ventajas cuando se lea la descripción detallada.
Breve descripción de los dibujos
Las realizaciones, junto con objetos y ventajas adicionales de las mismas, pueden entenderse mejor haciendo referencia a la siguiente descripción tomada junto con los dibujos adjuntos, en los que:
la FIG. 1 es una ilustración esquemática de un sistema de codificación de audio de ejemplo;
la FIG. 2 es un diagrama de bloques esquemático de una realización de un codificador;
la FIG. 3 es un diagrama de bloques esquemático de una realización de un decodificador;
la FIG. 4 es una vista de estructura en tabla de una realización de un desplazamiento y su relación con el número total de vectores en la estructura;
la FIG. 5 es un diagrama de flujo de los pasos de una realización de un método para la indexación de cuantificación vectorial piramidal de muestras de audio/video;
la FIG. 6 es un diagrama de flujo de los pasos de una realización de una indexación de MPVQ a nivel general; la FIG. 7A-B es un diagrama de flujo de los pasos de una realización de un método para la composición del índice de MPVQ;
la FIG. 8 es una vista de estructura de alto nivel de tabla de una realización de una iteración de MPVQ básica; la FIG. 9 es un diagrama de flujo de los pasos de una combinación de tres realizaciones de una recursividad de desplazamiento de MPVQ-A/U para aumentar la dimensión;
la FIG. 10 ilustra un diagrama de flujo de los pasos de una realización de un método para la desindexación de cuantificación vectorial piramidal de muestras de audio/video;
la FIG. 11 es un diagrama de flujo de los pasos de una realización de desindexación de MPVQ;
la FIG. 12 es un diagrama de flujo de los pasos de una realización de procedimientos para encontrar tamaño y desplazamientos;
la FIG. 13 es un diagrama de flujo de los pasos de una realización de la descomposición del índice de MPVQ; la FIG. 14 es un diagrama de flujo de los pasos de una realización para encontrar una amplitud de un coeficiente siguiente;
la FIG. 15 es un diagrama de flujo de los pasos de una realización de un procedimiento para encontrar el siguiente signo principal y eliminar la información extraída del signo;
la FIG. 16 es un diagrama de flujo de los pasos de una realización de un procedimiento para actualizar el desplazamiento para una dimensión menos;
la FIG. 17A es un diagrama que presenta una descripción general de las palabras de código de PVQ para algunos límites de bits de hardware comunes;
la FIG. 17B es un diagrama que presenta una descripción general de los valores R relacionados en bits/muestra para cuantificadores óptimos de palabras de código de PVQ con diferentes límites de BIT;
la FIG. 17C es un diagrama que muestra una densidad de pulsos alcanzable correspondiente, que está directamente correlacionada con la capacidad de adaptación de forma resultante de la PVQ;
la FIG. 17D es un diagrama que ilustra un compromiso de instrucción de MOPS en el peor de los casos en la indexación/desindexación para un esquema de PVQ de la técnica anterior de muestra y para el nuevo esquema de MPVQ;
la FIG. 18 es un diagrama de flujo de los pasos de una realización de una composición de índice de MPVQ que utiliza signos principales extraídos previamente;
la FIG. 19 es un diagrama de flujo de los pasos de una realización de una función de extracción de signo;
la FIG. 20 ilustra esquemáticamente una realización de un codificador;
la FIG. 21 ilustra esquemáticamente una realización de un decodificador;
la FIG. 22 ilustra esquemáticamente una realización de un codificador; y
la FIG. 23 ilustra esquemáticamente una realización de un decodificador.
Descripción detallada
Las realizaciones, junto con otros objetos y ventajas de las mismas, pueden entenderse mejor haciendo referencia a la siguiente descripción tomada junto con los dibujos adjuntos.
En todos los dibujos, se utilizan las mismas designaciones de referencia para elementos similares o correspondientes.
El algoritmo de indexación descompone de forma iterativa la estructura de PVQ y los índices en secciones de signos principales. La descomposición se realiza de tal manera que, independientemente del número de elementos distintos de cero en el vector de PVQ encontrado para indexar, siempre se extrae un signo principal. Esta extracción de signos de baja complejidad permite además la creación de un rango dinámico reducido para los desplazamientos de indexación de PVQ calculados en tiempo de ejecución.
Los desplazamientos de indexación de PVQ se utilizan en la composición de índice de PVQ y en la descomposición de índice de PVQ. Como el cuantificador de PVQ estructurada intrínsecamente puede manejar una gran variación en la dimensión (l) y los pulsos unitarios (k) y, por lo tanto, en la tasa de bits, los desplazamientos generalmente solo se calculan para la dimensión actual que se codificará y el número actual de pulsos unitarios. La tasa de bits corresponde a log2 (NPVQ(l, k), lo que da como resultado una enorme cantidad de posibles desplazamientos de PVQ. Los desplazamientos se almacenan en una RAM dinámica. Sin embargo, una implementación de cuantificador de PVQ limitado a l, k puede usar la búsqueda de tablas para almacenar los desplazamientos de indexación/desindexación.
Para una mejor comprensión de la tecnología propuesta, puede ser útil consultar extractos de la descripción de la técnica anterior de búsqueda/indexación/desindexación de IETF/OPUS, recopilados en el Apéndice A.
En la Fig. 1, se ilustra un sistema de codificación de audio de ejemplo que utiliza el esquema presentado en la presente descripción. Este es un ejemplo de sistema de códec de audio con un codificador 10 y un decodificador. 60 que usa indexación y desindexación de MPVQ. La primera parte corresponde a las partes comprendidas en un codificador 10 y la segunda parte de la figura corresponde a las partes comprendidas en un decodificador 60. Se proporciona una muestra de entrada 1 al codificador 10. El codificador 10 proporciona un flujo de bits 2 que representa el vector de entrada como al menos un índice de MPVQ y un signo principal. Un flujo de bits 2', preferiblemente esencialmente igual al flujo de bits 2 del codificador 10, se proporciona al decodificador. 60, donde el decodificador decodifica el índice de MPVQ y el signo principal en una muestra reconstruida 3. Típicamente, el índice de MPVQ y los signos principales se proporcionan como palabras de código separadas.
Una realización de un codificador 10 se ilustra con más detalle en la Fig. 2. Se recibe la muestra de entrada 1, que representa una muestra x de audio/video. En una calculadora de normas 12, se calcula un factor de norma g. Un cuantificador de normas 14 crea bits de cuantificación de normas de bits NORMQ que representan la norma del vector de entrada. Estos bits se proporcionan típicamente para que se incluyan en el flujo de bits. El vector de entrada está normalizado por el factor de norma en un vector normalizado 4. El cuantificador de norma 14 también proporcionó opcionalmente el factor de norma, por ejemplo, como bits NORMQ, a una sección de asignación de bits 16, que calcula, o recupera de tablas de búsqueda, valores adecuados de N y K, es decir, la dimensión del vector entero y el número total de pulsos unitarios. Estos valores pueden proporcionarse opcionalmente en el flujo de bits saliente o derivarse en el lado de recepción de los parámetros precedentes en el flujo de bits. Una sección de búsqueda de forma de PVQ 18 convierte el vector normalizado 4 en un vector de entrada de entero 5 para PVQ. El vector de entrada entero 5 se proporciona a una sección de indexación de MPVQ 20, donde tiene lugar la indexación de MPVQ real. Esto se discutirá con más detalle más adelante. Un signo principal 15, como primera palabra de código, y un índice de salida, como segunda palabra de código, un índice de MPVQ 25, típicamente acompañado por el tamaño de MPVQ, se emite desde la sección de indexación de MPVQ 20 a un multiplexor de flujo de bits, MUX, 30. Allí, las diferentes cantidades de información se fusionan en un solo flujo de bits 2, que se emite desde el flujo de bits MUX 30.
Una realización de un decodificador 60 se ilustra con más detalle en la Fig. 3. Se proporciona un flujo de bits entrante 2’ a un flujo de bits DEMUX 80. Aquí las diferentes partes de la información se dividen en partes. La información que soporta la asignación de bits, tal como los valores N y K o los bits NORMQ, se proporciona a una sección de asignación de bits 62, dando salida a los valores relevantes de N y K a una sección de cálculo de tamaño/desplazamientos 64 y una sección de desindexación de MPVQ 70. La sección de cálculo de tamaño/desplazamientos 64 calcula los desplazamientos 8, en base a los valores N y K, así como en el tamaño de MPVQ obtenido a partir de la información 25' del índice de MPVQ reconstruido 25', típicamente acompañado por el tamaño de MPVQ, y proporcionado a la sección de desindexación de MPVQ 70. El índice de MPVQ reconstruido 25', como segunda palabra de código, y el signo principal reconstruido 15', como primera palabra de código, también se proporcionan a la sección de desindexación de MPVQ 70, donde tiene lugar la desindexación de MPVQ real. Esto se discutirá con más detalle más adelante. Un vector de salida entero 6', que es una reconstrucción del vector de entrada entero en el codificador, se envía a una sección de normalización de energía unitaria 68 en la que se asegura la normalización. Un descuantificador de norma 66 utiliza los bits NORMQ para proporcionar un factor de norma 3. Luego, el factor de norma se usa para formar el vector de salida final X siendo una muestra reconstruida 3 de la muestra de audio/video original.
Cabe señalar que el esquema de MPVQ no se limita al sistema particular en las figuras 2 y 3, sino que también se puede emplear para indexar cualquier sistema de cuantificación basado en PVQ, por ejemplo, señales en el dominio del tiempo en un Codificador de Voz Lineal Predictivo (LP) o coeficientes en el dominio de transformación en un códec de video.
Por ejemplo, en las Figuras 2 y 3 los bloques "MULTIPLEXADOR DE FLUJO DE BITS" y " DEMULTIPLEXADOR DE FLUJO DE BITS " pueden emplear opcionalmente un codificador y decodificador aritmético respectivamente, para limitar la pérdida de truncamiento de índice de PVQ como se explica en otra parte de la presente descripción. Los bloques "MUX" y "DEMUX" necesitan conocer el tamaño entero (tamaño de MPVQ) de cada palabra de código de PVQ corta, para poder extraer el número correcto de bits para la palabra de código de MPVQ (n, k). Sin un codificador/decodificador aritmético, el MUX/DEMUX utilizará techo (log2 (tamaño de MPVQ)) bits enteros no fraccionarios cuando se analiza el flujo de bits para la palabra de código corta de MPVQ (n, k). Con un par de codificador/decodificador aritmético, la resolución de bits y la función o funciones de distribución empleadas por el par de codificador/decodificador aritmético decidirán los bits fraccionarios usados por los bloques "MUX" y "DEMUX". El par codificador/decodificador aritmético también necesitará el tamaño de MPVQ entero para determinar cómo debe analizar los bits (ahora fraccionarios) decodificados del flujo de bits.
Tales operaciones son bien conocidas por cualquier experto en la técnica y, en la descripción restante, se supone que son una parte natural de un sistema de PVQ.
En la Fig. 2, en el codificador, el tamaño de MPVQ se calcula como parte del bucle de indexación de MPVQ y luego se proporciona al MUX. En la Fig. 3, se llama primero al decodificador, una función que calcula los desplazamientos de MPVQ y el tamaño de MPVQ, luego se extrae la palabra de código del MUX usando esta información de tamaño entero. El índice extraído (segunda palabra de código) y los desplazamientos iniciales se proporcionan luego al bloque de desindexación de MPVQ.
La parte del codificador y/o la parte del decodificador de las Figs. 2 y 3 pueden estar comprendidas en algunas aplicaciones en un nodo de una red de comunicación o en un Equipo de Usuario. El nodo de la red de comunicaciones puede, por ejemplo, ser un nodo de red de radio, por ejemplo, una estación base. La comunicación entre la parte del codificador y la parte del decodificador se puede realizar mediante transmisión por cable y/o inalámbrica. La parte del codificador y la parte del decodificador también pueden funcionar por separado. Por ejemplo, la parte del codificador podría ser una parte de un equipo de grabación y el flujo de bits resultante podría almacenarse para un uso futuro. Del mismo modo, la parte del decodificador podría ser una parte de un equipo de reproducción, que por ejemplo recupera un flujo de bits de un almacenamiento y lo decodifica en señales de audio/video.
Una realización de un método de enumeración de MPVQ es utilizar una enumeración basada en bit de signo inicial único y de magnitud combinada inventiva, Npvq(I, k) = 2 * Nmpvq(1, k), en el que el esquema de MPVQ está utilizando preferiblemente una enumeración de magnitud aditiva iterativa, además preferiblemente basada en un signo principal establecido del primer elemento distinto de cero en el vector restante.
El códec IETF/OPUS de la técnica anterior está utilizando una versión optimizada de la enumeración original de Fischer, con recursiones de cálculo de desplazamiento de fila directo mejoradas fila por fila, división rápida de enteros exactos a través de multiplicación de envoltura y también cálculos directos de desplazamiento y tamaño de ecuación no recursiva (si la dimensión 1 y el número de pulsos unitarios k son lo suficientemente bajos como para permitir tales cálculos directos). Consulte el Apéndice A para obtener extractos de descripción de texto RFC de la implementación de PVQ de IETF/OPUS-Audio y referencias de código OPUS-c. Para reducir la complejidad de la implementación en OPUS, los valores de índice máximo para una palabra de código de PVQ se restringen a 232-1 (un valor de índice que se puede representar en aritmética de enteros de 32 bits sin signo, que es un formato típico para muchos ordenadores de escritorio).
En una primera parte de la tecnología presentada actualmente, se describe una enumeración de PVQ modular (MPVQ) de signos principales utilizando un enfoque de signos principales. Esta nueva enumeración de MPVQ mejorada está utilizando las mismas técnicas generales (por ejemplo, recursiones de cálculo de desplazamiento de fila directo, fila por fila, división de enteros exacta y cálculos directos de tamaño y desplazamiento de ecuación no recursivos), pero empleando otro esquema de recursividad. La dinámica del cálculo de desplazamiento y tamaño se reduce, lo que permite una implementación eficiente de la indexación de palabras clave de PVQ cortas, con el doble del tamaño (1 bit más) del número de entradas en una palabra de código que se puede indexar y desindexar de manera eficiente.
Esta mejora de indexación/desindexación busca en un ejemplo particular permitir un procedimiento de asignación de baja complejidad para índices de 33 bits, extendiendo la PVQ más grande posible que se puede usar en 1 bit (o alternativamente mantenerlo en 1 31 bits, modificando la enumeración de modo que uno pueda usar aritmética con signo para una PVQ de extensión de 32 bits).
Definamos un parámetro de desplazamiento U (n, k) como el número de vectores enteros de dimensión n y norma L1 de k, que no tiene un cero principal y no tiene el valor principal k, tiene un valor positivo principal y tiene un signo principal positivo. El signo principal es el primer signo que se encuentra después del valor actual en la dirección de la recursividad.
Definamos un parámetro de desplazamiento A (n, k), como el número de vectores enteros de dimensión n y norma L1 de k, que tiene un valor inicial positivo y que no tiene un cero inicial.
Entonces sigue que A (n, k) = 1 2 * U (n, k). El "1" proviene del vector con valor "k" inicial único, y el factor "2" se debe a la posibilidad de signo positivo y negativo del siguiente signo principal. A (n, k) también es igual a (NPVQ(n, k-1) NPVQ(n-1, k-1 ))/2, una suma que se ha utilizado como desplazamiento de indexación en la técnica anterior.
Veamos la figura 4 para ver una vista estructurada en tabla de U (n, k) y su relación con el número total de vectores en la estructura de MPVQ (n, k) con NMPVQ(n, k) vectores. La figura ilustra una vista esquemática de alto nivel de una realización de una iteración de MPVQ básica que incluye la variación preferida de enumeración del signo principal del Bit Menos Significativo (LSB), utilizando el primer "entrelazado" del LSB de la siguiente información del signo principal. En una solución preferida, el entrelazado del signo principal se realiza para cada posición k_delta de amplitud única pos [0], por ejemplo, k_delta = bloque k-1 o k-2. Para valor de pos [0] = "k", todos los pulsos unitarios se consumen en pos [0] y la iteración puede detenerse. Para que el valor pos [0] sea distinto de cero, el siguiente signo principal positivo o negativo, el primer signo de posición distinto de cero encontrado requiere 1 bit de información. Esto se almacena como el bit LSB en la subsección "2 * U (n-k)" siempre de tamaño par. Para valor de pos [0] = "k", la iteración se extiende a pos [0] sin ninguna nueva información de signo principal.
El enfoque básico de indexación/enumeración de esta primera parte se describe a continuación. Se sabe que el vector de PVQ para indexar/enumerar está en el rango [0 ...2B 1-1] y encaja en B 1 bits. Aquí, B = 32 bits es típico del hardware de DSP actual. Por ejemplo, si uno tiene PVQ (N, K), es decir, dimensión N, K pulsos unitarios, el número de índices Npvq <= (2B 1-1).
La Fig. 5 ilustra un diagrama de flujo de los pasos de una realización de un método para la indexación de cuantificación vectorial piramidal de muestras de audio/video. El método comienza en el paso 400. En el paso 402, se obtiene un vector de entrada entero que representa las muestras de señales de audio/video. El vector de entrada entero tiene varios coeficientes de valores enteros. En el paso 404, se extrae un signo principal del vector de entrada entero. El signo principal es un signo de un coeficiente terminal distinto de cero en el vector de entrada entero. El coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de entrada entero. En el paso 406, el vector de entrada entero se indexa con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con el signo principal que representa las muestras de señales de audio/video. El esquema de enumeración de cuantificación vectorial piramidal está diseñado para despreciar el signo de dicho coeficiente terminal distinto de cero. En realizaciones alternativas, el paso 406 se puede realizar simultáneamente como, en combinación con o antes del paso 404. En el paso 408, el signo principal y el índice de salida se emiten como primera palabra de código y segunda palabra de código, respectivamente, en un flujo de bits saliente. El procedimiento finaliza en el paso 449.
En una realización particular, el paso de indexar 406 se realiza mediante un procedimiento de enumeración iterativo. En una realización particular adicional, el procedimiento de enumeración iterativo comprende la repetición de un paso de iteración, en el que se selecciona un coeficiente actual del vector de entrada entero para su consideración. El paso de iteración a su vez comprende encontrar un parámetro de desplazamiento que está asociado con todos los coeficientes de dicho vector de entrada entero procesado antes del coeficiente actual del vector de entrada entero y aumentar un índice acumulado en dependencia del parámetro de desplazamiento. La repetición continúa con coeficientes del vector de entrada entero que se seleccionan uno tras otro como el coeficiente actual al menos hasta que se hayan considerado todos los coeficientes del vector de entrada entero. El procedimiento de enumeración iterativa comprende un paso de terminación en el que el índice de salida se establece igual al índice acumulado después de que se hayan terminado todos los pasos de iteración.
La Fig. 6 ilustra una realización de una indexación de MPVQ a nivel general. A continuación se muestran diagramas de bloques detallados que implementan los aspectos del lado de envío de la indexación de MPVQ. El proceso de indexación MPVQ comienza en el paso 200, en el paso 210, la dimensión N de VQ y el número de pulsos unitarios K se logran a partir del bucle de asignación de bits del códec. En el paso 220, el vector de PVQ "PVQ-vec" se logra a partir de la búsqueda de PVQ. En el paso 230, el índice de MPVQ se compone encontrando el bit de signo principal y el tamaño de MPVQ. El signo principal se envía en el paso 240 al flujo de bits y el índice en el paso 245 se envía al flujo de bits. Se sale del procedimiento en el paso 249.
En comparación con el diagrama de flujo de la Fig. 5, los pasos 210 y 220 se pueden considerar que están comprendidos en el paso 402. Los pasos 404 y 406 se consideran de manera similar que están comprendidos en el paso 230. Finalmente, se considera que los pasos 240 y 250 están comprendidos en el paso 408.
La Fig. 7A-B ilustra una realización de la composición del índice de MPVQ y es, por ejemplo, proporcionado como el paso 230 de la Fig. 6. En la Fig. 7A-B, la composición del índice de MPVQ y el hallazgo del signo principal y el tamaño de MPVQ comienza en el paso 300. Esta realización se basa en una solución con un siguiente signo del vector en una posición LSB. En el paso 302, el proceso se inicializa mediante un caso base de iteración de desplazamiento conocido. En el paso 304, se establece el parámetro de posición actual. En esta realización, la indexación se ejecuta desde el final del vector hacia el principio. La indexación se ejecuta en orden de posición inverso en comparación con la desindexación, consulte más adelante. Esto significa que cuando se aumenta el índice acumulado en cada paso de iteración causado por un signo principal, el índice acumulado recibe un bit menos significativo en dependencia de un signo principal anterior en el vector de entrada entero.
En realizaciones alternativas, el orden de la posición del vector se puede cambiar entre indexación y desindexación.
En el paso 306, se inicia un índice acumulado a cero. El parámetro k_acc denota los pulsos unitarios acumulados que se analizan, y se inicia a cero. La marca got_sign_flag, que indica si se extrae o no un signo, y también inicialmente se establece en cero. En el paso 308, un coeficiente actual "vec (pos)" del vector se considera como un parámetro "val". En el paso 310, si se ha encontrado un primer signo y el coeficiente actual no es igual a cero, el proceso continúa al paso 312; de lo contrario, el proceso continúa directamente al paso 314. En el paso 312, una información de signo principal guardada de un paso anterior se pone en un LSB. Un signo negativo en un paso anterior corresponde al valor next_sign_ind = 1 y un signo positivo corresponde al valor next_sign_ind = 0. En el paso 314, comienza la búsqueda del signo presente. Si el valor es igual a cero, no hay ningún signo nuevo presente y el último signo debe enviarse, lo que significa que el proceso continúa directamente al paso 324 (de la Fig. 7B). Si el coeficiente actual no es cero, primero se establece en el paso 316 la marca de que se ha encontrado un signo. Esto realmente solo es necesario para el primer signo, pero en la presente realización, para simplificar el flujo, el indicador se establece cada vez que se encuentra un valor distinto de cero. En el paso 318, next_sign_ind, es decir, el indicador del siguiente signo se establece para indicar un signo positivo. En el paso 320, se comprueba si el valor del coeficiente actual es realmente positivo. Si se encuentra que es así, el flujo continúa hasta el paso 324, de lo contrario, el next_sign_ind, es decir, el indicador del siguiente signo se cambia para indicar un signo negativo.
En el paso 324, el índice acumulado se incrementa según un valor de desplazamiento basado en la dimensión n presente y los pulsos unitarios acumulados que se analizan. En otras palabras, el índice acumulado se cuenta hacia arriba como un número que corresponde al número de vectores enteros de dimensión n y norma L1 de k_acc, que tiene un valor principal positivo y que no tiene un cero principal. En la presente realización, el desplazamiento A se usa para modificar el índice acumulado. Como se discutirá más adelante, en otras realizaciones, se puede usar el desplazamiento U en su lugar, o se puede usar una combinación de desplazamientos A y U. En el paso 326, el parámetro k_acc se actualiza luego sumando el valor del coeficiente actual. Si no se han considerado todas las posiciones en el vector, es decir, el parámetro "pos" es mayor que cero, y se prepara una siguiente repetición. En el paso 330, se aumenta la dimensión y se actualizan los desplazamientos, como se discutirá con más detalle más adelante. En el paso 332, la posición del coeficiente actual se reduce un paso. El proceso vuelve entonces al paso 308 (Fig. 7A) para que se considere otra repetición con un nuevo coeficiente actual del vector de entrada entero.
Si se han considerado todas las posiciones en el vector, el flujo continúa hasta el paso 334, donde el signo principal se establece igual a la indicación del siguiente signo actual. En otras palabras, el primer signo del vector no se ha incluido en el índice acumulado y se extrae como parámetro separado que no influye en el resto de la indexación. Esto significa que el esquema de enumeración de cuantificación vectorial piramidal que se utiliza ignora el signo del primer coeficiente distinto de cero. En cambio, este signo se "empuja" fuera del proceso de indexación y se denota como el "signo principal" o "lead_sign". Los otros signos típicamente también se extraen durante la iteración, pero también influirán en la acumulación del índice. Finalmente, en el paso 336, se calcula el tamaño de MPVQ, que en la presente realización se puede realizar de dos formas diferentes. El índice acumulado está saliendo de este procedimiento como el índice de salida del esquema de enumeración de cuantificación vectorial piramidal de MPVQ. El procedimiento finaliza en el paso 349.
La estructura anterior opera para cambiar todos los signos de los valores vectoriales distintos de cero a ser codificados un paso, al siguiente, en una dirección seleccionada, coeficiente distinto de cero. Si no hay una posición siguiente, es decir, el proceso está fuera del vector original, almacenamos ese signo como el lead_sign restante. Este cambio de signo se puede realizar como un paso de procesamiento previo independiente, como se puede ver más adelante, o en una realización preferida dentro del bucle de iteración de dimensión general, como se indica anteriormente. El lead_sign (+ 1 o -1) ahora se puede transmitir como un bit separado en el flujo de bits, como lead_sign_ind (0 o 1).
Los signos cambiados restantes y las amplitudes del vector original se codifican con un esquema de indexación/enumeración modificado que utiliza el hecho de que siempre se ha extraído/cambiado exactamente un signo del vector de PVQ original. Esta extracción es independiente del número de elementos distintos de cero en el vector de PVQ de destino original PVQ-vec.
A continuación se describen aquí tres ejemplos para apoyar la comprensión de la estructura de las Figs. 7A y 7B. Los ejemplos son de una complejidad extremadamente baja para mantener la descripción limitada y hacer perceptible el ejemplo total. Sin embargo, en ejemplos reales típicos, las dimensiones y el número de pulsos unitarios son mucho mayores. Sin embargo, los principios son los mismos.
En un primer ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un vector de entrada entero de [2,2, -1]. Se realiza la inicialización y "pos" se establece en "2", índice, k_acc en "0", dimensión n = 1, y la got_sign_flag no se establece (= 0). El primer valor "val" se selecciona como coeficiente 2 del vector, es decir, -1. (Los coeficientes del vector están numerados: 0, 1 y 2). Dado que todavía no se ha evaluado ningún valor distinto de cero, no se ha extraído ningún signo y el flujo omite el ajuste del índice en base a los signos detectados. De este modo, el flujo pasa directamente a la evaluación del valor "val", que no es idéntico a cero. Esto desencadena que se establezca la marca designo. Se ha detectado un primer signo y next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 1, es decir, un valor negativo (-1). El índice acumulado se cuenta luego mediante un desplazamiento A (1,0), que corresponde al número de vectores enteros de dimensión 1 y norma L1 de 0, que tiene un valor principal positivo y que no tiene un cero principal. A (1,0) es igual a 0. El índice acumulado ahora es índice = 0. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 1 unidad, es decir, k_acc = 1.
Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 2, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 1. El flujo vuelve al paso 308 y se selecciona un nuevo valor de la posición 1, es decir, val = vec (1) = 2 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que se detecta un signo y dado que el valor actual "val" no es igual a cero, el "next_sign_ind" se agrega al índice acumulado "índice" como un LSB, dando un índice acumulado de 1 ( = 2 * 0 1). El flujo continúa hasta la evaluación del valor "val", que de nuevo no es idéntico a cero. El next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 0, es decir, un valor positivo (2). El índice acumulado se cuenta luego mediante un desplazamiento A (2,1), que corresponde al número de vectores enteros de dimensión 2 y norma L1 de 1, que tiene un valor principal positivo y que no tiene un cero principal. A (2,1) es igual a 1. El índice acumulado ahora es índice = 2. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de vec (1), es decir, en 2 unidades, es decir, k_acc = 3. Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 3, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 0. El flujo vuelve al paso 308 y se selecciona un nuevo valor de posición 0, es decir, val = vec (0) = 2 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que se detecta un signo y dado que el valor presente "val" no es igual a cero, el "next_sign_ind" se agrega al índice acumulado "índice" como un LSB, dando un índice acumulado de 4 ( = 2 * 2 0). El flujo continúa hasta la evaluación del valor "val", que de nuevo no es idéntico a cero. El next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 0, es decir, un valor positivo (2). El índice acumulado se cuenta luego mediante un desplazamiento A (3,3), que corresponde al número de vectores enteros de dimensión 3 y norma L1 de 3, que tiene un valor principal positivo y que no tiene un cero principal. A (3,3) es igual a 13. El índice acumulado ahora es índice = 17. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 2 unidades, es decir, k_acc = 5.
El k_acc acumulado ahora es igual al máximo K = 5, y se consideran todas las posiciones del vector. Por lo tanto, el índice de salida es igual al índice acumulado presente, es decir, el índice de salida 17. El último signo identificado aún no se incluye en el índice acumulado y en su lugar se extrae como un parámetro separado, es decir, signo inicial = "+ 1" (next_sign_ind = 0).
En un segundo ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un vector de entrada entero de [-4,0, -1]. Se realiza la inicialización y "pos" se establece en "2", el índice, k_acc en "0", la dimensión n = 1, y la got_sign_flag no se establece (= 0). El primer valor "val" se selecciona como coeficiente 2 del vector, es decir, -1. Dado que todavía no se ha evaluado ningún valor distinto de cero, no se ha extraído ningún signo y el flujo omite el ajuste del índice en base a los signos detectados. De este modo, el flujo pasa directamente a la evaluación del valor "val", que no es idéntico a cero. Esto desencadena que se establezca la marca designo. Se ha detectado un primer signo y next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 1, es decir, un valor negativo (-1). El índice acumulado se cuenta luego mediante un desplazamiento A (1,0), que corresponde al número de vectores enteros de dimensión 1 y norma L1 de 0, que tiene un valor principal positivo y que no tiene un cero principal. A (1,0) es igual a 0. El índice acumulado ahora es índice = 0. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, por 1 unidad, es decir, k_acc = 1.
Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 2, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 1. El flujo vuelve al paso 308 y se selecciona un nuevo valor de la posición 1, es decir, val = vec (1) = 0 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que se detecta un signo, pero dado que el valor presente "val" es igual a cero, el "next_sign_ind" se guarda para la siguiente repetición. El flujo continúa hasta la evaluación del valor "val", que es idéntico a cero. Por lo tanto, el next_sign_ind no se cambia. El índice acumulado se cuenta luego mediante un desplazamiento A (2,1), que corresponde al número de vectores enteros de dimensión 2 y norma L1 de 1, que tiene un valor principal positivo y que no tiene un cero principal. A (2,1) es igual a 1. El índice acumulado ahora es índice = 1. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 0 unidades, es decir, todavía k_acc = 1.
Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 3, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 0. El flujo vuelve al paso 308 y se selecciona un nuevo valor de posición 0, es decir, val = vec (0) = - 4 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que se detecta un signo y, dado que el valor presente "val" no es igual a cero, el "next_sign_ind", que emana de la posición de vector 2, se agrega al índice acumulado "índice" como un LSB, dando un índice acumulado de 3 (= 2 * 1 1). El flujo continúa hasta la evaluación del valor "val", que no es idéntico a cero. El next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 1, es decir, un valor negativo (-4). El índice acumulado se cuenta luego mediante un desplazamiento A (3,1), que corresponde al número de vectores enteros de dimensión 3 y norma L1 de 1, que tiene un valor principal positivo y que no tiene un cero principal. A (3,1) es igual a 1. El índice acumulado ahora es índice = 4. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 4 unidades, es decir, k_acc = 5.
El k_acc acumulado ahora es igual al máximo K = 5, y se consideran todas las posiciones del vector. Por lo tanto, el índice de salida es igual al índice acumulado presente, es decir, el índice de salida 4. El último signo identificado todavía no se incluye en el índice acumulado y en su lugar se extrae como un parámetro separado, es decir, signo principal = "-1" (next_sign_ind = 1).
En un tercer ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un vector de entrada entero de [0,5,0]. Se realiza la inicialización y "pos" se establece en "2", el índice, k_acc en "0", la dimensión n = 1, y la got_sign_flag no se establece (= 0). El primer valor "val" se selecciona como coeficiente 2 del vector, es decir, 0. Dado que todavía no se ha evaluado ningún valor distinto de cero, no se ha extraído ningún signo y el flujo omite el ajuste del índice en base a los signos detectados. El flujo pasa así directamente a la evaluación del valor "val", que es idéntico a cero. Esto omite el desencadenamiento de la marca de señal. Por tanto, todavía no se ha detectado un primer signo. El índice acumulado se cuenta luego mediante un desplazamiento A (1,0), que corresponde al número de vectores enteros de dimensión 1 y norma L1 de 0, que tiene un valor principal positivo y que no tiene un cero principal. A (1,0) es igual a 0. El índice acumulado ahora es índice = 0. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 0 unidades, es decir, todavía k_acc = 0.
Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 2, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 1. El flujo vuelve al paso 308 y se selecciona un nuevo valor de la posición 1, es decir, val = vec (1) = 5 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que aún no se ha detectado un signo. De este modo, el flujo pasa directamente a la evaluación del valor "val", que no es idéntico a cero. Esto desencadena que se establezca la marca de signo. Ahora se ha detectado un primer signo y next_sign_ind se establece según el signo detectado, en este caso next_sign_ind = 0, es decir, un valor positivo (5). El índice acumulado se cuenta luego mediante un desplazamiento A (2,0), que corresponde al número de vectores enteros de dimensión 2 y norma L1 de 0, que tiene un valor principal positivo y que no tiene un cero principal. A (2,0) es igual a 0. El índice acumulado ahora sigue siendo índice = 0. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 5 unidades, es decir, k_acc = 5.
Se prepara una siguiente repetición aumentando el número n en 1, es decir, n = 3, y disminuyendo el indicador de posición "pos" en 1, por ejemplo, pos = 0. El flujo vuelve al paso 308 y se selecciona un nuevo valor de posición 0, es decir, val = vec (0) = 0 en nuestro ejemplo. La marca de signo "got_sign_flag" indica que se detecta un signo pero como el valor presente "val" es igual a cero, el "next_sign_ind" se guarda para la siguiente repetición, o en este ejemplo, el paso final. El flujo continúa hasta la evaluación del valor "val", que es idéntico a cero. Por lo tanto, next_sign_ind no se cambia. El índice acumulado se cuenta luego mediante un desplazamiento A (3,5), que corresponde al número de vectores enteros de dimensión 3 y norma L1 de 5, que tiene un valor principal positivo y que no tiene un cero principal. A (3,5) es igual a 41. El índice acumulado ahora es índice = 41. El parámetro k acumulado k_acc se actualiza luego en el valor absoluto de "val", es decir, en 0 unidades, es decir, todavía k_acc = 5. El k_acc acumulado ahora es igual al máximo K = 5, y se han considerado todas las posiciones del vector. Por lo tanto, el índice de salida es igual al índice acumulado presente, es decir, el índice de salida 41. El último signo identificado todavía no se incluye en el índice acumulado y en su lugar se extrae como un parámetro separado, es decir, signo principal = "+ 1" (next_sign_ind = 0).
En la Fig. 8, se ilustra una vista esquemática de alto nivel de una realización de una iteración de MPVQ básica en lugar de utilizar una codificación de signo principal seccionada. La figura ilustra una vista esquemática de alto nivel de una realización de una iteración de MPVQ básica que usa la división en secciones de la información del signo principal. En una solución preferida, las dos secciones de signo se implementan para cada amplitud pos [0] única k_delta, por ejemplo, k_delta = [k-1, k-2, ... 1]. Para el valor de pos [0] = "k", todos los pulsos unitarios se consumen en pos [0] y la iteración puede detenerse. Para que el valor de pos [0] sea distinto de cero, el siguiente signo principal positivo, el primer signo de posición distinto de cero encontrado requiere 1 bit de información. Para que el valor de pos [0] sea distinto de cero, el siguiente signo principal negativo, el primer signo de posición distinto de cero encontrado requiere 1 bit de información. Para el valor de pos [0] = "0", la iteración se extiende a pos [0] sin requerir ninguna nueva información de signo principal.
A partir de la definición de iteración anterior, se puede establecer que:
M(n,k)= 1+U(n,k)+U(n,k)+M(n- l,k)= l+2*U(n,k)+M(n- l,k)
M(n,k)-M(n-l,k)=l+2*U(n,k)
Al aplicar la recursividad de PVQ de Fischer, se obtiene:
M(n,k)-M(n-l,k)=M(n-l,k-l)+M(n,k-l)
l+2*U(n,k)=M(n-l,k-l)+M(n,k-l)-M(n-l,k-l)+M(n-l,k-l)
l+2*U(n,k)= l+2*U(n,k- l)+2*M(n- l ,k -1)
U(n,k)=U(n,k-l)+M(n-l,k-l)
M(n-l,k-l)=U(n,k)-U(n,k-l)
conduciendo a
M(n-l,k)=[ U(n,k+1)-U(n,k) ]
De la definición de recursividad se conoce:
M(n,k)=l+2*U(n,k)+[U(n,k+l)-U(n,k)] = 1 U(n,k)+U(n,k+1)
El tamaño de MPVQ ahora se puede determinar de forma recursiva como:
NMPVQ(n,k) = M(n,k) = 1 U(n, k) U(n,k+1).
Véase además el Apéndice B para la derivación de la fórmula de recursividad de MPVQ empleada.
NMPVQ(n,k) = 1 2*U(n, k) + NMPVQ(n-l,k)
En la enumeración/indexación, usamos cualquiera de las propiedades definidas a continuación (a-g) que:
a) NpvQ(n, k) = 2*NMPVQ(n, k),
(aplicado de forma recursiva para una indexación eficiente);
b) U(n,k) = 1 U(n, k-1) U(n-1, k-l)+ U(n-1, k),
con condiciones iniciales U (0, *) = 0, U (*, 0) = 0, U (1, *) = 0, U (*, 1) = 0, y U (a, b) = U (b , a), y además para la eficiencia se puede usar U (2, k) = k-1, y U (n, 2) = n-1, y U (3, k) = k * (k-1), y U (n, 3) = n (n-1);
c) NMPVQ(n,k) = 1 U(n, k) U(n, k+1),
(cálculo final del tamaño de MPVQ)
d) NMpvQ(n,k) = 1 ñoor((A(n,k))/2) U(n, k+1),
(cálculo alternativo del tamaño final)
e) NMpvQ(n,k) - NMpvQ(n-l,k) = 1 2*U(n, k)= A(n, k),
(se puede utilizar para la determinación iterativa de la adición del índice de amplitud)
A(n,k) = A(n, k-1) A(n-1, k-l)+ A(n-1, k),
(esta recursividad, también utilizada en, por ejemplo, CELT/OPUS-audio, también se puede utilizar aquí para actualizaciones de desplazamiento de indexación de amplitud de baja complejidad)
g) Actualizar iterativamente los desplazamientos de PVQ = U (n, k = 0 ... K 1) o preferiblemente actualizar iterativamente: A (n, k = 0 ... K) y U (n, K 1). La recursividad A(n, k) es ligeramente más rápida que la recursividad U (n, k) y el último elemento U (n, K 1) tiene un rango dinámico más bajo que A (n, K 1).
Aquí, c) y d) se utilizan para calcular el tamaño de la palabra de código de MPVQ (n, k) final, que se necesita para obtener el índice del flujo de bits, o que se proporciona al flujo de bits o al codificador/decodificador aritmético que está interconectando el flujo de bits.
La Fig. 9 ilustra una combinación de tres realizaciones de una recursividad de desplazamiento de MPVQ-A/U para aumentar la dimensión.
El procedimiento para actualizar los desplazamientos comienza en el paso 350. Los parámetros de entrada son la dimensión n y el valor k_max 1. Este procedimiento proporciona desplazamientos de indexación de una fila n-1 a desplazamientos de indexación de la fila n, incluyendo la actualización de desplazamientos para k de 0 ... (k_max 1). En el paso 352, se decide si se van a utilizar o no solo desplazamientos A. Si ese es el caso, en el paso 354, A (n, k) se calcula como:
A(n,k)=A(n-l,k)+A(n-l,k- 1)+A(n, k-1).
Esta recursividad particular se utiliza también en la técnica anterior, pero junto con procesos de indexación de PVQ menos eficientes. La A (n, k) se devuelve en el paso 397. En el paso 356, se decide si se van a utilizar o no solo desplazamientos U. Si ese es el caso, en el paso 358, U (n, k) se calcula como:
U(n,k)=l+U(n-l,k-l)+U(n-1,k)+U(n, k-1).
Se devuelve U (n, k) en el paso 398. En el paso 360, se va a usar una combinación de desplazamientos A y U. En el paso 362, las recursividades para k = 0... (k_max) se realizan según:
A(n,k)=A(n-l,k)+A(n-l,k- 1)+A(n, k-1).
Esta recursividad particular se utiliza también en la técnica anterior, pero junto con procesos de indexación de PVQ menos eficientes. Para el desplazamiento dinámico más alto (k_max 1), las recursividades se realizan en el paso 364. En una realización particular, se usa una recursividad U pura según:
U(n,k_max+l)=l+U(n-l,k_max)+U(n-l,k_max+ 1)+U(n, k_max).
En otra realización particular, se utiliza una recursividad A/U mixta según:
U(n,k_max+l)=l+(A(n-l,k_max)»l) (A(n, k_max)>>)+U(nl,k_max+l),
donde (y >> 1) significa y = suelo (y/2). La A (n, k) y U (n, k_max 1) se devuelven en el paso 399.
En el lado del receptor, se debe realizar un procedimiento opuesto, en el que un signo principal y un índice se transforman en un vector de salida entero. La Fig. 10 ilustra un diagrama de flujo de los pasos de una realización de un método para la desindexación de cuantificación vectorial piramidal de muestras de audio/video. El método comienza en el paso 450. En el paso 452, se reciben un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código desde un flujo de bits entrante. El signo principal y el índice de entrada representan muestras de señales de audio/video. El signo principal es un signo de un coeficiente terminal distinto de cero en un vector de salida entero que se creará, que representa las muestras de señales de audio/video. El vector de salida entero tiene un número de coeficientes de valores enteros. El coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en dicho vector de salida entero. En el paso 454, el índice de entrada se desindexa en el vector de salida entero con un esquema de desenumeración de cuantificación vectorial piramidal. El índice de entrada que se crea mediante un esquema de enumeración está descuidando el signo del coeficiente terminal distinto de cero. En el paso 456, se asigna un signo del coeficiente terminal distinto de cero en el vector de salida entero según el signo principal recibido. En realizaciones alternativas, el paso 456 se puede realizar simultáneamente como, en combinación con o antes del paso 454. En el paso 458, se emite el vector de salida entero. El proceso finaliza en el paso 499.
En una realización particular, el paso de desindexación de 454 se realiza mediante un procedimiento de desenumeración iterativo. En otra realización particular, el procedimiento de desenumeración iterativo comprende un paso de inicialización, en el que un índice restante se establece igual al índice de entrada, y una repetición de un paso de iteración, en el que se selecciona para su consideración un coeficiente actual del vector de salida entero. El paso de iteración a su vez comprende encontrar un parámetro de desplazamiento que sea compatible con una posición del coeficiente actual dentro del vector de salida entero y con el índice restante, reducir el índice restante en dependencia del parámetro de desplazamiento y establecer una amplitud del coeficiente actual del vector de entrada entero que sea igual a una amplitud asociada con el parámetro de desplazamiento. La repetición continúa con los coeficientes del vector de entrada entero que se seleccionan uno tras otro como el coeficiente actual al menos hasta que el índice restante se vuelve igual a cero.
Algunos aspectos del lado del receptor de la desindexación de MPVQ se ilustran a continuación utilizando diagramas de bloques detallados que implementan realizaciones de los procesos. En la Fig. 11 se ilustra una descripción general de una realización de desindexación de MPVQ. La desindexación de MPVQ comienza en el paso 250. En el paso 260, las dimensiones N de VQ y el número de pulsos unitarios K se logran a partir del bucle de asignación de bits del códec. En el paso 270, se encuentran un tamaño y desplazamientos. En el paso 280, se extrae un signo inicial del flujo de bits entrante y en el paso 285, se obtiene el índice de MPVQ del flujo de bits entrante. Estas cantidades se utilizan en el paso 290, donde se descompone el índice de MPVQ. El proceso finaliza en el paso 299.
En comparación con el diagrama de flujo de la Fig. 10, se puede considerar que los pasos 260, 270, 280 y 285 están comprendidos en el paso 452. Los pasos 454 y 456 se consideran de manera similar que están comprendidos en el paso 290.
Una realización de los procedimientos para encontrar el tamaño y los desplazamientos, por ejemplo, correspondiente al paso 270 de la Fig. 11 se ilustra en la Fig. 12. El desplazamiento A (n, k) en la desindexación es típicamente un desplazamiento de amplitud, pero también tiene en cuenta los signos restantes. El desplazamiento U (n, k) es similar. También es un desplazamiento de amplitud. Sin embargo, no incluye el primer signo principal (el "2"), pero se incluyen todos los demás signos principales restantes. Los desplazamientos en general indican los tamaños de sección para las posibles combinaciones restantes de amplitudes y signos principales. A veces, esto se realiza con el signo principal actual (A (n, k)) y, a veces, sin el siguiente signo principal, pero todo el resto (caso U (n, k)). El procedimiento para encontrar el tamaño de MPVQ Nmpvq(N, K) y los desplazamientos de indexación A, U para la dimensión N de k = 0 a k = K 1 comienzan en el paso 500. Tenga en cuenta que las ecuaciones directas de A (n, k), la recursividad solo de fila A (n, k) y la recursividad básica A se conocen como tales en la técnica anterior. En el paso 502, se comprueba si el tamaño y los desplazamientos se almacenan o no en tablas ROM. Si es así, lo que puede ser realista si tanto N como K son bajos, el procedimiento continúa directamente con el paso 519. En el paso 504, se comprueba si es posible o no un cálculo directo eficaz. Si es así, lo que puede ser realista para N bajo, el proceso continúa hasta el paso 506, en el que se utilizan ecuaciones directas para el tamaño de MPVQ (N, K) y los desplazamientos de amplitud A (N, K). A continuación, el procedimiento continúa hasta el paso 519. En el paso 508, se comprueba si es posible o no una recursividad de filas eficaz. Si es así, lo que puede ser realista para algunos K, el proceso continúa hasta el paso 510, en el que se utilizan ecuaciones recursivas solo de filas para la fila N para calcular A (N, k = 0 ... K) y U (N, K 1). A continuación, el procedimiento continúa hasta el paso 514. Si en el paso 508 se encuentra que la recursividad solo de fila no es factible, el procedimiento continúa hasta el paso 512, en el que se utiliza un proceso de actualización de desplazamiento para una ecuación básica de recursividad de desplazamiento de columna y fila para fila 0 a la fila N para calcular los desplazamientos como A (N, k = 0 ... K) y U (N, K 1). Esto es posible para todos los N y K. Un ejemplo de una rutina de desplazamiento de actualización tal se puede encontrar en, por ejemplo, la Fig. 9. En el paso 514, el tamaño de MPVQ se puede calcular como tamaño de MPVQ = 1 (A (N, K) >> 1) U (N, K 1) o alternativamente como tamaño de MPVQ = 1 U (N; K) U (N, K 1). En el paso 519, el procedimiento finaliza devolviendo los desplazamientos (A, U) y el tamaño de MPVQ.
La Fig. 13 ilustra una realización de la descomposición del índice de MPVQ. El procedimiento para descomponer un índice de MPVQ comienza en el paso 520. Se proporcionan los parámetros N, K, el índice de entrada y el signo principal, así como los valores de desplazamiento. Un índice restante se establece igual al índice de entrada. En el paso 522, el vector de salida "vec" se inicializa con ceros. En el paso 524, el máximo local k, k_max_local se establece igual a K, la posición en el vector comienza desde 0 y n se establece en N. En el paso 526, se investiga si se consideran todas las posiciones en el vector. Si es así, el vector se devuelve como el vector de salida en el paso 548, es decir, una salida después de que se trata la última posición. En el paso 528, se investiga si el índice restante es cero. Si es así, no se deben llenar más posiciones vectoriales con valores distintos de cero. El procedimiento continúa hasta el paso 530, en el que se incorpora el signo principal y se devuelve el vector como vector de salida en el paso 549, es decir, una salida temprana rápida antes de que se haya tratado la última posición. Si el índice restante es mayor que cero, el procedimiento continúa hasta el paso 532, en el que se encuentra una k_delta, es decir, una amplitud absoluta de la posición de vector bajo investigación, y un desplazamiento de amplitud "amp_offset". Esto se describirá con más detalle más adelante. En el paso 534, el índice restante se reduce mediante el desplazamiento de amplitud. Si la amplitud de la posición del vector no es cero, como se investigó en el paso 536, el procedimiento continúa hasta el paso 538, donde a la posición del vector se le da un valor igual a la amplitud multiplicada por el signo principal. Para el primer coeficiente distinto de cero, el signo principal es el signo principal extraído del flujo de bits. En el paso 540, se deduce un siguiente signo principal para una posición futura.
Esto se describe con más detalle más adelante. En el paso 542, el valor k máximo local se reduce con el valor k actual "k_delta". A continuación, se prepara una siguiente repetición en el paso 544 aumentando la dimensión n, actualizando los desplazamientos y aumentando la posición en el vector en un paso. A continuación, el procedimiento vuelve al paso 526.
Como se indica en la Fig. 13, a partir del índice recibido, se determina la amplitud 'k_delta' de la posición actual. Esto se realiza preferiblemente usando desplazamientos A (n, k) y/o desplazamientos U (n, k) disponibles. El desplazamiento de información de amplitud también se deduce y el índice restante se reduce en este desplazamiento de información de amplitud 'amp_offset'. En la figura 14 se ilustra una realización de tal procedimiento.
Una realización de un procedimiento para encontrar la amplitud k_delta y el desplazamiento de amplitud amp_offset comienza en el paso 550. En otras palabras, se supone que este procedimiento encuentra la amplitud de la posición actual y el correspondiente desplazamiento de índice. Las búsquedas lineales o de árbol que utilizan desplazamientos de A (n, k) están, como tales, disponibles en la técnica anterior. Los parámetros entrantes son el máximo local k "k_max_local", el índice y los desplazamientos H (n, k) = A (n, k). En el paso 552, se selecciona una búsqueda lineal o de árbol. Para la opción de búsqueda lineal, el paso 554 establece un valor k acumulado, k_acc, igual al máximo local k y un desplazamiento de amplitud se establece igual a un desplazamiento para el valor presente n y el valor k acumulado. En el paso 556, se comprueba si el desplazamiento es mayor o no que el índice. Si este es el caso, en el paso 558 el valor k_acc se reduce en una unidad, se deriva un nuevo desplazamiento de amplitud. A continuación, el procedimiento vuelve al paso 556. Esto se repite hasta que se encuentra el mayor valor de desplazamiento de amplitud menor o igual que el índice restante. A continuación, el procedimiento continúa hasta el paso 560, en el que k_delta, es decir, la amplitud de la posición actual se calcula como el valor k máximo local reducido por el valor k_acc.
Si se selecciona un procedimiento de árbol, en el paso 562, se definen un parámetro alto y uno bajo y se deduce un desplazamiento de amplitud para n y el parámetro alto. La región k para buscar se divide en dos partes en el paso 564 con un parámetro k_test y un desplazamiento de amplitud para n y se deduce el parámetro alto. Dependiendo de si el desplazamiento de amplitud es mayor o menor que el índice, como se decidió en el paso 566, se cambia el parámetro alto, en el paso 568, o se cambia el parámetro bajo, en el paso 572. Esto se repite hasta que cualquiera de la diferencia entre el desplazamiento de amplitud y el índice se vuelve cero o el punto k_test se vuelve igual al parámetro alto, como se comprueba en los pasos 570 y 574, respectivamente. En el paso 576, la k_delta, es decir, la amplitud de la posición actual se calcula como el valor k máximo local reducido por el valor k_test. La amplitud k_delta, k_acc y amp_offset, donde k_acc = k_max_local-k_delta se usa para la codificación de signos seccionados, se devuelven en el paso 579.
En la Fig. 13, en el paso 536, si la magnitud es distinta de cero y menor que el valor máximo de pulsos unitarios K restante, el signo principal extraído (almacenado) previamente se aplica en el paso 538, a la amplitud de la posición actual. Posteriormente, el siguiente signo principal se extraerá del índice de MPVQ recibido descompuesto. En la Fig. 15 se ilustra una realización de un procedimiento para encontrar el siguiente signo principal y eliminar la información de signo extraída (bit o sign_offset) del índice.
El procedimiento para obtener un siguiente signo principal comienza en el paso 580. Los parámetros de entrada son el índice restante, los desplazamientos y el valor k acumulado k_acc. En el paso 582, se selecciona el método de posicionamiento de signo. Si se selecciona el enfoque LSB, que actualmente se cree que es la realización preferida, el signo principal se establece inicialmente como positivo (+1) en el paso 584. En el paso 586 se determina el bit menos significativo en el índice, usando un modo bit 'y' operación. Si el bit es un "1", esto significa un signo negativo y, en consecuencia, el signo principal se cambia a "-1" en el paso 588. En el paso 590, el índice se cambia una posición, es decir, cambiando el bit de signo.
Si se selecciona una decodificación de signo principal seccionada, que es un poco más compleja, el signo principal se establece inicialmente como positivo (1) en el paso 592. En el paso 594, el tamaño del segmento k_delta se divide por 2. Si el índice es mayor o igual que este desplazamiento de signo, el signo es negativo y, en consecuencia, el signo principal se cambia en el paso 597. En el paso 598, el índice también se reduce por el desplazamiento de signo encontrado. El signo principal y el índice modificado se devuelven en el paso 599.
Volviendo nuevamente a la Fig. 13, si la posición actual tiene amplitud cero, el signo principal se mantiene, es decir, se recuerda para uso potencial en la siguiente posición después de la posición actual.
Si la magnitud es igual al valor de pulsos unitarios K restantes máximo, se aplica el signo principal almacenado. Opcionalmente, se puede utilizar una salida de iteración rápida para esta última entrada distinta de cero y una salida temprana con una serie de ceros finales. Esto es opcional ya que a veces en DSP-HW el costo de salir condicionalmente de un bucle de longitud constante optimizado es más alto que permanecer en el bucle.
Los desplazamientos A (n, k) (o U (n, k) se pueden actualizar de forma recursiva para el vector restante, con una dimensión menos para desindexar y menos pulsos unitarios 'k_delta' para desindexar. Una realización de un procedimiento para la actualización de desplazamiento para una dimensión menos se ilustra en la Fig. 16. El procedimiento es similar al presentado en la Fig. 9, pero aquí, la dimensión se reduce en lugar de aumentarse.
El procedimiento para actualizar los desplazamientos comienza en el paso 600. Los parámetros de entrada son la dimensión n y el valor k_max. Este procedimiento proporciona desplazamientos de indexación de una fila n 1 a desplazamientos de indexación de la fila n, incluyendo la actualización de desplazamientos para k de 0 ... k_max. En el paso 602, se decide si se van a utilizar o no solo desplazamientos A. Si ese es el caso, en el paso 604, A (n, k) se calcula como:
A(n,k)=A(n+l,k)- A(n, k-l)-A(n+l,k-l).
Esta recursividad particular se utiliza también en la técnica anterior, pero junto con procesos de indexación de PVQ menos eficientes. La A (n, k) se devuelve en el paso 617. En el paso 606, se decide si se van a utilizar o no solo desplazamientos U. Si ese es el caso, en el paso 608, U (n, k) se calcula como:
U(n,k)= U(n+ l,k)-U(n,k- 1)-U(n+1, k-l)-l.
Se devuelve U (n, k) en el paso 618. En el paso 610, se va a utilizar una combinación de desplazamientos A y U. En el paso 612, las recursividades para k = 0 ... (k-max-1) se realizan según:
A(n,k)=A(n+l,k)-A(n,k-l)-A(n+ l,k-l).
Esta recursividad particular se utiliza también en la técnica anterior, pero junto con procesos de indexación de PVQ menos eficientes. Para el desplazamiento dinámico más alto k_max, donde k_max = K 1, las recursividades se realizan en el paso 614. En una realización particular, se usa una recursividad U pura según:
En otra realización particular, se utiliza una recursividad A/U mixta según:
donde (y >> 1) significa y = suelo (y/2). La A (n, k) y U (n, k_max) se devuelven en el paso 619.
A continuación se describen aquí tres ejemplos para apoyar la comprensión de la estructura de la Fig. 13. Los ejemplos son de una complejidad extremadamente baja para mantener la descripción limitada y hacer perceptible el ejemplo total. Sin embargo, en ejemplos reales típicos, las dimensiones y el número de pulsos unitarios son mucho mayores. Sin embargo, los principios son los mismos.
En un primer ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un índice de entrada de 17 y un signo principal "+1", es decir, positivo. Se realiza la inicialización y "pos" se establece en "0", es decir, la desindexación comienza desde el primer coeficiente en el vector, k_max_local a "5" y la dimensión n = 3. El índice de entrada se "renombra" en un índice restante. La posición es inferior a 3 y el índice restante es distinto de cero. Se busca una amplitud k_delta y un desplazamiento amp_offset (por ejemplo, según la Fig. 14). Si por ejemplo, se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (3,0 ... 5) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (3,3) = 13. Por lo tanto, k_acc se convierte en 3, k_delta se convierte en 2 y amp_offset es igual a 13. El índice restante se reduce por el amp_offset y ahora se vuelve igual a 4. Dado que k_delta no es igual a cero, hay que aplicar un signo. Por lo tanto, la posición del vector se establece en el valor absoluto (k_delta) multiplicado por el signo principal recibido y almacenado, que era positivo. El vector de salida ahora es [2,0,0]. A continuación, se realiza una determinación de un siguiente signo principal, por ejemplo, según la Fig. 15. Si se asume un posicionamiento de signo LSB, el LSB del índice restante (4) es cero, lo que corresponde a un signo positivo. Por lo tanto, el lead_sign se establece en "+ 1". El índice restante también se reduce desplazando el índice un paso, es decir, igual a una división entera por 2. El índice restante ahora es igual a 2. Finalmente, las unidades de pulso restantes k_max_local se actualizan y ahora es 3.
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 2, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 1. Los desplazamientos disponibles también se actualizan según la nueva n. El flujo vuelve al paso 526 y se debe encontrar una nueva amplitud y desplazamiento (por ejemplo, según la Fig. 14). Si por ejemplo, se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (2,0 ... 3) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (2,1) = 1. Por lo tanto, k_acc se convierte en 1, k_delta se convierte en 2 y amp_offset es igual a 1. El índice restante se reduce por amp_offset y ahora se vuelve igual a 1. Dado que k_delta no es igual a cero, hay un signo que se aplicará. Por lo tanto, la posición del vector se establece en el valor absoluto (k_delta) multiplicado por el signo principal extraído recientemente, que era positivo. El vector de salida ahora es [2,2,0]. A continuación, se realiza una determinación de un siguiente signo principal, por ejemplo, según la Fig. 15. Si se asume un posicionamiento de signo LSB, el LSB del índice restante (1) es 1, que corresponde a un signo negativo. Por lo tanto, lead_sign se establece en -1. El índice restante también se reduce desplazando el índice un paso, es decir, igual a una división entera por 2. El índice restante ahora es igual a 0. Finalmente, las unidades de pulso restantes k_max_local se actualizan y ahora es 1.
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 1, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 2. Los desplazamientos disponibles también se actualizan según la nueva n. El flujo vuelve al paso 526. Dado que el índice restante es cero, se realiza el paso 530 para dar el último coeficiente vectorial. lead_sign es igual a -1 y k_max_local es igual a 1, lo que da un vector de salida de [2,2, -1].
En un segundo ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un índice de entrada de 4 y un signo principal negativo. Se realiza la inicialización y "pos" se establece en "0", es decir, la desindexación comienza desde el primer coeficiente en el vector, k_max_local a "5" y la dimensión n = 3. El índice de entrada se "renombra" en un índice restante. La posición es inferior a 3 y el índice restante es distinto de cero. Se busca una amplitud k_delta y un desplazamiento amp_offset (por ejemplo, según la Fig. 14). Si por ejemplo, se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (3,0 ... 5) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (3,1) = 1. Por lo tanto, k_acc se convierte en 1, k_delta se convierte en 4 y amp_offset es igual a 1. El índice restante se reduce por amp_offset y ahora se vuelve igual a 3. Dado que k_delta no es igual a cero, hay un signo que debe aplicarse. Por lo tanto, la posición del vector se establece en el valor absoluto (k_delta) multiplicado por el signo principal recibido, que era negativo. El vector de salida ahora es [-4,0,0]. A continuación, se realiza una determinación de un siguiente signo principal, por ejemplo, según la Fig. 15. Si se asume un posicionamiento de signo LSB, el LSB del índice restante (3) es 1, que corresponde a un signo negativo. Por lo tanto, lead_sign se establece en - 1. El índice restante también se reduce desplazando el índice un paso, es decir, igual a una división entera por 2. El índice restante ahora es igual a 2. Finalmente, las unidades de pulso restantes k_max_local se actualizan y ahora es 1.
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 2, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 1. Los desplazamientos disponibles también se actualizan según la nueva n. El flujo vuelve al paso 526 y se debe encontrar una nueva amplitud y desplazamiento (por ejemplo, según la Fig. 14). Si por ejemplo, se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (2,0 ... 1) y el desplazamiento A más grande que aún es menor que el índice restante es A (2,1) = 1. Por lo tanto, k_acc se convierte en 1, k_delta se convierte en 0 y amp_offset es igual a 1. El índice restante se reduce por el amp_offset y ahora se vuelve igual a 1. Como k_delta es igual a cero, el último signo extraído se guarda para una siguiente repetición. El vector de salida sigue siendo [-4,0,0].
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 1, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 2. Los desplazamientos disponibles también se actualizan según la nueva n. El flujo vuelve al paso 526 y se debe encontrar una nueva amplitud y desplazamiento (por ejemplo, según la Fig. 14). Si por ejemplo, se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (1,0 ... 1) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (1,1) = 1. Por lo tanto, k_acc se convierte en 1, k_delta se convierte en 0 y amp_offset es igual a 1. El índice restante se reduce por el amp_offset y ahora se vuelve igual a 0. Dado que k_delta no es igual a cero, hay un signo que se aplicará. Por lo tanto, la posición del vector se establece en el valor absoluto (k_delta) multiplicado por el signo principal extraído anteriormente, que era negativo. El vector de salida final ahora es [-4,0, -1].
En un tercer ejemplo, que tiene una dimensión N = 3 y un número de pulsos unitarios K = 5, consideremos un índice de entrada de 41 y un signo principal positivo. Se realiza la inicialización y "pos" se establece en "0", es decir, la desindexación comienza desde el primer coeficiente en el vector, k_max_local a "5" y la dimensión n = 3. El índice de entrada se "renombra" en un índice restante. La posición es inferior a 3 y el índice restante es distinto de cero. Se busca una amplitud k_delta y un desplazamiento amp_offset (por ejemplo, según la Fig. 14). Si por ejemplo se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (3,0 ... 5) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (3,5) = 41. Por lo tanto, k_acc se convierte en 5, k_delta se convierte en 0 y amp_offset es igual a 41. El índice restante se reduce por el amp_offset y ahora se vuelve igual a 0. Dado que k_delta es igual a cero, el signo se guarda para una iteración posterior. El vector de salida sigue siendo [0,0,0].
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 2, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 1. Los desplazamientos disponibles también se actualizan según la nueva n. El flujo vuelve al paso 526 y se debe encontrar una nueva amplitud y desplazamiento (por ejemplo, según la Fig. 14). Si por ejemplo se utilizan los desplazamientos A, se investiga el grupo de desplazamientos A (2,0 ... 5) y el desplazamiento A más grande que aún es menor o igual que el índice restante es A (2,0) = 0. Por lo tanto, k_acc se convierte en 0, k_delta se convierte en 5 y amp_offset es igual a 0. El índice restante se reduce por el amp_offset y ahora se vuelve igual a 0. Dado que k_delta no es igual a cero, hay un signo que se aplicará. Por lo tanto, la posición del vector se establece en el valor absoluto (k_delta) multiplicado por el signo principal recibido y almacenado, que era positivo. El vector de salida ahora es [0,5,0].
Se prepara una siguiente repetición reduciendo el número n en 1, es decir, n = 1, y aumentando el indicador de posición "pos" en 1, por ejemplo, pos = 2. El flujo vuelve al paso 526. En el paso 528, se encuentra que el índice es cero y se usa la salida rápida a través de los pasos 530 y 549.
Este nuevo enfoque de indexación, presentado en la presente descripción, es un esquema mejorado de palabra de código corta de baja complejidad. En diseño, es una solución basada en los esquemas optimizados de indexación de magnitud pura (Fischer/Hung/Opus/CELT) pero además hace un uso eficiente del hecho de que el tamaño de cualquier estructura de PVQ siempre es un número par de vectores.
Seguirá siendo necesario manejar bits de vectores de PVQ muy grandes (mayores que 1 B) de una manera eficiente. Esto se puede realizar, por ejemplo, mediante la división de la dimensión del vector de destino, la división de la dimensión del vector de PVQ o los costosos cálculos de enteros de rango dinámico más alto, por ejemplo, n * 16 o n * 32 enteros grandes definidos por software virtuales.
La ganancia de pasar de B a B 1 bits (por ejemplo, 32 a 33 bits) se puede cuantificar como la capacidad extendida de rango de R = bits/coeficiente donde la división de dimensiones no es necesaria para una dimensión determinada. Por ejemplo, para la dimensión N = 8, se va de R = 32/8 = 4 bits/coeficiente (o muestra) a R = 33/8 = 4,125 bits por coeficiente o muestra. Normalmente, se requiere R = 7 bits de forma/coeficiente (o muestra) para un esquema de PVQ de audio en el dominio de la frecuencia de alta calidad.
La Fig. 17A presenta una descripción general de las palabras de código de PVQ para algunos límites de bits de hardware comunes. La curva 900 denota PVQ (n, k) límite de bit 33, la curva 901 denota PVQ (n, k) límite de bit 32, la curva 902 denota PVQ (n, k) límite de bit 31, la curva 903 denota PVQ (n, k) límite de bit 17, curva 904 denota PVQ (n, k) límite de bit 16, y la curva 905 denota PVQ (n, k) límite de bit 15. Es posible usar 33 bits con un nuevo esquema y enteros de 32 bits sin signo, 32 bits corresponden a un entero de 32 bits sin signo, 31 bits corresponden a enteros de 32 bits con signo, 17 bits son posibles de utilizar con un nuevo esquema y enteros de 16 bits sin signo, 16 bits corresponden a enteros de 16 bits sin signo, 15 bits corresponden a un entero de 16 bits con signo.
La Fig. 17B presenta una descripción general de los valores R relacionados en bits/muestra para cuantificadores óptimos de palabras de código de PVQ con diferentes límites de BIT. La curva 910 denota PVQ (n, k) límite de bit 33, la curva 911 denota PVQ (n, k) límite de bit 32, la curva 912 denota PVQ (n, k) límite de bit 31, la curva 913 denota PVQ (n, k) límite de bit 17, curva 914 denota PVQ (n, k) límite de bit 16, y la curva 915 denota PVQ (n, k) límite de bit 15. Con valores de R más altos, se puede lograr una calidad de codificación más alta.
La Fig. 17C muestra la correspondiente densidad de pulso alcanzable, que está directamente correlacionada con la capacidad de adaptación de forma resultante de una PVQ de ganancia-forma. La curva 920 denota PVQ (n, k) límite de bit 33, la curva 921 denota PVQ (n, k) límite de bit 32, la curva 922 denota PVQ (n, k) límite de bit 31, la curva 923 denota PVQ (n, k) límite de bit 17, curva 924 denota PVQ (n, k) límite de bit 16, y la curva 925 denota PVQ (n, k) límite de bit 15. Con valores de R más altos, se puede lograr una calidad de codificación más alta. La posible densidad de pulsos para cuantificadores óptimos de palabras de código de PVQ se muestra con diferentes límites de BIT. Con densidades de pulsos más altas, se puede lograr una calidad de codificación más alta, por ejemplo, mayor SNR de VQ.
La Fig. 17D ilustra un compromiso de la Instrucción MOPS en el peor de los casos en la indexación/desindexación para un esquema de PVQ de la técnica anterior de muestra y para el nuevo esquema de MPVQ, ambos usando palabras de código de PVQ de tamaño máximo 32 para una comparación justa. La curva 930 denota complejidad total para MPVQ, la curva 931 denota complejidad total para PVQ, la curva 932 denota complejidad de desindexación para MPVQ, la curva 933 denota complejidad de desindexación para PVQ, la curva 934 denota complejidad de indexación para MPVQ y la curva 935 denota complejidad de indexación para PVQ. La MPVQ anterior se puede implementar en una arquitectura de 32 bits con signo, mientras que la PVQ de la técnica anterior requiere una arquitectura de 32 bits sin signo.
En una segunda parte de la tecnología presentada actualmente, se describe un cálculo de desplazamientos en tiempo de ejecución de MPVQ de baja dinámica. En el Apéndice A, la descripción de texto de alto nivel del OPUS RFC se repite como antecedentes. En el código c IETF-OPUS (cwrs.c), el desplazamiento de indexación calculado dinámicamente en tiempo de ejecución A (n, k) se utiliza tanto para la indexación de signos como de amplitud. Sin embargo, tenga en cuenta que se utiliza un nombre de variable de desplazamiento diferente en el código c de OPUS. El número A (n, k) representa el número de vectores PVQ (n, k) que comienza con un valor positivo distinto de cero en la primera posición. Se ha encontrado en la técnica anterior que
A(n, k) = (NpvQ(n,k-l) NpvQ(n-l,k-l))/2,
En palabras, el número A es una suma ponderada de un elemento de fila n y un elemento de fila n-1 anterior en la matriz de tamaño de PVQ N (n, k).
La Tabla 1, para A (n, k), muestra un ejemplo en el que se usó el esquema de datos de desplazamiento de PVQ (CELT/OPUS) de la técnica anterior, donde para la eficiencia de la memoria solo una fila, por ejemplo, n == 3 se almacena en la memoria RAM, para un punto dado en la recursividad hacia adelante, y luego n = 4 se calcula en base a la fila n = 3, y así sucesivamente.
Tenga en cuenta que en una implementación de PVQ del mundo real para la codificación de voz y audio, la dimensión n puede ser de alrededor de 256 y el número de pulsos de unidad k puede ser de alrededor de 512, dependiendo de la capacidad del DSP de destino. Por lo tanto, almacenar n * k desplazamientos a menudo no es factible.
Tabla 1 Desplazamientos A (n, k) de la técnica anterior necesarios para PVQ (n = 6, k = 5) calculados para la decodificación/codificación de PVQ, por ejemplo, en un esquema de indexación similar a IETF-OPUS-Audio
Figure imgf000020_0001
Sin embargo, los cálculos de desplazamiento de indexación dinámica pueden mejorarse. La recursividad novedosa aquí propuesta es
U(n,k) = U(n,k-1) U(n-l,k-l) U(n-l,k) 1,
Se puede encontrar que se relaciona con los desplazamientos A (n, k) de OPUS/CELT de la técnica anterior empleados anteriormente como:
A(n,k) = 2*U(n,k) 1.
La dinámica del rango de enteros de U (n, k) es ahora siempre al menos la mitad del rango A (n, k). Esto significa que se puede poner a disposición 1 bit adicional para una indexación rápida, por ejemplo, dentro de una palabra de 32 bits. Además, U (2, k) y U (3, k) se pueden calcular directamente más rápido que para A (2, k) y A (3, k), ya que U (2, k) = k-1, U (3, k) = k * (k-1), y U (a, b) = U (b, a) simétricamente.
Tabla 2 Nuevos desplazamientos de indexación U (n, k) de rango dinámico bajo, calculados para MPVQ (n = 6, k =
5)
Figure imgf000020_0002
En las Tablas 1 y 2 anteriores se puede ver que A (n = 6, k = 6) = 1683 no puede ajustarse dentro de 10 bits. 10 bits corresponden a 1024 entradas, por ejemplo, valores 0-1023. Sin embargo, el nuevo desplazamiento U (n = 6, k = 6) se ajustará a 10 bits. Como los desplazamientos de indexación deben calcularse exactamente para una indexación/desindexación exacta exitosa, no se puede permitir que el desplazamiento A (6,6) se sature a 1023 o se ajuste a un valor bajo incorrecto.
La recursividad anterior (PVQ de la técnica anterior de lETF/OPUS-Audio) es
A(n,k) = A(n,k-1) A(n-l,k-l) A(n-l,k).
Tiene tres términos de suma, lo que lo hace ligeramente más rápido de calcular, especialmente para n alto o k alto en comparación con la nueva recursividad U (n, k) que tiene sumas de 4 términos.
Para mantener la eficiencia de la recursividad y mantener un rango dinámico bajo cuando sea necesario, en otra realización se puede definir una recursividad mixta preferida donde U (n, KMAX) es una función de los valores de desplazamiento A (n, k inferior) anteriores, y solo se usa para datos de recursividad dinámicos que están cerca del límite de rango de una palabra de B bits. Esto típicamente es cierto para la última columna KMAX en una recursividad basada en N filas. En la Tabla 3 se ve que los desplazamientos aún se mantienen dentro de los 10 bits, en comparación con la T abla 1, cuya última entrada supera los 10 bits.
Tabla 3 Desplazamientos mixtos A (n, k) y la última k columna U (n, 6 = KMAX) calculados para la recursividad de indexación eficiente y segura de rango.
Figure imgf000021_0001
Tenga en cuenta que normalmente es el último NMAX de n filas (6 en este caso) y el más alto (k = 6 en este caso) los que causan problemas de rango dinámico. Sin embargo, en algunos casos también la penúltima fila (NMAX-1) puede causar problemas de rango, por ejemplo, en cálculos de recursividad de solo filas, cuando el numerador de una división está cerca del límite de bits de hardware.
La derivación de las relaciones recursivas anteriores para el esquema de MPVQ se puede encontrar en el Apéndice B.
En la Tabla 4 se presenta un ejemplo de un esquema de indexación de PVQ de la técnica anterior. Aquí, el valor de índice máximo, A (n, k) A (k 1) - 1, debe ser menor que por ejemplo, 232. El esquema de la Tabla 4 con signos conmutados [{+, 0}/-] se utiliza en OPUS/CELT de la técnica anterior. Comentarios: a) vector [-2, -1,1]; b) Aquí, para los índices 25-40, la desindexación de un cero en la posición p0 puede convertirse eventualmente en un valor positivo, un valor negativo o un cero en p1; c) límite de decisión positiva p0.
Una indexación de PVQ de la técnica anterior con [{+, 0}/-] esquema de desindexación recursiva de PVQ, PVQ (n = 3, k = 4), NPVQ = 66, [{-, 0}/+] celdas de indexación de la técnica anterior (azul, blanca) pX = posición en el vector tridimensional [p0, p1, p2], k = 4 pulsos unitarios pueden codificarse, por ejemplo, índice decodificado 7 -> vector [-2, -1, 1], los desplazamientos A (n, k) se utilizan para determinados signos y la relación NPVQ (n = 3, k = 4) = A (n, k) A (n, k 1) se utiliza para determinar el tamaño de estos desplazamientos.
Tabla 4 Ejemplo de esquema de indexación de PVQ de la técnica anterior.
Figure imgf000022_0001
Figure imgf000023_0001
Figure imgf000024_0002
Las relaciones A y U se pueden ver gráficamente en la Tabla 5 para el ejemplo de MPVQ (3,5), usando una solución recursiva de signo principal. NPVQ(n = 3, k = 5) = 2 * Nmpvq(3,5) = 2 * 51 = 102, donde el "2" corresponde a un bit de signo principal extraído previamente. El vector PVQ-vec = [p0, p1, p2], por ejemplo, el índice decodificado 8 es [3, -1, 1], suma (abs (PVQ-vec)) = 5, en la Tabla 5 a continuación, el signo inicial ahora extraído previamente es positivo (+), es decir, el valor p0 a continuación es siempre mayor o igual que 0. En el ejemplo, el siguiente signo principal se almacena en el bit LSB de las secciones 2 * U (n, k).
Tabla 5 Ejemplo de enumeración de signos principales basada en LSB de MPVQ (3,5).
Figure imgf000024_0001
Figure imgf000025_0001
Figure imgf000026_0001
Tabla 6 Ejemplo MPVQ (3,5) Enumeración de signos principales basada en LSB, ejemplos de construcción de índices.
Tabla 6 Ejemplos de construcción de índices, enumeración de signos principales en base a LSB de MPVQ(3,5) de ejemplo.
Figure imgf000026_0002
Figure imgf000027_0001
Figure imgf000028_0001
Figure imgf000029_0002
Tenga en cuenta que el tamaño de PVQ en la Tabla 5 ahora debe calcularse usando Nmpvq = 1 U (n, k) U (n, K 1), ya que A (n, k 1), no se puede calcular de forma segura dentro de límite de bits 2*NMPVQ(n, k) (por ejemplo, 32 bits) para todos los n, k. La técnica anterior usa tamaño de PVQ = A (n, K 1) A (n, K), o una suma sobre elementos distintos de cero usando funciones combinatorias costosas de MOPS o una búsqueda de tabla costosa de ROM de valores almacenados.
A (n, k) también se puede encontrar como 1 2 * U (n, k) en los esquemas de recursividad básicos de la Fig. 5 (Posicionamiento seccionado del signo o signos principales) y en la Fig. 2 (Posicionamiento LSB del signo o signos principales).
En otra parte de la tecnología presentada actualmente se describe una indexación de MPVQ optimizada a través de la extracción previa de las posiciones de codificación de signos. También es posible optimizar el bucle interno de la composición del índice de MPVQ del lado del codificador extrayendo previamente los signos principales de MPVQ en un vector de posiciones de codificación de signos encode_sign [0 ... N-1], y el signo real para codificar en esa posición, y el signo principal inicial restante. Sin embargo, esto requiere ejecutar una función de cambio de signo de procesamiento previo que puede resultar costosa en el caso de pocos pulsos. Sin embargo, en algunos casos puede ser la forma preferida de implementar la indexación de MPVQ, ya que el bucle interno de la composición del índice se vuelve aún más sencillo y se puede optimizar fuertemente, por ejemplo, para canalización de DSP.
El siguiente ejemplo de cambio previo del signo utiliza N = 8 y K = 13.
% Ejemplo de cambio previo de los signos principales, (N = 8, K = 13)
% pos 0 1 2 3 4 5 6 1
% PV -vec = - 1 0 5 0 - * 6 - 1
J
t
t
Figure imgf000029_0001
- 1
encede s ig n - + 1 0 0 0 - 1 0 - 1 0
% y:
lead_sign = -1 {negativo, (el signo de PVQ-vec(O)) En el ejemplo anterior, la codificación se realiza de derecha a izquierda, es decir, de la posición (N-1) a la posición 0.
La función de cambio previo cambia el primer signo a la variable 'lead_sign' y el resto de los signos en PVQ-vec se desplazan a la siguiente posición distinta de cero (a la izquierda). La última posición distinta de cero en PVQ-vec siempre obtendrá un valor 0 en el vector encode_sign.
La Fig. 18 ilustra una realización de una composición de índice de MPVQ que utiliza signos principales extraídos previamente. Allí, se muestran realizaciones de diagramas de bloques detallados para esta implementación de composición de índice de MPVQ. El procedimiento para componer el índice de MPVQ con signos principales extraídos previamente y tamaño de MPVQ comienza en el paso 700. Esta realización se basa en una solución con el siguiente signo en la posición LSB. Los parámetros de entrada son N, K y el vector de PVQ como "vec". El paso 702 es un paso de inicialización, con un caso base de recursividad de desplazamiento conocido, y establece n = 1. En el paso 704, el parámetro de posición se establece en N-1, es decir, el vector se analiza desde el final hacia el principio comenzando con la última posición. El índice acumulado y los pulsos acumulados se establecen en 0 en el paso 706. Primero, en el paso 708, se analizan los signos, que se describirán con más detalle más adelante. De este modo se determina el signo principal y un vector de signo está disponible. En el paso 710, se establece un valor igual al coeficiente del vector de entrada actual. En los pasos 712-720, el índice acumulado se adapta para el signo del coeficiente, si el coeficiente es distinto de cero, en esta realización añadiendo un LSB. En el paso 722, el índice acumulado se modifica según el desplazamiento asociado con los pulsos unitarios restantes y la dimensión presente. Si la posición presente es distinta de cero, como se comprobó en el paso 724, es decir, la búsqueda no ha alcanzado la parte delantera del vector de entrada, se prepara una nueva repetición en los pasos 726 y 728 y el procedimiento vuelve al paso 710. Si se busca el vector entero, el TAMAÑO de MPVQ se calcula en el paso 730 y el índice saliente, el signo principal y el tamaño de MPVQ se proporcionan en el paso 739.
La Fig. 19 ilustra una realización de una función de extracción de signos. El procedimiento comienza en el paso 740. En el paso 742, se realiza la inicialización, dando coeficientes 0 de un vector de signo codificado, asumiendo un signo principal positivo, dando una posición temporal del coeficiente inicial distinto de cero como -1 y comienza con el número de posición 0. En el paso 744, se comprueba si la posición es menor que el máximo y aún no se encuentra ningún signo principal. Si es así, en el paso 746, se comprueba si el coeficiente del vector de la posición actual es cero. Si es así, la posición presente avanza un paso adelante en el paso 754 y se itera el proceso. Si el coeficiente del vector presente es distinto de cero, el procedimiento continúa hasta el paso 748, donde un coeficiente negativo da como resultado un lead_sign negativo en el paso 750. La posición del primer coeficiente distinto de cero se registra como initial_pos en el paso 752 antes de que continúe el procedimiento al paso 754. Si en el paso 744 se encuentra que se encuentra el signo principal, el procedimiento continúa hasta el paso 756, en el que se inicializa el procedimiento encode_sign del vector de signo. Los pasos 758-766 continúan buscando a través del vector de entrada coeficientes distintos de cero, y las posiciones correspondientes en el vector de signo reciben el signo del siguiente coeficiente distinto de cero. Cuando se investigan todas las posiciones, el signo principal y el vector de signo se devuelven en el paso 769.
Un beneficio de este enfoque es que el cambio previo o la localización previa de las posiciones de codificación de los signos principales hace posible evitar la reorganización de los signos principales en el bucle de iteración interno de indexación. Esto puede ser un beneficio cuando se desea optimizar el bucle interno de codificación en cierto hardware donde las ramas (IF/ELSE) son costosas de implementar.
La Tabla 7 ilustra un ejemplo de iteración de signo principal seccionado de MPVQ. NPVQ(n = 3, k = 5) = 2 * Nmpvq(3,5)= 2 * 51 = 102, donde el "2" corresponde a un bit de signo principal extraído previamente. El vector PVQ-vec = [p0, p1, p2], por ejemplo, el índice decodificado 8 es [3, 0, 2], sum (abs (PVQ-vec)) = 5. En la Tabla 7, el signo inicial ahora extraído previamente es positivo, en el ejemplo, el siguiente signo principal derivado de las secciones baja/alta de las secciones de amplitud inicial 2 * U (n, k).
Tabla 7 Ejemplo de enumeración de signos principales seccionada de MPVQ (3,5).
Figure imgf000030_0001
Figure imgf000031_0001
Figure imgf000032_0001
La Tabla 8 ilustra ejemplos de construcción de índices según la Tabla 7.
En una parte adicional de la tecnología presentada actualmente se describe una recursividad mixta de solo filas de baja dinámica. Si el valor de k es lo suficientemente bajo, es posible calcular el desplazamiento necesario para una fila dada n en la matriz de desplazamiento A (n, k) utilizando la nueva fórmula de recursividad de solo filas que se presenta más adelante. La derivación detallada de las nuevas fórmulas de recursividad se proporciona en el Apéndice B. La ecuación recursiva genérica para una fila dada n para el desplazamiento de diferencia de PVQ A (n, k), se utiliza en el código de IETF/OPUS-Audio de la técnica anterior 2012:
A(n,k) = A(n,k-2) ((2*n-l)*A(n,k-l) - A(n,k-2)) /(k-1)
Tabla 8 Ejemplo de enumeración de signos principales seccionados de MPVQ (3,5), ejemplos de construcción de índices.
Figure imgf000032_0002
Figure imgf000033_0001
Figure imgf000034_0001
Acomodando y manipulando la ecuación anterior y usando la nueva relación que U(n,k)= (A(n,k)-l)/2,
se puede obtener una nueva fórmula de recursividad mixta de rango dinámico inferior preferida: U(n,k) = U(n,k-2) (n*A(n,k-l) - NMpvQ(n,k-2)) / (k-1),
donde NMPVQ(n, k) = 1 U (n, k) U (n, k 1), (el tamaño de MPVQ (n, k)).
El nuevo término de numerador n * A (n, k-1) tiene aquí un rango dinámico mucho más bajo que el correspondiente término de numerador de la técnica anterior (2 * n-1) * A (n, k-1).
En una solución preferida, esta recursividad de solo filas se puede acomodar para usar solo valores pasados de A (n, k) para la fila n, utilizando el hecho de que A (n, k) es impar para k> 0. Obtenemos una nueva fórmula de recursividad mixta muy eficiente:
U(n,k) = A(n,k-2)>>1 (n*A(n,k-l)-(1+ A(n,k-l)>>l A(n,k-2)>>1 ) )/(k-l),
donde ">>" es una división entera por 2, un cambio a la derecha de bajo costo en la mayoría del hardware.
Esto permite el uso de recursividades rápidas de solo filas con precisión limitada, por ejemplo, dentro de 64 o 32 o 33 bits, para valores n más altos y k más altos que la recursividad de solo filas de la técnica anterior. En otras palabras, el nuevo término n * A (n, k-1) se desborda/ajusta más tarde que el término anterior 2 * n * A (n, k-1) a medida que se aumenta el rango de n o k, para la recursividad de filas.
El beneficio dinámico de la recursividad optimizada de solo filas también se puede ver indirectamente en la Tabla 2 de desplazamiento dinámica reducida, y también en la Tabla 3 de desplazamiento de recursividad mixta, ya que los desplazamientos resultantes de U (n, k) tienen una dinámica más baja que la A (n, k) utilizada anteriormente.
En una parte adicional de la tecnología presentada actualmente, se describe una iteración de signo principal de MPVQ mixta y cualquier iteración de PVQ heredada. Otra posible alternativa de enumeración es emplear una etapa inicial de enumeración de signos principales de MPVQ seguida de cualquier otro esquema de enumeración de PVQ eficiente, para el resto del vector. En otras palabras, siempre que se va a enumerar el segundo signo principal, el método de enumeración de PVQ en uso se puede cambiar a un esquema heredado. Las etapas iniciales de MPVQ de signo principal harán posible usar un poco más que el esquema de palabras de código cortas heredadas, y la etapa inicial de MPVQ reducirá la dinámica de los desplazamientos (A, U) a al menos 1 bit menos, después de la primera etapa de MPVQ.
La Tabla 99 muestra un ejemplo de estructura de desindexación y resultados para MPVQH, una combinación híbrida, una primera etapa de MPVQ seguida de una segunda etapa de enumeración basada en magnitud OPUS/IETF-Audio y (Tamaño PVQ (n, k) = A (n, k) A (n, k 1)).
Tabla 9 Ejemplo de enumeración híbrida de un solo signo principal de MPVQH (3,5).
Figure imgf000035_0001
Figure imgf000036_0001
Figure imgf000037_0001
Variación de MPVQ para (n = 3, k = 5). Esta versión híbrida utiliza una etapa de indexación iterativa de signo principal único seguida de un IETF/OPUS de la técnica anterior como celdas de etapa de indexación de PVQ basadas en magnitudes [{-, 0}/+], Npvq= 2 * Nmpvqh =2*51= 102, donde el "2" corresponde a un único bit de signo principal extraído único inicial.
El inconveniente con un esquema híbrido (como el MPVQH ejemplificado anteriormente) que usa una primera etapa MPVQ (n, k) y luego otra etapa de enumeración de PVQ basada en pirámide (por encima de una etapa de magnitud similar a IETF/OPUS) cuando se va a añadir un segundo signo, es que el tamaño del código PROM será bastante mayor, y que el cambio de método de indexación dentro del bucle de iteración requerirá una lógica de decisión adicional que requiere ciclos de DSP adicionales dentro de los bucles de iteración críticos. También puede ser necesario mantener varias memorias de desplazamientos. Sin embargo, una etapa de signo principal único de MPVQ híbrida seguida de etapas de un esquema de PVQ regular posterior también puede proporcionar el beneficio de extender el tamaño total de la palabra de código corta en 1 bit, por ejemplo, de 32 a 33 bits.
En las realizaciones descritas anteriormente, el signo principal se ha seleccionado como el signo del primer coeficiente distinto de cero en el vector. Sin embargo, en otras realizaciones, el signo inicial también se puede seleccionar como el último coeficiente distinto de cero en el vector. El signo principal es, por tanto, un signo de un coeficiente terminal distinto de cero en el vector de entrada entero o en el vector de salida entero. El coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de entrada entero o el vector de salida entero. El uso de extraer el signo principal es que la indexación restante se puede simplificar. Una razón importante es que el esquema de indexación se puede reducir en un factor 2. Antes de la indexación, no se sabe cuántos coeficientes distintos de cero hay en el vector a tratar. Sin embargo, siempre hay un coeficiente terminal distinto de cero.
En las realizaciones descritas anteriormente, también se ha supuesto que la indexación del vector de entrada entero comienza desde el último coeficiente y termina con el primer coeficiente, y que la desindexación comienza con el primer coeficiente del vector de salida entero y termina con el último. En realizaciones alternativas, la indexación puede comenzar, en su lugar, con el primer coeficiente de vector y terminar con el último, mientras que la desindexación comienza con el último coeficiente y termina con el primero. Esto se puede combinar con cualquiera de las alternativas de los coeficientes terminales distintos de cero. En realizaciones adicionales, la indexación puede seleccionar los coeficientes del vector de entrada entero en cualquier orden predeterminado, y la desindexación correspondiente pasa entonces a través de los coeficientes del vector de salida entero en la dirección opuesta. El esquema de enumeración de cuantificación vectorial piramidal y el esquema de desenumeración de cuantificación vectorial piramidal se pueden adaptar en consecuencia. En una realización particular, la "posición" en el vector entero de entrada/salida puede ser una posición en el orden de tratamiento asumido y no tiene que corresponder a la posición real dentro del propio vector.
La tecnología propuesta puede aplicarse en realizaciones particulares a un terminal de usuario o equipo de usuario, que puede ser un dispositivo cableado o inalámbrico.
Como se usa en la presente memoria, los términos no limitativos "Equipo de usuario" (UE) y "dispositivo inalámbrico" pueden referirse a un teléfono móvil, un teléfono celular, un Asistente Digital Personal, PDA, equipado con capacidades de comunicación por radio, un teléfono inteligente, un ordenador portátil u ordenador personal (PC) equipado con un módem de banda ancha móvil interno o externo, una tableta con capacidades de comunicación por radio, un dispositivo de destino, un UE de dispositivo a dispositivo, un UE de tipo de máquina o UE capaz de comunicación de máquina a máquina, iPAD, Equipos en las instalaciones del cliente (CPE), equipo integrado para ordenador portátil (LEE), Equipo montado en ordenador portátil (LME), llave electrónica de Bus Serie Universal (USB), un dispositivo de comunicación por radio electrónico portátil, un dispositivo sensor equipado con capacidades de comunicación por radio o similares. En particular, el término "UE" y el término "dispositivo inalámbrico" deben interpretarse como términos no limitativos que comprenden cualquier tipo de dispositivo inalámbrico que se comunique con un nodo de red de radio en un sistema de comunicación celular o móvil o cualquier dispositivo equipado con circuitos de radio para comunicación inalámbrica según cualquier estándar relevante para la comunicación dentro de un sistema de comunicación celular o móvil.
Como se usa en la presente memoria, el término "dispositivo cableado" puede referirse a cualquier dispositivo configurado o preparado para una conexión cableada a una red. En particular, el dispositivo cableado puede ser al menos algunos de los dispositivos anteriores, con o sin capacidad de comunicación por radio, cuando se configura para una conexión cableada.
La tecnología propuesta puede aplicarse en realizaciones particulares a un nodo de red, que puede ser un dispositivo cableado o inalámbrico.
El nodo de red puede ser en realizaciones particulares un nodo de red de radio. Como se usa en la presente memoria, el término no limitativo "nodo de red de radio" puede referirse a estaciones base, nodos de control de red tales como controladores de red, controladores de red de radio, controladores de estación base y similares. En particular, el término "estación base" puede abarcar diferentes tipos de estaciones base de radio que incluyen estaciones base estandarizadas tales como los Nodos B, o Nodos B evolucionados, eNB, y también estaciones base de radio macro/micro/pico, estaciones base domésticas, también conocidas como estaciones base femto, nodos retransmisores, repetidores, puntos de acceso de radio, estaciones transceptoras base, BTS, e incluso nodos de control de radio que controlan una o más Unidades de Radio Remotas, RRU, o similares.
En realizaciones particulares, el nodo de red puede ser un nodo de red en un sistema de comunicaciones cableado. El UE o nodo de red también puede incluir circuitos de radio para la comunicación con uno o más de otros nodos, incluyendo la transmisión y/o recepción de información.
Se apreciará que los métodos y dispositivos descritos en la presente memoria se pueden combinar y reorganizar de diversas formas.
Por ejemplo, las realizaciones pueden implementarse en hardware o en software para su ejecución mediante circuitos de procesamiento adecuados, o una combinación de los mismos.
Los pasos, funciones, procedimientos, módulos y/o bloques descritos en la presente memoria pueden implementarse en hardware usando cualquier tecnología convencional, tal como tecnología de circuitos discretos o circuitos integrados, incluyendo tanto circuitos electrónicos de propósito general como circuitos de aplicaciones específicas.
Los ejemplos particulares incluyen uno o más procesadores de señales digitales 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 y/o bloques descritos en la presente memoria pueden implementarse en software tal como un programa de ordenador para su ejecución mediante circuitos de procesamiento adecuados tales como uno o más procesadores o unidades de procesamiento. Por lo tanto, el diagrama o diagramas de flujo presentados en la presente memoria pueden considerarse como un diagrama o diagramas de flujo de ordenador, cuando se realizan por uno o más procesadores. Un aparato correspondiente puede definirse como 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.
Los ejemplos de circuitos de procesamiento incluyen, entre otros, uno o más microprocesadores, uno o más Procesadores de Señales Digitales, DSP, una o más Unidades Centrales de Procesamiento, CPU, hardware de aceleración de video y/o cualquier circuito lógico programable adecuado, tal como una o más Agrupaciones de Puertas Programables en Campo, FPGA, o uno o más Controladores Lógicos Programables, PLC.
También debe entenderse que puede ser posible reutilizar las capacidades generales de procesamiento de cualquier dispositivo o unidad convencional en la que se implemente la tecnología propuesta. También es posible reutilizar software existente, por ejemplo, reprogramando el software existente o agregando nuevos componentes de software.
La tecnología propuesta proporciona un codificador configurado para codificar señales de audio/video, en donde el codificador está configurado para obtener un vector de entrada entero que representa muestras de señales de audio/video, cuyo vector de entrada entero tiene un número de coeficientes de valores enteros, extraer un signo principal de dicho vector de entrada entero, siendo dicho signo principal un signo de un coeficiente terminal distinto de cero en el vector de entrada, siendo dicho coeficiente terminal distinto de cero uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de entrada entero , indexar dicho vector de entrada entero con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con dicho signo principal que representa muestras de señales de audio/video, en donde el esquema de enumeración de cuantificación vectorial piramidal está diseñado para ignorar el signo del coeficiente terminal distinto de cero, y para generar el signo principal como una primera palabra de código y el índice de salida como una segunda palabra de código en un flujo de bits saliente.
En un ejemplo particular, el codificador comprende un procesador y una memoria. La memoria que comprende instrucciones ejecutables por el procesador, mediante las cuales el codificador/procesador está operativo para obtener un vector de entrada entero que representa muestras de señales de audio/video, cuyo vector de entrada entero tiene un número de coeficientes de valores enteros, extrae un signo principal de dicho vector de entrada entero, siendo dicho signo principal un signo de un coeficiente terminal distinto de cero en el vector de entrada, siendo dicho coeficiente terminal distinto de cero uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de entrada entero, indexar dicho vector de entrada entero con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con el signo principal que representa muestras de señales de audio/video, en donde el esquema de enumeración de cuantificación vectorial piramidal está diseñado para ignorar el signo del coeficiente terminal distinto de cero y para generar el signo principal como primera palabra de código y el índice de salida como segunda palabra de código en un flujo de bits saliente.
La tecnología propuesta también proporciona un decodificador configurado para desindexar en muestras de audio/video mediante cuantificación vectorial piramidal, en donde el decodificador está configurado para recibir un signo inicial como primera palabra de código y un índice de entrada como segunda palabra de código de un flujo de bits entrante, el signo inicial y el índice de entrada que representa muestras de señales de audio/video, cuyo signo principal es un signo de un coeficiente terminal distinto de cero en un vector de salida entero que se creará, que representa las muestras de señales de audio/video, cuyo vector de salida entero tiene un número de coeficientes de valores enteros , cuyo coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de salida entero, desindexar el índice de entrada en el vector de salida entero con un esquema de desenumeración de cuantificación vectorial piramidal, en donde el índice de entrada que se crea mediante un esquema de enumeración está diseñado para ignorar el signo del coeficiente terminal distinto de cero, asignar un signo del coeficiente terminal distinto de cero según el signo principal recibido, y para generar el vector.
En un ejemplo particular, el decodificador comprende un procesador y una memoria. La memoria comprende instrucciones ejecutables por el procesador, por lo que el decodificador/procesador está operativo para recibir un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código de un flujo de bits entrante, el signo principal y el índice de entrada que representan muestras de señales de audio/video, cuyo signo principal es un signo de un coeficiente terminal distinto de cero en un vector de salida entero que se va a crear, que representa las muestras de señales de audio/video, cuyo vector de salida entero tiene un número de coeficientes de valores enteros, cuyo coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de salida entero, desindexar el índice de entrada en el vector de salida entero con un esquema de desenumeración de cuantificación vectorial piramidal, en donde el índice de entrada que es creado por un esquema de enumeración está diseñado para ignorar el signo del coeficiente terminal distinto de cero, asignar un signo del coeficiente de terminación distinto de cero según el signo principal recibido, y generar el vector.
A continuación, se describirá un ejemplo de una implementación informática con referencia a la Fig. 20. El codificador 10 comprende circuitos de procesamiento tales como uno o más procesadores 800 y una memoria 810. En este ejemplo particular, al menos algunos de los pasos, funciones, procedimientos, módulos y/o bloques descritos en la presente memoria se implementan en un programa de ordenador 820-826, que se carga en la memoria para su ejecución por los circuitos de procesamiento. Los circuitos de procesamiento y la memoria están interconectados entre sí para permitir la ejecución normal del software. Un dispositivo opcional de entrada/salida 804-808 también puede estar interconectado a los circuitos de procesamiento y/o la memoria para permitir la entrada y/o salida de datos relevantes tales como un parámetro o parámetros de entrada y/o un parámetro o parámetros de salida resultantes.
A continuación, se describirá otro ejemplo de una implementación informática con referencia a la Fig. 21. El decodificador 60 comprende circuitos de procesamiento tales como uno o más procesadores 850 y una memoria 860. En este ejemplo particular, al menos algunos de los pasos, funciones, procedimientos, módulos y/o bloques descritos en la presente memoria se implementan en un programa de ordenador 870-876, que se carga en la memoria para su ejecución por los circuitos de procesamiento. Los circuitos de procesamiento y la memoria están interconectados entre sí para permitir la ejecución normal del software. Un dispositivo opcional de entrada/salida 854-858 también puede estar interconectado a los circuitos de procesamiento y/o la memoria para permitir la entrada y/o salida de datos relevantes tales como un parámetro o parámetros de entrada y/o un parámetro o parámetros de salida resultantes.
El término "ordenador" debe interpretarse en un sentido general como cualquier sistema o dispositivo capaz de ejecutar código de programa o instrucciones de programa de ordenador para realizar una tarea de procesamiento, determinación o cálculo en particular.
En una realización particular, el programa de ordenador comprende instrucciones, que cuando son ejecutadas por al menos un procesador, hacen que el procesador o los procesadores obtengan un vector de entrada entero que representa dichas muestras de señales de audio/video, cuyo vector de entrada entero tiene un número de coeficientes de valores enteros, para extraer un signo principal del vector de entrada entero, cuyo signo principal es un signo de un coeficiente terminal distinto de cero en el vector de entrada entero, cuyo coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de entrada de entero, para indexar el vector de entrada entero con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con el signo principal que representa las muestras de señales de audio/video, cuyo esquema de enumeración de cuantificación vectorial piramidal que ignora el signo del coeficiente terminal distinto de cero, y para generar el signo principal como primera palabra de código y el índice de salida como segunda palabra de código en un flujo de bits saliente.
En una realización particular, el programa de ordenador comprende instrucciones, que cuando son ejecutadas por al menos un procesador, hacen que el procesador o los procesadores reciban un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código de un flujo de bits entrante, donde el signo principal y el índice de entrada representan muestras de señales de audio/video, cuyo signo principal es un signo de un coeficiente terminal distinto de cero en un vector de salida entero que se creará, que representa las muestras de señales de audio/video, cuyo vector de salida entero tiene un número de coeficientes de valores enteros, cuyo coeficiente terminal distinto de cero es uno de un primer coeficiente distinto de cero y un último coeficiente distinto de cero en el vector de salida entero, para desindexar el índice de entrada en el vector de salida entero con un esquema de desenumeración de cuantificación vectorial piramidal, cuyo índice de entrada se crea mediante un esquema de enumeración que ignora el signo de dicho coeficiente terminal distinto de cero, para asignar un signo del coeficiente terminal distinto de cero según el signo principal recibido, y para generar el vector de salida entero.
La tecnología propuesta también proporciona un portador que comprende el programa de ordenador, en donde el portador es uno de entre una señal electrónica, una señal óptica, una señal electromagnética, una señal magnética, una señal eléctrica, una señal de radio, una señal de microondas o un medio de almacenamiento legible por ordenador.
Por tanto, el software o programa de ordenador puede realizarse como un producto de programa de ordenador, que normalmente se transporta o almacena en un medio legible por ordenador. El medio legible por ordenador puede incluir uno o más dispositivos de memoria extraíbles o no extraíbles que incluyen, entre otros, una Memoria de Solo Lectura, ROM, una Memoria de Acceso Aleatorio, RAM, un Disco Compacto, Cd , un Disco Versátil Digital, DVD , un disco Blueray, una memoria de Bus Serie Universal, USB, una unidad de disco duro, un dispositivo de almacenamiento HDD, una memoria flash, una cinta magnética o cualquier otro dispositivo de memoria convencional. Por tanto, el programa de ordenador puede cargarse en la memoria operativa de un ordenador o dispositivo de procesamiento equivalente para su ejecución por el circuito de procesamiento del mismo.
Como se indica en la presente memoria, el codificador se puede definir alternativamente como un grupo de módulos de función, donde los módulos de función se implementan como un programa de ordenador que se ejecuta en al menos un procesador.
La Figura 22 es un diagrama de bloques esquemático que ilustra un ejemplo de un codificador 10 que comprende un grupo de módulos de función 830-836.
Por tanto, el programa de ordenador que reside en la memoria 810 puede organizarse como módulos de función 830-836 apropiados configurados para realizar, cuando es ejecutado por el procesador 800, al menos parte de los pasos y/o tareas descritos en la presente memoria. Un ejemplo de dichos módulos de función 830-836 se ilustra en la Figura 22.
Como se indica en la presente memoria, el decodificador se puede definir alternativamente como un grupo de módulos de función, donde los módulos de función se implementan como un programa de ordenador que se ejecuta en al menos un procesador.
La Figura 23 es un diagrama de bloques esquemático que ilustra un ejemplo de un decodificador 60 que comprende un grupo de módulos de función 880-886.
El programa de ordenador que reside en la memoria 860 puede, por tanto, organizarse como módulos de función 880-886 apropiados configurados para realizar, cuando es ejecutado por el procesador 850, al menos parte de los pasos y/o tareas descritos en la presente memoria. En la Figura 23 se ilustra un ejemplo de dichos módulos de función 880-886.
Los enfoques propuestos mejoran el rendimiento de esquemas de cuantificación vectorial piramidal basados en palabras de código cortas. El esquema reduce el rango dinámico de los desplazamientos de indexación requeridos. El efecto secundario deseado del rango dinámico reducido es que se pueden usar palabras de código de PVQ 'cortas' 1 bit más grandes, sin ninguna penalización significativa, para un HW dado.
Esto hace posible utilizar un esquema de palabra de código de PVQ de B 1 bit en hardware de DSP que admite aritmética sin signo de B bits, y esto hace posible implementar un esquema de palabra de código de PVQ de B bit en un hardware de DSP que solo admite aritmética de enteros de B bits con signo (con una magnitud de bit B-1).
Además, la sobrecarga requerida para transmitir información lateral de división se reducirá debido a la capacidad de codificar eficazmente palabras de código más grandes de 1 bit. Como ejemplo, se utiliza la codificación de PVQ de k pulsos distribuidos uniformemente en la dimensión N = 128, donde se utilizan 5 bits para codificar la relación para cada división de dimensión binaria y se asignaron 71 bits a la PVQ sobre la dimensión N = 128 Por el algoritmo de asignación de bits del códec de audio. La PVQ óptima sin restricciones da:
log2(NpVQ(N= 128, k=12)) =67.2 bits,
log2(NMpvQ(N= 128, k=12+l)) =71,5 bits.
67,2 < 71 <71,5, es decir, 12 pulsos unitarios son posibles utilizando una PVQ ilimitada óptima sobre N = 128, lo que da como resultado una densidad de pulsos de 12/128.
El esquema heredado B = 32 bits requiere 2 divisiones, en dimensiones casi iguales [N1 = 43, N2 = 43, N3 = 42]):
2*log2(NPVQ(43,4)) log2(NPVQ(42,4)) 2*5 = 63.25+ 2*5 - 73.25 bits
73,25 está por encima del presupuesto de bits 71. Al intentar reducir el número de pulsos de 1 a 11, se obtiene: 2*log2(NPVQ(43,4)) log2(NPVQ(42,3)) 2*5 = 58.84 2*5 - 68.84 <71.
La densidad de pulso resultante se convierte en 11/128.
El esquema heredado B = 32 bits requiere 2 divisiones, en dimensiones de división no uniformes [N1 = 64, N2 = 32, N3 = 32]):
log2(NPVQ(64,6)) 2*log2(NPVQ(32,3)) 2*5 - 53.34 2*5 = 73.34 bits
73,25 está por encima del presupuesto de bits 71. Al intentar reducir el número de pulsos de 1 a 11, se obtiene: 2*log2(NPVQ(32,3)) log2(NPVQ(64,5)) 2*5 = 58.92 2*5 = 68.9 <71.
La densidad de pulsos resultante se convierte en 11/128.
Nuevo (B 1) = el esquema de MPVQ de 33 bits requiere una división en [N1 = 64, N2 = 64]):
2* log2(2*NMpvQ(64,6)) 5 - 2*32.51 5 - 70.02 bits <71,
donde
2*N mpvq(64,6) = NPVq(64,6) = 32.51 > B.
La densidad de pulso resultante se convierte en 12/128. En otras palabras, dados 71 bits asignados al vector de dimensión N = 128, el antiguo esquema de palabra de código de 32 bits solo puede proporcionar 11 pulsos, mientras que el nuevo esquema de palabra de código de 33 bits puede proporcionar 12 pulsos.
Debido a su rango de codificación de 1 bit más grande de 33 bits, el nuevo esquema es más adecuado para asignar bits según las instrucciones de asignación de bits originales del códec de audio, ya que la sobrecarga para la división de vectores adicionales (a menudo) puede reducirse.
Un ejemplo de esquema de asignación de bits de códec de audio se puede encontrar en la especificación UIT-T G.719, sección 7.5.2 o en OPUUS RFC6716, sección 4.3.4.1.
Las realizaciones descritas anteriormente se dan simplemente como ejemplos, y debe entenderse que la tecnología propuesta no se limita a las mismas. Los expertos en la técnica entenderán que se pueden realizar diversas modificaciones, combinaciones y cambios en las realizaciones sin apartarse del presente alcance tal como se define en las reivindicaciones adjuntas. En particular, las diferentes partes de las soluciones en las diferentes realizaciones se pueden combinar en otras configuraciones, cuando sea técnicamente posible.
Abreviaturas
VQ Cuantificador/Cuantificación de vectores
PVQ VQ Piramidal
PVQ (n, k) La estructura de PVQ con dimensión n y k pulsos unitarios, la PVQ (n, k) es una estructura piramidal con una norma L1 igual a k.
MPVQ PVQ Modular de seña principal
MPVQ (n, k) La estructura de MPVQ con dimensión n y k pulsos unitarios, la estructura de MPVQ (n, k) es una estructura piramidal de PVQ (n, k) segmentada, la norma L1 de MPVQ (n, k) es k.
Npvq(N, K) Tamaño de PVQ (dimensión N, pulsos unitarios K)
Nmpvq(N, K) Tamaño de MPVQ (dimensión N, pulsos unitarios K)
SIMD Datos Múltiples de Instrucción Única (una categoría de instrucción de DSP)
DSP Procesador de Señal Digital
HW Hardware
SW Software
N, dim Dimensión
n, 1 dimensión actual
k, K número de pulsos unitarios en PVQ (n, k) y en MPVQ (n, k)
KMAX valor K máximo
B límite de bits en el sistema de hardware de destino para operaciones eficientes, típicamente (16), 32 o 64 bits en los procesadores de hoy en día.
R bits por muestra, o bits por coeficiente,
X vector de destino
r, vec vector de forma (también llamado a veces residual)
G ganancia (escalar o vectorial) para escalar el vector objetivo
RAM Memoria de Acceso Aleatorio
OPS Operaciones por segundo
MOPS Millones de Operaciones Por Segundo
P-ROM ROM de Programa
ROM Memoria de Solo Lectura (por lo general, datos almacenados previamente)
LSB Bit Menos Significativo
MSB Bit Más Significativo
LP Predicción lineal
Apéndice A
En este apéndice, se incluyen extractos relevantes de las secciones de PVQ de audio de IETF/OPUS para establecer el estado de la técnica anterior. El algoritmo de indexación/desindexación de PVQ de OPUS-Audio refinado y optimizado implica varias optimizaciones que no se describen en la descripción del texto del documento RFC 6716, sino que se proporcionan como un archivo de código c (cwrs.c) en una desindexación de PVQ de RFC6716 de IETF/OPUS-Audio adjunta.
"Decodificación de PVQ
La decodificación de los vectores de PVQ se implementa en decode_pulses () (cwrs.c). El índice de palabra de código única se decodifica como un valor entero distribuido uniformemente entre 0 y V (N, K) -1, donde V (N, K) es el número de combinaciones posibles de K pulsos en N muestras. A continuación, el índice se convierte en un vector de la misma forma que se especifica en [PVQ]. La indexación se basa en el cálculo de V (N, K) (indicado N (L, K) en [PVQ]).
El número de combinaciones se puede calcular de forma recursiva como V (N, K) = V (N-1, K) V (N, K-1) V (N-1, K-1), con V (N, 0) = 1 y V (0, K) = 0, K! = 0. Hay muchas formas diferentes de calcular V (N, K), incluyendo tablas calculadas previamente y el uso directo de la formulación recursiva. La implementación de referencia aplica la formulación recursiva una línea (o columna) a la vez para ahorrar en el uso de la memoria, junto con una recurrencia univariante alternativa para inicializar una línea arbitraria, y soluciones polinomiales directas para N pequeños. Todos estos métodos son equivalentes, y tienen diferentes compromisos en la velocidad, el uso de la memoria y el tamaño de código. Las implementaciones PUEDEN usar cualquier método que deseen, siempre que sean equivalentes a la definición matemática.
El vector X decodificado se recupera como sigue. Sea i el índice decodificado con el procedimiento de la Sección 4.1.5 con ft = V (N, K), de modo que 0 <= i < V (N, K). Sea k = K. Entonces, para j = 0 a (N - 1), inclusive,
hacer:
1. Sea p = (V(N-j-1 ,k) V(N-j, k))/2.
2. Si i < p, entonces sea sgn = 1, de lo contrario sea sgn = -1 y establezcamos i = i - p.
3. Sea k0 = k y establezcamos p = p - V(N-j-1, k).
4. Mientras que p > i, establezcamos k = k - 1 y p = p - V (N-j-1, k).
5. Establezcamos X[j] = sig * (k0 - k) e i = i - p.
El vector decodificado X se normaliza entonces de modo que su norma L2 sea igual a uno. "
Límite y división de palabras de código de PVQ de lETF/OPUS-audio
"Decodificación dividida
Para evitar la necesidad de cálculos de precisión múltiple cuando se decodifican vectores de código de PVQ, el tamaño máximo permitido para los libros de códigos es de 32 bits. Cuando se necesitan libros de códigos más grandes, el vector se divide en su lugar en dos subvectores de tamaño N/2. Un parámetro de ganancia cuantificado con precisión derivada de la asignación actual se codifica en entropía para representar las ganancias relativas de cada lado de la división, y todo el proceso de decodificación se aplica de forma recursiva. Se pueden aplicar múltiples niveles de división hasta un límite de divisiones LM 1. El mismo mecanismo recursivo se aplica para la codificación conjunta de audio estéreo."
Búsqueda de PVQ de RFC-6716 de Audio de IETF/OPUS
"Cuantificación Vectorial Esférica
CELT utiliza un Cuantificador Vectorial Piramidal (PVQ) [PVQ] para cuantificar los detalles del espectro en cada banda que no han sido predichos por el predictor de tono. El libro de códigos de PVQ consta de todas las sumas de K pulsos con signo en un vector de N muestras, donde se requieren dos pulsos en la misma posición para tener el mismo signo. Por lo tanto, el libro de códigos incluye todos los vectores de códigos enteros y de N dimensiones que satisfacen sum (abs (y (j))) = K.
En las bandas donde hay suficientes bits asignados, PVQ se usa para codificar el vector unitario que resulta de la normalización en la Sección 5.3.2 directamente. Dado un vector de código de PVQ y, el vector unitario X se obtiene como X = y/|| y ||, donde || ■ || denota la norma L2."
"Búsqueda de PVQ
La búsqueda del mejor vector de código y se realiza mediante alg_quant () (vq.c). Hay varios enfoques posibles para la búsqueda, con un compromiso entre calidad y complejidad. El método utilizado en la implementación de referencia calcula una palabra de código inicial y1 proyectando el espectro X normalizado en la pirámide del libro de códigos de K-1 pulsos:
yO = truncate_towards_zero( (K-1) * X / sum(abs(X)))
Dependiendo de N, K y los datos de entrada, la palabra de código inicial y0 puede contener de 0 a K-1 valores distintos de cero. Todos los pulsos restantes, a excepción del último, se encuentran iterativamente con una búsqueda ávida que minimiza la correlación normalizada entre y y X:
T
J ~ -X * y / | | y | |
La búsqueda descrita anteriormente se considera un buen equilibrio entre calidad y costo de cálculo. Sin embargo, hay otras formas posibles de buscar en el libro de códigos de PVQ y los implementadores PUEDEN usar cualquier otro método de búsqueda. Consulte alg_quant () en celt/vq.c."
Indexación de PVQ de RFC-6716 de Audio de IETF/OPUS
"Codificación PVQ
El vector a codificar, X, se convierte en un índice i tal que 0 <= i <V (N, K) como sigue. Sea i = 0 y k = 0. Entonces, para j = (N - 1) hasta 0, inclusive, hagamos:
1. Si k> 0, establezcamos i = i (V (N-j-1, k-1) V (N-j, k-1))/2.
2. Establezcamos k = k abs(X[j]).
3. Si X[j] < 0, establezcamos i = i (V (N-j-1, k) V (N-j, k))/2.
A continuación, el índice i se codifica mediante el procedimiento de la sección 5.1.4 con ft = V (N, K)."
Apéndice B
Derivación de las ecuaciones de recursividad relacionadas con MPVQ
Derivación de la relación de tamaño U (n, k) y M (n, k) = NMPVQ(n, k) usando la fórmula de Fischer:
Utilicemos N (n, k) como una notación corta para NPVQ(n, k), el número de vectores de PVQ para la dimensión n con k pulsos unitarios.
Recursividad de PVQ original de Fischer de 1986:
N(n, k) = N(n-l,k) N(n- l ,k- l ) N(n-l,k) (1)
Definamos M(n, k) - N ( n , k ) / 2 ; (2)
M (n, k) se usa a continuación como notación corta para NMPVQ(n, k)
// M (n, k) número de vectores de PVQ con un inicial positivo
// signo, es la mitad del número de entradas en una PVQ completa
// pirámide N (n, k))
Definamos U (n, k) como sum (
Figure imgf000045_0001
// el número de vectores con un principal restante
// signo (positivo), excluyendo los vectores con un
// valor de posición inicial de 'k' y excluyendo los
// vectores un valor de posición inicial de '0'
M(n,k) = 1 2*U(n, k) M ( n - l , k ) ; (4)
// 1 para k = KMAX, solo uno de tales vectores principales es posible
// 2 * U (n, k) para el número de vectores con un nuevo/siguiente principal
// signo, ("2" debido a un nuevo/siguiente principal positivo o negativo
// signo) (los vectores "(U (n, k)" tienen positivas iniciales
// amplitudes [KMAX-1, KMAX-2 ... 1]) M (n-1, k) para el resto
// con vectores un valor cero principal
(Equivalentemente con M (n, k) = NMPVQ(n, k))
NMPVQ(n,k) - 1 2*U (n, k) NMPVq (n -1, k) ; (4b)
M(n,k) - M(n-1, k) = 1 2*U(n, k) = A(n, k) (5)
Combinemos (1) (2) (5)
M(n-1, k) = U(n,k+1) - U(n, k) (6)
Combinemos (4) (6)
M(n, k) = 1 U(n,k) U(n,k+1) (7)
(7) ahora se puede utilizar para el cálculo del tamaño, ya que tanto U (n, k) como U (n, k 1) < M (n, k) (5) la diferencia (5), A (n, k), todavía puede usarse para iteraciones de desplazamiento de amplitud, si solo se usa para desplazamientos de hasta A (n, KMAX), como A (n, KMAX 1), puede exceder M (n, KMAX) y, por lo tanto, causar problemas numéricos en hardware de precisión limitada.
Derivación de la recursividad del cálculo de filas directo para U (n, k)
U(n, k) = ( A ( n , k ) - l ) / 2 (a partir de ec. (5))
Ecuación genérica para una fila de diferencia de PVQ A (n, k), utilizada en CELT/OPUS-Audio
A (n, k) = A (n, k-2) ( (2*n-l) *A(n, k-1)-A(n, k-2) ) /(k-1)
Combinemos (5) (8)
U(n,k) = ( (2*n - 1) * (U(n, k-1)
(k-2)*U(n,k-2) n - 1 )/(k-1)
O permitamos una recursividad mixta
U(n, k) = (A(n, k-2) -1) /2
((2*n-l)*A(n,k-1)-A(n,k-2))/(2*(k—1)) : i o :
Debido al alto rango dinámico del numerador de (8 y 9, 10), se debe tener especial cuidado cuando se evalúa esta función directa, esp. en un sistema aritmético de precisión limitada (por ejemplo, un sistema de 32 bits).
(8) se utiliza en IETF/OPUS y CELT original
(10) se puede utilizar en el cálculo del sistema de MPVQ de U (n, KMAX 1), ya que se sabe a priori que todos los A (n, k <KMAX 1) anteriores tienen valores suficientemente bajos.
(10) se puede simplificar aún más (ya que A (n, k) siempre es impar para k > 1)
U ( n , k ) = f l o o r ( A ( n , k - 2 ) / 2 )+ ( n * A ( n , k - 1 ) -( f l o o r ( A ( n , k - 1 ) / 2 )
f l o o r ( A ( n , k - 2 ) / 2 1 ) ) ) / ( k - 1 ) (11)
o U (n, k) = U (n, k-2) (n * A (n, k-1) -Nmpvq (n, k-2))/(k-1) (11.b)
Relaciones de recursividad de matrices MPVQ n, k
A partir de la relación de Fischer (1) N (n, k) = N (n-1, k) N (n-1, k-1) N (n-1, k)
Combinando (7) y (5) se pueden encontrar estas relaciones recursivas:
U(n,k+1)= 1 U ( n - l , k ) U ( n - l , k l ) U(n,k) (12),
con condiciones iniciales
U (0, *) = 0, U (1, *) = 0 y U (a, b) = U (b, a)
A(n, k+1) = A ( n - l , k ) A (n - l , k l ) A(n,k) (13)
con condiciones iniciales A (0,0) = 1, A (0,1 ) = 0, A (1, *) = 1, y A (a, b) = A (b, a)
(13) ahora se puede usar para calcular iterativamente la fila n, k = 0: KMAX de la fila n-1 del vector anterior, k = 0: KMAX para A (n, k), y (12) se puede usar para calcular iterativamente la fila n, k = 0: KMAX 1 de la fila n-1 del vector anterior, k = 0: KMAX 1 para U (n, k).
(13) se utiliza en IETF-OPUS-Audio
Usando (12) y el hecho de que A (n, k) es impar, obtenemos una nueva fórmula de recursividad mixta eficiente: U(n,k+1) = 1 A(n-l,k)»l U(n-l,k+l) A(n,k)»l
Figure imgf000046_0001
, donde ">>" es una división entera por 2 (un desplazamiento a la derecha), ya que A (n grande, k 1) puede saturarse, la Ecuación 14 se usa para permanecer dentro del rango dinámico dado, por ejemplo (32 bits, para la última columna de desplazamiento (k 1).
La relación de radio de vector, enumeración por productos y relaciones de recursividad de longitud de vector Hung, Tsern, Meng 1998 también resume algunas relaciones adicionales relevantes para una pirámide PVQ (1 == n, k) el tamaño es N (1, k) = Npvq(1, k), La relación recursiva de radio vectorial "(43)" a continuación es una relación básica de tamaño de fila solo para la fila 1 = n.
La fórmula de enumeración por productos "(44)" a continuación es un número de relación de producto basada en elementos distintos de cero para el tamaño de PVQ.
( I - l ) N ( l , fe) = 2 k N ( l - 1, fe) ( l - l ) N ( l - 2, fe)
Recursividad de longitud vectorial (42)
kN ( l , k ) = 2IN (/, fe - 1) (fe - 2)iV(/,fe - 2)
Recursividad de radio vectorial (43)
Figure imgf000047_0001
Fórmula de enumeración por productos (44)

Claims (12)

REIVINDICACIONES
1. Un método para la indexación de cuantificación vectorial piramidal de muestras de audio/video, en donde dicho método comprende los pasos de:
obtener (402) un vector de entrada que representa muestras de señales de audio/video, teniendo dicho vector de entrada un número de coeficientes de valores enteros;
indexar (406) dicho vector de entrada con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida, cuyo índice de salida junto con un signo principal representan dichos coeficientes de valores enteros, siendo dicho signo principal un signo de un último coeficiente distinto de cero en dicho vector de entrada en una dirección de procesamiento de dicho vector de entrada;
en donde dicho paso de indexación (406) se realiza mediante un procedimiento de enumeración iterativo que comprende la repetición de una iteración, en el que un coeficiente actual y una dimensión actual de dicho vector de entrada se seleccionan para su consideración;
dicha iteración que comprende:
actualizar (330) un desplazamiento de indexación que representa el número de vectores de dimensión n y norma L1 de k, donde n es la dimensión actual y k es el número de pulsos unitarios que se han contabilizado antes de dicho coeficiente actual;
aumentar un índice acumulado (324) mediante dicho desplazamiento de indexación;
para cada coeficiente distinto de cero después del primer coeficiente distinto de cero, duplicar (312) el índice acumulado y añadir al índice acumulado un valor de una siguiente indicación de signo que indica un signo de un coeficiente anterior distinto de cero;
para cada coeficiente distinto de cero, establecer (318, 322) la siguiente indicación de signo para indicar un signo del coeficiente actual distinto de cero;
en donde dicha repetición continúa con los coeficientes de dicho vector de entrada que se seleccionan uno tras otro como dicho coeficiente actual hasta que se hayan considerado todos los coeficientes de dicho vector de entrada;
dicho procedimiento de enumeración iterativa que comprende un paso de terminación en el que dicho índice de salida se establece igual a dicho índice acumulado y dicho signo principal se establece igual a la indicación del siguiente signo actual después de que se hayan terminado todos los pasos de iteración; y
emitir (408) dicho signo principal como primera palabra de código y dicho índice de salida como segunda palabra de código en un flujo de bits saliente.
2. El método según la reivindicación 1, en donde a dicho aumento de dicho índice acumulado en cada paso de iteración se le da un bit menos significativo en dependencia de un signo de un coeficiente anterior distinto de cero en dicho vector de entrada.
3. El método según la reivindicación 1 o 2, en donde dicho aumento de dicho índice acumulado se basa al menos en parte en un primer desplazamiento de indexación U (n, k), estando definido dicho primer desplazamiento de indexación U (n, k) como el número de vectores enteros de dimensión n y norma L1 de k, que no tiene un cero principal y no tiene el valor principal k, tiene un valor positivo principal y tiene un siguiente signo principal positivo.
4. El método según cualquiera de las reivindicaciones 1 a 3, en donde dicho aumento de dicho índice se basa al menos en parte en un segundo desplazamiento de indexación A (n, k), estando definido dicho segundo desplazamiento de indexación A (n, k) como el número de vectores enteros de dimensión n y norma L1 de k, que tiene un valor principal positivo y que no tiene un cero principal.
5. Un método para la desindexación de cuantificación vectorial piramidal de muestras de audio/video, en donde dicho método comprende los pasos de:
recibir (452) un signo principal como primera palabra de código y un índice de entrada como segunda palabra de código de un flujo de bits entrante;
dicho signo principal junto con dicho índice de entrada que representan coeficientes de valores enteros; dicho signo inicial que es un signo de un primer coeficiente distinto de cero en un vector de salida a crear, dicho vector de salida que tiene un número de coeficientes de valores enteros que representan muestras de señales de audio/video;
desindexar (454) dicho índice de entrada en dicho vector de salida con un esquema de desenumeración de cuantificación vectorial piramidal;
en donde dicho paso de desindexación (454) se realiza mediante un procedimiento de desenumeración iterativo que comprende:
un paso de inicialización, en el que un índice restante se establece igual a dicho índice de entrada; y una repetición de una iteración, en la que un coeficiente actual y una dimensión n actual de dicho vector de salida se seleccionan para su consideración;
dicha iteración comprende:
encontrar un desplazamiento de indexación, que se define como el número de vectores enteros de dimensión n y norma L1 de k, donde k es el número de pulsos unitarios restantes, siendo dicho desplazamiento de indexación el desplazamiento de indexación más grande de la dimensión actual que es menor o igual que dicho índice restante;
reducir dicho índice restante por dicho desplazamiento de indexación; y
establecer una amplitud de dicho coeficiente actual de dicho vector de salida para que sea igual a una amplitud asociada con dicho desplazamiento de indexación;
en donde dicha repetición continúa con los coeficientes de dicho vector de salida que se seleccionan uno tras otro como dicho coeficiente actual hasta que dicho índice restante se vuelve igual a cero;
dicho índice de entrada que se crea mediante un esquema de enumeración de cuantificación vectorial piramidal que desprecia dicho signo de dicho primer coeficiente distinto de cero;
asignar (456) un signo de dicho primer coeficiente distinto de cero en dicho vector de salida según dicho signo principal recibido;
emitir (458) dicho vector de salida.
6. El método según la reivindicación 5, en donde se deduce un signo de un siguiente coeficiente distinto de cero en dicho vector de salida en dependencia de un bit menos significativo en dicho índice restante.
7. El método según la reivindicación 5 o 6, en donde dicha reducción de dicho índice restante se basa, al menos en parte, en un primer desplazamiento de indexación U (n, k), dicho primer desplazamiento de indexación U (n, k) que está definido como el número de vectores enteros de dimensión n y norma L1 de k, que no tiene un cero principal y no tiene el valor principal k, tiene un valor positivo principal y tiene un siguiente signo principal positivo.
8. El método según cualquiera de las reivindicaciones 5 a 7, en donde dicha reducción de dicho índice restante se basa al menos en parte en un segundo desplazamiento de indexación A (n, k), dicho segundo desplazamiento de indexación A (n, k) que está definido como el número de vectores enteros de dimensión n y norma L1 de k, que tiene un valor principal positivo y que no tiene un cero principal.
9. Un codificador (10) configurado para indexar muestras de audio/video mediante cuantificación vectorial piramidal, en donde dicho codificador (10) está configurado para obtener un vector de entrada (5) que representa muestras de señales de audio/video, teniendo dicho vector de entrada un número de coeficientes de valores enteros; en donde dicho codificador (10) está configurado para indexar dicho vector de entrada (5) con un esquema de enumeración de cuantificación vectorial piramidal en un índice de salida (25), cuyo índice de salida junto con un signo principal (15) representan dichos coeficientes de valores enteros, siendo dicho signo principal (15) un signo de un último coeficiente distinto de cero en dicho vector de entrada (5) en una dirección de procesamiento de dicho vector de entrada;
en donde dicho codificador (10) está configurado para realizar dicha indexación mediante un procedimiento de enumeración iterativo que comprende la repetición de una iteración, en el que un coeficiente actual y una dimensión actual de dicho vector de entrada (5) se seleccionan para su consideración;
dicha iteración que comprende:
actualizar un desplazamiento de indexación que representa el número de vectores de dimensión n y norma L1 de k, donde n es la dimensión actual y k es el número de pulsos unitarios que se han contabilizado antes de dicho coeficiente actual;
aumentar un índice acumulado mediante dicho desplazamiento de indexación;
para cada coeficiente distinto de cero después del primer coeficiente distinto de cero, duplicar el índice acumulado y añadir al índice acumulado un valor de una siguiente indicación de signo que indica un signo de un coeficiente anterior distinto de cero;
para cada coeficiente distinto de cero, establecer la siguiente indicación de signo para indicar un signo del coeficiente actual distinto de cero;
en donde dicha repetición continúa con los coeficientes de dicho vector de entrada (5) que se seleccionan uno tras otro como dicho coeficiente actual hasta que se hayan considerado todos los coeficientes de dicho vector de entrada (5);
dicho procedimiento de enumeración iterativa que comprende un paso de terminación en el que dicho índice de salida (25) se establece igual a dicho índice acumulado y dicho signo inicial (15) se establece igual a la indicación del siguiente signo actual después de que se hayan terminado todos los pasos de iteración; y en donde dicho codificador (10) está configurado para emitir dicho signo principal (15) como una primera palabra de código y dicho índice de salida (25) como una segunda palabra de código en un flujo de bits saliente (2).
10. El codificador según la reivindicación 9, en donde dicho aumento de dicho índice acumulado en cada paso de iteración recibe un bit menos significativo en dependencia de un signo de un coeficiente anterior distinto de cero en dicho vector de entrada (5).
11. Un decodificador (60) configurado para desindexar en muestras de audio/video mediante cuantificación vectorial piramidal,
en donde dicho decodificador (60) está configurado para recibir un signo principal (15') como primera palabra de código y un índice de entrada (25') como segunda palabra de código de un flujo de bits entrante (2');
dicho signo principal (15') junto con dicho índice de entrada (25') que representa coeficientes de valores enteros; dicho signo principal (15') que es un signo de un primer coeficiente distinto de cero en un vector de salida (6') a crear, dicho vector de salida que tiene un número de coeficientes de valores enteros que representan muestras de señales de audio/video;
en donde dicho decodificador. (60) está configurado para desindexar dicho índice de entrada (25') en dicho vector de salida (6') con un esquema de desenumeración de cuantificación vectorial piramidal;
en donde dicho decodificador. (60) está configurado para realizar dicha desindexación mediante un procedimiento de desenumeración iterativo, en donde dicho procedimiento de desenumeración iterativo comprende:
un paso de inicialización, en el que un índice restante se establece igual a dicho índice de entrada (25'); y una repetición de una iteración, en la que un coeficiente actual y una dimensión n actual de dicho vector de salida se seleccionan para su consideración;
dicha iteración comprende
encontrar un desplazamiento de indexación, que se define como el número de vectores enteros de dimensión n y norma L1 de k, donde k es el número de pulsos unitarios restantes, siendo dicho desplazamiento de indexación el desplazamiento de indexación más grande de la dimensión actual que es menor o igual que dicho índice restante;
reducir dicho índice restante por dicho desplazamiento de indexación; y
establecer una amplitud de dicho coeficiente actual de dicho vector de salida para que sea igual a una amplitud asociada con dicho desplazamiento de indexación;
en donde dicha repetición continúa con los coeficientes de dicho vector de salida que se seleccionan uno tras otro como dicho coeficiente actual hasta que dicho índice restante se vuelve igual a cero;
dicho índice de entrada que se crea mediante un esquema de enumeración de cuantificación vectorial piramidal que desprecia dicho signo de dicho primer coeficiente distinto de cero;
en donde dicho decodificador (60) está configurado para asignar un signo de dicho primer coeficiente distinto de cero según dicho signo principal recibido (15'); y
en donde dicho decodificador (60) está configurado para generar dicho vector de salida (6').
12. El decodificador según la reivindicación 11, en donde se deduce un signo de un siguiente coeficiente distinto de cero en dicho vector de salida en dependencia de un bit menos significativo en dicho índice restante.
ES15713034T 2014-02-27 2015-02-26 Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video Active ES2880779T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201461945403P 2014-02-27 2014-02-27
PCT/SE2015/050216 WO2015130210A1 (en) 2014-02-27 2015-02-26 Method and apparatus for pyramid vector quantization indexing and de-indexing of audio/video sample vectors

Publications (1)

Publication Number Publication Date
ES2880779T3 true ES2880779T3 (es) 2021-11-25

Family

ID=52774513

Family Applications (1)

Application Number Title Priority Date Filing Date
ES15713034T Active ES2880779T3 (es) 2014-02-27 2015-02-26 Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video

Country Status (12)

Country Link
US (5) US9774854B2 (es)
EP (3) EP3917016B1 (es)
JP (3) JP6389525B2 (es)
KR (4) KR102280943B1 (es)
CN (3) CN110033779B (es)
CA (1) CA2940382C (es)
DK (1) DK3111560T3 (es)
ES (1) ES2880779T3 (es)
PL (1) PL3111560T3 (es)
PT (1) PT3111560T (es)
TW (3) TWI587640B (es)
WO (1) WO2015130210A1 (es)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10045014B2 (en) * 2013-07-15 2018-08-07 Mediatek Singapore Pte. Ltd. Method of disparity derived depth coding in 3D video coding
PT3111560T (pt) * 2014-02-27 2021-07-08 Ericsson Telefon Ab L M Método e aparelho para indexação e desindexação de quantificação vetorial em pirâmide de vetores de amostra de áudio/vídeo
MY177842A (en) 2014-07-28 2020-09-23 Ericsson Telefon Ab L M 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
EP3555885B1 (en) * 2016-12-16 2020-06-24 Telefonaktiebolaget LM Ericsson (PUBL) Method and encoder for handling envelope representation coefficients
US9959247B1 (en) 2017-02-17 2018-05-01 Google Llc Permuting in a matrix-vector processor
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
CN108833927B (zh) * 2018-05-03 2019-08-16 北京大学深圳研究生院 一种基于删除量化矩阵中0元素的点云属性压缩方法
US10734006B2 (en) * 2018-06-01 2020-08-04 Qualcomm Incorporated Audio coding based on audio pattern recognition
CN109003615B (zh) * 2018-08-27 2020-12-25 合肥工业大学 语音流嵌入信息方法及装置、语音流解码信息方法及装置
US10727868B2 (en) * 2018-12-03 2020-07-28 Samsung Electronics Co., Ltd. Apparatus and method for offset optimization for low-density parity-check (LDPC) code
US12073842B2 (en) * 2019-06-24 2024-08-27 Qualcomm Incorporated Psychoacoustic audio coding of ambisonic audio data
KR102532567B1 (ko) * 2020-12-31 2023-05-16 세메스 주식회사 기판형 센서, 및 약액의 탄착점 및 타력 측정 방법
CN118097918B (zh) * 2024-04-17 2024-07-12 深圳富华消防电力安全技术有限公司 一种用于消防火灾智能监测报警方法及系统

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956674A (en) * 1995-12-01 1999-09-21 Digital Theater Systems, Inc. Multi-channel predictive subband audio coder using psychoacoustic adaptive bit allocation in frequency, time and over the multiple channels
JP3246715B2 (ja) * 1996-07-01 2002-01-15 松下電器産業株式会社 オーディオ信号圧縮方法,およびオーディオ信号圧縮装置
NO307240B1 (no) * 1997-07-28 2000-02-28 Fast Search & Transfer As Fremgangsmate ved kompresjonskoding
US6006179A (en) 1997-10-28 1999-12-21 America Online, Inc. Audio codec using adaptive sparse vector quantization with subband vector classification
WO1999063523A1 (de) * 1998-05-29 1999-12-09 Siemens Aktiengesellschaft Verfahren und anordnung zur sprachcodierung
US6463407B2 (en) * 1998-11-13 2002-10-08 Qualcomm Inc. Low bit-rate coding of unvoiced segments of speech
US6882685B2 (en) * 2001-09-18 2005-04-19 Microsoft Corporation Block transform and quantization for image and video coding
EP1296524A1 (en) * 2001-09-20 2003-03-26 STMicroelectronics S.r.l. Process and apparatus for the compression of digital video signals, a system and a computer program product therefor
KR100487719B1 (ko) 2003-03-05 2005-05-04 한국전자통신연구원 광대역 음성 부호화를 위한 엘에스에프 계수 벡터 양자화기
US8238424B2 (en) * 2007-02-09 2012-08-07 Microsoft Corporation Complexity-based adaptive preprocessing for multiple-pass video compression
TWI388218B (zh) * 2007-10-30 2013-03-01 Nippon Telegraph & Telephone 影像編碼方法與解碼方法、其程式及記錄有程式的記錄媒體
US8396163B2 (en) * 2008-09-18 2013-03-12 Commonwealth Scientific And Industrial Research Organization Vector quantization in wireless communication
CN102081926B (zh) * 2009-11-27 2013-06-05 中兴通讯股份有限公司 格型矢量量化音频编解码方法和系统
CN102081927B (zh) * 2009-11-27 2012-07-18 中兴通讯股份有限公司 一种可分层音频编码、解码方法及系统
CN102158692B (zh) * 2010-02-11 2013-02-13 华为技术有限公司 编码方法、解码方法、编码器和解码器
JPWO2011158657A1 (ja) * 2010-06-17 2013-08-19 シャープ株式会社 画像フィルタ装置、復号装置、符号化装置、および、データ構造
US20130114733A1 (en) * 2010-07-05 2013-05-09 Nippon Telegraph And Telephone Corporation Encoding method, decoding method, device, program, and recording medium
US8879634B2 (en) * 2010-08-13 2014-11-04 Qualcomm Incorporated Coding blocks of data using one-to-one codes
KR101850724B1 (ko) * 2010-08-24 2018-04-23 엘지전자 주식회사 오디오 신호 처리 방법 및 장치
CN102081936B (zh) * 2011-02-23 2012-06-06 凌阳科技股份有限公司 资料还原方法与装置
WO2012122303A1 (en) * 2011-03-07 2012-09-13 Xiph. Org 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
US8694474B2 (en) * 2011-07-06 2014-04-08 Microsoft Corporation Block entropy encoding for word compression
US9591304B2 (en) * 2011-11-08 2017-03-07 Tektronix, Inc. Evaluation of perceptual visual quality
US9560386B2 (en) * 2013-02-21 2017-01-31 Mozilla Corporation Pyramid vector quantization for video coding
JP6313981B2 (ja) * 2014-01-22 2018-04-18 株式会社デンソーテン レーダ装置、車両制御システム、および、信号処理方法
PT3111560T (pt) * 2014-02-27 2021-07-08 Ericsson Telefon Ab L M Método e aparelho para indexação e desindexação de quantificação vetorial em pirâmide de vetores de amostra de áudio/vídeo
US9747910B2 (en) * 2014-09-26 2017-08-29 Qualcomm Incorporated Switching between predictive and non-predictive quantization techniques in a higher order ambisonics (HOA) framework
US20160093308A1 (en) * 2014-09-26 2016-03-31 Qualcomm Incorporated Predictive vector quantization techniques in a higher order ambisonics (hoa) framework
US10366698B2 (en) * 2016-08-30 2019-07-30 Dts, Inc. Variable length coding of indices and bit scheduling in a pyramid vector quantizer

Also Published As

Publication number Publication date
US20190098309A1 (en) 2019-03-28
JP2020024431A (ja) 2020-02-13
TWI683547B (zh) 2020-01-21
US20170272753A1 (en) 2017-09-21
DK3111560T3 (da) 2021-06-28
JP6909265B2 (ja) 2021-07-28
JP2019035962A (ja) 2019-03-07
KR20210006002A (ko) 2021-01-15
US20160088297A1 (en) 2016-03-24
US10404984B2 (en) 2019-09-03
JP6389525B2 (ja) 2018-09-12
EP4398580A3 (en) 2024-09-25
CN110033779B (zh) 2023-11-17
EP3111560A1 (en) 2017-01-04
KR102202260B1 (ko) 2021-01-12
EP4398580A2 (en) 2024-07-10
TWI768295B (zh) 2022-06-21
CA2940382C (en) 2019-03-05
KR102280943B1 (ko) 2021-07-22
KR20170118236A (ko) 2017-10-24
US20190342552A1 (en) 2019-11-07
KR20160122209A (ko) 2016-10-21
PT3111560T (pt) 2021-07-08
CN105993178B (zh) 2019-03-29
US10158854B2 (en) 2018-12-18
KR101790463B1 (ko) 2017-11-20
TWI587640B (zh) 2017-06-11
EP3917016C0 (en) 2024-04-03
CA2940382A1 (en) 2015-09-03
CN109905718B (zh) 2023-05-12
US9774854B2 (en) 2017-09-26
CN109905718A (zh) 2019-06-18
TW201545485A (zh) 2015-12-01
TW201722089A (zh) 2017-06-16
JP6598947B2 (ja) 2019-10-30
US10715807B2 (en) 2020-07-14
PL3111560T3 (pl) 2021-12-06
US10841584B2 (en) 2020-11-17
US20200296375A1 (en) 2020-09-17
CN110033779A (zh) 2019-07-19
JP2017516121A (ja) 2017-06-15
KR20200084913A (ko) 2020-07-13
KR102132522B1 (ko) 2020-07-09
EP3917016A1 (en) 2021-12-01
EP3917016B1 (en) 2024-04-03
TW202103457A (zh) 2021-01-16
EP3111560B1 (en) 2021-05-26
WO2015130210A1 (en) 2015-09-03
CN105993178A (zh) 2016-10-05

Similar Documents

Publication Publication Date Title
ES2880779T3 (es) Método y aparato para la indexación y desindexación de cuantificación vectorial piramidal de vectores de muestra de audio/video
ES2718049T3 (es) Búsqueda de forma de cuantificador de vector en pirámide
KR102615901B1 (ko) 디지털 오디오 신호에서의 차분 데이터
CN106537914B (zh) 通过限制的进位运算来执行算术编译的方法和设备
ES2821725T3 (es) Codificación y decodificación de posiciones de impulso de pistas de una señal de audio