通過需要去除緩衝區中最大數值和最小數值的方法進行數據濾波的方法:
編寫一個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;
}