问题提出
在前面从电路入手设计滤波器,从原理,方法,逐渐到分析和应用,是为了便于理解滤波器的基本思路。从频域分析中也可以看出,设计出的滤波器或多或少存在缺陷而且可以被控制的要素较少。这主要是因为从简单RC电路出发的滤波器设计就已经存在了局限性,尤其是当需要较高阶的滤波器时,从物理模型出发这个问题就会变得复杂。<br />实际上,数字滤波器的研究已经非常深入,有很多经典的滤波器模型可供选择。有无限长单位冲激响应IIR滤波器,有限长单位冲击响应FIR滤波器,模型有巴特沃斯型滤波器,有切比雪夫型滤波器等等。详细的专业知识在数字信号处理课程中都有涉及。<br />那么如果我们想要设计一个能满足需求的高性能滤波器,必须先要掌握这些专业知识,了解全部原理吗?实际上是不需要的,充分利用数学工具Matlab里面的FilterDesigner工具箱,就可以根据需求迅速生成一个滤波器,通过得到的滤波器系数置于单片机中,迅速投入应用。
打开方式
直接在Matlab的命令行窗口中输入filterDesigner(旧版本称FDAtool),或者在标题栏的APP标签下,信号处理和通信项目栏中找到filterDesigner图标
界面介绍
整个工具箱设计界面分成了七个板块
CurrentFilterInformation: 显示当前设计的滤波器的结构和阶数等基本信息
FilterSpecifications:显示所设计的滤波器的频域响应图,起始界面为设置参数的说明
ResponseType:通过选择设置想要设计的滤波器的类型(低通,高通,带通,带阻…)
DesignMethod:通过选择设置想要设计的滤波器的模型结构(IIR:巴特沃斯,切比雪夫…,FIR: …)
FilterOrder:设置滤波器的阶数(可以选择指定阶数设计,也可以选择通过填入需求自动计算最小阶数设计)
Options:其他选项,会根据DesignMethod的选择出现不同的内容,IIR对应的是贴合方式,选择让滤波器更贴近通 带设置还是阻带设置
FrequencySpecification:频率需求设置,参数涵义可对照FilterSpecifications中的说明理解
MagnitudeSpecifications:幅值需求设置,参数涵义可对照FilterSpecifications中的说明理解
使用流程
设置需求
举例需要设计采样频率fs为100Hz,截止频率fc为20Hz的二阶低通滤波器,采用IIR巴特沃斯滤波器模型,则设置参数如图
参数填写后点击下方的DesignFilter即可自动生成
导出系数
这只是有了一个直观上的认识,那么滤波器中各阶的系数是多少还需要导出
点击标题栏中的File->Export
ExportTo:选择Workspace,导入到工作空间
ExportAs:选择Coefficients,导出系数
VariableName:是设置将系数导入到工作空间后系数的变量名,可以自行设计,但建议保留默认
点击Export,可以在工作区看到生成的两个变量
但是两个参数还不能直接使用,SOS称为二阶分割滤波器系数,它是将自己设计好的滤波器根据Matlab设计需求分割成多个二阶滤波器级联后的,每个二阶滤波器的设计,G是每个二阶滤波器的增益系数。因此需要将这多个二阶滤波器合并,才是我们需要的滤波器。
Matlab提供了进行这种系数转换的函数
[B,A] = sos2tf(SOS,G); %把SOS和G转换为滤波器系数B和A
经过sos2tf函数的处理后就得到了,A和B的滤波器系数向量
A,B系数向量对应关系
由此就得到了滤波器的z域表达式,再按照滤波器设计流程,转换成时域的序列表达式,进而编程,实现了利用Matlab工具箱设计数字滤波器的全过程。