systune TuningGoal 完整手册
文末附本文md
## 概述
想象一下,要设计一个汽车巡航控制器。我们会提出一些要求:
- 性能:设定车速后,要能快速、平稳地达到,不能超调太多。
- 鲁棒性:遇到小坡道(干扰)时,车速变化要小,且系统不能因此失稳。
- 物理限制:油门和刹车(执行器)的动作不能太猛。
systune中,不能直接描述“要平稳”这类定性需求,需要用数学语言量化各项指标。
TuningGoal下的每一个类,就是将定性控制要求转化为可求解的数学约束systune优化算法会求解一组控制器参数,尽可能同时满足所有调优目标。
参考文档:https://ww2.mathworks.cn/help/control/tuning-goals-1.html
Loop Shaping 核心思想:把控制回路开环频率响应等效为一个“频率过滤器”,通过定制过滤器在不同频段的增益形态,间接实现全部闭环性能、抗扰、鲁棒指标。
## 基础反馈系统框架
### 基础传递函数定义
被控对象Plant传递函数:
$$
G_{P}=\frac{y}{u}
$$
控制器Controller传递函数:
$$
G_{C}=\frac{u}{e}
$$
闭环传递函数:
$$
G_{T}=\frac{y}{r}
$$
开环传递函数:
$$
G_{L}=\frac{y}{e}
$$
灵敏度函数:
$$
G_{S}=\frac{e}{r}=\frac{e}{y+e}=\frac{1}{1+G_L}
$$
### 灵敏度函数物理意义推导
#### 1. 从扰动抑制角度推导
单位负反馈SISO系统结构:
参考输入 $r$,控制器 $C(s)$,被控对象 $P(s)$,输出扰动 $d$,系统输出 $y$
误差信号:
$e = r - y$
控制器输出:
$u = C(s)e = C(s)(r - y)$
输出与输入、扰动关系:
$y = P(s)u + d$
将 $u$ 代入输出方程:
$y = P(s)C(s)(r - y) + d$
整理含 $y$ 项:
$y + P(s)C(s)y = P(s)C(s)r + d$
$$
y\bigl[1 + P(s)C(s)\bigr] = P(s)C(s)r + d
$$
定义开环传递函数 $L(s) = P(s)C(s)$:
$$
y = \frac{L(s)}{1 + L(s)}r + \frac{1}{1 + L(s)}d
$$
定义:
- 灵敏度函数(扰动通道):$\displaystyle S(s) = \frac{1}{1 + L(s)}$
- 互补灵敏度函数(跟踪通道):$\displaystyle T(s) = \frac{L(s)}{1 + L(s)}$
输出简化形式:
$$
y = T(s)r + S(s)d
$$
结论:$S(s)$ 直接表征外部扰动对系统输出的放大程度,$|S(j\omega)|$ 越小,同频率扰动对输出影响越小。
#### 2. 从模型不确定性角度推导
设标称模型 $P(s)$,含相对误差的实际模型:
$$
P'(s) = P(s)(1 + \Delta)
$$
$\Delta$ 为模型乘性不确定性。
标称闭环传递函数:
$$
T(s) = \frac{L(s)}{1 + L(s)},\quad L(s) = C(s)P(s)
$$
实际闭环传递函数:
$$
T'(s) = \frac{C(s)P'(s)}{1 + C(s)P'(s)} = \frac{L(s)(1 + \Delta)}{1 + L(s)(1 + \Delta)}
$$
闭环传递函数相对误差:
$$
\frac{T' - T}{T} = \frac{\frac{L(1+\Delta)}{1+L(1+\Delta)} - \frac{L}{1+L}}{\frac{L}{1+L}}=\frac{\Delta}{1+L+L\Delta}
$$
小幅误差近似化简:
$$
\frac{T' - T}{T} \approx S(s) \cdot \Delta
$$
结论:灵敏度函数 $S(s)$ 是模型不确定性的放大系数,$S(s)$ 越小,建模误差对系统性能、稳定性的扰动越小。
### 灵敏度函数总结
$$
S(s) = \frac{1}{1 + L(s)}
$$
核心量化两个反馈系统能力:
1. 扰动抑制:$|S(j\omega)|$ 越小,对应频率扰动对输出抑制效果越强;
2. 模型鲁棒性:$|S(j\omega)|$ 越小,模型参数不确定性带来的性能衰减越小。
## 辅助工具函数:makeweight
### 功能
生成单调增益特性的一阶加权传递函数,用于环路整形、频域性能加权约束,适systunelooptune全部频域目标。
### 语法
```matlab
W = makeweight(dcgain,[freq,mag],hfgain)
W = makeweight(dcgain,[freq,mag],hfgain,Ts)
W = makeweight(dcgain,[freq,mag],hfgain,Ts,N)
W = makeweight(dcgain,wc,hfgain,___)
```
### 参数说明
W = makeweight(dcgain,[freq,mag],hfgain) 生成连续一阶加权函数,满足三点约束:
$$
\begin{aligned}
W(0) &= \text{dcgain} \\
W(j\infty) &= \text{hfgain} \\
|W(j\cdot\text{freq})| &= \text{mag}
\end{aligned}
$$
- dcgain:直流低频增益(绝对幅值,非dB)
- [freq,mag]:中间穿越点,频freq处增益幅值等mag
- hfgain:无穷高频极限增益
### 代码示例
1. 低频40dB(100)、高频-20dB(0.1),1rad/s处增益10dB(3.16)
```matlab
Wl = makeweight(100,[1,3.16],0.1);
```
2. 低频-10dB(0.316)、高频40dB(100),10rad/s穿越0dB
```matlab
Wh = makeweight(0.316,10,100);
```
# MATLAB TuningGoal 全子类分类手册
## 关键术语对照表
| 术语 | 定义 |
| ---- | ---- |
| $H_\infty$ 范数 | 传递函数全频率最大幅值,表征信号最坏放大倍数 |
| $H_2$ 范数 | 单位冲激响应能量积分,表征白噪声能量放大能力 |
| 灵敏度函数 $S$ | $\displaystyle S(s) = (I+L(s))^{-1}$,$L$为开环传递函数,衡量扰动敏感度 |
| 稳定裕度 | 相位裕度PM:增益穿越频率处相位滞后余量;增益裕度GM:相位-180°处增益衰减余量 |
| 无源系统 | 系统输出总能量不超过输入总能量,天然保证能量层面稳定 |
## 🔹 General(通用分析工具类)
不定义性能约束,用于调优后结果评估、曲线可视化。
### 1. evalGoal
- 原理:输入闭环系统与调优目标,输出0~1满足度得分;得分越接近1代表约束满足度越高,小于1表示指标未达标。
- 使用示例:
```matlab
% 批量计算所有目标满足度
scores = evalGoal(Goals, CL1);
```
- 用途:快速定位哪项性能指标未达标,量化不满足程度。
### 2. viewGoal
- 原理:图形化展示约束边界与实际系统曲线(伯德图、阶跃响应等),直观对比是否落在允许区间。
- 使用示例:
```matlab
% 绘制灵敏度目标频域约束曲线
viewGoal(SensitivityGoal, CL1);
```
- 用途:可视化定位频域/时域设计缺陷。
---
## ⏱️ Time-domain goals(时域性能目标)
约束系统时间轴动态响应:阶跃跟踪、阶跃抗扰、瞬态特性、LQG最优平衡。
### 1. StepTracking 阶跃跟踪约束
- 原理:约束参考阶跃输入的跟踪误差、响应速度,强制输出匹配指定参考模型阶跃特性。
#### 重载语法
```matlab
% 匹配自定义参考系统
Req = TuningGoal.StepTracking(inputname,outputname,refsys)
% 一阶响应:指定时间常数tau
Req = TuningGoal.StepTracking(inputname,outputname,tau)
% 二阶响应:时间常数tau + 百分比超调overshoot
Req = TuningGoal.StepTracking(inputname,outputname,tau,overshoot)
```
一阶参考模型:
$$
\text{Req.ReferenceModel} = \frac{1/\tau}{s + 1/\tau}
$$
二阶参考模型:
$$
\text{Req.ReferenceModel} = \frac{(1/\tau)^2}{s^2 + 2\zeta/\tau \cdot s + (1/\tau)^2}
$$
阻尼系数由超调量求解:
$$
\zeta = \cos\left(\text{atan2}\left(\pi,-\log(\text{overshoot}/100)\right)\right)
$$
#### 实战示例
要求0.5s内跟踪阶跃,超调控制在1%:
```matlab
TrackingGoal = TuningGoal.StepTracking('R_a', 'Y', 0.5, 1);
```
- 适用场景:姿态、速度、位置指令跟踪。
### 2. StepRejection 阶跃扰动抑制
- 原理:约束阶跃扰动注入后输出峰值、调节时间、振荡阻尼。
#### 重载语法
```matlab
Req = TuningGoal.StepRejection(inputname,outputname,refsys)
Req = TuningGoal.StepRejection(inputname,outputname,peak,tSettle)
Req = TuningGoal.StepRejection(inputname,outputname,peak,tSettle,zeta)
```
- peak:扰动引起最大输出偏差tSettle:调节时间zeta:最小阻尼比。
#### 实战示例
阵风扰动峰值≤0.25°,5s收敛,阻尼≥0.4:
```matlab
Req2 = TuningGoal.StepRejection('d','y',0.25,5,0.4);
viewGoal(Req2)
```
### 3. Transient 通用瞬态响应约束
- 原理:支持脉冲/阶跃/斜坡/自定义输入信号,匹配参考模型瞬态响应。
#### 重载语法
```matlab
Req = TuningGoal.Transient(inputname,outputname,refsys)
Req = TuningGoal.Transient(inputname,outputname,refsys,inputtype)
Req = TuningGoal.Transient(inputname,outputname,refsys,inputfilter)
```
- inputfilter:自定义输入信号拉普拉斯变换,如正弦 $\sin(\omega t)$:
$$
\text{inputfilter} = \frac{\omega}{s^2 + \omega^2}
$$
#### 自定义正弦输入示例
```matlab
refsys = tf(1,[1 1]);
w = 2;
inputfilter = tf(w,[1 0 w^2]);
Req = TuningGoal.Transient('u','r',refsys,inputfilter);
```
### 4. LQG 线性二次高斯最优目标
- 原理:平衡跟踪误差代价与控制输入代价,最小化综合二次性能指标。
- 官方参考链接:
https://ww2.mathworks.cn/help/releases/R2023b/control/ref/tuninggoal.lqg.html
https://ww2.mathworks.cn/help/control/ug/vibration-control-in-flexible-beam.html
https://ww2.mathworks.cn/help/releases/R2023b/control/ug/control-of-an-inverted-pendulum-on-a-cart.html
- 适用场景:兼顾跟踪精度与执行器能耗、饱和限制。
---
## 📊 Frequency-domain goals(频域性能目标)
鲁棒控制核心,约束全频段增益、噪声放大、跟踪误差、扰动抑制、谐振峰值。