传感器数据滤波入门:从毛刺到有效信号的顺序

传感器数据滤波不是把曲线磨平就完事,正确的顺序是先剔掉不可能出现的异常值,再压平随机抖动,之后才谈多传感器融合。现场八成的读数跳动,用限幅加中值加一阶低通这三板斧就能解决,剩下两成往往得先回去查布线。这篇按实际处理顺序,把每一步的处理对象、参数区间和坑点讲透,配示意图,做采集和信号处理的工程师照着走就行。
一、传感器数据滤波前先分清:毛刺、噪声和漂移是三回事
真实温度纹丝不动停在 25 度,测量值却在 25.1、24.9、25.0、25.2 之间来回抖,还冷不丁蹦出一个 37.5 的尖峰。围着真值抖的那部分叫随机噪声,单个蹦出去的叫毛刺,一整天慢慢往一个方向爬的才叫零点漂移。
三者来源不同,处理手段也不同:毛刺靠限幅和中值,噪声靠低通或平均,漂移只能靠标定、温度补偿或者换器件。分不清对象就上算法,属于白干。
二、采样与频率:看不清频谱,滤波一定选错
采样率 100Hz 就是每 10ms 采一个点,时域里是一串离散点。要判断信号和噪声各占哪段频率,得转到频域看频谱:好比有用信号集中在 0~10Hz、高频噪声在 10Hz 以上,那么一个截止频率 1~5Hz 的低通就能把两者分开。
一条铁律:采样率必须大于信号上限频率的 2 倍,这是奈奎斯特条件。采不够就会出现混叠,高频噪声被「折叠」成低频假信号,这时候软件再怎么滤都救不回来。所以硬件 RC 低通一定要摆在 ADC 前面,顺序不能反。
四类滤波器一句话记住:低通放低频,高通放高频,带通只放中间一段,带阻(陷波)只掐掉一段。搞不清该用哪类,先把这个对应关系背下来。

三、异常值抑制:限幅和中值是把快刀,参数别拍脑袋
限幅的思路很直:新值和上一个有效值一比,差值超过阈值就当异常拒收,输出维持旧值。它专治单点跳变,逻辑短到单片机上一行 if 就写完,不占内存。
中值滤波专治脉冲毛刺:把窗口内的点排序,取中间那个。序列 10、11、12、100、13 排完序是 10、11、12、13、100,取中值 12,那个 100 一点都沾不上。窗口要用奇数个点,偶数取中值还得插值,工程上没必要折腾。
| 方法 | 治什么 | 参数起点 | 代价与副作用 |
|---|---|---|---|
| 限幅 | 单点跳变 | 阈值取正常单周期变化量上限的 1.5~2 倍 | 阈值太紧会把真变化当异常,输出像卡死 |
| 中值 | 脉冲毛刺 | 窗口 3~5 点,取奇数 | 窗口越大延迟越大,上电初期窗口不满会取到假中值 |
| 滑动平均 | 随机噪声 | 窗口 4~16 点 | 延迟约等于 N/2 个采样周期,随窗口线性增长 |
| 一阶低通 / EMA | 随机噪声 | α 按截止频率算,常用 0.05~0.3 | α 太小响应迟钝,超限报警跟着滞后 |

四、平均类滤波的取舍:越平滑,越迟钝
滑动平均是很常用的降噪手段,窗口内 N 个点求平均。工程上的巧思是增量更新:sum 减掉上一个点、加上新点,再除以 N,每来一个新点只做一次加一次减,计算量和窗口大小无关。
窗口 N 是纯取舍:N 越大曲线越平,延迟也越大,延迟大致是 N/2 个采样周期。信号毛刺大就加大窗口,系统响应要求快就减小窗口,两头不能都要。100Hz 采样下窗口 10 点,延迟就是 50ms,对快速定位的轴来说已经不小了。

五、传感器数据滤波里的 EMA:一个变量就能做低通
EMA(指数加权移动平均)的公式就一行:y[n] = α·x[n] + (1−α)·y[n−1]。只保存一个历史值,单片机上几个字节就够,是资源很省的低通实现。
α 就是方向盘:取 0.01 这种小值,输出平滑但反应慢半拍;取 0.8 这种大值,跟得紧但滤波弱。α 不用瞎试,按采样率和目标截止频率有现成公式:α = 1 − e^(−2π·Fc/Fs)。
举个例子:采样率 100Hz、想要 5Hz 截止,代进去 2π×5/100 ≈ 0.314,α ≈ 1 − e^(−0.314) ≈ 0.27。换个采样率 α 就得重算,它不是能到处套的通用常数。

六、FIR 与 IIR:稳定性和算力之间的取舍
FIR 只用输入的历史值,天然稳定,还能做成线性相位——信号通过后波形形状不变,只是整体延迟一截,代价是阶数通常要高、计算量大。对波形有要求、又不差算力的场合,选它省心。
IIR 同时用输入和输出的历史值,低阶就能做出很陡的过渡带,算力省,但因为有反馈项,系数设计不好会发散震荡。前面讲的都能归队:滑动平均属于 FIR,EMA 就是一阶 IIR。

七、按频率特性挑低通,50Hz 工频用陷波
同样是低通,性格不一样:巴特沃斯通带平坦、幅频单调下降,没特别要求就选它;切比雪夫 I 型过渡带更陡,代价是通带有波纹;贝塞尔相位特性好、波形失真小,在意波形形状就选它;椭圆过渡带更陡,但通带阻带都带波纹。
另一种高频登场的干扰是 50Hz 工频。信号线和动力线捆在一个线槽、接地又做得随意时,频谱上 50Hz 处会立起一根尖峰,看着就像信号在抖。这时候上陷波器,在 50Hz 精准挖个坑,其它频率基本不受影响。

八、多传感器融合:互补滤波与卡尔曼
一个传感器撑不住的场景才需要融合。经典组合是陀螺仪加加速度计:陀螺仪短期准、长期会漂移;加速度计低动态时能靠重力方向校正,但短期噪声大。互补滤波一行搞定:Angle = α·(Angle + Gyro·dt) + (1−α)·AccelAngle,高频信陀螺,低频信加计。
再进一步是卡尔曼:预测、更新、状态估计三步走,按两边的噪声统计自动分配权重。举个数字:模型预测 10.2 米,测量给了 10.8 米,融合结果落在 10.4 米,不偏听偏信。Q(过程噪声)和 R(测量噪声)这两个参数,决定折中偏向谁。

九、工程滤波链:先去异常,再平滑
实际项目里滤波从来不单打独斗。举个压力采集的例子:采样率 100Hz,首级做合法性检查拦住离谱值,第二级 5 点中值把 3500 这类毛刺挤出去,末级截止 5Hz 的一阶低通把随机抖动压平,输出就干净了。
顺序有讲究,先处理异常值再平滑随机波动。反过来先做平均,一个毛刺会被摊进整串数据里,把一大段输出全污染,等于把单点错误放大成趋势。这条顺序错了,后面算法再多也补不回来。

十、选型与嵌入式资源账:RAM 和 CPU 都是钱
按场景选方案,查表省事。温湿度这类慢变量用限幅加 EMA;光照、ToF 测距用中值加 EMA;ADC 采电压用滑动平均或 IIR;IMU 姿态用互补或卡尔曼;心电这类强工频场景用带通加陷波。
| 应用场景 | 推荐链路 | 参数起点 |
|---|---|---|
| 温湿度、压力等慢变量 | 限幅 + EMA | 采样 1~10Hz,α 取 0.05~0.2 |
| 光照、ToF 测距 | 中值 + EMA | 中值窗口 3~5 点 |
| ADC 电压采集 | 滑动平均 或 二阶 IIR | 窗口 8~16 点 |
| IMU 姿态解算 | 互补滤波 或 卡尔曼 | 采样 100~1000Hz,按实测标定 Q/R |
| 强工频干扰场合 | 带通 + 50Hz 陷波 | 陷波 Q 取 20~40 |
资源账也得算清:滑动平均窗口 N=100,float 每点 4 字节就要留 400 字节缓存;EMA 只保存一个浮点数,4 字节搞定。128 抽头的 FIR 在 10kHz 采样率下约等于每秒上百万次乘加,主频紧张就上 CMSIS-DSP 这类现成库、用 DMA 搬运、开硬件浮点单元。

传感器数据滤波常见问题
问:传感器数据滤波是不是开了就比不开好?
答:不是。滤波必然带来延迟,控制系统越是要快,越要克制。先判断数据里到底有没有异常值和噪声,没有就别硬滤,直接透传反而更准。
问:限幅和中值,先做哪一个?
答:一般先限幅再中值。限幅先把离谱的挡掉,中值再处理窗口里的脉冲,两级串起来比单用一级干净得多,计算量也没上去多少。
问:一阶低通的 α 能不能直接取 0.1?
答:可以当起点,但要按采样率折算。同样 α=0.1,采样率 10Hz 和 1000Hz 对应的实际截止频率差了 100 倍,效果完全不是一回事。用 α = 1 − e^(−2π·Fc/Fs) 反推。
问:位移传感器接进 PLC 后读数跳,是滤波没做好吗?
答:先查接地和走线,再谈滤波。屏蔽线单点接地、信号线与动力线分槽,这两条做到位,很多跳变自己就没了。硬件耦合改成软件滤,属于治标。
问:卡尔曼滤波是不是比中值加低通高级,就该用?
答:看对象。单传感器、单变量的位置反馈,限幅加中值加一阶低通就够了;只有多传感器需要互相校正、且噪声统计可测时,卡尔曼才划算。算法复杂度和调试成本都要算进去。
传感器数据滤波的链路怎么搭、参数怎么定,易测电气位移传感器工程师欢迎您的咨询。
推荐文章
- 造纸机械位移传感器怎么选?压光辊缝、卷取与网部测点[2026-10-04]
- 轧机位移传感器怎么选:辊缝、压下与弯辊[2026-10-01]
- 压铸机位移传感器怎么选:压射与合模两处测点[2026-09-29]
- CAN总线入门:差分信号、终端电阻与ID仲裁[2026-09-26]
- 液压机油缸位移监测:预测性维护怎么做[2026-09-24]

