MATLAB系统建模与仿真从入门到实战

内容分享11小时前发布
0 0 0

本文还有配套的精品资源,点击获取 MATLAB系统建模与仿真从入门到实战

简介:MATLAB是一款广泛应用于工程计算、数据分析和系统仿真的数学软件,其Simulink工具为系统建模提供了图形化环境,便于构建和分析动态系统。本课件全面讲解了MATLAB系统建模与仿真的核心内容,包括状态空间模型、传递函数模型、信号处理、控制理论应用、多域仿真、模型优化与验证等关键技术。通过系统学习,学习者可以掌握使用MATLAB/Simulink进行复杂系统建模与仿真的完整流程,提升在工程设计与学术研究中的实践能力。
MATLAB系统建模与仿真从入门到实战

1. MATLAB系统建模基础

MATLAB作为工程计算与系统建模的重要工具,其强大的矩阵运算能力和丰富的函数库为系统建模奠定了基础。本章将介绍MATLAB的基本建模概念,包括变量定义、矩阵操作、脚本与函数编写方法,以及如何使用MATLAB进行基本的数据可视化和系统描述。通过本章学习,读者将掌握利用MATLAB进行系统建模的入门技能,并为后续深入学习打下坚实基础。

1.1 MATLAB基础操作与变量定义

MATLAB的核心是矩阵运算,所有数据都以矩阵形式存储。变量无需声明类型,赋值即定义。例如:



x = 5;               % 标量
A = [1, 2; 3, 4];    % 2x2矩阵

变量名区分大小写,建议使用有意义的命名。MATLAB支持多种数据类型,如整型、浮点型、复数、逻辑型等。可使用
whos
命令查看当前工作区变量信息。

2. Simulink图形化建模环境使用

Simulink作为MATLAB的重要组件,提供了一个直观、交互式的图形化建模与仿真环境,广泛应用于控制系统、信号处理、通信系统、动力学系统等领域的建模与分析。与传统的编程建模方式相比,Simulink通过图形化模块连接的方式简化了系统建模过程,提高了模型的可读性和可维护性。本章将详细介绍Simulink的基础操作、常用模块及其功能,以及如何搭建和调试一个完整的系统模型,帮助读者掌握Simulink的核心建模技能。

2.1 Simulink基础操作

Simulink的基础操作是使用该工具进行系统建模的前提,主要包括模块库的使用、模块连接、信号线操作、模型文件的保存与打开,以及仿真参数的设置与运行控制等。

2.1.1 模块库的组成与使用

Simulink的模块库(Simulink Library Browser)是构建模型的核心资源库,包含数百种功能模块。模块库按照功能分类,如:

Commonly Used Blocks :常用模块,如Constant、Gain、Sum、Scope等。 Continuous :连续系统模块,如Integrator、Derivative等。 Discrete :离散系统模块。 Math Operations :数学运算模块。 Signal Routing :信号路由模块。 Sinks :输出模块,如Scope、To Workspace等。 Sources :输入模块,如Step、Sine Wave、Constant等。

模块调用与添加

使用模块库添加模块的步骤如下:

打开MATLAB,在命令窗口输入
simulink
打开模块库浏览器。 选择所需模块分类,点击具体模块,拖动至新建的Simulink模型窗口。 双击模块可打开参数设置对话框,进行模块参数配置。

例如,添加一个常数模块(Constant)并设置其值为5:



% 在Simulink模型中添加Constant模块
% 双击模块后弹出参数设置窗口
% 将"Constant value"设置为5
模块复制与删除

复制模块 :按住
Ctrl
键并拖动模块,或右键选择“Copy”和“Paste”。 删除模块 :选中模块后按
Delete
键或右键选择“Delete”。

模块库的搜索功能

在模块库浏览器顶部有一个搜索框,输入关键词可以快速定位所需模块。例如,输入
gain
可快速找到增益模块。

2.1.2 模块连接与信号线操作

模块之间的连接是Simulink建模的核心操作,通过信号线(Signal Line)将不同模块的输入输出端口连接起来。

连接模块的步骤:

将鼠标指针移到一个模块的输出端口(右侧小圆圈)。 按住鼠标左键,拖动到另一个模块的输入端口(左侧小圆圈)。 松开鼠标完成连接。

信号线的操作:

分支信号线 :按住
Ctrl
键并点击信号线,然后拖动可创建分支。 标签信号线 :右键信号线,选择“Properties”可为信号线命名,便于调试。 更改信号线方向 :使用
Ctrl + R
快捷键旋转模块方向,方便布线。

示例:构建一个简单的加法模型

我们构建一个简单的加法器模型,将两个常数相加后输出:



% 模型结构:
% Constant1(3) → Sum → Scope
% Constant2(5) ↗

操作步骤:

添加两个Constant模块,分别设置值为3和5。 添加一个Sum模块,设置其输入为两个信号(
[+ +]
)。 连接两个Constant模块到Sum模块的输入端口。 将Sum模块的输出连接到Scope模块。 点击运行按钮进行仿真,双击Scope查看结果。

信号线的数据类型与维度

Simulink支持多种信号数据类型(如double、int8、boolean)和维度(标量、向量、矩阵)。可以通过模块的参数设置或信号线标签来指定数据类型和维度。

2.1.3 仿真参数设置与运行控制

仿真参数的设置决定了模型仿真的精度、步长、时间范围等。Simulink提供了灵活的仿真控制功能。

仿真参数设置

点击模型窗口上的“Simulation”菜单 → “Model Configuration Parameters”,弹出仿真设置窗口。主要参数包括:

参数项 功能说明
Start time 仿真起始时间,默认为0
Stop time 仿真结束时间,默认为10
Solver type 求解器类型,如固定步长(Fixed-step)或变步长(Variable-step)
Step size 固定步长值,如0.01
Max step size 最大步长,用于变步长求解器
Save options 设置输出变量的保存方式
示例:设置仿真时间为0~20秒,固定步长0.01秒


% 打开仿真设置窗口
% 设置 Stop time = 20
% 设置 Solver = fixed-step ode3 (Bogacki-Shampine)
% 设置 Step size = 0.01
仿真运行控制

运行仿真 :点击工具栏上的 ▶️ 按钮。 暂停仿真 :点击 ⏸ 按钮。 停止仿真 :点击 ■ 按钮。 继续仿真 :点击 ▶️ 按钮(仿真暂停后)。

输出变量的保存

可以在“Data Import/Export”选项中设置是否将仿真结果保存到MATLAB工作空间。例如:

选中“Time”和“Output”选项,变量名分别为
tout

yout
。 仿真完成后,可在MATLAB中使用
plot(tout, yout)
查看结果。

2.2 常用模块及其功能

Simulink提供了丰富的模块库,涵盖了输入输出、数学运算、逻辑控制等多个方面。掌握这些常用模块的使用方法,有助于快速构建复杂系统模型。

2.2.1 输入输出模块

输入输出模块用于定义系统的输入信号和输出结果。

常用输入模块:
模块名称 功能描述
Step 阶跃信号输入
Sine Wave 正弦波信号输入
Constant 常数值输入
Ramp 斜坡信号输入
From Workspace 从MATLAB工作空间读取信号
常用输出模块:
模块名称 功能描述
Scope 示波器,实时显示信号波形
To Workspace 将信号保存到MATLAB工作空间
Display 显示当前信号值
Terminator 终止未连接的输出端口,避免仿真警告
示例:使用Sine Wave作为输入,输出到Scope


% 添加 Sine Wave 模块,设置频率为2Hz,幅值为1
% 添加 Scope 模块
% 连接Sine Wave → Scope
% 设置仿真时间为0~10秒
% 运行仿真,查看正弦波形

2.2.2 数学运算模块

数学运算模块用于实现加减乘除、积分、微分、乘法、函数等数学操作。

常用数学模块:
模块名称 功能描述
Sum 加法/减法运算
Gain 增益放大器
Product 乘法器
Math Function 常用数学函数(如sin、cos、exp)
Integrator 积分器
Derivative 微分器
示例:构建一个简单的积分器模型


% 模型结构:
% Step → Integrator → Scope
% 设置Step时间为1s,终值为1
% 设置仿真时间0~5s
% 观察Scope输出,应为斜坡信号

2.2.3 逻辑控制模块

逻辑控制模块用于实现条件判断、开关控制、状态切换等功能。

常用逻辑模块:
模块名称 功能描述
Relational Operator 比较运算(如大于、等于)
Switch 条件选择开关
If 条件分支模块
Stateflow 状态图逻辑建模(需额外安装)
示例:使用Switch模块实现条件选择


% 模型结构:
% Constant1(5) → Switch
% Constant2(10) ↗
% Compare To Constant → Switch控制信号
% 设置比较值为5,若输入等于5则选择Constant1,否则选Constant2
% 输出连接Scope观察结果

2.3 系统模型的搭建与调试

在完成模块选择与连接后,还需要对系统模型进行结构设计、封装复用、结果分析和调试,以确保模型的正确性和可维护性。

2.3.1 模型结构设计原则

良好的模型结构设计可以提高可读性、可维护性,并方便后续的扩展和优化。

设计原则:

模块功能单一化 :每个模块只完成一个功能,避免功能混杂。 模块分层组织 :将复杂系统划分为多个子系统,便于管理。 信号命名清晰 :为信号线添加有意义的标签,便于调试。 使用注释 :在模型中添加注释,说明模块功能和系统逻辑。 模块布局整齐 :保持模块排列整齐,避免交叉连线。

示例:设计一个PID控制器结构

graph TD
    A[Setpoint] --> B[Sum]
    B --> C[PID Controller]
    C --> D[Plant]
    D --> E[Output]
    E --> F[Scope]
    E --> G[Feedback]
    G --> B

2.3.2 子系统封装与复用技术

Simulink支持将多个模块组合为一个子系统(Subsystem),并通过封装(Mask)技术隐藏实现细节,提高模型的复用性和可读性。

创建子系统的步骤:

选中多个模块。 右键选择“Create Subsystem from Selection”。 双击子系统进入内部模型。

封装子系统的步骤:

右键子系统 → Mask → Create Mask。 在Mask Editor中设置参数、图标、文档等。 保存后即可在模型中使用自定义参数的子系统模块。

示例:封装一个滤波器子系统


% 创建一个包含Transfer Function的子系统
% 封装后设置传递函数参数num和den为可调参数
% 在主模型中调用该子系统并设置不同参数

2.3.3 仿真结果分析与调试技巧

仿真完成后,需对结果进行分析,验证模型是否符合预期行为。

常用分析方法:

使用Scope观察信号波形。 将结果保存到工作空间,使用MATLAB绘图函数(如
plot
)分析。 利用Simulink Debugger进行断点调试。 使用Simulation Stepper逐步执行仿真。

示例:使用Simulink Debugger调试模型

在模型窗口点击“Debug”按钮。 在Debugger窗口中设置断点。 点击“Step”逐帧执行仿真,观察信号变化。

调试技巧:

信号探针 :右键信号线 → “Probe” 可实时查看信号值。 模型检查器 :Tools → Model Advisor,检查模型是否符合建模规范。 多仿真比较 :使用Multiple Simulations功能进行多组参数对比。

本章详细介绍了Simulink图形化建模环境的使用方法,包括基础操作、常用模块的使用、模型结构设计与调试技巧。掌握这些内容,将为读者后续深入使用Simulink进行系统建模与仿真打下坚实基础。

3. 状态空间模型构建与分析

状态空间模型是现代控制理论中描述系统动态行为的核心数学工具,尤其适用于多输入多输出(MIMO)系统和非线性系统的建模与分析。与传递函数相比,状态空间模型不仅能够描述系统的外部输入输出关系,还能刻画系统的内部状态变量演化过程。本章将系统地介绍状态空间模型的基本概念、建模方法及其在MATLAB中的实现,同时深入分析系统的能控性、能观性、极点配置等关键控制特性。

3.1 状态空间模型的基本概念

状态空间模型是一种以状态变量为核心的数学建模方法,能够全面反映系统的动态行为。它由状态方程和输出方程组成,分别描述状态变量随时间的变化以及系统输出与状态变量之间的关系。

3.1.1 状态变量与状态方程

状态变量是能够完全描述系统动态行为的一组最小变量集合。状态方程通常以一阶微分方程组或差分方程组的形式出现,表示为:

dot{x}(t) = A x(t) + B u(t)
y(t) = C x(t) + D u(t)

其中:

$ x(t) $:状态向量,维数为 $ n imes 1 $ $ u(t) $:输入向量,维数为 $ m imes 1 $ $ y(t) $:输出向量,维数为 $ p imes 1 $ $ A $:系统矩阵,维数 $ n imes n $ $ B $:输入矩阵,维数 $ n imes m $ $ C $:输出矩阵,维数 $ p imes n $ $ D $:前馈矩阵,维数 $ p imes m $

状态方程反映了系统状态的变化规律,输出方程则描述了系统输出与状态之间的映射关系。

状态变量的选取原则

状态变量应能完整描述系统的动态行为; 状态变量的数量应尽可能少; 状态变量之间应线性无关; 状态变量的选择应便于实际物理量的测量。

例如,在弹簧-质量-阻尼系统中,可以选择位移和速度作为状态变量,从而构建系统的状态空间模型。

3.1.2 状态空间表示法的建立方法

状态空间模型的建立通常有以下几种方法:

从物理系统推导 :基于牛顿定律、基尔霍夫定律等物理原理建立微分方程,再将其转换为状态空间形式。 从高阶微分方程降阶 :将高阶微分方程转换为多个一阶微分方程。 从传递函数转换 :通过可控标准型或可观标准型将传递函数转化为状态空间模型。

示例:从二阶系统推导状态空间模型

考虑一个二阶系统:

ddot{y} + 2zetaomega_n dot{y} + omega_n^2 y = omega_n^2 u

选择状态变量:

x_1 = y, quad x_2 = dot{y}

则状态方程为:

{˙x1=x2 ˙x2=−ω2nx1−2ζωnx2+ω2nu

写成矩阵形式:

[˙x1 ˙x2]
=
[01 −ω2n−2ζωn]
[x1 x2]
+
[0 ω2n]
u

输出方程为:

y = [10] [x1 x2]

因此,系统矩阵为:

$ A =
[01 −ω2n−2ζωn][01 −ωn2−2ζωn] $ $ B =
[0 ω2n][0 ωn2] $ $ C =
[10][10] $ $ D = 0 $

这种推导方式在控制系统建模中非常常见,尤其适用于机械、电气等物理系统。

3.2 状态空间模型的分析

状态空间模型不仅用于系统建模,还广泛应用于系统的分析,包括能控性、能观性、极点配置等控制理论中的核心概念。

3.2.1 系统能控性与能观性分析

能控性(Controllability)

能控性是指通过输入能否将系统状态从任意初始状态转移到任意目标状态。一个系统是能控的,当且仅当其能控性矩阵满秩:

mathcal{C} = [B AB A^2B cdots A^{n-1}B]

若 $ ext{rank}(mathcal{C}) = n $,则系统能控。

能观性(Observability)

能观性是指能否通过输出观测推断出系统的状态。一个系统是能观的,当且仅当其能观性矩阵满秩:

mathcal{O} =
[C CA CA2 ⋮ CAn−1]

若 $ ext{rank}(mathcal{O}) = n $,则系统能观。

示例:判断系统的能控性和能观性

考虑如下系统:



A = [0 1; -2 -3];
B = [0; 1];
C = [1 0];
D = 0;

计算能控性矩阵:



C_matrix = ctrb(A, B);
rank_C = rank(C_matrix)

执行结果:


rank_C = 2

说明系统是能控的。

计算能观性矩阵:



O_matrix = obsv(A, C);
rank_O = rank(O_matrix)

执行结果:


rank_O = 2

说明系统是能观的。

分析逻辑:

构建系统矩阵 A 和输入矩阵 B。 调用 MATLAB 的
ctrb()
函数构建能控性矩阵。 使用
rank()
函数判断矩阵是否满秩。 同理,使用
obsv()
函数构建能观性矩阵并判断其秩。 若秩等于状态变量个数,则系统具有能控性或能观性。

3.2.2 系统极点配置与状态反馈

极点配置是控制系统设计中的重要方法,通过状态反馈控制,将系统的极点配置到期望位置,从而改善系统的动态性能和稳定性。

设系统的状态反馈控制律为:

u = -Kx

其中 $ K $ 是反馈增益矩阵。闭环系统状态方程变为:

dot{x} = (A – BK)x

目标是选择 $ K $,使得闭环系统的极点为期望值。

示例:使用 MATLAB 进行极点配置


A = [0 1; -2 -3];
B = [0; 1];
C = [1 0];
D = 0;
 
% 期望极点
p = [-2, -3];
 
% 计算反馈增益矩阵
K = place(A, B, p);
 
% 构建闭环系统
A_cl = A - B*K;
 
% 计算闭环系统的极点
eig(A_cl)

执行结果:



ans =
 
  -2.0000 + 0.0000i
  -3.0000 + 0.0000i

说明极点配置成功,闭环系统的极点与期望值一致。

分析逻辑:

定义系统矩阵 A 和输入矩阵 B。 设定期望的极点位置(例如,-2 和 -3)。 使用
place()
函数计算反馈增益矩阵 K。 构建闭环系统矩阵 A_cl。 使用
eig()
函数验证闭环系统的极点是否达到期望值。

3.3 MATLAB中的状态空间实现

MATLAB 提供了丰富的函数用于状态空间模型的构建、分析与仿真。

3.3.1 利用MATLAB函数构建状态空间模型

MATLAB 中的状态空间模型可以使用
ss()
函数创建。例如:



A = [0 1; -2 -3];
B = [0; 1];
C = [1 0];
D = 0;
 
sys = ss(A, B, C, D);

该命令创建了一个状态空间系统对象
sys
,可以用于后续的仿真和分析。

参数说明:


A
:系统矩阵,描述状态变量的动态变化;
B
:输入矩阵,描述输入对状态变量的影响;
C
:输出矩阵,描述状态变量对输出的影响;
D
:前馈矩阵,描述输入对输出的直接影响。

3.3.2 系统响应仿真与结果可视化

构建好状态空间模型后,可以使用 MATLAB 的仿真函数进行响应分析,如阶跃响应、脉冲响应、零输入响应等。

示例:绘制阶跃响应


step(sys)
title('Step Response of State-Space Model')

该命令绘制了系统的单位阶跃响应曲线。

示例:绘制脉冲响应


impulse(sys)
title('Impulse Response of State-Space Model')

该命令绘制了系统的单位脉冲响应曲线。

示例:绘制零输入响应


x0 = [1; 0]; % 初始状态
initial(sys, x0)
title('Initial Response of State-Space Model')

该命令绘制了系统在初始状态下的响应曲线。

可视化分析:

使用
step()

impulse()

initial()
等函数可以直观展示系统的时间响应特性; 图形中可以观察系统的上升时间、调节时间、超调量等性能指标; 通过调整状态矩阵 A、B 等参数,可以实时观察系统响应的变化。

流程图示意:

graph TD
    A[定义状态空间矩阵] --> B[创建状态空间模型]
    B --> C[选择仿真类型: 阶跃/脉冲/初始响应]
    C --> D[调用仿真函数]
    D --> E[绘制响应曲线]
    E --> F[分析系统动态性能]
表格:MATLAB 状态空间常用函数汇总
函数名 功能说明

ss()
创建状态空间模型

ctrb()
构建能控性矩阵

obsv()
构建能观性矩阵

place()
计算状态反馈增益矩阵

step()
绘制阶跃响应

impulse()
绘制脉冲响应

initial()
绘制初始状态响应

eig()
求解矩阵特征值(系统极点)

本章系统地介绍了状态空间模型的基本概念、构建方法及其在MATLAB中的实现,重点分析了系统的能控性、能观性、极点配置等控制理论中的核心内容,并通过代码示例展示了如何在MATLAB中构建和分析状态空间模型。通过本章的学习,读者将具备利用状态空间方法进行系统建模与控制设计的能力,为后续控制系统设计与稳定性分析打下坚实基础。

4. 传递函数模型设计与转换

传递函数模型是经典控制理论中最为广泛使用的数学工具之一,尤其适用于单输入单输出(SISO)系统的频域分析和控制器设计。通过传递函数,可以直观地分析系统的频率响应、稳定性、动态性能等关键指标。本章将系统讲解传递函数的基本原理、建模方法与模型转换技巧,并结合MATLAB进行实际操作演示,帮助读者掌握如何从微分方程推导传递函数,以及如何在状态空间模型与传递函数之间相互转换。

4.1 传递函数的基本原理

4.1.1 传递函数的定义与推导

传递函数(Transfer Function)是描述线性时不变系统(LTI)输入与输出之间关系的数学表达式。其定义为:在零初始条件下,系统输出量的拉普拉斯变换与输入量的拉普拉斯变换之比。

设系统的输入为 $ u(t) $,输出为 $ y(t) $,则其传递函数 $ G(s) $ 表示为:

G(s) = frac{Y(s)}{U(s)}

其中:

$ Y(s) $ 是输出 $ y(t) $ 的拉普拉斯变换; $ U(s) $ 是输入 $ u(t) $ 的拉普拉斯变换; $ s $ 是复变量,表示拉普拉斯域中的变量。

传递函数通常表示为有理分式形式:

G(s) = frac{b_0 s^m + b_1 s^{m-1} + cdots + b_m}{a_0 s^n + a_1 s^{n-1} + cdots + a_n}

其中 $ n geq m $,且 $ a_0, a_1, dots, a_n $ 和 $ b_0, b_1, dots, b_m $ 为系统参数。

4.1.2 极点、零点与系统稳定性

传递函数的极点(Poles)是其分母多项式的根,决定了系统的自然响应模式;零点(Zeros)是其分子多项式的根,影响系统的动态响应和控制器设计。

极点位置与系统稳定性 : 若所有极点位于复平面左半部(实部为负),系统稳定; 若有极点位于复平面右半部(实部为正),系统不稳定;

若极点位于虚轴上(实部为0),系统处于临界稳定状态。

零点的影响

零点主要影响系统的幅频特性和相频特性; 在控制器设计中,零点可以用来抵消系统中不理想的极点。

MATLAB代码示例:创建传递函数并获取极点和零点


% 定义传递函数 G(s) = (s + 2) / (s^2 + 3s + 2)
num = [1 2];         % 分子多项式系数
den = [1 3 2];       % 分母多项式系数
sys = tf(num, den);  % 创建传递函数对象
 
% 获取极点和零点
poles = pole(sys);
zeros = zero(sys);
 
% 显示结果
disp('极点:');
disp(poles);
disp('零点:');
disp(zeros);

代码逻辑分析:


tf(num, den)
:创建一个传递函数对象;
pole(sys)
:提取系统极点;
zero(sys)
:提取系统零点;
disp()
:用于在命令行中输出信息。

执行结果示例:



极点:
   -2
   -1
 
零点:
    -2

分析说明:

该系统的极点位于 $ s = -1 $ 和 $ s = -2 $,均在左半平面,因此系统稳定;零点位于 $ s = -2 $,说明系统在频率响应中会受到该零点的影响。

4.2 传递函数的建模与转换

4.2.1 从微分方程推导传递函数

假设系统由如下微分方程描述:

frac{d^2y}{dt^2} + 3frac{dy}{dt} + 2y = frac{du}{dt} + 2u

对其进行拉普拉斯变换(假设初始条件为0):

s^2 Y(s) + 3s Y(s) + 2 Y(s) = s U(s) + 2 U(s)

整理得到传递函数:

G(s) = frac{Y(s)}{U(s)} = frac{s + 2}{s^2 + 3s + 2}

MATLAB代码示例:从微分方程构造传递函数


% 微分方程系数(从输出到输入的顺序)
num = [1 2];   % 对应 s + 2
den = [1 3 2]; % 对应 s^2 + 3s + 2
sys = tf(num, den);
 
% 显示传递函数
disp(sys);

执行结果:



Transfer function:
  s + 2
s^2 + 3 s + 2

逻辑分析:

通过直接输入微分方程对应的拉普拉斯变换后的分子和分母系数,即可构建传递函数模型。

4.2.2 状态空间模型与传递函数的相互转换

状态空间模型是一种更通用的系统描述方式,适用于多输入多输出系统。传递函数与状态空间模型之间可以相互转换。

状态空间模型形式:

{˙x(t)=Ax(t)+Bu(t) y(t)=Cx(t)+Du(t)

传递函数表达式:

G(s) = C(sI – A)^{-1}B + D

MATLAB代码示例:状态空间模型转传递函数


% 定义状态空间矩阵
A = [-3 -2; 1 0];
B = [1; 0];
C = [0 1];
D = 0;
 
% 创建状态空间模型
sys_ss = ss(A, B, C, D);
 
% 转换为传递函数模型
sys_tf = tf(sys_ss);
 
% 显示结果
disp(sys_tf);

执行结果:



Transfer function from input to output:
      s
s^2 + 3 s + 2

逻辑分析:


ss(A, B, C, D)
:创建状态空间模型;
tf(sys_ss)
:将状态空间模型转换为传递函数; 输出结果表明,转换后的传递函数与理论推导一致。

传递函数转状态空间模型

同样,也可以将传递函数转换为状态空间模型,通常使用能控标准型或能观标准型。



% 定义传递函数
num = [1 0];
den = [1 3 2];
sys_tf = tf(num, den);
 
% 转换为状态空间模型
sys_ss = ss(sys_tf);
 
% 显示状态空间模型
disp(sys_ss);

执行结果:



a = 
   x1   x2
x1   0    1
x2  -2   -3
 
b = 
   u1
x1   0
x2   1
 
c = 
   x1   x2
y1   1    0
 
d = 
   u1
y1   0

逻辑分析:


ss(sys_tf)
:将传递函数模型转换为状态空间模型; 输出结果展示了状态空间的 A、B、C、D 矩阵; 可见系统已成功转换为标准能控型。

表格:传递函数与状态空间模型对比
特性 传递函数 状态空间模型
描述方式 频域 时域
输入输出 适用于SISO系统 适用于MIMO系统
系统特性 直观分析频率响应 更便于控制系统设计
初始条件 假设为0 可包含初始状态
控制器设计 适合PID等经典控制 适合现代控制理论(如LQR)

4.3 控制系统的频域分析

4.3.1 Bode图与Nyquist图的绘制

Bode图和Nyquist图是频域分析的重要工具,分别用于表示系统的幅频特性和相频特性。

Bode图绘制


% 定义传递函数
sys = tf([1], [1 1]);
 
% 绘制Bode图
bode(sys);
grid on;
title('Bode Diagram of G(s) = 1/(s+1)');

图形说明:
– 幅频图(Magnitude)显示系统增益随频率变化的趋势;
– 相频图(Phase)显示系统相位随频率变化的趋势;
– 横轴为频率(log scale),纵轴分别为增益(dB)和相位(度)。

Nyquist图绘制


% 绘制Nyquist图
nyquist(sys);
grid on;
title('Nyquist Plot of G(s) = 1/(s+1)');

图形说明:
– Nyquist图用于判断闭环系统的稳定性;
– 若Nyquist曲线不包围 $ (-1, j0) $ 点,则系统稳定;
– 曲线的形状反映了系统的增益和相位裕度。

4.3.2 系统稳定裕度分析

稳定裕度(Stability Margins)包括增益裕度(Gain Margin)和相位裕度(Phase Margin),用于衡量系统在临界稳定点前的“安全距离”。



% 获取稳定裕度
[Gm, Pm, Wcg, Wcp] = margin(sys);
 
% 显示结果
disp(['增益裕度 (dB): ', num2str(20*log10(Gm))]);
disp(['相位裕度 (deg): ', num2str(Pm)]);

输出示例:



增益裕度 (dB): Inf
相位裕度 (deg): 81.87

分析说明:
– 增益裕度为无穷大,说明系统在该频率下不会因增益增加而失稳;
– 相位裕度为 81.87°,远大于一般要求的 45°,说明系统具有良好的稳定性。

流程图:控制系统频域分析流程(Mermaid)

graph TD
    A[定义传递函数] --> B[绘制Bode图]
    A --> C[绘制Nyquist图]
    B --> D[分析增益与相位裕度]
    C --> D
    D --> E[评估系统稳定性]

通过本章内容的学习,读者应掌握传递函数的基本概念、建模方法、状态空间模型与传递函数之间的转换技巧,以及如何利用Bode图和Nyquist图进行频域分析和稳定裕度评估。这些内容为后续控制系统设计与优化奠定了坚实的基础。

5. 控制系统设计与稳定性分析

控制系统设计是系统建模的最终目标之一,涉及控制器参数整定与系统稳定性保证。

5.1 PID控制器设计

5.1.1 PID控制原理与参数意义

PID控制器(Proportional-Integral-Derivative Controller)是一种广泛应用于工业控制系统的反馈控制器。其控制输出由三个基本项构成:

比例项(P) :反映当前误差的大小,快速响应偏差。 积分项(I) :反映误差的历史积累,用于消除稳态误差。 微分项(D) :反映误差的变化趋势,用于预测未来误差,提高系统稳定性。

PID控制器的输出公式如下:


u(t) = K_p e(t) + K_i int_0^t e(	au) d	au + K_d frac{de(t)}{dt}

其中:
– $ u(t) $:控制器输出;
– $ e(t) $:设定值与实际值的差(误差);
– $ K_p $、$ K_i $、$ K_d $:比例、积分、微分增益参数。

5.1.2 PID参数整定方法与MATLAB实现

PID参数整定是控制系统设计中的关键步骤。常用方法包括:

Ziegler-Nichols法 :基于临界增益和振荡周期进行整定。 试凑法 :通过观察系统响应不断调整参数。 自动整定工具 :如MATLAB的PID Tuner工具。

在MATLAB中,可以使用
pid
函数创建PID控制器对象,并使用
pidtuner
进行自动调参:



% 创建一个PID控制器
C = pid(1, 0.5, 0.1);  % Kp=1, Ki=0.5, Kd=0.1
 
% 使用PID Tuner工具进行自动调参
pidtuner(C)

此外,也可以通过Simulink搭建闭环系统,将PID控制器模块与被控对象连接,进行动态仿真与参数优化。

5.2 控制系统稳定性分析

5.2.1 李雅普诺夫稳定性判据

李雅普诺夫稳定性理论是分析非线性系统稳定性的基础方法。其核心思想是构造一个正定的能量函数(称为李雅普诺夫函数)$ V(x) $,并判断其导数 $ dot{V}(x) $ 是否负定。

如果满足:
– $ V(x) > 0 $,且 $ V(0) = 0 $;
– $ dot{V}(x) < 0 $;

则系统在原点处是渐近稳定的。

在MATLAB中,可以使用Symbolic Math Toolbox构造李雅普诺夫函数并分析其导数:



syms x1 x2
V = x1^2 + x2^2;  % 假设李雅普诺夫函数
dVdt = diff(V, x1)*x2 + diff(V, x2)*(-x1 - x2^3);  % 计算导数
simplify(dVdt)

5.2.2 根轨迹法与Nyquist判据

根轨迹法和Nyquist判据是判断线性系统稳定性的两种经典方法。

根轨迹法 :通过绘制系统闭环极点随增益变化的轨迹,分析系统的稳定性和动态响应。 Nyquist判据 :利用开环频率响应绘制Nyquist图,判断闭环系统的稳定性。

在MATLAB中,可以使用以下命令进行分析:



sys = tf([1], [1 2 1]);  % 定义传递函数
 
% 绘制根轨迹
rlocus(sys);
 
% 绘制Nyquist图
nyquist(sys);

5.3 实际系统仿真与控制效果评估

5.3.1 利用Simulink搭建闭环控制系统

在Simulink中,可以搭建闭环控制系统模型,包括PID控制器、被控对象、反馈回路等模块。以下是一个典型的闭环系统结构图:


graph TD
    A[设定值] --> B[加法器]
    B --> C[PID控制器]
    C --> D[被控对象]
    D --> E[输出]
    E -->|反馈| B

操作步骤如下:

打开Simulink,新建模型; 添加PID Controller模块、Transfer Function模块、Sum模块、Scope模块; 按照上述结构图连接模块; 设置仿真时间,点击“运行”按钮进行仿真; 使用Scope模块观察系统响应。

5.3.2 控制性能指标计算与分析

常见的控制性能指标包括:

指标名称 定义说明
上升时间 输出从10%上升到90%所需时间
峰值时间 输出达到第一个峰值的时间
超调量 峰值超出稳态值的百分比
稳态误差 系统响应稳定后的误差
调节时间 输出进入稳态误差带所需时间

在MATLAB中,可以使用
stepinfo
函数自动提取这些指标:



sys = tf([1], [1 2 5]);  % 示例系统
[y,t] = step(sys);
info = stepinfo(y,t);
disp(info);

输出结果示例:



    RiseTime: 0.8411
    SettlingTime: 3.4813
    SettlingMin: 0.9125
    SettlingMax: 1.0952
    Overshoot: 9.5200
    Undershoot: 0
    Peak: 1.0952
    PeakTime: 1.4832

5.3.3 控制器优化与系统鲁棒性提升

控制器优化的目标是提高系统的响应速度、减小超调、提升抗干扰能力。常用优化方法包括:

参数整定 :使用优化算法(如遗传算法、粒子群算法)自动搜索最优PID参数; 前馈控制 :引入前馈通道,提升系统对已知扰动的补偿能力; 鲁棒控制 :设计鲁棒控制器(如H∞控制器),增强系统对模型不确定性和外部干扰的适应能力。

在MATLAB中,可以使用
hinfsyn
函数进行H∞控制器设计:



P = ss(tf([1],[1 1]));  % 构造广义被控对象
[K,CL,gamma] = hinfsyn(P,1,1);  % 设计H∞控制器

该控制器可有效提升系统的鲁棒性,适用于复杂或不确定性强的系统。

本文还有配套的精品资源,点击获取 MATLAB系统建模与仿真从入门到实战

简介:MATLAB是一款广泛应用于工程计算、数据分析和系统仿真的数学软件,其Simulink工具为系统建模提供了图形化环境,便于构建和分析动态系统。本课件全面讲解了MATLAB系统建模与仿真的核心内容,包括状态空间模型、传递函数模型、信号处理、控制理论应用、多域仿真、模型优化与验证等关键技术。通过系统学习,学习者可以掌握使用MATLAB/Simulink进行复杂系统建模与仿真的完整流程,提升在工程设计与学术研究中的实践能力。

本文还有配套的精品资源,点击获取
MATLAB系统建模与仿真从入门到实战

© 版权声明

相关文章

暂无评论

none
暂无评论...