体程序参考原文:

基于fdatool的滤波器设计(低通、带通、高通) - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/47392900

 

一、关于

结合上一篇8PSK调制,记一下滤波器的设计方法,可以直接根据原理,使用函数实现,也可以借助Matlab中的fdatool工具。

二、基于MATLAB中fdatool的带通滤波器的设计

1. fdatool的使用

命令行窗口运行fdatool

位宽选择

设计参数

接下来就是文件的生成:

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

当选择这个选项之后,下面还需要选择Export As,如果选择Coefficient,那么在工作区中将出现一个叫bpf70M(名字自定义)的矩阵,命令行中可以调用的形式为:filter(bpf70M, 1, dataRaw);(这是对于FIR滤波器来说的,如果是IIR滤波器的话,工作区中将出现SOS和G两个矩阵,然后调用形式为:[b a]=SOS2tf(SOS,G); filter(b, a, dataRaw);)如果选择Export As中的Object,那么工作区中将出现一个叫bpf70M的对象,调用形式为:filter(bpf70M, dataRaw)

第二种导出方式是到Coefficient File(ASCII):FPGA使用时就是导出为coe文件

当然,Format随便选,只是数据存储方式,这里选择Decimal十进制。然后出现文件另存为的窗口,保存为后缀为.fcf的ASCII文件。对于FIR滤波器,利用记事本打开是这样的:将选中的部分手动删除。然后代码调用形式:BPF=load('bpf70M.fcf');dataFiltered=filter(bpf70M,1,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('bpf70M.mat'); dataFiltered=filter(BPF.bpf70M,1,dataRaw);

 

2.上一篇中所用的文件调用方法

bpf70M_Coe=load('bpf70M.mat');%两种滤波器调用方式之二
BPF_Data=filter(bpf70M_Coe.bpf70M,1,psk8_channel);