📄 filter_design.m
字号:
clc;
clear all;
ws1 = 6/60*2*pi;
ws2 = 8/60*2*pi;
wp1 = 5/60*2*pi;
wp2 = 9/60*2*pi;
Omega_s1 = tan (ws1/2);
Omega_s2 = tan (ws2/2);
Omega_p1 = tan (wp1/2);
Omega_p2 = tan (wp2/2);
B = Omega_p2 - Omega_p1;
Omega_sq= Omega_p2* Omega_p1;
s = tf('s');
H = (1/(1+((s/(1.1199))^12)));
H_poles = pole(H);
H_left_poles = H_poles(1:6);
disp('The poles lying in the left-hand plane are:');
disp(H_left_poles)
disp(' ');
disp(' ');
K = 1.1199^6;
disp('K =')
disp(K)
H_analog_lowpass= zpk([],H_left_poles,K);
disp(' ');
disp(' ');
disp('The T.F. for analog LPF is:')
H_analog_lowpass
disp(' ');
disp(' ');
%calculating the coefficients of den of H_analog_lowpass
[H_analog_lowpass_num,H_analog_lowpass_den,dummy]= tfdata(H_analog_lowpass,'v');
%realising H_analog_lowpass as three seperate filters in cascade (this will
%ease the substitution required in the 7th part)
H1= zpk([],H_left_poles(1:2),1)
H2= zpk([],H_left_poles(3:4),1);
H3= zpk([],H_left_poles(5:6),1);
[H1_num,H1_den,dummy]= tfdata(H1,'v');
[H2_num,H2_den,dummy]= tfdata(H2,'v');
[H3_num,H3_den,dummy]= tfdata(H3,'v');
q=((B*s)/(s^2+Omega_sq));
% reverting to analog bandpass from analog lowpass.
H1_actual= 1/( (q^2) + (q*H1_den(2)) + H1_den(3) );
H1_actual = minreal(H1_actual);
H2_actual= 1/( (q^2) + (q*H2_den(2)) + H2_den(3) );
H2_actual = minreal(H2_actual);
H3_actual= 1/( (q^2) + (q*H3_den(2)) + H3_den(3) );
H3_actual = minreal(H3_actual);
disp('7) Analog Transfer for the appropriate filter:');
H_actual = H1_actual * H2_actual * H3_actual * K
disp(' ');
disp(' ');
z=tf('z');
r=((B*((z-1)/(z+1)))/(((z-1)/(z+1))^2+Omega_sq));
H1_discrete= 1/( (r^2) + (r*H1_den(2)) + H1_den(3) );
H1_discrete = minreal(H1_discrete);
H2_discrete= 1/( (r^2) + (r*H2_den(2)) + H2_den(3) );
H2_discrete = minreal(H2_discrete);
H3_discrete= 1/( (r^2) + (r*H3_den(2)) + H3_den(3) );
H3_discrete = minreal(H3_discrete);
disp('8) Discrete Time Filter Transfer Function: ')
H_discrete = H1_discrete * H2_discrete * H3_discrete * K
[H_discrete_num,H_discrete_den,dummy]= tfdata(H_discrete,'v');
[a,b]=freqz(H_discrete_num,H_discrete_den);
plot(b,abs(a));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -