Matlab中继承了可视化的滤波器设计插件fdatool,可以方便地在可视化界面中设计滤波器参数,然后导出参数,以备后续使用。
首先:
在命令窗口输入fdatoo命令打开滤波器设计界面:
在界面中输入目标滤波器的参数后点击下方的Design Filer按钮进行参数计算,设计完成后上方会出现滤波器的幅频响应(在菜单栏中的Analyse可以选择其他分析选项)
当我们需要保存该滤波器以备后续调用时,点击File-Export,出现导出选项窗口。其中的Expotr To可以选择Workspace、Coefficient File以及MAT-File(第四个是SPTool,奈何笔者水平有限,这里就不介绍了)
第一种导出方式是到Workspace,也就是在matlab主界面的工作区中:
当选择这个选项之后,下面还需要选择Export As,如果选择Coefficient,那么在工作区中将出现一个叫BBPPFF(名字自定义)的矩阵,命令行中可以调用的形式为:filter(BBPPFF, 1, dataRaw);(这是对于FIR滤波器来说的,如果是IIR滤波器的话,工作区中将出现SOS和G两个矩阵,然后调用形式为:[b a]=SOS2tf(SOS,G); filter(b, a, dataRaw);)
如果选择Export As中的Object,那么工作区中将出现一个叫BBPPFF的对象,调用形式为:filter(BBPPFF, dataRaw)
第二种导出方式是到Coefficient File(ASCII):
当然,Format随便选,只是数据存储方式,这里选择Decimal十进制。然后出现文件另存为的窗口,保存为后缀为.fcf的ASCII文件。
对于FIR滤波器,利用记事本打开是这样的:
需要将阴影部分手动删除,然后代码调用形式:BPF=load('BPF.fcf');dataFiltered=filter(BPF,1,dataRaw);
对于IIR滤波器,利用记事本打开是这样的:
当然也需要将冗余的文字手动删除,剩下两个矩阵,在代码中将两个矩阵分别读取到变量SOS和G中,再利用[b a]=SOS2tf(SOS,G); filter(b, a, dataRaw);)进行调用。
第三种导出方式是到MAT-File:
如果选择Coefficient,那么保存为后缀.mat的文件之后,对于FIR滤波器的代码调用形式为:BPF=load('BPF.mat'); dataFiltered=filter(BPF.Num,1,dataRaw);
对于IIR滤波器的代码调用形式为:BPF=load('IIR.mat'); [b a]=SOS2tf(BPF.SOS,BPF.G); dataFiltered=filter(b, a, breath_signal);
如果选择Object,那么保存为.mat文件之后,调用形式为:BPF=load('BPF.mat'); dataFiltered=filter(BPF.BBPPFF,dataRaw);