资源描述:
《数字滤波器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字滤波器的设计与实现1.数字滤波器的设计参数滤波器的4个重要的通带、阻带参数为::通带截止频率(Hz):阻带起始频率(Hz):通带内波动(dB),即通带内所允许的最大衰减;:阻带内最小衰减设采样速率(即奈奎斯特速率)为,将上述参数中的频率参数转化为归一化角频率参数::通带截止角频率(rad/s),;:阻带起始角频率(rad/s),通过以上参数就可以进行离散滤波器的设计。l低通滤波器情况:采样频率为8000Hz,要求通带截止频率为1500Hz,阻带起始频率为2000Hz,通带内波动3dB,阻带内最小衰减为50dB,则=1500/4000,=2000/4000,=3dB,=50d
2、B。l高通滤波器情况:采样频率为8000Hz,要求通带截止频率为1500Hz,阻带起始频率为1000Hz,通带内波动3dB,阻带内最小衰减为65dB,则=1500/4000,=1000/4000,=3dB,=65dB。l带通滤波器情况:采样频率为8000Hz,要求通带截止频率为[800Hz,1500Hz],阻带起始频率为[500Hz,1800Hz],通带内波动3dB,阻带内最小衰减为45dB,则=[800/4000,1500/4000],=[500/4000,1800/4000],=3dB,=45dB。l带阻滤波器情况:采样频率为8000Hz,要求通带截止频率为[800Hz,1
3、500Hz],阻带起始频率为[1000Hz,1300Hz],通带内波动3dB,阻带内最小衰减为55dB,则=[800/4000,1500/4000],=[1000/4000,1300/4000],=3dB,=45dB。2.巴特沃斯滤波器设计1)巴特沃斯滤波器阶数的选择:在已知设计参数,,,之后,可利用“buttord”命令可求出所需要的滤波器的阶数和3dB截止频率,其格式为:[n,Wn]=buttord[Wp,Ws,Rp,Rs],其中Wp,Ws,Rp,Rs分别为通带截止频率、阻带起始频率、通带内波动、阻带内最小衰减。返回值n为滤波器的最低阶数,Wn为3dB截止频率。2)巴特沃斯
4、滤波器系数计算:由巴特沃斯滤波器的阶数n以及3dB截止频率Wn可以计算出对应传递函数H(z)的分子分母系数,MATLAB提供的命令如下:l巴特沃斯低通滤波器系数计算:[b,a]=butter(n,Wn),其中b为H(z)的分子多项式系数,a为H(z)的分母多项式系数l巴特沃斯高通滤波器系数计算:[b,a]=butter(n,Wn,’High’)l巴特沃斯带通滤波器系数计算:[b,a]=butter(n,[W1,W2]),其中[W1,W2]为截止频率,是2元向量,需要注意的是该函数返回的是2*n阶滤波器系数。l巴特沃斯带阻滤波器系数计算:[b,a]=butter(ceil(n/2
5、),[W1,W2],’stop’),其中[W1,W2]为截止频率,是2元向量,需要注意的是该函数返回的也是2*n阶滤波器系数。1.巴特沃斯滤波器设计实例1)采样速率为8000Hz,要求设计一个低通滤波器,=2100Hz,=2500Hz,=3dB,=25dB。程序如下:fn=8000;fp=2100;fs=2500;Rp=3;Rs=25;Wp=fp/(fn/2);%计算归一化角频率Ws=fs/(fn/2);[n,Wn]=buttord(Wp,Ws,Rp,Rs);%计算阶数和截止频率[b,a]=butter(n,Wn);%计算H(z)分子、分母多项式系数[H,F]=freqz(b,
6、a,1000,8000);%计算H(z)的幅频响应,freqz(b,a,计算点数,采样速率)subplot(2,1,1)plot(F,20*log10(abs(H)))xlabel(‘Frequency(Hz)’)ylabel(‘Magnitude(dB)’)title(‘低通滤波器’)axis([04000-303])gridonsubplot(2,1,2)pha=angle(H)*180/piplot(F,pha)gridon运行结果如下:·2)采样速率为8000Hz,要求设计一个高通滤波器,=1000Hz,=700Hz,=3dB,=20dB。程序如下:fn=8000;fp
7、=1000;fs=700;Rp=3;Rs=20;Wp=fp/(fn/2);%计算归一化角频率Ws=fs/(fn/2);[n,Wn]=buttord(Wp,Ws,Rp,Rs);%计算阶数和截止频率[b,a]=butter(n,Wn,’high’);%计算H(z)分子、分母多项式系数[H,F]=freqz(b,a,1000,8000);%计算H(z)的幅频响应,freqz(b,a,计算点数,采样速率)subplot(2,1,1)plot(F,20*log10(abs(H)))axis([0400