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
4.2 Bode图拟合:从散点到曲线
测出来的频率响应是一堆离散点。我们需要一条光滑的传递函数曲线来拟合它。这个过程,我称之为“Bode图拟合”。
常用的拟合方法:
- 最小二乘拟合(LS):在幅值和相位上同时做优化。速度快,但对噪声敏感。
- 迭代加权最小二乘(IRLS):先粗拟合,再根据残差调整权重。我常用这个,鲁棒性好。
- 向量拟合(Vector Fitting):适合高阶系统,能自动确定极点个数。嗯,这个有点复杂,但效果确实好。
拟合时有个坑:相位缠绕。你测出来的相位可能在-180度和+180度之间跳来跳去。不处理直接拟合,结果会乱套。我习惯先做相位解缠绕(unwrap),再拟合。
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图,是我梳理的频域辨识核心逻辑。从激励信号到最终模型,每一步都有讲究。
你看,从激励到验证,每一步都有对应的工具和方法。我个人觉得,最关键的还是第三步和第五步——频率响应估计和Bode图拟合。这两步做扎实了,传递函数辨识就是水到渠成的事。
4.5 实战中的几点提醒
- 信噪比:频率响应估计对噪声敏感。我习惯在激励信号幅值上做文章——低频段幅值大一点,高频段幅值小一点,保证各频段都有足够的信噪比。
- 采样率:采样率至少是最高关心频率的10倍。别问我怎么知道的,有一次我采样率设低了,结果高频段全是混叠,Bode图惨不忍睹。
- 模型阶次:别贪多。一个三阶模型能拟合好,就别用五阶。过拟合的模型在验证时往往表现很差。
好了,频域辨识就聊到这儿。记住,Bode图是你的朋友,拟合是你的工具,传递函数是你的目标。多练几次,你也能像我一样,看一眼Bode图就能猜出系统的零极点。