MATLAB 绘制 SISO 和 MIMO 线性系统的时间和频率响应图

2023-11-04 08:12

本文主要是介绍MATLAB 绘制 SISO 和 MIMO 线性系统的时间和频率响应图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、时间响应
  • 二、频率响应
  • 三、极点/零点图和根节点
  • 四、响应特性
  • 五、分析 MIMO 系统
  • 六、系统比较
  • 七、修改时间轴或频率轴数值
  • `如果觉得内容不错,请点赞、收藏、关注`


前言

本例演示如何绘制 SISO 和 MIMO 线性系统的时间和频率响应图。


一、时间响应

创建线性系统。在本例中,创建一个三阶传递函数。

sys = tf([8 18 32],[1 6 14 24])
sys =8 s^2 + 18 s + 32-----------------------s^3 + 6 s^2 + 14 s + 24连续时间传递函数。
模型属性

您可以使用 step and impulse 命令绘制该系统的阶跃和脉冲响应。

subplot(2,1,1)
step(sys)
subplot(2,1,2)
impulse(sys)

在这里插入图片描述

您还可以使用 lsim 命令模拟对正弦波等任意信号的响应。输入信号显示为灰色,系统响应显示为蓝色。

clf
t = 0:0.01:4;
u = sin(10*t);
lsim(sys,u,t)   % u,t define the input signal

在这里插入图片描述

您可以在连续或离散的 tfsszpk 模型中使用绘图命令。对于状态空间模型,您还可以绘制从给定初始状态开始的非强迫响应。例如

A = [-0.8 3.6 -2.1;-3 -1.2 4.8;3 -4.3 -1.1];
B = [0; -1.1; -0.2];
C = [1.2 0 0.6];
D = -0.6;
G = ss(A,B,C,D);
x0 = [-1;0;2];  % initial state
initial(G,x0)
grid

在这里插入图片描述

二、频率响应

频域分析是了解控制系统稳定性和性能特性的关键。Bode 图、Nyquist 图和 Nichols 图是绘制和分析线性系统频率响应的三种标准方法。您可以使用 BodeNicholsNyquist 命令创建这些图。

创建线性系统。

sys = tf([8 18 32],[1 6 14 24])
sys =8 s^2 + 18 s + 32-----------------------s^3 + 6 s^2 + 14 s + 24连续时间传递函数。
模型属性

为该系统绘制 Bode 图。

bode(sys)
grid

在这里插入图片描述

为该系统绘制奈奎斯特图。

nyquist(sys)
grid

在这里插入图片描述

为该系统创建一个尼科尔斯图表。

nichols(sys)
grid

在这里插入图片描述

三、极点/零点图和根节点

系统的极点和零点包含有关其动态、稳定性和性能极限的宝贵信息。例如,考虑以下 SISO 控制回路中的反馈回路。

在这里插入图片描述
G = − ( 2 s + 1 ) s 2 + 3 s + 2 G=\frac{-(2s+1)}{s^{2}+3s+2} G=s2+3s+2(2s+1)

对于增益值 k = 0.7,可以使用 pzmap 绘制闭环极点和零点图。

s = tf('s');
G = -(2*s+1)/(s^2+3*s+2);
k = 0.7;
T = feedback(G*k,1);
pzmap(T)
grid, axis([-2 0 -1 1])

在这里插入图片描述

闭环极点(蓝色 x 标记)位于左半平面内,因此在选择增益 k 时,反馈回路是稳定的。这里的阻尼比约为 0.7,表明闭环响应阻尼良好,这一点可以通过以下数据得到证实:

clf
step(T)

在这里插入图片描述

为了进一步了解环路增益 k 对闭环稳定性的影响,可以绘制闭环极点位置与 k 的函数关系图。

rlocus(G)
grid

在这里插入图片描述

点击定位点与 y 轴相交的位置,可以发现当 k = 1.51 时,闭环极点变得不稳定。因此,为保证闭环稳定,环路增益应保持小于 1.5。

四、响应特性

右键单击响应图可以访问各种选项和注释。特别是,通过特性菜单可以显示标准指标,如阶跃响应的上升时间和稳定时间,或频率响应图的峰值增益和稳定裕度。

使用上一节的示例,绘制闭环阶跃响应图:

step(T)

在这里插入图片描述

现在,右键单击曲线图以显示峰值响应和稳定时间特性,并单击蓝点读取相应的过冲和稳定时间值:

在这里插入图片描述

五、分析 MIMO 系统

目前提到的所有命令都完全支持多输入多输出(MIMO)系统。在多输入多输出情况下,这些命令会生成数组图。例如,请看下面的两输入两输出系统。

sys = rss(3,2,2);
sys.A = [-0.5 -0.3 -0.2 ; 0 -1.3  -1.7; 0.4 1.7 -1.3];

阶跃响应是一个 2×2 的图阵列,每列显示一个特定输入通道的阶跃响应。

step(sys)

在这里插入图片描述

您可以右键单击曲线图并选择 I/O 分组 -> 全部子菜单,将所有四个响应组合到一个曲线图上。

在这里插入图片描述

以下附加图有助于分析多输入多输出系统:

  • 奇异值图 (sigma),显示频率响应的主要增益

  • 每个 I/O 对的极点/零点图(iopzplot)

例如,绘制 sys 的峰值增益与频率的函数关系图:

sigma(sys)
grid

在这里插入图片描述

六、系统比较

您可以使用任何响应绘图命令同时绘制多个系统。您可以为每个系统指定特定的颜色、标记或线条样式,以便于比较。以上述反馈为例,用三种不同颜色绘制环路增益 k 的三个值的闭环阶跃响应:

k1 = 0.4;
T1 = feedback(G*k1,1);
k2 = 1;
T2 = feedback(G*k2,1);
step(T,'b',T1,'r',T2,'g')
legend('k = 0.7','k = 0.4','k = 1')

在这里插入图片描述

七、修改时间轴或频率轴数值

您可以修改现有线性分析图的时间和频率向量。

对于阶跃图和脉冲图,可以通过右键单击绘图区域并选择指定时间来指定时间矢量。

在这里插入图片描述

在 "指定时间 "对话框中,您可以使用以下方法之一定义时间值和单位。

  • 自动生成 - 根据系统动态自动生成时间矢量。稀疏系统不支持此选项。

  • 定义停止时间 - 指定停止时间,创建从时间 0 开始的时间矢量。

  • 定义矢量 - 将时间指定为单调递增、间距均匀的时间值矢量。

对于波特图、奈奎斯特图、尼克尔斯图和西格玛图,可以通过右键单击绘图区域并选择指定频率来指定频率矢量。

在这里插入图片描述

在 "指定频率 "对话框中,您可以使用以下方法之一定义频率值和单位。

  • 自动生成 - 根据系统动态自动生成频率矢量。稀疏系统不支持此方法。

  • 定义范围 - 指定频率范围。稀疏系统不支持此方法。

  • 定义矢量 - 指定要绘制成矢量的频率。

如果您的系统是 frd 对象,则会在频率值之间插值绘制响应。

更改时间和频率单位将指定输入的单位,但不会更改绘图中的单位。


如果觉得内容不错,请点赞、收藏、关注

这篇关于MATLAB 绘制 SISO 和 MIMO 线性系统的时间和频率响应图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344423

相关文章

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及