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

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

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


第五期:频域分析

系统对正弦输入信号的稳态响应称为频率响应。频率特性的图形化表示常用伯德图(bode)、奈奎斯特图(nyquist)以及尼柯尔斯图(nichols)。

一、伯德图(对数坐标图)-  bode() 

 bode() 函数的基本用法

Syslab中可通过 bode() 函数直接绘制系统的伯德图,其调用方式及说明如下:

bode 调用方式

说明

bode(sys)

计算系统频率响应,并绘制系统bode图

bode(sys, w)

计算系统频率响应,并绘制系统bode图,其中 w 为指定的计算频率:
w 为标量:频率特性计算范围为[0,w],Syslab将自动计算频率向量
w 为向量:系统将按照 w 计算指定频率点的响应

bode(___,fmt)

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

mag, phase, wout = bode(sys, fig = false)

计算系统频率响应数据,不出图。其中:
mag:幅频特性数组,维度为:输出数量 * 输入数量 * 频率向量长度
phase:相频特性数组,维度为:输出数量 * 输入数量 * 频率向量长度
wout:频率向量

mag, phase, wout = bode(sys, w, fig = false)

计算系统频率响应数据,不出图。其中:
mag:幅频特性数组,维度为:输出数量 * 输入数量 * 频率向量长度
phase:相频特性数组,维度为:输出数量 * 输入数量 * 频率向量长度
wout:频率向量

示例27: 计算系统频率响应并绘制bode图

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

output:

output:

绘制不同阻尼的二阶系统频率响应

output:

示例28: 计算下面MIMO系统频率响应并绘制bode图

output:

获取系统频率响应数据

获取示例28所描述系统的频率响应数据

output:

julia> mag
2×2×100 Array{Float64, 3}:
[:, :, 1] =
 0.153856  0.00153848
 1.15386   1.00001

[:, :, 2] =
 0.153859  0.00172822
 1.15387   1.00002

[:, :, 3] =
 0.153862  0.00194136
 1.15387   1.00002

;;; …

julia> phase
2×2×100 Array{Float64, 3}:
[:, :, 1] =
 179.339      89.9119
  -0.0117543  -0.0881486

[:, :, 2] =
 179.257      89.901
  -0.0132043  -0.0990199

[:, :, 3] =
 179.166      89.8888
  -0.0148333  -0.111232

;;; …

julia> wout
100-element Vector{Float64}:
    0.01
    0.011233240329780271
    0.012618568830660204
    0.014174741629268049
    ⋮

系统频率响应数据 mag phase 均为三维数组,其维度: N_{y} \ast N_{u} \ast length\left( wout \right),其中:

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

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

  • length\left( wout \right)为频率向量长度

因此,通过 mag[i,j,:] 可取出第 j 个输入到第 i 个输出的幅频响应数据向量

开环频域指标

开环频域指标示意

通过 margin() 函数计算系统开环频率指标

示例29: 设一闭环系统如下,绘制其开环传递函数bode图,并确定其增益裕度、相位裕度

output:

获取系统开环频域指标具体数值

output:

julia> Gm # 绝对单位,可通过 20*log10.(Gm)计算dB值
1×1 Matrix{Float64}:
 3.1369449122043203

julia> Pm # 相位裕度
1×1 Matrix{Float64}:
 103.6573039145391

julia> Wcg # 增益裕度对应频率
1×1 Matrix{Float64}:
 4.013193642825267

julia> Wcp # 开环剪切频率
1×1 Matrix{Float64}:
 0.4426380973733456

闭环频域指标

闭环频域指标示意

示例30: 考虑如图闭环系统,利用Syslab求取其闭环表达式,并计算其谐振峰值、谐振频率和带宽

output:

# 以绝对单位给出谐振峰值,可通过 20*log10.(gpeak)计算dB值
julia> gpeak, fpeak = getPeakGain(Gcloseloop)
(1.8371173070796, 0.8164958474285937)

julia> fb = bandwidth(Gcloseloop)
1×1 Matrix{Float64}:
 1.2619964668070902

考虑通过带宽含义计算得到系统带宽

通过循环计算对数幅频特性的幅值下降到 -3dB 对应的频率

output:

julia> w[n]
1.2653317593889428

二、奈奎斯特图(极坐标图)-  nyquist() 

示例31: 计算以下MIMO系统频率响应并绘制Nyquist图


三、尼柯尔斯图(对数幅-相图)-  nichols() 

示例32: 绘制系统对数幅-相图  G\left( s \right) = \frac{​{100}}{​{​{s^2} + 2s + 100}}

output:

 Nyquist 图、 Nichols 图的绘制、修饰与 bode() 用法一致,具体可以参考 bode 图示例及参考文档,这里不再赘述


四、Syslab线性系统分析器APP(Linear System Analyzer)

线性系统分析器可以支持分析和查看线性时不变系统(LTI,Linear Time Invariant)的时域和频域响应。使用该应用程序可以:

  • 查看和比较 LTI 系统的响应

  • 时域响应可视化,例如:阶跃响应、脉冲响应等

  • 频域响应可视化,例如:波特图、奈奎斯特图、尼克尔斯图等

  • 获取系统关键响应特性指标,例如上升时间、调整时间、稳定裕度等

线性系统分析器APP启动入口

  • 启动方式①:通过Syslab App页面程序按钮进入

在Syslab工作区已经定义了一个或若干个系统后,通过Syslab App的按钮直接启动

通过App按钮启动

线性系统分析器App界面打开后,通过菜单:文件→导入,会自动识别当前工作区中已有的控制系统模型,可以选择一个或多个模型导入

导入待分析模型

比如选择导入的模型是G1,那么系统会默认计算其单位阶跃响应并进行可视化

  • 启动方式②:通过命令 tiview() 启动

响应绘图配置

线性系统分析器App提供了 6 种响应图布局和 6 种响应类型,分别为:阶跃、脉冲、波特、波特幅值、奈奎斯特和尼柯尔斯。支持自定义绘图布局以及每个绘图的响应类型。单击:编辑 →绘图配置按钮,弹出绘图配置页面

响应绘图配置

单击响应图配置前的复选框,选中任意一个响应图配置。针对每个响应图,切换响应类型。单击确定按钮,绘图配置完成后,中央视图的曲线窗口会自动绘制配置的响应曲线。

时频域响应指标获取与可视化

在每一个响应绘图中右键,会弹出菜单,可为绘图增加网格,同时,选择特性,可勾选时频域的对应指标,勾选后会在绘图中进行指标的可视化

其余函数请参阅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

本系列第六期文章将对根轨迹分析进行详尽解读,敬请关注!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐