滤波算法:
去掉最大值,去掉最小值,剩下的值求平均值。
下面第一个是,冒泡排序后,去掉了最小值与最大值。
uint32_t filter(uint32_t value_buf[Set_filter])
{
uint8_t i=0,j=0;
uint32_t temp =0,value=0;
uint32_t sum=0;
for(j=0;j<Set_filter-1;j++)
{
for(i=0;i<Set_filter-j;i++)
{
if(value_buf[i]>value_buf[i+1])
{
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
for(i=1;i<Set_filter-1;i++)
{
sum += value_buf[i];
}
value = sum/(Set_filter-2);
return(value);
}
/*
去掉最大值,去掉最小值,求平均值。测量一次30ms. 测试上6次。
*/
uint16_t distance_filter(uint16_t* data,uint8_t data_cnt)
{
uint8_t i = 0;
uint16_t max_data = data[0];
uint16_t min_data =data[0];
uint16_t Sum = 0;
//去掉最大值
for(i=0;i<data_cnt;i++)
{
if(data[i]>=max_data)
{
max_data = data[i];
}
}
//去掉最小值
for(i=0;i<data_cnt;i++)
{
if(data[i]<=min_data)
{
min_data = data[i];
}
}
//求平均值
for(i=0;i<data_cnt;i++)
{
Sum += data[i];
}
return (Sum-max_data-min_data)/(data_cnt-2);
}