基于三轴加速度传感器计步算法
By Sky.J 2018.08.08
概述
今天主要是想要分享利用三轴加速度传感器计步的一个算法步骤。
数据分析--->模型
这里拿到的是ADI公司的测试数据,可以看到不管如何佩戴计步器,总有至少一个轴具有相对较大的周期性加速度变化。那么我们就可以从这里着手,进行数据分析,判断步伐。
算法
1,均值滤波器---滤波
均值滤波器实现均值滤波,其实很简单就是拿到多组x,y,z三轴数据,求平均值。最后的平均值作为输出结果,使输出结果更加平滑。完成初步滤波。
下面是伪代码
#define FILTER_CNT 4
typedef struct {
short x;
short y;
short z;
}axis_info_t;
typedef struct filter_avg{
axis_info_t info[FILTER_CNT];
unsigned char count;
}filter_avg_t;
//读取xyz数据存入均值滤波器,存满进行计算,滤波后样本存入sample,如何读取存满就不多说了。
static void filter_calculate(filter_avg_t *filter, axis_info_t *sample)
{
unsigned int i;
short x_sum = 0, y_sum = 0, z_sum = 0;
for (i = 0; i < FILTER_CNT; i++) {
x_sum += filter->info[i].x;
y_sum += filter->info[i].y;
z_sum += filter->info[i].z;
}
sample->x = x_sum / FILTER_CNT;
sample->y = y_sum / FILTER_CNT;
sample->z = z_sum / FILTER_CNT;
}
2,动态阈值
动态阈值: 系统持续更新3轴加速度的最大值和最小值,每采样50次更新一次。平均值(Max + Min)/2称为"动态阈值"。
对于动态阈值其实就是我们在采样过程中拿到的每个轴的最大值和最小值的平均值,它是每取50个样本就更新一次&#x