计步器的算法

ADXL345_Init()

     初始化ADXL345芯片(初始化IIC总线,)判断是否读取器件ID(如果读取器件ID,设置工作模式,数据传输速度,并初始化x,y,z三轴的数据),并返回值(成功返回0,失败返回1)。

 

ADXL345_WR_Reg()通过IIC发送数据到ADXL345的寄存器

ADXL345_RD_Reg()通过IIC读取ADXL345寄存器的数据,并返回读到的数

ADXL345_RD_Avval()读取ADXL345的平均值,读取10次后取10次的平均值

ADXL345_AUTO_Adjust()对ADXL345进行校准

ADXL345_RD_XYZ_1()通过IIC读取三轴x,y,z的数据,并将数据存在BUF[ ]中

ADXL345_RD_XYZ()将ADXL345的数据读取出来,并且整合为x,y,z轴的数值

ADXL345_Read_Average()读取ADXL345的数据times次,在取其平均值

ADXL345_Get_Angle()获取重力加速度分力的角度

 

     在定时器3中的(每经过100ms采样一次x,y,z轴的数据)

counter_1()

  1. 采样滤波,求出3轴的平均值,求出加速度的最大,最小值;
  2. 每采样50次,求出峰峰值,然后设置门限()
  3. 计算精度
  4. 对采样滤波的平均值进行处理然后将其与精度进行比较(通过移位寄存器来消除高频噪声,使值更精确)
  5. 动态门限判定,对数值进行比较,然后将步数加1

 

      采集到加速度变化信号并进行滤波使其信号波形改善,系统持续更新3轴加速度的最大最小值,每采样50次更新一次,并取出“动态阈值”接下来的50次采样利用此阈值判断个体是否迈出步伐,由于此阈值每50次采样更新一次,因此它是动态的。这种选择具有自适应性,且足够快,除了动态阈值外,还利用动态精度来执行进一步的滤波。

     利用移位寄存器和动态阈值判断个体是否有效地迈出一步。该线性移位寄存器含有2个寄存器:sample_new,sample_old寄存器。当新采样数据到来时,new中的数据无条件移入old寄存器。然而,result是是否移入new寄存器取决于以下条件:如果加速度变化大于预定义精度,则最新的采样结果result移入new寄存器,否则new寄存器保持不变。因此,移位寄存器组可以消除高频噪音,从而保证结果更加精确。

     步伐迈出的条件定义为:当加速度曲线跨过动态阈值下方时,加速度曲线的斜率为负值(new,<old)。

    峰值检测:步伐计数器根据x,y,z轴加速度变化最大的一个轴计算步数。如果加速度变化太小,步伐计数器将忽略。  缺点:有时显得太敏感。

    峰值检测有两种选择:1. 3轴的加速度的平方和。2. 3轴中加速度变化的最大的一项。

 

   流程图(counter1())

计步器的算法

 

计步器的算法