Laboratorio de Procesamiento Digital de Voz Practica 2. FILTROS DIGITALES Objetivos: Conocer la forma realizar un filtrado digital con las ayuda de las funciones de Matlab. Entender el uso de la Transformada de Fourier en Tiempo Corto (STFT) y los principales tipos de ventanas. Filtros Digitales Los filtros son una clase particularmente importante de Sistemas Lineales Invariantes en el Tiempo (SLIT, fig. 1). Estrictamente hablando, el término filtro selectivo de frecuencia sugiere un sistema que permite el paso de ciertos componentes frecuenciales y rechaza todos los demás. Pero en un contexto amplio cualquier sistema que modifica ciertas frecuencias relativas a otras es también llamado filtro. s[n] h[n] y[n] SLIT S[z] H[z] Y[n] Figura 1. Sistema Lineal invariante en el tiempo Los filtros digitales se dividen principalmente en dos tipos: los filtros con respuesta al impulso infinita (IIR) y los filtros con respuesta al impulso finita (FIR). Filtros IIR Los filtros IIR pueden obtenerse fácilmente comenzando con un filtro analógico y que después se adapta usando una transformación del plano-s al plano-z. De tal forma que el diseño de un filtro digital se reduce al diseño de un filtro analógico apropiado y después efectuar la transformación de H(s) a H[z], con esto se preserva lo más posible las características deseadas. Existen varios métodos para el diseño de filtros digitales IIR, como por ejemplo: las aproximaciones Butterworth, Chevyshev, Elliptic, Bessel, etc. Una de las ventajas que presentan los filtros IIR es que el orden del filtro es mucho menor que los filtros FIR, sin embargo estos filtros pueden ser inestables. La función de transferencia general de un filtro IIR tiene la forma de: M "1 !b z "k !a "k k H [ z] = k =0 N "1 k z (1) k =0 donde ak y bk son los coeficientes del filtro Funciones en Matlab Para obtener los coeficientes de un filtro IIR de tipo Butterworth analógico y digital se utiliza la función butter de la siguiente forma. [b,a] = butter(n,Wn) [b,a] = butter(n,Wn,'ftype') [z,p,k] = butter(...) [b,a] son los coeficientes del filtro de la siguiente función de transferencia del filtro. [z,p,k] son los polos, ceros y la constante de ganancia. !1 !n B(z ) b(1)+ b(2 )z + " " " + b(n + 1)z H (z ) = = A(z ) 1 + a(2 )z !1 + " " " + a(n + 1)z !n donde n es el orden del filtro, Wn es la Frecuencia normalizada con respecto a la frecuencia de Nyquist y su valor varia de 0 < Wn < 1; 'ftype' especifica el tipo de filtro, esto es: 'high' pasa altas con frecuencia de corte Wn; 'stop' paso banda Wn = [w1 w2] por defecto es especificado como un filtro paso bajas. Filtros FIR El diseño de filtros FIR requiere de una selección de la secuencia que mejor representa la respuesta al impulso de un filtro ideal. Estos tipos de filtros son siempre estables y son capaces de tener una respuesta de fase lineal. El mayor problema de los filtros FIR es que para ciertas especificaciones dadas, se requiere un filtro de orden mucho mayor que los filtros IIR. Un filtro FIR de longitud M con entrada x[n] y salida y[n] se describe mediante la ecuación en diferencias: y[n] = b0 x[n] + b1 x[n " 1] + ... + bM "1 x[n " M + 1] = M "1 ! b x[n " k ] k (2) k =0 donde bk son los coeficientes del filtro Funciones en Matlab Matlab tiene varias funciones para el diseño de filtros FIR, una de estas funciones es: fir1 que puede tener los siguientes parámetros: b = fir1(n,Wn) b = fir1(n,Wn,'ftype') b = fir1(n,Wn,window) b = fir1(n,Wn,'ftype',window) donde b es un vector con los coeficientes del filtro, n es el orden del filtro, Wn es la frecuencia de corte normalizada con respecto a al frecuencia de Nyquist y varia de 0 < Wn < 1; 'ftype' especifica el tipo de filtro, esto es: 'high' pasa altas con frecuencia de corte Wn; 'stop' paso banda Wn = [w1 w2], por defaul se especifica como como un filtro tipo paso bajas. window Especifica el tipo de ventana a utilizar en el diseño. Por defecto utiliza ventana Hamming. Ventanas En todas las aplicaciones prácticas de procesamiento digital de señales, es necesario trabajar con partes de la señal (tramas), a menos que la señal sea de corta duración. Esto es especialmente verdadero si trabajamos con técnicas de análisis convencionales con dinámica no estacionaria (tales como la voz). En este caso es necesario seleccionar una parte de la señal que pueda ser razonablemente estacionaria. Llamaremos a una ventana w[n] (en el dominio del tiempo discreto), es una secuencia real de tamaño finito usada para seleccionar una deseada trama de la señal original, digamos s[n], por un proceso simple de multiplicación. Algunas de las ventanas más comunes son: la ventana Rectangular, de Hamming, de Hanning, Blackman, Kaiser, etc. La figura 2 muestra tres tipos de ventanas en el dominio del tiempo. Figura 2. Ventana de Hanning, Hamming y Kaiser en el dominio del tiempo Funciones en Matlab Matlab tiene las siguientes funciones para obtener los puntos correspondientes a una ventana específica. win = hamming(N) win = hann(N) win = blackman(N) win = kaiser(N, β) donde win es un vector con los valores de la ventana. N es el número de puntos de la ventana. Por ejemplo: la siguiente sentencia, obtiene la ventana de hamming de 128 puntos >>win = hamming(128), En el caso de la ventana tipo kaiser, tiene un parámetro extra, β, que establece lo ancho o delgado de campana. Por ejemplo, para el valor de β=0, la ventana es de tipo rectangular; para valores de β > 0 forma una especie de campana muy parecida a la de una gaussiana delimitada. Desarrollo 1. Diseñar un filtro FIR de orden 48 paso bajas con banda de corte normalizada 0.35 utilizando la función de Matlab fir1. 2. Graficar la respuesta en frecuencia utilizando la función de Matlab freqz(b,1,512) donde b son los coeficientes del filtro regresados por fir1. 3. Diseñar un filtro IIR Butterworth de orden 9, paso bajas con frecuencia de corte 1000 Hz y frecuencia de muestreo fs = 8000 Hz. 4. Graficar la respuesta en frecuencia utilizando la función de Matlab freqz(b,a,128,fs) donde b, a son los coeficientes del filtro regresados por butter y fs es la frecuencia de muestreo 5. Obtenga la graficas de los distintos tipos de ventanas existentes en Matlab de 128 puntos (en el caso de la Kaiser utilice, β = 1, 4 y 9) 6. Con los filtros previamente diseñados, filtre dos archivos de voz, con la función de Matlab filter (vea la ayuda en línea) 7. Grafique el espectrograma de las señales resultantes del punto 6 y compárelas con las señales originales. 8. Utilice un archivo de voz y aplique un filtro de pre-énfasis con parámetro a = 0.95. Observe la señal resultante, en el espectrograma. Recuerde que para un filtro pre-énfasis se tiene que: H (z ) = 1 ! ãz !1 , 0.9 ! a ! 1.0 s(n ) = s (n )! ãs (n ! 1) Bibliografía “Digital Signal Processing Principles, Algorithms, and Applications“, John G. Proakis, Dimitris G. Manolakis, Ed. Prentice Hall, 1996 “Discrete–Time Processing of Speech Signals”, John R. Deller Jr, John G. Proakis, John H. L. Hansen, Ed. Prentice Hall 1987 “Fundamentals of Speech Recognition”, Lawrence Rabiner, Biing Hwang Juang, Ed. Prentice Hall, 1993 http://voltio.ujaen.es/te/enlinea/tts/portal.htm, 2003