butterworth滤波器,设计方法:
(1)双线性变换法;(2)冲激响应不变法
buttord函数,输入参数为归一化参数,wp,ws,rp,rs,‘z’,,输出为butterworth滤波器的阶数以及3dB截止频率,n,Wn
butter函数,,升成一个n阶的巴特沃斯滤波器,输入参数为n,Wn,为buttord的输出参数,输出为滤波器系数,,即filter(B,A,x)中的B和A
freqz函数,生成滤波器频率响应函数,返回幅值响应H和相位响应W
%Butterworth滤波器的设计
%技术指标:通带截止频率wp=30hz,阻带截止频率ws=35hz。
%通带衰减不大于Rp=0.5dB,阻带衰减不小于Rs=40dB,抽样频率Fs=100hz。
wp=30;ws=35;Fs=100;rp=0.5;rs=40;%按技术要求依次定义就完事
[n,Wn]=buttord(wp/(Fs/2),ws/(Fs/2),rp,rs,'z');%计算butterworth滤波器的阶数以及3dB截止频率
%buttord函数中的wp与ws均为归一化值,取值范围在[0 , 1]之间
[num,den]=butter(n,Wn);%butter为生成一个n阶的巴特沃斯滤波器,Wn为3dB截止频率
%butter输出为滤波器系数,即filter(B,A,x)中的B和A
[H,W]=freqz(num,den);%freqz是滤波器频率响应函数,分别返回幅值响应和相位响应
plot(W*Fs/(2*pi),abs(H));grid;
xlabel('频率/Hz');
ylabel('幅值');
设计数字带通滤波器,具有通带波纹特性,顾为切比雪夫I型滤波器,阻带波纹为II型
cheb1ord函数,类似buttord函数,返回阶数和3dB带宽截止频率,R2016a中没自带该函数,,,
cheby1函数,类似butter,生成一个切比雪夫I型滤波器,,
freqz,频率响应函数
%设计一个数字带通滤波器IIR
%要求在100~200Hz通带内波纹不大于3dB,通带两边各50Hz外是阻带,衰减不小于40dB。抽样频率为1000Hz
%由于切比雪夫I型滤波器为通带波纹控制器,故选其设计该数字滤波器
Wp=[100 200]/500;Ws=[100-50 200+50]/500;
Rp=3;Rs=40;
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);%matlab里没有自带数字信号处理的函数。。。
[b,a]=cheby1(N,Rp,Wn);
freqz(b,a,512,1000);
title('Chebyshev Type I Bandpass Fitler');
axis([0,500,-80,0]);
捕捉信息,等波纹阻带,选用切比雪夫II型滤波器
用频率变换法设计切比雪夫II型滤波器
cheb2ord,cheby2函数,,均同理buttord,cheb1ord,butter,cheby1函数
dir2cas函数,,直接型转级联型
有点问题,,%Filter order too large???
%xa(t)=5sin(200pi*t)+2cos(300pi*t),xa(t)→A/D→H(z)→D/A→ya(t)
%采样频率为1000Hz。试设计一个最小阶数的IIR数字滤波器
%以小于1dB的衰减通过150Hz的分量,以至少40dB抑制100Hz的分量。
%由题意用频率变换法设计切比雪夫2型数字高通滤波器
fp=150;fr=100;fs=1000;
wp=2*pi*fr/fs;wr=2*pi*fr/fs;%计算通/阻带的归一化频率
Ap=1;Ar=40;
[N,wn]=cheb2ord(wp/pi,wr/pi,Ap,Ar);
[b,a]=cheby2(N,Ar,wn,'high');%Filter order too large?Hape
[C,B,A]=dir2cas(b,a);
[db,mag,pha,w]=freqz_m(b,a);
subplot(411);plot(w/pi,db);title('幅度响应(dB)');
axis([0,1,-50,7]);grid on;
n=0:149;t=n/fs;
x=5*sin(2*pi*fr*t)+2*cos(2*pi*fp*t);
subplot(412);plot(t,x);axis([0,0.15,-7,7]);title('输入信号');grid on;
y=filter(b,a,x);
subplot(413);stem(y,'.');title('输出序列');grid on;
ya=y*sinc(fs*(ones(length(n),1)*t-(n/fs)'*ones(1,length(t))));
subplot(414);plot(t,ya);axis([0,0.15,-2,2]);title('输出波形');grid on;