1. 为什么需要高斯加权移动平均滤波
在嵌入式系统和实时数据处理中,我们常常会遇到这样的场景:传感器采集到的信号总是伴随着各种噪声。比如我用STM32做过一个心率监测项目,原始光电信号就像被猫抓过的毛线团一样杂乱。这时候如果直接用普通移动平均滤波,虽然能平滑信号,但会把突变的心率峰值也"平均"掉——就像用美颜相机开到最高档,连五官轮廓都模糊了。
高斯加权移动平均滤波的聪明之处在于,它像给不同距离的数据点戴上"近视眼镜":离当前时刻越近的数据看得越清楚(权重高),远处的数据则逐渐模糊(权重低)。我去年调试无人机飞控时做过对比测试,同样10ms的窗口大小,普通移动平均滤波导致控制延迟达到8ms,而用σ=1.5的高斯加权版本延迟只有3ms,这就是时域局部性带来的优势。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高斯权重的数学魔法
2.1 高斯函数的三重特效
高斯函数的公式看起来有点吓人:w(i) = exp(-(i-c)²/(2σ²)),但其实可以理解为数据点的"重要性衰减曲线"。我习惯用煮咖啡来类比:σ就像咖啡粉的研磨度,σ越小相当于粉磨得越细(权重集中),σ越大就像粗颗粒(权重分散)。在ECG信号处理中,σ=0.8时能保留QRS波群的陡峭边缘,而σ=2.0更适合平滑呼吸基线漂移。
这里有个容易踩坑的地方:权重归一化。有次我忘记写weight /= np.sum(weight)这行代码,结果滤波后的信号幅度莫名其妙缩小了十倍。归一化就像给不同烘焙度的咖啡豆调配比例,确保最终杯量稳定。
2.2 窗口大小与σ的黄金配比
窗口大小和σ的关系就像相机光圈和焦距:窗口是取景范围,σ决定焦点清晰度。通过大量实测,我总结出经验公式:窗口半径≈3σ时效果最佳。比如当σ=1时,窗口大小取7(3σ×2+1)最合适。这个结论在电机转速检测中特别实用,太大窗口会引入历史干扰,太小又抑制不了高频噪声。
具体参数选择可以参照这个对照表:
| 应用场景 | 推荐σ值 | 窗口大小 | 适用原因 |
|---|---|---|---|
| 语音端点检测 | 0.5-1.0 | 5-7 | 保留音素突变边缘 |
| 工业振 |
