Matlab simulink建模与仿真 第二章(常用模块库)【下】

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili

七、开关模块和增益模块

1、Switch开关模块

(1)开关模块可实现选择功能,它有3个输入端口和1个输出端口,输入端口从上到下(或从左到右)编号,第一个和第三个输入端口为数据端口,第二个输入端口为控制端口,当控制端口2满足所选标准时,输出端口与输入端口1导通,否则输出端口与输入端口3导通。

(2)控制端口2的标准有输入大于等于阈值、输入大于阈值或着输入不为0三种选择,阈值(Threshold)可自行设置。

(3)示例------利用switch模块实现半波整流。

2、Gain增益模块

(1)增益模块将输入乘以一个常量(增益),然后将结果输出,输入和增益都可以是标量、矢量或矩阵。

(2)通过乘法参数,可以指定元素乘法或矩阵乘法。

八、关系运算及逻辑运算模块

1、Relational Operator关系运算模块

(1)关系运算符:

|----|----|-----|------|
| < | 小于 | <= | 小于等于 |
| > | 大于 | >= | 大于等于 |
| == | 等于 | ~= | 不等于 |

(2)与大多数编程语言一样,关系运算符用于比较两个操作数,如果结论是真则返回1,否则返回0。

(3)关系操作符可以比较两个同样大小的矩阵(或矢量),两个矩阵(或矢量)中的每一个元素相比较,返回一个由各元素比较结果(0和1)构成的矩阵(或矢量);关系操作符还可以用来比较一个矩阵(或矢量)和一个标量,标量和矩阵(或矢量)中的每一个元素相比较,返回一个由标量与矩阵(或矢量)各元素比较结果(0和1)构成的矩阵(或矢量)。

(4)关系运算模块只有一个输出,它支持单目运算和双目运算。

①对单目运算,有isInf(判断输入是否无穷大)、isFinite(判断输入数值是否有限)和isNaN(判断输入是否为数值)三种,结果为真则输出逻辑1,否则输出逻辑0。

②对双目运算,有上表所示的六种,对关系运算模块的两个输入,由上至下(或由左至右)第一个输入为操作数1,第二个输入为操作数2,操作数1在关系运算符的左边,操作数2在关系运算符的右边,若关系表达式成立则输出逻辑1,否则输出逻辑0。

2、Logical Operator逻辑运算模块

(1)逻辑运算符:

|----------|---------------------|
| & | 与【A&B等价于and(A,B)】 |
| | | 或【A | B等价于or(A,B)】 |
| ~ | 非【~ A等价于not(A)】 |
| xor(x,y) | 异或 |

(2)逻辑运算规则(0表示"假",非零表示"真"):

|---|---|------|------|-----|----------|
| 运算对象 || 与 | 或 | 非 | 异或 |
| A | B | A&B | A|B | ~A | Xor(A,B) |
| 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 |

(3)逻辑运算模块只有一个输出,它支持单目运算和双目运算。

①对单目运算,有NOT(非门)一种,输入为逻辑0则输出为逻辑1,输入为逻辑1则输出为逻辑0。

②对双目运算,有AND(与门)、OR(或门)、NAND(与非门)、NOR(或非门)、XOR(异或门)和NXOR(异或非门)六种,若逻辑表达式成立则输出逻辑1,否则输出逻辑0。

九、积分模块

1、初始条件设定

(1)在第一章的典例中,求解微分方程用到了初始条件,实际上,simulink的Integrator积分模块也支持初始条件的设定。

(2)如果一个积分模块输出的是一阶导数,那么这个模块的初始条件需要根据x=0时的一阶导数取值设定,以此类推。

①选择来源于内部的初始条件,直接在配置窗口中配置即可。

②选择来源于外部的初始条件,积分模块将会有两个输入,从上往下(或从左往右)第二个输入就是初始条件。

2、输出上下限设定

(1)激活积分模块的"Limit output"选项,可以设置积分模块输出的上下限。

(2)在普通积分模块后添加Saturation模块,这个模块同样有限值的功能,它和"Limit output"选项的作用是一致的。

3、复位条件设定

(1)所谓复位,在普通积分模块中就是当触发复位条件时,积分模块的输出将重置为初始条件,也就是回到了t=0的时刻。

(2)只要有复位条件存在,积分模块就会提供一个复位信号输入端口,其中复位信号可自行设定。

①none:无触发条件。

②rising:当复位信号从零上升到正值或从负值上升到正数时,重置状态。

③falling:当复位信号从正值下降到零或从正值下降到负值时,重置状态。

④either:当复位信号从零改变为非零值或改变符号时,重置状态。

⑤level:当复位信号在当前时间步骤为非零或在当前时间阶段从先前时间步骤的非零变为零时,重置状态。

⑥level hold:当前时间步骤中的复位信号为非零时,重置状态。

4、状态输出

(1)激活积分模块的"Show state port"选项,积分模块将会提供一个状态输出端口,状态端口的输出与程序块标准输出端口的输出相同,但如果程序块在当前时间步中被重置,状态端口的输出将是程序块标准输出端口在未重置情况下的输出值。状态端口的输出比积分器程序块输出端口的输出更早出现在时间步中。

(2)使用状态端口可以避免在某些建模情况下产生代数循环。

5、饱和界限功能

(1)激活积分模块的"Show saturation port"选项,积分模块将会提供一个饱和状态输出端口,当积分模块的输出大于饱和上限时,饱和状态输出端口输出1,当积分模块的输出小于饱和下限时,饱和状态输出端口输出-1,其余情况输出0。

(2)开启饱和界限功能的积分模块,其初始条件必须在饱和界限之内,否则会报错。

十、单位延迟模块

在数学领域中,单位延迟模块相当于操作算子,该操作算子是构成离散系统的基础。

在simulink中,Unit delay单位延迟模块可实现输入信号延迟一个采样周期输出的功能。

单位延迟模块可用于构建数字滤波器,其中迭代式数字滤波器有反馈回路,非迭代式数字滤波器则没有。除此之外,单位延迟模块还可用于构建离散时间传递函数,不过不管是数字滤波器,还是离散时间传递函数,仅依赖单位延迟模块是不够的,故这里先不进行详细介绍。

十一、离散时间积分模块

1、欧拉法和梯形法

(1)求解微分方程比较简单的数值解法有前向欧拉法和后向欧拉法两种,它们是其它高阶数值求法的基础,虽然它们的计算精度并不高,但是求解过程中却不会占用过多内存。

①前向欧拉法的几何意义:在任一步长内,用一段直线代替函数y(t)的曲线,此直线段的斜率等于该函数在该步长起点的斜率。

②后向欧拉法的几何意义:在任一步长内,用一段直线代替函数y(t)的曲线,此直线段的斜率等于该函数在该步长终点的斜率。

(2)为了提高积分的计算精度,可以使用梯形法,梯形法的几何意义为:在任一步长内,用一段直线代替函数y(t)的曲线,此直线段的斜率等于该函数在该步长起点的斜率和终点的斜率的平均值。

2、Discrete-Time Integrator离散时间积分模块的六种形式

(1)离散时间积分模块可构建离散时间积分器,其中T为步长,值可以自取,积分方法可采取前向欧拉法、后向欧拉法和梯形法(梯形法的表达式如下所示)三种。

(2)离散时间积分模块可构建离散时间累加器,其中T为步长,值固定为1,累加方法可采取前向欧拉法、后向欧拉法和梯形法三种。

十二、数据类型转化模块

1、MATLAB中的基本数据类型

(1)双精度浮点数(double):MATLAB默认的数据类型(对实数/复数而言),表示双精度浮点数。

(2)整数类型:MATLAB提供了多种整数类型,如int8、int16、int32、int64、uint8、uint16、uint32、uint64。

(3)字符类型:

①字符(char):用单引号定义,如'H'。

②字符数组(char):用单引号定义,如'Hello'。

②字符串数组(string):用双引号定义,如"Hello"(MATLAB R2016b及以后版本)。

(4)逻辑类型(boolean/logical/bool):表示真(true)或假(false)。

2、Data Type Conversion数据类型转化模块

(1)数据类型转化模块可实现数据类型的强制转换,将输入信号强转为其它数据类型然后输出,输出的数据类型可在属性"Output data type"中设置。其中对于浮点数还可以设置精度,fixdt()一般包括3个参数(第四个参数暂不做介绍),分别用于设置符号,数据长度和 小数数据长度。

①符号------比如 fixdt(1,8,3) 第一个参数是1,表示该二进制的首位数字将用来表示符号位。

②数据长度------比如fixdt(1,16,3) 第二个参数是16,表示该二进制数据一共16位,即占用16个二进制位。

③小数数据长度------比如fixdt(1,8,3) 第三个参数是3,表示最后三个数据位用来表示小数数据。(可省略)

(2)如果数据类型转化模块的输入为复数值,则输出也为复数值。

(3)数据是以二进制的形式存储和传输的,数据类型转化有两种不同的方式:

①如果选择SI方式,数据类型转化模块会直接根据输入的二进制内容转化为需要输出的数据类型,并不会考虑它原本是什么类型的数据,也不管它的每个二进制位表示什么。

②如果选择RWV方式,数据类型转化模块会先译出输入的二进制数据表示什么数,然后再进行数据类型转化。

相关推荐
童先生16 分钟前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go
lulu_gh_yu17 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
Re.不晚41 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会43 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??1 小时前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
远望清一色1 小时前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself1 小时前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man2 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang