ES2862999T3 - Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo - Google Patents

Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo Download PDF

Info

Publication number
ES2862999T3
ES2862999T3 ES13722617T ES13722617T ES2862999T3 ES 2862999 T3 ES2862999 T3 ES 2862999T3 ES 13722617 T ES13722617 T ES 13722617T ES 13722617 T ES13722617 T ES 13722617T ES 2862999 T3 ES2862999 T3 ES 2862999T3
Authority
ES
Spain
Prior art keywords
filter
biquad
stage
multistage
filtering
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
ES13722617T
Other languages
English (en)
Inventor
Khushbu P Rathi
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.)
Dolby Laboratories Licensing Corp
Original Assignee
Dolby Laboratories Licensing Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dolby Laboratories Licensing Corp filed Critical Dolby Laboratories Licensing Corp
Application granted granted Critical
Publication of ES2862999T3 publication Critical patent/ES2862999T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03HIMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
    • H03H17/00Networks using digital techniques
    • H03H17/02Frequency selective networks
    • H03H17/04Recursive filters
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/0017Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/008Multichannel audio signal coding or decoding using interchannel correlation to reduce redundancy, e.g. joint-stereo, intensity-coding or matrixing
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/16Vocoder architecture
    • G10L19/167Audio streaming, i.e. formatting and decoding of an encoded audio signal representation into a data stream for transmission or storage purposes
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/26Pre-filtering or post-filtering
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03HIMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
    • H03H17/00Networks using digital techniques
    • H03H2017/0072Theoretical filter design
    • H03H2017/009Theoretical filter design of IIR filters

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Computational Linguistics (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Transmission Systems Not Characterized By The Medium Used For Transmission (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)

Abstract

Un filtro multietapa (153; 154; 157; 158), que incluye: una memoria de almacenamiento temporal (10); M etapas de filtro biquad (Bi), con M > 1 e i que es un índice que oscila de 0 a M-1, incluyendo una primera etapa de filtro biquad (B0) y al menos una etapa de filtro biquad posterior (B1, B2, ... BM-1), en donde la primera etapa de filtro biquad (B0) está acoplada a la memoria de almacenamiento temporal (10) y configurada para realizar filtrado bicuadrático en un bloque de N muestras de entrada (x(j)), en donde j es un índice que oscila de 0 hasta N-1, para generar N valores intermedios (x0(j)), y para imponer los valores intermedios a la memoria de almacenador temporal (10), en donde los valores intermedios incluyen versiones filtradas de cada una de las muestras de entrada, y en donde cada etapa de filtro biquad posterior (B1, B2, ... BM-1) está acoplada a la memoria de almacenador temporal (10) y configurada para realizar al menos una operación de filtrado bicuadrático adicional sobre los valores intermedios almacenados temporalmente recuperados de la memoria de almacenador temporal (10), para generar los valores intermedios (x1(j), x2(j), ..., XM-1(j)), y para imponer los valores intermedios que genera a la memoria de almacenador temporal (10), en donde los valores filtrados biquad (XM-1(j)) generados en una etapa final de filtro biquad (BM-1) comprenden un bloque de N valores de datos de salida completamente filtrados (y(j)) generados en respuesta al bloque de valores de datos de entrada (x(j)); el filtro multietapa que se caracteriza por: un controlador (11), acoplado a las etapas de filtrado biquad (B0, B1, ... BM-1) y configurado para imponer un único flujo de instrucciones tanto a la primera etapa de filtrado biquad (B0) como a la al menos una etapa de filtro biquad posterior (B1, B2, ... BM-1), en donde dicha primera etapa de filtro biquad y dicha al menos una etapa de filtro biquad posterior (B1, B2, ... BM-1) se combinan con latencia entre las etapas, de manera que las etapas puedan operar de manera independiente y en paralelo en respuesta al flujo de instrucciones, en donde dicho filtro multietapa está configurado para, en un único ciclo de procesamiento que itera sobre el índice de muestra j, con M-1 <= j <= N, realizar, por cada etapa bicuadrática (Bi), con 0 < i <= M-1, en paralelo, filtrado bicuadrático de valores intermedios almacenados temporalmente (xi-1(j-i)) recuperados de la memoria de almacenador temporal (10).

Description

DESCRIPCIÓN
Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo
Antecedentes de la invención
Referencia cruzada a solicitudes relacionadas
Esta solicitud reivindica el derecho de prioridad de la Solicitud de Patente Provisional de Estados Unidos N° 61/645.291 presentada el 10 de mayo de 2012.
1. Campo de la invención
La invención se refiere a filtros multietapa que comprenden etapas de filtro bicuadrático y a filtrado paralelizado de datos (por ejemplo, datos de audio) usando tales filtros. Algunas realizaciones de la invención son métodos, sistemas y procesadores para filtrar datos de audio (usando un filtro multietapa que comprende etapas de filtro bicuadrático) durante la codificación o decodificación de los datos de acuerdo con uno de los formatos conocidos como Dolby Digital (AC-3), Dolby Digital Plus (E-AC-3) y Dolby E, o de acuerdo con otro formato de codificación. Dolby, Dolby Digital, Dolby Digital Plus y Dolby E son marcas registradas de Dolby Laboratories Licensing Corporation.
2. Antecedentes de la invención
A lo largo de esta descripción, incluyendo en las reivindicaciones, la expresión realizar una operación “sobre” señales o datos (por ejemplo, filtrar o escalar las señales o datos) se usa en un sentido amplio para denotar la realización de la operación directamente sobre las señales o datos, o sobre versiones procesadas de las señales o datos (por ejemplo, sobre versiones de las señales que se han sometido a un filtrado preliminar u otro procesamiento antes de la realización de la operación sobre las mismas).
En procesamiento de señales, un filtro bicuadrático digital es un filtro lineal recursivo de segundo orden, que contiene dos polos y dos ceros. La abreviatura filtro “biquad” (o “bi-quad”) se usará en la presente memoria para denotar un filtro bicuadrático digital. En el dominio Z, la función de transferencia de un filtro biquad es la relación de dos funciones cuadráticas:
Figure imgf000002_0001
Los filtros recursivos de alto orden (filtros de respuesta al impulso infinita o “IIR” de orden mayor que el de segundo orden) pueden ser altamente sensibles a la cuantificación de sus coeficientes y pueden llegar a ser inestables fácilmente. Los filtros recursivos de primer y segundo orden también pueden tener problemas de inestabilidad de este tipo, pero los problemas de inestabilidad son mucho menos graves. Por lo tanto, los filtros recursivos de alto orden se implementan típicamente como filtros en cascada en serie que comprenden una cascada en serie de secciones bi-quad (y opcionalmente también un filtro de primer orden). Se hace referencia algunas veces en la presente memoria a tales filtros en cascada en serie como filtros biquad multietapa, y comprenden una secuencia de filtros bi-quad (a los que se hace referencia algunas veces en la presente memoria como etapas bi-quad o secciones bi-quad).
Por ejemplo, los codificadores convencionales configurados para codificar datos de audio de acuerdo con el formato bien conocido AC-3 (Dolby Digital), o cualquiera de los formatos bien conocidos Dolby Digital Plus y Dolby E, implementan una serie de filtros biquad multietapa. Por ejemplo, un codificador de Dolby Digital Plus típicamente emplea un filtro biquad de dos etapas (es decir, un filtro que incluye dos filtros biquad en cascada) para implementar filtrado paso alto en un subsistema detector de transitorios, un filtro biquad de cuatro etapas (es decir, un filtro que incluye cuatro filtros biquad en cascada) para implementar filtrado paso bajo en un subsistema de efectos de baja frecuencia (“LFE”), y un filtro biquad de tres etapas para implementar filtrado paso bajo que limita el ancho de banda. Un codificador de Dolby E típicamente emplea un filtro biquad de dos etapas (es decir, un filtro que incluye dos filtros biquad en cascada) para implementar filtrado paso alto en un subsistema detector de transitorios, y un filtro biquad de cuatro etapas (es decir, un filtro que incluye cuatro filtros biquad en cascada) para implementar filtrado paso bajo en un subsistema de efectos de baja frecuencia (“LFE”). Un decodificador de Dolby E típicamente emplea un filtro biquad de tres etapas (es decir, un filtro que incluye tres filtros biquad en cascada) para implementar filtrado paso bajo en un subsistema de efectos de baja frecuencia (“LFE”).
Por ejemplo, la Fig. 1 es un diagrama de un filtro biquad (de un tipo al que se hace referencia algunas veces como Forma Directa II - Estructura transpuesta), que incluye los elementos 1, 2, 3, 4, 5, bü, b1, b2 , -a1 y -a2, conectados como se muestra. Los elementos 1, 2 y 3 son elementos de suma, los elementos 4 y 5 son elementos de retardo y cada uno de los elementos de ganancia b0 , b1, b2, -a1 y -a2 aplica una correspondiente de las ganancias b0, b1, b2 , -a1 y -a2 , a la señal impuesta en su entrada. Aunque no se muestra o describe en la presente memoria, es bien conocido por los expertos en la técnica que existen otras estructuras de filtro biquad equivalentes, por ejemplo, Forma Directa I, Forma Directa I - Transpuesta y Forma Directa II. Cualquiera de tales estructuras de filtro biquad equivalentes están dentro del alcance de la invención.
Como se muestra en Fig. 1A, si el filtro biquad de la Fig. 1 (etiquetado como Biquad 1 en Fig. 1A) está conectado en cascada con un filtro biquad que tiene una estructura idéntica (etiquetado como Biquad 2 en la Fig. 1A) pero cuyos elementos de ganancia pueden aplicar ganancias diferentes distintas de las del filtro de la Fig. 1, el filtro biquad multietapa resultante es un ejemplo de un filtro biquad de dos etapas que se puede emplear (por ejemplo, para implementar filtrado paso alto en un subsistema detector de transitorios de un codificador de audio como se ha mencionado anteriormente). En el filtro biquad multietapa de Fig. 1A, la señal de salida, x1 (n), de la primera etapa es la señal de entrada a la segunda etapa.
Para filtros biquad multietapa (y algunos otros filtros de IIR multietapa), un cálculo de muestra de salida en cada etapa en el instante “n” (es decir, la señal de salida de etapa y(n)) en respuesta a los valores de una señal en el dominio del tiempo x(n) (una señal de entrada o una señal generada en otra etapa de la filtro multietapa) en el instante “n” e instantes anteriores, tiene dependencia de las salidas anteriores (es decir, las salidas y(n-1) e y(n-2), en los instantes n-1 y n-2). También, para cada dos etapas consecutivas (filtros biquad) en un filtro biquad multietapa, la salida de cada etapa anterior se introduce a la etapa posterior, de modo que la salida de la etapa posterior no se puede determinar hasta después de que se haya determinado la salida de la etapa anterior. Éstas son las principales razones en cuanto a por qué las que no se ha empleado el procesamiento completamente paralelizado (antes de la presente invención) para implementar un filtro biquad multietapa.
En muchas arquitecturas de procesadores centrales modernas (por ejemplo, arquitecturas de procesadores de señales digitales) hay unidades de SIMD (instrucción única, datos múltiples) y/o varias ALU (unidades aritméticas lógicas) o AMU (unidades de manipulación aritmética) que se pueden usar para paralelizar muchas algoritmos y mejorar el rendimiento. No obstante, los algoritmos convencionales para la programación de procesadores para implementar filtros biquad multietapa no usan instrucciones de SIMD y no están paralelizados.
Por ejemplo, los codificadores de Dolby Digital Plus (que codifican datos de audio de acuerdo con el formato Dolby Digital Plus) se han implementado como procesadores ARM Neon programados (cada uno de los cuales es un procesador ARM Cortex con un motor Neon SIMD que permite procesamiento en paralelo), y como procesadores de señal digital C64 de Texas Instruments programados. Muchos codificadores de datos de audio (por ejemplo, codificadores que codifican datos de audio según el formato de AC-3, Dolby Digital Plus, Dolby E y/u otros formatos de codificación) han sido o podrían ser implementados como procesadores programados que tienen cualquiera de una variedad de arquitecturas, que tienen unidades de SIMD (instrucción única, datos múltiples) y/o múltiples ALU (unidades aritméticas lógicas) o AMU (unidades de manipulación aritmética). Tales procesadores se podrían programar para implementar diversos algoritmos (incluidos en la codificación de datos de audio) usando procesamiento paralelo. No obstante, la programación convencional que se ha empleado para implementar filtros biquad multietapa en tales procesadores no ha implementado el procesamiento paralelo.
El documento US 2002/0138716 A1 se refiere a una circuitería integrada adaptativa con matrices heterogéneas y reconfigurables de unidades de cálculo diversas y adaptativas.
Aunque la invención no se limita a su uso en codificación de datos de audio de acuerdo con el formato de AC-3, Dolby Digital Plus o Dolby E, algunas realizaciones son métodos, sistemas y procesadores de codificación de audio (por ejemplo, para codificar datos de audio según el formato de AC-3, Dolby Digital Plus o Dolby E) empleando al menos un filtro biquad multietapa que implementa (o diseñado de acuerdo con) una realización de la invención. Un flujo de bits codificados en AC-3 comprende de uno a seis canales de contenido de audio y metadatos indicativos de al menos una característica del contenido de audio. El contenido de audio son datos de audio que se han comprimido mediante codificación de audio perceptual.
Los detalles de la codificación de AC-3 (también conocida como Dolby Digital) son bien conocidos y se exponen en muchas referencias publicadas, incluyendo las siguientes:
ATSC Standard A52/A: Digital Audio Compression Standard (AC-3), Revisión A, Comité de Sistemas de Televisión Avanzados, 20 de agosto de 2001;
“Flexible Perceptual Coding for Audio Transmission and Storage”, de Craig C. Todd, et al., 96a Convención de la Sociedad de Ingeniería de Audio, 26 de febrero de 1994, Preprint 3796;
“Design and Implementation of AC-3 Coders”, de Steve Vernon, Actas del IEEE de Electrónica de Consumo, Vol.
41, N° 3, agosto de 1995;
“Dolby Digital Audio Coding Standards”, capítulo de libro de Robert L. Andersen y Grant A. Davidson en The Digital Signal Processing Handbook, segunda edición, Vijay K. Madisetti, Editor en Jefe, CRC Press, 2009;
“High Quality, Low-Rate Audio Transform Coding for Transmission and Multimedia Applications”, de Bosi et al., Audio Engineering Society Preprint 3365, 93a Convención de AES, octubre de 1992; y
Las patentes de Estados Unidos 5.583.962; 5.632.005; 5.633.981; 5.727.119; y 6.021.386.
Los detalles de la codificación de Dolby Digital (AC-3) y Dolby Digital Plus (a la que se hace referencia algunas veces como AC-3 Mejorada o “E-AC-3”) se exponen en “Introduction to Dolby Digital Plus, an Enhancement to the Dolby Digital Coding Systems”, Documento de la Convención de AES 6196, 117a Convención de AES, 28 de octubre de 2004, y en la Especificación de Dolby Digital/Dolby Digital Plus (ATSC A/52: 2010), disponible en http://www.atsc.org/cms/index.php/standards/published-standards.
Breve descripción de la invención.
La invención se define por un filtro multietapa según la reivindicación 1 y un método correspondiente de filtrado según la reivindicación 7. Las realizaciones de la invención se definen en las reivindicaciones dependientes.
Breve descripción de los dibujos
La FIG. 1 es un diagrama de bloques de un filtro biquad convencional.
La FIG. 1A es un diagrama de bloques de un filtro biquad multietapa convencional.
La FIG. 2 es un diagrama de flujo de un método convencional para realizar el filtrado en un filtro implementado como filtros biquad en cascada en serie (“secciones biquad en cascada”).
La FIG. 3 es un diagrama de flujo de una realización del método inventivo para realizar filtrado en un filtro biquad multietapa que comprende filtros biquad en cascada (“secciones biquad en cascada”) que operan en paralelo en respuesta a un único flujo de instrucciones.
La FIG. 4 es un diagrama de bloques de un filtro multietapa (por ejemplo, implementado mediante programación de un DSP u otro procesador según una realización de la invención) que comprende filtros biquad en cascada y que puede realizar un método del tipo descrito con referencia a la FIG. 3. En la FIG. 4, la memoria 10 incluye ubicaciones de memoria que almacenan cada bloque de datos de entrada x(n), y ubicaciones de memoria de almacenador temporal que almacenan todos los requeridos de los valores intermedios X1(n), ..., XN-1(n) generados por los filtros biquad.
La FIG. 5 es un diagrama de bloques de un sistema que incluye un codificador (que incluye una realización del filtro multietapa inventivo) y un decodificador (que también incluye una realización del filtro multietapa inventivo).
La FIG. 6 es un diagrama de flujo de otra realización del método inventivo para realizar el filtrado en un filtro biquad multietapa que comprende filtros biquad en cascada (“secciones biquad en cascada”) que operan en paralelo en respuesta a un único flujo de instrucciones.
La FIG. 7 es un diagrama de flujo de una realización de los pasos 40, 41 y 42 de la realización de la FIG. 6 del método inventivo.
La FIG. 8 es un diagrama de flujo de una realización de los pasos 47, 48 y 49 de la realización de la FIG. 6 del método inventivo.
La FIG. 9 es un diagrama de valores generados en una implementación del sistema de la FIG. 4 en el que se realizan cálculos en su lugar.
La FIG. 10 es un diagrama de bloques de un sistema que incluye un codificador (que incluye una realización del filtro multietapa inventivo) y un decodificador que es una realización del decodificador inventivo.
Descripción detallada de las realizaciones de la invención
Las realizaciones del método inventivo y sistemas (por ejemplo, codificadores y decodificadores) configurados para implementar el método inventivo se describirán con referencia a las FIGS. 3, 4, 5, 6, 7 y 8.
Primero, con referencia a la Fig. 2, describimos un método convencional para filtrar muestras de datos (por ejemplo, bloques de muestras de datos de audio) con un filtro multietapa que comprende una cascada de M filtros biquad (donde M es un número al que se hace referencia como “secciones n” a continuación y en la Fig. 2). Un ejemplo de tal filtro biquad multietapa convencional de este tipo es el filtro de la Fig. 1A descrito anteriormente.
En el método de la Fig. 2, cada nuevo bloque de N muestras a ser filtradas se almacena temporalmente inicialmente (en el paso 20). Cada muestra en un bloque se identifica mediante el índice j, donde 0 < j < N-1. Cada etapa (sección) en el filtro multietapa se identifica por el índice i, donde 0 < i < M-1.
En el paso 21, el índice i se inicializa a cero, y en el paso 22, el índice j se inicializa a cero.
En el paso 23, la muestra de entrada de orden “j” se filtra en el filtro biquad de orden “i”, y entonces, en el paso 24, se aumenta el índice j. El paso 25 determina si el índice j aumentado (igual a j 1) es menor que N. Si se determina en el paso 25 que el índice j aumentado es menor que N, el paso 23 se realiza de nuevo para filtrar la siguiente muestra (de orden “(j+1)”) en el filtro biquad de orden “i”.
Si se determina en el paso 25 que el índice j aumentado es igual a N (de modo que todas las muestras en el bloque actual se hayan filtrado en el filtro biquad actual, entonces, en el paso 26, se aumenta el índice i.
El paso 27 determina si el índice i aumentado más recientemente (igual a i 1) es menor que el número “secciones n” (que es igual a M). Si se determina en el paso 27 que el índice i aumentado más recientemente es menor que M, entonces se realiza otra iteración de los pasos 22-26 para filtrar el último bloque de valores intermedios (las salidas del filtro biquad (de orden “i”) anterior, generado en el filtro biquad anterior en la iteración anterior de los pasos 22­ 25) en el siguiente filtro biquad ((de orden “(i+1)”).
Si se determina en el paso 27 que el índice i aumentado más recientemente es igual a M, de modo que el procesamiento de todas las muestras en el bloque actual en todos los filtros biquad esté completo, entonces se realiza el paso 28. En el paso 28, se emiten las N muestras filtradas generadas filtrando el bloque actual de muestras de entrada en el filtro multietapa. En este punto, cualquier bloque adicional de N muestras a ser filtradas se almacena temporalmente (en una nueva realización del paso 20) y se repite el método de la Fig. 2 para filtrar el nuevo bloque de muestras en el filtro multietapa.
Para el proceso de la Fig. 2, en el caso de que M = 2 (es decir, en el caso de que el filtro multietapa comprenda solamente dos filtros biquad en cascada), el procesamiento realizado en cada etapa del filtro multietapa también se describe mediante el siguiente pseudocódigo, en el que N = el número de muestras de salida a ser generadas filtrando un bloque de N muestras en el filtro multietapa:
para (i = 0; i < 2; i +)
{
para (j = 0; j < N; j +)
{
Salida [j] = función (salida [j-1], salida [j-2], entrada [j], entrada [j-1 ], entrada [j-2]);
}
}
Durante la realización del método convencional de la Fig. 2, dado que la salida de cada etapa del filtro multietapa para cada muestra (“salida [j]”) depende, en general, de las salidas de la etapa para las dos muestras anteriores (salida [j-1] y salida [j-2]), y de la entrada actual a la etapa (“entrada [j]”) y las dos entradas anteriores a la etapa (entrada [j -1] y entrada [j-2]), las operaciones para el ciclo (pasos 23,24 y 25 de la Fig. 2) implementadas dentro de la etapa no están paralelizadas. También, dado que la salida de la primera etapa (i = 0) se introduce a la segunda etapa (i = 1), las operaciones a lo largo de las etapas no están paralelizadas en la realización del método convencional de la Fig. 2. Esto conduce a un requisito de recuento de instrucciones alto (al que se hace referencia algunas veces como MIPS o Millones de Instrucciones Por Segundo) para el filtro multietapa, incluso cuando se implementa por un procesador cuya arquitectura incluye múltiples ALU (o AMU) o unidades de SIMD.
A continuación, con referencia a la Fig. 3, describimos una realización del método inventivo para filtrar un bloque de muestras de datos (por ejemplo, un bloque de muestras de datos de audio) con un filtro multietapa que comprende una cascada de dos filtros biquad. Inicialmente, en el paso 30, cada nuevo bloque de N muestras a ser filtradas se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores (incluyendo los pasos 31,33 y 34).
Cada muestra de un bloque se identifica mediante el índice j, donde 0 < j < N-1. Cada etapa (sección) en el filtro multietapa se identifica mediante el índice i, donde 0 < i < 1.
En el paso 31, la primera muestra de entrada (j = 0) se filtra en el primer filtro biquad (i = 0). El valor generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, ejecuciones posteriores de los pasos 33 y/o 34).
En el paso 32, el índice j se establece en 1.
Entonces, los pasos 33 y 34 se realizan en paralelo. En el paso 33, la' muestra de entrada de orden “j” se filtra en el primer filtro biquad (i = 0), y al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por este paso se almacena temporalmente (por ejemplo, en memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores. En el paso 34, se filtra la muestra de entrada de orden “j-1” en el segundo filtro biquad (i = 1), y al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en pasos posteriores.
Entonces, en el paso 35, se aumenta el índice j. El paso 36 determina si el índice j aumentado (igual a j 1) es menor que N. Si se determina en el paso 36 que el índice j aumentado es menor que N, los pasos 33 y 34 se realizan de nuevo para filtrar la siguiente muestra de entrada en el primer filtro biquad (en el paso 33) y la siguiente muestra de entrada en el segundo filtro biquad (en el paso 34). Al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por cada iteración de cada uno de los pasos 33 y 34 se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos siguientes. Por ejemplo, uno o más valores intermedios generados en una o más iteraciones previas del paso 33 se pueden recuperar del almacenador temporal para su uso en una realización del paso 34.
Si se determina en el paso 36 que el índice j aumentado es igual a N (de modo que todas las muestras de entrada en el bloque actual se hayan filtrado en el primer filtro biquad, entonces se realiza el paso 37.
En el paso 37, se filtra la última muestra de entrada (j = N-1) en el segundo filtro biquad (i = 1). El valor generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, para la salida en el paso 38).
Entonces, en el paso 38, se emiten las N muestras filtradas generadas por el segundo filtro biquad (como la salida del filtro multietapa en respuesta al bloque actual de N muestras de entrada). En este punto, cualquier bloque adicional de N muestras a ser filtradas se almacena temporalmente (en una nueva realización del paso 30) y se repite el método de la Fig. 3 para filtrar el nuevo bloque de muestras en el filtro multietapa.
El procesamiento realizado (durante la realización del método de la Fig. 3) en cada etapa del filtro multietapa también se describe mediante el siguiente pseudocódigo, en el que N = el número de muestras de salida a ser generadas filtrando un bloque de N muestras en el filtro multietapa, etapadesalida1[k] es la salida de la primera etapa del filtro multietapa en respuesta a la muestra de entrada de orden k, etapadesalida2[k] es la salida de la segunda etapa del filtro multietapa correspondiente a la muestra de entrada de orden k, y la entrada[k] es la muestra de entrada de orden k en la primera etapa del filtro multietapa:
{procesamiento de 1a muestra de la 1a etapa}
para (j = 1; j <N; j +)
{
Etapadesalida1[j] = función (etapadesalida1[j-1],
etapadesalida1[j-2], entrada [j], entrada [j-1 ], entrada [j-2]);
Etapadesalida2 [j-1] = función (etapadesalida2[j-2], etapadesalida2[j-3],
etapadesalida1[j-1], etapadesalida1[j-2], etapadesalida1[j-3]);
}
{Procesamiento de la última muestra (de orden “N-1”) de la segunda etapa.}
Como es evidente a partir de la Fig. 3 y del pseudocódigo correspondiente, el procesamiento en ambas etapas del filtro multietapa se combina en un único ciclo de muestra (pasos 33, 34, 35 y 36 de la Fig. 3). Introduciendo una latencia de una muestra entre las dos etapas (en el caso de un filtro biquad de dos etapas) o de manera más general, como se describe a continuación en relación con la FIG. 6, la FIG. 7 y la FIG. 8, una latencia de una muestra entre cada etapa de un filtro multietapa que tiene dos o más etapas de filtro biquad, el procesamiento en todas las etapas del filtro multietapa se puede paralelizar por completo según la invención. El procesamiento de un bloque de muestras en todas las etapas de filtro biquad de un filtro multietapa se pueden paralelizar de este modo en un único ciclo de muestra (combinado para todas las etapas), según la realización descrita de la invención.
Se contemplan variaciones en la realización de la Fig. 3 del método inventivo, para filtrar un bloque de muestras de datos (por ejemplo, un bloque de muestras de datos de audio) con un filtro multietapa que comprende una cascada de M filtros biquad (donde M es mayor que 2). Tales variaciones se implementan típicamente de una manera a ser descrita con referencia a las Figs. 6, 7 y 8.
Inicialmente, en el paso 40 del diagrama de flujo de la Fig. 6, cada nuevo bloque de N muestras a ser filtradas se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores (incluyendo los pasos 41,43-45 y 48).
Cada muestra en un bloque se identifica mediante el índice j, donde 0 < j < N-1. Cada etapa biquad (sección) en el filtro multietapa se identifica mediante el índice i, donde 0 < i < M-1.
En el paso 41, se realiza un filtrado previo al ciclo sobre las primeras M-1 muestras de entrada (j = 0 hasta j = M-2) en las etapas de filtro biquad i = 0 hasta i = M-2 (por ejemplo, de la manera a ser descrita con referencia a la Fig. 7). Se debería observar, como se muestra en la FIG. 7, que para algunas etapas de filtro biquad, el filtrado previo al ciclo ocurre correspondiente solamente a un subconjunto de las primeras M-1 muestras de entrada. Los valores generados por este paso se almacenan temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que estén disponibles para su uso posterior (por ejemplo, en las realizaciones posteriores de los pasos 43-45).
En el paso 42, el índice j se establece en M -1.
Entonces, los pasos 43-45 (un paso para cada una de las M etapas) se realizan en paralelo. En el paso 43, se filtra la muestra de entrada de orden “j” en el primer filtro biquad (i = 0) y al menos un valor (por ejemplo, cada uno) (un valor” intermedio “) generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores. En el paso 44, se filtra la muestra de entrada de orden “j-1” en el segundo filtro biquad (i = 1), y al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores. De manera similar (en al menos un paso realizado en paralelo con los pasos 43 y 44, suponiendo que M es mayor que 2), se filtra la muestra de entrada de orden “j-2” en el tercer filtro biquad (i = 2), se filtra la muestra de entrada de orden “j-3” en el cuarto filtro biquad (i = 3) (suponiendo que M es mayor o igual que 4), y así sucesivamente para cada uno adicional de los filtros biquad i = 4 hasta i = M-2, y al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por cada paso tal se almacena temporalmente para que esté disponible para su uso en los pasos posteriores. En el paso 45 (realizado en paralelo con los pasos 43 y 44, si M es mayor que 2), se filtra la muestra de entrada de orden “j-M+1 ” en el último filtro biquad (i = M-1), y al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores.
Entonces, en el paso 46, se aumenta el índice j, y el paso 47 determina si el índice j aumentado (igual a j 1) es menor que N. Si se determina en el paso 47 que el índice j aumentado es menor que N, los pasos 43-45 (y cualquier otro paso o pasos realizados en paralelo con los pasos 43-45) se realizan de nuevo para filtrar la siguiente muestra en el primer filtro biquad (en el paso 43), la siguiente muestra en el segundo filtro biquad (en el paso 44) y así sucesivamente para cada etapa de filtro biquad adicional. Al menos un valor (por ejemplo, cada uno) (un valor “intermedio”) generado por cada iteración de cada uno de los pasos 43-45 se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso en los pasos posteriores. Por ejemplo, uno o más valores intermedios generados en una o más iteraciones previas del paso 43 se pueden recuperar del almacenador temporal para su uso en una realización del paso 44.
Si se determina en el paso 47 que el índice j aumentado es igual a N (de modo que todas las muestras de entrada en el bloque actual se hayan filtrado en uno de los filtros biquad (el filtro para el cual i = 0), entonces se realiza el paso 48 de filtrado posterior al ciclo.
En el paso 48, el filtrado posterior al ciclo se realiza sobre cualquier muestra de entrada sin filtrar restante en las etapas de filtro biquad i = 1 hasta i = M-1 (por ejemplo, de la manera a ser descrita con referencia a la Fig. 8). El valor o valores generados por este paso se almacenan temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que estén disponibles para su uso posterior (por ejemplo, para la salida en el paso 49).
Después del paso 48, en el paso 49, se emiten las N muestras filtradas generadas por el filtro biquad final (i = M-1) (como la salida del filtro multietapa en respuesta al bloque actual de N muestras de entrada). En este punto, cualquier bloque adicional de N muestras a ser filtradas se almacena temporalmente (en una nueva realización del paso 40) y se repite el método de la Fig. 6 para filtrar el nuevo bloque de muestras en el filtro multietapa.
La Fig. 7 es un diagrama de flujo de los pasos 40 y 42, y detalles de una realización del paso 41, de la realización de la Fig. 6 del método inventivo. Los pasos 50-58 de la Fig. 7 son una implementación del paso 41 de filtrado previo al ciclo de la Fig. 6. En el paso 50, la primera muestra (j = 0) del bloque actual se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en los pasos 51 y 52). En el paso 51, la segunda muestra del bloque (j = 1) se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en el paso 53). En el paso 52, se filtra la primera muestra del bloque (j = 0) en la segunda etapa de filtro biquad (i = 1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en el paso 54). Los pasos 51 y 52 se realizan preferiblemente en paralelo (en respuesta a la misma instrucción o secuencia de instrucciones impuesta en la primera y segunda etapas).
En los pasos mostrados verticalmente debajo del paso 51 en la Fig. 7 (incluyendo los pasos 53 y 56), cada una de la tercera muestra (j = 2) hasta la muestra de orden “M-1” (j = M-2) del bloque actual se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por cada paso tal se almacena temporalmente para que esté disponible para su uso posterior. En el paso 53, la tercera muestra (j = 2) del bloque se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por tal paso se almacena temporalmente para que esté disponible para su uso posterior. En el paso 56, la muestra de orden “M-1” (j = M-2) del bloque actual se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por tal paso se almacena temporalmente para que esté disponible para su uso posterior.
En los pasos que se muestran verticalmente debajo del paso 52 en la Fig. 7 (incluyendo los pasos 54 y 57), cada una de la segunda muestra de entrada (j = 1) hasta la muestra de entrada de orden “M-2” (j = M-3) se filtra en la segunda etapa de filtro biquad (i = 1), y el valor de la muestra filtrada generado por cada paso tal se almacena temporalmente para que esté disponible para su uso posterior. En el paso 54, la segunda muestra de entrada (j = 1) se filtra en la segunda etapa de filtro biquad, y el valor de la muestra filtrada generado por tal paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior. En el paso 57, la muestra de entrada de orden “M-2” (j = M-3) se filtra en la segunda etapa de filtro biquad, y el valor de la muestra filtrada generado por tal paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior.
De manera general, para la etapa de filtro biquad de orden “k”, donde k está en un índice que oscila de 0 hasta M-2, se realiza una secuencia de pasos (una columna de pasos en la Fig. 7) para filtrar cada una de la primera muestra de entrada (j = 0) en la etapa de filtro biquad de orden “k” hasta la muestra de entrada de orden “M-1-k” (j = M-2-k) en la etapa de filtro biquad de orden “k”, y el valor o valores de la muestra filtrada generados por cada paso tal se almacenan temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que estén disponibles para su uso posterior.
De este modo, si M = 3, se realizan los pasos 53, 54 y 55 de la Fig. 7 (preferiblemente en paralelo). En el paso 53, la tercera muestra de entrada (j = 2) se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por este paso se almacena temporalmente. En el paso 54, la segunda muestra de entrada (j = 1) se filtra en la segunda etapa de filtro biquad (i = 1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente. En el paso 55, la primera muestra de entrada (j = 0) se filtra en la tercera etapa de filtro biquad (i = 2), y se almacena temporalmente el valor de la muestra filtrada generado por este paso.
De manera similar, si M > 5, se realizan entonces (preferiblemente en paralelo) los pasos de la fila de pasos debajo de la fila que incluye los pasos 53-55 (como se indica en la Fig. 7), y luego se realizan (preferiblemente en paralelo) los pasos de la fila de pasos que incluye los pasos 56, 57 y 58 de la Fig. 7. En el paso 56, la muestra de entrada de orden “M-1 ” (j = M-2) se filtra en la primera etapa de filtro biquad (i = 0), y el valor de la muestra filtrada generado por este paso se almacena temporalmente. En el paso 57, la muestra de entrada de orden “M-2” (j = M-3) se filtra en la segunda etapa de filtro biquad (i = 1), y se almacena temporalmente el valor de la muestra filtrada generado por este paso. En el paso 58, la primera muestra de entrada (j = 0) se filtra en la etapa de filtro biquad de orden “M-1” (i = M-2), y se almacena temporalmente el valor de la muestra filtrada generado por este paso.
Los pasos de cada fila de pasos en la Fig. 7 (por ejemplo, los pasos 51 y 52, o los pasos 53, 54 y 55) se realizan preferiblemente en paralelo (en respuesta a la misma instrucción o secuencia de instrucciones impuesta en las etapas pertinentes).
La Fig. 8 es un diagrama de flujo de una realización de los pasos 47 y 49, y detalles de una realización del paso 48, de la realización de la Fig. 6 del método inventivo. Los pasos 60-66 de la Fig. 8 son una implementación del paso 48 de filtrado posterior al ciclo de la Fig. 6.
De manera general, como se muestra en la Fig. 8, para la etapa de filtro biquad de orden “k”, donde k es un índice que oscila de 1 hasta M-1, se realiza una secuencia de pasos (una columna de pasos en la Fig. 8) para filtrar cada una de la muestra de entrada de orden “N-k+1” (j = N-k) en la etapa de filtro biquad de orden “k” hasta la última muestra de entrada (j = N-1) en la etapa de filtro biquad de orden “k”, y el valor o valores de la muestra filtrada generados por cada paso tal se almacenan temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que estén disponibles para uso posterior.
Por ejemplo, en el paso 60, la última muestra (j = N-1) del bloque actual se filtra en la segunda etapa de filtro biquad (i = 1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior. En el paso 61, la penúltima muestra del bloque (j = N-2) se filtra en la tercera etapa de filtro biquad (i = 2), y el valor de la muestra filtrada generado por este paso se almacena temporalmente (por ejemplo, en la memoria 10 de Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en el paso 63). En el paso 63, la última muestra del bloque (j = N-1) se filtra en la tercera etapa de filtro biquad (i = 2), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de Fig. 4) para que esté disponible para su uso posterior.
En el paso 64, la última muestra del bloque (j = N-1) se filtra en la penúltima etapa de filtro biquad (i = M-2), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de la Fig.4) para que esté disponible para su uso posterior.
En el paso 62, la muestra de orden “N-M+1” del bloque se filtra en la última etapa de filtro biquad (i = M-1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en los pasos verticalmente debajo del paso 62 en la Fig. 8). En el paso 65, la penúltima muestra del bloque (j = N-2) se filtra en la última etapa de filtro biquad (i = M-1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de la Fig. 4) para que esté disponible para su uso posterior (por ejemplo, en el paso 66 en la Fig. 8). En el paso 66, la última muestra del bloque (j = N-1) se filtra en la última etapa de filtro biquad (i = M-1), y el valor de la muestra filtrada generado por este paso se almacena temporalmente preferiblemente (por ejemplo, en la memoria 10 de la Fig. 4) de modo que esté disponible para su uso posterior. Los pasos de cada fila de pasos en la Fig. 8 (por ejemplo, los pasos 64 y 65, o los pasos en la fila que incluyen los pasos 60, 61 y 62) se realizan preferiblemente en paralelo (en respuesta a la misma instrucción o secuencia de instrucciones impuestas en las etapas pertinentes).
El método de la Fig. 3 (y las variaciones del mismo para filtrar un bloque de muestras de datos con un filtro multietapa que comprende una cascada de más de dos filtros biquad) realiza un filtrado multietapa de un bloque de N muestras de entrada en un único ciclo con iteración sobre un índice de muestra (índice j de la Fig. 3) pero sin iteración sobre un índice de etapa de filtro bicuadrático. Por el contrario, el método convencional de la Fig. 2 procesa un bloque de muestras de datos en dos ciclos anidados con iteración sobre tanto un índice de muestra (índice j de la Fig. 2) como iteración sobre un índice de etapa de filtro bicuadrático (índice i de la Fig. 2).
Según la invención, las etapas del filtro multietapa inventivo (cada una de cuyas etapas es un filtro biquad) se combinan con la latencia entre las etapas, de manera que todas las etapas puedan operar de manera independiente, permitiendo la paralelización del procesamiento de las diferentes etapas. Todas las etapas pueden operar en paralelo (para filtrar un bloque de valores de datos de entrada), en respuesta a un único flujo común de instrucciones desde un controlador, pero con cada etapa operando sobre diferentes valores de datos, con al menos una de las etapas operando sobre valores de datos que incluyen valores almacenados temporalmente (generados por otra de las etapas en respuesta a un subconjunto de valores de datos de entrada, y almacenados con diferentes latencias en una memoria de almacenador temporal antes de ser recuperados para su procesamiento en dicha una de las etapas). De este modo, el filtro multietapa tiene una arquitectura de SIMD (instrucción única, datos múltiples) en la que las etapas de filtro biquad individuales operan de forma independiente y en paralelo en respuesta al flujo único de instrucciones. Por ejemplo, el filtro multietapa puede incluir N etapas, y una de las etapas (la etapa de orden “M+1” en la secuencia) puede operar sobre los valores de datos generados por una anterior de las etapas (la etapa de orden “M” en la secuencia) en diferentes momentos (por ejemplo, en respuesta a una secuencia de diferentes valores de datos de entrada del bloque), almacenados en una memoria de almacenador temporal (en diferentes momentos) y leídos (por la etapa de orden “(M 1)”) de la memoria de almacenamiento temporal después de residir en la memoria de almacenador temporal con diferentes tiempos de latencia.
A continuación, con referencia a la Fig. 4, describimos una clase de realizaciones del filtro multietapa inventivo. El filtro multietapa de la Fig. 4 incluye múltiples filtros biquad (M filtros biquad, donde M es un número entero mayor que uno) y está configurado para realizar un método del tipo descrito con referencia a la FIG. 3 (o una variación de tal método, tal como la que se muestra en la Fig. 6). El filtro de la Fig. 4 incluye la memoria 10, el controlador 11 y los filtros biquad B0 , B1, ... Bm-1, conectados como se muestra, y está configurado para filtrar un bloque de N valores de datos de entrada x(j), donde “j” es un índice que oscila de 0 hasta N-1, en respuesta a un único flujo de instrucciones impuestas a los filtros biquad por el controlador 11. Cada uno de los valores de datos de entrada x(j) puede ser una muestra de datos de audio.
Se debería apreciar que la expresión de que un “flujo único de instrucciones” se impone a las etapas individuales (por ejemplo, cada una de las cuales es un filtro biquad) de un filtro multietapa, se usa en la presente memoria en un sentido amplio que incluye tanto: los casos en los que un único flujo de instrucciones se impone en todas las etapas (por ejemplo, en un único bus o conductor al que se acoplan todas las etapas); como los casos en los que se imponen flujos de instrucciones idénticos (o sustancialmente idénticos) simultáneamente (o sustancialmente simultáneamente) en las etapas (por ejemplo, cada flujo impuesto en un bus o conductor diferente acoplado a una diferente de las etapas).
En respuesta al bloque de valores de datos de entrada x(j), el filtro B0 genera N valores intermedios (filtrado biquad) xü(j), y los impone en ubicaciones de memoria de almacenador temporal en la memoria 10. En operación, el filtro B1 recupera los valores intermedios requeridos X0(j), de la memoria 10, genera valores intermedios (filtrado biquad) X1(j) en respuesta a los mismos, e impone los valores intermedios que genera a las ubicaciones de memoria de almacenador temporal en la memoria 10. De manera similar, en operación, uno entre sí de los filtros biquad (filtro Bi, donde i es un índice que oscila de 2 hasta M-1) recupera los valores intermedios xn(j) de la memoria 10, genera valores de filtrado biquad xi(j) en respuesta a los mismos, e impone los valores que genera para ubicaciones de memoria de almacenador temporal en la memoria 10. Los valores de filtrado biquad, XM-1(j) = y(j), generados en el filtro biquad final (Bm-i) comprenden un bloque de N valores de datos de salida completamente filtrados generados en respuesta al bloque de valores de datos de entrada x(j).
La memoria 10 incluye ubicaciones de memoria que almacenan cada bloque de datos de entrada x(j), y ubicaciones de memoria de almacenador temporal que almacenan valores intermedios x0(j), ..., XM-2(j) generados por los filtros biquad B0 , B1, ..., Bm-2 (por ejemplo, ubicaciones de almacenador temporal que almacenan valores intermedios x0(j), ..., xm-2Ü) generados para cada bloque de datos de entrada). En algunas implementaciones, para las cuales se realizan cálculos en el lugar, las mismas ubicaciones de memoria que se usan para almacenar datos de entrada x(j) se pueden usar para almacenar valores intermedios x0(j), ..., xM-2(j) una vez que ya no se necesitan muestras de datos de entrada por el filtro multietapa. En tales implementaciones, la memoria 10 típicamente no necesita incluir más (o significativamente más) ubicaciones de memoria que incluye una memoria convencional (para implementar una versión no paralelizada convencional del filtro multietapa), dado que tal memoria convencional típicamente incluiría ubicaciones de memoria para almacenar cada bloque de datos de entrada, x(n), a ser filtrados, y cada valor de salida generado por cada una de las etapas del filtro multietapa que se requiere para la operación de la etapa en sí misma y/o para la operación de cada etapa posterior del filtro.
Por ejemplo, la Fig. 9 es un diagrama de valores generados en una implementación del sistema de la Fig. 4 en el que los cálculos se realizan en su lugar, en el caso de que N = 4 y M = 2 (es decir, biquad de dos etapas operando sobre bloques de 4 muestras a la vez).
En el ejemplo de la Fig. 9, comenzamos con cuatro muestras en el almacenador temporal de entrada, x(0), ... x(3).
En un primer paso, la muestra x(0) se filtra a través del filtro B0 (biquad de primera etapa) para producir la muestra x0(0). La muestra x0(0) se almacena en la memoria en la ubicación ocupada previamente por la muestra x(0). Todas las demás ubicaciones de memoria no se cambian.
En un segundo paso, la muestra x0(0) se filtra a través del filtro B1 (biquad de segunda etapa) para producir la muestra y(0). La muestra y(0) se almacena en la memoria en la ubicación previamente ocupada por la muestra x0(0).
En paralelo, la muestra x(1) se filtra a través del filtro B0 para producir la muestra x0(1). La muestra x0(1) se almacena en la memoria en la ubicación ocupada previamente por la muestra x(1).
En los pasos posteriores, el procesamiento continúa hasta que todas las muestras de entrada x(0) ... x(3) se hayan sustituido por las muestras de salida y(0) ... y(3).
En el ejemplo de la Fig. 9, cuando se aplica el filtro B1 a la muestra x0(2), las muestras x0(1) y x0(0) ya no residen en el almacenador temporal (habiendo sido sustituidas por y(0) e y(1)). En su lugar, las muestras que se derivaron por el filtro B1 a partir de x0(1) y x0(0) (es decir, las muestras correspondientes a s1(n) y s2(n) en la Fig. 1) están contenidas en 2 variables de estado asociadas con el filtro B1.
En el ejemplo de la Fig. 9, cada filtro (por ejemplo, cada uno de los filtros B0 y B1) requiere acceso a las ubicaciones de memoria que almacenan las dos muestras (correspondientes a s1(n) y s2(n) en la Fig. 1) que genera (en respuesta a las muestras de entrada de orden “j-1” y de orden “j-2” del bloque actual de N muestras de entrada) para su uso en el filtrado de la muestra de entrada de orden “j” del bloque actual. Estas ubicaciones de memoria podrían estar dentro de la memoria 10 del sistema de la Fig. 4 (o podrían ser otras ubicaciones de memoria de almacenador temporal).
Para cada uno de los filtros, cada par de muestras almacenadas (correspondientes a s1(n) y s2(n) en la Fig. 1) que se han generado por el filtro se actualizan cada vez que se impone una nueva muestra de entrada (con un índice j aumentado) en el filtro. Las muestras almacenadas (correspondientes a s1(n) y s2(n) en la Fig. 1) son ejemplos de “valores intermedios” (en la medida que esta frase se usa en otras partes de este documento) que se generan por el filtro (que es una etapa de un filtro multietapa) y almacenan temporalmente para su uso posterior de acuerdo con la invención, pero posteriormente se usan por la etapa de filtro que los generó (no por una etapa de filtro diferente del filtro multietapa).
Aunque la Fig. 9 muestra un ejemplo específico del método inventivo que usa filtrado en su lugar, en el que el tamaño de bloque (N) es igual a 4 y el número de etapas de filtro biquad (M) en el filtro inventivo es igual a 2, las realizaciones del método inventivo que usa filtrado en su lugar se contemplan para cualquier valor de M y N sujeto a las restricciones de que M > 1 y N > M. En la implementación de la Fig. 9 (y otras realizaciones que usan filtrado en su lugar en el que el tamaño del bloque es diferente de 4 y/o el número de etapas biquad es diferente de 2), las mismas ubicaciones de memoria (por ejemplo, en la memoria 10 de la Fig. 4) que se usan para almacenar datos de entrada x(j) se pueden usar para almacenar valores intermedios xü(j), ..., XM-2(j) una vez que las muestras de datos de entrada particulares ya no sean necesarias para el filtro multietapa.
El filtro de la Fig. 4 se puede implementar programando un procesador de señal digital (DSP) u otro procesador que incluya una memoria (que funciona como la memoria 10), un controlador (que funciona como el controlador 11) y ALU (unidades aritméticas lógicas) o AMU (unidades de manipulación aritmética), con cada uno de los filtros biquad Bi, B2 , Bm que se implementa como una de las ALU o AMU configurada adecuadamente.
De este modo, el filtro de la Fig. 4 incluye:
una memoria de almacenador temporal (ubicaciones de almacenador temporal en la memoria 10);
al menos dos etapas de filtro biquad (filtros biquad B0 , B1, ..., Bm-1), que incluyen una primera etapa de filtro biquad (por ejemplo, el filtro biquad B0) y una etapa de filtro biquad posterior (por ejemplo, el filtro biquad B1); y un controlador (controlador 11), acoplado a las etapas de filtro biquad y configurado para imponer un único flujo de instrucciones tanto a la primera etapa de filtro biquad como a la etapa de filtro biquad posterior. La primera etapa de filtro biquad y la etapa de filtro biquad posterior (y cada una de otras etapas de filtro biquad del filtro de la Fig. 4) operan de manera independiente y en paralelo en respuesta al flujo de instrucciones.
La primera etapa de filtro biquad está acoplada a la memoria y configurada para realizar un filtrado bicuadrático sobre un bloque de N muestras de entrada en respuesta al flujo de instrucciones para generar valores intermedios (por ejemplo, los valores x0(j)), y para imponer los valores intermedios a la memoria (para su almacenamiento en dicha memoria). Estos valores intermedios incluyen una versión filtrada de cada una de las muestras de entrada. En determinadas realizaciones de la invención, no necesita estar presente más que un valor intermedio x0(j) en la memoria 10 en cualquier momento. La etapa de filtro biquad posterior se acopla a la memoria y se configura para realizar un filtrado bicuadrático sobre los valores almacenados temporalmente recuperados: de la memoria en respuesta al flujo de instrucciones para generar un bloque de valores de salida (por ejemplo, los valores x1 (j)), en donde los valores de salida incluyen un valor de salida correspondiente a cada una de las muestras de entrada en el bloque de N muestras de entrada, y los valores almacenados temporalmente incluyen al menos algunos de los valores intermedios generados en la primera etapa de filtro biquad en respuesta al bloque de N muestras de entrada. La etapa de filtro biquad posterior (por ejemplo, el filtro B1 de la Fig. 4), en una realización en la que el filtro multietapa tiene M etapas, está configurada para generar un valor de salida correspondiente a la de orden “j” de las muestras de entrada en respuesta a un subconjunto de los valores almacenados temporalmente recuperados de la memoria, donde j es un índice en el intervalo de M-1 a N-1, dicho subconjunto que incluye la versión filtrada de la de orden “j” de las muestras de entrada, la versión filtrada de una de orden “j-1” de las muestras de entrada y la versión filtrada de una de orden “j-2” de las muestras de entrada.
La etapa de filtro biquad posterior (por ejemplo, el filtro B1 de la Fig. 4) está configurada para generar un valor de salida ( x j correspondiente a cada una de las muestras de entrada, x(j), en respuesta a un subconjunto diferente de los valores almacenados temporalmente recuperados: de la memoria, cada uno de dichos subconjuntos incluye al menos dos (por ejemplo, tres) de los valores intermedios generados en la primera etapa de filtro biquad (por ejemplo, los valores xü(j), xü(j-1) y xü(j-2), indicados en la Fig. 4) y recuperados de la memoria después de residir en dicha memoria para diferentes tiempos de latencia. Más específicamente, en una realización en la que el filtro multietapa tiene M etapas, el subconjunto de los valores almacenados temporalmente recuperados por el filtro B1 para generar el valor de salida correspondiente a una de orden “j” de las muestras de entrada, donde j es un índice en el intervalo de M-1 a N-1, incluye al menos un valor generado en la primera etapa de filtro biquad en respuesta a la de orden “j” de las muestras de entrada, al menos un valor generado en la primera etapa de filtro biquad en respuesta a la de orden “j-1” de las muestras de entrada, y al menos un valor generado en el primera etapa de filtro biquad en respuesta a la de orden “j-2” de las muestras de entrada.
El filtro de la Fig. 4 está configurado para realizar filtrado multietapa sobre un bloque de N muestras de entrada (valores de datos x(j)), incluso realizando los pasos de:
(a) realizar una primera operación de filtrado bicuadrático sobre el bloque de N muestras de entrada para generar valores intermedios (por ejemplo, los valores X0(j), X0(j-1) y X0(j-2), indicados en la Fig. 4), e imponiendo los valores intermedios a una memoria de almacenador temporal (para almacenamiento en dicha memoria), en donde los valores intermedios incluyen una versión filtrada de cada uno de al menos un subconjunto de las muestras de entrada; y
(b) realizar una segunda operación de filtrado bicuadrático sobre los valores almacenados temporalmente recuperados de la memoria, para generar un bloque de valores de salida (por ejemplo, los valores X1 (j) indicados en la Fig. 4), en donde los valores de salida incluyen un valor de salida correspondiente a cada una de las muestras de entrada en el bloque de N muestras de entrada, se recupera y filtra un subconjunto diferente de los valores almacenados temporalmente para generar el valor de salida correspondiente a cada una de las muestras de entrada en el bloque, y cada subconjunto de los valores almacenados temporalmente incluye al menos dos (por ejemplo, tres) de los valores intermedios generados durante la realización del paso (a) (por ejemplo, los valores X0(j), X0(j-1) y X0(j-2), indicados en la Fig. 4) que se recuperan de la memoria después de residir en dicha memoria para diferentes tiempos de latencia,
en donde los pasos (a) y (b) se realizan en respuesta a un único flujo de instrucciones, de manera que los pasos (a) y (b) se realicen de manera independiente y en paralelo en respuesta al único flujo de instrucciones.
Los valores almacenados temporalmente recuperados en el paso (b) para generar el valor de salida correspondiente a una de orden “j” de las muestras de entrada en una realización en la que el filtrado se realiza en un filtro multietapa que tiene M etapas, donde j es un índice en el intervalo de M-1 a N-1, incluyen la versión filtrada de la de orden “j” de las muestras de entrada generadas en el paso (a), la versión filtrada de una de orden “j-1” de las muestras de entrada generadas en el paso (a), y la versión filtrada de una de orden “j-2” de las muestras de entrada generadas en el paso (a).
La FIG. 5 es un diagrama de bloques de un sistema que incluye un codificador (codificador 150) que incluye una realización del filtro multietapa inventivo (“filtro M B” 153). Por ejemplo, el filtro 153 puede ser del tipo mostrado y descrito con referencia a la Fig. 4. El codificador 150 incluye opcionalmente dos o más filtros multietapa, cada uno de los cuales es una realización del filtro multietapa inventivo. En respuesta a muestras de datos de audio de entrada, el codificador 150 genera datos de audio codificados e impone los datos de audio codificados al subsistema de entrega 151.
El subsistema de entrega 151 está configurado para almacenar los datos de audio codificados y/o para transmitir una señal indicativa de los datos de audio codificados. El decodificador 152 está acoplado y configurado (por ejemplo, programado) para recibir los datos de audio codificados del subsistema 151 (por ejemplo, leyendo o recuperando los datos de audio codificados del almacenamiento en el subsistema 151, o recibiendo una señal indicativa de los datos de audio codificados que se han transmitido por el subsistema 151).
El decodificador 152 incluye una realización del filtro multietapa inventivo (“filtro M B” 154). Por ejemplo, el filtro 154 puede ser del tipo mostrado y descrito con referencia a la Fig. 4. El decodificador 152 incluye opcionalmente dos o más filtros multietapa, cada uno de los cuales es una realización del filtro multietapa inventivo. El decodificador 152 opera para decodificar los datos de audio codificados, generando por ello datos de audio decodificados.
El sistema de la Fig. 5 también incluye un subsistema de procesamiento previo de audio (“preprocesador”) 155 configurado para realizar el procesamiento preliminar de datos de audio a ser codificados por el codificador 150. El preprocesador 155 incluye una realización del filtro multietapa inventivo (“filtro M B” 157). Por ejemplo, el filtro 157 puede ser del tipo mostrado y descrito con referencia a la Fig. 4.
El sistema de la Fig. 5 también incluye un subsistema de procesamiento posterior de audio (“posprocesador”) 156 configurado para realizar el procesamiento posterior de datos de audio decodificados que se han decodificado por el decodificador 154. El posprocesador 156 incluye una realización del filtro multietapa inventivo (“filtro M B” 158). Por ejemplo, el filtro 158 puede ser del tipo mostrado y descrito con referencia a la Fig. 4.
En algunas implementaciones, el codificador 150 es un codificador de AC-3 (o AC-3 mejorada, o Dolby E), que está configurado para generar un flujo de bits de audio codificados de AC-3 (o AC-3 mejorada, o Dolby E), en respuesta a datos de audio de entrada en el dominio del tiempo, y el decodificador 52 es un decodificador de AC-3 (o AC-3 mejorada, o Dolby E).
Una de las realizaciones de la invención es un codificador de audio (por ejemplo, el codificador 150 de la Fig. 5) configurado para generar datos de audio codificados en respuesta a datos de audio de entrada, dicho codificador que incluye al menos un filtro multietapa (que es cualquier realización del filtro multietapa inventivo) acoplado y configurado para filtrar los datos de audio (por ejemplo, para filtrar una versión procesada preliminarmente de los datos de audio). El codificador 150 está configurado para codificar datos de audio para generar datos de audio codificados, incluso realizando una realización del método de filtrado multietapa inventivo sobre los datos de audio (por ejemplo, en una versión procesada preliminarmente de los datos de audio).
Una de las realizaciones de la invención es un decodificador de audio (por ejemplo, el decodificador 152 de la Fig. 5) configurado para generar datos de audio decodificados en respuesta a datos de audio codificados, dicho decodificador que incluye al menos un filtro multietapa (que es cualquier realización del filtro multietapa inventivo) acoplado y configurado para filtrar los datos de audio codificados (por ejemplo, para filtrar una versión procesada preliminarmente de los datos de audio codificados). El decodificador 152 está configurado para decodificar datos de audio codificados para generar datos de audio decodificados, incluso realizando una realización del método de filtrado multietapa inventivo sobre los datos de audio codificados (por ejemplo, en una versión procesada preliminarmente de los datos de audio codificados).
Una realización no reivindicada es un preprocesador (por ejemplo, el preprocesador 155 de la Fig. 5) para realizar procesamiento preliminar de datos de audio (por ejemplo, datos de audio a ser codificados por un codificador), en donde el preprocesador incluye al menos un filtro multietapa (que es cualquier realización del filtro multietapa inventivo) acoplado y configurado para filtrar los datos de audio (por ejemplo, datos que se introducen al preprocesador o una versión procesada preliminarmente de tales datos de entrada).
Otra realización no reivindicada es un posprocesador (por ejemplo, el posprocesador 156 de la Fig. 5) para realizar un procesamiento posterior de datos de audio decodificados que se han decodificado por un decodificador, en donde el posprocesador incluye al menos un filtro multietapa (que es cualquier realización del filtro multietapa inventivo) acoplado y configurado para filtrar datos de audio (por ejemplo, datos decodificados que se introducen en el posprocesador o una versión procesada de tales datos de entrada).
La FIG. 10 es un diagrama de bloques de un sistema que incluye un codificador (el codificador 150) que incluye una realización del filtro multietapa inventivo (“filtro M B” 153). El codificador 150 de la FIG. 10 es idéntico al codificador 150 de la FIG. 5, y se puede implementar de cualquiera de las formas en las que el codificador 150 de la FIG. 5 se pueden implementar. El filtro multietapa 153 puede implementar cualquier realización del filtro multietapa inventivo. En respuesta a las muestras de datos de audio de entrada, el codificador 150 genera datos de audio codificados (que representan uno o más canales de audio de entrada) e impone los datos de audio codificados al subsistema de entrega 151.
El subsistema de entrega 151 está configurado para almacenar los datos de audio codificados y/o para transmitir una señal indicativa de los datos de audio codificados. El subsistema 151 de la FIG. 10 es idéntico al subsistema 151 de la FIG. 5 y se puede implementar de cualquiera de las formas en las que se puede implementar el subsistema 151 de la FIG. 5.
El decodificador 252 de la FIG. 10 tiene una entrada acoplada para recibir los datos de audio codificados del subsistema 151 (por ejemplo, leyendo o recuperando los datos de audio codificados del almacenamiento en el subsistema 151, o recibiendo una señal indicativa de los datos de audio codificados que se han transmitido por el subsistema 151).
El decodificador 252 está configurado (por ejemplo, programado) para extraer (del flujo de bits codificados recibido) datos codificados que representan uno o más canales de información de audio procesados por el filtro multietapa 153, y para decodificar los datos codificados para proporcionar representaciones decodificadas del uno o más canales de información de audio.
Según realizaciones no reivindicadas, las instrucciones de SIMD (o instrucciones para procesamiento paralelo por múltiples ALU o AMU) se usan para programar un procesador (por ejemplo, un procesador de señal digital o procesador de propósito general) para implementar un filtro multietapa. El filtro multietapa puede implementar filtrado paso bajo que limita el ancho de banda, filtrado paso bajo (por ejemplo, en un subsistema de LFE de un codificador de audio), filtrado paso alto (por ejemplo, en un subsistema detector de transitorios de un codificador de audio) u otro filtrado.
Combinar las operaciones de todas las etapas de filtro biquad de un filtro biquad multietapa (en un único ciclo de muestra) de acuerdo con la invención mejora el rendimiento habilitando el paralelismo. Los procesadores con unidades de SIMD y múltiples ALU (o AMU) pueden hacer un uso eficiente de sus recursos implementando una realización del método inventivo.
Las realizaciones del método inventivo para implementar un filtro biquad multietapa no afectan a la precisión de la salida o la estabilidad del filtro (con relación a la precisión y estabilidad alcanzables mediante una implementación convencional del filtro).
Las pruebas realizadas por el inventor han demostrado que un codificador, configurado para codificar datos de audio de acuerdo con el formato Dolby Digital Plus, e implementado como un procesador de señal digital C64 de Texas Instruments programado para incluir una realización del filtro biquad de dos etapas inventivo (que implementa el filtrado paso alto en un subsistema detector de transitorios del codificador) requirió solamente un promedio de 1846 ciclos para filtrar un bloque típico de datos de audio, en contraste con el número promedio de ciclos (4141) requeridos para filtrar el bloque cuando el codificador, en su lugar, se programó convencionalmente para incluir una implementación convencional (no paralelizada) del filtro de dos etapas.
Las pruebas realizadas por el inventor también han demostrado que un codificador, configurado para codificar datos de audio de acuerdo con el formato Dolby Digital Plus, e implementado como un procesador de señal digital C64 de Texas Instruments programado para incluir una realización del filtro biquad de cuatro etapas inventivo (que implementa filtrado paso bajo en un subsistema de efectos de baja frecuencia (“LFE”) del codificador) requirió solamente un promedio de 5802 ciclos para filtrar un bloque típico de datos de audio, en contraste con el número promedio de ciclos (10375) requeridos para filtrar el bloque cuando el codificador, en su lugar, se programó convencionalmente para incluir una implementación convencional (no paralelizada) del filtro de cuatro etapas.
Se espera que la invención también pueda proporcionar beneficios de rendimiento similares cuando el filtro inventivo se implementa programando apropiadamente otros procesadores (que tienen otras arquitecturas de procesador central). También se espera que el grado de mejora del rendimiento dependa de la arquitectura del procesador, el número de etapas del filtro y el número de polos en el filtro.
La invención se puede implementar en hardware, microprograma o software, o en una combinación de ambos (por ejemplo, como una agrupación lógica programable). A menos que se especifique de otro modo, los algoritmos o procesos incluidos como parte de la invención no están intrínsecamente relacionados con ningún ordenador particular u otro aparato. En particular, se pueden usar diversas máquinas de propósito general con programas escritos de acuerdo con las enseñanzas en la presente memoria, o puede ser más conveniente para construir un aparato más especializado (por ejemplo, circuitos integrados) para realizar los pasos del método requeridos. De este modo, la invención se puede implementar en uno o más programas de ordenador que se ejecutan en uno o más sistemas informáticos programables (por ejemplo, un sistema informático que implementa el codificador de la FIG.
5), cada uno que comprende al menos un procesador, al menos un sistema de almacenamiento de datos (incluyendo memoria volátil y no volátil y/o elementos de almacenamiento), al menos un dispositivo o puerto de entrada, y al menos un dispositivo o puerto de salida. El código de programa se aplica a los datos de entrada para realizar las funciones descritas en la presente memoria y generar información de salida. La información de salida se aplica a uno o más dispositivos de salida, de forma conocida.
Cada programa tal se puede implementar en cualquier lenguaje de ordenador deseado (incluyendo lenguajes de programación de máquina, ensamblaje o de procedimiento de alto nivel, lógicos u orientados a objetos) para comunicar con un sistema informático. En cualquier caso, el lenguaje puede ser un lenguaje compilado o interpretado.
Por ejemplo, cuando se implementa mediante secuencias de instrucciones de software de ordenador, se pueden implementar diversas funciones y pasos de realizaciones de la invención mediante secuencias de instrucciones de software multiproceso que se ejecutan en hardware de procesamiento de señales digitales adecuado, en cuyo caso los diversos dispositivos, pasos y funciones de las realizaciones pueden corresponder a partes de las instrucciones de software.
Cada programa de ordenador tal se almacena o se descarga preferiblemente en un medio o dispositivo de almacenamiento (por ejemplo, memoria o medios de estado sólido, o medios magnéticos u ópticos) legibles por un ordenador programable de propósito general o especial, para configurar y operar el ordenador cuando el medio o dispositivo de almacenamiento se lee por el sistema informático para realizar los procedimientos descritos en la presente memoria. El sistema inventivo también se puede implementar como un medio de almacenamiento legible por ordenador, configurado con (es decir, almacenamiento) un programa de ordenador, donde el medio de almacenamiento así configurado hace que un sistema informático opere de una manera específica y predefinida para realizar las funciones descritas en la presente memoria.
Se contempla que los filtros multietapa, cuyas etapas individuales son filtros de IIR pero no son filtros biquad (en la medida que están en las realizaciones específicas descritas en la presente memoria), se pueden implementar de acuerdo con la invención de modo que el procesamiento de sus etapas individuales se paralelicen (por ejemplo, de modo que todas sus etapas sean operables independientemente en respuesta un único flujo común de instrucciones, para realizar un procesamiento de datos completamente paralelizado en dichas etapas). Por ejemplo, un filtro multietapa del tipo descrito en la Publicación de Solicitud de Patente de EE.UU. N° 2012/0019723 A1, publicada el 26 de enero de 2012, se puede modificar de acuerdo con una realización de la presente invención de modo que el procesamiento de sus etapas individuales se paralelice (por ejemplo, de modo que todas sus etapas sean operables independientemente en respuesta a un único flujo común de instrucciones, para realizar un procesamiento de datos completamente paralelizado en dichas etapas).
En realizaciones no reivindicadas, algunos o todos los pasos descritos en la presente memoria se realizan simultáneamente o en un orden diferente que el especificado en los ejemplos descritos en la presente memoria. Aunque los pasos se realizan en un orden particular en algunas realizaciones del método inventivo, algunos pasos se pueden realizar simultáneamente o en un orden diferente en otras realizaciones.
Numerosas modificaciones y variaciones de la presente invención son posibles a la luz de las enseñanzas anteriores. Se ha de entender que, dentro del alcance de las reivindicaciones adjuntas, la invención se puede poner en práctica de otro modo distinto del que se describe específicamente en la presente memoria.

Claims (11)

REIVINDICACIONES
1. Un filtro multietapa (153; 154; 157; 158), que incluye:
una memoria de almacenamiento temporal (10);
M etapas de filtro biquad (Bi), con M > 1 e i que es un índice que oscila de 0 a M-1, incluyendo una primera etapa de filtro biquad (B0) y al menos una etapa de filtro biquad posterior (B1, B2, ... Bm-1),
en donde la primera etapa de filtro biquad (B0) está acoplada a la memoria de almacenamiento temporal (10) y configurada para realizar filtrado bicuadrático en un bloque de N muestras de entrada (x(j)), en donde j es un índice que oscila de 0 hasta N-1, para generar N valores intermedios (x0(j)), y para imponer los valores intermedios a la memoria de almacenador temporal (10), en donde los valores intermedios incluyen versiones filtradas de cada una de las muestras de entrada, y
en donde cada etapa de filtro biquad posterior (B1, B2 , ... Bm-1) está acoplada a la memoria de almacenador temporal (10) y configurada para realizar al menos una operación de filtrado bicuadrático adicional sobre los valores intermedios almacenados temporalmente recuperados de la memoria de almacenador temporal (10), para generar los valores intermedios (x1 (j), x2(j), ..., Xm-1(])), y para imponer los valores intermedios que genera a la memoria de almacenador temporal (10),
en donde los valores filtrados biquad (XM-1(j)) generados en una etapa final de filtro biquad (Bm-1) comprenden un bloque de N valores de datos de salida completamente filtrados (y(j)) generados en respuesta al bloque de valores de datos de entrada (x(j)); el filtro multietapa que se caracteriza por:
un controlador (11), acoplado a las etapas de filtrado biquad (B0, B1, ... Bm-1) y configurado para imponer un único flujo de instrucciones tanto a la primera etapa de filtrado biquad (B0) como a la al menos una etapa de filtro biquad posterior (B1, B2 , ... Bm-1), en donde dicha primera etapa de filtro biquad y dicha al menos una etapa de filtro biquad posterior (B1, B2 , ... Bm-1) se combinan con latencia entre las etapas, de manera que las etapas puedan operar de manera independiente y en paralelo en respuesta al flujo de instrucciones,
en donde dicho filtro multietapa está configurado para, en un único ciclo de procesamiento que itera sobre el índice de muestra j, con M-1 < j < N, realizar, por cada etapa bicuadrática (Bi), con 0 < i < M-1, en paralelo, filtrado bicuadrático de valores intermedios almacenados temporalmente (xn(j-i)) recuperados de la memoria de almacenador temporal (10).
2. El filtro multietapa (153; 154; 157; 158) de la reivindicación 1, en donde la al menos una etapa de filtro biquad posterior está configurada para generar un valor de salida del bloque de los valores de salida correspondientes a cada una de las muestras de entrada en respuesta a un subconjunto diferente de los valores almacenados temporalmente recuperados de la memoria de almacenador temporal (10), de manera que cada dicho subconjunto diferente incluya al menos tres de los valores intermedios generados en la primera etapa de filtro biquad y recuperados de la memoria después de residir en dicha memoria durante diferentes tiempos de latencia dependiendo de cuándo se generen.
3. Un codificador de audio (150) configurado para generar datos de audio codificados en respuesta a datos de audio de entrada, dicho codificador (150) que incluye al menos un filtro multietapa según la reivindicación 1 o la reivindicación 2 acoplado y configurado para filtrar los datos de audio.
4. El codificador (150) de la reivindicación 3, en donde dicho codificador (150) es un procesador que incluye: al menos una única instrucción, unidad de datos múltiples programada para implementar el filtro multietapa, múltiples unidades aritméticas lógicas programadas para implementar las etapas de filtro biquad, o múltiples unidades de manipulación aritmética programadas para implementar las etapas de filtro biquad.
5. Un aparato para procesar un flujo de bits codificados, que comprende:
una entrada acoplada para recibir el flujo de bits codificados; el aparato caracterizado por:
un decodificador (152; 252) acoplado a la entrada, y configurado para extraer, del flujo de bits codificados, datos codificados que representan uno o más canales de información de audio procesados por el filtro multietapa de la reivindicación 1 o la reivindicación 2, y para decodificar los datos codificados para proporcionar representaciones decodificadas del uno o más canales de información de audio procesados por el filtro multietapa.
6. El aparato de la reivindicación 5, en donde:
el filtro multietapa es un filtro bicuadrático de tres etapas para realizar filtrado paso bajo que limita el ancho de banda; o
uno de los uno o más canales es un canal de LFE y el filtro multietapa es un filtro bicuadrático de cuatro etapas para realizar filtrado paso bajo en el canal de LFE.
7. Un método para realizar filtrado multietapa sobre un bloque de N muestras de entrada, dicho método que se caracteriza por:
(a) realizar una primera operación de filtrado bicuadrático mediante una primera etapa de filtro biquad (B0) sobre el bloque de N muestras de entrada (x(j)), en donde j es un índice que oscila de 0 hasta N-1, para generar N valores intermedios (x0(j)), e imponiendo los valores intermedios a una memoria de almacenador temporal (10), en donde los valores intermedios incluyen una versión filtrada de cada una de las muestras de entrada; y (b) realizar al menos una operación de filtrado bicuadrático adicional mediante M-1 etapas de filtro biquad posteriores (B1, B2 , ... Bm-1) sobre valores intermedios almacenados temporalmente recuperados de la memoria de almacenador temporal (10), para generar valores intermedios (x1 (j), x2(j), ..., XM-1(j)) e imponer los valores intermedios a la memoria de almacenador temporal (10);
en donde los valores filtrados biquad (xM-1(j)) generados en una etapa de filtro biquad final (Bm-1) comprenden un bloque de N valores de datos de salida completamente filtrados (y(j)) generados en respuesta al bloque de valores de datos de entrada (x(j)),
en donde los pasos (a) y (b) se realizan en respuesta a un único flujo de instrucciones con latencia entre las etapas, de manera que los pasos (a) y (b) se realizan de manera independiente y en paralelo en respuesta al único flujo de instrucciones,
en donde, en un único ciclo de procesamiento que itera sobre el índice de muestra j, con M-1 < j < N, el filtrado bicuadrático de los valores intermedios almacenados temporalmente (xn(j-i)) recuperados de la memoria de almacenador temporal (10) se realiza por cada etapa bicuadrática (Bi), con 0 < i < M-1, en paralelo.
8. El método de la reivindicación 7, en donde un valor de salida del bloque de valores de salida correspondiente a cada una de las muestras de entrada se genera por la al menos una etapa de filtro biquad posterior en respuesta a un subconjunto diferente de los valores almacenados temporalmente recuperados de la memoria de almacenador temporal (10), de manera que cada subconjunto diferente incluya al menos tres de los valores intermedios generados en la primera etapa de filtro biquad y recuperados de la memoria después de residir en dicha memoria durante diferentes tiempos de latencia dependiendo de cuándo se generen.
9. Un método para codificar datos de audio para generar datos de audio codificados, incluso realizando el método de filtrado multietapa de la reivindicación 7 o la reivindicación 8.
10. Un método para procesar un flujo de bits codificados, que comprende:
recibir el flujo de bits codificados y extraer del mismo, datos codificados que representan uno o más canales de información de audio procesados por un filtro multietapa; el método que se caracteriza por:
decodificar los datos codificados para proporcionar representaciones decodificadas del uno o más canales de información de audio procesados por el filtro multietapa, en donde el filtro multietapa es operativo para realizar un filtrado multietapa según la reivindicación 7 o la reivindicación 8.
11. El método de la reivindicación 10 en donde:
el filtro multietapa es un filtro biquad de tres etapas para realizar filtrado paso bajo que limita el ancho de banda; o
uno de los uno o más canales es un canal de LFE y el filtro multietapa es un filtro biquad de cuatro etapas para realizar filtrado paso bajo sobre el canal de LFE.
ES13722617T 2012-05-10 2013-04-17 Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo Active ES2862999T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201261645291P 2012-05-10 2012-05-10
PCT/US2013/036932 WO2013169450A1 (en) 2012-05-10 2013-04-17 Multistage iir filter and parallelized filtering of data with same

Publications (1)

Publication Number Publication Date
ES2862999T3 true ES2862999T3 (es) 2021-10-08

Family

ID=48430922

Family Applications (1)

Application Number Title Priority Date Filing Date
ES13722617T Active ES2862999T3 (es) 2012-05-10 2013-04-17 Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo

Country Status (22)

Country Link
US (3) US20160254006A1 (es)
EP (1) EP2847860B1 (es)
JP (1) JP5866062B2 (es)
KR (1) KR101707127B1 (es)
CN (1) CN104272593B (es)
AU (1) AU2013260023B2 (es)
BR (1) BR112014027685B1 (es)
CA (1) CA2872262C (es)
DK (1) DK2847860T3 (es)
ES (1) ES2862999T3 (es)
HK (1) HK1208568A1 (es)
HU (1) HUE053514T2 (es)
IL (1) IL235271B (es)
IN (1) IN2014DN09176A (es)
MX (1) MX338857B (es)
MY (1) MY167846A (es)
PL (1) PL2847860T3 (es)
RU (1) RU2599970C2 (es)
SG (1) SG11201407338SA (es)
TW (1) TWI538000B (es)
UA (1) UA112001C2 (es)
WO (1) WO2013169450A1 (es)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
SG11201908276SA (en) * 2017-03-09 2019-10-30 Avnera Corp Real-time acoustic processor
RU2716902C1 (ru) * 2019-07-22 2020-03-17 Федеральное государственное бюджетное образовательное учреждение высшего образования "Омский государственный технический университет" (ОмГТУ) Многокаскадный биквадратный фильтр
US11388670B2 (en) * 2019-09-16 2022-07-12 TriSpace Technologies (OPC) Pvt. Ltd. System and method for optimizing power consumption in voice communications in mobile devices
US11165414B2 (en) 2019-12-20 2021-11-02 Infineon Technologies Ag Reconfigurable filter network with shortened settling time
CN113258902B (zh) * 2021-04-29 2022-02-22 睿思芯科(深圳)技术有限公司 一种处理器、滤波方法及相关设备
CN113741972B (zh) * 2021-08-20 2023-08-25 深圳市风云实业有限公司 一种sm3算法的并行处理方法及电子设备

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63222510A (ja) * 1987-03-12 1988-09-16 Oki Electric Ind Co Ltd 多重信号処理装置
US5632005A (en) 1991-01-08 1997-05-20 Ray Milton Dolby Encoder/decoder for multidimensional sound fields
WO1992012607A1 (en) 1991-01-08 1992-07-23 Dolby Laboratories Licensing Corporation Encoder/decoder for multidimensional sound fields
US5727119A (en) 1995-03-27 1998-03-10 Dolby Laboratories Licensing Corporation Method and apparatus for efficient implementation of single-sideband filter banks providing accurate measures of spectral magnitude and phase
US6175849B1 (en) * 1998-02-10 2001-01-16 Lucent Technologies, Inc. System for digital filtering in a fixed number of clock cycles
US7933341B2 (en) 2000-02-28 2011-04-26 Broadcom Corporation System and method for high speed communications using digital signal processing
US20020049799A1 (en) 2000-10-24 2002-04-25 Minsheng Wang Parallel implementation for digital infinite impulse response filter
US6836839B2 (en) * 2001-03-22 2004-12-28 Quicksilver Technology, Inc. Adaptive integrated circuitry with heterogeneous and reconfigurable matrices of diverse and adaptive computational units having fixed, application specific computational elements
US7290021B2 (en) 2001-04-24 2007-10-30 California Institute Of Technology Method and apparatus for parallel signal processing
WO2003102922A1 (en) * 2002-05-30 2003-12-11 Koninklijke Philips Electronics N.V. Audio coding
CA2389969A1 (en) 2002-06-25 2003-12-25 John W. Bogdan Digital signal processing of multi-sampled phase
US7152084B2 (en) 2002-11-08 2006-12-19 Socovar, S.E.C. Parallelized infinite impulse response (IIR) and integrator filters
US6873280B2 (en) 2003-06-12 2005-03-29 Northrop Grumman Corporation Conversion employing delta-sigma modulation
US7159002B2 (en) * 2003-08-29 2007-01-02 Texas Instruments Incorporated Biquad digital filter operating at maximum efficiency
US7411444B2 (en) 2003-11-13 2008-08-12 Texas Instruments Incorporated Technique for improving antialiasing and adjacent channel interference filtering using cascaded passive IIR filter stages combined with direct sampling and mixing
US7747666B2 (en) 2004-08-09 2010-06-29 L-3 Communications Corporation Parallel filter realization for wideband programmable digital radios
US7421050B2 (en) 2004-10-14 2008-09-02 Agere Systems Inc. Parallel sampled multi-stage decimated digital loop filter for clock/data recovery
US7319580B2 (en) 2005-03-29 2008-01-15 Intel Corporation Collapsing zipper varactor with inter-digit actuation electrodes for tunable filters
US20110113082A1 (en) * 2007-02-07 2011-05-12 Amirhossein Alimohammad Signal filtering and filter design techniques
JP5059508B2 (ja) * 2007-07-26 2012-10-24 ルネサスエレクトロニクス株式会社 マイクロプロセッサ
TW200919521A (en) 2007-10-16 2009-05-01 Inpaq Technology Co Ltd Chip-type feedthrough filter with over-voltage protection function
TWI538394B (zh) 2009-04-10 2016-06-11 杜比實驗室特許公司 利用順逆向濾波方式獲取所欲非零相移之技術
JP5540211B2 (ja) * 2010-04-06 2014-07-02 株式会社コルグ 1ビットオーディオ信号用イコライズ装置
RU2436228C1 (ru) * 2010-04-21 2011-12-10 Андрей Александрович Костоглотов Цифровой интеллектуальный многокаскадный фильтр

Also Published As

Publication number Publication date
MX338857B (es) 2016-05-03
EP2847860B1 (en) 2021-03-03
US20160254006A1 (en) 2016-09-01
SG11201407338SA (en) 2014-12-30
AU2013260023B2 (en) 2015-11-05
EP2847860A1 (en) 2015-03-18
BR112014027685A2 (pt) 2017-06-27
AU2013260023A1 (en) 2014-10-30
CA2872262A1 (en) 2013-11-14
TWI538000B (zh) 2016-06-11
RU2014144746A (ru) 2016-06-10
UA112001C2 (uk) 2016-07-11
RU2599970C2 (ru) 2016-10-20
MY167846A (en) 2018-09-26
US9324335B2 (en) 2016-04-26
PL2847860T3 (pl) 2021-07-05
US9076449B2 (en) 2015-07-07
KR20140139601A (ko) 2014-12-05
JP2015520974A (ja) 2015-07-23
CN104272593B (zh) 2017-02-08
IN2014DN09176A (es) 2015-07-10
US20150310872A1 (en) 2015-10-29
JP5866062B2 (ja) 2016-02-17
BR112014027685B1 (pt) 2021-10-05
MX2014013481A (es) 2015-05-07
TW201411673A (zh) 2014-03-16
IL235271A0 (en) 2014-12-31
HK1208568A1 (en) 2016-03-04
IL235271B (en) 2019-12-31
DK2847860T3 (da) 2021-03-29
CN104272593A (zh) 2015-01-07
US20140046673A1 (en) 2014-02-13
WO2013169450A1 (en) 2013-11-14
KR101707127B1 (ko) 2017-02-15
CA2872262C (en) 2017-01-03
HUE053514T2 (hu) 2021-07-28

Similar Documents

Publication Publication Date Title
ES2862999T3 (es) Filtro de IIR multietapa y filtrado paralelizado de datos con el mismo
US20090055005A1 (en) Audio Processor
US7792668B2 (en) Slot position coding for non-guided spatial audio coding
ES2727131T3 (es) Decodificador con filtros configurables
RU2711055C2 (ru) Устройство и способ для кодирования или декодирования многоканального сигнала
JP5800915B2 (ja) オーディオ信号のトラックのパルス位置の符号化および復号化
ATE395686T1 (de) Mehrkanal-codierer
UA74323C2 (uk) Пристрій (варіанти) та спосіб (варіанти) кодування цифрового інформаційного сигналу та носій запису
US8200730B2 (en) Computing circuits and method for running an MPEG-2 AAC or MPEG-4 AAC audio decoding algorithm on programmable processors
CN112994703A (zh) 硬件友好的数据解压缩
US9812140B2 (en) Method and apparatus for quadrature mirror filtering
Indumathi et al. Architectural design of 32 bit polar encoder
US20130042091A1 (en) BIT Splitting Instruction
JP2003316568A (ja) 乱数生成装置、乱数生成方法、乱数生成プログラムおよびオーディオ復号装置と復号方法
Chen et al. A fully pipelined cabac coder using syntax element instructions driving
CN117917857A (zh) 非迭代熵编码
TW202418807A (zh) 非疊代的熵編碼
WO2024136641A1 (en) A digital signal processor for streaming audio applications
JP2002287798A (ja) オーディオ復号装置、及びオーディオ復号方法
JP2006119265A (ja) オーバーサンプリングシステム、デコードlsi、およびオーバーサンプリング方法