STM32F4关于AD采样时数据不稳定时“消抖”处理的几种方法

  STM32在利用AD采集时,如果是采集的传感器数据或其他传入的数据的灵敏度相当高,或者因为其他原因导致数据不稳定,AD采样采集进去后,数据抖动明显,影响后期的数据利用,就需要对波动数据进行简单的处理,以下是慕尘提供的可供尝试的思路。

  一、平均值滤波

  最为简单且容易想到的就是平均值滤波,多次采样数据,然后取平均值,比如采样一组16包数据,对16包数据取平均,默认此时结果有效;但是均值滤波会将毛刺和错误的值也计算其中,同时,如果数据的波动不均匀,也会导致结果不稳定;再此基础上,我们可以进一步考虑二次均值滤波,对多组采样数据取平均,然后再对取得的平均值再次进行平均,最后得到结果。

  二、四舍五入

  如果是对采样数据的精度要求不是很严格或者采样的数据在某种程度上面满足需要,就可以采取这种方法,以丢失部分精度来换取数据的稳定,便于后期处理。至于“四舍五入”,倒不一定非得是真的要按照四舍五入,比如,如果一组数据是3.23 4.45 5.78  6.88 7.01 8.34,按照需要可以进行整数位的四舍五入,或者小数十分位的四舍五入(可先将十分位数据倍乘十,再进行取整),以此类推;但是ha也可以按照一定的范围来设置四舍五入,比如上面这组数据,不一定非得取整四舍五入,可以选取一定范围,认为在这个范围里面的数就为有效,我们可以认为整数附近加减0.3的数据均为有效,这样就可以筛选数据,可能这个方法适用于波动跳跃稍微大一些的情况。

  三、中值滤波

  多次采样数据得到一组样本,然后对采样数据进行排列,取这组数据的中位值,即可;但是中值滤波会比较受到极值的干扰,两端的波动会干扰最终数据的稳定,我们可以在中值滤波的基础上再进一步处理,前面已经得到了一组采样数据,我们可以取多组采样数据,然后同时对多组采样数据排列后取中位值,如果最终的数据结果被要求在某一范围内,那么我们可以设定这多组数据的中位值如果当中存在n次处于有效范围内,就认为此次中值有效,否则重新进行采样取值;如果最终结果没有期望范围,就可以直接再对这些中值排列取中位值,进行二次中值滤波,但是这样会对采样速率有一定要求。

  四、方差

  进行多组数据采样,然后对每一组的数据进行方差处理,最后得到最小方差的一组数据,可以认为这组数据的波动最小,然后再取这组最小方差的数据取平均,得到结果;

  小结:上述方法只是可供参考的简单的,在实际面对AD采样时数据抖动时的处理,当然还会存在更多更有效的滤波处理方法。可以想见的是上述方法都存在一定的缺陷,需要针对实际的情况来采取恰当的方法,比如上述的二次均值滤波,二次中值滤波,其实认真一看不过是加大采样率扩大数据样本的结果而已。

原创声明:慕尘执笔,转载请注明出处。

猜你喜欢

转载自www.cnblogs.com/takumi-wake/p/9967844.html