用双线性法设计巴特沃斯高通数字滤波器

%用双线性法设计巴特沃斯高通数字滤波器
clear all;  clc;   close all
fs=120;            T=1/fs;
rp=1;              rs=30;
Wp=0.35*pi;        Ws=0.65*pi;     %数字滤波器指标
wp=2*tan(Wp/2)/T;  ws=2*tan(Ws/2)/T;     
%预畸变,将数字滤波器的指标变为模拟滤波器的指标
[N,w]=buttord(wp,ws,rp,rs,’s’);            %求滤波器阶数和3dB截止频率
[Z,P,K]=buttap(N);                         %设计模拟低通滤波器
[Md,Nd]=zp2tf(Z,P,K);                      %将零极点形式转换为传输函数形式
[M,N]=lp2hp(Md,Nd,w);                      %对低通滤波器进行频率变换
[h,w]=freqs(M,N,512);                      %模拟滤波器的幅频响应
subplot(2,1,1);plot(w,abs(h));   grid;       
xlabel(‘Hz’);ylabel(‘幅度’); title(‘模拟高通滤波器’);
[Mh,Nh]=bilinear(M,N,1/T);                 %对模拟滤波器双线性变换
[h1,w1]=freqz(Mh,Nh);                      %数字滤波器的幅频响应
subplot(2,1,2);
plot(w1/pi,20*log10(abs(h1)));   grid;
xlabel(‘ω/π’);ylabel(‘幅度(dB)’); title(‘数字高通滤波器’);

                      %图-5  模拟滤波器与设计的滤波器的单位冲击响应
k=0:2000; k2=1:1001;
x=10*sin(pi/10*k/fs)+5*sin(10*pi*k/fs)+3*sin(30*pi*k/fs);
figure
subplot(2,1,1)
X=fft(x)*2/2001;
y=filter(Mh,Nh,x);
plot(k,y); ylim([-5 5]); title(‘高通数字滤波器输出’);
Y=fft(y)*2/2001;
df=fs/2001; ff=(k2-1)*df;
subplot(2,1,2); plot(ff,abs(X(k2)),’r',’linewidth’,2); hold on
plot(ff,abs(Y(k2)),’b'); title(‘输入输出频谱比较’); grid;

1 条评论 »

  1. 有朋自远方来 Said,

    九月 27, 2009 @ 10:46 下午

    x=10*sin(pi/10*k/fs)+5*sin(10*pi*k/fs)+3*sin(30*pi*k/fs);
    f1=1/20; f2=5; f3=15;
    从输出频谱比较来看, f3=15没有被过滤掉…
    在你设计的高通滤波器的截止频率是147Hz?1147和1/20Hz,5Hz,15Hz相比..我在这点想不明白…
    可否解释一下…我会收藏你的博客

留下评论

You must be logged in to post a comment.