当前位置: 首页 > news >正文

【MWORKS专业工具箱系列教程】控制系列工具箱第四期:时域分析

本工具箱教程以控制系统模型创建、分析与设计流程为主线,通过大量示例介绍MWORKS控制系统工具箱的功能和具体使用。共计10篇文章,上一篇主要介绍了控制系统连接与化简。

同元软控:【MWORKS专业工具箱系列教程】控制系 列工具箱第三期:控制系统连接与化简

本教程代码均可直接复制到Syslab中运行,使用教程中代码前需参照下述方法加载函数库内容: 方法一:在Syslab的命令行窗口先后输入using TyControlSystems、using TyPlot和using TyBase并回车(重启软件或命令行窗口后需重新输入); 方法二:按照下图中的方法预加载函数库(设置好后每次启动软件默认加载)。


第四期:时域分析

时域分析是一种最直观、最直接的分析。一般可以为控制系统预先规定一些特殊的试验输入信号,然后比较各种系统对这些信号的响应情况。

经常采用的试验输入信号

一. 阶跃响应- step() 

  • 对于稳定系统,通常在系统阶跃响应曲线上来定义系统动态性能指标

  • 系统的单位阶跃响应不仅完整反映了系统的动态特性,而且反映了系统在单位阶跃信号输入下的稳定状态。同时,单位阶跃信号又是一个最简单、最容易实现的信号。

Syslab的 step 函数用法

step函数调用方式

说明

step(sys)

计算并直接返回系统阶跃响应图。其中sys可以是:tf、ss、zpk

step(sys,t)

计算向量 t 指定时间内的阶跃响应。t为标量:计算[0,t]内的响应,t为向量,计算各点的阶跃响应。示例:
step(G,5)
step(G,0:0.1:10)

step(___,fmt)

计算并直接返回系统阶跃响应图。fmt为绘图样条属性设置字符串。示例:
step(G,"-bo",linewidth = 1,markersize = 5,…)
step(G,"-r",linewidth = 1, ishold = true,…)
# 将图形绘制在已有figure上

y,t,x = step(sys, t, fig = false)

计算阶跃响应数据,y 为响应数据数组,t 为时间向量,x 为状态数组

示例18:计算并绘制以下系统的阶跃响应

G\left( s \right) = \frac{​{2s + 25}}{​{​{s^2} + 4s + 25}}

阶跃响应数据获取

通过下述形式可以获取到阶跃响应数据

output:

julia> t
101-element Vector{Float64}:0.00.0350.070.105000000000000010.140.175000000000000020.21000000000000002⋮3.3253.36000000000000033.39500000000000053.433.46500000000000033.5000000000000004julia> y
1×101 Matrix{Float64}:0.0  0.0795734  0.174988  0.281454  0.394494  0.510026  …  1.00115  1.00115  1.00111  1.00105  1.00096  1.00086

MIMO系统的阶跃响应

示例19:计算并绘制双输入双输出系统的阶跃响应

同样可以通过下述方式获取MIMO系统阶跃响应数据

output:

julia> t
1301-element Vector{Float64}:0.00.092103403719720920.184206807439441840.276310211159162770.36841361487888370.46051701859860460.5526204223183255⋮119.27390781703859119.36601122075831119.45811462447804119.55021802819776119.64232143191748119.7344248356372julia> y
2×1301×2 Array{Float64, 3}:
[:, :, 1] =0.0  0.0830874  0.14644   0.188473  0.208858  0.208431  …  -0.153846  -0.153846  -0.153846  -0.153846  -0.153846     0.0  0.117899   0.279744  0.473182  0.685291  0.903305      1.15385    1.15385    1.15385    1.15385    1.15385      [:, :, 2] =0.0  0.0871829  0.162123  0.221969  0.264909  0.290181  …  -6.93889e-17  -6.93889e-17  -6.93889e-17  -6.93889e-17    0.0  0.0266207  0.101938  0.217719  0.364331  0.531374      1.0           1.0           1.0           1.0

对于MIMO系统的响应数据 y 为一个三维数组,其维度为:,其中:

  • N_{y}为系统输出数量

  • N为时间向量长度

  • N_{u}为系统输入数量

因此,通过 y[i,:,j] 可取出第 i 个输入到第 j 个输出的阶跃响应数据向量。

小彩蛋:二阶系统响应面绘制

示例20:计算并绘制标准二阶系统阶跃响应曲线及响应面

G\left( s \right) = \frac{1}{​{​{s^2} + 2\varsigma s + 1}}

① 阶跃响应曲线计算与绘制

② 阶跃响应面绘制

时域性能指标获取

通常控制系统的性能指标以系统对单位阶跃输入量的瞬态响应形式给出。

通过 stepinfo() 函数计算并获取动态系统阶跃响应特性

示例21:获取系统的阶跃响应特性

G\left( s \right) = \frac{​{25}}{​{​{s^2} + 3s + 15}}

output:

julia> # 上升时间julia> res.RiseTime
1×1 Matrix{Float64}:0.2647250314828522julia> # 最大超调julia> res.Overshoot
1×1 Matrix{Float64}:37.1410271661408julia> # 峰值julia> res.Peak
1×1 Matrix{Float64}:1.371410271661408julia> # 峰值时间julia> res.PeakTime
1×1 Matrix{Float64}:0.6447238260382373julia> # 调整时间julia> res.SettlingTime
1×1 Matrix{Float64}:2.246034069329275

二、脉冲响应- impulse() 

系统的脉冲响应(或称为冲激响应)可以用 impulse() 函数进行计算并绘制脉冲响应图。

连续时间脉冲信号

连续时间单位脉冲信号是一个持续时间为∆的的短脉冲,对于任意的∆值,其面积均为1,随着∆→0,𝛿Δ(𝑡)变得越来越窄,越来越高,但单位面积不变。

离散时间单位脉冲(样本)序列

Syslab的 impulse 函数用法

impulse 调用方式

说明

impulse(sys)

计算并直接返回系统脉冲响应图。其中sys可以是:tf、ss、zpk

impulse(sys,t)

计算向量 t 指定时间内的脉冲响应。t为标量:计算[0,t]内的响应,t为向量,计算各点的脉冲响应。示例:
impulse(G,5)
impulse(G,0:0.1:10)

impulse(___,fmt)

计算并直接返回系统脉冲响应图。fmt为绘图样条属性设置字符串。示例:
impulse(G,"-bo",linewidth = 1,markersize = 5,…)
impulse(G,"-r",linewidth = 1, ishold = true,…) # 将图形绘制在已有figure上

y,t,x = impulse (sys, t, fig = false)

计算阶跃响应数据,y 为响应数据数组,t 为时间向量,x 为状态数组

示例22:计算以下系统的脉冲响应

H\left( s \right) = \frac{1}{​{​{s^2} + 0.2s + 1}}

output:

output:

同样的,可以通过下述形式获取脉冲响应数据:

output:

julia> t
1906-element Vector{Float64}:0.00.31415926535897930.62831853071795860.94247779607693791.25663706143591721.57079632679489661.8849555921538759⋮596.9026041820607597.2167634474197597.5309227127786597.8450819781376598.1592412434966598.4734005088555julia> y
1×1906 Matrix{Float64}:0.0  0.299509  0.552363  0.737413  0.841231  0.858915  …  -7.88052e-27  -9.66575e-27  -1.04252e-26  -1.01493e-26

小技巧:求脉冲响应的另一种方法

考虑系统的脉冲响应表达式为:Y\left( s \right) = G\left( s \right) \cdot U\left( s \right),其中脉冲信号U\left( s \right)=1 

Y\left( s \right) = G\left( s \right) \cdot 1 = s \cdot G\left( s \right) \cdot \frac{1}{s}

因此,求取G\left( s \right)的脉冲响应,可以转化为求取s\cdot G\left( s \right)的单位阶跃响应

示例23:针对示例22,通过阶跃函数求取其脉冲响应

三. 斜坡信号响应

Syslab控制工具箱没有提供斜坡信号响应函数,同样可以考虑使用上一节中等效的方法进行求取。

考虑系统的斜坡响应表达式为: Y\left( s \right) = G\left( s \right) \cdot U\left( s \right) ,其中斜坡信号:  U\left( s \right)=1/s^{2} 

Y\left( s \right) = G\left( s \right) \cdot \frac{1}{​{​{s^2}}} = \frac{1}{s} \cdot G\left( s \right) \cdot \frac{1}{s}

G\left( s \right) 的斜坡响应,转化为求取 G\left( s \right)/s 的单位阶跃响应

示例24:计算以下系统的斜坡响应

output:

类似的,系统对单位加速度信号的响应可以使用同样的方式计算得到。

四. 对任意信号的响应- lsim() 

为了求对任意输入信号的响应,可以使用 lsim() 函数

Syslab的 lsim 函数使用

lsim调用方式

说明

lsim(sys,u,t)

计算并直接返回系统对输入信号(t,u)的时域响应图。其中 t 为时间向量

lsim(sys,u,t,fmt)

计算并直接返回系统对输入信号(t,u)的时域响应图。fmt为绘图样条属性设置字符串。示例:
lsim(G,u,t,"-bo",linewidth = 1,markersize = 5,…)
lsim(G,u,t,"-r",linewidth = 1, ishold = true,…) # 将图形绘制在已有figure上

lsim(sys,u,t,x0 = value)

当sys是状态空间模型时,可以进一步指定初始状态值 x0 ,注意 x0 为向量形式

lsim(sys,u,t,x0 = value,fmt)

当sys是状态空间模型时,可以进一步指定初始状态值 x0 ,fmt为绘图样条属性设置字符串

res = lsim (sys, u, t, fig = false)

计算任意信号响应数据,生成 res 响应数据为SimResult结构体,不出图。其中:
res.t:时间向量
res.y:响应数组

y,t,x = lsim (sys, u, t, fig = false)

计算任意信号响应数据,y 为响应数据数组,t 为时间向量,x 为状态数组

G\left( s \right) = \frac{3}{​{​{s^2} + 2s + 3}}

output:

示例26:考虑以下系统在输入信号 u = e^{-t} 作用下的响应情况,假设初始状态为 x\left( 0 \right) = 0

output:

改变初始状态为:

output:

其余函数请参阅Syslab-控制系统工具箱帮助文档

"Syslab控制系统工具箱-时域分析"帮助文档icon-default.png?t=O83Ahttps://www.tongyuan.cc/help/SyslabHelp.html#/Doc/TyControlSystems/LinearAnalysis/TimeAndFrequencyDomainAnalysis.html%23%E6%97%B6%E5%9F%9F%E5%88%86%E6%9E%90本系列第五期文章将对频域分析进行详尽解读,敬请关注!

相关文章:

  • ARCGIS PRO SDK MapProjectItem 地图项目类
  • Flutter路由
  • JavaEE: 深入探索TCP网络编程的奇妙世界(五)
  • 基于SpringBoot+Vue的仓库管理系统
  • Electron 主进程与渲染进程、预加载preload.js
  • STM32F1+HAL库+FreeTOTS学习14——数值信号量
  • 【Go】-Websocket的使用
  • ThinkPHP一对多的关联模型运用
  • ClickHouse | 入门
  • 2024 年实验室设备管理系统的选择指南
  • 第四章-课后练习5:修正指数曲线模型——excel和python应用(2)
  • 力扣 简单 104.二叉树的最大深度
  • Llama 系列简介与 Llama3 预训练模型推理
  • springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)
  • 【数据治理-设计数据标准】
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Druid 在有赞的实践
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 基础知识 - 入门篇(一)
  • Vue.js源码(2):初探List Rendering
  • 基于Android乐音识别(2)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端设计模式
  • 我这样减少了26.5M Java内存!
  • 一道面试题引发的“血案”
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 异步
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Android开发者必备:推荐一款助力开发的开源APP
  • Python 之网络式编程
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #VERDI# 关于如何查看FSM状态机的方法
  • #每日一题合集#牛客JZ23-JZ33
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (003)SlickEdit Unity的补全
  • (11)MSP430F5529 定时器B
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Note)C++中的继承方式
  • (二)测试工具
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (回溯) LeetCode 46. 全排列
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)http协议
  • .gitignore不生效的解决方案
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CLR基本术语
  • .NET 读取 JSON格式的数据
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)