epn filtros

3,658 views

Published on

HOLA

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,658
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
147
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

epn filtros

  1. 1. Procesamiento de señales, imágenes y visión artificial con MatLab “ Quien no se resuelve a cultivar el hábito de pensar, se pierde el mayor placer de la vida” Thomas A. Edison
  2. 2. EFECTO DE UN SLI SOBRE LA ENTRADA FILTROS DIGITALES
  3. 3. GENERALIZACIÓN PARA SISTEMAS DISCRETOS: Asumiendo a(1) = 1 Ecuación en diferencias para un SLI . Salida = f ( entradas actual y pasadas , salidas pasadas ) Qué efecto produce un SLI sobre una entrada X[n] ?
  4. 4. Ejercicio: Encuentre la señal de salida de los SLI’s (a) y (b). Utilizar como entrada una señal sinusoidal de 3 Hz con ruido Señal + ruido a) y[n]=0.9*y[n-1]+0.1*x[n]; b) y [n] =0.9*y [n-1] +0.05*x [n] +0.05*x [n-1] ; Para responder, hagamos el siguiente ejercicio: Como observamos, la salida del Sistema, es decir la respuesta del Mismo depende directamente De la señal de entrada
  5. 5. EN LAS SIGUIENTES DIAPOSITIVAS SE PRESENTA LA SOLUCION AL PROBLEMA PLANTEADO Señal + ruido
  6. 6. PRIMER PASO
  7. 7. <ul><li>CODIGO DE IMPLEMENTACIÒN </li></ul><ul><li>clear all </li></ul><ul><li>close all </li></ul><ul><li>Fs = 100; </li></ul><ul><li>t = 0:1/Fs:1; </li></ul><ul><li>x = sin(2*pi*t* 3 )+.25*rand*sin(2*pi*t*40); % señal + ruido </li></ul><ul><li>plot(t,x) </li></ul><ul><li>y(1)=x(1); % condición inicial para el lazo de abajo </li></ul><ul><li>for i=2:length(t) </li></ul><ul><li>y(i)=0.9*y(i-1)+0.1*x(i); </li></ul><ul><li>end </li></ul><ul><li>plot(t,x) </li></ul><ul><li>hold on </li></ul><ul><li>plot(t,y) </li></ul>RESULTADO La grafica; nos muestra la señal Original (un tono mas ruido); Y la señal resultante. Nota: la señal resultante tendrá; una menor Amplitud; y un periodo relativamente menor a) y[n]=0.9*y[n-1]+0.1*x[n];
  8. 8. b) y[n]=0.9*y[n-1]+0.05*x[n]+0.05*x[n-1]; <ul><li>CODIGO DE IMPLEMENTACIÒN </li></ul><ul><li>Fs = 100; </li></ul><ul><li>t = 0:1/Fs:1; </li></ul><ul><li>x = sin(2*pi*t*3)+.25*rand*sin(2*pi*t*40); % señal + ruido </li></ul><ul><li>plot(t,x) </li></ul><ul><li>% condiciones iniciales para el lazo de abajo </li></ul><ul><li>y(1)=x(1); </li></ul><ul><li>y(2)=x(2); </li></ul><ul><li>for i=3:length(t) </li></ul><ul><li>y(i)=0.9*y(i-1)+0.05*x(i)+0.05*x(i-1); </li></ul><ul><li>end </li></ul><ul><li>plot(t,x,t,y) </li></ul>La grafica; nos muestra la señal Original (un tono mas ruido); Y la señal resultante. RESULTADO Nota: la señal resultante tendrá; una menor Amplitud; y un periodo relativamente menor
  9. 9. CONCLUSION: Los anteriores SLI están “suavizando” a la entrada. Entonces: El SLI está actuando como un filtro digital …. Para tener un filtro digital, solo se requiere de los coeficientes.
  10. 10. GENERALIZACIÓN DE UN SISTEMA DISCRETO VISTO COMO FILTRO DIGITAL: Asumiendo a(1) = 1 Salida = f ( entradas actual y pasadas , salidas pasadas ) Cálculo de la salida, asumiendo condiciones iniciales = 0: En matlab, esto es computado por la función FILTER
  11. 11. LA FUNCIÓN FILTER: hace la función del lazo “ f or” que vimos en la resolución de los problemas antes planteados. Si se desea filtrar la señal X a través de un filtro de coeficientes A y B, se utiliza la función FILTER. A la salida se tiene la señal filtrada Y: A = [a1 a2 ... an]; B = [b1 b2 ... bn] Y = filter (B, A, X) Y = filter (B, A, X, C.I ) FILTER: Dados A, B y X: Obtiene la salida Y
  12. 12. FILTROS EN MATLAB: En matlab se pueden construir filtros tanto digitales como analógicos: 1. Filtros digitales: tenemos filtros FIR e IIR y se los construye por medio de un gráfico frecuencia-ganancia. <ul><li>f is a vector of frequency points, specified </li></ul><ul><li>in the range between 0 and 1, where 1 corresponds to half the sample frequency </li></ul><ul><li>(the Nyquist frequency). The first point of f must be 0 </li></ul><ul><li>and the last point 1, with all intermediate points in increasing order. Duplicate </li></ul><ul><li>frequency points are allowed, corresponding to steps in the frequency response. </li></ul><ul><li>m is a vector containing the desired magnitude response at the points specified in f. </li></ul>
  13. 13. 2. Filtros analógicos: tenemos filtros a) Máximamente planos o sin rizados (Butterworth), b) Con rizado en la banda de paso (Chevyshev I), c) Con rizado en la banda de supresión(Chevyshev II), d) Con rizado tanto en la banda de paso como en la de supresión (Elíptico).
  14. 14. <ul><li>FILTROS IIR: </li></ul><ul><li>Filtro IIR digital: función yulewalk </li></ul><ul><li>[b,a] = yulewalk (n,f,m); % Yule–Walker IIR Filter </li></ul><ul><li>Fase 3: salida del filtro utilizando los coeficientes calculados anteriormente: </li></ul><ul><li>x_filt=filter(b,a,x); % x: la señal a filtrar ; b,a: los coeficientes del filtro </li></ul>FUNCIONES DE MATLAB PARA EL DISEÑO DE FILTROS DIGITALES
  15. 15. Obtiene los coef. A y B al resolver las ecuaciones modificadas de Yule-Walker n: orden del filtro F: vector [fo f1 f2 ... Fmax] / Fmax; Fmax = fs / 2 M: vector [mo m1 m2 ... m] (ganancia) Cálculo de coeficientes: DISEÑO DE FILTROS IIR digitales Es importante recordar que los vectores M y F deben tener la misma longitud
  16. 16. Cuál es la respuesta en frecuencia real del filtro obtenido??? : FREQZ: Da la respuesta en frecuencia evaluada en N puntos (defecto:512) equiespaciados de la mitad superior del círculo unidad Fs: frec. muestreo Freqz (B, A, N, Fs): Grafica el (módulo y la fase) vs frecuencia
  17. 17. Diseñe un filtro multibanda con yulewalk y grafique la respuesta de frecuencia deseada y real. Ejercicio:
  18. 18. Diseñe un filtro multibanda con yulewalk y grafique la respuesta de frecuencia deseada y real. m = [0 0 1 1 0 0 1 1 0 0]; f = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1]; [b,a] = yulewalk(10,f,m); [h,w] = freqz(b,a,128); plot(f,m,w/pi,abs(h)) title('Respuestas ideal y real (magnitud: escala lineal)') Figure % Respuesta en frecuencia: % Diagrama de Bode % (respuesta en magnitud y en fase): %ver respuesta en frecuencia en 128 puntos freqz(b,a,128); %Obs: la frec. Está normalizada title(‘Diagrama de Bode(magnitud: escala en dB)') % Obs: respuesta en fase: No Lineal Resolución: Es importante no olvidar que, en este par de vectores solo es necesario indicar los puntos críticos de la señal que filtaremos
  19. 19. Diagrama de Bode: % Obs: respuesta en módulo: Filtro multibanda % Obs: respuesta en fase: No Lineal
  20. 20. Ejemplo: aisle cada uno de los tres tonos de la señal dada.
  21. 21. PRIMER PASO CALULO DEL ESPECTRO DE LA SEÑAL <ul><li>CODIGO DE IMPLEMENTACIÒN </li></ul><ul><li>clear all;close all;clc; </li></ul><ul><li>Fmax=140; </li></ul><ul><li>fs=2.1*Fmax; </li></ul><ul><li>t=0:1/fs:5; </li></ul><ul><li>x=sin(2*pi*t*100)+sin(2*pi*t*120)+sin(2*pi*t*140); </li></ul><ul><li>nFFT=1024; </li></ul><ul><li>LongVentana= nFFT/4; </li></ul><ul><li>Solapamiento =LongVentana/2; </li></ul><ul><li>[P_welch_BB,F_welch_BB] = pwelch(x,LongVentana,Solapamiento,nFFT,fs); </li></ul><ul><li>subplot(4,1,1) </li></ul><ul><li>plot(F_welch_BB,P_welch_BB,'r') </li></ul>El encontrar de manera grafica el espectro de la señal permitirá al usuario notar el tamaño de los vectores para, poder realizar el filtrado pertinente Ver grafico 1
  22. 22. SEGUNDO PASO FILTADO DE CADA TONO <ul><li>% 1. Filtrado del primer tono: </li></ul><ul><li>orden=25; </li></ul><ul><li>f1=[0 100 105 110 140]/Fmax; </li></ul><ul><li>m1=[1 1 1 0 0]; </li></ul><ul><li>[b1,a1]=yulewalk(orden,f1,m1); </li></ul><ul><li>senial_filtrada_uno=filter(b1,a1,x); </li></ul><ul><li>%espectro senal filtrada: </li></ul><ul><li>[P_welch_BB_filt,F_welch_BB_filt] = pwelch(senial_filtrada_uno,LongVentana,Solapamiento,nFFT,fs); </li></ul><ul><li>subplot(4,1,2) </li></ul><ul><li>plot(F_welch_BB_filt,P_welch_BB_filt,'r') </li></ul><ul><li>% 2. Filtrado del segundo tono: </li></ul><ul><li>f1=[0 110 115 120 125 130 140]/Fmax; </li></ul><ul><li>m1=[0 0 1 1 1 0 0]; </li></ul><ul><li>[b1,a1]=yulewalk(orden,f1,m1); </li></ul><ul><li>senial_filtrada_dos=filter(b1,a1,x); </li></ul>El filtrado de cada tono permitirá aislar; a cada uno de estos del resto de señal. Y para poder comprobar que lo que realizamos es cierto extraemos el espectro de cada señal filtrada Ver grafico 2
  23. 23. <ul><li>%espectro senal filtrada: </li></ul><ul><li>[P_welch_BB_filt,F_welch_BB_filt] = pwelch(senial_filtrada_dos,LongVentana,Solapamiento,nFFT,fs); </li></ul><ul><li>subplot(4,1,3) </li></ul><ul><li>plot(F_welch_BB_filt,P_welch_BB_filt,'r') </li></ul><ul><li>% 3. Filtrado del tercer tono: </li></ul><ul><li>f1=[0 110 115 120 125 130 140]/Fmax; </li></ul><ul><li>m1=[0 0 0 0 0 1 1]; </li></ul><ul><li>[b1,a1]=yulewalk(orden,f1,m1); </li></ul><ul><li>senial_filtrada_tres=filter(b1,a1,x); </li></ul><ul><li>%espectro senal filtrada: </li></ul><ul><li>[P_welch_BB_filt,F_welch_BB_filt] = pwelch(senial_filtrada_tres,LongVentana,Solapamiento,nFFT,fs); </li></ul><ul><li>subplot(4,1,4) </li></ul><ul><li>plot(F_welch_BB_filt,P_welch_BB_filt,'r') </li></ul>
  24. 24. Resultados: Grafico 1 Grafico 2 Primer tono Grafico 2 segundo tono Grafico 2 tercer tono
  25. 25. FIR: Filtro digital (solo desde fase 2): Fase 1: se conoce ya el orden del filtro (n) Fase 2: cálculo de los coeficientes: utilizar las siguientes posiblidades según el caso: b = fir1 (n, wn, type, ventana); % n = orden del filtro; wn= vector de frecuencias normalizado, type= high (pasa alta), stop (elimina banda) % ventana = blackman, hamming, hanning, etc) b = fir2 (n, f, A, ventana); % n = orden del filtro; f = vector normalizado de frecuencias; A = vector normalizado de ganancias b = remez (n, f, A); % CASI SIMILAR AL FIR2 % n = orden del filtro; f = vector normalizado de frecuencias; A = vector normalizado de ganancias Fase 3: salida del filtro utilizando el coeficiente calculado anteriormente: x_filt=filter(b, 1 ,x); % x: la señal a filtrar ; b, a=1 : los coeficientes del filtro FILTROS DIGITALES TIPO FIR: Ventaja : son de fase lineal. Desventaja : requieren orden MAYOR que los IIR
  26. 26. % Diseñe un filtro pasa banda entre 5 y 15 Hz. % Asuma una frecuencia de muestreo de 100 Hz. % Orden del filtro = 128 % clear all; close all; fs = 100; % frecuencia de muestreo Fmax = fs/2; order = 128; % Orden del filtro wn = [5 15]/ Fmax; % vector de ftrecuencias b = fir1 (order,wn); % diseño del filtro FIR, % Respuesta en frecuencia: % Diagrama de Bode freqz(b,1,512,100); % Plot modulo de h: [h,freq] = freqz(b,1,512,100); figure plot(freq,abs(h),'k'); xlabel('Frecuencia (Hz)'); ylabel('H(f)'); figure plot(freq,20*log10(abs(h)),'k'); xlabel('Frecuencia (Hz)'); ylabel('H(f) en dB'); EJEMPLO FILTROS FIR: usando FIR1
  27. 27. DISEÑO DE UN FILTRO FIR (USANDO FIR2) DE ORDEN 12 Y SU RESPUESTA EN FRECUENCIA % EJEMPLO FILTROS FIR: usando FIR2 close all; clear all; n = 12; % orden f = [0 .25 .25 .6 .6 1]; % respuesta de frecuencia m = [0 0 1 1 0 0]; b1 = fir2 (n,f,m); % FIR rectangular window filter h1 = freqz(b1,1,256); plot(f,m,'k'); % Plot: respuesta ideal hold on w = (1:256)/256; plot(w,abs(h1),':r'); % Plot: FIR filter xlabel(' Frequencia Relativa'); title('FIR utilizando FIR2') legend('ideal','FIR') En este tipo de filtros es necesario recordar que, mientras mayor es el orden del filtro mejor calidad tendrá, es decir, mas vertical será la caída, pero no olvidar que eso requiere de mejor hardware
  28. 28. OTRAS FUNCIONES DE MATLAB PARA FILTROS FIR Cálculo de coeficientes: Ventaja : son de fase lineal. Desventaja : requieren orden MAYOR que los IIR FASE 1
  29. 29. COMPARACIÓN: FILTROS IIR (YULEWALK) Y FIR (FIR2) Y SU RESPUESTA EN FRECUENCIA close all; clear all; n = 12; % orden f = [0 .25 .25 .6 .6 1]; % respuesta de frecuencia m = [0 0 1 1 0 0]; [b,a] = yulewalk (n,f,m); % Yule–Walker IIR Filter h = freqz(b,a,256); b1 = fir2 (n,f,m); % FIR rectangular window filter h1 = freqz(b1,1,256); plot(f,m,'k'); % Plot: respuesta ideal hold on w = (1:256)/256; plot(w,abs(h),'--b'); % Plot: Yule-Walker filter hold on plot(w,abs(h1),':r'); % Plot: FIR filter xlabel(' Frequencia Relativa'); title(‘Comparación entre IIR y FIR del mismo orden') legend('ideal','IIR','FIR') %CONCLUSIÓN: %FIR requieren orden MAYOR que los IIR
  30. 30. <ul><li>% Obtenemos la señal original (estereo): </li></ul><ul><li>%archivo original: </li></ul><ul><li>[y_original,Fs,format] = wavread('ArjonaOriginal'); </li></ul><ul><li>size(y_original) %2 canales (estereo): 569039 filas por 2columnas </li></ul><ul><li>plot(y_original) % se verifica dos señales diferentes </li></ul><ul><li>title('señal original (estereo)') </li></ul><ul><li>% sound(y_original,Fs) </li></ul><ul><li>canal_izquierdo_original=y_original(:,1);%extraemos 1 solo canal </li></ul><ul><li>size(canal_izquierdo_original) %569039 filas por 1 columnas </li></ul><ul><li>figure </li></ul><ul><li>plot(canal_izquierdo_original) </li></ul><ul><li>title('señal original canal izquierdo') </li></ul><ul><li>%quitar todos los plots </li></ul><ul><li>%sound(canal_izquierdo_original,Fs) % si reproduce </li></ul><ul><li>El código implementado nos permite extraer canciones para realizar el trabajo. </li></ul><ul><li>Como la señal es estereo solo usamos un canal </li></ul><ul><li>Es aconsejable usar tonos pequeños de canciones para no hacer muy lento el procesamiento </li></ul>Aplicación a un audio: FILTAR UNA CANCIÓN USANDO UN FILTRO FIR PRIMER PASO EXTRACCION DE LAS CANCIONES
  31. 31. SEGUNDO PASO EXTRACCION DEL ESPECTRO DE LAS SEÑALES <ul><li>nFFT=1024; </li></ul><ul><li>LongVentana= nFFT/2; </li></ul><ul><li>Solapamiento =nFFT/4; </li></ul><ul><li>%Espectro de potencias: </li></ul><ul><li>% LA FUNCIÓN DE MATLAB pwelch: </li></ul><ul><li>%[P_welch,F_welch] = pwelch(canal_izquierdo,LongVentanaHanning,MuestrasTraslapadas,nFFT,fs); </li></ul><ul><li>[P_welch_original,F_welch_original] = pwelch(canal_izquierdo_original,LongVentana,Solapamiento,nFFT,Fs); </li></ul><ul><li>P_welch_norm_original=P_welch_original/max(P_welch_original); </li></ul><ul><li>figure </li></ul><ul><li>plot(F_welch_original,P_welch_original) </li></ul><ul><li>grid on </li></ul><ul><li>order = 128; % Orden del filtro </li></ul><ul><li>Fmax = Fs/2; </li></ul><ul><li>wn = [5 3000]/ Fmax; % vector de ftrecuencias </li></ul><ul><li>b = fir1(order,wn); % diseño del filtro FIR, </li></ul>A mas de encontrar el espectro de frecuencias, tambien configuramos el filtro que vamos a usar.
  32. 32. <ul><li>cancion_filtrada = filter (b,1,canal_izquierdo_original); </li></ul><ul><li>%Espectro de potencias: </li></ul><ul><li>% LA FUNCIÓN DE MATLAB pwelch: </li></ul><ul><li>%[P_welch,F_welch] = pwelch(canal_izquierdo,LongVentanaHanning,MuestrasTraslapadas,nFFT,fs); </li></ul><ul><li>[P_welch_filtrada,F_welch_filtrada] = pwelch(cancion_filtrada,LongVentana,Solapamiento,nFFT,Fs); </li></ul><ul><li>P_welch_norm_filtrada=P_welch_filtrada/max(P_welch_filtrada); </li></ul><ul><li>figure </li></ul><ul><li>plot(F_welch_filtrada,P_welch_filtrada) </li></ul><ul><li>grid on </li></ul><ul><li>figure </li></ul><ul><li>plot(F_welch_original,P_welch_norm_original) </li></ul><ul><li>hold on </li></ul><ul><li>plot(F_welch_filtrada,P_welch_norm_filtrada,'r:') </li></ul><ul><li>grid on </li></ul><ul><li>%sound(y_original,Fs) </li></ul><ul><li>sound(cancion_filtrada,Fs) </li></ul>TERCER PASO COMPARACION DE LOS DOS TIPOS DE FILTRO
  33. 33. CON FASE 1: incluye la determinación del orden del filtro SIN FASE 1: se supone ya conocido el orden del filtro FUNCIONES DE MATLAB PARA EL DISEÑO DE FILTROS ANALÓGICOS
  34. 34. % Example: sin fase 1: % Plot the frequency response curves % (in db) obtained from % an 8th-order lowpass filter using the Butterworth, %Chebyshev Type I and II, and % elliptic filters. Use a cutoff frequency of 200 Hz and % assume a sampling frequency % of 2 kHz. For all filters, the passband ripple should % be less than 3 db % and the minimum stopband attenuation should be 60 db. % Frequency response of four 8th-order lowpass filters % N = 256; % Spectrum number of points fs = 2000; % Sampling filter n = 8; % Filter order wn = 200/fs/2; % Filter cutoff frequency rp = 3; % Maximum passband ripple in db rs = 60; % Stopband attenuation in db % % %Butterworth [b,a] = butter(n,wn); % Determine filter coefficients [h,f] = freqz(b,a,N,fs); % Determine filter spectrum subplot(2,2,1); h = 20*log10(abs(h)); % Convert to db semilogx(f,h,'k'); % Plot on semilog scale %axis([100 1000 -80 10]); % Adjust axis for better visi- % bility xlabel('Frequency (Hz)'); ylabel('X(f)(db)'); title('Butterworth'); % %Chebyshev Type I [b,a] = cheby1(n,rp,wn); % Determine filter coefficients [h,f] = freqz(b,a,N,fs); % Determine filter spectrum subplot(2,2,2); h = 20*log10(abs(h)); % Convert to db semilogx(f,h,'k'); % Plot on semilog scale %axis([100 1000 -80 10]); % Adjust axis for better visibility xlabel('Frequency (Hz)'); ylabel('X(f)(db)'); title('Chebyshev I'); % % Chebyshev Type II [b,a] = cheby2(n,rs,wn); % Determine filter coefficients [h,f] = freqz(b,a,N,fs); % Determine filter spectrum subplot(2,2,3); h = 20*log10(abs(h)); % Convert to db semilogx(f,h,'k'); % Plot on semilog scale %axis([100 1000 -80 10]); % Adjust axis for better visi- % bility xlabel('Frequency (Hz)'); ylabel('X(f)(db)'); title('Chebyshev II'); % Elliptic [b,a] = ellip(n,rp,rs,wn); % Determine filter coefficients [h,f] = freqz(b,a,N,fs); % Determine filter spectrum subplot(2,2,4); h = 20*log10(abs(h)); % Convert to db semilogx(f,h,'k'); % Plot on semilog scale %axis([100 1000 -80 10]); % Adjust axis for better visi- % bility xlabel('Frequency (Hz)'); ylabel('X(f)(db)'); title('Elliptic');
  35. 35. Ejemplo de filtros analógicos: Ver ppt adicional sobre diseño de filtros
  36. 36. DEBERES : entrenamiento final previo a simulación en comunicaciones. Fecha de entrega : martes 23 de marzo 2010 a las 7 am en punto . Nota 1 : El deber se debe entregar en grupos de 2 y en cd (puesto nombres). Nota 2 : No se aceptarán trabajos si no están hecho paso a paso y con todas las reglas ya expuestas en clase. <ul><li>Leer un archivo .wav y filtrarlo con filtros pasa bajas, pasa banda y pasa altas. Utilice tanto filtros digitales FIR como IIF. Realice un informe de lo que escuchó en cada caso. Las frecuencias de corte las decide ud. </li></ul><ul><li>Genere un tono de 5 segundos de 500 Hz, seguido por un tiempo de silencia de 3 segundos y luego un tono de 1000 Hz de 4 segundos. Realice el análisis espectral por medio de la técnica de Welch. Ahora invierta el orden de los dos tonos de 500 y 1000 Hz y vuelva a realizar el análisis espectral y concluya qué pasa con la información entregada por dicho análisis espectral en ambos casos. Ahora utilice una técnica tiempo –frecuencia para analizar ambos casos y verificar que ahora sí que este método nos permite diferenciar las dos secuencias. </li></ul>

×