概述

为在嵌入式开发中碰到的算法验证问题,借助matlab平台可以更方便的调试。如控制算法,可以先验证算法编写的正确性,防止盲目调参的无用功。借助的是SIMULINK 与 S-Function Builder

方法

首先保证 matlab MEX部分能正常工作,可以参考 mex -setup相关信息。主要是让mex找到正确的编译器,如:已安装了gcc套件,则只需设置下环境变量: setenv(‘MW_MINGW64_LOC’,’F:\MinGW64’);
即可
S-Function 是一个将c c++ 等编译为simulink模块的工具,吧待检测的代码构建为simulink 标准模块便可借助 simulink 强大功能仿真了。S-Function 有特定的格式,可以手写,这里用更简单的S-Function Builder做。
下面以一个iir滤波器算法为例
1.待验证的iir实现如下,保存为iir_souce.c

/*** @brief 离散 IIR 滤波器算法,被s function builder* 使用并建立iir.c(与builder设置的函数名相同)** @param u 输入* @param xD 离散变量寄存器, sfuncton builder 提供* @return double 输出*/
double iir(double u, double* xD) {double y;// IIR 的查分方程: y(n)=0.2x(n)+0.3x(n-1)+0.5x(n-2)//定义 xD[0] x(n-1) xD[1] x(n-2)y = 0.2 * u + 0.3 * xD[0] + 0.5 * xD[1];xD[1] = xD[0];xD[0] = y;return y;
}

2.开启新的simulink,导入S-Function Builder 模块,双击打开编辑
2.1 命名
要求与刚才c文件不同命,不然会覆盖


2.2 离散状态设置
这是s function 特殊性,就是离散化的算法中的x[n-1]这样的历史值需要构建为离散状态。如上图设置两个,给x[n-1] x[n-2]用
2.3 函数输入输出设置
iir只需要单输入单输出 宽度都为1 double(默认的) 格式

2.4 说明要编译的文件
左侧 iir_souce.c 指出要编译的文件 右侧extern double iir(double u, double* xD); 提示一会儿要在后面用到里面的这个函数

2.5 这一步指出实现
y0[0]=iir(u0[0],xD);
u0[0] 是输信号,y0[0]为输出信号,xD是刚才定义的离散状态数组

2.6 编译
如图,默认设置就好,还可以产生TLC用于matlab builder 自动生成代码

2.7测试
构建如下系统:

至此,成功将目标代码构建到sinmulink中仿真

参考

官方文档
参考书 基于模型的设计及其嵌入式实现

借助MATLAB与SIMULINK仿真嵌入式C算法相关推荐

  1. MATLAB在simulink仿真中出现的重要错误及解决办法

    如果MATLAB在simulink仿真中出现了以下的重要错误: The block diagram 'dyq1995' uses bus signals. However, the 'Mux bloc ...

  2. 电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障

    电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障,各类(单相断线,两相断线,三相断线)等断线故障,暂态稳定仿真 ...

  3. 电力系统静/暂态稳定性Matlab编程/ Simulink仿真

    电力系统静/暂态稳定性Matlab编程/ Simulink仿真 一.静态稳定性: 小信号分析法,研究单机无穷大系统在小信号扰动下的静态稳定性 1.用Matlab编程,把转子运动方程(摇摆方程)在运行点 ...

  4. 直驱式永磁同步风力发电机系统建模与仿真,matlab,simulink仿真,直驱,永磁,风力发电

    matlab,simulink仿真,直驱,永磁,风力发电 直驱式永磁同步风力发电机系统建模与仿真, 双PWM变流器,基于转子磁场定向的矢量控制,基于电网电压定向的矢量控制,最佳叶尖速比法最大风能捕获. ...

  5. matlab,simulink仿真,直驱,永磁,风力发电 直驱式永磁同步风力发电机系统建模与仿真

    matlab,simulink仿真,直驱,永磁,风力发电 直驱式永磁同步风力发电机系统建模与仿真, 双PWM变流器,基于转子磁场定向的矢量控制,基于电网电压定向的矢量控制,最佳叶尖速比法最大风能捕获. ...

  6. 解决MATLAB的simulink仿真Scop窗口曲线显示不全只显示部分曲线的问题

    Matlab中,用simulink仿真的时候,总会出现只显示部分数据的情况, 很是烦恼. 版本为matlab2016,解决方案如下: 1.双击打开simulink里面的scope 2.点击设置中的lo ...

  7. 汽车理论学习笔记(一)- 汽车动力性 - Matlab及Simulink仿真

    前言:由于后续要从事汽车行业,所以这段时间对<汽车理论>这本书进行了系统的学习,并利用Matlab.Simulink对汽车的动力性.操纵稳定性.平顺性等进行了仿真,加深了对汽车理论的理解. ...

  8. matlab之simulink仿真入门

    Matlab Simulink仿真工具的应用 Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包括连续系统.离散系统和混合系统), ...

  9. 基于 MATLAB 、Simulink 仿真和 TrueTime 工具箱的网络控制系统的仿真方法 附完整代码

    通过动手实践了解网络控制系统的架构及运行控制原理 熟悉使用基于 MATLAB 平台.Simulink 仿真工具和 TrueTime 工具箱的网络控制系统的仿真方法 考察不同丢包率下网络控制系统状态.输 ...

最新文章

  1. java silk转mp3_微信小程序录音文件格式silk遇到的问题及解决方法
  2. 习题:codevs 2822 爱在心中 解题报告
  3. nodejs 循环中操作需要同步执行解决方案
  4. LESSON 9.5 随机森林在巨量数据上的增量学习
  5. 【杂谈】提升写代码效率不得不做的三件事
  6. Java and Jakarta - Hybris
  7. 移动办公计算机,最适合移动办公的三款掌上电脑点评
  8. Debian 安装 yum
  9. Android新手入门2016(10)--GridView
  10. Qt 调用MATLAB引擎混合编程
  11. 操作目录下的文件或目录
  12. ROS的学习(六)理解ROS的节点(NODE)
  13. 有备无患:避免文件丢失的可行方案
  14. vb难还是c语言难java_c语言难还是vb难?
  15. 勒索病毒WannaCry深度技术分析:详解传播、感染和危害细节
  16. 【图解算法】彻底搞懂(括号匹配)——图解带你直击本质
  17. 海信在CES宣布推出75英寸到100英寸的全系全色激光电视产品
  18. 十二星座 谁是 “小笨猪” ?
  19. TTL反相器和CMOS
  20. 使用Dl4j训练的一个手写数字识别软件

热门文章

  1. 程序员、架构师、技术经理、技术总监和CTO有啥区别?
  2. 既然彼此不能相濡以沫, 那就相忘于江湖吧.
  3. C语言 基于循环结构的程序设计(PTA)
  4. android pad的屏幕纯多少,16:9比例10.1寸屏幕,Galaxy Tab S4可以说是一部好的安卓平板...
  5. excel表格如何转换成word表格_Word如何制作表格?Word制作表格超实用技巧
  6. 小程序 横向 纵向排列
  7. HTML基础--标签VSCode常用快捷方式和插件
  8. 2018微信公开课:微信小游戏的精华内容要点分享!
  9. phxqueue java_微信开源PhxQueue:高可用、高可靠、高性能的分布式队列的几个问题...
  10. 肉蛋堡记 - 符皓冉