"); //-->
本节主要介绍如何使用matlab2008生成IIR数字滤波器系数。
一、在matlab上设计一个高通滤波
打开matlab程序之后,在命令行窗口输入“fdatool”,弹出滤波器设计对话框如图6
图6.matlab中fdatool滤波器设计
为了便于分析,我们先从设计一个简单的一级2阶高通滤波器开始,按照下图中的步骤进行。
1.Design Method用于选择IIR滤波器还是FIR滤波器,这里我们选择IIR滤波器,类型选择Chebyshev Type I,当然你也可以选择其他类型,不同类型的频率响应不同,选择后默认的滤波器结构是直接II型,如图7中的蓝色框所示。
2.ResponseType用于选择低通、高通、带通以及陷波,选择高通滤波“Highpass”,这里我们选择高通滤波用于滤出300HZ以下的工频频率。
3.Fiter Order 选择阶数,为了使用STM32官方库给的程序,这里需要填入偶数,为了简单起见,先选择一个2阶滤波器做实验。
4.Frequency Specifications用于设置采样频率以及截止频率,这里填入8000以及300,也就是采样率是8KHz,300Hz以下的频率都不能通过。
5.点击“Design Filter”,matlab将生成一个按照以上参数设计的滤波器,点击图中数字6的图标,可以在坐标框中看到该滤波器的幅频响应,正如图中所示,频率在300Hz以下的信号将被滤除。
图7.设计高通IIR滤波器
二、导出系数
设计完毕一个高通滤波器之后,这个模型就已经在matlab内部保存起来了。接下来就需要将模型的参数导出来以供stm32f1使用,在导出数据之前,先看一下用matlab将该数据模型实例化之后是什么样子。
按照图中数字标号进行,第一步点击左边小图标,第二步“Build model using basic elements”这一项打钩,右边四个灰色的项将自动打钩,默认不要修改,最后点击“Realize Model”,matlab将自动把滤波器的数学模型通过仿真的形式展现出来,在弹出的窗口中双击模型,双击之后将在新窗口中展示该模型的内部结构,为了便于观察分析,这里我将模型的各个模块进行了位置调整,并将各放大器的增益都用数字表示出来了。
图8.将滤波器实例化
图9.生成的仿真模型
图10.模型内部结构
由该图可以看出,这是一个典型的一级二阶直接II型结构的滤波器,若是我们在前面的fdatool中选择4阶以上的滤波器,那么这个模型内部将会有更多的二阶结构级联。
导出C语言的滤波器系数
接下来我们看一下滤波器数据模型的系数到底是如何对应到图10中所示结构的系数的。
在fdatool中点击”Targets”菜单下的”Generate C Header”,弹出下面的对话框,图中”Data type use in export”选项用于选择导出的数据类型,比如双精度浮点、单精度浮点、16位无符号定点、32位有符号定点等等,这里我们先导出为双精度浮点,定点计算比较麻烦,在以后的教程中再举例说明。
图11.基于C系数的导出
选好之后直接点击”Gererate”,弹出一个对话框让你填写保存数据文件的文件名,这里默认为”fdacoefs.txt”。在我们保存的目录下打开fdacoefs.txt文件,打开后出现以下代码
#define MWSPT_NSEC 3 //NL、DL数组中元素的个数
const int NL[MWSPT_NSEC] = { 1,3,1 };//定义分子数组NUM[MWSPT_NSEC][3]有效数据的个数,比如{ 1,3,1 }就表示数组NUM[][]中第一行第一个数据有效,第二行三个数据全都有效,第三行第一个数据有效,以此类推。
const real64_T NUM[MWSPT_NSEC][3] = {
{ //第一个数有效,对应图12中输入的增益系数s(1),图中用蓝色圈框住。
0.0398344010957, 0, 0
},
{ //三个数都有效,对应图12中右侧系数b,图中用蓝色圈框住
1, -2, 1
},
{ //第一个数有效,对应图12中输出的增益系数,图中用金色表示
19.79025967934, 0, 0
}
};
const int DL[MWSPT_NSEC] = { 1,3,1 };//定义分母数组DEN[MWSPT_NSEC][3]有效数据的个数,比如{ 1,3,1 }就表示数组DEN[][]中第一行第一个数据有效,第二行三个数据全都有效,第三行第一个数据有效,以此类推。
const real64_T DEN[MWSPT_NSEC][3] = {
{
1, 0, 0
},
{ //三个数都有效,对应图12中左侧系数a,图中用红色圈框住
1, -1.746571017897, 0.7915263152984
},
{
1, 0, 0
}
};
图12.滤波器系数
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。