MATLAB 之 Simulink系统的仿真与分析

news2024/11/13 9:29:45

这里写目录标题

  • 一、Simulink 系统的仿真与分析
    • 1. 设置仿真参数
      • 1.1 Solver 参数设置
      • 1.2 Data lmport/Export 参数设置
    • 2. 运行仿真与仿真结果分析
      • 2.1 运行仿真
      • 2.2 仿真结果分析

一、Simulink 系统的仿真与分析

  • 系统的模型建立之后,选择仿真参数和数值算法,便可以启动仿真程序对该系统进行仿真。

1. 设置仿真参数

  • 在系统仿真过程中,事先必须对仿真算法、输出模式等各种仿真参数进行设置。在模型编辑窗口打开仿真参数设置对话框有以下方法。
  • (1) 单击工具栏中的 Model Configuration Parameters 按钮。
  • (2) 选择 Simulation ⟶ \longrightarrow Model Configuration Parameters 命令。
  • 打开的仿真参数设置窗口如下图所示。

在这里插入图片描述

  • 在仿真参数设置窗口中,仿真参数分为以下 7 类。
  • (1) Solver 参数:用于设置仿真起始和终止时间,选择微分方程求解算法并为其规定参数,以及选择某些输出选项。
  • (2) Data Import/Export 参数:用于管理工作空间数据的导入和导出。
  • (3) Optimization 参数:用于设置仿真优化模式。
  • (4) Diagnostics 参数:用于设置在仿真过程中出现各类错误时发出警告的等级。
  • (5) Hardware Implementation 参数:用于设置实现仿真的硬件。
  • (6) Model Referencing 参数:用于设置参考模型。
  • (7) Simulation Target 参数:用于设置仿真模型目标。

1.1 Solver 参数设置

  • Solver(求解算法)是利用模型中所含的信息来计算系统动态行为的数值积分算法。
  • Simulink 提供的求解算法可支持多种系统的仿真,其中包括任何规模的连续时间(模拟)、离散时间(数字)、混杂(混合信号)和多采样率系统。
  • 这些求解算法可以对刚性系统以及具有不连续过程的系统进行仿真。可以指定仿真过程的参数,包括求解算法的类型和属性、仿真的起始时间和结束时间以及是否加载或保存仿真数据。
  • 此外,还可以设置优化和诊断信息。在仿真参数设置窗口左侧窗格中选择 Solver 选项,在右侧窗格中会列出所有 Solver 参数,如图12-8所示。

在这里插入图片描述

  • (1) 设置仿真起始和终止时间(Simulink time)。在 Start time 和 Stop time 两个编辑框中,通过直接输入数值来设置仿真起始时间和终止时间,时间单位是秒 (s)。
  • (2) 仿真算法的选择(Solver options)。在 Type 下拉列表框中设定算法类别:Fixed-step(固定步长)和 Variable-step(变步长)算法,在 Solver 下拉列表框中选择具体算法。
  • 仿真算法根据步长的变化分为固定步长类算法和变步长类算法。固定步长是指在仿真过程中计算步长不变,而变步长是指在仿真过程中要根据计算的要求改变步长。对于这两类算法,它们所对应的相关选项及具体算法都有所不同。
  • 在采用变步长类算法时,首先应该指定允许的误差限,包括相对误差限(Relative Tolerance)和绝对误差限(Absolute Tolerance),当计算过程中的误差超过该误差限时,系统将自动调整步长,步长的大小将决定仿真的精度。
  • 在采用变步长类算法时还要设置所允许的最大步长(Max Step Size),在默认值(Auto)的情况下,系统所给定的最大步长为(终止时间起始时间) /50。
  • 在一般情况下,系统所给的最大步长已经足够,但如果用户所进行的仿真时间过长,则默认步长值就非常大,有可能出现失真的情况,这时应根据需要设置较小的步长。
  • 在采用固定步长算法时,要先设置固定步长。由于固定步长算法的步长不变,所以此时不设定误差限,而多了一个模型类型(Tasking Mode for Periodic Sample Times)的选项,该选项包括 Auto(默认值)、SingleTasking(单任务和 MultiTasking(多任务)。
  • 单任务是指各模块的采样速率相同,不检测采样速率的传递;多任务是指在模型中模块具有不同的采样速率,同时检测模块之间采样速率的传递;默认值则根据模块的采样速率是否相同来决定采用单任务还是多任务。
  • 变步长和固定步长包含多种不同的具体算法。一般情况下,连续系统仿真应该选择 ode45 变步长算法,对刚性问题可以选择变步长的 ode15s 算法,离散系统一般默认选择固定步长的 discrete(no continuous states)算法,要注意在仿真模型中含有连续环节时不能采用该仿真算法,而可以采用诸如 4 阶 Runge-Kutta 法这样的算法来求解问题。

1.2 Data lmport/Export 参数设置

  • 导入的数据包括输入信号和初始状态,输入信号可以用标准信号或自定义函数生成。
  • 导出的数据包括输出信号和仿真过程的状态数据,可以用于生成图形或进行其他处理。Data ImportExport(数据导入/导出)参数选项如下图所示,包含 Load from workspace、Save to workspace or file 和 Simulation Data Inspector 三个部分。

在这里插入图片描述

  • (1) Load from workspace(从工作空间中载入数据)。在仿真过程中,如果模型中有输入端口(In 模块),可从工作空间直接把数据载入到输入端口,即先勾选 Data Import/Export 参数选项中的 Input 复选框,然后在后面的编辑框中输入数据的变量名。变量名可以采用不同的输入形式。
  • ① 矩阵形式。如果以矩阵形式输入变量名,则矩阵的列数必须比模型的输入端口数多一个,MATLAB把矩阵的第一列默认为时间向量,后面的每一列对应每一个输入端口,矩阵的第一行表示某一时刻各输入端口的输入状态。
  • 另外,也可以把矩阵分开来表示,即 MATLAB 默认的表示方法 [ t , u ] [t,u] [t,u],其中 t t t 是一维时间列向量,表示仿真时间, u u u 是和 t t t 长度相等的 n 维列向量(n 表示输入端口的数量),表示状态值。
  • 例如,我们在命令行窗口中定义 t t t u u u
>> t=(0:0.1:10)';
>> u=[sin(t),cos(t).*sin(t),exp(-2*t).*sin(t)];
  • 则 3 个输入端口输入的数据与时间的关系分别为 sin ⁡ t \sin t sint cos ⁡ t sin ⁡ t \cos t\sin t costsint e − 2 ∗ t sin ⁡ t e^{-2*t}\sin t e2tsint
  • ② 包含时间数据的结构形式。对于包含时间数据的结构,在 MATLAB 中有非常严格的规定,即在结构中必须有两个名字不能改变的顶级成员:time 和 signals。
  • 在 time 成员中包含一个列向量,表示仿真时间;signals 成员是一个向量,向量中的每个元素对应一个输入端口,并且每个元素必须包含一个名字同样不能改变的 values 成员,values 成员也包含一个列向量, 对应于输入端口的输入数据。
  • 例如,对于上例,我们若改为包含时间数据的结构输入,则命令格式如下:
>> t=(0:0.1:10)';
>> A.time=t;
>> A.signals(1).values=sin(t);
>> A.signals(2).values=cos(t).*sin(t);
>> A.signals(3).values=exp(-2*t).*sin(t);
  • 在 Input 复选框右侧的文本框中输入 A,则产生的仿真曲线与上面矩阵形式数据输入后的输出曲线完全相同。
  • 在 Input 复选框的下面,还有一个 Initial state 复选框,它表示的是模块的初始化状态。对模块进行初始化的方法是,先勾选 Initial state 复选框,然后在右侧的文本框中输入初始化数据的变量名。变量要求的形式与前面的输入端口数据的变量形式基本相同,但变量中的数据个数必须和状态模块数相同。
  • (2) Save to workspace or file(保存到工作空间或文件)。在 Save to workspace or file 区域中,可以选择的选项有 Time(时钟)、States(状态)、Output(输出端口)、Final states(最终状态)、Signal logging(信号)等。
  • 同载入数据的形式一样, 保存数据也有矩阵、结构和包含时间数据的结构 3 种形式,在 Format 下拉列表框中可以根据需要进行选择。对于不同的保存形式来说,Time 的格式是不变的,总是对应仿真的采样时间。

2. 运行仿真与仿真结果分析

2.1 运行仿真

  • 在 MATLAB 中,可以在 Simulink 模型编辑窗口以交互方式运行仿真。Simulink 仿真有 3 种模式,可以通过在模型编辑窗口选择 Simulation ⟶ \longrightarrow Mode 命令进行设置。
  • (1) Normal:标准模式(默认设置),以解释方式运行,仿真过程中能够灵活地更改模型参数和显示结果,但仿真运行慢。
  • (2) Accelerator:加速器模式,通过创建和执行已编译的目标代码来提高仿真性能,而且在仿真过程中能够较灵活地更改模型参数。加速模式下运行的是模型编译生成的 s 函数,不能提供模型覆盖率信息。
  • (3) Rapid Accelerator:快速加速器模式,能够比 Accelerator 模式更快地进行模型仿真,该模式不支持调试器和性能评估器。
  • 设置完仿真参数之后,单击模型编辑窗口工具栏中的 Run 按钮,或选择 Simulation ⟶ \longrightarrow Run 命令,便可启动对当前模型的仿真。
  • Simulink 支持使用仿真步进器(Simulation Stepper)进行调试,便于逐步查看示波器上的仿真数据,或检查系统改变状态的方式及时间。单击模型编辑窗口工具栏中的 Step Forward 按钮,开始单步仿真。单击模型编辑窗口工具栏中的 Stop 按钮,终止单步仿真。
  • 运行仿真前,单击模型编辑窗口工具栏中的 Stepping Options 按钮,在打开的对话框中勾选 Enable stepping back 复选框,在仿真时单击模型编辑窗口工具栏中的 Step Back 按钮,回溯仿真过程。

2.2 仿真结果分析

  • Simulink 提供了多种有助于了解仿真行为的调试工具。使用 Simulink 中提供的查看器和示波器查看信号,实现仿真行为可视化。还可以将仿真结果导出到 MATLAB 工作区,以便使用 MATLAB 算法以及可视化工具来查看和分析数据。
  • 在仿真过程中,用户可以设置不同的输出方式来观察仿真结果。为了观察仿真结果的变化轨迹可以采用 3 种方法。
  • (1) 把仿真结果送给 Scope 模块或者 XYGraph 模块。Scope 模块显示系统输出量对于仿真时间的变化曲线,XYGraph 模块显示送到该模块上的两个信号中的一个对另一个的变化关系。
  • (2) 把仿真结果送到输出端口,将结果导出到工作空间,然后用 MATLAB 命令画出该变量的变化曲线。在运行这个模型的仿真之前,先在 Configuration Parameters 对话框的 Data Impot/Export 选项卡中,规定时间变量和输出变量的名称(假定分别设定为 t t t y y y),那么,当仿真结束后,时间值保存在时间变量t中,对应的输出端口的信号值保留在输出变量 y y y 中,这时可以在命令行窗口使用 whos 命令查看内存变量,也可以使用绘图命令绘制系统输出量的变化曲线。
  • (3) 把输出结果送到 To Workspace 模块,在 To Workspace 模块参数对话框中填入输出变量名称,并在 Save format 下拉列表中选择 Array 选项,从而将结果直接存入工作空间,然后用 MATLAB 命令画出该变量的变化曲线。
  • 仿真输出结果还有其他一些输出方式,例如,使用 Display 模块可以显示输出数值。
  • 例如,我们利用 Simulink 构建函数曲线 y = 5 r + 16 y=5r+16 y=5r+16
  • Simulink 的 Sources 模块库中提供了时钟、脉冲、正弦波等常用信号源,可利用这些常用信号源和 Simulink 模块库中提供的求和、乘积、增益以及 MATLAB 函数等其他模块进行适当的连接组合,即可构建所需的各种信号源。
  • 下面采用两种方法来构建函数曲线,一种方法是采用 MATLAB Function 模块,另一种方法是采用基本模块的组合连接。
  • 方法 1:采用 MATLAB Function 模块构建仿真模型。
  • (1) 启动 Simulink 并打开模型编辑窗口,将所需模块添加到模型中。在 Simulink Library Browser 窗口单击 Sources 模块库,在右侧的窗口中找到 Clock(时钟)模块,然后用鼠标将其拖到模型编辑窗口。
  • 同样,在 User-Defined Functions(用户自定义函数)模块库中拖出 MATLAB Function(MATLAB 函数)模块,在 Sinks 模块库中拖出 To Workspace(输出到工作空间)模块、Scope(示波器)模块进行连接组合,其模型如下图所示。

在这里插入图片描述

  • (2) 设置模块参数。双击 MATLAB Function 模块,建立其信号源的函数。
function	y=f(t)
	y=5*t*t+16;
  • 双击两个输出到工作空间模块,分别输入变量名为 t t t y y y,仿真参数取默认值。
  • (3) 启动仿真,函数曲线下图所示。

在这里插入图片描述

  • 方法 2:采用基本模块组合构建仿真模型。
  • 构建该信号源该信号源的另一种方法石将一些常用的数学模块进行组合建模,其模型如下图所示。

在这里插入图片描述

  • 模型中用到了 Clock(时钟)、Constant(常数)、Gain(增益)、Product(乘积)和 Sum(求和)等模块。双击增益模块输入 5,常数模块输入 16,最后设置仿真参数即可。其输出结果与方法 1 相同。
  • 与方法 1 相比,该方法采用的模块数较多一些。另外,模型中还采用 XY Graph 模块将输出信号的轨迹显示出来。
  • 例如,我们利用 Simulink 仿真求 I = ∫ 0 1 x ln ⁡ ( 1 + x ) d x I=\int_{0}^{1}x\ln \left ( 1+x\right)\mathrm{d}x I=01xln(1+x)dx
  • 首先打开模型编辑窗口,将所需模块添加到模型中。在 Simulink Library Browser 窗口中单击 Sources 模块库,将 Clock 模块拖到模型编辑窗口。
  • 在用户定义模块库 User-Defined Functions 中把函数模块 Fcn 拖到模型编辑窗口,在连续系统模块库 Continuous 中把 Integrator 模块拖到模型编辑窗口,在 Sinks 模块库中把 Display 模块拖到模型编辑窗口。
  • 然后,我们设置模块参数并连接各个模块组成仿真模型。双击 Fcn 模块,打开 Block Parameters 对话框,在 Expression 栏中输入 u*log(1+u),其余模块参数不用设置。
  • 设置模块参数后,用连线将各个模块连接起来组成仿真模型,如下图所示。

在这里插入图片描述

  • 设置系统仿真终止时间为 1s,运行仿真模型,Display 模块显示仿真结果为 0.25。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW自适应屏幕分辨率的两种方法

文章目录 前言一、方案1:组合缩放1、举例2、验证 二、方案2:分隔栏匹配窗格1、举例2、验证 前言 前阵子做的一个项目是在显示器分辨率为 2560*1600,缩放选项为 150% 的笔记本上开发的,但是当 vi 文件在另一台显示器分辨率为 1920…

ThingsBoard IoT Gateway 专栏 分享 前言

最近有朋友询问tb-gateway相关的问题,于是抽业余时间查看了一下官方文档,并做了一些尝试和案例。接下来我会将这些分享给大家。这也是一个系列,将会和我的ThingsBoard专栏放在一起。 ThingsBoard IoT Gateway 能够帮助你将连接到传统和第三方…

一次Android APK打包的报错

打包的时候报了一个错 没有记下来 但是解决方法是 打开Window-> Package Manager 移除这个(这个是Unity的广告组件

杰西·利弗莫尔股票大作手操盘术策略

文章目录 上升趋势演变多次回撤回升,区间震荡向上突破,恢复上升趋势前期回升高点下挫,趋势逆转警告信号向下突破,确认下降趋势 下降趋势演变多次回升回撤,区间震荡向下突破,恢复下降趋势前期回撤低点反弹&a…

mysql-大数据的上传(load data)

文章目录 1. 大批量数据的上传如果使用insert语句就会很慢,可以使用load data的方式 1. 大批量数据的上传如果使用insert语句就会很慢,可以使用load data的方式 如下,我建立了一个这样的数据表, 2. 我要将以下数据插入数据表&am…

基于FPGA的RC滤波器设计实现

目录 简介: 传递函数 FPGA代码实现 总结 简介: RC滤波器的特性基本情况介绍 RC一阶低通滤波介绍;RC滤波器电路简单,抗干扰性强,有较好的低频性能,并且选用标准的阻容元件易得,所以在工程测…

【滤波】平滑

%matplotlib inline#format the book import book_format book_format.set_style()简介 当你考虑未来的数据时,卡尔曼滤波器的性能并不是最优的。例如,假设我们在跟踪飞行器,最新的观测值突然偏离的很离谱,就像这样(我…

PHP的pack/unpack

前言:直接参照官网。 PHP: pack - Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 PHP: unpack - Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 1、作用 (1)pack:将数据打包成二进制字符串。将输入数据…

链表刷题(9-11)

目录 相交链表 环形链表 环形链表Ⅱ 相交链表 力扣 第一种思路:判断尾节点地址是否相同,时间复杂度为O(N^2)。 第二种思路:(节点对齐)记录两个链表节点个数,再根据节点差设置两个快慢指针进行next节点比对。时间复杂度O(N)(3N)…

PHP 税务申报征收系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 税务申报征收系统 是一套完善的WEB设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959340https://downl…

spring boot security之前后端分离配置

前言 spring boot security默认配置有一个登录页面,当采用前后端分离的场景下,需要解决两个问题: 前端有自己的登录页面,不需要使用spring boot security默认的登录页面登录相关接口允许匿名访问 因此需要自定义相关实现。 自…

【C51 --- 单片机学习历程与分享】

51单片机学习历程与分享 开篇 --- 认识单片机1、什么是单片机?2、51单片机主要资源3、STC89C51 芯片简介4、单片机脚位判断5、51单片机的应用领域6、如何学好51单片机?7、参考文献 开篇 — 认识单片机 前言: 1.本专栏适合有一定C语言功底的读…

数据结构与算法:数组和字符串

1 数组 1.1 集合、列表、数组的联系与区别 集合:由一个或多个确定的元素所构成的整体。类型不一定相同、确定、无序、互异。 列表(又称线性列表):按照一定的线性顺序,排列而成的数据项的集合。类型不一定相同、有序…

所有独立站都适合做谷歌推广吗?怎么做好谷歌推广?

大家有没有这种困扰:是不是所有的独立站都适合用谷歌来打广告呢?我的行业能不能用Google Ads来推广?如果我刚刚起步,我应该开启哪种类型的广告呢?让我们一起来揭秘吧! 如果你是一个独立站卖家,…

用异或计算只出现一次的数字

因为与0异或的都是数字本身&#xff0c;数字本身和数字本身异或是等于0&#xff0c;应用这个定理&#xff0c;我们来做这个题 链接: leetcode用异或计算只出现一次的数字 class Solution { public:int singleNumber(vector<int>& nums) {size_t v 0;for(size_t i …

Git指南 - 刚提的commit 怎么找不到了(游离分支)?

在有一次使用git时&#xff0c;我提交commit后&#xff0c;并未push&#xff0c;然后直接切到了当前分支的某个tag&#xff0c;最后我想切回来的时候&#xff0c;竟然找不到我刚才提交commit的节点了… 关联篇 Git指南 - 你该掌握的那些基础认知和首次配置Git指南 - 项目实战中…

uni-app处理请求发送表单类型的数据

我在本地开发了一个分页的接口 这里 我设置的是 form-data 参数类型 要的是个表单类型的数据 然后呢 我按传统PC端的方式处理了数据 <template><view class "box"><view class"management"></view></view> </template…

QT Creator上位机学习(二)基础布局控件及信号与槽

c# 系列文章目录 文章目录 布局控件信号与槽第二种connect 程序图标使用技巧 布局控件 美化界面的时候&#xff0c;经常需要进行一些控件的布局&#xff0c;这时需要使用一些容器类。 在快捷栏出&#xff0c;也有一些布局设计的选择 如上图&#xff0c;其中涉及到几种编辑…

【图像软件篇】Windows最强大的截图贴图神器-Snipaste的优化设置

【图像软件篇】Windows最强大的截图贴图神器-Snipaste的优化设置 个人用户免费、开源&#xff0c;以及和剪贴板神器Ditto一样简单易用&#xff0c;默认设置上手够快&#xff0c;除了没有长截图和OCR功能&#xff0c;我觉得它已经做到了截图贴图软件的天花板&#xff1b;本文我…

Springboot的配置原理

一、起步依赖–Maven的依赖传递 原始基于Spring框架来运行&#xff0c;需要手动配置很多依赖项&#xff0c;而Springboot简化了基于Spring框架的开发–引入Springboot的起步依赖&#xff0c;里面引入了所有常见的Springboot的依赖&#xff0c;都是通过maven的依赖传递自动的传…