Vous êtes sur la page 1sur 32

EFECTO DE UN

SLI
SOBRE LA ENTRADA

FILTROS DIGITALES
(RECORDANDO)
MODELADO DE SISTEMAS
EN TIEMPO CONTINUO
Generalizacin para sistemas continuos

Ecuacin diferencial para un SLI: en orden descendente

Laplace: en orden descendente

Fourier: en orden descendente ( S = jw )


MODELADO DE SISTEMAS
EN TIEMPO DISCRETO
GENERALIZACIN PARA SISTEMAS DISCRETOS:

Asumiendo a(1) = 1

Ecuacin en diferencias para un SLI.


Salida = f ( entradas actual y pasadas , salidas pasadas )

PERO ..

Qu efecto produce un SLI sobre una entrada X[n] ?


Para responder, hagamos el siguiente ejercicio:

Ejercicio: Encuentre la seal de salida de los SLIs (a) y (b).


Utilizar como entrada una seal sinusoidal de 3 Hz con ruido

Seal + 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];
RESOLUCIN:
Seal + 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];
clear all Fs = 100;
close all t = 0:1/Fs:1;
Fs = 100;
x = sin(2*pi*t*3)+.25*rand*sin(2*pi*t*40); % seal + ruido
t = 0:1/Fs:1; plot(t,x)
x = sin(2*pi*t*3)+.25*rand*sin(2*pi*t*40); % seal + ruido
plot(t,x) % condiciones iniciales para el lazo de abajo
y(1)=x(1);
y(1)=x(1); % condicin inicial para el lazo de abajo y(2)=x(2);
for i=2:length(t)
y(i)=0.9*y(i-1)+0.1*x(i);
for i=3:length(t)
end y(i)=0.9*y(i-1)+0.05*x(i)+0.05*x(i-1);
end
plot(t,x) plot(t,x,t,y) % comparacin de entrada y salida
hold on
plot(t,y) % comparacin de entrada y salida
%Coinciden en los dos primeros valores:
%Coinciden en el primer valor:
Qu efecto produce un SLI sobre una entrada X[n] ?

Respuesta:
El SLI est suavizando a la entrada.
Entonces:
El SLI est actuando como un filtro digital .
GENERALIZACIN DE UN SISTEMA DISCRETO VISTO COMO FILTRO DIGITAL:

Asumiendo a(1) = 1 Salida = f ( entradas actual y pasadas , salidas pasadas )

Clculo de la salida, asumiendo condiciones iniciales = 0:

En matlab, esto es computado por la funcin FILTER


Representaciones grficas:

TRABAJA SOBRE LA FORMA DIRECTA TRANSPUESTA II:


LA FUNCIN FILTER: para evitar los clculos anteriores

TRABAJA SOBRE LA FORMA DIRECTA TRANSPUESTA II:

A = [a1 a2 ... an]; B = [b1 b2 ... bn] FILTER:


Y = filter (B, A, X) Dados A, B y X:
Y = filter (B, A, X, C.I) Obtiene la salida Y
LA FUNCIN FILTER: detalles de cmo trabaja?

A = [a1 a2 ... an]; B = [b1 b2 ... bn] FILTER:


Y = filter (B, A, X) Dados A, B y X:
Y = filter (B, A, X, C.I) Obtiene la salida Y
VISIN GLOBAL DE FILTROS DIGITALES CON MATLAB

Tanto los filtro FIR como IIR, pueden ser diseados en tres fases:
Fase 1: determinacin del orden del filtro requerido segn
condiciones de diseo (rizados, frecuencias de corte, etc).
Fase 2: determinacin de los coeficientes del filtro (funciones segn
el filtro a utilizar (yulewalk, remez, butter, etc)).
Fase 3: aplicacin de los parmetros anteriores al clculo de la salida
del filtro (funciones filter y filfilt).

- En esta vez solo veremos el diseo de filtros digitales desde la fase


2 asumiendo conocido el orden del filtro.
- En filtros IIR analgicos: s veremos desde la fase 1.
FUNCIONES DE MATLAB
PARA EL DISEO DE FILTROS IIR

IIR:
a) Filtro IIR digital (solo desde fase 2):
Fase 1: se conoce ya el orden del filtro (n)
Fase 2: clculo de los coeficientes: utilizar la siguiente instruccin:
[b,a] = yulewalk(n,f,m); % YuleWalker IIR Filter
Fase 3: salida del filtro utilizando los coeficientes calculados anteriormente:
x_filt=filter(b,a,x); % x: la seal a filtrar ; b,a: los coeficientes del filtro

b) Filtros IIR analgicos (desde fase 1):


Fase 1: El orden del filtro se calculara as segn el tipo de filtro a utilizar:
DISEO DE FILTROS IIR digitales

Clculo de coeficientes:
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)
Cul es la respuesta en frecuencia del filtro obtenido??? :
FREQZ:
Da la respuesta en frecuencia evaluada en N puntos (defecto:512)
equiespaciados de la mitad superior del crculo unidad
Fs: frec. muestreo
Freqz (B, A, N, Fs): Grafica el (mdulo y la fase) vs frecuencia
Ejercicio:

Disee un filtro multibanda con yulewalk y


grafique la respuesta de frecuencia deseada y
real.
Resolucin:

Disee 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


Diagrama de Bode:

% Obs: respuesta en mdulo: Filtro multibanda


% Obs: respuesta en fase: No Lineal
FILTROS IIR ANALGICOS:

CON FASE 1:

SIN FASE 1:
% Example: sin fase 1: %Chebyshev Type I
% Plot the frequency response curves [b,a] = cheby1(n,rp,wn); % Determine filter coefficients
% (in db) obtained from [h,f] = freqz(b,a,N,fs); % Determine filter spectrum
% an 8th-order lowpass filter using the Butterworth, subplot(2,2,2);
%Chebyshev Type I and II, and h = 20*log10(abs(h)); % Convert to db
% elliptic filters. Use a cutoff frequency of 200 Hz and semilogx(f,h,'k'); % Plot on semilog scale
% assume a sampling frequency %axis([100 1000 -80 10]); % Adjust axis for better visibility
% of 2 kHz. For all filters, the passband ripple should xlabel('Frequency (Hz)'); ylabel('X(f)(db)');
% be less than 3 db title('Chebyshev I');
% and the minimum stopband attenuation should be 60 db. %

% Frequency response of four 8th-order lowpass filters % Chebyshev Type II


% [b,a] = cheby2(n,rs,wn); % Determine filter coefficients
N = 256; % Spectrum number of points [h,f] = freqz(b,a,N,fs); % Determine filter spectrum
fs = 2000; % Sampling filter subplot(2,2,3);
n = 8; % Filter order h = 20*log10(abs(h)); % Convert to db
wn = 200/fs/2; % Filter cutoff frequency semilogx(f,h,'k'); % Plot on semilog scale
rp = 3; % Maximum passband ripple in db %axis([100 1000 -80 10]); % Adjust axis for better visi-
rs = 60; % Stopband attenuation in db % bility
% xlabel('Frequency (Hz)'); ylabel('X(f)(db)');
% title('Chebyshev II');
%Butterworth % Elliptic
[b,a] = butter(n,wn); % Determine filter coefficients [b,a] = ellip(n,rp,rs,wn); % Determine filter coefficients
[h,f] = freqz(b,a,N,fs); % Determine filter spectrum [h,f] = freqz(b,a,N,fs); % Determine filter spectrum
subplot(2,2,1); subplot(2,2,4);
h = 20*log10(abs(h)); % Convert to db h = 20*log10(abs(h)); % Convert to db
semilogx(f,h,'k'); % Plot on semilog scale semilogx(f,h,'k'); % Plot on semilog scale
%axis([100 1000 -80 10]); % Adjust axis for better visi- %axis([100 1000 -80 10]); % Adjust axis for better visi-
% bility % bility
xlabel('Frequency (Hz)'); ylabel('X(f)(db)'); xlabel('Frequency (Hz)'); ylabel('X(f)(db)');
title('Butterworth'); title('Elliptic');
%
Ejemplo de filtros analgicos:
Ver ppt adicional sobre diseo de filtros
FUNCIONES DE MATLAB
PARA EL DISEO DE FILTROS FIR

FIR: Ventaja: son de fase lineal. Desventaja: requieren orden MAYOR que los IIR

Filtro digital (solo desde fase 2):


Fase 1: se conoce ya el orden del filtro (n)
Fase 2: clculo de los coeficientes: utilizar las siguientes posiblidades segn 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 seal a filtrar ; b,a=1: los coeficientes del filtro


EJEMPLO FILTROS FIR: usando FIR1

% Disee 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); % diseo 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');
DISEO 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')
OTRAS FUNCIONES DE MATLAB PARA FILTROS FIR
Ventaja: son de fase lineal. Desventaja: requieren orden MAYOR que los IIR

Clculo de coeficientes:

FASE 1
COMPARACIN: 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); % YuleWalker 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(Comparacin entre IIR y FIR del mismo orden')


legend('ideal','IIR','FIR')

%CONCLUSIN:

%FIR requieren orden MAYOR que los IIR


EJERCICIOS (I):

1. Crear una seal constituida por una chirp de frecuencias


(0-500 Hz) (en 2 seg), graficarla tanto en el tiempo como
en frecuencia.
Filtrar de modo que solamente se permita el paso a la
mitad baja de las frecuencias.
Repetir de modo que se permita solamente el paso de la
segunda mitad.
Repetir de modo que solo pasen las frecuencias entre
200 y 300 Hz.
2. Utilizar filtros para las seales bat y handel
SEAL CHIRP: (ver help chirp)
% 2 secs de chirp muestreada a 1kHz % 2 secs de chirp muestreada a 1kHz
% Inicie en DC y alcance 150Hz en t=1sec % Inicie en 100 Hz y alcance 200Hz en t=1sec
t=0:0.001:2; t=0:0.001:2;
y=chirp(t,0,1,150); figure; plot(t,y)
y=chirp(t,100,1,200); figure; plot(t,y)
Figure; specgram(y,256,1E3,256,250); figure; specgram(y,128,1E3,128,120);
SEAL murcilago:
% seal de murcilago: % load handel
% grabada con una frecuencia de muestreo de 230.4 kHz % sound(y,Fs)
%
close all;
clear all; % t=(0:length(y)-1)/Fs;
% plot(t,y)
load bat
sound(bat,23400)
t0=linspace(0,2500/2304,2500);
plot(t0,bat); xlabel('Time [ms]');
EJERCICIOS (II):

Estudiar el efecto del eco y decir si es o no factible eliminarlo


utilizando filtros.

Procedimiento:
- Comparar el espectro de potencias de las dos seales.
- Hacer un ecualizador de modo que el espectro de
potencias de la seal con eco se aproxime al espectro de
potencias de la seal sin eco.
- Se pudo quitar el eco?
TRABAJOS BIMESTRALES:

Realizar filtros FIR sin utilizar las funciones de Matlab (Remez)


Realizar filtros IIR sin utilizar las funciones de Matlab (Yule-Walker)
Efectos en tiempo real (I):
- Hablar por el micrfono y generar eco por los altavoces

Efectos en tiempo real (II):


- Hablar por el micrfono y distorsionar el sonido en los altavoces

Eliminacin de eco:
- Poner eco y luego quitarlo.
- Grabar sonido en una habitacin vaca: quitar eco.

Vous aimerez peut-être aussi