1、算法介绍 一阶滤波算法是比较常用的滤波算法: Y(n)=a*X(n)+(1-a)*Y(n-1) 其中,X为输入值,Y为滤波后得输出值,a为0~1之间的滤波系数。一阶滤波相当于是将新的采样值与上次的滤波结果计算一个加权平均值。a的取值决定了算法的灵敏度,a越大,新采集的值占的权重越大,算法越灵敏,但平顺性差;相反,a越小,新采集的值占的权重越小,灵敏度差,但平顺性好。 2、C语言实现方法。 公式: Y(n)=a*X(n)+(1-a)*Y(n-1)整理后得:Y(n)=Y(n-1)+a*(X(n)-Y(n-1))
float low_pass_filter(float value)
{
static float out_last = 0; //上一次滤波值
float out;
/***************** 如果第一次进入,则给 out_last 赋值 ******************/
static char fisrt_flag = 1;
if (fisrt_flag == 1)
{
fisrt_flag = 0;
out_last = value;
}
/*************************** 一阶滤波 *********************************/
3、效果如下图。
Y(n)=a*X(n)+(1-a)*Y(n-1)
原始曲线:
滤波系数0.05
|