滤波器设计(1):经典IIR数字滤波器的设计

引言

经典IIR(Infiniti Impulse Response)数字滤波器,虽然我在《信号与系统》和《数字信号处理》里学过,但现在已经忘得差不多了。翻翻书,还是能回忆起来。

好像有Butterworth滤波器,ChebyshevI型、II型滤波器、椭圆滤波器,等等。根据通带特性,分为低通、高通、带通、带阻、全通等。

设计方法,如果用手算的话,模拟的好像还要查表,数字的好像是先设计模拟的,再用脉冲响应不变法、双线性变换法设计数字的。

这里有IIR数字滤波器的百度词条,可以看看。


设计步骤

整个设计的步骤大致如下。

1. 根据需求,提出所需滤波器的类型和相应的(模拟)指标;

2. 根据1的指标,转换为数字指标;

3. 求滤波器的阶数;

4. 求滤波器的系数;

5. 根据系数,检验其频率响应是否满足1的需求。如果满足,结束;否则,重新设计。


设计实例

下面给出LPF和HPF的例子。

IIR 低通(Low Pass Filter)

%% 内容:我自己设计的LPF滤波器
% 作者:qcy
% 版本:v1.0
% 时间:2016年10月27日20:13:01

%% 设计一个数字低通滤波器 IIR
% fp = 500 Hz, fs = 750 Hz, Fs = 8000 Hz, Rp = 3 dB, Rs = 50 dB

clear;
close all;
clc

%% 0. 把所有模拟指标变换为数字指标
fp = 500; % Hz
fs = 750;
Fs = 8000;
Fs2 = Fs/2;
Rp = 3;
Rs = 50;

Wp = fp/Fs2; % 注意,这个是对(Fs/2)归一化的频率!!! 量纲为[1]
Ws = fs/Fs2; % 注意,这个是归一化频率!!!

%% 1. Butterworth  --> 最平坦
% (1) 确定阶数
[n,Wn] = buttord(Wp,Ws,Rp,Rs); % Wn 是对(Fs/2)归一化的频率。 量纲为[1]
% (2) 确定系数
[b,a] = butter(n,Wn);
% freqz(b,a,1e4);
[H,w] = freqz(b,a,1e4);
figure;
plot(w/2/pi*Fs,20*log10(abs(H)+eps));

figure
zplane(b,a);

%% 2. Chebyshev II型 --> 阻带等波纹
[n,Wn] = cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(n,Rs,Wn);
[H,w] = freqz(b,a,1e4);
figure;
plot(w/2/pi*Fs,20*log10(abs(H)+eps));

figure
zplane(b,a);

%% 3. Chebyshev I型 --> 通带等波纹
[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs);
[b,a] = cheby1(n,Rs,Wn);
[H,w] = freqz(b,a,1e4);
figure;
plot(w/2/pi*Fs,20*log10(abs(H)+eps));

figure
zplane(b,a);

Butterworth LPF



Chebyshev I LPF --> 因为要设计低通,所以通带等波纹的Chebyshev II型肯定是不行的。如下图。


Chebyshev II LPF。阻带等波纹还可以。



IIR 高通(High Pass Filter)


%% 内容:我自己设计的HPF滤波器
% 作者:qcy
% 版本:v1.0
% 时间:2016年10月27日20:54:10

%% 设计一个数字高通滤波器 IIR
% fp = 200 Hz, fs = 1000 Hz, Fs = 8000 Hz, Rp = 3 dB, Rs = 20 dB

clear;
close all;
clc

%% 0. 把所有模拟指标变换为数字指标
fp = 200; % Hz
fs = 800;
Fs = 8000;
Fs2 = Fs/2;
Rp = 3;
Rs = 20;

Wp = fp/Fs2; % 注意,这个是对(Fs/2)归一化的频率!!! 量纲为[1]
Ws = fs/Fs2; % 注意,这个是归一化频率!!!

%% 1. Butterworth  --> 最平坦
% (1) 确定阶数
[n,Wn] = buttord(Wp,Ws,Rp,Rs); % Wn 是对(Fs/2)归一化的频率。 量纲为[1]
% (2) 确定系数
[b,a] = butter(n,Wn,'high');
% freqz(b,a,1e4);
[h,w] = freqz(b,a,1e4);
figure(1);
plot(w/2/pi*Fs,20*log10(abs(h)+eps));

%% 2. Chebyshev II型 --> 阻带等波纹
[n,Wn] = cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(n,Rs,Wn,'high');
[h,w] = freqz(b,a,1e4);
figure(2);
plot(w/2/pi*Fs,20*log10(abs(h)+eps));

%% 3. Chebyshev I型 --> 通带等波纹
[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs);
[b,a] = cheby1(n,Rs,Wn,'high');
[h,w] = freqz(b,a,1e4);
figure(3);
plot(w/2/pi*Fs,20*log10(abs(h)+eps));


Chebyshev I LPF --> 因为要设计高通,所以阻带等波纹的Chebyshev I型是不行的。
阻带等波纹,相当于是会有很多低频也能通过HPF。明显不能实现HPF的功能。

  • 10
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qcyfred

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值