通过去除缓冲区最大值、最小值进行滤波的方法

通过需要去除缓冲区中最大数值和最小数值的方法进行数据滤波的方法:

编写一个API函数,这个函数可以将接收到的数据存储到缓冲区中,每次缓冲区中接收到的数据要去除一个最大值一个最小值,然后求取平均值,达到简单数据滤波的效果。程序代码如下:

#define TDS_Num 60
uint32_t TDS_Queue[TDS_Num] = {0};
uint32_t TDS_filter(uint32_t tep)
{
  uint32_t temp = 0;
  uint32_t _sum = 0;
  uint32_t max = 0,min = 0xffff;
  uint8_t  count = 0;
  static uint8_t  TDS_index = 0;  // 数组下标
  TDS_Queue[TDS_index] = (uint32_t)tep; //将数组存储到数据缓冲区中

  for (count = 0;count <= TDS_Num-1; count++) 
  {
	_sum =_sum+ TDS_Queue[count]; // 求取当前数据缓冲区中所有数据的和。
	if (count == TDS_index) // 每来一个新数据,寻找缓冲区中去除这个新数据之外的缓冲区中数据的最大值和最小值,这个新来的数据不做参考比较。
	{
	  continue; // 结束本次for循环,继续开启下次for循环。
	}
	if (TDS_Queue[count] > max)
	{
	  max = TDS_Queue[count];	
	}
	if (TDS_Queue[count] < min)
	{
	  min = TDS_Queue[count];
	}	
  }
	_sum = _sum - max -min; // 求取58个数的和
	temp = _sum/(1.0*(TDS_Num-2)); // 求取58个数的平均值
	if (TDS_index++ >= TDS_Num-1)
	{
	  TDS_index = 0;//TDS_index进行错误判断,防止数组越界
	}
	
	return temp;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值