Está en la página 1de 22

UNIVERSIDAD VERACRUZANA

FACULTAD DE INGENIERIA ZONA VERACRUZ

EXAMEN ORDINARIO
FILTRADO DE UNA SEAL DE VOZ CON RUIDO MEDIANTE MATLAB

EXPERIENCIA EDUCATIVA PROCESAMIENTO DIGITAL DE SEALES

CATEDRTICO DR. ALEXANDRO CASTELLANO MIER

PRESENTA: OSORIO CAPISTRAN JUAN CARLOS

FECHA DE ENTREGA: 2 DE DICIEMBRE DE 2013

Objetivo:
Utilizando Matlab generar dos filtros FIR y dos filtros IIR para el procesamiento de una seal de VOZ la cual deber presentar ruido. Calcular y graficar su respuesta en magnitud y fase.

1.1 Introduccin:
Un filtro digital es una operacin matemtica que toma una secuencia de nmeros (la seal de entrada) y la modifica produciendo otra secuencia de nmeros (la seal de salida) con el objetivo de resaltar o atenuar ciertas caractersticas.

Aplicaciones:

Separacin de seales que fueron combinadas indeseadamente (ruido, interferencias provenientes de otros sistemas, etc.) Recuperacin de seales distorsionadas de alguna forma (por ejemplo, al ser trasmitidas)

Sntesis de sonido: creacin o modificacin de seales para moldear espectros o formas de onda y lograr el efecto auditivo buscado. Efectos de audio: chorus, flanger, phaser, reverb.

1.2

Terminologa y Clasificacin

I.

El trmino filtro digital lo entenderemos como cualquier pro-cesamiento realizado en una seal de entrada digital.

II.

Un filtro digital es la implementacin en hardware o software de una ecuacin diferencia.

III.

Ventajas de los filtros digitales: Alta inmunidad al ruido Alta precisin (limitada por los errores de redondeo en la aritmtica empleada ) Fcil modificacin de las caractersticas del filtro Muy bajo coste (y bajando)

Por estas razones, los filtros digitales estn reemplazando rpidamente a los filtros analgicos.

1.2.1 Clasificacin de los Filtros Digitales 1.2.2 Filtros FIR (Finite Impulse Response)
Un filtro FIR de orden M se describe por la siguiente ecuacin diferencia:

[ ]

[ ]

Lo que da lugar a la funcin de transferencia:

( )
La secuencia {BK} son los coeficientes del filtro. No hay recursin, es decir, la salida depende slo de la entrada y no de valores pasados de la salida. La respuesta es por tanto una suma ponderada de valores pasados y presentes de la entrada. De ah que se denomine Media en Movimiento (Moving Average) La funcin de Transferencia tiene un denominador constante y slo tiene ceros. La respuesta es de duracin finita ya que si la entrada se mantiene en cero durante M periodos consecutivos, la salida ser tambin cero.

1.2.3 Filtros IIR (Infinite Impulse Response)


Se estudiaran dos variaciones de este tipo de filtros: AR y ARMA

1.2.3.1 Filtros AR (Autoregresivo)


La ecuacin diferencia que describe un filtro AR es:

[ ]

[ ]

Lo que da lugar a una funcin de transferencia: ( )

La funcin de transferencia contiene solo polos. El filtro es recursivo ya que la salida depende no solo de la entrada actual sino adems de valores pasados de la salida (Filtros con realimentacin).

El trmino autoregresivo tiene un sentido estadstico en que la salida y[n] tiene una regresin hacia sus valores pasados. La respuesta al impulso es normalmente de duracin infinita, de ah su nombre.

1.2.3.2 Filtros ARMA (Autoregresivo y Media en Movimiento)

Es el filtro ms general y es una combinacin de los filtros MA y AR. La ecuacin diferencia que describe un filtro ARMA de orden N es :

[ ]

] [ ]

[ [

] ]

[ [

] ]

Y la funcin de transferencia: ( )

Un filtro de este tipo se denota por ARMA(N, M), es decir es Autoregresivo de orden N y Media en Movimiento de orden M. Su respuesta a impulso es tambin de duracin infinita y por tanto es un filtro del tipo IIR.

Resumen:

Ecuacin Diferencia [ ] [ ]

Tipo de Filtro FIR (Finite Impulse Response), No recursivo, Todo Ceros

[ ]

IIR (Infinite Impulse Response), Recursivo, Autoregresivo (AR), orden N, Todo Polos IIR Recursivo, ARMA (N,M),

Polos y Ceros

2.1 Proceso de Diseo de Filtros Digitales


El proceso de diseo de un filtro digital requiere tres pasos Establecer las especificaciones del filtro para unas determinadas prestaciones. Estas especificaciones son las mismas que las requeridas por un filtro analgico: frecuencias de banda de paso (fc), banda de paro (fp), atenuaciones, ganancia, etc. Determinar la funcin de transferencia que cumpla las especificaciones. Realizar la funcin de transferencia en hardware o software.

2.2 IIR o FIR?


Los filtros IIR producen en general distorsin de fase, es decir la fase no es lineal con la frecuencia. Los filtros FIR son de fase lineal. El orden de un filtro IIR es mucho menor que el de un filtro FIR para una misma aplicacin. Los filtros FIR son siempre estables.

2.3 Diseo de Filtros IIR con MATLAB


MATLAB dispone de funciones que facilitan el diseo de filtros, tanto analgicos como digitales. Funciones para determinar el orden necesario para implementar un determinado filtro: [N, Wn] = buttord(Wp, Ws, Rp, Rs)

Calcula el orden de un filtro pasabaja digital tipo Butterworth, con Ws la frecuencia de corte (fc), Wp la frecuencia de paro (fp), y Rp y Rs las atenuaciones respectivas de fc y fp en decibeles. Wp y Ws deben ser entre (0,1), siendo 1 la frecuencia de Nyquist (fs/2). N es el orden del filtro y Wn la frecuencia de 3db. [N, Wn] = buttord(Wp, Ws, Rp, Rs,'s') Lo mismo que antes, pero para un filtro pasabajas analgico. Aqu los valores de Wp y Ws pueden tomar cualquier valor en radianes. [N, Wn] = cheb1ord(Wp, Ws, Rp, Rs) Clculo del orden necesario para un filtro digital pasabaja de Chebyshev I, con las especificaciones dadas. Las mismas consideraciones que en el caso del filtro de Butterworth. [N, Wn] = cheb1ord(Wp, Ws, Rp, Rs, 's') Lo mismo pero para el filtro analgico [N, Wn] = cheb2ord(Wp, Ws, Rp, Rs) Filtro digital de Chebyshev II [N, Wn] = cheb2ord(Wp, Ws, Rp, Rs, 's') Filtro analgico de Chebyshev II [N, Wn] = ellipord(Wp, Ws, Rp, Rs) Filtro digital elptico [N, Wn] = ellipord(Wp, Ws, Rp, Rs, 's') Filtro analgico elptico

2. 3.1 Ejemplos
Ejemplo 1: Determinar el orden necesario para un filtro analgico pasabanda con las siguientes especificaciones y para todos los tipos de filtros: Pasabanda 30-50 Hz , banda de paso (fs) < 5Hz y banda de paro (fp)>200 Hz, Amax <2dB, Amin >40dB . Hacemos primero la transformacin de Pasabanda a Pasabaja. Recalculando f1;

f1 = f2 f3 / f4 = 7.5 Hz. La frecuencia de pasabajas es f3 - f2 = 20 Hz, y la frecuencia de pasaaltas es f4 - f1 = 192.5 Hz. >> [N,Wn]=buttord(2*pi*20,2*pi*192.5,2,40,s) N=3 Wn = 2*pi*41.4736 = 260.5861

>> *N,Wn+=cheb1ord(2*pi*20, 192.5,2,40,s) N=2 Wn = 2*pi*20

>> *N,Wn+=cheb2ord(2*pi*20, 2*pi*192.5,2,40,s) N=2 Wn = 2*pi*162.3265

>> *N,Wn+=ellipord(2*pi*20, 2*pi*192.5,2,40,s) N=2 Wn = 2*pi*20

Ejemplo 2: Lo mismo de antes, pero con filtros digitales. Elegir la frecuencia de muestreo. La frecuencia de muestreo deber ser >2 fmx = 400 Hz. Tomo fs = 1000 Hz. Normalizando las frecuencias con respecto a la frecuencia de Nyquist (fs/2) :

f1 = 0.01, f2 = 0.06, f3 = 0.1, f4 = 0.4. Recalculamos f1 = 0.015 y hacemos la Transformacin a pasabajas, >> [N,Wn]=buttord(0.04,0.385,2,40) N=3 Wn = 0.0941

>> [N,Wn]=cheb1ord(0.04,0.385,2,40) N=2 Wn = 0.04

>> [N,Wn]=cheb2ord(0.04,0.385,2,40) N=2 Wn = 0.3006

>> [N,Wn]=ellipord(0.04,0.385,2,40) N=2 Wn = 0.04

Se puede obtener un filtro de menor orden si se utiliza una frecuencia de muestreo menor (por ejemplo, 500). El aliasing no ser tan significativo ya que la respuesta de filtro a esas frecuencias es muy pequea ( > 40 dB).

2.3.2 Funciones para determinar los coeficientes del filtro:


[B, A] = butter (N, Wn)

B y A son los coeficientes del numerador y del denominador respectivamente, en orden decreciente de un filtro de Butterworth digital. N es el orden del filtro (calculado previamente) y Wn es la frecuencia de corte. El valor de Wn debe estar normalizado con la frecuencia de Nyquist. Para disear un filtro pasabajaas Wn es un escalar entre (0,1). La banda de paso es (0,Wn) y la banda de paro es (Wn,1). Para disear un filtro de pasaaltas, el comando a escribir es:

*B,A+ = butter(N,Wn,high);

donde Wn es un escalar.

Un filtro Pasabanda se determina de la siguiente forma: [B,A] = butter(N,[W1 W2]/(fs/2), bandpass) ; y = filter(b,a,x); *este comando se estudiar mas adelante.

Dnde: W1= frecuencia baja, W2 =frecuencia alta, y = seal de salida y x = seal de entrada.

Es decir, Wn es en este caso un vector que especifica las frecuencias de pasabanda. Finalmente, para un filtro Rechaza banda:

*B,A+ = butter(N,*W1 W2+,stop)

[W1 W2] son las frecuencias de rechazo de banda.

2.3.3 Como obtener la respuesta en frecuencia del filtro diseado


2.3.3.1 Para los filtros analgicos: H = freqs(B,A,W) Devuelve el vector H de nmeros complejos, que es la respuesta en frecuencia al filtro cuya funcin de transferencia en s viene dada por B y A. La respuesta en frecuencia se evala en los puntos especificados por el vector W en radianes.

plot(W,abs(H))

Dibuja la magnitud de la respuesta en frecuencia del filtro. plot(W,unwrap(angle(H))) Dibuja la fase de la respuesta en frecuencia del filtro. La funcin unwrap hace que no haya discontinuidad en la fase por el paso de + a - . 2.3.3.2 Para los filtros digitales H = freqz (B,A,F,Fs) Devuelve el vector H de nmeros complejos, que es la respuesta en frecuencia al filtro cuya funcin de transferencia en Z viene dada por B y A. La respuesta en frecuencia se evala en los puntos especificados por el vector F en Hz, siendo la frecuencia de muestreo Fs en Hz. gd = grpdelay(B,A,F,Fs) Calcula retraso de grupo (-dF/dt) de la funcin de Transferencia formada por los polinomios B y A. Se evala en los puntos especificados por W en radianes. plot(F,abs(H)) Dibuja la magnitud de la respuesta en frecuencia del filtro. plot(F,unwrap(angle(H))) Dibuja la fase de la respuesta en frecuencia del filtro. plot(F,gd) Dibuja el retraso de grupo de la funcin de Transferencia Discreta.

2.3.5 Aplicacin del Filtro diseado

Finalmente, cuando diseemos un filtro digital nos interesar poder aplicar ese filtro a una seal temporal. Eso se consigue con la funcin de MATLAB filter.

y = filter(B,A,x)

El vector x es la entrada y el vector y es la salida filtrada. B y A son los coeficientes del filtro digital.

Existe otra funcin llamada filtfilt, que funciona de la misma manera que filter, pero hace dos filtrados. Primero filtra el vector x, y su respuesta la rota y le vuelve a aplicar el mismo filtro. La respuesta final evita la distorsin de fase propia de los filtros IIR.

y = filtfilt(B,A,x)

2.4 Diseo de Filtros FIR con MATLAB


2.4.1 Funciones de MATLAB para realizar filtros FIR

2.4.2 Funcin FIR1

B = fir1(N,Wn,type,window);

Disea un filtro FIR pasabajas de orden N (longitud N+1) y frecuencia de corte Wn (normalizada con respecto a la frecuencia de Nyquists, 0 Wn 1). Se pueden especificar otro tipo de filtros de la misma forma que con los filtros IIR mediante el parmetro type. Por ejemplo, para un filtro rechaza banda:

B = fir1(N,[W1 W2],'stop');

Por defecto la funcin FIR usa la ventana de Hamming. Otro tipo de ventanas pueden tambin especificarse:

B = fir1(N,Wn,bartlett(N+1));

B = fir1(N,Wn,'high',chebwin(N+1,R));

2.4.3Funcin FIR2

B = fir2(N,F,M,window);

Disea un filtro FIR utilizando el mtodo de muestreo de frecuencia. Los parmetros de entrada es el orden del filtro N (longitud N+1) y dos vectores F y M que especifican la frecuencia y la magnitud, de forma que plot(F,M) es una grfica de la respuesta deseada del filtro.

Se pueden indicar saltos bruscos en la respuesta en frecuencia duplicando el valor de la frecuencia de corte. F debe estar entre 0 y 1, en orden creciente, siendo el primer elemento igual a 0 y el ltimo a 1. El parmetro window indica el tipo de ventana a utilizar. Por defecto, usa la ventana de Hamming.

B = fir2(N,F,M,bartlett(N+1));

Se pueden especificar ms parmetros en esta funcin,

B = fir2(N,F,M,npt,lap,window);

La funcin fir2 interpola la respuesta frecuencial deseada (F,M) con npt puntos (por defecto, npt=512). Si dos valores sucesivos de F son iguales, se crea una regin de lap puntos alrededor de este punto (por defecto, lap=25).

2.4.4 Funcin FIRLS

B = firls(N,F,M);

Diseo de filtros FIR usando la minimizacin del error por mnimos cuadrados. Los argumentos de entrada son el orden del filtro N, y dos vectores F y M, cuyo formato difiere de los anlogos en la funcin fir2. El filtro obtenido es la mejor aproximacin a (F,M) por mnimos cuadrados.

2.4.5 Ejemplos
Ejemplo 1: Disear un filtro FIR pasabanda a frecuencias de 30 Hz y 3500 Hz por cada uno de los diferentes mtodos. Utilizar un mismo orden de filtro (por ejemplo N=44) y comparar las respuestas frecuenciales.

N=44;Fs=11020;Fny=Fs/2; Bfir1 = fir1(N,[30 3500]/Fny); Bfir2 = fir2(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]); Bfirls = firls(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);

% Ploteo del filtro

F=0:10:5000; Hfir1=abs(freqz(Bfir1,1,F,Fs)); Hfir2=abs(freqz(Bfir2,1,F,Fs)); Hfirls=abs(freqz(Bfirls,1,F,Fs)); Hremez=abs(freqz(Bremez,1,F,Fs)); semilogy(F,Hfir1,'r',F,Hfir2,'g',F,Hfirls,'y');

Figura 1. Respuesta en frecuencia los filtros FIR

3. Procesamiento Digital de una seal de Voz

3.1 Cdigo del Filtro


[voz, fs] = wavread('seal de voz_01'); % wavplay(voz ,fs); % Reproduce seal de Voz original. y = voz + 0.05*randn(size(voz)); % Se aade ruido a la seal original. % Graficar la seal original subplot(2,2,1); T=length(voz)/fs; t=linspace(0,T,T*fs); plot(t,voz); title('SEAL ORIGINAL')% Ttulo xlabel('Tiempo (s)'); % Etiqueta del eje X ylabel('Amplitud (V)'); % Etiqueta del eje Y xlim([0 10]); % Lmite de la seal en tiempo % FFT de la seal original subplot(2,2,2); % Llamado a la funcin que calcula la FFT fft_signal(voz,fs); title('ESPECTRO DE LA SEAL ORIGINAL'); xlim([0 3e3]); % Graficar la seal con ruido subplot(2,2,3); T=length(y)/fs; t=linspace(0,T,T*fs); plot(t,y); title('SEAL CON RUIDO'); xlabel('Tiempo (s)'); ylabel('Amplitud (V)'); xlim([0 10]) wavwrite(y,fs,'Voz_Ruido') aadido

% % % % %

Ttulo Etiqueta del eje X Etiqueta del eje Y Lmite de la seal en tiempo Guarda la seal de voz con ruido

% FFT de la seal con ruido subplot(2,2,4); % Llamado a la funcin que calcula la FFT fft_signal(y,fs);title('ESPECTRO DE LA SEAL CON RUIDO'); xlim([0 3e3]);

%% figure (2); % Filtrado de la seal % Filtro FIR orden = 15; h = fir1(orden, 0.1, rectwin(orden+1)); y1 = filter(h, 1, y);

% Grafica filtro FIR subplot(2,2,1); plot(t,y1 ); set(gca, 'YLim',[-1 1], 'xtick',[]); title('FIR VENTANA RECTANGULAR'); wavwrite(y1,fs,'Voz_Filtrada_FIR_RECT'); % Guarda la seal Filtrada con FIR % FFT deltro FIR subplot(2,2,2); % Llamado a la funcin que calcula la FFT fft_signal(y1,fs);title('ESPECTRO DEL FILTRO FIR RECTANGULAR'); xlim([0 3e3]); %Ventana BLACKMAN orden = 30; h_B = fir1(orden, 0.1, blackman(orden+1)); y_B = filter(h_B, 1, y); % Grafica filtro FIR subplot(2,2,3); plot(t,y1 ); set(gca, 'YLim',[-1 1], 'xtick',[]); title('FIR VENTANA BALCKMAN'); wavwrite(y_B,fs,'Voz_Filtrada_FIR_BLACK'); % Guarda la seal Filtrada con FIR % FFT deltro FIR subplot(2,2,4); % Llamado a la funcin que calcula la FFT fft_signal(y_B,fs);title('ESPECTRO DEL FILTRO FIR BLACKMAN'); xlim([0 3e3]); %% figure (3) % Filtro IIR % Pasabajas Butterworth cutoff = 500 / (fs/2); % Frecuencia de corte normalizada [b,a] = butter(10, cutoff, 'low'); % Filtro pasabajas de 10 orden. y2 = 1.5*filter(b, a, y); % Grafica filtro IIR subplot(2,2,1); plot(t, y2); set(gca, 'YLim', [-1 1]); title('IIR Butterworth LPF'); xlabel('Tiempo (s)'); % Etiqueta del eje X ylabel('Amplitud (V)'); % Etiqueta del eje Y xlim([0 10]); % Lmite de la seal en tiempo wavwrite(y2,fs,'Voz_Filtrada_IIR_Butt_LPF'); % Guarda la seal Filtrada con IIR

% FFT del filtro IIR subplot(2,2,2); % Llamado a la funcin que calcula la FFT fft_signal(y2,fs);title('ESPECTRO DEL FILTRO IIR BUTT'); xlim([0 1e3]);

% Frecuencia normalizada FILTFILT fNorm = 1000 / (fs/2); [b,a] = butter(10, fNorm, 'low'); y_Low = filtfilt(b, a, voz); % Graficacin de la seal en el tiempo subplot(2,2,3); plot(t,y_Low); title('IIR FILTFILT'); xlabel('Tiempo (s)') ylabel('Amplitud (V)'); % xlim([0 20/f0]) % Graficacin de la seal en frecuencia subplot(2,2,4); % Llamado a la funcin que calcula la FFT fft_signal(y_Low,fs); title('ESPECTRO DEL FILTRO IIR FILTFILT'); xlim([0 1e3]); wavwrite(y_Low,fs,'VOZ_IIR_FiltFilt'); % Guarda la seal filtrada con FILTFILT %% % Figura 4 Respuesta en Magnitud, Fase, Impulso y diagrama de Polos y Ceros Filtro Butterworth. % Se tom este caso para graficar ya que la seal filtrada contiene menos ruido. titulo='FILTRO IIR Butterworth'; figure(4) %Trazado de la respuesta en Magnitud [H,w]=freqz(b,a,512,fs); % Devuelve la respuesta en frecuencia del vector h y la frecuencia angular correspondiente del % vector w para la funcin de transferencia del filtro digital, determinada por los polinomios % (reales o complejos) del numerador y denominador representados en % los vectores b y a, respectivamente. subplot(2,2,1) plot(w,20*log10(abs(H))); grid on; title ([titulo, ' Respuesta en magnitud']); xlabel('Frecuencia (Hz)'); ylabel('H(f) db'); xlim([0 3e3]); % Respuesta en fase subplot(2,2,2) plot(w,angle(H)); grid on; title ([titulo,' Respuesta en fase']); xlabel('Frecuencia (Hz)'); ylabel('ngulo de H rad'); xlim([0 3e3]); %Respuesta al impulso subplot(2,2,3); [y_eje,tt]= impz(b,a,0.5e3);

stem(tt,y_eje); title ([titulo,' Respuesta al impulso']); xlabel('n'); ylabel('h[n]'); %Ploteo de los polos y ceros z= roots(b); % Ceros p = roots(a); % Polos subplot(2,2,4); zplane(z,p); title('Polos y ceros'); legend('Ceros','Polos'); xlabel('Real'); ylabel('Imaginario'); %% Respuesta en Magnitud de Filtro FIR figure (5); F=0:10:4000; Hfir1=abs(freqz(h,1,F,Fs)); Hfir2=abs(freqz(h_B,1,F,Fs)); semilogy(F,Hfir1,'r',F,Hfir2,'g');

3.2 Resultados Obtenidos


3.2.1 Seal De Voz Original + Espectro de Frecuencia y, Seal con Ruido + Espectro de Frecuencia

3.2.2 Seal Filtrada Filtro FIR

3.2.3 Seal Filtrada Filtro IIR

3.3 Respuesta en Magnitud y Fase

Respuesta en Magnitud FILTROS FIR

4. Conclusin:

A la seal original de voz se le aadi ruido aleatorio, se procedi a realizar el filtrado digital de la seal obteniendo resultados satisfactorios en todos los casos. Sin embargo el mejor resultado fue obtenido con el filtro IIR con la funcin FILTFILT (la cual aplica un doble filtrado). En las figuras difcilmente se puede observar las diferencias obtenidas en cada filtro, recomiendo escuchar los archivos de salida de cada caso ya que se logra apreciar la diferencia entre un tipo de filtrado y otro.