3、动态标定与频响分析:阶跃响应法、正弦扫频法、动态误差补偿模型、带宽与相位滞后分析
静态标定搞定之后,很多工程师就觉得万事大吉了。但说实话,真正的坑往往在动态里。你想想看,一个压力传感器静态精度做到0.1%,装到高速液压系统上,信号一变化,输出直接滞后几十毫秒——这时候再准也没用。
动态标定,说白了就是搞清楚传感器在信号快速变化时的表现。我个人习惯把它分成三块:怎么测(激励方法)、怎么评(频响指标)、怎么补(误差模型)。下面我们一个一个说。
3.1 阶跃响应法:最直观的动态测试
阶跃响应法是我入行时第一个学的动态标定方法。原理很简单:给传感器一个瞬间变化的输入,看它怎么跟上。
我在项目中遇到过一件事:一个温度传感器,静态标定完全合格,但装到发动机排气管上,读数总是慢半拍。后来用阶跃响应法一测,上升时间竟然有2.3秒——根本没法用。换了个响应快的型号,tr降到0.3秒,问题就解决了。
阶跃响应的关键参数:
| 参数 | 定义 | 典型判据 |
|---|---|---|
| 上升时间 tr | 输出从10%到90%所需时间 | 越小越好,反映响应速度 |
| 建立时间 ts | 输出进入±2%误差带的时间 | 反映系统稳定速度 |
| 超调量 σ% | 峰值超出稳态值的百分比 | 一般要求<5% |
| 稳态误差 ess | 最终值与目标值的偏差 | 反映系统精度 |
3.2 正弦扫频法:频域分析的利器
正弦扫频法,说白了就是给传感器输入一系列不同频率的正弦信号,然后看输出幅值和相位怎么变。我习惯用扫频仪或者信号发生器+数据采集卡来做。
具体做法:
- 从低频(比如0.1Hz)开始,逐步增加到高频(比如10kHz或传感器上限)
- 在每个频率点,记录输出幅值Aout和输入幅值Ain的比值
- 同时记录输出与输入之间的相位差φ
- 绘制Bode图:幅频曲线和相频曲线
我记得有一次做加速度传感器的动态标定,用正弦扫频法测到800Hz时,幅值衰减了3dB,相位滞后了45°。客户要求工作带宽到1kHz,这显然不达标。后来发现是安装谐振的问题,换了安装方式就解决了。
3.3 带宽与相位滞后分析
带宽是动态标定里最重要的指标之一。它通常定义为幅值衰减到-3dB(即0.707倍)时的频率。但这里有个容易忽略的点:带宽的定义方式不止一种。
| 带宽类型 | 定义 | 适用场景 |
|---|---|---|
| -3dB带宽 | 幅值衰减到0.707倍时的频率 | 通用标准,最常用 |
| 幅值误差带宽 | 幅值误差不超过±5%的频率范围 | 高精度测量 |
| 相位误差带宽 | 相位滞后不超过±5°的频率范围 | 相位敏感应用(如振动控制) |
相位滞后这个问题,我在做多传感器融合时吃过亏。两个传感器测同一个信号,一个滞后10°,另一个滞后30°,融合出来的数据相位对不上,波形都乱了。后来我养成了一个习惯:做融合之前,先测每个传感器的相频特性,然后在软件里做相位对齐。
3.4 动态误差补偿模型
知道了动态误差,下一步就是怎么补。我个人常用的方法有三种:
- 零极点补偿法: 根据传感器的传递函数,在数字域添加补偿滤波器。比如传感器有一个极点p1,就加一个零点z1≈p1来抵消。
- 逆模型补偿法: 先通过系统辨识得到传感器的动态模型H(s),然后设计逆滤波器H-1(s)串联在信号链中。
- 自适应补偿法: 用LMS或RLS算法在线调整补偿参数,适合时变系统。
下面是一个简单的逆模型补偿代码示例(基于一阶低通传感器模型):
// 传感器模型:H(s) = 1 / (τs + 1)
// 补偿滤波器:H_inv(s) = (τs + 1) / (ατs + 1)
// α是正则化因子,防止高频噪声放大
float compensate_dynamic(float raw, float tau, float alpha, float dt) {
static float prev_raw = 0;
static float prev_comp = 0;
// 离散化实现(双线性变换)
float a0 = 2*tau + dt;
float a1 = dt - 2*tau;
float b0 = 2*alpha*tau + dt;
float b1 = dt - 2*alpha*tau;
float comp = (a0*raw + a1*prev_raw - b1*prev_comp) / b0;
prev_raw = raw;
prev_comp = comp;
return comp;
}
3.5 动态标定流程总览
下面这张图是我做动态标定时常用的流程,从激励到补偿一气呵成: