Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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);
- P5.1 -
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?
- P5.2 -
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).
- P5.3 -
- P5.4 -