打印
[资料干货]

嵌入式系统软件设计中常用的数字滤波算法

[复制链接]
531|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-4-2 15:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dffzh 于 2025-4-2 16:20 编辑

#技术资源# #申请原创#
@21小跑堂

很多嵌入式系统中都需要处理模拟数据,即通过AD转换将模拟信号变成数字信号,然后执行下一步的数据处理。由于模拟信号在受到干扰作用时容易产生偏离真实值的情况,即如果仅采样一次数据是无法满足精度要求的,因此就需要通过滤波的方式过滤掉尽可能多的噪声信号,而通过软件实现的数字滤波算法不仅节约硬件成本,其灵活性和效果往往也是硬件滤波无法达到的。数字滤波算法种类很多,应用场景各有不同,本文就针对一些单数字滤波算法(只有一种滤波手段的算法)进行介绍。

一、 基本概念介绍
所谓的滤波算法,其实就是通过软件代码逻辑实现过滤噪声干扰并留下有用信号的方法,而干扰信号的种类也有很多,如下图所示:
滤波其实包括软件滤波和硬件滤波,两种采取的手段不一样,如下图所示:
算法其实就是解决问题的具体步骤和方法,涉及多个特征,如下图所示:
干扰的产生和消除说明如下图所示:

二、 数字滤波算法介绍
以下将从原理、取值、优点、缺点、应用和源代码等方面介绍常用的单数字滤波算法,如下图所示:

1、算术平均滤波算法
原理:
对信号进行连续N次采样后,将多次采样之和的平均值作为有效值;
取值:采样次数
N较小时,平滑度低,灵敏度高;N较大时,平滑度高,灵敏度低;
一般经验取N=10;
优点:
能够抑制随机干扰(噪声型)信号,且采样次数越多,抑制效果更好;
缺点:
无法抑制毛刺型突发干扰,偶发采样值偏差大会造成结果偏差大,
速度慢,比较滞后,不适合实时处理场景;
要暂存数据,会占用一定RAM空间;
应用:
基波频率比较低(慢变信号)的场合;
滤波效果展示:
从以上滤波结果可以看出,滤波后数据整体更加平稳;
参考代码:
注意:
(1)、根据需要评估采样次数的值;
(2)、注意平均值类型,考虑返回整型数据带来的误差是否会影响结果;
(3)、涉及到求和过程,要注意和变量的数据类型不要溢出。

2、限幅滤波(程序判断滤波、嵌位滤波)算法
原理:
如果本次值与上次值的绝对值之差<=DELTA,则本次有效,否则,本次无效,用上次值代替;
取值:DELTA
根据应用场景和经验进行自调;
优点:
克服因偶然因素引起的脉冲干扰,比如电源开关关闭时的噪声;
缺点:
无法抑制周期性干扰;平滑度差;
应用:
对结果精度要求不高的场合;
可用于剔除明显的异常值,再用其他滤波算法;
滤波效果展示:
参考代码:
注意:
要对采样目标的可允许的最大偏差有一个准确判断,否则会导致丢失正常数据。

3、中值滤波算法
原理:
连续采样N次,并将所有数据按升序排序后,取中间值作为本次有效值;是一种低通滤波;
取值:采样次数
取奇数,具体值视情况而定;
优点:
能有效滤除毛刺型突发干扰(高频干扰),适用于对温度、液位等变化缓慢的场景;
缺点:
反应速度慢、滞后,不适用于对流量、速度等快速变化的场景;
应用:
解决因偶然因素引起的波动;解决采样器不稳而引起的脉冲干扰;
滤波效果展示:
参考代码:
注意:
(1)、采样次数N要取奇数;
(2)、算法入参p_Buf就是采样数据,算法的返回值就是本次有效值;返回值里的数组下标一定要加上括号,别随意写成 N-1/2。

4、一阶滞后滤波算法
原理:
即一阶惯性(一阶低通)滤波,使用软件程序实现硬件RC低通滤波器的功能;
取值:滤波系数
本次滤波结果 = a*本次采集结果 +(1-a)*上次滤波结果,
其中a称为滤波系数,一般范围在(0,1);
优点:
输出对输入有反馈作用;能抑制周期干扰,适用于波动频率较高的场景;
缺点:
滞后性,不适用于对实时性要求高的场合;
无法滤除高于二分之一采样频率的干扰信号;
应用:
目标参数变化很慢的场合(比如:大型贮水池的水位信号);
参考代码:
注意:
由于滤波系数为浮点型,算法计算过程涉及浮点运算,所以需根据实际应用场景设置相关变量的类型及函数返回值类型,否则可能会导致误差***无法消除。

5、消抖滤波算法
原理:
设置一个滤波计数器,将每次采样值和当前有效值比较,如果采样值=有效值,则计数器清零;否则,计数器加1,当计数器>=上限阈值,则将本次采样值作为新的有效值,计数器清零;
取值:计数器阈值
考虑实时性和速度等,视具体情况而定;
优点:
对变化缓慢的被测参数有较好的滤波效果;可避免在临界值附近,控制器反复开/关跳动或
显示器上数值抖动;
缺点:
不适用于快速变化的场景;如果在计时器溢出那一次采样值恰好是干扰值,则会将干扰值当成有效值导入系统;
应用:
目标参数变化很慢的场合(比如:大型贮水池的水位信号);
参考代码:
注意:
(1)、以上代码将读取AD数据接口直接放在函数接口里,可根据情况将其移出,设置函数为通用接口;
(2)、函数返回值即为本次有效值uin_FilterData。


以上介绍的数字滤波算法都是在嵌入式系统软件设计中被广泛应用的简单滤波算法,在一定程度上都能起到过滤噪声干扰信号的作用;对于干扰特别频繁及严重的环境,可以进一步尝试使用复合滤波算法(多种滤波手段结合)。




4271867eceb1ab62f4.png (86.88 KB )

4271867eceb1ab62f4.png

使用特权

评论回复

相关帖子

沙发
dffzh|  楼主 | 2025-4-2 15:56 | 只看该作者
@21小跑堂
申请原创,请审核。

使用特权

评论回复
板凳
玄德| | 2025-4-3 12:09 | 只看该作者

自己总结的吗?真不错

使用特权

评论回复
地板
dffzh|  楼主 | 2025-4-3 13:16 | 只看该作者
玄德 发表于 2025-4-3 12:09
自己总结的吗?真不错

是的,工作上也做过滤波算法的培训

使用特权

评论回复
5
大大财迷| | 2025-4-3 14:35 | 只看该作者
可以可以,点赞

使用特权

评论回复
6
dffzh|  楼主 | 2025-4-3 16:35 | 只看该作者

希望有所帮助

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

43

帖子

2

粉丝