Upload
patricio-camacho
View
3.078
Download
2
Embed Size (px)
DESCRIPTION
HOLA
Citation preview
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
EFECTO DE UN
SLI
SOBRE LA ENTRADA
FILTROS DIGITALES
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] ?
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 directamenteDe la señal de
entrada
EN LAS SIGUIENTESDIAPOSITIVAS
SE PRESENTA LA SOLUCION AL PROBLEMA PLANTEADO
Señal + ruido
PRIMER PASO
CODIGO DE IMPLEMENTACIÒN
clear allclose all
Fs = 100;t = 0:1/Fs:1;x = sin(2*pi*t*3)+.25*rand*sin(2*pi*t*40); %
señal + ruidoplot(t,x)
y(1)=x(1); % condición inicial para el lazo de abajo
for i=2:length(t) y(i)=0.9*y(i-1)+0.1*x(i);end
plot(t,x)hold onplot(t,y)
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 menorAmplitud; y un periodo relativamente menor
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];
CODIGO DE IMPLEMENTACIÒN
Fs = 100;t = 0:1/Fs:1;x =
sin(2*pi*t*3)+.25*rand*sin(2*pi*t*40); % señal + ruido
plot(t,x)
% condiciones iniciales para el lazo de abajo
y(1)=x(1);y(2)=x(2);
for i=3:length(t) y(i)=0.9*y(i-1)+0.05*x(i)+0.05*x(i-1);endplot(t,x,t,y)
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 menorAmplitud; y un periodo relativamente menor
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.
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
LA FUNCIÓN FILTER: hace la función del lazo “for” que vimos en la resolución de los problemas antes planteados.
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
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:
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.
f is a vector of frequency points, specifiedin the range between 0 and 1, where 1 corresponds to half the sample frequency(the Nyquist frequency). The first point of f must be 0and the last point 1, with all intermediate points in increasing order. Duplicatefrequency points are allowed, corresponding to steps in the frequency response.
m is a vector containing the desired magnitude response at the points specified in f.
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).
FUNCIONES DE MATLAB
PARA EL DISEÑO DE FILTROS DIGITALES
FILTROS IIR:a)Filtro IIR digital: función yulewalk
[b,a] = yulewalk (n,f,m); % Yule–Walker IIR Filter
Fase 3: salida del filtro utilizando los coeficientes calculados anteriormente:x_filt=filter(b,a,x); % x: la señal a filtrar ; b,a: los coeficientes del filtro
Obtiene los coef. A y B al resolver las ecuaciones modificadas de Yule-Walker
n: orden del filtroF: vector [fo f1 f2 ... Fmax] / Fmax; Fmax = fs / 2M: vector [mo m1 m2 ... m] (ganancia)
Cálculo de coeficientes:
DISEÑO DE FILTROS IIR digitales
Es importante recordarque los vectores M y F
deben tener la misma longitud
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
Diseñe un filtro multibanda con yulewalk y grafique la respuesta de frecuencia deseada y real.
Ejercicio:
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 puntosfreqz(b,a,128); %Obs: la frec. Está normalizadatitle(‘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 esnecesario indicar los puntos
críticos de la señalque filtaremos
Diagrama de Bode:
% Obs: respuesta en módulo: Filtro multibanda% Obs: respuesta en fase: No Lineal
Ejemplo: aisle cada uno de los tres tonos de la señal dada.
PRIMER PASOCALULO DEL ESPECTRO DE LA SEÑAL
CODIGO DE IMPLEMENTACIÒNclear all;close all;clc; Fmax=140;fs=2.1*Fmax;t=0:1/fs:5;x=sin(2*pi*t*100)+sin(2*pi*t*120)+sin(2
*pi*t*140); nFFT=1024;LongVentana= nFFT/4;Solapamiento =LongVentana/2; [P_welch_BB,F_welch_BB] =
pwelch(x,LongVentana,Solapamiento,nFFT,fs);
subplot(4,1,1)plot(F_welch_BB,P_welch_BB,'r')
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
SEGUNDO PASOFILTADO DE CADA TONO
% 1. Filtrado del primer tono:orden=25;f1=[0 100 105 110 140]/Fmax;m1=[1 1 1 0 0];[b1,a1]=yulewalk(orden,f1,m1);senial_filtrada_uno=filter(b1,a1,x);
%espectro senal filtrada:[P_welch_BB_filt,F_welch_BB_filt] =
pwelch(senial_filtrada_uno,LongVentana,Solapamiento,nFFT,fs);
subplot(4,1,2)plot(F_welch_BB_filt,P_welch_BB_filt,'r') % 2. Filtrado del segundo tono:f1=[0 110 115 120 125 130 140]/Fmax;m1=[0 0 1 1 1 0 0];[b1,a1]=yulewalk(orden,f1,m1);senial_filtrada_dos=filter(b1,a1,x);
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
%espectro senal filtrada:[P_welch_BB_filt,F_welch_BB_filt] =
pwelch(senial_filtrada_dos,LongVentana,Solapamiento,nFFT,fs);
subplot(4,1,3)plot(F_welch_BB_filt,P_welch_BB_filt,'r') % 3. Filtrado del tercer tono:f1=[0 110 115 120 125 130 140]/Fmax;m1=[0 0 0 0 0 1 1];[b1,a1]=yulewalk(orden,f1,m1);senial_filtrada_tres=filter(b1,a1,x); %espectro senal filtrada:[P_welch_BB_filt,F_welch_BB_filt] =
pwelch(senial_filtrada_tres,LongVentana,Solapamiento,nFFT,fs);
subplot(4,1,4)plot(F_welch_BB_filt,P_welch_BB_filt,'r')
Resultados:
Grafico 1
Grafico 2
Primer tono
Grafico 2
segundo tono
Grafico 2
tercer tono
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
% 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 filtrown = [5 15]/ Fmax; % vector de ftrecuenciasb = 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);
figureplot(freq,abs(h),'k'); xlabel('Frecuencia (Hz)'); ylabel('H(f)');
figureplot(freq,20*log10(abs(h)),'k'); xlabel('Frecuencia (Hz)'); ylabel('H(f) en dB');
EJEMPLO FILTROS FIR: usando FIR1
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; % ordenf = [0 .25 .25 .6 .6 1]; % respuesta de frecuenciam = [0 0 1 1 0 0];
b1 = fir2(n,f,m); % FIR rectangular window filterh1 = freqz(b1,1,256);plot(f,m,'k'); % Plot: respuesta ideal hold onw = (1:256)/256;plot(w,abs(h1),':r'); % Plot: FIR filterxlabel(' Frequencia Relativa');
title('FIR utilizando FIR2')legend('ideal','FIR')
En este tipo de filtros es necesario recordarque, mientras mayor es el orden del filtro mejor calidad tendrá, es decir, mas vertical será la caída, pero no olvidarque eso requiere de mejor hardware
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
COMPARACIÓN: FILTROS IIR (YULEWALK) Y FIR (FIR2)
Y SU RESPUESTA EN FRECUENCIA
close all; clear all;n = 12; % ordenf = [0 .25 .25 .6 .6 1]; % respuesta de frecuenciam = [0 0 1 1 0 0];[b,a] = yulewalk(n,f,m); % Yule–Walker IIR Filterh = freqz(b,a,256);b1 = fir2(n,f,m); % FIR rectangular window filterh1 = freqz(b1,1,256);plot(f,m,'k'); % Plot: respuesta ideal hold onw = (1:256)/256;plot(w,abs(h),'--b'); % Plot: Yule-Walker filterhold onplot(w,abs(h1),':r'); % Plot: FIR filterxlabel(' 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
Aplicación a un audio: FILTAR UNA CANCIÓN USANDO UN FILTRO FIR
% Obtenemos la señal original (estereo):%archivo original:[y_original,Fs,format] =
wavread('ArjonaOriginal');size(y_original) %2 canales (estereo): 569039
filas por 2columnasplot(y_original) % se verifica dos señales
diferentestitle('señal original (estereo)')% sound(y_original,Fs)
canal_izquierdo_original=y_original(:,1);%extraemos 1 solo canal
size(canal_izquierdo_original) %569039 filas por 1 columnas
figureplot(canal_izquierdo_original)title('señal original canal izquierdo')
%quitar todos los plots%sound(canal_izquierdo_original,Fs) % si
reproduce
El código implementado nos permite extraer canciones para realizar el trabajo.
Como la señal es estereo solo usamos un canal
Es aconsejable usar tonos pequeños de canciones para no hacer muy lento el procesamiento
PRIMER PASO
EXTRACCION DE LAS CANCIONES
SEGUNDO PASOEXTRACCION DEL ESPECTRO DE LAS SEÑALES
nFFT=1024;LongVentana= nFFT/2;Solapamiento =nFFT/4;%Espectro de potencias:% LA FUNCIÓN DE MATLAB pwelch:%[P_welch,F_welch] =
pwelch(canal_izquierdo,LongVentanaHanning,MuestrasTraslapadas,nFFT,fs);
[P_welch_original,F_welch_original] = pwelch(canal_izquierdo_original,LongVentana,Solapamiento,nFFT,Fs);
P_welch_norm_original=P_welch_original/max(P_welch_original);
figureplot(F_welch_original,P_welch_original)grid on
order = 128; % Orden del filtroFmax = Fs/2;wn = [5 3000]/ Fmax; % vector de ftrecuenciasb = fir1(order,wn); % diseño del filtro FIR,
A mas de encontrar el espectro de frecuencias, tambien configuramos el filtro que vamos a usar.
cancion_filtrada = filter (b,1,canal_izquierdo_original);
%Espectro de potencias:
% LA FUNCIÓN DE MATLAB pwelch:%[P_welch,F_welch] =
pwelch(canal_izquierdo,LongVentanaHanning,MuestrasTraslapadas,nFFT,fs);
[P_welch_filtrada,F_welch_filtrada] = pwelch(cancion_filtrada,LongVentana,Solapamiento,nFFT,Fs);
P_welch_norm_filtrada=P_welch_filtrada/max(P_welch_filtrada);
figureplot(F_welch_filtrada,P_welch_filtrada)grid on
figureplot(F_welch_original,P_welch_norm_original)hold onplot(F_welch_filtrada,P_welch_norm_filtrada,'r:')grid on
%sound(y_original,Fs)sound(cancion_filtrada,Fs)
TERCER PASO
COMPARACION DE LOS DOS TIPOS DE FILTRO
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
% 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 pointsfs = 2000; % Sampling filtern = 8; % Filter orderwn = 200/fs/2; % Filter cutoff frequencyrp = 3; % Maximum passband ripple in dbrs = 60; % Stopband attenuation in db%%%Butterworth[b,a] = butter(n,wn); % Determine filter coefficients[h,f] = freqz(b,a,N,fs); % Determine filter spectrumsubplot(2,2,1);h = 20*log10(abs(h)); % Convert to dbsemilogx(f,h,'k'); % Plot on semilog scale%axis([100 1000 -80 10]); % Adjust axis for better visi-% bilityxlabel('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 spectrumsubplot(2,2,2);h = 20*log10(abs(h)); % Convert to dbsemilogx(f,h,'k'); % Plot on semilog scale%axis([100 1000 -80 10]); % Adjust axis for better visibilityxlabel('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 spectrumsubplot(2,2,3);h = 20*log10(abs(h)); % Convert to dbsemilogx(f,h,'k'); % Plot on semilog scale%axis([100 1000 -80 10]); % Adjust axis for better visi-% bilityxlabel('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 spectrumsubplot(2,2,4);h = 20*log10(abs(h)); % Convert to dbsemilogx(f,h,'k'); % Plot on semilog scale%axis([100 1000 -80 10]); % Adjust axis for better visi-% bilityxlabel('Frequency (Hz)'); ylabel('X(f)(db)');title('Elliptic');
Ejemplo de filtros analógicos:
Ver ppt adicional sobre diseño de filtros
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.
1. 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.
2. 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.