关于Matlab中用fdatool设计滤波器

时间:2024-05-30 16:37:01

Matlab中继承了可视化的滤波器设计插件fdatool,可以方便地在可视化界面中设计滤波器参数,然后导出参数,以备后续使用。

首先:

在命令窗口输入fdatoo命令打开滤波器设计界面:

关于Matlab中用fdatool设计滤波器

在界面中输入目标滤波器的参数后点击下方的Design Filer按钮进行参数计算,设计完成后上方会出现滤波器的幅频响应(在菜单栏中的Analyse可以选择其他分析选项)

当我们需要保存该滤波器以备后续调用时,点击File-Export,出现导出选项窗口。其中的Expotr To可以选择Workspace、Coefficient File以及MAT-File(第四个是SPTool,奈何笔者水平有限,这里就不介绍了)

第一种导出方式是到Workspace,也就是在matlab主界面的工作区中:

关于Matlab中用fdatool设计滤波器

当选择这个选项之后,下面还需要选择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):

关于Matlab中用fdatool设计滤波器

当然,Format随便选,只是数据存储方式,这里选择Decimal十进制。然后出现文件另存为的窗口,保存为后缀为.fcf的ASCII文件。

对于FIR滤波器,利用记事本打开是这样的:

关于Matlab中用fdatool设计滤波器

需要将阴影部分手动删除,然后代码调用形式:BPF=load('BPF.fcf');dataFiltered=filter(BPF,1,dataRaw);

对于IIR滤波器,利用记事本打开是这样的:

关于Matlab中用fdatool设计滤波器

当然也需要将冗余的文字手动删除,剩下两个矩阵,在代码中将两个矩阵分别读取到变量SOS和G中,再利用[b a]=SOS2tf(SOS,G); filter(b, a, dataRaw);)进行调用。

第三种导出方式是到MAT-File:

关于Matlab中用fdatool设计滤波器

如果选择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);