MBD_入门篇_19_Simulink数学运算模块

2020422simulink 模块(二) Simulink 仿真入门精通 (二) simulink 模块 simulink 模块属性以及参数 get(gcbh) % 选中模块后,在command window 中输入指令,可以输出模块属性信息,获取模块句柄 gcb % 获取当前被选中的模块 属性名 作用说明 path 路径 name 模块名 handle 模块句柄,double 型数据 sample time 模块采样时间 Priority 优先等级 InitFcn 模型初始化执行的回调函数 StartFc 阅读详情
AI摘要

本文详细介绍了Simulink中常用的数学运算模块,包括加减乘除、求和、累乘、矩阵拼接、三角函数、取整、符号判断等功能模块的使用方法与注意事项,重点强调了数据类型设置、溢出处理及仿真应用场景,适用于MATLAB环境下模型开发与控制算法设计。

前言

作者介绍

阿隆,深耕汽车控制器应用层开发多年,经历多家企业项目(包含多家中外头部企业),拥有多款控制器量产经验。主要技能包括应用层模型开发和c/c++代码编写,mil/sil测试,工具链开发,静态检查,BSW配置和手写,上位机开发等。

加V联系我:ALongAutom

使用介绍

MBD课程是阿隆从业多年后,在2022年的时候从0开始一点点录制的视频,一点点码字码出来的课程,现在分享给大家用来学习,如果对正在观看的你有帮助,可以帮忙推荐给身边的朋友,一起学习,也可以免费加入阿隆的技术交流群进行交流学习。

课程使用平台Matlab 2021b,建议初学者尽量使用同版本,避免出现版本差异带来的问题。等熟练掌握课程以后,再升级平台,出现版本差异的问题也知道该如何解决。

全网同名阿隆汽车,可以在其他平台搜索阿隆汽车找到阿隆,感谢观看。

入门篇视频是在Bilibili进行免费观看,链接如下:

阿隆MBD入门篇_合集_01_哔哩哔哩_bilibili

阿隆MBD入门篇_合集_02_哔哩哔哩_bilibili

实战篇01视频可以在Bilibili进行免费观看,链接如下:

阿隆MBD实战篇_01_VCU扭矩查表模块与CANoe联合仿真_哔哩哔哩_bilibili

提高篇视频观看链接

along-auto.com

19.Simulink数学运算模块

19.1 概述

数学运算模块,包含了一些数学运算,比如最常用的加减乘除等。

19.2  Add加法模块

设置加法模块的形状,默认是方形的,推荐使用方形的。

运算符设置。

设置符号为++-,可以理解为本来是0,0+In1+In2-In3.

注意一下输出数据类型,防止溢出。最好根据数据源的实际范围来为输出设置相应的数据类型。

两个uint8相加,超出255,发生溢出。

19.3 Subtract减法模块

减法模块跟加法模块参数设置都一样。用加法模块来表示减法,效果跟直接减法模块一样。

19.4 Product乘法模块

注意一下乘法的方式,一般的数学运算是用默认的点乘的方式即可。如果是两个矩阵做乘法运算,才会去选择用矩阵的乘法。

注意一下输出数据类型,防止溢出。最好根据数据源的实际范围来为输出设置相应的数据类型。如下图的uint8类型的40*9,输出也是uint8的话就会溢出。

19.5 Divide除法模块

除法模块是可以设置运算符的。可以理解为乘法模块初始值等于1,1*第一个输入,结果就等于第一个输入,再除以第二个输入。

可以理解为1/40*400=10

数据类型在多个乘除法的时候,要注意结果的范围。有时候也需要有限数据精度,那应该视情况扩大数据的计算类型,先做乘法,再做除法。

19.5 Sum求和模块

Sum模块和Add加法模块一样,只是形状不一样,多用在传递函数的模型里。

19.6 DotProduct点乘模块

相当于Product的子集。

19.7 绝对值模块

对输入进行绝对值运算。

对于固定点类型,带偏移量的数据类型,要注意,会报错。

19.8 Bias偏移模块

对输入信号进行偏移计算。当然可以使用Add或者Subtract代替。

19.9 Assignment模块

根据Index的值去拿U的值放到输出Y里,Y0是默认值。

Index为1,U是1,赋完值的结果是[1 0 0 0 0]

选择Index的起始是0还是1,从0开始的话元素的Index就是0,1,2,3,4,从1开始的话就是1,2,3,4,5

选择Index为port方式,从输入端去选择Index。

通过Index去赋值其中某几个值。

Size是选择使用Y0的还是选择手动在参数设置里进行输入。

19.10 MinMax模块

可以设置求min或者求max的值,以及设置输入的个数。

我们从一个数组中分别求出最大值和最小值。

输入使用数组,输入Num为1.

Number of input ports设置为3.

求数组的最大最小,对每个Index做比较,求出来最大最小的值。

输入的维度不一致,导致报错。

19.11 FindNonzeroElements模块

查找非零元素,可以自己搭建模块组合去做这个功能生成代码,不使用模型自带的模块。

19.12 MathFunction模块

数学函数模块,包含了一些常用的数学函数,比如exp,log,10^u,ln,square,pow,rem,mod等。

19.13 MatrixConcatenate模块

用来组合向量和矩阵。

单个信号组合成向量。

2个单信号组合成多维数组,维度是1X2.

2个数组组合成一个向量。

组合出2行3列的数组。

组合成2行3列的矩阵,用Reshape模块去转置。

19.14 MinMaxRunningResettable模块

输出所有之前输入的值的最小值(选择min),但是可以被Reset使用Initial Condition的值。max相反。

设置使用min还是max。以及初始的值。

记录所有时刻的最大最小值

19.15 ProductofElements累乘模块

针对输入的每个元素的乘法运算。a方式,是对Number of inputs进行设置,如图,设置完就会显示多个port对应每个运算,跟普通的Product用法一致。

运算结果

b方式,我们设置Number of inputs为*,然后对输入进行搭建,连接。仿真完后看到结果和上面的运算一样。

19.16 ReciprocalSqrt模块

可以选择三种计算,是求根号sqrt,将带符号值进行绝对值运算再求根号signedSqrt,求根号再求倒数rSqrt。

最简单的求根号sqrt,对4进行运算,得出结果2.

对-4进行开根号运算,得出无效值。

signedSqrt的输入值的符号对输出结果是有影响的,输入是什么符号,输出就是什么符号,根号是对输出的绝对值进行运算。

rSqrt先开根号,再求倒数。

19.17 SignedSqrt模块

与ReciprocalSqrt模块倒数平方根模块一样,只是默认选项选择的是带符号的平方根运算。

19.18 Sqrt模块

与ReciprocalSqrt模块倒数平方根模块一样,只是默认选项选择的是带符号的平方根运算。

19.19 Reshape模块

改变矩阵或者向量输入的维度,按照重新设定的方式输出。比如说输入是一个数组,我们可以把输出设置为1维数组,列向量,行向量,M*N矩阵

可以看到数据类型后面的括号()里显示的是5,表示输入和输出一样,是普通类型的数组。

修改为列向量输出后,模块图标发生变化,仿真输出的维度也发生了变化,变成了5X1.

同样地,修改为行向量以后,如下图

设置为Customize,将输出的维度设置为[2,3],仿真后,输出变成了2X3的矩阵。

输入是2X3矩阵的时候,各种设置的输出情况。

19.20 RoundingFunction模块

舍入函数

舍入输入信号的每个元素

“floor”

朝负无穷方向舍入到最接近的整数值

“ceil”

朝正无穷方向舍入到最接近的整数

“round”

舍入到最接近的整数

“fix”

朝零方向舍入到最接近的整数

选择floor,进行向下取整,对pi进行取整,取完以后变成了3.

设置为ceil是向上取整,直接进1,结果是4

设置为round,取接近的整数的值

fix在负数取整的时候与floor不同,与ceil相同。

19.21 取符号Sign模块

Sign模块的输入为正,则输出1,输入为负,则输出-1,输入为0,则输出0

使用Switch和CompareToConstant模块搭建Sign模块的逻辑

搭建完仿真结果如下

19.22 SineWaveFunction模块

生成代码不使用,仿真可以用来产生输入波形。

产生的波形

19.23 SliderGain滑动增益模块

生成代码不使用,仿真可以用来拖动变换增益效果。可以设置最大和最小的限值,然后在限值中间可以进行滑动设置。

19.24 Squeeze挤压模块

生成代码没有使用过(我个人,如果有使用场景可以在评论区留言告诉我或者是微信联系我)。比如说像2X1X3这样的矩阵改变成2X3的矩阵。

将3X1X2的数据挤压成3X2。

3X3X2的数据不变,直接输出。

19.25 SumOfElements累加模块

对每一个元素进行求和,输出结果。

对一维数组进行累加,得出结果15

对二位数组进行累加,得出结果30

19.26 三角函数模块

对输入进行sin或者其他的函数运算,输出相应的值

在Function里选择运算的函数,比如生活sin,cos,tan等。atan2函数跟atan的区别是,atan2输入是两个值,atan输入是一个值,atan2可以输入象限的信息,但是atan是没有办法的。

近似值逼近方法可以选择CORDIC和Lookup。

查找方法角度的单位,弧度或者是旋转。

波形显示如下,选择数量跟最终的波形有关系,数量越大,越接近原始的值,数量越小,精度损失会比较大。

数量分别选择4后的波形

19.27 取反模块

对输入进行取反后输出。

int8的数据范围是-128~+127,如果我们对-128取反,在int8的数据类型下,我们是没办法得到正确的输出,因为int8的范围取不到+128。-128不勾选Saturate on integer overflow的输出时候,输出还是-128,如果勾选的话,输出是+127

数据类型不够用的时候,考虑对数据类型做扩充。

Simulink里对无符号整形不能进行取反操作,直接报错。

19.28 向量连接模块

Vector Concatenate向量连接模块,参数设置输入个数不讲了,模式有Vector向量,和Multidimensional array多维数组。

选择Vector。把两个单变量,组合成一个数组。

两个1X3的行向量,组合完是一个1X6的行向量。

两个3X1的列向量,组合完是一个6X1的列向量。

当我们选择多维数组模式的时候,模块的外观发生了变化,变成了矩阵连接模块的样子。我们设置为1维,仿真结果如下

设置为2维,我们看到输出结果变成了3X2的数组。

不同数据的组合。

MBD_入门篇_06_Simulink核心模块与建模初探 本文深入探讨了Simulink核心模块在MBD(基于模型的设计)中的应用,特别适合初学者入门。文章详细介绍了数学运算、逻辑判断和查表模块的使用技巧,并结合汽车控制器开发实例,展示了如何从零搭建功能模型。通过实战案例和建模技巧分享,帮助读者快速掌握Simulink建模的核心要点。 阅读详情

相关推荐

MBD_入门篇_05_Simulink核心模块与建模初探

本文深入探讨Simulink核心模块在汽车信号处理模型中的应用,从基础数学运算模块到数字滤波器设计,手把手教你搭建车速信号处理模型。通过实际案例演示逻辑控制模块的实战应用,并分享模型优化与调试技巧,帮助MBD初学者快速掌握Simulink建模精髓。

weixin_26808439的博客 343

Simulink建模基础:基本算数运算

本文研究了在Simulink中进行基本的算术运算的模块及其代码,这些在建模中是最常见的。>>返回个人博客总目录。

u013288925的博客 1万+

MBD建模实战:从Simulink框图到工程化嵌入式开发框架

基于模型的设计(MBD)是一种将图形化模型作为核心产物的嵌入式软件开发方法,其核心原理是通过可视化建模替代传统手写代码,实现从算法设计到产品代码的自动转换。这一技术显著提升了复杂控制系统的开发效率与可靠性,尤其在汽车电子和工业控制领域,能够有效管理需求变更与团队协作。在实际工程应用中,数据字典作为统一的数据管理中心,确保了参数、信号和接口的一致性,是构建可维护模型架构的关键。同时,Stateflow状态机为描述复杂的事件驱动逻辑提供了优雅的可视化方案,极大提升了决策与调度逻辑的可读性与可维护性。本文聚焦于M

cuanji3287的博客 418

Divide

Divide模块是Simulink中执行除法运算的基本工具。

m0_55499682的博客 9294

MBD开发实践:从模型到代码的嵌入式系统设计革命

在嵌入式系统和控制算法开发领域,基于模型的设计(MBD)正成为复杂机电系统开发的核心范式。这一方法通过将系统动态行为的数学模型作为唯一权威来源,贯穿需求、设计、实现、测试的全生命周期。其原理在于利用图形化建模工具创建可执行、可验证的模型,实现需求的无歧义传递和早期验证。MBD的技术价值在于彻底改变了传统V模式开发中需求失真、设计与实现割裂、测试滞后等痛点,通过模型在环测试、代码自动生成等手段,将问题发现和修复大幅左移,显著提升开发效率与产品质量。在汽车电子、航空航天、机器人控制等对安全性和可靠性要求极高的应

weixin_30859423的博客 360

工业级MATLAB/Simulink应用:从MBD核心价值到汽车开发实战

基于模型的设计(Model-Based Design, MBD)是一种应对复杂系统研发的现代工程方法,其核心在于使用可执行、无歧义的数学模型作为统一的“权威真相源”,替代传统易产生歧义的文字文档。从原理上看,MBD遵循V模式开发流程,通过需求分析、算法设计、仿真验证、自动代码生成及在环测试等环节,形成一个完整、可追溯的闭环。这一方法的技术价值在于能显著降低开发成本与风险,将大量问题消灭在物理样机制造之前,并保证从模型到代码的一致性。在应用场景上,MBD尤其适用于汽车、航空等对安全性和可靠性要求极高的领域,例

weixin_30847939的博客 416

MBD_入门篇_05_Simulink简介

Simulink是一个模块图环境,用于多域仿真以及基于模型的设计。Simulink与MATLAB相集成,能够在Simulink 中将MATLAB算法融入模型,还能将仿真结果导出至 MATLAB 做进一步分析。库浏览器中包含了常用模块,连续系统模块,离散系统模块,数学运算模块,逻辑模块,查表模块等等。mdl是以前的版本用的格式,现在的版本几乎都用的是slx格式。这几种方式不同版本之间的界面也有会有所区别,明白是创建的逻辑即可,选择自己习惯用的即可。库浏览器,包含了Simulink的模块。选择一种之前的版本。

ALongAuto的博客 3315

MBD_实践篇_01_从手写C到Simulink建模:开发思维与流程的范式转换

本文探讨了从传统C语言开发转向Simulink建模的思维与流程转变,重点分析了MBD(基于模型的设计)在汽车ECU开发中的优势。通过对比PID控制器的实现案例,揭示了图形化建模在调试效率、需求变更响应和代码生成可靠性方面的革命性提升,为工程师提供从手写C到Simulink的转型实践指南。

weixin_30402343的博客 399

Simulink建模基础:数学运算

本文研究了Math Function模块、Trigonometric Function模块和Abs模块的用法,在实践中使用的频率是比较高的。>>返回个人博客总目录。

u013288925的博客 1万+

从零搭建MBD电力电子实验台:Simulink代码生成与STM32的谐波注入实战

本文详细介绍了从零搭建基于模型设计(MBD)的电力电子实验台,涵盖Simulink代码生成与STM32硬件部署的全流程。重点通过三次谐波注入SPWM算法的实战案例,展示如何在Simulink中建模、仿真验证并自动生成代码,最终在STM32F4硬件上实现高效部署与调试,为电力电子控制开发提供标准化实践参考。

emacs5lisp的博客 213

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9549

MBD_实战篇_Simulink数学运算模块在汽车控制算法中的高效应用

本文深入探讨了Simulink数学运算模块在汽车控制算法中的高效应用,通过MBD开发模式提升算法精度与安全性。文章结合新能源车VCU扭矩分配等实战案例,详细解析加减法、乘法模块的配置技巧与工程价值,并分享矩阵运算、函数模块性能平衡等高级技巧,助力开发者优化汽车电子控制单元开发流程。

weixin_30687051的博客 260

Simulink基础建模操作——运算模块

在Simulink中,运算模块是最常用的模块之一。添加除法运算模块的方法是用Simulink库中的数学运算库中的“Product”模块和“Gain”模块。添加乘法运算模块的方法是用Simulink库中的数学运算库中的“Product”模块。添加加法运算模块的方法是用Simulink库中的数学运算库中的“Sum”模块。添加减法运算模块的方法是用Simulink库中的数学运算库中的“Sum”模块。在执行完以上代码后,就可以在Simulink模型中看到加法模块,并可将其用于实现加法运算。

ByteWhiz的博客 3105

Simulink数学运算模块库(Math Operations)

本文系统梳理了Simulink常用数学与信号处理模块的功能与应用,涵盖基本运算(Add、Subtract、Gain)、复数转换(ComplextoMagnitude-Angle、Real-ImagtoComplex)、矩阵操作(MatrixConcatenate、Reshape、PermuteDimensions)、特殊函数(SineWaveFunction、TrigonometricFunction)、数据处理(FindNonzeroElements、SumofElements)及嵌入式适用性分析。重点强

m0_64651092的博客 207

Simulink基于模型设计与代码生成操作指南

Simulink是MathWorks公司推出的一款基于模型的设计工具,它允许工程师直接在图形化界面中设计和仿真动态系统。它采用了“拖拽式”的操作,通过简单地拖放不同的功能模块(如数学运算、逻辑运算、信号源、信号接收等)到模型窗口中,并用线将它们连接起来,就能快速构建系统的动态模型。Simulink通过集成到MATLAB环境中,提供了一种交互式的动态仿真和模型设计方法。Simulink模型中的每个模块都是一个MATLAB函数的封装,模型的每个环节都可以调用MATLAB强大的计算能力进行精确计算。

weixin_35972981的博客 1599

基于MATLAB Simulink的飞控系统工具箱:从模型到代码的MBD全流程

模型化开发(MBD)正成为飞控系统设计的主流方法,通过MATLAB Simulink将传感器建模、姿态解算、控制律设计与嵌入式代码生成无缝衔接,能显著缩短无人机、机器人等项目的迭代周期。本文拆解一套完整飞控工具箱的模块结构与配置要点,涵盖从初始化脚本、硬件抽象层到数据字典管理的关键实践,并针对代码生成、软件在环与半实物验证中的典型坑点给出排查思路。无论是刚转入模型化开发的新手,还是希望从手写代码向自动化生成转型的工程师,都能从中理解如何让Simulink模型真正跑在飞控板上,实现高可靠性的嵌入式控制软件交付

weixin_32496547的博客 278

MBD建模实战:从Simulink/Stateflow到嵌入式代码的工程化路径

基于模型的设计(MBD)是一种将软件功能通过图形化建模而非传统手写代码实现的开发范式。其核心原理在于利用Simulink、Stateflow等工具,将系统需求转化为无歧义、可执行、可仿真的可视化模型,作为后续开发活动的单一数据源。这一方法的技术价值在于实现了早期验证,能在编码前通过仿真发现逻辑缺陷,并从根本上保证模型与生成代码的一致性,从而提升嵌入式软件的开发效率与可靠性。其典型应用场景包括汽车电子、航空航天、工业控制等对安全性和实时性要求高的复杂系统开发。本文聚焦于MBD流程中的建模阶段,深入探讨了如何利

weixin_33688840的博客 421

mmpretrain学习笔记

(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’(7)适当的修改num_workers、epochs、batch_size、lr等。3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等。my_resnet18_8xb32_in1k.py 完整的配置文件。(6)split=‘train’、split='val’注释掉。2、数据:数据集划分、数据文件路径、批大小、数据增强策略等。

吃葡萄不吐葡萄皮 936

MATLAB的Simulink的用户自定义模块

今天主要介绍用户自定义模块中的Fcn模块、MATLAB Function模块、S函数模块。

longxingtiNXI的博客 1246

ch32v103xx 烧写

烧写方式 串口uart, usb,swd(wch link)但不建议按此使用,参官方说明。

qq_39239990的博客 636

当FPGA遇上Codesys:用Verilog实现ModbusTCP协议栈的3种方法(Xilinx/Vivado实测)

本文详细介绍了在Xilinx FPGA上使用Verilog实现Modbus TCP协议栈的三种方法,并与Codesys环境无缝集成。从基础架构设计到纯Verilog实现、基于AXI总线的混合方案,再到与Codesys的集成方法,为开发者提供了完整的工业自动化通信解决方案。通过实测数据对比,帮助开发者选择最优实现方案。

weixin_29172963的博客 518
上一篇: MBD_入门篇_18_Simulink查表模块
下一篇: MBD_入门篇_20_Simulink子系统
阿隆汽车
博客等级 码龄3年 3129粉丝 33原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值