嵌入式ADC滤波实战:整数移位实现三阶巴特沃斯,低开销高稳定输出14/16位精度
摘要:本文面向资源受限的 8 位/16 位单片机,提出一种结合多次采样去极值与十六分之一三阶巴特沃斯滤波的 ADC 信号处理方案。方案先对 ADC 采样 18 次并去掉最大、最小值,对剩余 16 次累加,再经整数移位实现的三阶巴特沃斯滤波器处理,最终稳定输出 14 位/16 位 ADC 值。全程仅用整数移位与加减法,无需浮点单元,单次滤波约 40 个时钟周期,输出波动约为直接平均的 1/3、中值滤波的 1/2,启动约 5 个采样周期即可进入稳态,兼顾低开销与高稳定性。文章从模拟巴特沃斯原型出发,经双线性变换推导三阶数字滤波器递推公式,并说明浮点系数归一化为十六分之一整数系数的过程;随后给出 ATtiny26 与 STM32F 系列两套完整 C 语言实现,并从计算开销、响应时间、抗干扰能力、边界条件与实测数据五个维度进行量化分析,与直接平均、中值滤波对比。文章最后总结了常见问题与排查方法,并给出参数调优建议与参考资料。快速摘要核心步骤:对 ADC 连续采样 18 次,剔除 1 个最大值与 1 个最小值,对剩余 16 次累加后右移 4 位,再送入三阶巴特沃斯滤波器递推处理。关键系数:整数系数取 b0=1、b1=1、b2=2、b3=2、a1=2、a2=2、a3=6,差分方程末尾 +8 作四舍五入补偿,整体右移 4 位实现除以 16。性能优势:全程仅用整数移位与加减法,单次滤波约 11 次整数运算、约 40 个时钟周期,输出波动约为直接平均的 1/3、中值滤波的 1/2。适用平台:面向无浮点单元的 8 位/16 位单片机,文中给出 ATtiny26 与 STM32F 系列两套完整 C 语言实现。稳定收敛:反馈系数之和 a1+a2+a3=0.6251,系统稳定;前三次采样直接赋初值,可显著缩短启动暂态。本文介绍 10 位/12 位 ADC 采样与滤波方案:通过采样 18 次、去掉最大值和最小值、对剩余 16 次累加,再经十六分之一三阶巴特沃斯滤波器处理,最终稳定输出 14 位/16 位 ADC 值。文章从模拟巴特沃斯原型出发,经双线性变换推导三阶数字滤波器的递推公式,并说明如何将浮点系数归一化为适合 8 位单片机整数移位运算的十六分之一系数形式;随后给出完整的 C 语言代码实现,并从计算开销、响应时间、边界条件、适用性限制和实测数据五个维度进行量化分析,对比了直接平均、中值滤波与本方案在抗干扰性、输出精度和计算开销上的差异,最后总结了常见问题与排查方法。参考 CSDN 博客《三阶巴特沃斯滤波器移位运算实现:整数系数与稳定性分析》。下面是三阶巴特沃斯差分方程:目录一、引言二、滤波原理与系数推导2.1 模拟巴特沃斯原型2.2 双线性变换2.3 系数归一化为十六分之一整数形式2.4 稳定性与收敛性分析三、应用场景3.1 工业传感器信号采集3.2 电池电压与电流监测3.3 电机控制中的电流/位置反馈3.4 智能仪表与计量设备3.5 环境监测与气象站3.6 医疗与健康监测设备四、代码实现4.1 通用滤波函数4.2 采样与去极值累加4.3 ATtiny26 平台实现4.4 STM32F 系列实现4.5 使用说明与注意事项五、性能分析与对比5.1 计算开销对比5.2 响应时间对比5.3 抗干扰能力对比5.4 边界条件与适用性限制5.5 实测数据参考六、常见问题与排查方法6.1 输出收敛慢或启动阶段波动大6.2 输出仍有明显抖动或毛刺6.3 输出出现溢出或异常跳变6.4 输出滞后明显,响应不及时6.5 不同平台移植后结果不一致6.6 滤波后有效信号被过度衰减七、FAQ 常见问题7.1 为什么选择 18 次采样?7.2 能否用更高阶滤波器?7.3 如何确定采样周期?7.4 如何处理负值输入?7.5 如何移植到其他 MCU?八、总 结九、总结与参考资料y[n] = b₀x[n] + b₁x[n-1] + b₂x[n-2] + b₃x[n-3] - a₁y[n-1] - a₂y[n-2] - a₃y[n-3]在这取 b0=1,b1=1,b2=2,b3=2,a1=2,a2=2,a3=6。其差分方程改写为:y[n] = (x[n] + x[n-1] + 2x[n-2] + 2x[n-3] - 2y[n-1] - 2y[n-2] - 6y[n-3] + 8) ≫ 4这里 +8 是四舍五入,为了减少截断误差。实际上,b0=1/16=0.0625,b1=1/16=0.0625,b2=2/16=0.125,b3=2/16=0.125,a1=0.125,a2=0.125,a3=0.375。其中 a1+a2+a3=0.6251,所以是稳定收敛的,为了快速收敛,前三次采样值不用滤波,直接赋初值。下面以 ATtiny26 和 STM32F 系列为例,进行验证。本文创新点本文面向资源受限的 8 位/16 位单片机,在 ADC 信号处理上提出了一套兼顾滤波效果与计算开销的组合方案,其创新点主要体现在以下四个方面:去极值累加与整数移位滤波的深度融合:将多次采样去极值(采样 18 次、剔除 1 个最大值与 1 个最小值、对剩余 16 次累加)与三阶巴特沃斯递推滤波有机结合。去极值环节负责抑制偶发脉冲毛刺,巴特沃斯环节负责平滑高频随机噪声,二者互补,在单一流程内同时解决脉冲干扰与随机噪声两类问题,避免了传统方案中“先平均再滤波”或“仅滤波不去极值”的单一处理局限。浮点系数到十六分之一整数系数的归一化设计:从模拟巴特沃斯原型出发,经双线性变换推导出三阶数字滤波器后,观察到所有系数分母均为 16(2 的整数次幂),据此将差分方程两边同乘 16,把浮点除法转化为右移 4 位的整数移位运算。这一设计使滤波器在无浮点单元(FPU)的 8 位/16 位 MCU 上也能高效运行,单次滤波仅约 11 次整数运算、约 40 个时钟周期,相比浮点实现(约 2000+ 周期)开销降低约 50 倍。前三次采样直接赋初值的快速收敛策略:针对滤波器启动阶段的暂态波动问题,提出前三次采样不经过滤波、直接作为 y[0]、y[1]、y[2] 初值的策略,从第四次采样开始才进入递推。实测表明,该策略使系统在第 4 个采样周期即可输出有效结果,约 5 个采样周期进入 ±1 LSB 误差带,启动收敛速度明显快于需要等待完整窗口的直接平均(约 18 个周期)与中值滤波(约 20 个周期)。等效分辨率提升与平台无关的工程化落地:通过采样 18 次、去极值后对剩余 16 次累加并右移 4 位,10 位 ADC 可等效输出 14 位精度、12 位 ADC 可等效输出 16 位精度,在不引入昂贵专用计量芯片的前提下提升测量分辨率。同时给出与平台无关的通用滤波函数,以及 ATtiny26 与 STM32F 系列两套完整 C 语言实现,核心算法仅依赖 32 位整数运算,便于快速移植到其他 MCU。综合来看,本文创新点在于将去极值、整数移位滤波与快速收敛策略系统性地整合为一套面向资源受限平台的完整 ADC 信号处理方案,并通过计算开销、响应时间、抗干扰能力、边界条件与实测数据五个维度的量化对比,验证了其在滤波效果与计算开销之间的良好平衡。一、引言在嵌入式系统中,ADC采样结果常受噪声干扰,直接使用原始采样值会导致控制精度下降。本文提出一种结合多次采样去极值与三阶巴特沃斯滤波的方案,在8位/16位单片机上通过整数移位运算实现,兼顾滤波效果与计算开销。二、滤波原理与系数推导本节从模拟巴特沃斯原型出发,经双线性变换推导三阶数字滤波器的递推公式,并说明如何将浮点系数归一化为适合整数移位运算的十六分之一系数形式。2.1 模拟巴特沃斯原型巴特沃斯滤波器以通带内最大平坦为设计目标,其幅频响应满足:|H(jω)|² = 1 / (1 + (ω/ωc)^(2N))其中 N 为滤波器阶数,ωc 为截止角频率。N 越大,通带越平坦、过渡带越陡峭。对于三阶巴特沃斯低通滤波器,其归一化(ωc = 1 rad/s)传递函数为:H(s) = 1 / (s³ + 2s² + 2s + 1)分母多项式 s³ + 2s² + 2s + 1 可分解为 (s + 1)(s² + s + 1),对应一个实极点 s = -1 和一对共轭复极点 s = -0.5 ± j·0.866,所有极点均位于 s 平面左半平面,因此系统是稳定的。2.2 双线性变换为将模拟滤波器映射为数字滤波器,采用双线性变换:s = (2/T) · (1 - z⁻¹) / (1 + z⁻¹)其中 T 为采样周期。该变换将 s 平面的左半平面映射到 z 平面的单位圆内,保证模拟系统的稳定性在数字化后得以保留。将上式代入三阶巴特沃斯传递函数,并令 T = 2(即取 2/T = 1,便于化简),可得:H(z) = (1 + 3z⁻¹ + 3z⁻² + z⁻³) / (16 - 2z⁻¹ - 2z⁻² - 6z⁻³)对分子分母同除以 16,整理为差

相关新闻

AI视频穿屏效果实战:从首尾帧控制到ComfyUI本地合成全解析

AI视频穿屏效果实战:从首尾帧控制到ComfyUI本地合成全解析

最近刷到的“初音劈叉舞跑出屏幕”类视频,关键不在舞蹈动作,而是“屏幕边界如何被打破”:一个原本待在屏幕里的 2D 角色,突然手伸出屏幕、身体跨过屏幕边缘,镜头再向前推进,形成强纵深错觉。这类镜头用 AI …

2026/10/30 18:19:40 阅读更多 →
280B总参数仅激活16B:dots3多模态Agent模型亮点解析

280B总参数仅激活16B:dots3多模态Agent模型亮点解析

最近在逛开源社区的时候,我发现一个值得停下来细看的东西:小红书开源了一个叫 dots3 的多模态模型。标题里的几个数字非常抓眼——280B 总参数、只激活 16B、512K 超长上下文,还强调多模态和 Agent 属性。很多人看到“280B”的第一反应是&…

2026/10/21 4:45:45 阅读更多 →
AI助手能力越强风险越大?解析权限边界与数据安全设计

AI助手能力越强风险越大?解析权限边界与数据安全设计

最近,一款名叫 Instinct 的 AI 助手因为“能力很强”被推到了聚光灯下,但随之而来的不是一片叫好,而是关于隐私和安全的担忧。我观察到一个有意思的现象:大家担心的重点并不完全是“AI 会不会拥有自我意识”,而是更具体…

2026/11/3 17:27:56 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻