Академический Документы
Профессиональный Документы
Культура Документы
EXAMEN ORDINARIO
FILTRADO DE UNA SEAL DE VOZ CON RUIDO MEDIANTE MATLAB
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.
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:
[ ]
[ ]
( )
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.
[ ]
[ ]
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.
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 [ ] [ ]
[ ]
IIR (Infinite Impulse Response), Recursivo, Autoregresivo (AR), orden N, Todo Polos IIR Recursivo, ARMA (N,M),
Polos y Ceros
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
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
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).
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:
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.
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)
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));
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).
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]);
% % % % %
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');
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.