c 语言实现滤波器

滤波算法:
去掉最大值,去掉最小值,剩下的值求平均值。
下面第一个是,冒泡排序后,去掉了最小值与最大值。

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);
}

猜你喜欢

转载自blog.csdn.net/happygrilclh/article/details/105804284