概述
本文研究一阶滤波算法的Simulink模型及其代码生成。
文章目录
- 1 一阶滤波算法
- 2 Simulink建模
- 2.1 对公式的理解
- 2.2 建模过程
- 2.3 模型配置
- 3 模型更新及代码生成
- 3.1 模型更新
- 3.2 代码生成
- 4 总结
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 总结
一阶滤波的建模和代码是比较简单的,博主将自己的学习和研究过程记录于此。
>>返回个人博客总目录
最后
以上就是发嗲橘子为你收集整理的Simulink建模:一阶滤波模型1 一阶滤波算法2 Simulink建模3 模型更新及代码生成4 总结的全部内容,希望文章能够帮你解决Simulink建模:一阶滤波模型1 一阶滤波算法2 Simulink建模3 模型更新及代码生成4 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复