滤波器设计(1):经典IIR数字滤波器的设计
2016-11-03 16:09
615 查看
引言
经典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的功能。
相关文章推荐
- 滤波器设计(2):经典FIR数字滤波器的设计
- 滤波器设计(2):经典FIR数字滤波器的设计
- 重读《设计模式》之学习笔记(六)--经典的23种设计模式
- 网站设计:600个经典网站...
- 经典教程翻译系列: 插件的设计
- 10个设计最经典的web2.0网站
- 经典水晶报表设计三则
- 一些经典的Pocket PC界面设计
- 经典水晶报表设计——国际销售合同!
- .NET基础学习:经典水晶报表设计三则
- 网页设计经典色彩搭配
- 经典水晶报表设计——纵向排列 + 多列格式化 + 设置“页边距”……
- 经典水晶报表设计——分栏
- [转]23款经典咖啡机设计
- 博客园设计模式经典汇集
- 经典水晶报表设计——单击表头排序表格
- 经典水晶报表设计——国际销售合同!
- 经典水晶报表设计——去除图表的外框
- 经典文章推荐-DAO设计模式
- 玩弄经典--设计模式