3设计数字滤波器
3.1 数字滤波器设计的基本思路
数字滤波器的实现有两个关键步骤:一个从数字域到模拟域间的变换,这个变换实现了数字滤波器技术指标到模拟滤波器技术指标的转换,同样也实现了模拟滤波器系统函数到数字滤波器系统函数的转换;另一个是从模拟滤波器技术指标到满足该指标的模拟滤波器的设计。
3.2 模拟滤波器概述
用模拟—数字变换法设计IIR数字滤波器,首先必须设计一个模拟滤波器,它有许多不同的类型,主要有以下两种类型:
(1)、巴特沃思(Botterworth简写BW)滤波器。BW滤波器是根据幅频特性在通带内具有最拼图特性而定义的滤波器,对一个N阶低通滤波器来说,所谓最平坦特性就是模拟函数的前(2N-1)阶导数在??0处都为零。BW滤波器的另一个特性是在通带和阻带内的幅频特性始终是频率的单调下降函数,且其模拟函数随阶次N 的增大而更接近于理想低通滤波器。
(2)、切比雪夫(Chbyshev简写为CB)滤波器。CB低通滤波器的模拟函数由切比雪夫多项式定义,且在通带内的幅频响应是波动的,在阻带则单调变化。
3.3设计IIR滤波器
目前IIR数字滤波器设计的最通用的方法是借助于模拟滤波器的设计方法。模拟滤波器设计已经有了一套相当成熟的方法,它不但有完整的设计公式,而且还有较为完整的图表供查询,因此,充分利用这些已有的资源将会给数字滤波器的设计带来很大方便。IIR数字滤波器的设计步骤是:
(1)、按一定规则将给出的数字滤波器的技术指标转换为模拟低通滤波器的技术指标;
(2)、根据转换后的技术指标设计模拟低通滤波器G?s?; (3)、再按一定规则将G(s)转换成H(z)。
若设计的数字滤波器是低通的,那么上述设计工作可以结束,若所设计的是高通,带通或带阻滤波器,那么还有步骤(4): (4)、将高通、带通、或带阻数字l不去的技术指标先转化为低通模拟滤波器的技术指标,然后按照上述步骤(2)设计出低通G?s?,再将G?s?转换为所需的H(z)。
利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。 (3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。
程序如下:
Ft=8000; Fp=1000; Fs=1200;
wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft; fp=2*Ft*tan(wp/2); fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,’s’); [b11,a11]=butter(n11,wn11,’s’); [num11,den11]=bilinear(b11,a11,0.5); [h,w]=freqz(num11,den11); figure;
plot(w*8000*0.5/pi,abs(h));
legend(‘IIR低通滤波器’,’Location’,’NorthWest’); grid;
程序结果如下图:
3.2验证所设计的滤波器:
为了验证滤波器的可使用性,我们用常用的sin函数来进行验证。其具体程序及运行结果如下:
t=[0:1/1023:1]; s=sin(2*pi*t); N=length(s); y=s+0.5*rand(1,N); subplot(2,1,1); plot(y);
title('加噪语音信号的时域波形','fontweight','bold'); S=fft(y); subplot(2,1,2); plot(abs(S));
title('加噪语音信号的频域波形','fontweight','bold'); Ft=8000; Fp=1000; Fs=1200; wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft;
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率 [b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
z11=filter(num11,den11,s); sound(z11);
m11=fft(z11); %求滤波后的信号 figure; subplot(2,2,1); plot(abs(S),'g');
title('滤波前信号的频谱','fontweight','bold');
grid;
subplot(2,2,2); plot(abs(m11),'r');
title('滤波后信号的频谱','fontweight','bold'); grid;
subplot(2,2,3); plot(y);
title('滤波前信号的波形','fontweight','bold'); grid;
subplot(2,2,4); plot(z11);
title('滤波后的信号波形','fontweight','bold'); grid; 程序结果如下图:
由所得结果可知,所设计的滤波器符合要求。
4 滤波