我是要对加速度计进行滤波。
这是滑动滤波的定义:连续取N个采样值看成一个循环队列,队列的长度固定为N
,每次采样到一个新数据
放入队尾并扔掉原来队首的一个数据(
先进先出原则),滤波器每次输出的数据总是当前队列中的N个数据的算术平均值。
[mw_shl_code=c,true]void Prepare_Data(T_int16_xyz *acc_in,T_int16_xyz *acc_out)// 滑动平均滤波 得到加速度的值
{
static uint8_t filter_cnt=0;
static int16_t ACC_X_BUF[FILTER_NUM],ACC_Y_BUF[FILTER_NUM],ACC_Z_BUF[FILTER_NUM];
int32_t temp1=0,temp2=0,temp3=0;
uint8_t i;
ACC_X_BUF[filter_cnt] = acc_in->X;
ACC_Y_BUF[filter_cnt] = acc_in->Y;
ACC_Z_BUF[filter_cnt] = acc_in->Z;
for(i=0;i<FILTER_NUM;i++)
{
temp1 += ACC_X_BUF;
temp2 += ACC_Y_BUF;
temp3 += ACC_Z_BUF;
}
acc_out->X = temp1 / FILTER_NUM;
acc_out->Y = temp2 / FILTER_NUM;
acc_out->Z = temp3 / FILTER_NUM;
filter_cnt++;
if(filter_cnt==FILTER_NUM) filter_cnt=0;
}[/mw_shl_code]
只赋值了一次就进入for循环 加了20次 。但他这个数组是静态变量的数组, 最后还是全赋值了 ,只要调用20次。
为什么我觉得这只是一个算是平均滤波。和滑动平均滤波的定义说的不一样。
|