Proyecto DSPRT
Transcripción
Proyecto DSPRT
Proyecto DSPRT DSPRT . Año 2011 César Angel Fuoco I Índice Objetivo………………….………………………………….....3 Introducción……………..……………………………….....3 Librerías ……………….……….….….………………….....3 Como funciona iirdf1_fr16_v2……..………….....6 Como funciona equ_mix………………….…...….…10 Estimación de tiempos ….....……...………......12 Simulaciones…….……………………….....……….....13 Mediciones…………..……….……………...…………...15 Conclusiones……………….……………………………....17 Bibliografía…………………….…………………………....17 II Objetivo Implementar un Ecualizador gráfico digital de audio de alta fidelidad, 8 bandas con la familia de DSP Blackfin de punto fijo. Introducción Un Ecualizador grafico esta compuesto por N filtros pasabanda en paralelo modificados por una ganancia variable por el operador y luego sumadas. Fig. 1 Diagrama en bloques de un Ecualizador Gráfico Para diseñar el diagrama de la figura 1 se implementaran 2 algoritmos optimizados: • Un algoritmo que implementara un filtro pasabanda IIR de alto orden , basado en una publicación.[4] • Un algoritmo para realizar la sumatoria de cada banda en forma óptima. Librerías El BF537 cuenta con 2 librerías para implementar filtros IIR: la iir_fr16 ( direct form I ) y la iirdf1_fr16 ( direct form II ) . El objetivo es analizar a fondo cada una de ellas, simularlas y comparar resultados con Matlab. Finalmente crearemos la librería de iirdf1_fr16_v2 y verificaremos su correcto funcionamiento, ya que la publicación solo comparte el loop interno. A continuación veremos el funcionamiento general de cada una de las librerías: Iir_fr16 La función del filtro tiene el siguiente prototipo: void iir_fr16(const fract16 x[], fract16 y[], int Ni, iir_state_fr16 *s); Esta librería resuelve un numero par o impar de secciones bicuadraticas ( NUM_STAGES ) en cascada. Los coeficientes se deben ordenar de la siguiente manera: III a2,a1,b2,b1,b0,…..a2n,a1n,b2n,b1n,b0n........ . Fig. 3 IIR Direct form II La librería informa la cantidad de ciclos que consume el algoritmo: Cycle count: Execution time for Number of Samples= Ni and Number of biquad stages = B For odd number (No) of input samples : Initialization : 39 + 4 + 9 = 52 Kernel Cycle Count : 3*(No-1)*B + 1.5*(No-1) + 5*B + 3 For even number (Ne) of input samples : Initialization : 40 + 18 = 58 Kernel Cycle Count : 3*Ne*B + 1.5*Ne Iirdf1_fr16 La función del filtro tiene el siguiente prototipo: iirdf1_fr16(const fract16 x[], fract16 y[], int n,iirdf1_state_fr16 *s); ) Esta librería no resuelve en secciones bicuadráticas, sino que resuelve la transferencia como una ecuación en diferencias a continuación podemos ver el diagrama en bloques: Fig.4 IIR Direct form I Esta librería lee de a 1 muestra por vez. Los coeficientes se ordenan de la siguiente manera: IV b0, a1, b1, a2, b2, Scaling Factor (0 if no scaling) La librería informa la cantidad de ciclos que consume el algoritmo: Cycle count: 43 + N * (2*B + 16) (BF532, Cycle Achúrate Simulator) Nota: La libreria considera unitarias las ganancias de salida de cada sos. iirdf1_fr16_v2 ( basada en la publicación ) La función del filtro tiene el siguiente prototipo: void iirdf1_fr16_v2(const fract16 x[], fract16 y[], int Ni, iir_state_fr16 *s); Esta librería resuelve un numero par de secciones bicuadraticas en cascada y lee de a 2 muestras por loop interno. Los coeficientes se deben ordenar de la siguiente manera: b1 b2 -a2 b0 -a1, ..... b1n b2n -a2n b0n -a1n Fig. 5 IIR Direct form I - versión 2 Comparación del consumo de las librerías: A continuación se compara el consumo con la herramienta Pipeline Viewer del Visual DSP: Librería Iir_fr16 Iirdf1_fr16 Iirdf1_fr16_v2 • • • Numero de SOS 2 1 2 muestras 480 480 480 Counts Teorico 3658 8683 X Counts Simulado 3673 8191 5552 La diferencia entre el Count Teorico y el Count Simulado puede adjudicarse a que Analog Device informa una ecuación aproximada del consumo medida en un simulador distinto al Pipeline Viewer. El Count Teórico de la iirdf1_fr16_v2 no lo informa la publicación. Comparando la iirdf1_fr16 con la nueva iirdf1_fr16_v2 podemos decir lo siguiente: Como la iirdf1_fr16_v2 resuelve como mínimo 2 SOS, diremos que tiene una performance aproximada de 5552/2 = 2776 ciclos por cada SOS. Lo que significa que es 3 veces más rápida que la iirdf1_fr16. • En ninguna de las 3 librerías se produce un stall del Pipeline dentro del algoritmo. Otra observación a tener en cuenta es que las librerías no incluyen ganancias intermedias entre secciones bicuadráticas, lo cual condiciona el diseño del filtro y sus coeficientes. ( Requiere un escalamiento y reordenamiento intensivo de cada SOS ) V Como funciona iirdf1_fr16_v2 • Pasaje en paralelo de 2 muestras por vuelta. • Utiliza S2RND: Esto genera un shifteo adicional y de asi tenemos un modo de escalamiento especial sin necesidad de enviar un scaling factor a la librería y sin necesidad de hacer shifteos adicionales dentro del algoritmo. Ejemplo: Sin hacer segundo redondeo: Haciendo segundo redondeo: • Loop interno optimizado de la iirdf1_fr16_v2. A continuación se explica como resuelve cada subproducto de la transferencia del IIR: Código de inicialización: Código para las secciones bicuadráticas impares: 1,3,5 … ( la primer sección es la “1” ) VI Código para las secciones bicuadráticas pares: 2,4,6,.. Las siguientes tablas son las que figuran en la publicación. Para poder analizar a fondo se propone reescribirlas en otros términos con el fin de entender más fácilmente el algoritmo, analizando puntualmente el caso de 2 secciones bicuadráticas. • • • • Los coeficientes se colorean con azul Las muestras se colorean con rojo Las líneas de demora se colorean con amarillo Se indica con un circulo a que sección pertenece el coeficiente/línea de demora Por cada paso del algoritmo vamos a ver el contenido de los registros al finalizar la ejecución del mismo. Por ultimo agregamos al costado como quedan apuntado los punteros Index. Step0: Step1: VII Step2: En el paso 3 se termina de procesar la primer SOS y se trunca la muestra de salida desde el acumulador, pero antes de continuar vamos a mencionar que dada la estructura de la direct form I, las lineas de demora de salida y entrada entre secciones tienen el mismo contenido en memoria por lo cual hay que considerarlas equivalentes: Step3: Step4: VIII Step5: Step6: Step7: Step8: Step9: IX Step10: Como funciona equ_mix Obtenidos los resultados de cada filtro pasabanda, este algoritmo va a realizar la multiplicación de los vectores Intermedios de cada canal por la ganancia correspondiente y los sumara y acumulara para obtener un único vector de salida. • • • • • Usa la DUAL MAC para optimizar y sumar de a 32bits. ( 2 muestras ) El Loop interno barre los bloques intermedios El Loop externo barre a las muestras dentro de cada bloque P2 es el numero de bandas sumar P1 el tamaño de bloque de muestras dividido 2. X Fig. 6 Diagrama en bloques equ_mix Nota: equ_mix mezcla un solo canal ( Left o Right) por lo tanto para un Equ estereo deberá llamarse 2 veces. El consumo es de [5+N] x (Bloque/2) XI Estimación de tiempos y numero de bandas A mayor numero de bandas mayor costo computacional tendremos. A continuación haremos un análisis basándonos en la teoría del procesamiento en bloques: Fig. 7 Procesamiento en bloques A priori vamos a despreciando el tiempo de overhead ( Tob ), el limite para procesar lo impone fundamentalmente el tiempo del procesamiento del bloque Tbp: Tbp ≤ N .Ts Teniendo presente el diagrama en bloques del ecualizador, la ecuación que estima el consumo total para N bandas , estereo ( x2 ) es: Tbp = [( IIR × Nband ) + (equ _ mix)] × 2 × Ti (1) Donde: - IIR es el consumo en ciclos del filtro pasabanda.( Depende del orden del filtro ) - Nband es el numero de bandas. - equ_mix es el consumo total de la sumatoria de las N bandas mono. - El x 2 es Stereo. - Ti es el tiempo que demora un ciclo de instrucción. El Clock puede llegar como máximo a 600 MHz ( Tclock = 1.6nseg) - Ts es 1/48000 Hz = 20useg Para poder estimar la potencia de nuestro algoritmo vamos a calcular el Numero de Bandas máximo que podríamos diseñar, suponiendo un Tbp del 90% del N.Ts ( dejamos un 10% de tiempo de procesamiento para otras tareas ) y un Ti de 3nseg. ( para no exigir al micro ). Tbp = 0.9 × N × Tsampling = 0.9 × 480 × 20µseg = 8.64mseg Luego, el consumo del IIR lo diseñaremos de orden 4 ( 2 sos=5552 ciclos ) en cascada con una transferencia adicional de orden 4 que realice otro procesamiento extra : IIR = (5552 + 5552) = 11104 Recordando el consumo de equmix lo incluimos en la ecuación, equmix = [ (5+N) x (Bloque/2) ] = [5+N]x240 Finalmente despejamos de (1) el número de bandas máximo: 8.64mseg = [(11104 × Nband ) + (5 + Nband )x240 ] × 2 × 3nseg XII Nband = 126 Cabe aclarar que esta ecuación esta fuertemente dominada por el tamaño de bloque y el Tiempo de instrucción. Simulaciones Para testear las 3 librerías se diseña el filtro digital con el FDATOOL: Orden 2 - Second Order Sections ( SOS ) Respuesta: Pasabajos Topologia: Butterworth Fs:48000 Hz Fpass:1000 Hz Fstop:10000 Hz Fig. 8 Vista de un objeto filtro con el fvtool El objetivo es filtrar una poliarmónica con componentes de 500 y 20000 Hz, el resultado esperado luego de filtrar es recuperar solamente la componente de 500 Hz. Los filtros IIR de alto orden diseñados en secciones bicuadráticas poseen por lo general sus coeficientes en el intervalo [ -2 , 2 ] es por esto que vamos a cuantificar en Q.14 Como vamos a diseñar el ecualizador con filtros IIR direct form I , procedemos a testear el funcionamiento de las librerías A continuación se comparan las librerías: XIII 1)iirdf1_fr16 Coeficientes: b0=0x0275,b1=0x04EB, b2=0x0275,-a1=0x55D2,-a2=0xDF62, Scaling factor=1 (*) (*) Esta librería implementa un escalamiento dentro del loop. Esto permite que la librería soporte cualquier numero de coeficientes ( Q15, Q14, Q13 etc ). Resultados: Fig. 9 Ploteos de la señal de entrada y salida en VDSP Fig. 10 Ploteos de las señal de entrada y salida en MATLAB XIV Fig. 11 Error cuadrático medio de los vectores de salida MSE Matlab Vs DSP: 8.412947e-008 2)iirdf1_fr16_v2 Para poder comparar el mismo filtro, como la versión 2 resuelve como mínimo 2 SOS, se diseña una segunda etapa seguidora: Coeficientes: SOS Numero 1: b0=0x0275,b1=0x04EB,b2=0x0275,-a1=0x55D2,-a2=0xDF62 SOS Numero 2: b0=0x4000 ( x1 en Q14, es decir que la señal sigue ),b1=b2=-a1=-a2=0x0000 Efectivamente, el resultado es el mismo: MSE Matlab Vs DSP: 8.412947e-008 Nota: El error no llega a ser nulo ya que se utilizo como “goal Standard” en Matlab la funcion filter, que implementa un iir df2 transposed. Mediciones Con la librería iirdf1_fr16_v2 funcionando y equ_mix se realiza a continuación la medición una sola banda, con un filtro de orden 8 con frecuencia central en 16000Hz XV Fig. 12 IIR Pasabanda orden 8 - Fc:16KHz. Se excita el Ecualizador con un tono puro y se mide la entrada y salida y su FFT. Para poder ver la respuesta en frecuencia se excita con ruido de banda angosta BW:30 KHz. Los resultados se muestran a continuación: Fig. 13 Entrada en Ch2. VS Salida en Ch.1 Fig. 14 FFT de la señal de salida. XVI Fig. 15 Respuesta del filtro Conclusiones • El diseño de un filtro IIR es muchísimo mas complejo que un FIR, y se presentan problemas como underflow y oscilaciones que son medibles en el osciloscopio. • Para entender y simular la librería iirdf1_fr16_v2 que propone la publicación se puso en práctica todo lo aprendido en la cursada y se obtuvieron muy buenos resultados. • Dada la estructura paralela del Equ, se puede diseñar N bandas, y cambiar la topología del filtro con solo agregar algunas líneas. El diseño analógico de estos equipos es sumamente complejo y los tamaños de las consolas y ecualizadores analógicos son muy grandes. • Los filtros IIR a medida que aumenta el orden, pierden SNR, y en muchos casos se vuelven inestables, y llegan a oscilar. En esta condición de alto orden y muchas SOS en cascada, trabajar con muestras de 16 bits cuantificadas en Q14 es una limitación a tener en cuenta. • El escalamiento final que realiza equ_mix, es básicamente un atenuador, que dependiendo el ecualizador es de +-6dB , +-12dB o +-24dB. Se podria pensar en tener este rango dinámico fuera del DSP con atenuadores digitales, ya que dentro del algoritmo, se producen en algunas condiciones underflow y esto es indeseable. • Se encontraron muchas dificultades con la respuesta de fase de los IIR de alto orden. Los Ecualizadores Graficos deben tener pasabandas de fase lineal, es decir retardo de grupo constante para todas las frecuencias, es por esto que el diseño de filtros FIR es aconsejable. Para poder resolver el problema de la fase de los IIR se propuso una transferencia “pasa todo” que impone a la salida un retardo de grupo casi constante solamente en la banda de paso de los filtros pasabanda. Los resultados obtenidos fueron muy buenos. XVII Bibliografía Libros: [1] Walt Kester “Analog-Digital Conversion”, U.S.A. (2004) (1997). [2] Lyons, R. “Understanding Digital Signal Processing”, 3rdedition (2011) [3] Gan & Kuo “ Embedded Signal Processing with the Micro Signal Architecture (2007) Papers: [4] Miloš Drutarovský “ An Implementation of High Performance IIR Filtration on 2-MAC Blackfin DSP Architecture” (2005) [5] Wei Chen “Cascade and parallel iir filters ” (1996) [6] John Dattorro “The Implementation of recursive digital filters for high fidelity audio ” (1988) Presentaciones: [7] Procesamiento Digital de Señales en Tiempo Real - UTN FRBA (2012) XVIII