写在前面:初学者学习这部分内容,要直接上手写代码可能会感到比较困难,我这里推荐一种高效快速的设计IIR,FIR滤波器的方法——MATLAB工具箱:filterDesigner。打开的方法很简单,就是在命令行键入:filterDesigner,就可以打开了。打开以后,界面是这样的:
直接输入设计的参数,想要的类型就可以很快的设计出滤波器了。点击“文件”,还可以生成MATLAB代码。
还有一个很值得介绍的是:MATLAB FTVTool(滤波器可视化工具)
示例:(可视化工具会打卡下面这个窗口)
- b = firls(80,[0 0.11 0.19 1],[1 1 0 0],[1 100]); % Design an FIR filter
- hd = dfilt.dffir(b); % Create the direct-form FIR filter.
- set(hd,'Arithmetic','fixed'); % Quantize filter using 16-bit
- % fvtool(b,hd); % Compare the fixed-point filter with reference
- h1 = copy(hd); % Copy hd to h1
- set(h1,'CoeffWordLength',12); % Use 12 bits for coefficients
- fvtool(hd, h1); % Compare 12-bit & 16-bit filters
(笔记正文)
背景知识
理想滤波器的特性,实际滤波器的妥协
滤波:去除信号中不想要的成分或者增强所需成分
理想与实际的妥协——容许有一定的误差:1.通带可能有波纹;2.阻带可能有非零增益;3.通带和阻带之间可能有过渡带。
FIR vs IIR
FIR:可实现任意幅度和相位响应、可实现线性相位但通常需要较大的阶数𝑀。
IIR:基于模拟滤波器设计而转换得到;通常只能实现频率选择性滤波但通常只需较小的阶数M
IIR数字滤波器的设计
基于模拟滤波器的设计
模拟滤波器的4种就经典类型:
通带阻带都单调的巴特沃斯
通带等波纹,阻带单调的切比雪夫I型(过渡带比巴特沃斯窄)
阻带等波纹,通带单调的切比雪夫II型(过渡带比巴特沃斯窄)
通带阻带都等波纹的椭圆滤波器(过渡带最窄)
IIR数字滤波器设计流程:
预畸变:将关键的频率指标由数字域的𝜔转换为模拟域的Ω
频率转换:若设计高通、带通或带阻,可由原型模拟低通
滤波器𝐻LP(𝑠)通过频率转换得到
低通设计:设计出原型模拟低通滤波器𝐻LP(𝑠)
双线性变换:从模拟𝑠域映射到数字𝑧域
验证:验证所得𝐻(𝑧)的性能
模拟原型低通滤波器:以以巴特沃兹滤波器为例(省略推导过程)
由4个参数作为滤波器指标(或者是通带衰减,阻带衰减rs,rp)
子主题 2
模拟𝑠域的频率变换:从低通到高通、带通、带阻
低通——>高通
低通——>带通
低通——>带阻
双线性变换:从模拟𝑠域到数字𝑧域
目的:从模拟滤波器𝐻(𝑠)映射到数字滤波器𝐻(𝑧)
使用双线性变换前,需对指定频率𝜔 进行预畸变至Ω = 2 tan( 𝜔/2)
IIR滤波器设计案例