单片机ADC采样滤波算法详解:中值、滑动平均、限幅与一阶低通

小雨虫实名认证 发表于 2026-08-28 23:41 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
ADC采到的原始数据直接拿去用,往往会发现数值跳来跳去、误差很大。这是因为传感器信号里混着各种噪声:工频干扰、开关噪声、随机抖动。做嵌入式信号处理,滤波是绕不开的一步。本文把单片机常用的几类滤波算法讲清楚,并告诉你怎么组合使用。

先说最简单的限幅滤波。它的思路是:如果本次采样值和上一次的值差得超过一个阈值,就认为本次是野值,直接丢弃或用上次的值代替。这个算法几乎不占资源,专门对付毛刺和偶发脉冲,特别适合采集温度这类变化缓慢的信号。

然后是中值滤波。对连续采N个值排序取中间值,能有效去除脉冲噪声。N一般取3到5,N越大越平滑但延迟也越大。它的缺点是排序耗时,好在N小的时候开销可接受。采样瞬间被干扰打偏一个值,中值滤波能干净利落地把它剔除。

滑动平均是工程里最常用的。维护一个长度为N的队列,每次采进新值、丢掉最旧的值,输出队列平均值。它能明显压平高频抖动,但会带来相位滞后,N太大会让响应变迟钝。调试时建议从N=8开始试,根据波形调到噪声小、又不跟丢真实变化的折中值。

一阶低通滤波公式很优雅:输出 = 上次输出 + 系数 * (本次采样 - 上次输出)。系数越小越平滑但越迟钝。它的优势是只需两个变量,内存开销极小,非常适合资源紧张的51单片机。调系数时记住一个经验:响应速度和噪声抑制天然矛盾,只能按应用场景取平衡。

不要只迷信单一算法。工程实践里,真正好用的是“组合拳”:先限幅去野值,再中值或滑动平均压噪声,最后一段一阶低通做平滑。这样各算法各司其职,效果远好于单用一个复杂算法。在51上这段组合代码可能只有几十行,却能让ADC读数稳定不少。

最后提醒采样层面的基本功。滤波治标,硬件治本:采样前留一点时间让信号稳定,电源加好去耦电容,ADC参考电压要干净,这些配合滤波算法才能拿到稳定数据。把“采样→滤波→使用”整条链路打磨好,你的温湿度计、电压表、电流检测项目数据就会非常漂亮。

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- JMCAD苏ICP备18040927号-1

©2017-2026 常州居居米智能技术有限公司 苏公网安备32041102000587号