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

Documentos relacionados