Laboratorio de Procesamiento Digital de Voz

Anuncio
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
Descargar