软件算法实现数字滤波
本文主要内容取自VX公众号《嵌入式ARM》4月24日文章,修改了部分代码,括号内为个人阅读所做的注释。
问题:
进行数据采集时,由于随机干扰引起误差。特点是在相同条件下测量同一量,大小和符号出现无规则变化而无法预测,但多次测量的结果符合统计规律。
解决方法:
硬件上使用滤波技术,软件使用软件算法实现数字滤波。
(滤波算法是系统测控算法的重要组成部分,实时性较强)
数字滤波算法优点:
1.无需其他硬件成本,可靠性高,不存在阻抗匹配问题,数字滤波可对频率很低的信号进行滤波(模拟滤波器做不到)
2.多输入通道可共用一个滤波程序,降低系统开支
3.适当改变滤波器程序或运算,就可以改变滤波特性,对滤除低频干扰和随机信号有较大效果
4.常见滤波算法有:限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波法
限幅滤波算法:
原理描述:
该运算过程中将两次采样值相减,求出增量;再将增量的绝对值 与 两次采样允许的最大差值A进行比较;
如果小于等于被允许的最大差值,则本次采样有效,否则取上次采样值作为本次数据样本;
A的值由被测对象具体情况而定(经验或实验数据)。
适用场景:
主要用于处理变化较为缓慢的数据,如温蒂、物体位置等(应该还有变化幅度确定)。
参考代码:
#define A //允许的最大差值
char data; //上一次的数据
char filter(char data , char datenew)
{
if((datanew - data) > A || (data - datanew > A))
return data;
else
return datanew;
}