巴特沃斯滤波器是三大原型模拟低通滤波器之一,其他的模拟滤波器(如高通、带通和带阻滤波器)可以由三大原型低通滤波器通过简单的频率变换来实现。 MATLAB中,实现巴特沃斯滤波器的命令包括三个:buttord、buttap和butter,各有其用途。 ① buttord:用来求巴特沃斯滤波器的阶数 [N, Wn] = buttord(Wp, Ws, Rp, Rs, 's'):给定通带边界频率Wp和阻带边界频率Ws(rad/s)、通带波动Rp(dB)和最小阻带衰减Rs(dB),求满足指标的模拟低通滤波器的最低阶数N和3 dB边界频率Wn。's'表示模拟域。 ② buttap:用来在给定滤波器阶数时,计算滤波器的零极点和增益因子 [z, p, k] = buttap(N):给定阶数N时,计算归一化的巴特沃斯滤波器的零极点和增益因子,其3 dB的边界频率为1。z是一个空向量,p为N个元素的向量,k为增益因子。系统函数为 ③ butter:在给定阶数和边界频率时,设计滤波器,格式为 [B, A] = butter[N, Wn, 'type', 's']:给定模拟滤波器的阶数N和边界角频率Wn,设计N阶模拟巴特沃斯低通滤波器。计算得到的B和A分别为滤波器的系统函数的分子和分母多项式的系数。当设计低通滤波器时,'type'可缺省。 例1 设计满足如下指标的巴特沃斯模拟低通滤波器 fc = 3000 Hz, fs = 3400 Hz, Rp = 1 dB, Rs = 40 dB 解 MATLAB代码如下 clc; clear; Wc = 2*pi*3000; Wr = 2*pi*3400; Rp = 1; Rs = 40; % 滤波器参数 [N, Wc] = buttord(Wc, Wr, Rp, Rs, 's'); % 计算滤波器阶数和边界频率 [B, A] = butter(N, Wc, 's'); % 设计巴特沃斯低通滤波器 omega = [0:200:8000*pi]; h = freqs(B, A, omega); gain = 20*log10(abs(h)); plot(omega/(2*pi), gain); % 绘制设计的滤波器幅频特性 xlabel('频率/Hz'); ylabel('幅度/dB'); grid on; 运行得到图1。
由运行结果可知,得到的巴特沃斯滤波器阶数是43阶,这是一个相当复杂的滤波器,这是由于滤波器的设计要求较高。如果将“Rp = 1dB, Rs = 40 dB”改为“Rp = 1.5 dB, Rs = 35 dB”,即降低滤波器的设计要求,重新运行后,得到新的滤波器的阶数降为36阶,因而滤波器的复杂度有所降低,并得到新的36阶IIR滤波器的幅频特性,可以看出在通带内两者几乎没有什么不同,但在过渡带内,43阶IIR滤波器下降得更快一些。 原滤波器之所以阶数高达43阶,是因为其通带边界频率Wp和阻带边界频率Ws离得较近,如果将通带边界频率改为fc = 2400 Hz,阻带边界频率保持不变,重新运行代码后,可以得到16阶巴特沃斯低通滤波器,滤波器在通带和阻带的指标保持不变,但是设计的滤波器复杂度大为降低了。滤波器的实际设计指标是根据需要而选择的。 |
|