实验设计:激励信号的选择与数据预处理
做模型辨识,说白了就是给系统做一次「体检」。你得知道怎么刺激它,它才会告诉你真实的动态特性。这一章,我重点聊聊激励信号怎么选、采样时间怎么定、数据怎么洗白白。
一、激励信号的选择
我个人习惯把激励信号分成三类:阶跃、正弦、PRBS。每种都有它的脾气。
1. 阶跃信号
阶跃信号最简单,给系统一个突变,看它怎么响应。我在项目中遇到过不少现场工程师,上来就喜欢用阶跃。为什么?因为直观啊!
但这里有个坑:阶跃信号只适合开环稳定的系统。如果你的系统本身就不稳,阶跃一上去,输出直接飞了,啥也辨识不出来。
2. 正弦信号
正弦信号的好处是频率单一,可以精确测试系统在某个频率点的响应。我记得有一次做伺服系统的辨识,就是用不同频率的正弦扫了一遍,Bode图画出来,相位裕度一目了然。
但正弦信号有个致命缺点:慢。你要扫完整个频段,得花不少时间。工业现场哪有那么多时间给你慢慢扫?
3. PRBS信号
PRBS(伪随机二进制序列)是我最常用的激励信号。它看起来像随机噪声,但其实是确定性的。你想想看,它同时包含丰富的频率成分,一次实验就能覆盖整个频段。
我曾经用PRBS辨识一个化工反应器的温度模型,效果出奇的好。不过要注意PRBS的幅值不能太大,否则系统会进入非线性区。
| 信号类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 阶跃 | 简单直观 | 高频信息少 | 开环稳定系统 |
| 正弦 | 频率精确 | 耗时 | 频域分析 |
| PRBS | 频带丰富 | 幅值受限 | 通用辨识 |
二、采样时间的确定
采样时间怎么定?我有个简单的经验法则:采样频率至少是系统带宽的10倍。说白了,就是系统最快的变化,你一个周期内至少要采10个点。
为什么会这样?因为采样定理告诉我们,采样频率低于信号最高频率的两倍,就会发生混叠。但实际工程中,两倍远远不够。我建议至少5-10倍。
我的经验:
- 对于温度系统,采样时间可以设1-5秒
- 对于电机转速,采样时间通常10-50毫秒
- 对于电流环,采样时间要1毫秒以内
嗯,这里要注意:采样时间太短,数据量太大,计算负担重;采样时间太长,会丢失动态信息。你得在两者之间找个平衡。
三、数据预处理
采集到的原始数据,不能直接用。为什么?因为里面有各种噪声、趋势项、异常点。我见过太多人拿原始数据直接辨识,结果模型一塌糊涂。
1. 去趋势
去趋势,就是把数据中的缓慢变化成分去掉。比如温度系统,环境温度缓慢变化,这个趋势不是我们关心的动态特性。
常用的方法有:
- 差分法:最简单,一阶差分就能去掉线性趋势
- 高通滤波:设置一个截止频率,低于这个频率的成分统统滤掉
- 多项式拟合:拟合出趋势项,然后减去
2. 滤波
滤波是为了去掉高频噪声。但滤波有个副作用:会改变信号的相位。你想想看,滤波后的数据,相位滞后了,辨识出来的模型也会偏。
我个人建议:
- 能不用滤波就不用滤波
- 如果非要用,选择零相位滤波(比如filtfilt函数)
- 滤波器的截止频率要远高于系统带宽
# Python示例:零相位滤波
from scipy.signal import butter, filtfilt
def zero_phase_filter(data, cutoff, fs, order=4):
nyquist = 0.5 * fs
normal_cutoff = cutoff / nyquist
b, a = butter(order, normal_cutoff, btype='low')
# 零相位滤波
filtered = filtfilt(b, a, data)
return filtered
四、知识体系总览
下面这张图,是我梳理的实验设计核心逻辑。你看一遍,心里就有数了。
这张图把整个流程串起来了。从激励信号开始,到采样时间,再到数据预处理,最后得到高质量的数据。每一步都马虎不得。
可可精品资料库