4、频域辨识方法:频率响应估计、Bode图拟合、传递函数辨识

频域辨识,说白了就是把系统当成一个“黑箱子”,我们在外面敲一敲,听它怎么响。你给它不同频率的正弦波,它吐出不同幅度和相位的波形。把这些数据一整理,系统的脾气秉性就全出来了。

我个人特别喜欢频域法。为什么?因为它直观。时域里一堆微分方程看着头疼,但频域里一条Bode图,系统的稳定性、带宽、谐振峰,一眼就能看穿。我在做电机伺服系统调试时,就靠这招快速定位过机械共振点。

4.1 频率响应估计:怎么测才靠谱?

频率响应估计,核心就一件事:给激励,看响应。

常用的激励信号有两种:

  • 正弦扫描(Sine Sweep):一个频率一个频率地测。精度高,但慢。我当年测一个液压伺服阀,扫了20个频率点,花了半小时。
  • 伪随机二进制序列(PRBS):一次给一堆频率。快,但信噪比需要控制好。

拿到输入输出数据后,怎么算频率响应?最经典的方法是周期图法:

% 假设 u 是输入,y 是输出,fs 是采样率
[G, f] = tfestimate(u, y, [], [], [], fs);
% G 就是频率响应复数向量
% 幅值 = abs(G)
% 相位 = angle(G) * 180 / pi
我的小技巧:做FFT之前,一定要加窗。我习惯用汉宁窗(Hann window),能有效减少频谱泄漏。不加窗?那结果就像喝醉了画的Bode图,歪歪扭扭。

4.2 Bode图拟合:从散点到曲线

测出来的频率响应是一堆离散点。我们需要一条光滑的传递函数曲线来拟合它。这个过程,我称之为“Bode图拟合”。

常用的拟合方法:

  1. 最小二乘拟合(LS):在幅值和相位上同时做优化。速度快,但对噪声敏感。
  2. 迭代加权最小二乘(IRLS):先粗拟合,再根据残差调整权重。我常用这个,鲁棒性好。
  3. 向量拟合(Vector Fitting):适合高阶系统,能自动确定极点个数。嗯,这个有点复杂,但效果确实好。

拟合时有个坑:相位缠绕。你测出来的相位可能在-180度和+180度之间跳来跳去。不处理直接拟合,结果会乱套。我习惯先做相位解缠绕(unwrap),再拟合。

避坑指南:我曾经在一次飞行器舵机辨识中,忽略了相位缠绕,拟合出来的传递函数相位特性完全反了。后来查了两天才发现是unwrap没做。从那以后,我每次做Bode图拟合,第一件事就是检查相位曲线是否连续。

4.3 传递函数辨识:从Bode图到数学模型

有了拟合好的Bode图,下一步就是提取传递函数。说白了,就是猜系统的零极点个数,然后优化参数。

我一般按这个步骤来:

  • 看幅频曲线:低频段斜率是-20dB/dec?那有一个积分环节。高频段滚降是-40dB/dec?那可能是二阶系统。
  • 看相频曲线:-90度相移?一个极点。-180度?两个极点。如果相位在某个频率突然下降,那可能有延迟环节。
  • 猜阶次:先猜低阶,比如二阶系统。拟合不好再增加阶次。别一上来就搞十阶,过拟合了反而不好用。

举个例子。我测了一个温度控制系统的频率响应,幅频曲线在低频段是平的,高频段以-20dB/dec下降。相频曲线从0度降到-90度。我猜它是一阶惯性系统:

G(s) = K / (T*s + 1)

然后用最小二乘法拟合K和T。结果出来了,K=2.5,T=0.8秒。和实际系统对了一下,误差在5%以内。嗯,够用了。

核心要点:频域辨识不是越复杂越好。很多时候,一个简单的一阶或二阶模型,配上准确的参数,比一个高阶但参数不确定的模型实用得多。我在工业现场见过太多人把简单问题复杂化。

4.4 知识体系:一张图看懂频域辨识

下面这张SVG图,是我梳理的频域辨识核心逻辑。从激励信号到最终模型,每一步都有讲究。

频域辨识方法核心流程 激励信号 正弦扫描 / PRBS 数据采集 输入u / 输出y 频率响应估计 FFT / 周期图法 Bode图 幅值+相位 Bode图拟合 LS / IRLS / Vector Fitting 传递函数辨识 零极点提取 / 参数优化 模型验证:时域/频域对比

你看,从激励到验证,每一步都有对应的工具和方法。我个人觉得,最关键的还是第三步和第五步——频率响应估计和Bode图拟合。这两步做扎实了,传递函数辨识就是水到渠成的事。

4.5 实战中的几点提醒

  • 信噪比:频率响应估计对噪声敏感。我习惯在激励信号幅值上做文章——低频段幅值大一点,高频段幅值小一点,保证各频段都有足够的信噪比。
  • 采样率:采样率至少是最高关心频率的10倍。别问我怎么知道的,有一次我采样率设低了,结果高频段全是混叠,Bode图惨不忍睹。
  • 模型阶次:别贪多。一个三阶模型能拟合好,就别用五阶。过拟合的模型在验证时往往表现很差。
我的习惯:每次做完频域辨识,我都会把辨识结果和实测数据画在同一张Bode图上。如果两条曲线在关心的频段内误差小于3dB和10度,我就认为模型可用。如果不行,我会检查是不是漏掉了延迟环节或非线性因素。

好了,频域辨识就聊到这儿。记住,Bode图是你的朋友,拟合是你的工具,传递函数是你的目标。多练几次,你也能像我一样,看一眼Bode图就能猜出系统的零极点。

可可精品资料库