
H无穷控制在现代鲁棒控制里是个绕不开的坎而加权灵敏度问题又是入门H无穷最容易卡壳的地方。我当初学到这里时拿着各种教材翻了半天公式推导都能看懂但一落到实际设计权重函数不知道从哪下手、广义对象怎么拼装、求解参数为什么报错每一环都能让人耗上一整天。这篇笔记就是把我踩过的坑和整理清楚的核心逻辑写出来围绕加权灵敏度H无穷控制问题从理论框架到求解仿真走一遍适合正在自学现代鲁棒控制、准备做控制器设计作业或项目选型的研究生和工程师参考。1. 为什么绕不开加权灵敏度问题1.1 从频域直觉到H无穷范数要理解加权灵敏度问题先得搞明白H无穷控制到底在干什么。经典控制理论里我们通常看穿越频率、相位裕度、幅值裕度这些指标能反映系统稳定性和一部分动态性能但面对模型不确定性时会显得力不从心。比如你用一个简化的一阶惯性模型去设计PID实际对象在高温、负载变化时参数漂移了30%相位裕度可能就从60度掉到20度以下系统变得很脆。H无穷控制换了一种思路不把模型当作精确对象而是把不确定性当作“最坏情况”纳入设计。它优化的是闭环传递函数的峰值增益数学上就是系统的H无穷范数即频率响应幅值在全部频段上的最大值。这里的关键转变是性能不是在某一个点满足指标而是在所有可能的扰动和不确定性下都能守住底线。举个例子想要抑制低频负载扰动这意味着闭环灵敏度函数S在低频段要足够小。但模型在高温下有参数漂移那么设计就必须同时保证不确定性存在时系统仍能稳定。这两件事在经典控制里往往要靠试凑而在H无穷框架中二者统一到了一个优化目标里。1.2 加权灵敏度问题的标准块结构加权灵敏度问题属于混合灵敏度设计里的核心场景。灵敏度函数S定义为1/(1GK)它刻画的是从参考输入或外部扰动到误差的传递关系补灵敏度函数T定义为GK/(1GK)描述的是输出对测量噪声和未建模动态的敏感程度。两者有一个天然约束ST1意味着你在某个频段压低ST在那个频段必然会接近1。这就像跷跷板低频外侧扰动需要S小那T低频就大系统对低频模型误差就会敏感高频噪声需要T小那S高频就大。设计者能做的不是在所有频段同时压低两者而是用加权函数把性能需求按频段划分“低频把S压到多小、高频把T压到多小”全部变成权重函数设计问题。于是加权灵敏度问题被抽象成这样的标准形式找反馈控制器K使得加权灵敏度系统||W1·S||∞ 1||W2·T||∞ 1同时满足。W1通常选为低通特性低频增益远大于1强制S在低频小W2选为高通特性高频增益足够大抑制T在高频过大。两个不等式合在一起就是一个标准的H无穷优化问题minimize gamma使得闭环传递矩阵的H无穷范数小于gamma。1.3 广义被控对象与“最大奇异值”的含义实际计算时加权灵敏度问题不是直接对S和T做优化而是拼装成一个广义被控对象P把外部输入参考、扰动、噪声、控制输入、被控输出加权后的误差和输出、测量输出全部写到状态空间模型里。控制器K从测量输出y映射到控制输入u闭环后要求从外部输入w到被控输出z的传递函数 Tzw 的H无穷范数小于gamma。多变量系统里的“幅值”不能用单一频率响应的绝对值衡量而是用最大奇异值。最大奇异值沿频率轴的包络就是奇异值图H无穷范数就是这个包络的最高点。做SISO系统时奇异值就是幅频曲线本身但一旦进入MIMO这个细节就很重要因为回路之间的耦合会让单个通道的行为失真。我个人的理解是加权灵敏度问题本质上是把一个频域整形需求和鲁棒稳定需求变成一个“寻找最优反馈增益K”的数学优化。你不需要预先确定回路增益的形状只需要给出权重函数W1、W2求解器会返回一个满足约束的控制器。2. 加权函数选择整个设计成败的关键2.1 性能权重W1的设定方法加权灵敏度设计里最让人头疼的就是W1和W2到底怎么选。教科书上只会说“反映性能需求”但具体参数从哪来往往要靠经验。实际工程里W1一般取如下形式W1(s) (s/M ωB) / (s ωB·A)其中A是低频扰动抑制系数代表S在低频能被压到多小。比如A0.01意味着|S|在低频要小于0.01也就是对低频扰动的抑制能力是40dB。通常取0.01到0.1之间太小的A会导致控制器增益巨大、噪声放大。M是灵敏度峰值容许值代表系统允许的最大超调量对应S的峰值典型1.2到2.0M过小会让系统过于谨慎相位裕度虽然大但响应很慢。ωB是期望的系统闭环带宽。这里有个常见误区H无穷控制器最终的实际带宽不一定等于ωB但ωB设得越高设计出来的控制器通常会有越高的穿越频率。选择ωB时必须考虑执行器物理极限比如你有一个最大输出力矩有限的电机带宽设到100rad/s控制器算出来高频增益巨大执行器饱和后实际系统完全不是设计的样子。2.2 鲁棒权重W2与加权矛盾的平衡W2的作用是惩罚补灵敏度函数T在高频段的增益它对应的是乘性不确定性的界。实际模型不确定性在高频往往很大因为建模时忽略的高频动力学、采样延时、执行器柔性都会表现为乘性不确定性。假如高频不确定性幅值在增益上达到5那W2在高频就至少要接近5才能强制T在这个频段衰减到1/5以下。W2通常选为高通形式我会写成W2(s) (s ωBT/M2) / (ε·s ωBT)其中ωBT是鲁棒性开始起作用的频率典型取为被控对象未建模动力学频段的起点或是采样频率的1/5到1/10M2是低频段T的上限倒数通常取1到2ε是一个很小的正数用来控制高频增益斜率取0.001到0.01避免权重本身过于不真实导致求解困难。W1与W2存在根本矛盾两台权重在同一个频段都要求小则问题可能不可解或gamma远大于1。实际上W1的低频要求与W2的高频要求并不冲突冲突在于过渡频段带宽越高S对低频约束越强T在带宽附近峰值越大加权后的峰值就越难压住。所以设计权重时一定要清楚“性价比”每一个额外的性能要求都会让控制器更复杂或稳定性裕度变小。2.3 权重参数换算与初值推荐我整理了一张自己在实际设计中使用频率较高的参数初值表适合大多数刚起步的工程应用参数含义初值范围调试方向A低频允许稳态误差0.01~0.1减小A增强扰动抑制但控制器增益变大ωB期望带宽0.1~10 rad/s根据实际系统快速性要求调整M灵敏度峰值上限1.2~2.0减小M让系统更保守、鲁棒性更强ωBT鲁棒权重转折频率模型高频未建模段起点越小越保守但会牺牲性能M2补灵敏度峰值权重1~2减小时T在高频衰减更快ε权重高频增益限制0.001~0.01过小会导致广义对象病态初次设计时我的经验是先不要追求复杂权重用一阶或二阶权重把整个求解流程跑通观察闭环系统的带宽和阶次再进一步调整。权重函数不是一次就能写对的几乎都要经过两三轮迭代。3. 从理论到仿真一个完整的设计实例3.1 构建广义被控对象P下面用一个典型的受控对象示例来说明完整设计流程。假设被控对象是一个带延迟的惯性系统传递函数为 G(s) 5 * e^{-0.1s} / (s 2)这在电机驱动、温度控制里都很常见。直接用传递函数做H无穷设计会把延迟当成无穷维对象所以先把延迟用一阶Pade近似替换e^{-0.1s} ≈ (1 - 0.05s) / (1 0.05s)于是G(s)近似为 G_hat(s) 5 * (1 - 0.05s) / ((s 2) * (1 0.05s))。这里的近似会引入高频相位误差设计时我会把这个误差当作乘性不确定性的一部分让W2的高频增益覆盖它。在MATLAB环境下我习惯用augw函数一步拼装广义对象当然也可以手动构造状态空间模型。augw的语法是G tf(5*[1 -0.05], conv([1 2], [1 0.05])); W1 tf([1/1.5, 2], [1, 2*0.02]); % M1.5, wB2, A0.02 W2 tf([1, 2], [0.005, 2]); % wBT 2, epsilon 0.005 P augw(G, W1, W2);这里W1我按前面公式展开得到 (s/1.5 2)/(s 2*0.02)即分子系数 [1/1.5, 2]分母 [1, 0.04]。W2取(s2)/(0.005s2)保证高频段增益约200实际上值太大容易让求解保守我试过0.01附近更中庸但初值可以先用0.005观察。需要额外说明的是augw会自动把S和T的加权回路组装成标准的四端口广义对象。3.2 调用hinfsyn求解拼装完成之后直接用hinfsyn求解[K, CL, gamma] hinfsyn(P, 1, 1, 0.5, 5, 0.01);参数含义是P为广义对象ny1、nu1分别对应测量输出和控制输入的个数0.5到5是gamma搜索区间0.01是迭代精度。如果gamma非常接近上限或求解失败先检查权重是否排得过挤、D12或D21矩阵是否秩亏这两个原因是绝大部分求解失败的主因。求解完成后我通常会看三样东西gamma值是否接近1、控制器的阶次、闭环系统的极点位置。gamma接近1说明性能和鲁棒性匹配得不错大于5说明权重太激进或者被控对象本身难以同时满足所有约束。控制器阶次由广义对象的阶次决定本例中广义对象包含二阶被控对象、两个二阶权重一共六阶算出来的控制器也是六阶。工程落地前可以用平衡截断法降阶但降阶之后必须重新验证闭环性能而不是直接使用。3.3 仿真验证与结果解读设计完成后不能只看gamma值还要回到频域去看加权后的灵敏度函数是否真的满足约束。我会画三条曲线S feedback(1, G*K); T 1 - S; sigma(W1*S, r, W2*T, b--, 1/gamma*ones(size(w)), k:, w) legend(|W1*S|, |W2*T|, 1/gamma 水平线);如果|W1·S|的峰值低于1或低于gamma取决于是否归一化说明性能加权得到了满足|W2·T|的峰值低于1说明鲁棒性约束也满足了。特别注意观察W1·S在低频是不是真的压得很低、W2·T在高频是不是衰减明显。再看时域用阶跃响应验证step(feedback(G*K, 1))这一步会暴露理论设计与实际响应之间的差距。加权灵敏度设计虽然保证了频域约束但阶跃响应的超调量、上升时间仍需要人工判断如果超调过大可以把W1中的M从1.5调小到1.2重新求解。4. 常见问题与工程落地经验4.1 求解失败或gamma过大的常见原因做加权灵敏度设计时最常遇到的是hinfsyn报错或者gamma收敛到极大值。根据我自己的排查经验原因主要集中在以下几个方面。第一广义对象不满足标准H无穷问题存在性条件最常见的是D12或D21矩阵不满秩。简单说就是控制输入到被控输出的直通通道缺失或测量输出到外部输入的直通通道缺失。解决办法是给相应通道加入微小直通项本质上相当于加入高频滤波或测量噪声惩罚让问题正则化。第二权重函数选择不当导致对象在某个频段完全不满足不等式。比如W1低频增益设到0.001同时W2的转折频率也取很低两者在中低频段交叉处形成无法缝合的冲突gamma自然飙升。我遇到这种情况会先把W2的ωBT往高频推或者放松W1的低频要求。第三被控对象有右半平面零点或纯延迟时带宽上限会受到根本性制约。此时再怎么调权重都很难同时满足S和T约束说明设计指标本身应该被质疑。一个有效办法是先做对象分析用带宽上限经验公式估算可行带宽再回头定权重参数。我整理了一个速查表异常现象可能原因优先处理方向hinfsyn提示rank不足D12/D21缺直通项给权重添加小epsilon项gamma迭代到上限权重冲突放宽W1或W2的过渡频段结果控制器阶次奇高权重阶次高且无降阶用平衡截断降阶时域阶跃超调大M值偏大减小M到1.2~1.5高频噪声放大W2增益不够增大W2高频增益4.2 仿真曲线与理论不一致的陷阱还有一类问题很隐蔽理论上加权灵敏度约束都满足了但仿真的阶跃响应或有色噪声激励结果显示性能很差。我踩过最大的坑是忽略了权重函数本身的物理可实现性。比如W2高频增益设到几千求解器找到的控制器会在这个频段剧烈放大表面看T被压住了但实际上控制器对测量噪声做了过激补偿控制信号抖动剧烈。另一个常见陷阱是Pade近似延迟带来的误差被低估。Pade近似在低频很准但高频相位误差大如果你没有在W2里覆盖这些误差仿真时未建模动态就会激发振铃。解决办法是把Pade近似的频率范围取为带宽的5倍以上同时W2的转折频率低于Pade近似的转折频率。在做MIMO系统时还要注意奇异值包络只是最坏情况不代表每个通道都一样。两个通道的加权必须分别定义否则外观上满足约束实际某个通道性能完全不可接受。4.3 几条能少走弯路的经验每次做完一个加权灵敏度设计任务我都会总结几条能直接沿用到下一个项目的经验。第一先做低阶对象练手不要一上来就用高维MIMO模型。把标准SISO流程跑通理解了权重曲线与最终控制器行为的对应关系再扩展到MIMO会顺畅很多。第二权重的参数调节不能零散进行最好拉着频率响应图一起看。W1和W2在Bode图上的交叉位置基本决定了闭环带宽这是设计中最直观的抓手。第三gamma值不是越小越好。gamma接近0.5时控制器往往非常激进实际执行器根本无法承受高频控制量。我习惯把设计目标设为gamma ≤ 1这个值既保证约束满足又给控制器留出实现余地。第四降阶不能盲目追求低阶一般保留到5到8阶既维持H无穷控制器的鲁棒特性又方便嵌入式部署。降到两三阶之后往往丢掉了鲁棒性设计的关键部分得不偿失。第五也是最重要的经验加权灵敏度设计不是一次性计算而是一个“设计-验证-再设计”的循环。你要把频域约束图、时域响应图、控制量曲线同时放在眼前观察任何一个指标偏离预期的原因都可能在另一个域里找到答案。毫不夸张地说我在第6次完整循环之后才真正理解了H无穷控制的边界在哪里而这套方法也从此成了我做鲁棒控制器设计时最先尝试的工具。