当前位置: 首页 > article >正文

单片机AD采样十大滤波算法详解与应用

1. 单片机AD采样滤波算法概述在嵌入式系统开发中ADC采样是获取模拟信号的关键环节。然而实际应用中采样值常会受到各种干扰影响导致数据波动甚至错误。作为一名有着十年嵌入式开发经验的工程师我总结了十种最实用的AD采样滤波算法这些方法在实际项目中都经过验证能有效解决不同场景下的噪声问题。AD采样滤波的核心目标是在保证实时性的前提下尽可能消除随机干扰和系统误差。选择滤波算法时需要综合考虑信号特性、系统资源和实时性要求。比如对于温度等慢变信号可以采用较强的滤波而对于电机转速等快变信号则需要选择响应更快的算法。2. 十大滤波算法详解2.1 限幅滤波法限幅滤波是最简单直接的滤波方法适用于消除突发性脉冲干扰。其原理是设定一个最大允许偏差值A当本次采样值与上次有效值的差值超过A时就认为本次采样受到干扰而丢弃。注意A值的选取很关键过小会导致有效信号被滤除过大则无法有效抑制干扰。通常取正常信号波动范围的2-3倍。#define A 10 char Value; char filter() { char new_Value; new_Value get_ad(); if(abs(new_Value - Value) A) return Value; return new_Value; }实际项目中我常用这种方法处理按键检测等场景能有效消除触点抖动带来的误触发。但要注意它无法抑制周期性干扰且会使信号平滑度变差。2.2 中位值滤波法中位值滤波通过连续采样N次N取奇数然后取中间值作为有效值。这种方法对波动干扰有很好的抑制效果特别适合温度等变化缓慢的参数测量。#define N 11 char filter() { char value_buf[N]; char count,i,j,temp; for(count0; countN; count) { value_buf[count] get_ad(); delay(); } for(j0; jN-1; j) for(i0; iN-j; i) if(value_buf[i]value_buf[i1]) { temp value_buf[i]; value_buf[i] value_buf[i1]; value_buf[i1] temp; } return value_buf[(N-1)/2]; }在工业温度监测项目中我使用N11的中位值滤波有效消除了50Hz工频干扰。但要注意对于快速变化的信号如电机转速这种方法会导致严重滞后。2.3 算术平均滤波法算术平均滤波是最直观的滤波方式通过多次采样取平均值来抑制随机干扰。N值越大平滑效果越好但响应速度越慢。#define N 12 char filter() { int sum 0; for(count0; countN; count) sum get_ad(); return (char)(sum/N); }根据我的经验不同应用场景的N值选择流量测量N12压力测量N4电池电压N8这种方法的缺点是占用RAM多且对周期性干扰抑制效果差。在低功耗设备中要慎用频繁的AD转换会显著增加功耗。2.4 递推平均滤波法递推平均滤波又称滑动平均滤波维护一个长度为N的队列每次新采样值进入队尾最老的数据出队然后计算队列中数据的平均值。#define N 12 char value_buf[N]; char i0; char filter() { char new_value, sum0; new_value get_ad(); value_buf[i] new_value; if(i N) i 0; for(count0; countN; count) sum value_buf[count]; return (char)(sum/N); }我在电机电流检测中使用这种方法N取8既能有效抑制高频噪声又保证了实时性。相比算术平均滤波它的RAM占用固定适合长期运行的系统。2.5 中位值平均滤波法这是中位值滤波和算术平均滤波的结合体先采样N次去掉最大值和最小值后对剩余的N-2个数据取平均。这种方法兼具抗脉冲干扰和平滑效果。#define N 10 char filter() { char count,i,j; char Value_buf[N]; int sum0; for(count0; countN; count) Value_buf[count] get_ad(); for(j0; jN-1; j) for(i0; iN-j; i) if(Value_buf[i]Value_buf[i1]) { temp Value_buf[i]; Value_buf[i] Value_buf[i1]; Value_buf[i1]temp; } for(count1; countN-1; count) sum Value_buf[count]; return (char)(sum/(N-2)); }在振动传感器信号处理中我使用N10的中位值平均滤波有效消除了偶然的冲击干扰。但计算量较大在8位单片机上要注意处理时间。2.6 限幅平均滤波法限幅平均滤波先对采样值进行限幅处理再送入递推平均滤波队列。这种方法综合了限幅和平均的优点特别适合存在偶然大干扰的场景。#define A 10 #define N 12 char value; char value_buf[N]; char i0; char filter() { char new_value, sum0; new_value get_ad(); if(abs(new_value-value) A) value_buf[i] new_value; if(i N) i 0; for(count0; countN; count) sum value_buf[count]; return (char)(sum/N); }在工业现场总线通信中我使用这种方法处理模拟量输入A取正常信号波动范围的3倍N取8既保证了数据稳定性又能快速响应真实变化。2.7 一阶滞后滤波法一阶滞后滤波是一种低通滤波算法通过调节系数a(0~1)来控制新采样值的权重。a越小滤波结果对变化越敏感a越大平滑效果越好但滞后越严重。#define a 50 // 0~100 char value; char filter() { char new_value; new_value get_ad(); return ((100-a)*value a*new_value)/100; }在温度控制系统里我使用a30的一阶滞后滤波既保持了温度曲线的平滑又不会造成太大滞后。这种方法计算量小非常适合资源有限的单片机。2.8 加权递推平均滤波法加权递推平均滤波是对递推平均滤波的改进给不同时刻的数据赋予不同权重通常越新的数据权重越大。这种方法可以在平滑度和灵敏度之间取得更好的平衡。#define N 12 char code coe[N] {1,2,3,4,5,6,7,8,9,10,11,12}; char code sum_coe 123456789101112; char filter() { char count; char value_buf[N]; int sum0; for(count0; countN; count) value_buf[count] get_ad(); for(count0; countN; count) sum value_buf[count]*coe[count]; return (char)(sum/sum_coe); }在无人机高度传感器数据处理中我使用线性加权的递推平均滤波较新的数据权重更大使系统既能滤除高频噪声又能快速响应高度变化。2.9 消抖滤波法消抖滤波通过设置计数器来确认信号变化的有效性只有当采样值连续多次不同于当前值时才认为发生了真实变化。这种方法特别适合处理开关量或临界值附近的抖动。#define N 5 char value; char filter() { char count0, new_value; new_value get_ad(); while(value ! new_value) { count; if(count N) return new_value; new_value get_ad(); } return value; }在机械按键检测中我设置N5的消抖滤波只有当按键状态连续5次采样一致时才确认变化完全消除了触点抖动问题。但要注意对于快速变化的信号这种方法会导致严重滞后。2.10 限幅消抖滤波法限幅消抖滤波结合了限幅和消抖两种方法的优点先进行限幅判断再对可能有效的采样值进行消抖确认。#define A 10 #define N 5 char value; char filter() { char new_value, count0; new_value get_ad(); while(value ! new_value) { if(abs(value-new_value) A) { count; if(count N) return new_value; } new_value get_ad(); } return value; }在工业控制面板的旋钮编码器处理中我使用这种方法A取编码器步进值的1.5倍N取3既保证了响应速度又有效抑制了干扰产生的误动作。3. 滤波算法选择指南3.1 根据信号特性选择慢变信号温度、压力中位值滤波、递推平均滤波、一阶滞后滤波快变信号转速、电流限幅滤波、算术平均滤波N较小含脉冲干扰的信号限幅滤波、中位值平均滤波3.2 根据系统资源选择RAM有限的系统限幅滤波、一阶滞后滤波计算能力弱的系统限幅滤波、算术平均滤波N较小低功耗系统减少采样次数和计算量的算法3.3 实际应用经验在多个工业项目中我总结出以下经验对于4-20mA电流信号递推平均滤波N8效果很好热电偶测温推荐使用中位值平均滤波N10电池电压检测适合一阶滞后滤波a30振动信号处理需要限幅消抖滤波组合每种滤波算法都有其适用场景实际项目中常常需要组合使用多种方法。比如先限幅去除脉冲干扰再进行递推平均滤波最后加一阶滞后平滑。关键是要理解每种算法的特性根据具体需求灵活运用。

相关文章:

单片机AD采样十大滤波算法详解与应用

1. 单片机AD采样滤波算法概述在嵌入式系统开发中,ADC采样是获取模拟信号的关键环节。然而实际应用中,采样值常会受到各种干扰影响,导致数据波动甚至错误。作为一名有着十年嵌入式开发经验的工程师,我总结了十种最实用的AD采样滤波…...

工业4.0下LED可见光通信(VLC)在智能车间的应用实践

1. 项目背景与需求分析在工业4.0时代背景下,现代工厂车间的设备智能化改造面临着一个关键挑战:如何在复杂电磁环境中实现稳定可靠的数据传输。传统无线通信方案(如Wi-Fi、ZigBee等)在金属结构密集、电机设备众多的车间环境中&…...

罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践

罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在PUBG等战术射击游戏中&#x…...

AI 赋能自动化测试实战:从用例生成到 CI/CD 全流程落地

文章目录一、前言二、AI 赋能自动化测试的 5 大核心能力1. 智能测试用例生成2. 智能元素定位与脚本自愈3. 智能执行与异常自适应4. 智能缺陷检测与根因定位5. 测试用例库智能维护三、落地路径:0 到 1 搭建 AI 自动化测试体系阶段 1:工具选型与环境搭建&a…...

空洞骑士模组管理新体验:Scarab让模组安装变得简单高效

空洞骑士模组管理新体验:Scarab让模组安装变得简单高效 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经因为空洞骑士模组安装的复杂性而感到困扰&#x…...

触发器导致的DG库日志同步中断

触发器导致的DG库日志同步中断 第一次排查 问题复现 问题解决 第一次排查 主库服务器宕机重启后,到备库的日志传输中断,备库一直在等某个日志,主库上有这个日志文件,但是不会自动传输到备库上。 主库日志一直在刷ORA-16191和ORA-1017的报错: FAL[server, ARC0]: Error …...

Go Context 控制流与生命周期管理

Go Context 控制流与生命周期管理 在现代分布式系统中,控制流与生命周期管理是开发者必须面对的核心挑战之一。Go语言通过context包提供了一种优雅的解决方案,帮助开发者管理请求的取消、超时和跨协程的数据传递。无论是微服务调用、数据库查询还是HTTP…...

Agent 记忆全景综述:20+顶尖机构联合出品,Agent memory看这一篇就够了

用 GPT 或 Claude 做过长对话的人大概都踩过这个坑:聊了半个小时,AI 把你前面说过的事情忘干净了。你不得不把背景重新解释一遍。 这还是人机对话,忍一忍也就算了。 但如果是 agent 在自主执行任务呢?记不住"这个 API 上次…...

健身私教AI:OpenClaw+Qwen3.5-9B定制个人训练计划与饮食建议

健身私教AI:OpenClawQwen3.5-9B定制个人训练计划与饮食建议 1. 为什么需要AI健身私教? 去年冬天体检报告上的"轻度脂肪肝"三个字,成了我决定认真健身的最后一根稻草。作为程序员,我试过各种健身APP,但总感…...

别再只用Speedtest了!自建LibreSpeed测速站,监控家庭宽带/公司内网真实表现

自建网络测速站:用LibreSpeed打造精准带宽监控系统 每次看到运营商宣传的"千兆宽带",你是否怀疑过实际使用中根本达不到承诺速度?公共测速网站的结果总让人将信将疑——它们可能被ISP特殊优化,或是受限于服务器位置。更…...

Vue微商城实战:从零搭建高效开发环境与核心配置

1. 环境准备:搭建Vue开发基础 第一次用Vue做微商城项目时,我对着官方文档折腾了半天环境配置,结果运行时报错一片红。后来才发现是node版本和脚手架不兼容的问题。这里分享下我总结的零失败配置方案,帮你避开90%的初期坑点。 首先…...

2026年4月,天府新区,成都装修公司哪家好,北京我爱我家装饰(成都旗舰店)

引言在快速发展的天府新区,装修选择成为了许多家庭和业主的首要问题。无论是新房装修、老房翻新还是局部改造,如何选择一家既专业又可靠的装修公司,确保从设计到施工的每个环节都令人满意,是大家最为关心的问题。本文将通过实际案…...

GT511C3指纹模块嵌入式驱动开发与工程实践

1. GT511C3指纹识别模块底层驱动技术解析GT511C3是由Digital Persona公司推出的高性能光学指纹识别模块,广泛应用于门禁系统、考勤终端、金融支付设备及嵌入式身份认证场景。该模块基于ARM7TDMI内核主控,集成专用图像处理引擎与模板匹配协处理器&#xf…...

2026最权威的十大AI辅助写作平台横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于深度学习模型的论文一键生成技术,可快速整合文献资料,能提取核心…...

Linux进程(下)

上一篇文章介绍了进程的概念和进程的状态,但进程的知识还有很多,本文继续进行讲解。进程的管理指令之前提到过许多对进程进行管理的指令,但没有进行讲解,在这里统一聊聊。核心指令有四个 ps,top,kill&#…...

2025届毕业生推荐的十大降AI率神器实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术写作情形里,论文AI网站主要是提供文献检索、提纲生成、段落润色以及…...

Agent间数据流与控制流分离:构建可复用的协作架构

Agent间数据流与控制流分离:构建可复用的协作架构 一、 摘要/引言 1.1 开门见山:从一场“失控的Multi-Agent协作”讲起 上周六,我帮同事复盘他们团队的电商智能客服Agent集群上线事故——那天下午6点到8点,正好是618预热的第三波“整点蹲优惠券码”活动,负责规则推理优惠…...

OpenClaw内存优化:Qwen2.5-VL-7B在4GB显卡上的运行秘诀

OpenClaw内存优化:Qwen2.5-VL-7B在4GB显卡上的运行秘诀 1. 当多模态大模型遇上小显存显卡 上周三凌晨2点,我的MacBook Pro风扇突然狂转——屏幕上是OpenClaw控制台不断弹出的显存不足警告。当时我正在尝试用Qwen2.5-VL-7B处理一批产品截图,…...

电机速度计算

1. M法计算速度值详解:原理、公式与应用 概述 M法,也称为频率测量法,是一种通过在固定时间内统计脉冲数量来计算速度的常用方法。这种方法特别适用于中高速运动的测量场景,在电机控制、编码器测速等领域有着广泛的应用。 &#x1…...

计算机毕业设计 | SpringBoot+vue文理医院预约挂号系(附源码+论文)

1,绪论 1.1 研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握相关的专业知识,根据教程指导即…...

计算机毕业设计 | 基于node(Koa)+vue 高校宿舍管理系统 宿舍可视化全能宿管(附源码)

1,绪论 1.1 项目背景 随着科技的发展,智能化管理越来越重要。大学生在宿舍的时间超过了1/3,因此良好的宿舍管理对学生的生活和学习极为关键。学生宿舍管理系统能够合理安排新生分配宿舍,不浪费公共资源,减轻学校管理…...

通达信主窗口显示股票所属板块及概念语句的3种实用方法(附完整代码)

通达信主窗口高效显示股票板块与概念的3种实战方案 在股票交易软件中,快速识别个股所属的行业板块和热门概念是每位投资者的基本功。通达信作为国内主流证券分析平台,其自定义显示功能可以让关键信息一目了然。本文将分享三种不同复杂度的实现方式&#…...

QUAD7SHIFT:轻量级七段数码管驱动库设计与嵌入式优化

1. 项目概述QUAD7SHIFT 是一款专为驱动 4 位共阴/共阳七段数码管模块设计的轻量级嵌入式显示库,核心目标是通过级联的 74HC595 移位寄存器实现高效、低资源占用的动态扫描显示。该库并非简单封装 SPI 接口,而是围绕“硬件抽象—时序控制—数据映射—功耗…...

Windows内核级游戏控制器模拟驱动实战指南

Windows内核级游戏控制器模拟驱动实战指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在Windows平台上实现游戏控制器完美模拟一直是技术爱好者和游戏玩…...

OpenClaw技能市场探索:Phi-3-mini-128k-instruct支持的10个实用自动化模块

OpenClaw技能市场探索:Phi-3-mini-128k-instruct支持的10个实用自动化模块 1. 为什么需要技能市场? 第一次接触OpenClaw时,我被它的基础能力惊艳到了——能自动操作我的电脑完成各种任务。但很快发现一个问题:每次都要从头编写指…...

python cython

## 当Python需要速度:聊聊Cython的里里外外 做Python开发时间长了,总会遇到一些让人头疼的场景。代码逻辑明明很清晰,运行起来却慢得让人想砸键盘。特别是那些涉及大量数值计算、循环嵌套的部分,用纯Python写起来优雅,…...

嵌入式串口通信效率优化实战

1. 串口通信效率优化背景在嵌入式系统开发中,串口通信是最基础也最常用的外设接口之一。我从事嵌入式开发十多年来,处理过各种串口通信场景,从简单的调试信息输出到复杂的工业控制协议传输。传统串口通信方式在简单场景下工作良好&#xff0c…...

嵌入式系统LCD汉字显示原理与优化实践

1. 嵌入式屏幕显示汉字的基本原理在嵌入式系统中,LCD屏幕显示汉字的核心原理可以概括为"点阵映射"。这与我们小时候玩过的LED点阵显示原理完全相同。想象一下,当你用许多小灯泡排列成一个方阵,通过控制每个灯泡的亮灭来组成图案或文…...

AnalogTouch:面向车载系统的电阻屏触摸驱动库

1. AnalogTouch 库概述AnalogTouch 是面向 CARIAD 平台设计的模拟电阻式触摸屏(Resistive Touch Panel, RTP)驱动库,专为嵌入式车载显示系统优化。其核心目标并非通用触摸抽象层,而是深度适配 CARIAD 架构下 TFT/LCD 显示子系统的…...

PicoClaw:10美元硬件上的AI革命,让Mac mini瞬间不香了!

PicoClaw:10美元硬件上的AI革命,让Mac mini瞬间不香了!一只皮皮虾搅动了整个AI助手江湖,95%代码由AI自主生成,在不到10MB内存中跑出完整智能体能力。最近,GitHub上有个项目像火箭般蹿升——PicoClaw&#x…...