Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TALLER 3
Versión
Filtros digitales
Fecha
Indicaciones:
• El taller deberá ser entregado en la fecha estipulada. Si hay inconvenientes con la entrega para la fecha
indicada se deberá informar con anterioridad.
• La identificación de copia en el taller tendrá una nota de 0.0 para los grupos implicados.
• Este taller hace parte del sexto ítem evaluativo de la asignatura el cual tiene una ponderación de 20% de
la nota final de la asignatura.
Ejercicios
1. (100 Puntos) Calcule la función de transferencia G(z) de un filtro pasa-altas IIR utilizando el comando
bilinear de MATLAB cumpliendo los siguientes parámetros de acuerdo con el rango en que se encuentre
su apellido [1 FILTRO por cada integrante del grupo, si el apellido está en el mismo rango proponer una
modificación al asignado]:
Página 1 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Compare con la gráfica de magnitud obtenida de un filtro pasa-altas análogo con la misma especificación.
[numd,dend]=bilinear(num1,den1,1/T)
Gs=freqz(numd,dend,fs/20,fs);
semilogx(f,20.*log10(abs(Gs)));
fc=300
fs=3000
wc=2*pi*fc;
T=1/fs;
f=1:10:fs/2;
[z,p,k]=buttap(2);
[num,den]=zp2tf(z,p,k);
[num1,den1]=lp2hp(num,den,wc);
[numd,dend]=bilinear(num1,den1,1/T)
Gs=freqz(numd,dend,fs/20,fs);
Página 2 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
semilogx(f,20.*log10(abs(Gs)));
Comparando los dos filtros (análogo y digital) con los mismos parámetros se observa la mayor diferencia en la
banda de transición el digital es más redondeado en la pendiente por lo que el punto de atenuación no coincide en
la misma frecuencia, en mi experiencia con el audio este tipo de filtro (análogo) se usa cuando se busca un corte
mas natural en los sonidos, en cambio los digitales se usan cuando se busca un corte agresivo y mas pronunciado.
[z,p,k]=buttap(3);
Página 3 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
fc=10000
fs=100000
wc=2*pi*fc;
T=1/fs;
f=1:10:fs/2;
[z,p,k]=buttap(3);
[num,den]=zp2tf(z,p,k);
[num1,den1]=lp2hp(num,den,wc);
[numd,dend]=bilinear(num1,den1,100000)
Gs=freqz(numd,dend,fs/20,fs);
semilogx(f,20.*log10(abs(Gs)));
Página 4 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
2. (100 Puntos) Diseñe un código de MATLAB que permita diseñar filtros tipo FIR siguiendo las
siguientes especificaciones:
a. El programa debe pedir al usuario:
• El mínimo rizado permitido en las bandas.
• El tipo de filtro (pasa bajas, pasa altas, pasa bandas o rechaza bandas)
• La frecuencia o frecuencias de corte del filtro seleccionado.
• El ancho de banda de transición normalizada (Δ𝜔),
• Y el tipo de ventana a utilizar entre (Rectangular, Bartlet (triangular), Hamming o Kaiser)
b. Con estos datos usted debe calcular el rizado mínimo en dB (𝛼𝑠), el orden del filtro M y los
demás parámetros de la ventana seleccionada.
c. Finalmente, el filtro debe entregar los M+1 coeficientes del filtro diseñado y la gráfica de la
respuesta del filtro en magnitud y fase.
Observaciones: Cuando de inicia el código pide elegir tipo de ventana puesto que nos basamos en
los códigos de cada ventana proporcionados por el profesor, cada código fue modificado para que
dentro de el pidiera algunos requisitos.
Nota: la ventana mas completa es la rectangular
clear all
clc
%PUNTO 2
clear all
clc
TV=input('Ingrese el tipo de ventana-> Triangular:1, Kaiser:2,
Rectangular:3');
if(TV==1)
%Dise?o de filtro por ventaneo triangular o Bartlet
Página 5 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
subplot(211)
stem(n, ht_LP) %Grafica de coeficinetes del filtro
axis([0 M min(ht_LP) max(ht_LP)])
title(['Respuesta al impulso de el ',num2str(M),'th orden del filtro']);
subplot(212)
HT_LP=fft(ht_LP, 1024); %calcula la transformada de fourier del filtro
w=linspace(-pi, pi, 1024);
plot(w/pi, abs(fftshift(HT_LP))) %grafica la respuesta en frecuencia del
filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M),
'th orden']);
grid
%axis([-1 1 0 max(abs(HT_LP))])
elseif(TV==2)
%Dise?o de filtro FIR usando ventana de Kaiser
rizado=input('ingreseme el rizado minimo:')
alpha=-20*log10(rizado)
BP=0.2*pi;
if (alpha<21)
Beta=0;
M=(5.79/BP)-1;
elseif(alpha>50)
Beta=0.1102*(alpha-8.7);
M=(alpha-7.95)/(2.285*BP);
else
Beta=0.5842*(alpha-21)^0.4+0.07886*(alpha-21)
M=(alpha-7.95)/(2.285*BP);
end
n=0:M;
h_LP=sin(wc*(n-M/2))./(pi*(n-M/2)) %calculo coeficientes funci?n sync
para n/=M/2
h_LP(ceil(M/2))=wc/pi; %calculo coeficiente para n=M/2
subplot(211)
Página 6 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
elseif(TV==3)
if(TP==1)
% Filtro FIR Pasa Bajas rectangular
M=input('Introduzca el orden del filtro:');
%fc=500; %frecuencia de corte en Hert
%fm=5000; %frecuencia de muestreo
wc=input('Introduzca la frecuencia de corte en radianes:');
%wc=(fc/fm)*2*pi;
subplot(311)
stem(n, h_LP)
axis([0 M min(h_LP) max(h_LP)]) %Grafica de los coefieicntes del
filtro
title(['Respuesta al impulso de el ',num2str(M),'th orden del filtro']);
subplot(312)
H_LP=fft(h_LP, 1024); %Calculo transformada de Fourier de la
respuesta del filtro
w=linspace(-pi, pi, 1024); %definicin de las frecuencias
normalizadas
plot(w/pi, abs(fftshift(H_LP))) %Grafica de la respuesta en frecuencia
del filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M),
'th orden']);
Página 7 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
grid
axis([-1 1 0 max(abs(H_LP))])
subplot(313)
plot(w/pi, angle(fftshift(H_LP))) %Grafica de la respuesta en frecuencia
del filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M),
'th orden']);
grid
elseif(TP==2)
subplot(311)
stem(n, h_HP)
axis([0 M min(h_HP) max(h_HP)]) %Grafica de los coefieicntes del
filtro
title(['Respuesta al impulso de el ',num2str(M),'th orden del filtro']);
subplot(312)
H_HP=fft(h_HP, 1024); %Calculo transformada de Fourier de la
respuesta del filtro
w=linspace(-pi, pi, 1024); %definicin de las frecuencias
normalizadas
plot(w/pi, abs(fftshift(H_HP))) %Grafica de la respuesta en frecuencia
del filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M),
'th orden']);
grid
axis([-1 1 0 max(abs(H_HP))])
subplot(313)
plot(w/pi, angle(fftshift(H_HP))) %Grafica de la respuesta en frecuencia
del filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M),
'th orden']);
grid
else
input('Ingrese un valor valido')
end
Página 8 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
end
3. (100 Puntos) Diseñe un filtro pasa bajas FIR utilizando el método de ventaneo cumpliendo con los
parámetros asignados.
subplot(211)
stem(n, ht_LP) %Grafica de coeficinetes del filtro
axis([0 M min(ht_LP) max(ht_LP)])
title(['Respuesta al impulso de el ',num2str(M),'th orden del filtro']);
subplot(212)
HT_LP=fft(ht_LP, 1024); %calcula la transformada de fourier del filtro
w=linspace(-pi, pi, 1024);
plot(w/pi, abs(fftshift(HT_LP))) %grafica la respuesta en frecuencia del
filtro
title(['Respuesta en frecuencia del filtro ventaneado de ',num2str(M), 'th
orden']);
grid
4. (100 Puntos) Se necesita diseñar 4 filtros para separar las componentes de una señal cuya función se
muestra a continuación:
En la siguiente grafica se muestra cada uno de los 4 componentes que se quieren recuperar y en la parte
inferior la señal unificada. Para este punto puede utilizar cualquier método analizado en clase (analítico,
códigos de MATLAB o las herramientas de filter Designer) y cualquier tipo de filtro FIR o IIR.
Página 10 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
t=0:0.1e-6:5.0000e-06*40;
f=-
10*sin(2*pi*200000*t)+5*cos(2*pi*50000*t)+8*sin
(2*pi*100000*t)-4*cos(2*pi*10000*t);
subplot(321)
plot(t,-10*sin(2*pi*200000*t))
subplot(322)
plot(t,5*cos(2*pi*50000*t))
subplot(323)
plot(t,8*sin(2*pi*100000*t))
subplot(324)
plot(t,-4*cos(2*pi*10000*t))
subplot(3,2,[5,6])
plot(t,f)
Página 11 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Nota: Se usa la función compleja dada por el profesor se analiza y posteriormente se filtran las 4
señales individualmente usando el siguiente código.
clear all
clc
t=0:0.1e-6:5.0000e-06*40;
x=-10*sin(2*pi*200000*t)+5*cos(2*pi*50000*t)+8*sin(2*pi*100000*t)-
4*cos(2*pi*10000*t);
subplot(2,1,1),plot(t,x),title('Señal sumada'), grid on;
X=fft(x);
Ts=t(2)-t(1);
Ws=1/Ts;
Wn=Ws/2;
w=linspace(0,Wn,length(t)/2);
Xp=abs(X(1:length(t)/2));
[b1,a1]=butter(n,f1,'low');
sfiltrada=filter(b1,a1,x);%señal filtrada
s1=fft(sfiltrada);
figure (2)
subplot(2,1,1),plot(sfiltrada), title('señal 10k filtrada'), grid on;
w1=linspace(0,Wn,length(t)/2);
X1=abs(s1(1:length(t)/2));
subplot(2,1,2); plot(w1,X1),title('Espectro de señal 10k');
%
%filtrado señal 2 (200000)
[b2,a2]=butter(n2,f2,'high');
sfiltrada_2=filter(b2,a2,x);%señal filtrada
s2=fft(sfiltrada_2);
figure (3)
subplot(2,1,1),plot(sfiltrada_2), title('señal 200k filtrada'), grid on;
Página 12 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
w2=linspace(0,Wn,length(t)/2);
X2=abs(s2(1:length(t)/2));
subplot(2,1,2); plot(w2,X2),title('Espectro de señal 200k ');
[b3,a3]=butter(n3,[f3_min,f3_max],'bandpass');
sfiltrada_3=filter(b3,a3,x);%señal filtrada
s3=fft(sfiltrada_3);
figure (4)
subplot(2,1,1),plot(sfiltrada_3), title('señal 50k filtrada'), grid on;
w3=linspace(0,Wn,length(t)/2);
X3=abs(s3(1:length(t)/2));
subplot(2,1,2); plot(w3,X3),title('Espectro de señal 50k ');
[b4,a4]=butter(n4,[f4_min,f4_max],'bandpass');
sfiltrada_4=filter(b4,a4,x);%señal filtrada
s4=fft(sfiltrada_4);
figure (5)
subplot(2,1,1),plot(sfiltrada_4), title('señal 100k filtrada'), grid on;
w4=linspace(0,Wn,length(t)/2);
X4=abs(s4(1:length(t)/2));
subplot(2,1,2); plot(w4,X4),title('Espectro de señal 100k ');
Página 13 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 14 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 15 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 16 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 17 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
5. (100 Puntos) Se necesita diseñar 2 filtros para separar las componentes de una señal cuyos datos son
grabados en el archivo “senal5.mat” de acuerdo con los siguientes criterios:
• El primer filtro debe separar las 4 últimos componentes. ¿En qué frecuencias están esos 4
componentes?
• El segundo filtro debe separar las 4 componentes anteriores. ¿En que frecuencias se encuentran
esos componentes?
• Las componentes con frecuencias por fuera de los dos anchos de bandas deben de ser atenuados.
Página 18 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Se aplica un filtro pasa altas para atenuar todas las componentes excepto (9,10,11,12).
Página 19 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Se aplica un filtro pasa bandas para atenuar las componentes excepto (5,6,7,8).
B. Despues de cargar la señal ‘senal5.mat’ se escribió el siguiente código para su respectivo filtrado y
graficado.
Página 20 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 21 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Notas: el archivo ‘senal5.mat’ se grafica para ver la señal original en el tiempo, luego se le aplica la función
de transferencia para observar las componentes en función de la frecuencia, sabiendo esto empezamos a
implementar los filtros Butterworth ajustando sus respectivos órdenes y frecuencias de corte.
Página 22 de 23
Código
TALLER 3
Versión
Filtros digitales
Fecha
Página 23 de 23