Matlab simulink建模与仿真 第六章(逻辑运算、位运算库)

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

一、逻辑运算、位运算库中的模块概览

注:其中逻辑运算模块和关系运算模块在第二章中有介绍,故本章不再赘述。

二、区间检测模块

1、Interval Test区间检测模块

(1)该模块的作用是判断输入信号的值是否在设定的区间内,如果在则输出逻辑1,否则输出逻辑0。

(2)如果希望设定的区间为闭区间,需要将"Interval closed"选项勾选。

(3)值得注意的是,如果输入信号的数据类型是整型,而区间边界的数据类型是浮点型,这种情况下很可能会造成判断失误,对此需要统一输入信号和区间边界的数据类型。(不仅是这个模块,对其它模块也需要注意信号的数据类型)

2、Interval Test Dynamic动态区间检测模块

(1)与一般区间检测模块不同的是,动态区间检测模块的区间边界由外部输入信号up和lo决定,当然,区间的开闭则仍旧由动态区间检测模块的属性配置决定。

(2)值得注意的是,当规定了输入信号的数据类型时,需要考虑会不会产生溢出,比如8位整型数据是没办法表示-128~127以外的数的,如果超出这个范围,那么仿真时可能会报错,即使不报错,仿真结果可能也是不正确的。(不仅是这个模块,对其它模块也需要注意信号的值是否超出其数据类型能够表示的范围)

三、组合逻辑模块

Combinatorial Logic组合逻辑模块中可以定义一个用矩阵表示的真值表,其中行表示不同输入组合下的输出结果,列表示模块的输出端口。

需要说明的是,真值表的输入端是隐式的,也就是真值表矩阵中没有写明各行的输出对应何种输入组合,Simulink是通过从输入向量元素计算索引来返回矩阵的指定行的。

Simulink计算索引(row index)的方法是构建一个二进制数,其中具有0值的输入向量元素为0,具有非0值的元素为1,然后将结果加1。对于由m个元素组成的输入向量u,有

四、比较模块

1、Compare To Zero与0比较模块

首先需要设定关系运算符,0作为右操作数,输入信号作为左操作数,当关系表达式成立时,模块输出逻辑1,否则输出逻辑0。

2、Compare To Constant与常数比较模块

首先需要设定关系运算符和作为右操作数的常数,输入信号作为左操作数,当关系表达式成立时,模块输出逻辑1,否则输出逻辑0。

五、位设置与位清零模块

1、Bit Set位设置模块

(1)在参与位运算时,输入信号的值都会转换为二进制的表示形式,该模块的作用是将二进制表示形式输入信号的指定的某个位设置为1,其它位不变,然后转换回输入信号原本的形式,输出之。

(2)同大多数模块一样,该模块也支持输入矩阵,双击该模块,可配置对每个输入信号分别需要置1的位(二进制数低位从0开始数)。

2、Bit Clear位清零模块

(1)在参与位运算时,输入信号的值都会转换为二进制的表示形式,该模块的作用是将二进制表示形式输入信号的指定的某个位设置为0,其它位不变,然后转换回输入信号原本的形式,输出之。

(2)同大多数模块一样,该模块也支持输入矩阵,双击该模块,可配置对每个输入信号分别需要置0的位(二进制数低位从0开始数)。

六、位运算模块

1、Bitwise Operator位运算模块(多操作数)

位运算模块执行的功能是让操作数(可有两个以上)按位进行逻辑运算,在参与位运算时,输入信号的值都会转换为二进制的表示形式,该模块会将对输入信号的每个位分别进行逻辑运算(比如按位与、按位或),具体进行何种逻辑运算可双击模块进行配置。

2、Bitwise Operator位运算模块(使用屏蔽位)

勾选"Use bit mask ..."选项后,该模块只有一个输入端口,双击模块可以对逻辑运算和位屏蔽进行设置,简单来说,该模块执行的功能是将输入信号和位屏蔽数(Bit Mask)进行按位逻辑运算,具体进行何种逻辑运算可自行设置。

七、移位运算、位提取模块

1、Shift Arithmetic移位运算模块

(1)移位运算包含二进制数本身移位和小数点移位两种,左移时移动位数n为负数,右移时移动位数n为正数。

(2)对于二进制数本身的移动,需要先将输入值转换为二进制形式,然后再进行数的移位,移位后产生的空位用0补上,而被移出的位则直接丢弃,其实际的数学意义是对数值进行的运算,当然,这是在不超出其数据类型表示范围的前提下。(移位方向默认选择Bidirectional即可)

(3)对于小数点的移动,需要先将输入值转换为二进制小数形式,然后再进行移位,其实际的数学意义是对数值进行的运算,当然,这是在不超出其数据类型表示范围的前提下。

2、Extract Bits位提取模块

在参与位运算时,输入信号的值都会转换为二进制的表示形式,该模块可以选择提取输入信号的一部分位,然后将其输出,其中可选的提取方式有:

①提取信号高位的一半(Upper half):比如有16位数据1111111100000000,该模块将会提取数据的高8位11111111。

②提取信号低位的一半(Lower half):比如有16位数据1111111100000000,该模块将会提取数据的低8位00000000。

③从最高位开始向低位提取指定的位数(Range starting with most significant bit):比如有16位数据0101101001011111,指定提取6位,那么该模块将会提取出010110。

④从最低位开始向低位提取指定的位数(Range starting with most significant bit):比如有16位数据0101101001011111,指定提取6位,那么该模块将会提取出011111。

⑤从指定的范围中提取(Range of bits):比如有16位数据0101101001011111,指定提取第0位到第7位,那么该模块将会提取出01011111。

八、检测模块

1、Detect Increase上升检测模块

(1)该模块用于判断当前时刻的输入信号值是否大于上一时刻的输入信号值,如果是则输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

2、Detect Decrease下降检测模块

(1)该模块用于判断当前时刻的输入信号值是否小于上一时刻的输入信号值,如果是则输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

3、Detect Change变化检测模块

(1)该模块用于判断当前时刻的输入信号值是否等于上一时刻的输入信号值,如果是则输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

4、Detect Rise Positive正值上升检测模块

(1)如果该模块当前时刻的输入信号值大于0,且上一时刻的输入信号值不大于0,则该模块输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

5、Detect Rise Nonnegative非负值上升检测模块

(1)如果该模块当前时刻的输入信号值大于等于0,且上一时刻的输入信号值不大于等于0,则该模块输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

6、Detect Fall Negative负值下降检测模块

(1)如果该模块当前时刻的输入信号值小于0,且上一时刻的输入信号值不小于0,则该模块输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

7、Detect Fall Nonpositive非正值下降检测模块

(1)如果该模块当前时刻的输入信号值小于等于0,且上一时刻的输入信号值不小于等于0,则该模块输出逻辑1,否则输出逻辑0。

(2)因为每个时刻的输出都与上一时刻的输入有关,所以需要设置t=0时刻"上一时刻"的输入,也就是初始条件。

相关推荐
Narutolxy2 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader10 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默21 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Code哈哈笑30 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶33 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_4336184436 分钟前
shell 编程(二)
开发语言·bash·shell
charlie1145141911 小时前
C++ STL CookBook
开发语言·c++·stl·c++20
袁袁袁袁满1 小时前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程
ELI_He9991 小时前
PHP中替换某个包或某个类
开发语言·php
m0_748236111 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust