工程应用中,偶有ADC采样异常或者需要采样值更加平稳之类的需求,在硬件设计已经完成的情况下,常采用一些软件算法来弥补不足,增强系统鲁棒性。本篇主要记录分享强大网友的智慧结晶。
1. 限幅滤波法(又称程序判断滤波法)
设随机变量为X,定义一误差幅值A,滤除|Xn-Xn-1|>A的值。
2. 中位值滤波法
连续采样奇数次,排序取中间值。
3.算数平均滤波法
连续取 N个采样值进行算术平均运算。
4.递推平均滤波法(又称滑动平均滤波法)
把连续取 N 个采样值看成一个队列
队列的长度固定为 N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)
把队列中的 N 个数据进行算术平均运算,就可获得新的滤波结果
5.中位值平均滤波法(又称防脉冲干扰平均滤波法)
相当于“中位值滤波法”+“算术平均滤波法”
连续采样 N 个数据,去掉一个最大值和一个最小值
然后计算 N-2 个数据的算术平均值
6.限幅平均滤波法
相当于“限幅滤波法”+“递推平均滤波法”
每次采样到的新数据先进行限幅处理,
再送入队列进行递推平均滤波处理
7.一阶滞后滤波法
取 a=0~1
本次滤波结果=(1-a) 本次采样值+a上次滤波结果
8.加权递推平均滤波法
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
9.消抖滤波法
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限 N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
10.限幅消抖滤波法
相当于“限幅滤波法”+“消抖滤波法”; 先限幅,后消抖
以上算法截取自https://blog.csdn.net/u011852186/article/details/126484032
11.卡尔曼滤波
下面是一个极简卡尔曼滤波。
算法的核心思想是,根据当前的仪器”测量值” 和上一刻的 “预测量” 和 “误差”,计算得到当前的最优量.
再预测下一刻的量, 里面比较突出的是观点是. 把误差纳入计算, 而且分为预测误差和测量误差两种.通称为 噪声. 还有一个非常大的特点是,误差独立存在, 始终不受测量数据的影响。
R值固定,Q值越大,代表越信任测量值,Q值无穷大,代表只用测量值。
Q值越小,代表越信任模型预测值,Q值为0,代表只用模型预测值。
float KalmanFilter( float inData )
{
}static float prevData = 0; //上一个数据
static float p = 10, q = 0.001, r = 0.001, kGain = 0; // q 控制误差 r 控制响应速度
p = p + q;
kGain = p / ( p + r ); //计算卡尔曼增益
inData = prevData + ( kGain * ( inData – prevData ) ); //计算本次滤波估计值
p = ( 1 – kGain ) * p; //更新测量方差
prevData = inData;
return inData;
}
原文链接:https://blog.csdn.net/qq_36296398/article/details/110760647
除了上述滤波算法外,其他一些滤波技术如自适应滤波、维纳滤波、小波滤波、卷积滤波、混沌滤波、机器学习滤波等等已过滤掉我等杂波信号,不再链接,网友自行探索。
地点:深圳市龙华新区大浪南路德利威工业园
电话:+86-755-29048607/85250091/32939610/32939620
传真:+86-755-29048607
邮箱:sales@opticres.com