4. 过载信号处理:低通滤波、陷波滤波、滑动平均滤波在过载信号中的应用
过载信号,说白了就是飞行器感受到的加速度。这玩意儿直接决定了飞控能不能稳住飞机。但现实很骨感——传感器出来的信号,噪声大得吓人。我见过不少新手,一上来就拿着原始过载信号去算控制量,结果飞机抖得像筛子。
所以,滤波是必须的。但怎么滤?滤到什么程度?这里头门道不少。今天咱们就聊聊三种最常用的方法:低通滤波、陷波滤波、滑动平均滤波。
4.1 低通滤波:最基础的降噪手段
低通滤波,名字听着唬人,其实就一句话:让低频信号通过,把高频噪声干掉。过载信号里的高频噪声,主要来自机体振动和传感器本身的电子噪声。
我个人习惯用一阶RC低通滤波,简单、计算量小,在嵌入式MCU上跑起来毫无压力。公式长这样:
y[n] = α * x[n] + (1 - α) * y[n-1]
其中 α = T / (T + τ),T 是采样周期,τ 是时间常数。α 越小,滤波越狠,但信号延迟也越大。
关键点:低通滤波的截止频率 f_c = 1 / (2πτ)。选 τ 的时候,要保证 f_c 高于飞控的带宽,但又低于结构振动的频率。我一般取 f_c 在 10~30 Hz 之间。
我在项目中遇到过一个问题:滤波太深,过载信号滞后严重,导致飞控响应变慢,飞机在机动时出现明显的超调。后来我把 α 调大了些,牺牲了一点平滑度,换来了更快的响应。
小技巧:如果 MCU 算力够,可以用二阶巴特沃斯低通滤波,衰减特性更陡,能更好地保留有用信号。
4.2 陷波滤波:精准干掉特定频率的振动
低通滤波虽然好用,但有个毛病——它会无差别地衰减所有高频成分。可有时候,我们只想干掉某个特定的频率,比如机翼的颤振频率(通常是 20~50 Hz)。这时候,陷波滤波就派上用场了。
陷波滤波器的传递函数长这样:
H(s) = (s² + ω₀²) / (s² + 2ζω₀s + ω₀²)
其中 ω₀ 是要滤除的中心频率,ζ 是阻尼比,决定了陷波的宽度。ζ 越小,陷波越窄,对附近频率的影响越小。
我记得有一次做某型无人机,机翼在 35 Hz 处有个明显的共振峰。低通滤波把 35 Hz 以上的信号全砍了,结果飞控带宽不够,飞机机动性大打折扣。后来我加了一个中心频率 35 Hz、阻尼比 0.1 的陷波滤波器,只干掉那个共振峰,其他频率的信号几乎不受影响。
注意:陷波滤波器会引入相位滞后,尤其是在中心频率附近。如果相位滞后太大,可能会影响飞控的稳定性。我建议在仿真中先验证一下相位裕度。
实际应用中,陷波滤波器通常和低通滤波器配合使用。先用陷波干掉结构共振,再用低通滤掉高频噪声。这样既能保证信号干净,又不会过度牺牲带宽。
4.3 滑动平均滤波:简单粗暴但有效
滑动平均滤波,说白了就是取最近 N 个采样点的平均值。公式简单到令人发指:
y[n] = (x[n] + x[n-1] + ... + x[n-N+1]) / N
N 越大,平滑效果越好,但延迟也越大。这个延迟是固定的——正好是 N/2 个采样周期。
你想想看,滑动平均滤波的好处是什么?实现简单,没有复杂的数学运算,在低端 MCU 上也能跑得飞起。而且它对周期性噪声的抑制效果特别好,比如电源的 50 Hz 工频干扰。
但缺点也很明显:它对脉冲噪声的响应很差。如果某个采样点突然跳变(比如传感器受到冲击),这个跳变会持续影响 N 个输出值。我曾经在试飞中遇到过这种情况——飞机落地时传感器受到冲击,滑动平均滤波后的过载信号出现了一个持续 0.1 秒的“假峰”,差点触发过载保护。
经验之谈:滑动平均滤波适合用在噪声比较平稳的场景。如果信号中可能出现脉冲干扰,建议先做中值滤波,再做滑动平均。
4.4 三种滤波方法的对比与选择
说了这么多,到底该用哪种?我整理了一个表格,方便你对比:
| 滤波方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 低通滤波 | 实现简单,计算量小,通用性强 | 会衰减有用信号的高频成分,有相位滞后 | 通用降噪,飞控主回路滤波 |
| 陷波滤波 | 精准抑制特定频率,对其他频率影响小 | 需要知道目标频率,相位滞后集中在中心频率附近 | 抑制结构共振、发动机振动等特定频率干扰 |
| 滑动平均滤波 | 实现最简单,对周期性噪声效果好 | 延迟固定,对脉冲噪声敏感 | 噪声平稳的场景,如地面测试、低速飞行 |
我个人在实际项目中,通常这样搭配:
- 主过载信号:先用陷波滤波器干掉结构共振频率,再用二阶低通滤波做平滑处理。
- 备用/监控信号:直接用滑动平均滤波,简单可靠,万一主路出问题,还能有个参考。
- 试飞数据后处理:用滑动平均滤波做离线分析,因为不关心实时性,平滑效果越好越好。
4.5 一个实际案例:某型无人机过载信号处理
嗯,这里我讲一个真实的案例。某型无人机在试飞时,发现滚转通道的过载信号噪声很大,导致副翼舵机频繁抖动。我检查了原始数据,发现噪声主要来自两个来源:
- 机翼在 28 Hz 处的结构共振
- 传感器本身的 100 Hz 高频噪声
我的处理方案是这样的:
// 第一步:陷波滤波,中心频率 28 Hz,阻尼比 0.15
float notch_filter(float input) {
static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
float b0 = 0.9565, b1 = -1.9130, b2 = 0.9565;
float a1 = -1.9130, a2 = 0.9130;
float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
x2 = x1; x1 = input;
y2 = y1; y1 = output;
return output;
}
// 第二步:二阶低通滤波,截止频率 20 Hz
float lowpass_filter(float input) {
static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
float b0 = 0.2066, b1 = 0.4132, b2 = 0.2066;
float a1 = -0.3695, a2 = 0.1958;
float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
x2 = x1; x1 = input;
y2 = y1; y1 = output;
return output;
}
试飞结果:副翼抖动消失了,飞控响应速度几乎没有下降。嗯,这就是滤波的魅力——用对了,效果立竿见影。
4.6 知识体系总览
为了让你更直观地理解这三种滤波方法在过载信号处理中的位置和关系,我画了一张图:
从这张图可以看得很清楚:原始过载信号经过三种滤波方法的处理,最终输出给飞控系统。实际应用中,这三种方法不是互斥的,而是可以组合使用的。我个人建议的顺序是:先陷波(干掉特定干扰),再低通(平滑处理),最后用滑动平均做最后的微调(如果算力允许的话)。
最后说一句:滤波参数不是一成不变的。不同飞行阶段、不同机型,最优参数都不一样。我习惯在试飞数据中做离线分析,找到噪声的频谱特征,再反推滤波参数。这样比拍脑袋靠谱得多。