📄 butterworth.m
字号:
%巴特沃兹Butterworth滤波器的离散滤波算法 模拟程序
%程序设计:刘辉
%pangelaca@yahoo.com.cn (email/msn)
%由于我在柏林工业大学学习,源程序的一些变量名由德语缩写成.(但其实阅读上没有影响)
%各种参数都可以替换,产生不同阶,不同截止频率,不同通带的Butterworth滤波器.
%程序会显示其传递函数,振幅特性曲线,相位特性曲线,冲激响应,阶跃响应等,涉及了信号处理的方方面面.
%将图像显示部分去掉,利用产生的分子系数和分母系数,可以实现直接对任何输入信号的滤波.
%各参数说名:
%fd: 3DB截止频率
%fs: 当下降到as(DB)时的通频
%fT: 采样频率
%as: 下降通频时的截止DB
fd=200;
fs=280;
fT=8000;
as=20;
wd=2*pi*fd;
ws=2*pi*fs;
As= 10^(-as/20);
N=ceil(0.5*log10(As^(-2)-1)/log10(ws/wd));
Ord=0:N-1;
Sx=wd*exp(j*pi*(0.5+1/2/N+Ord/N))
Zx=exp(Sx/fT);
KoefZx=poly (Zx);
k=abs(prod(1-Zx));
vpa(k)
Zahler=zeros(1,N);
Zahler(1)=k;
[Hz,w]=freqz(Zahler,KoefZx,2048);
subplot(3,2,1);
plot (abs(Hz));
title ('幅频特性曲线 |H(z)|');
LogampHz=log(abs(Hz));
subplot(3,2,2);
plot(w,LogampHz);
title ('对数特性曲线 H(z)');
PhaHz=angle(Hz);
subplot(3,2,3);
plot(w,PhaHz);
title ('相位特性曲线');
ImpulsFolge=zeros(1,800);
ImpulsFolge(1)=1;
Impulsantwort=filter(Zahler,KoefZx,ImpulsFolge);
subplot(3,2,5);
bar (Impulsantwort);
title ('冲激响应 h(t)');
SprungFolge=ones(1,800);
Sprungantwort=filter(Zahler,KoefZx,SprungFolge);
subplot(3,2,6);
bar (Sprungantwort);
title ('阶跃响应');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -