借助MATLAB与SIMULINK仿真嵌入式C算法

概述

为在嵌入式开发中碰到的算法验证问题,借助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中仿真

参考

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

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MatlabSimulink联合仿真是一种将MatlabSimulink两个软件相结合的仿真方法。Matlab是一种数学计算软件,可以进行各种数学计算和数据分析;而Simulink是一种基于模型的设计和仿真软件,可以用于建立各种系统模型并进行仿真。通过将这两个软件相结合,可以更加方便地进行系统建模和仿真,提高仿真的精度和效率。同时,MatlabSimulink还提供了丰富的工具箱和模块,可以用于各种领域的仿真和分析,如控制系统、信号处理、通信系统等。 ### 回答2: matlabsimulink是非常常用的工具,用于科学和工程中的计算、建模和仿真matlab的编程平台提供了一种强大而灵活的方式来处理数值计算、可视化和数据分析。Simulink则提供了一种以图形方式建模和仿真动态系统(即连续、离散和混合系统)的方法。 matlabsimulink可以相互结合,进行联合仿真。这可以让使用者在matlab中实现复杂数学模型,然后把它们转化为simulink模型进行仿真分析,也可以在simulink中设计控制系统,而且可以更加准确地建立出完整的模型系统,使得结果分析更加科学、全面。 例如,在建立模型时,可以使用matlab来编写自定义函数。然后这些函数可以被集成到simulink模型中,用于模拟不同的系统。这样可以更加准确地模拟现实世界中的系统,让系统更加贴合实际应用。 此外,matlab还可以和simulink结合起来进行自动代码生成。Matlab生成的代码可以直接用于单片机开发和嵌入式系统中。这可以显著提高代码开发的效率,并减少错误的可能性。 总之,matlabsimulink的联合仿真是科学工程中的重要组成部分,能够提高模型精度、加速开发速度并减少错误。仿真分析模型,使得实验更加准确、可靠,可以加快科学研究和新产品开发的步伐。 ### 回答3: MATLABSimulink是两个由MathWorks公司开发的仿真软件。MATLAB是一个数学计算和可视化工具,Simulink则是一个模拟和建模工具。这两个工具可以联合使用,提供更加全面的仿真功能。 MATLABSimulink都包含了大量的工具箱和模块,可以支持广泛的应用场景。使用这两个软件进行联合仿真,可以通过MATLAB的数学计算和数据处理功能,提供输入数据(输入信号)给到Simulink模型,并分析输出数据(输出信号)。同时,使用Simulink的建模和模拟功能,可以将MATLAB处理好的信号输入到仿真模型中,进行更加详细的仿真和分析。 MATLABSimulink的联合仿真可以在多个领域得到应用。例如,在控制系统领域,可以使用Simulink建立控制系统的仿真模型,MATLAB则可以对仿真出来的数据进行处理和分析;在图像处理领域,可以使用MATLAB对图像进行处理和分析,Simulink则可以用来验证图像处理算法的效果等等。 从工程实践角度来看,MATLABSimulink联合仿真能够大大提高系统设计的效率和精度。使用这两个软件可以更快速、更高效地用于构建、仿真和测试设计方案,帮助工程师优化系统设计并验证模型的合理性。同时,联合仿真还可以提高工程师的工作效率和质量,缩短产品设计周期和提升产品质量,从而在商业竞争中获得更好的市场竞争力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值