常用的滤波算法与经验分享

在一些设备中,我们需要对一些高频信号进行滤波,例如AD值读取。滤波分为软件滤波与硬件滤波,在实际开发中,硬件滤波往往不够,所以,我们需要掌握一些滤波算法。

本文分享:1,常用的软件滤波算法,2,开发中的经验。


软件滤波算法

1,中位值滤波法

原理:连续采样N次(N为奇数),对N次采样值进行大小排序,去中间值为本次采样值。

优点:能有效克服因偶然因素引起的波动干扰;

缺点:对温度、液位的变化缓慢的被测参数有良好的滤波效果。


2,平均值滤波法(去除MAX,MIN)

原理:连续采样N次,N次总和 - MAX - MIN 后,求平均值

            当n较大时,信号的平滑度较高,但灵敏度较低

            当n较小时,信号的平滑度较低,但灵敏度较高

优点:适用于对一般具有随机干扰的信号进行滤波;

缺点:因涉及到除法运算,在一些没有除法指令的MCU下,运算会比较慢。


3,递推平均滤波法

原理:把连续取得的N个采样值看成一个队列,队列的长度固定为N,
   每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),

          把队列中的N个数据进行算术平均运算,获得新的滤波结果。

优点:
平滑度高,

适用于数值会有微弱波动的情况。

缺点:
不易于消除干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合;

涉及到队列,比较浪费RAM,ROM,


4,限幅滤波法(又称程序判断滤波法)
方法:
        根据经验判断,确定两次采样允许的最大偏差值(设为A),
        每次检测到新值时判断:
        如果本次值与上次值之差<=A,则本次值有效,

        如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。

优点:可以有效的克服因偶然因素而引起的脉冲干扰

缺点:不能抑制周期性的干扰而且平滑度较差。


5,限幅平均滤波法
方法:
        相当于“限幅滤波法”+“递推平均滤波法”;
        每次采样到的新数据先进行限幅处理,
        再送入队列进行递推平均滤波处理。
优点:
        融合了两种滤波法的优点;

        对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。


开发经验:

以上就是常用的滤波算法,在实际开发中,如果不需要将数据显示出来,可根据项目情况使用1,2,3,4方法。如若需显示数据,则需要使用5方法去处理。让数据稳定的显示,当然,你也可以用降低数据读取的频率方法,但不推荐。 

以下分享一个实际经验:

这个项目需要将电流显示出来,采样频率5KHz(200ms),每次采样10次,去除最大最小值后,求平均值,读出的数据显示,发现1个单位(100mA)的数据浮动,例如:1.1,1.2的数据不断变化。

在这里有两个解决方案:

1,可以使用降低采样频率来缓解这个问题,但是治标不治本。

2,后面添加了限值滤波,逻辑如下。

/* 限值滤波
	现值(Temp)与上一个参数(Save)比较
   1,相差数值大于1,则更新数值,AddCount = DelCount = 0
   2,相差数值 = +1,	
	2.1 若AddCount < 1;则AddCount++;
	2.2 若AddCount >=1;则AddCount =0;则更新数值
   3, 相差数值 = -1
	3.1 若DelCount< 1;则DelCount++;
	3.2 若DelCount>=1;则DelCount=0;则更新数值	*/

使用方案2,可以有效解决数据浮动的现象。在实际开发中,根据自己的需求更改相差值大小,Addcount以及DelCount来调节,可以得到很好的效果。



  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值