资讯详情

基于加速度的门限检测计步算法设计

1. 引言

步行是一种常见的全国性健身运动,门槛低,在很多方面对人体有益,但过多的运动也会对人体造成伤害,所以有效的步骤非常重要。计步器能记录步行步数,在孕妇健康管理、体育教学、反映能量消耗、增强运动等方面发挥着重要作用。微机电系统(Micro-electro Mechanical Systems, MEMS)智能手机传感器模块广泛应用于体积小、重量轻、功耗低、耐、价格低等优点。目前,大多数计步算法都是围绕加速度实现的,智能手机内置的加速度传感器可以方便地获得加速度。

许多学者已经研究了准确的步骤,出现了许多方法。

文献 [1] 提出多级自适应门限计步算法,首先检测加速信号中的峰值点和谷值点,然后根据获得的峰值点和谷值点计算人物的步频特征,根据获得的步频特征判断人物的运动状态。最后,根据每种运动状态,自适应分配相应的时差阈值和动态峰值差阈值,实现多级自适应。该算法的准确性可达95%以上,但对波峰或波谷的检测准确性要求较高。文献 [2] 通过对加速度传感器采集的信号数据进行一系列处理,提出了基于加速度传感器的自适应计步算法,然后利用人工免疫算法判断处理后提取的特征值,确定人的运动状态,然后进行计步。该算法改进了特征值提取方法,摒弃了传统的贝叶斯分类算法,采用人工免疫分类算法有效地提高了步骤的准确性,但运动状态的判断对样本数据库有很强的依赖性。

文献 [3] 设计了一个基础MPU6050加速度传感器的自适应采样计步器通过MPU6050加速度传感器采集步态信号,采用滑动滤波算法滤波降噪传感器输出的数字步态信号,采用动态阀值算法自动识别行人的跑步和行走状态,并根据人体的不同运动状态自动调整取样速率,步骤精度可达95%以上。文献 [4] 利用MEMES-IMU提出了行走和跑步两种步态检测算法。文献 [4] 利用MEMES-IMU提出了行走和跑步的两种步态检测算法。在行走状态下,采用加速度、角速度、脚着地和跨步时间的多条件限制,实现零速范围检测。在跑步状态下,零速区间检测可以通过步伐检测和跨步检测来实现,并结合多种条件限制。检测精度在99%以上,但行走状态和跑步状态算法没有统一。

针对上述算法存在的问题,本文提出了基于加速度的门限检测算法,在波谷检测算法的基础上进行改进和优化。算法采用卡尔曼滤波算法对传感器输出的步态信号进行过滤和降噪,然后根据跑步、行走或静止等状态阈值确定行人的运动状态,根据不同的运动状态设置步频时差阈值和峰谷时差阈值。计步精度可达96%以上,可有效应用于计步器、室内定位等领域,测量不同状态下的步数,满足工程应用的需要。

2. 计步原理

步态周期可分为支撑期和摆动期,是指行走侧脚跟到另一侧脚跟再次着地的时间 [5]。

如图1所示,在一个步态周期中,由于大腿的摆动,垂直加速度首先增加,然后减少,前加速度在行走和脚提升过程中增加。

通过Android手机三轴加速度传感器获取手机坐标系(如图2所示(a)所示,x轴沿手机左右方向,y轴沿手机上下方向,z轴沿加速度数据垂直于手机屏幕),如图2所示(b)所示。加速度数据的变化可以反映行人运动的整个过程,因此基于加速度算法的步骤是可行的。

70fa61f7b7ae26189f283bab364ecedd.png

Figure 1. The law of acceleration change during a gait cycle

图1. 一个步态周期过程中加速度变化规律

Figure 2. Acceleration changes in the mobile phone coordinate system and a gait cycle

图2. 手机坐标系和步态周期的加速度变化

3. 算法设计

3.1. 预处理

acc_z (z轴加速度)虽然能反映行人运动的加速度变化,但单轴加速度对噪声的抗干扰能力较差,不稳定.在现实生活中,行人握手机的姿势或位置不同,手机的加速方向与行人的行走方向不同。在这方面,大多数研究使用三轴加速度,如公式(1)所示:

(1)

其中acc_x表示侧向加速,acc_y表示垂直加速,acc_z表示前向加速 [5]。

三轴合一的加速度结果如图3所示。

Figure 3. Three-axis combined acceleration

图3. 三轴合一加速

3.2. 卡尔曼滤波

在数据采集过程中,由于传感器的噪音和手机的摆动或与衣服的摩擦,不可避免地会产生错误的数据(如图4所示(a)因此,有必要过滤收集到的数据并纠正错误的数据.本文采用卡尔曼滤波算法 [6]。

图4(b)是卡尔曼滤波后的波形图。从图中可以看出,卡尔曼滤波模型有效地消除了伪峰谷,提高了步骤的准确性,使波形更加光滑,接近实际加速度的变化趋势。

(a)

(b)

Figure 4. (a) Before Kalman filtering; (b) After Kalman filtering

图4. (a) 卡尔曼滤波前;(b) 卡尔曼滤波后

3.3. 门限检测计步算法

由于传统的峰谷计步算法只检测峰值或谷值对噪声的抗干扰能力较弱,当过滤过程中不能完全消除伪峰或假谷时,会出现多次计步,降低计步的准确性。本文改进了传统的峰谷计步算法,考虑到峰谷检测,引入峰时间自更新,避免相邻两个峰谷的时差大大超过阈值,有效提高了计步的准确性。

3.3.1. 设置状态门限阈值

行人在慢走、快走或跑步过程中的步频不同,一步所需的时间也不同。因此,行人的运动状态需要在人的运动状态。本文区分静态、行走和跑步三种状态,并约定静态状态state = 0,行走状态state = 1,跑步状态state = 2.引入以下符号,描述状态判断过程:

still_peak:静止时最大加速度阈值,即行走时最小加速度阈值;

walk_peak:行走时最大加速度阈值,即跑步时最小加速度阈值;

still_valley:行走时加速度的最小阈值,即行走时加速度的最大阈值;

walk_valley:行走时加速度的最小阈值,即跑步时加速度的最大阈值;

在8个历元的滑动窗口中取出最大值Max和最小值Min (一般重力加速度为9.8 m/s状态转移方程如(2)所示:

(2)

如图5所示,行人在不同状态下运动时,峰值和谷值有明显差异。行人行走和跑步时多次采样数据,绘制加速度幅度分布图。根据实验统计,行人在正常行走时的加速度峰值幅度分布在[1.1 g, 2 g],谷值幅值分布在[0.4 g, 0.9 g]98%以上;跑步时加速峰值大于2 g,谷值幅值小于0.4 g99%以上,所以取still_peak为11.1 m/s2,walk_peak为20 m/s2,still_valley为9.3 m/s2,walk_valley为4 m/s2。

Figure 5. Acceleration waveforms in different motion states

图5. 不同运动状态下的加速波形

状态判定函数Judge_State()伪代码如下。

Dim state AS INTERGER

state=1

input(acc)

if acc<9.8 Then

do 状态转

Endif

if acc>9.8 Then

do 状态转移

Endif

3.3.2. 设置时差限阈值

正常情况下,正常人行走频率为1~2.5 Hz,跑步频率不超过5 Hz,因此,行走时设置时间差的阈值为[0.4 s, 1 s],设置跑步时间差的阈值为[0.2 s, 0.5 s];走路时相邻两波谷的时差为delta_1.跑步时相邻两波谷的时差为delta_2,通过检测delta_1或者delta_2是否在门限阈值范围内判断,如果小于阈值下限,则存在伪谷(如图6谷2所示,两个谷的时差小于阈值),如果大于阈值上限,行人可能会停止行走或休息,此时需要更新前一个谷时间,以避免影响后续步骤。

Figure 6. Two types of pseudo-valley

图6. 两种伪波谷类型

记住相邻峰谷之间的时差delta;如图6所示,虽然谷1达到阈值要求,但峰1不符合阈值要求,在计步过程中不能计入一步,因此需要通过delta消除这种情况下伪波谷的影响,进行二次判断。错误率与delta如图8所示,当delta值过小,会导致一步内波峰与波谷的检测时间差过小,从而忽略步数慢,降低步数准确性;当delta取值过大会导致判断失效,图6中的伪谷1无法消除。据实验数据统计,如图7所示,当delta取0.4.错误率最低,即计步精度最高。

Figure 7. Relationship between step error rate and delta

图7. 步骤错误率与delta的关系

p>阈值判断的峰值和谷值尽管在窗口里是最值,但仍需判断是否是前后邻域的最值,窗口两侧的最值不满足要求,需要摒弃,这是第三次判断.当三次判断都满足条件时,计步并更新前一个谷值时间,进入下一轮读取,算法伪代码如下所示。

input(acc)

input(time)

do 潜在峰值和谷值获取

if峰值:

state= Judge_State(Max)

if 时间阈值判定成立 Then

do 计步

Endif

Endif

if 谷值:

state = Judge_State(Min)

if 时间阈值判定成立 Then

do 计步

Endif

Endif

4. 实验与结果分析

4.1. 实验设计

为了获取行人在运动过程中握持Android手机时的加速度,编写了一款APP读取三轴加速度的数值.选取物联网工程学院宽阔的走廊作为实验的场地(如图8所示),便于实验。

Figure 8. Experimental corridor

图8. 实验走廊

实验使用的手机是HUAWEI Honor 10,系统为Android9.0.1。实验区别静止、行走和跑步三种状态,每种状态均采用门限检测计步算法,采集三组数据,每组数据的实际步数都是100步。

4.2. 实验结果分析

经过行人运动时加速度数据的采集,预处理,滤波,计步算法等过程进行了随机测试,测试的结果如表1所示。通过门限检测算法可以有效实现计步,行走状态下的准确率可达100%,最低为93%;跑步状态下的准确率可达99%,最低为95%;静止状态下的行人可以100%识别;在实际生活应用中可以作为室内定位或者计步器的一部分,准确提供行人的步数信息。

Table 1. Step detection results

表1. 步数检测结果

4.3. 与传统波峰检测算法比较

文献 [7] 采用传统峰值检测实现计步,选取统一的时间窗口[0.2 s, 2 s],比较上一峰值与此峰值的时间间隔,如果处于时间窗口内,则视为有效信号。此算法对噪声的抗干扰能力较弱,只能一次性计步,计步过程中不能过长停留,否则会形成累积误差,无法计步。如图9所示,红线以上部分均达到峰值要求,计步是前3个峰值计步有效,但第三个与第四个峰值间有较长的时间间隔,且超过时间阈值,第四个峰值以及往后的峰值都是无效的。

Figure 9. Results of step counting in [7]

图9. 文献 [7] 计步结果

对于本文的算法和文献 [7] 的算法分别进行10次行走和跑步测试.将2种算法计算的总步数与实际行走的步数进行比较,可以得到如图10所示的误差比较。

由图10可知,测试10次之后,文献 [7] 传统峰值检测算法计算出的总步数与实际的步数误差较大,跑步状态下步态周期短,误差范围大于等于3%占比60%,均在5%以内。行走状态下步态周期相对变长,此时误差范围大于等于3%占比90%,大于等于5%占比60%。而本文算法测试10次,跑步状态下误差范围大于等于3%占比30%,均在5%以内。行走状态下误差范围大于等于3%占比30%,均在5%以内。由实验结果表明:本文的算法优于传统的峰值检测算法,有效地提高了计步的精度。

Figure 10. Experimental error comparison

图10. 实验误差比较

5. 结束语

本文讨论了基于加速度的门限检测计步算法,在传统的波峰波谷检测算法的基础上做出改进,提高了计步的准确性。本文也讨论了卡尔曼滤波原理,对原始的加速度数据进行过滤,降低了噪声的干扰。在状态判断的基础上进行三次门限检测有效对伪波峰和伪波谷起到抑制作用。实验表明本算法能够满足计步器、室内定位等方向的精度要求,在此后的工作里,我们团队将致力于滤波方法的改进,进一步提高精度,降低噪声对实验的影响。

参考文献

标签: 微g加速度传感器1207系列加速度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台