to get the file

Anuncio
Laboratorio de Procesado Digital de Señal (Curso 2005/2006)
PRÁCTICA 5
Filtros FIR
A. Entorno MATLAB
1. Pretendemos aproximar un filtro paso bajo ideal de frecuencia de corte ωc=π/3 mediante el
método 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 función de MATLAB (.m) devuelve en un vector (h) la respuesta impulsiva
buscada, pasándole como argumento el número 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 división 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 más arriba.
2. Visualice y compare dichas respuestas impulsivas haciendo uso de la función stem.
3. Haciendo uso de la función 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 caído 3 dB (1/2 en valores absolutos). ¿Cómo influye el número de puntos de
la respuesta impulsiva en la aproximación a la respuesta deseada?
4. Por estar usando ventanas de duración 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 cómo), y recuerde multiplicarla por h25
elemento a elemento haciendo uso de “.*”.
Ejemplo:
>> h25_hamming = h25.*window(@hamming,25);
Dpto. Ingeniería Audiovisual y Comunicaciones, EUITT-UPM.
- P5.1 -
Laboratorio de Procesado Digital de Señal (Curso 2005/2006)
5. Para visualizar este proceso, represéntalo gráficamente (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 número 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 señales diferentes de audio. Para ello cargue con wavread la señal
v1.wav (fs = 8kHz) en el vector x1 y la señal guitar_mono.wav (fs = 16 kHz) en x2.
8. Para comprobar el efecto de los distintos filtros, puede hacer uso de la función filter
pasándole como vector “b” las diferentes respuestas que acabas de calcular, a=1 (por ser
FIR), y como señal 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. Ingeniería Audiovisual y Comunicaciones, EUITT-UPM.
- P5.2 -
Laboratorio de Procesado Digital de Señal (Curso 2005/2006)
B. Entorno Tarjeta EZ-KIT Lite
En esta segunda parte de la práctica vamos a implementar un filtro FIR en la tarjeta EZ-KIT Lite
ADSP-2181, para ver su funcionamiento en tiempo real.
Utilizamos como código base el mismo que en las prácticas anteriores, es decir, el algoritmo
THRU.DSP. Se deben realizar todas las modificaciones necesarias para convertirlo en un filtro
FIR.
Un filtrado FIR, implementado según 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 convolución lineal (filtrado FIR), según la expresión:
M
y ( n) = ∑ h( k ) * x ( n − k )
k =0
Como ya se explicó en una práctica 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 parámetros de estos dos
buffers (después de la macro begin.dsp y antes de las instrucciones wait: idle; jump
wait;).
El buffer de coeficientes del filtro FIR se carga a través de un fichero de texto donde están 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 código, suficientemente explicado, se muestra a continuación. Impleméntelo y
pruebe su funcionamiento con una señal de ruido blanco generada con el editor de audio Cool
Edit Pro y con una señal musical de audio (una de las usadas en prácticas anteriores).
Dpto. Ingeniería Audiovisual y Comunicaciones, EUITT-UPM.
- P5.3 -
Laboratorio de Procesado Digital de Señal (Curso 2005/2006)
Dpto. Ingeniería Audiovisual y Comunicaciones, EUITT-UPM.
- P5.4 -
Descargar