Simulink建模:一阶滤波模型

本文研究一阶滤波算法的Simulink模型及其代码生成。

1 一阶滤波算法

一阶滤波算法是个很简单也很常用的滤波算法,其算法公式如下:

Y(n) = α*X(n) + (1−α)*Y(n−1)

式中:α为滤波系数,X(n)为本次采样值,Y(n−1)为上次滤波输出值,Y(n)为本次滤波输出值。关于算法的理解和推导,在网上有很多资料可供查阅。本文重点研究通过Simulink实现该算法。

2 Simulink建模

2.1 对公式的理解

为了较好的进行建模,博主结合自己的经验对公式进行理解,这些理解会指导后面的建模。

  • 首先,输入值、输出值和滤波系数的数据类型应该是浮点数,这点比较好理解。
  • 滤波系数α其实代表了本次采集的数值和上次输出的数值的权重,其范围应该是0~1之间。
  • 滤波系数α应该是一个可标定的数,因此在Simulink中应该做成Parameter参数。
  • 公式中用到了上一次的滤波输出值Y(n−1),因此要用到Unit Delay模块输出上一个周期的Y值。

在建模的时候应该要注意以上几条。

2.2 建模过程

1)首先在Simulink中建立一个子系统,将其命名为FirstOrderFilter,并定义好输入输出名称;
在这里插入图片描述
2)在模块内部根据公式建立出对于的模块和信号线,这个公式转换成模型还是很好理解的;
在这里插入图片描述
注意这里的写着Alpha的模块变为红色,是因为Alpha这个变量还没有定义,会在后面定义。

2.3 模型配置

模块和信号线都搭建好了以后,需要对他们进行一些必要的配置。

1)将Inport,Outport和每个运算模块的Output DataType都配置成single,这样保证了整个数据流都是浮点型的;
在这里插入图片描述
注:关于数据类型也可以让Simulink自己继承判断,但是博主喜欢强制配置成自己想要的,这是因为踩过坑,所以希望保险一点;

2)在Matlab工作空间中创建一个名为Alpha的Parameter对象,然后配置Alpha的参数属性;

>> Alpha = Simulink.Parameter;

在这里插入图片描述
将滤波系数的数值定义为0.5,Data type定义为single,Minimum和Maximum分别定义为0和1。

3 模型更新及代码生成

Simulink模型建立好后,可以分两步走。首先是Ctrl + D看看模型有没有编译问题,再Ctrl + B看看有没有生成代码问题。

3.1 模型更新

1)在子系统外面加上Inport和Outport模块,使之成为完成的模型;
在这里插入图片描述
2)Ctrl + D更新模型,并显示一下数据类型,可以看到整个数据流的类型都是single;
在这里插入图片描述

3.2 代码生成

1)在Simulink中配置一下代码生成,具体方法可参照博主以前的博客《Simulink代码生成: Embedded Coder配置》

2)另外,模型中有一个Alpha为标定参数,可以通过配置以下接口生成A2L文件。
在这里插入图片描述
3)以上配置好后,可以Ctrl + B生成代码;
在这里插入图片描述
在上图所示的step函数中则是模型对应的一阶滤波的代码,基本上和数学公式一致。这里要主义的是,等式右边的Out1是上一个周期的输出值,经过运算赋值给等号左边。按照常规来说,Unit Delay模块应该是额外生成一个全局变量的,但是这里比较简单,就直接优化掉了。

4 总结

一阶滤波的建模和代码是比较简单的,博主将自己的学习和研究过程记录于此。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/121890178