控制台 退出登录

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(频域性能目标)

鲁棒控制核心,约束全频段增益、噪声放大、跟踪误差、扰动抑制、谐振峰值。

本文采用 CC BY-NC-SA 4.0 协议发布

相关文章

eVTOL 电机转速推力建模:从拟合公式到推力响应

eVTOL 电机转速推力建模:从拟合公式到推力响应

再玩一次AI simulink:如何设计提示词让simulink模型美观规范

再玩一次AI simulink:如何设计提示词让simulink模型美观规范

一次实测:AI搭建simulink控制模型

一次实测:AI搭建simulink控制模型