首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink建模:一阶滤波模型

  • 23-09-22 01:03
  • 2474
  • 12804
blog.csdn.net

本文研究一阶滤波算法的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 {{Y}}{}_{{n}}:=:alpha{{X}}{}_{{n}}:+:left(1-alpha ight){{Y}}{}_{{n-1}} Yn​=αXn​+(1−α)Yn−1​

式中:α为滤波系数,X(n)为本次采样值,Y(n−1)为上次滤波输出值,Y(n)为本次滤波输出值。

公式中的α系数是一个关键。α越大,X(n)在输出中占据的权重越大,滤波效果越弱,输出越接近真实数值。α越小,Y(n−1)在输出中占据的权重越大,滤波效果越强,输出曲线越平滑。参数的调整要根据实际情况取一个平衡点。

本文重点研究通过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;
  • 1

在这里插入图片描述
将滤波系数的数值定义为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)再打开A2L文件,可以看到关于Alpha的定义;
在这里插入图片描述
如上图中可以看到A2L中对该变量的最大最小限值,对应于前文在数据字典中对Alpha的大小限制。从而保证了在标定阶段无法将这个值标定为0-1范围以外的浮点数。

4 总结

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

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/121890178"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top