基于加速度传感器的计步器算法

基于加速度传感器的计步器算法

目前主要的计步器算法有波峰波谷检测法、动态阈值法、自相关分析法能、能量门限检测法4种[1]。其中,波峰波谷检测法的准确性较高。所以本文的算法主要是基于波峰波谷检测法,不过在获取波峰波谷值的同时也随之改变阈值的大小,从而得到步数。利用安卓内置的加速度传感器获取xyz三轴数据合成加速度来检查波峰以及计算阈值,从而实现计步功能。

 

  1. 算法原理

我们在日常行走时,手机内的加速度传感器会根据震动的频率采集到xyz三轴的加速度数值,形成一个波形图。如图1-1所示

图1-1  xyz三轴加速度波形图[2]

 

在波形图中存在波峰和波谷,检测步数其实就是检测波峰。如果行走时,由安卓加速度传感器获取的数值经过检测为波峰,并且两次波峰的时间以及阈值符合设定的数值范围,那么即可算作用户走了一步,超过这个设定的范围则看作用户停止步行或者无效行走。这是该算法的主要原理。但是会产生如下问题:

 

第一,无效波峰的过滤。该算法主要是获取加速度传感器中的三轴数值,是根据用户携带手机时震动的频率产生。所以用户在非步行状态也会产生一些微小的震动,从而影响到波形图的生成,产生无效的波峰。所以无效波峰的过滤是该算法需要解决的问题之一。

解决该问题的措施可以从三个方面入手:

其一,可以规定在到波峰这个点之前曲线上升的次数,当大于这个次数的时候可以判定其为计步需要的波峰;

其二,可以设定阈值,当波峰波谷的差大于阈值的时候则判定为有效波峰,反之无效;

其三,阈值的数值不能固定不变,需要根据用户所走的状态随时改变。

 

第二,根据无效波峰过滤的措施中我们可以看出,无效波峰的判断其实是和波峰产生的条件以及阈值的数值计算有关。所以检测波峰以及计算阈值就是该算法中我们需要解决的第二个问题。关于波峰的判定主要的原理如下,该点在波形图中的趋势为上升趋势,该点之前一个点的趋势不是上升趋势且持续上升大于一定的数值,即为波峰。上升趋势以及上升次数主要是通过加速度传感器所不断获取的三轴数据的平方和得到的,通过新旧传感器值的对比来判断趋势,改变次数。阈值的计算也与其有关。通过不断获取的传感器中三轴数据来确定波峰波谷的值,利用波峰波谷的差来计算阈值。

解决以上两个问题后,便可以得到用户使用该计步器时叫准确的步数数据。

 

  1. 算法实现

根据上述算法的主要原理,算法的实现可以分为以下步骤实现。流程图如2-1所示。

  • 实现SensorEventListener的监听,在回调函数onSensorChanged里获取加速度传感器,并且得到三轴数值,对其进行平方和以及开根号处理,所得到的传感器值作为接下来检测波峰以及计算阈值中的重要参数。
  • 检测波峰。当最新获取的传感器值大于上次获取的传感器的值的时候,该点就是上升趋势,上升的次数加1,反之不是上升趋势,上升次数为0。如果当前点的趋势不是上升趋势,而且该点之前一点是上升趋势并且上升的次数大于3时,规定该点为波峰,且波峰值为旧传感器值。反之,则为波谷的值。
  • 计算阈值。将波峰与波谷的差值作为参数传入阈值计算的函数中,连续获取4-5次差值,存入数组中,算出它们的均值,再进行一定的范围调整。最后得出的值就是需要的阈值。
  • 得到步数。如果该点是波峰,并且当前时间与上一次的波峰的时间差大于预设的固定值以及满足波峰波谷的差值大于阈值,那么就算用户走了一步,当前的时间就是这一次波峰的时间。反之,不能构成一步,并且需要将波峰波谷的差值作为参数进行阈值的重新计算。上述步骤不断的循环重复。

 

图2-1  算法流程图

 

在用户步行的过程中不断地获取三轴数据,所以最后得到的传感器的值也是不断地变化,导致了波峰波谷以及阈值的变化,只有进行不断地参数计算才能得到准确的步数。

 

参考文献

[1]宋辉,张荣,王忠民. 低功耗手机计步器算法. 西安邮电大学报,21-1,

[2] Neil Zhao. 利用3轴数字加速度计实现功能全面的计步器设计. Analog Dialogue ,44-06, June(2010)

One Reply to “基于加速度传感器的计步器算法”

发表评论

电子邮件地址不会被公开。