滑动均值滤波,指输出的结果与先前历史记录有关,假如变量发生突变,需要几个采样周期,输出结果才逐渐接近真实值,实际一般情况下,可以一定程度的减少数据的抖动,使数据曲线变得光滑。
如需使用,先添加Slider_average_fliter结构体相关的内容,以便调用,如果想要过滤更多次的数据,也可以在这里增大数组的容量。
typedef struct{
u8 temp;
u8 data_capacity;
float original_value[10];
float fliter_value;
}Slider_average_fliter;
函数实现如下,除第一次外,其他时候滑动均值滤波的次数无法改变。
float Slider_Average_fliter(Slider_average_fliter* a,u8 b,float data)
{
static float temp;
static u8 i,c;
if(i==0)
{
a->data_capacity=b;
i++;
}
a->original_value[a->temp++]=data;
if(a->data_capacity==a->temp)
{a->temp=0;}
for(c=0;c<a->data_capacity;c++)
{
temp+=a->original_value[c];
}
a->fliter_value=temp/(a->data_capacity);
temp=0;
return a->fliter_value;
}
实际应用如下,现实中,data为传感器测量得到的数据,value为返回的经过滤波后的数据,value也等于abc.fliter_value。
Slider_average_fliter abc;
int main(void)
{
while(1)
{
value=Slider_Average_fliter(&abc,5,data);
}
}