Sei sulla pagina 1di 4

Laboratorio de Procesado Digital de Seal (Curso 2005/2006)

PRCTICA 5 Filtros FIR


A. Entorno MATLAB
1. Pretendemos aproximar un filtro paso bajo ideal de frecuencia de corte c=/3 mediante el mtodo de ventanas. Sabemos que la respuesta impulsiva de fase lineal de este filtro viene dada por:
M sin c n 2 h[n ] = M n 2

La siguiente funcin de MATLAB (.m) devuelve en un vector (h) la respuesta impulsiva buscada, pasndole como argumento el nmero de puntos (M+1) y la frecuencia de corte (c): function h = calcula_h(wc,NP) h=zeros(NP,1); M=NP-1; for k=0:M if k==M/2

% Evita la divisin por cero en k=M/2, % lo que sucede si M es par h(k+1)=wc/pi; else h(k+1)=(sin(wc*(k-M/2))/(pi*(k-M/2))); end

end Obtenga en tres vectores diferentes h10, h25, h100 de 10, 25 y 100 puntos respectivamente tres aproximaciones diferentes al mismo filtro ideal descrito ms arriba. 2. Visualice y compare dichas respuestas impulsivas haciendo uso de la funcin stem. 3. Haciendo uso de la funcin fvtool (fvtool(h10), etc.), compare la respuesta en frecuencia obtenida en cada caso. Compruebe que en los tres casos, en la frecuencia de corte la amplitud ha cado 3 dB (1/2 en valores absolutos). Cmo influye el nmero de puntos de la respuesta impulsiva en la aproximacin a la respuesta deseada? 4. Por estar usando ventanas de duracin finita, estamos usando ventana rectangular. Veamos ahora el efecto de multiplicar el vector h25 anterior por ventanas de diferente tipo (Hamming, Hanning, Kaiser, etc). Para ello, calcula el vector de 25 puntos con la forma de cada ventana (teclee help window para ver cmo), y recuerde multiplicarla por h25 elemento a elemento haciendo uso de .*. Ejemplo: >> h25_hamming = h25.*window(@hamming,25);

Dpto. Ingeniera Audiovisual y Comunicaciones, EUITT-UPM.

- P5.1 -

Laboratorio de Procesado Digital de Seal (Curso 2005/2006)

5. Para visualizar este proceso, represntalo grficamente (maximiza la ventana para verlo mejor). Ejemplo: >> subplot(311),stem(h25); >> subplot(312),stem(window(@hamming,25)); >> subplot(313),stem(h25_hamming) 6. Compare ahora, para el mismo nmero de puntos de la ventana (por ejemplo, 25), la respuesta en frecuencia obtenida con los diferentes tipos de ventana haciendo uso nuevamente de la herramienta fvtool. 7. Vamos a filtrar dos seales diferentes de audio. Para ello cargue con wavread la seal v1.wav (fs = 8kHz) en el vector x1 y la seal guitar_mono.wav (fs = 16 kHz) en x2. 8. Para comprobar el efecto de los distintos filtros, puede hacer uso de la funcin filter pasndole como vector b las diferentes respuestas que acabas de calcular, a=1 (por ser FIR), y como seal x las anteriores x1 y x2. Haciendo uso del mismo filtro (el que quieras), filtre y escuche las dos. Es igual la frecuencia de corte del filtro a pesar de que el filtro es el mismo? Por qu?

Dpto. Ingeniera Audiovisual y Comunicaciones, EUITT-UPM.

- P5.2 -

Laboratorio de Procesado Digital de Seal (Curso 2005/2006)

B. Entorno Tarjeta EZ-KIT Lite


En esta segunda parte de la prctica vamos a implementar un filtro FIR en la tarjeta EZ-KIT Lite ADSP-2181, para ver su funcionamiento en tiempo real. Utilizamos como cdigo base el mismo que en las prcticas anteriores, es decir, el algoritmo THRU.DSP. Se deben realizar todas las modificaciones necesarias para convertirlo en un filtro FIR. Un filtrado FIR, implementado segn una estructura transversal, utiliza dos buffers (arrays) de registros de memoria. En uno de ellos se almacenan los M+1 datos de entrada (zona de memoria de datos -DM-) y en el otro los M+1 coeficientes del filtro (zona de memoria de programa -PM). Con estos dos arrays se implementa una convolucin lineal (filtrado FIR), segn la expresin:
M

y ( n) = h( k ) * x ( n k )
k =0

Como ya se explic en una prctica anterior, para acceder a los datos de un buffer (buffer circular) se necesitan tres registros (de los 8 juegos posibles): un registro puntero (I), un registro modificador (M) que incrementa el puntero y un registro que define la longitud del buffer (L). En nuestro caso, vamos a utilizar los registros i2, m2 y l2 para acceder a los datos del buffer de entrada y los registros i4, m4 y l4 para acceder a los coeficientes del filtro. Por tanto, antes de implementar propiamente el algoritmo es necesario inicializar los parmetros de estos dos buffers (despus de la macro begin.dsp y antes de las instrucciones wait: idle; jump wait;). El buffer de coeficientes del filtro FIR se carga a travs de un fichero de texto donde estn los valores de los mismos (por ejemplo: \Mi PC\Documentos compartidos\Laboratorio PDS-TDS\ Ficheros de la tarjeta EZ-Kit Lite\FIR.HEX). En este caso concreto, el fichero contiene 206 coeficientes de un filtro paso bajo (formato hexadecimal). El resto del cdigo, suficientemente explicado, se muestra a continuacin. Implemntelo y pruebe su funcionamiento con una seal de ruido blanco generada con el editor de audio Cool Edit Pro y con una seal musical de audio (una de las usadas en prcticas anteriores).

Dpto. Ingeniera Audiovisual y Comunicaciones, EUITT-UPM.

- P5.3 -

Laboratorio de Procesado Digital de Seal (Curso 2005/2006)

Dpto. Ingeniera Audiovisual y Comunicaciones, EUITT-UPM.

- P5.4 -

Potrebbero piacerti anche