news 2026/8/21 21:38:45

资料: 软件滤波算法、数字滤波常用的算法, AD采集,数据采集等经常会遇到由于干扰、电路误差、...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
资料: 软件滤波算法、数字滤波常用的算法, AD采集,数据采集等经常会遇到由于干扰、电路误差、...

资料: 软件滤波算法、数字滤波常用的算法, AD采集,数据采集等经常会遇到由于干扰、电路误差、精度、抖动等带来的误差,这些误差往往影响我们单位计算或控制,在平常的设计中,我们会加各种软件滤波来让数据变得平滑,只要涉及到数据采集就离不开数字滤波。 keil,stm32工程,有写好的历程,使用简单方便, 滤波算法包括:限幅滤波,中位值滤波,算数平均滤波,递推平均滤波,中位值平均滤波,限幅平均滤波,一阶滞后滤波,加权递推滤波,消抖滤波,限幅消抖滤波。

在嵌入式开发里,ADC采集的数据就像青春期少年的心情——说变就变。上周调试温控系统时,ADC返回的温度值在25°C到30°C之间反复横跳,实际温度计却稳稳停在27°C。这时候就该祭出软件滤波大法了。

先看最直接的限幅滤波,适合处理突发性跳变。假设相邻两次采样间隔200ms,温度不可能突变5°C:

#define MAX_DIFF 2 //允许最大变化值 int limit_filter(int new_val, int old_val) { if(abs(new_val - old_val) > MAX_DIFF) return old_val; return new_val; }

这个暴力美学算法有个致命弱点:连续跳变时数据会卡死。于是中位值滤波登场,适合消除脉冲干扰。在STM32里可以这么玩:

int mid_filter(int *arr, uint8_t size) { // 冒泡排序虽然效率低,但代码简单 for(int i=0; i<size-1; i++) for(int j=0; j<size-1-i; j++) if(arr[j] > arr[j+1]) swap(&arr[j], &arr[j+1]); return size%2 ? arr[size/2] : (arr[size/2-1]+arr[size/2])/2; }

实际项目中发现,用3次采样取中值就能干掉80%的尖峰脉冲。不过频繁排序影响实时性,这时候递推平均滤波更合适:

#define FILTER_WIN 10 //滑动窗口大小 int filter_buf[FILTER_WIN]; uint8_t filter_index = 0; int moving_avg(int new_val) { filter_buf[filter_index++] = new_val; if(filter_index == FILTER_WIN) filter_index = 0; int sum = 0; for(int i=0; i<FILTER_WIN; i++) sum += filter_buf[i]; return sum / FILTER_WIN; }

这个算法的内存占用是硬伤,在内存吃紧的MCU上可以用移位平均代替:avg = avg - avg/FILTERWIN + newval/FILTER_WIN;,用一次乘法和两次加法搞定。

遇到既要消除脉冲又要平滑波动的场景,限幅平均滤波组合拳就派上用场了:

int combo_filter(int new_val) { static int last_val = 0; // 先限幅 if(abs(new_val - last_val) > MAX_DIFF) new_val = last_val; // 再递推平均 last_val = (last_val * 3 + new_val) / 4; //加权系数可调 return last_val; }

调试四轴飞行器时,陀螺仪数据既需要快速响应又不能抖动。这时候一阶滞后滤波表现出色:

float a = 0.3; //滤波系数 float first_order_filter(float new_val) { static float filtered = 0; filtered = a * new_val + (1 - a) * filtered; return filtered; }

把浮点运算改成Q格式定点数能提升速度:filtered = (anew_val + (0xFFFF - a)filtered) >> 16;

选择滤波算法就像选女朋友——没有最好,只有最合适。要快速响应的选限幅,求稳的用递推平均,内存紧张试试移位平均,对抗脉冲干扰必须中位值。下次遇到ADC抽风时,不妨把这些算法轮番伺候,总有一款能治住那不安分的数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 17:39:01

医院系统数据迁移紧急方案,PHP导出HL7与FHIR格式全解析

第一章&#xff1a;医院系统数据迁移的背景与挑战 随着医疗信息化的不断推进&#xff0c;传统医院信息系统&#xff08;HIS&#xff09;逐渐暴露出扩展性差、维护成本高、数据孤岛严重等问题。越来越多医疗机构启动系统升级或替换项目&#xff0c;将原有系统迁移至现代化平台&a…

作者头像 李华
网站建设 2026/8/21 7:39:06

揭秘金融风险中的隐秘关联:如何用R语言精准估计Copula模型参数

第一章&#xff1a;金融风险中的隐秘关联&#xff1a;Copula模型的必要性在现代金融风险管理中&#xff0c;资产收益之间的相关性是决定投资组合风险水平的关键因素。传统的线性相关系数&#xff08;如皮尔逊相关系数&#xff09;虽然广泛使用&#xff0c;但其假设变量服从联合…

作者头像 李华
网站建设 2026/8/21 13:54:35

五年前第一次摸FPDM实现的OFDM系统时,手抖得差点把开发板摔了。今天咱们用Verilog从头撸一套能跑的OFDM系统,重点聊聊那些手册里不会写的实战细节

基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench。 quartus、vivado、modelsim仿真核心模块得数IFFT/FFT这对欢喜冤家。这里直接调用Xilinx的FFT IP核不香吗&#xff1f;但为了展示底层实现&#xff0c;咱们用Cooley-Tukey算法写个精简版&…

作者头像 李华
网站建设 2026/8/21 12:07:04

游戏定制开发公司有哪些?国内外服务商指南

聚焦游戏定制开发市场&#xff0c;活跃着全球不同规模的服务商身影&#xff0c;既能看到主攻大型网游定制的头部企业&#xff0c;也能发现专精休闲小游戏、H5/AR/VR 等细分赛道的中小团队&#xff0c;下文按国内外分类整理代表性游戏定制开发公司&#xff0c;方便按需挑选。一、…

作者头像 李华