信号处理——MATLAB下的IIR滤波器设计

    

    上帖中有我的一个试验分享,介绍了IIR和FIR数字滤波器的设计,在这篇博客中我想详细的介绍一下IIR滤波器的设计过程。(以Butterworth滤波器为例)

    一、MATLAB IIR LP AF(Butterworth)

    首先明确几个指标:

    (1)通带上限截止频率;
(2)阻带下限截止频率;
(3)通带允许{zd0}衰减;
(4)阻带允许最小衰减。

    这是计算模拟滤波器:

指标C和N的前提;手动计算,及使用已知的四个指标组合为方程组计算C与N,通带{zd0}衰减为3dB时,C为1;使用MATLAB函数buttord可计算阶次N以及3dB处频率如下:

% iir1
% 通带截止频率3400Hz
% 阻带截止频率4000Hz
% 原题没有给出采样率,假设为10000Hz
% 频率参数单位对于模拟滤波器为rad/s
fp = 3400;
fs = 4000;
Fs = 10000;
wp = 2*pi*fp/Fs;
ws = 2*pi*fs/Fs;
wp = tan(wp/2);
ws = tan(ws/2);
% 通带{zd0}衰减为3dB,阻带最小衰减为40dB
[N, wn] = buttord(wp, ws, 3, 40, 's');
% 模拟低通滤波器极零点
[z, p, k] = buttap(N);
% 由极零点获得转移函数参数
[b, a] = zp2tf(z, p, k);
% 由原型滤波器获得实际低通滤波器
[B, A] = lp2lp(b, a, wp);

    二、AF to DF

    方法有冲击相应不变法以及双线性z变换法。冲击相应不变法,根据s平面到z平面的映射规则,其不可避免的就是求得数字滤波器幅频特性在模拟滤波器幅频特性周期扩展叠加的频谱混叠,只适用于低通、带通并且采样率较高的情况。
双线性z变换法根据正切函数的固有特性,使s平面往z平面映射时只映射一次,避免了频谱的混叠。下面使用双线性z变换法获得数字滤波器。

% iir2
[bz, az] = bilinear(B, A, .5);
[h, w] = freqz(bz, az, 256, Fs);
plot(w, 20*log10(abs(h)))
grid on
figure
plot(w, abs(h))
grid on

滤波器如下,为了显示衰减情况,绘制对数纵轴:

实际滤波器频率响应如上图。

对于HP、BP、DS滤波器,需要进行频率转换,lamda = f(n),然后同样进行上面的程序,只是从原型滤波器转换为实际滤波器时分别使用lp2hp,lp2bp,lp2bs函数

未尽之处,欢迎大家探讨。



郑重声明:资讯 【信号处理——MATLAB下的IIR滤波器设计】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——