本文研究一阶滤波算法的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)为本次滤波输出值。

公式中的α系数是一个关键。α越大,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;


将滤波系数的数值定义为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 总结

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

>>返回个人博客总目录

Simulink建模:一阶滤波模型相关推荐

  1. 二相混合式步进电机开环细分控制simulink建模仿真含模型文件

    目录 细分原理 二相混合式步进电机电磁转矩方程 对Te方程简单的理解 细分控制的推导 细分系统总体图 正弦电流的仿真simulink实现 关于PWM电流控制(或SVPWM控制) 关于模型中如何控制细分 ...

  2. 锂电池等效电路Simulink建模二阶RC模型

    锂电池等效电路Simulink建模二阶RC模型 ID:1949673726990861

  3. 基于arx模型的MPC预测控制器simulink建模与仿真实现

    目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 MPC的优点 模型预测控制善于处理多输入多输出系统        对于MIMO系统,PID需要为每个子系统单独设计PID控制器,由于存在耦 ...

  4. 锂电池Simulink建模二阶戴维南模型二阶RC模型

    锂电池Simulink建模二阶戴维南模型二阶RC模型 基于Simscape物理元件库搭建的二阶RC模型,相比数学公式搭建的模型更简单,更易理解. 配有简单的说明文档id=659684251422&am ...

  5. Simulink建模:PID控制模型

    本文研究PID控制的Simulink模型实现及其代码生成. 文章目录 1 PID控制 2 Simulink建模 2.1 对公式的理解 2.2 建模过程 2.3 模型配置 3 模型更新及代码生成 3.1 ...

  6. Simulink建模:CRC校验模型

    本文研究CRC校验的Simulink模型及其代码生成. 文章目录 1 CRC校验 2 C代码形式 3 Matlab/Simulink建模及代码生成 3.1 Matlab Function建模 3.2 ...

  7. Matlab/Simulink:动态系统模型的表示及仿真分析基础

    目录 1. 前言 2. 线性性 3. 无记忆系统 3.1 描述方式 3.2 无记忆系统例子 4. 线性时不变连续系统 4.1 基本概念 4.2 线性时不变连续系统 4.3 线性时不变连续系统的表示 4 ...

  8. 基于EKF的锂离子电池SOC估计——Simulink建模仿真

    基于EKF的锂离子电池SOC估计--Simulink建模仿真 版本:MATLAB R2018b 模型:Thevenin模型 1. 总体框图 EKF算法模块分为五个部分:(X_pre, Ut_pre, ...

  9. 协同滤波模型的推荐算法(ACM暑校-案例学习)

    基于协同滤波的推荐技术可以细分为基于用户的协同过滤方法.基于产品的协同过滤方法.基于模型的协同过滤方法:本博文进行了一一测试. 1. 数据准备.评价指标 由于协同滤波模型需要用到用户的行为,这里选用M ...

最新文章

  1. 新同事说工厂模式有啥用,别学了
  2. conda创建子环境并注册kernel
  3. 行转列(FOR XML PATH)
  4. python关键词提取_如何从Python格式字符串中提取关键字? - python
  5. 浏览器内存泄漏问题的跟踪与解决(转)
  6. ei eo eq什么意思_音响中的EQ是什么意思呀?
  7. Qt + GDAL 写入矢量图层 shp
  8. 新手做国外广告联盟lead常用工具汇总!
  9. MBA-day12 逻辑学-关系判断
  10. 虚拟服务器添加打印机,在VMware Workstation 7虚拟机中应用主机打印机
  11. 定制开发app和小程序
  12. 解决微信屏蔽淘宝链接的方法
  13. 【Cheatsheet】详解如何使用LaTeX Beamer制作PPT
  14. 生命密码是几适合学计算机,生命密码学
  15. HTML5中如何实现rpx布局
  16. python打包加密工具:Pyinstaller和Nuitka
  17. 基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)
  18. SAP采购信息记录维护
  19. 浅析超启发式算法(hyper heuristic)
  20. 使用QuickBI制作企业报表门户

热门文章

  1. liblensfun 在 mingw 上编译时遇到的奇怪问题
  2. 【附代码实现】Attention注意力模块的keras\tf实现(ECA、BAM、Coordinate、DualAttention、GlobalContext等)
  3. matlab多元变量最优解,模拟退火算法确定多个变量的最优解
  4. Python .csv转Excle数据(csv数据为空格分割)
  5. 如何检测时间序列中的异方差(Heteroskedasticity)
  6. 如何用70行Java代码实现深度神经网络算法
  7. MySQL 数据库存储引擎
  8. 开环零极点对根轨迹的影响
  9. rtsp 用户名、密码登录
  10. HTML5 weui笔记