函数说明:近期项目中需要对采集的一些adc值进行滤波处理,采集100个值,取平均值给出。类以一个队列,进一个新值出一个旧值,保证最终给出的数据平滑。
#define FILTER_NUM 100
static int ezbsp_Sidebrush_adc_filter(uint16_t *data, uint8_t clear)
{
static uint8_t count = 0;
uint32_t sum = 0;
static uint16_t filter_data[FILTER_NUM+1] = {0};
if(data == NULL)
{
return -1;
}
if(clear == 1)
{
count = 0;
memset(filter_data, 0, sizeof(filter_data));
return 0;
}
filter_data[FILTER_NUM] = data[0];
count++;
if(count > FILTER_NUM)
{
count = FILTER_NUM;
}
for(uint8_t i = 0; i < FILTER_NUM; i++)
{
filter_data[i] = filter_data[i+1];//将数组值前移
sum += filter_data[i];
}
sum = sum / count;
data[0] = sum;
return 0;
}