通过需要去除缓冲区中最大数值和最小数值的方法进行数据滤波的方法:
编写一个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;
}