文章说明:
该文章主要是为了记录SIMULINK中各个模块的基本定义,基础功能描述以及功能实现的简单方块图搭建,做一个知识记录,也希望能给大家带来一点帮助
- 仿真对象
可以使用数学来描述的系统----涉及连续,离散,非线性,时变,条件执行,多速率混合等用解析方法难以求解的系统,可以通过simulink来建模和仿真,来指导系统的设计。
- 特点
(1) 交互式建模
(2) 交互式仿真
(3) 可以将不同语言编写的算法进行拓展,集成到框图中
(4) 提供了不同行业和领域的专业模型库
- 仿真流程
(1) 根据实际问题得到对应数学模型
(2) 将数学模型用框图形式表示
(3) 将框图用simulink中的模块来实现
(4) 配置不同模块中的参数,给不同模块命名
(5) 设置仿真运行参数
(6) 进行仿真
(7) 对仿真结果进行分析
定义:将未连接的输入模块进行接地
注意: 不连接不影响最终输出,但是会有warning
定义:将未连接的输出模块进行接入终端
注意: 如果只有一维输出会有warning,说明无意义,如果是多维的输出,则正常使用
定义:可以生成常数,向量,矩阵
注意:向量指的是类似数组的一组数,运算方式为对每个数单独计算,不同于线性代数中的向量。
定义:可以进行常数,向量,矩阵的加减运算
注意:运算元素的维度要相同,维度不同时,一定情况下模块会将元素进行维度拓展处理再运算。
定义:可以进行常数,向量,矩阵的乘除(* /)运算
注意:
- 可以选择运算方式为矩阵乘法或者元素乘法
- Number of inputs中可以输入*或者/来选定乘除运算
定义:将不同信号合并到同一根信号线上
参数:
- 选择需要合并的信号线数目
- 配置信号线命名的两种方式
使用:配置总线进行显示,先将不同信号接到同一根总线上,再接到示波器进行显示
定义:将混合的信号按照给定的规则输出到子线上
说明:若规则为-1,则代表系统自动分配,系统会尽量平均分配到每个子线
定义:对常数项作元素乘积或矩阵乘积
注意:选择矩阵乘积的时候,由于矩阵乘法的不可逆性,要注意相乘的次序。
simulink提供的单目运算符:
- isInf:是否为无穷
- isNaN:是否为数值
- isFinite:是否有限
与关系运算模块的使用类似
初始条件:可使用内部或者外部初始条件
限制:可设置上下限【也可以使用Saturation(饱和模块)来实现】,注意,初始条件也要在界限范围内
复位:符合某一条件时,积分器恢复为初始条件
应用:用于搭建数字滤波器
前向欧拉法:
后向欧拉法:
梯形法:将每段的斜率用起点和终点斜率的平均值替代
应用:注意定点数和浮点数的转换,其他的转换跟C语言转换类似
注意: 下图一开始有一个斜率很大的直线是由于微分初值为0
使用范围:多输入多输出的系统
举例:常系数四阶微分方程
连续系统使用linmod提取状态状态矩阵(离散系统用dlinmod)
应用:给定输入和输出的对应项的系数即可,注意是降幂的顺序
拓展:使用tf函数以及bode函数来绘制bode图,用于判断传递函数的性质
应用:对于某一传递函数,使分子为0的点为零点,使分母为0的点为极点,增益为最终化简后的系数,输入即可得到对应的传递函数
函数应用:
tf — 用于构造普通的传递函数
zpk — 用于构造零极点增益的传递函数
ss — 用于构造状态空间矩阵
模式选择:有理想和并行模式,不同模式下P,I,D的表示有区别
进阶:PID Controller(2DOF),可以设置参考点
注:模块的上下界限可以是常数,也可以是变化的函数
输出值:
- 输入值在死区范围内,输出为0
- 输入值在死区外,输出为输入减去对应的死区边界值(上下越界分别减去上下边界值)
参数:
- 死区宽度
- 初始输入
注:死区平均分布在初始输入值两边
参数:
- 开启点(关闭点)的阈值
- 开启时(关闭时)的输出
应用:
防止
应用:限制输出信号函数的斜率
定义:在信号达到某个数值时输出1,不然输出0
参数:检测边缘条件:上升,下降,双边
注意:该模块输出为布尔类型的值,处理时要注意数据类型转换
定义:y = q * round(u/q) , y是输出,u是输入,q是采样时间间隔,round-to-nearest为向最接近的值舍入
定义:输入信号大于阈值,则输出0
参数:Offset为不同理论下的偏移量,只研究一种理论的话可以设置为标量!
类别: 单位延迟,积分延迟,拍延迟
应用:以拍延迟为例,它与积分延迟的区别在于它将每一次延时之后函数都输出了
应用:与连续系统使用类似,以零极点模块为例
定义:输出当前采样值减上一次采样值
定义:即求离散数值的微分
函数:bilinear, c2d,可将连续系统中的参数矩阵转换为离散系统的参数矩阵
注意:惯性与延迟不同,惯性是由于系统本身的输出相对于输入具有反应延后,而延迟是某一时刻的输出在延时一段时间后再输出
参数:可调整零点和极点的大小来调整系统为超前或滞后补偿系统
定义:输出 = 上一次的输入
定义:零阶定步长拟合
定义:一阶定步长拟合
用法:与连续PID模块使用类似
定义:即C++语言中的逻辑运算AND,OR,NOR等
定义:即进行输入值大于小于等于的关系比较
类型:动态和静态,一般使用动态
用处:产生真值表
行:不同输入的组合效果
列:模块的输出数目
运算过程:
输入值按二进制布尔值形式输入,按二进制数从小到大排列即对应真值表的值
由两个与非门的输入输出端交叉连接而成,是组合逻辑块的典型应用
类型:常数比较模块,零比较模块
输出:输入为标量/向量,则输出为标量/向量
应用:即将二进制的某一位置1
注意:数据类型要匹配,这个模块处理的是定点数
应用:即将二进制的某一位置0
应用:与位设置模块相同
应用:即C语言中的位运算
输入输出:可以选择输入的参数数目
应用:即提取二进制数的某连续几位
参数:
- 数字移位位数
- 小数点移位位数
注意:数值左移为负,右移为正
应用:比较该时刻与上一时刻的数值大小,配合其他附加条件,输出逻辑值
定义:给定不同维度下的唯一坐标对应的函数值,查询时查询该坐标则返回对应值,非给定坐标则返回插值函数对应值
- 在给的断点位置, 查询模块的值和普通函数值相同
- 在非断点位置,则利用内插和外插法来求得对应值
- n维的查询模块与一维类似,只是插值法用的是n维线性插值法
[[
定义:实则为向量表,通过给定的不同维度下的向量下标找到对应表的值,非整数下标则取插值函数的值,可以配合Prelookup模块使用
Prelookup:下标查询模块,可以查询在自定义的变量范围内,给定参数的下标的整数和小数部分
定义:给定一个矩阵,通过下标去访问对应元素,下标从0开始
定义:与普通表查询模块类似,只是表的值可以在过程中改变
用法:结合该模块可以将满足迪利克雷条件的周期函数转化为傅里叶级数
模块可以设置单目或多目,单目的话输入必须是矩阵,实现的功能即为累加。
将输入值加上一个常数进行输出,可以用于将函数图像进行上下位移
用法与增益模块类似,只是拥有图形化界面,便于调节参数
输入可以是标量,向量或矩阵,输出也是。
系数以矩阵的方式表示,以降幂的形式表示
方式:
floor: 负无穷方向上离输入值最近的整数
ceil: 正无穷方向上离输入值最近的整数
round: 四舍五入法取值
fix: 朝0方向上离输入值最近的整数
R输入的是0 1向量,1代表重置,输出为自定义初始值,0输出重置后的最值
作用 :使用迭代方式求解f(z) = 0
- Complex to Magnitude-Angle
- Magnitude-Angle to Complex
- Complex to Real-Imag
- Real-Imag to Complex
功能: 大于上限(小于下限)则停止仿真(也可以不停止),输出指定错误信息。
功能: 保证输入的值是非零值
功能: 保证离散梯度的值小于某个值
注意事项: 仿真设置中,类型为定步长(Fixed-step),编译器为离散编译(discrete)
功能: 保证输入的分辨率在一定范围内
应用: 模拟信号与数字信号的转换
功能: 将某一系统某个时间点的状态转换为状态矩阵,并存储在工作空间
功能: 添加模型的信息,如版本信息,修改信息等
功能: 保存文本信息,不影响模型运行
用法: 在子系统中加个ENABLE模块则变成了使能子系统,需要外加一个输入端口,输入大于0时使能子系统
用法: 与使能子系统用法类似,外加的模块为Trigger
功能: 与子系统类似,但它不依附于主系统,即独立参与运算
端口数: 多输入,单输出
端口数: 多输入,多输出
功能: 即为模型创建一个快捷方式
功能: 调配函数调用子系统
注意事项: 该模块应用于库中
功能: 将多个子系统合并为一个,用的时候可以选择使用哪个子系统
定义: 触发子系统和使能子系统的结合
功能: 与程序中的for类似
配置:
使用方法: if action模块作为if模块的输出,实现if else的功能
使用方法: switch action模块作为switch模块的输出,实现switch case的功能
功能: 封装了多种子系统的Demo
功能: 检测输入的数据类似是否一致,起提示作用
功能: 根据输入的参考信号的数据类型,对传播的数据类型进行调整
功能: 设置输入信号t = 0时的值
功能: 将信号转换为新的数据类型,且不改变信号的数值大小。可以将不同空间的信号合并到通一空间中。
作用对象: 采样速率不同的模块之间,用该模块进行协调
常用模式: ZOH(零阶保持器),Unit Delay(单位延迟)
作用: 设定输入信号的周期,若不同则发出警告
作用: 给出了各个数据类型模块的Demo
作用: 探测出输入信号的各种信息,如宽度,周期等
作用: 配合输入信号值和权值计算采样时间大小
作用: 输出值为输入信号的维度
作用: 用指定信号来替换总线当中的某一信号
作用: 选择输入信号的某维度的值,重新构造为新的矩阵
作用: 输入为多路信号,输出指定下标对应的那一路的信号
功能: 将不同的输入信号合并为一个信号输出
作用: 区分系统处理仿真环境或实时工作室环境
功能: 手动切换开关的位置,并保留最后一次的设置
用法与下标向量模块类似
作用: Goto接收输入信号,From输出该信号,相当于隐藏的线将其相连
- 注意事项 两者的Tag需要相, 才可匹配
- Tag的作用范围也可调节为本地,全局等
- Tag作用范围为Scoped时,需要配合Goto Tag Visibility来使用
作用: 解决不同层级间的数据通信
注意事项: 只能读写同层或上层的数据存储记忆模块中的数据
作用: 将仿真数据存储到指定文件名的文件中
作用: 将仿真数据存储到matlab工作空间中
区别: 与普通示波器的区别在于不需要与信号输入相连,而只需在设置参数中选择所需显示的信号
功能: 将输入的XY坐标连线,形成一幅连续的图像
功能: 输入值存在0时终止仿真,一般与关系运算符模块配合使用
功能: 从指定位置提取数据输入到模型中
功能: 信号的波形与正弦波类似,但是频率随时间增长而增长。
功能: 在每个时间周期内输出数值线性增加,然后在进入下个周期前迅速减小
功能: 根据自己的需要构造所需的信号波形
说明: 前者服从正态分布,后者服从均一分布。
功能: 设置了上限后,计数达到上限则归零,重复
注意事项: 时钟用于连续系统,数字时钟用于离散系统,数字时钟可以调节时间间隔使曲线平滑。
功能: 定义一个函数,可以带未知参数,并用u(1),u(2)…来表示,然后传进自变量以及参数值,输出即为函数值。
功能: 该模块可以使用Matlab内置的函数。
定义: 该模块独立编译,不受外部模型的影响。使用该模块需要系统安装编译器
功能: 可以用C语言等其他语言与matlab进行交互
作用: 在普通的单位延迟模块上加上使能以及重置端口,使用更灵活
功能: 输出端口有两个,一个是有延迟功能的,一个是不经过延迟的,方便进行比较
功能: 与C语言中的++和–类似
功能: 递减输入数值至0