本应用笔记介绍了367轴数字加速度计ADXL3的计步器算法实现。该算法基于对预定义时间窗口内步进产生的加速度的峰值检测分析。腕戴式用例的经验结果表明,在不同情况下,平均准确率约为 97%。
使用惯性传感器计步
计步是任何健身可穿戴设备中最常见的功能之一,通常利用数字惯性传感器(如加速度计和陀螺仪)来实现。
计算步数的两种主要方法在分析手臂的摆动运动部分和测量步数冲击加速度部分中进行了讨论。
分析手臂的摆动运动
一只手臂自然会随着对方腿的动作摆动,关系是每两步摆动一只手臂。一般来说,陀螺仪更适合分析手臂的摆动运动。
测量台阶冲击加速度
步行或跑步时,台阶会产生向前和垂直的加速度,其幅度和频率因人而异。垂直加速度的幅度往往高于前向加速度,它发生在步行循环的阶段,前脚的脚跟与地面接触,如图1所示。该特性通常用于使用加速度计进行步进计数,这也是本应用笔记的重点。
图1.步行阶段和加速模式(赵,2010)
加速度计消耗最小的功率和较小的占地面积非常重要,因为一般来说,健身追踪器是电池供电的紧凑型设备。此外,这些设备通常戴在手腕上,这给步进冲击加速度检测带来了两个挑战,如下所示:
与身体的其他位置(如臀部或脚踝)相比,加速度信号可能会有些减弱。
还有其他动作,例如手臂摆动,在跑步时跳过障碍物时,或向朋友挥手问好,通常在步进信号带宽内具有频率分量。这样的动作很难从一步中区分出来。
第一个挑战可以通过选择低噪声加速度计来克服,这样即使衰减也可以拾取加速度信号。加速度计还需要体积小,功耗低,以适合可穿戴设备。ADXL367满足所有这些要求。
ADXL367是一款超低功耗、3轴数字加速度计,测量模式下的典型功耗仅为0.89 μA,唤醒模式下的典型功耗低至180 nA。它具有 ±2 g 至 ±8 g 的可配置测量范围和高达 14 Hz 输出数据速率 (ODR) 的 400 位分辨率。它还包括深度多模输出先进先出 (FIFO)、内置温度传感器以及单击或双击检测。该器件采用 1.1 V 至 3.6 V 电源供电,采用 2.2 mm × 2.3 mm × 0.87 mm 封装。所有这些特性使ADXL367非常适合功耗和尺寸受限的应用。
解决第二个挑战与计步算法如何处理加速度信号有关。三种最常见的计步算法方法是(Xiaomin Kang,2018),如下所示:
时域分析
频域分析
在本应用笔记中,之所以使用时域分析方法,是因为它比其他两种方法需要更少的计算能力,同时在使用窗口峰值检测方法时,计数步骤的准确度也超过97%(Agata Brajdic,2013)。
计步算法
开发的算法检测给定时间窗口内的加速度峰值,并通过分析相对于动态阈值的峰值以及这些峰值的重复或重复来确定这些是否被视为步骤。该算法采用三个输入:x、y 和 z 轴加速度数据,采样率为 50 Hz(作为 14 位整数),并返回到目前为止计数的总步数。接下来将介绍算法实现。有关计步器算法流程图,请参见图 4。
首先,计算三个轴上加速度绝对值的总和。步行或跑步时,无论传感器的方向如何,至少有一个轴具有相对较大的周期性加速度变化(请参阅《模拟对话》文章“使用 3 轴数字加速度计实现的全功能计步器设计”(第 44 卷,2010 年 <> 月))。因此,绝对值的总和仍必须反映步行循环曲线。
接下来是低通滤波级。绝对值的总和与四样本循环缓冲区中的前三个值取平均值。然后使用平均信号来检测一步产生的最大和最小加速度峰值。该算法最初在时间窗口内查找最大峰值,当检测到最大峰值时,它开始查找最小峰值。
要使样品被视为峰值,它还必须位于窗口的中心,并且是该窗口内的最高样品(寻找最大值时)或最低样品(查找最小值时)。窗口大小必须允许算法准确捕获峰值。如果窗口太窄,由于噪音或其他运动引起的波动可能会被错误地解释为台阶。如果窗口太宽,则会在窗口中捕获两个或多个步骤,从而导致缺少步骤,因为算法在该窗口中仅检测到一个最大值或最小值。
一般来说,一个人可以跑到每秒五步,每 2 秒走一步。这意味着窗口必须至少宽 0.2 秒才能捕获最快的步长,并且窄于 0.4 秒,以便窗口中包含的最快步长不超过一个。检测到最大峰值后,该算法将搜索最小值长达 1 秒。如果没有找到最小值,算法认为没有步骤,它丢弃最大值,并开始寻找新的步骤。
接下来,确定是否可以将一对最大和最小峰值视为可能的步骤。为此,引入了动态阈值和灵敏度的概念。
动态阈值是一个四样本循环缓冲器,其工作方式与低通滤波级相同,但在这种情况下,输入数据是最大值和最小值的平均值。每当最大值和最小值之间的差异大于灵敏度时,动态阈值都会更新。
灵敏度定义了动态阈值幅度附近的区域,有助于消除最有可能由不希望的运动引起的波动。要将一对最大和最小峰值视为可能的步骤,需要满足以下条件:
最大峰值>(动态阈值 + 灵敏度/2)
最小峰值<(动态阈值 – 灵敏度/2)
最后,如果至少出现八个连续的可能步骤,该算法会认为一个人正在走路或跑步,这是算法的额外措施,以避免由于孤立事件(例如挥手打招呼或喝酒)而导致误报。在下一次迭代中,软件将验证之前所有八个可能的步骤是否有效,并进入调节模式。在此模式下,每个连续步骤都计为有效。
图 2 显示了一个人行走时的加速度曲线示例,而图 3 以图形方式显示了计步算法如何解释和分析加速度数据。在图 3 中,显示首先采取一个步骤,然后将人放在原地。在检测到的第一个最小值之后,可能的步骤计数增加到 1,但由于第二个最大值不满足被视为可能步骤的算法条件,因此可能的步骤计数将重置为零。此人 大约 4.6 秒后再次开始行走。在大约 5.<> 秒时,可能的步数达到 <>,软件进入调节模式。
图2.将传感器放在手腕上行走的人的加速度曲线
图3.算法加速信号处理
图4.计步器算法流程图
验证结果
原型电路的原理图如图5所示。
图5.原型原理图和硬件
EVAL-ADXL367Z 板与 Arduino Nano 33 低功耗蓝牙 (BLE) 一起用于设置测试平台。ADXL367配置为单电源供电。电源由 3.3 V Arduino 稳压器提供。Arduino使用两个串联的3 V纽扣电池供电。有关详细信息,请参阅图 7 和将原型与 Arduino IDE 配合使用部分。®
计步器算法针对 50 Hz 采样率进行了优化。因此,ADXL367 ODR需要相应地配置。加速度范围设置为 ±2 g,FIFO 设置为流模式,INT1 中断引脚配置为在发生 FIFO 水印事件时触发。当FIFO中存储的样本数量等于或超过FIFO_SAMPLES寄存器中指定的数量时,将设置FIFO水印。FIFO_SAMPLES寄存器设置为 24,相当于八组 x、y 和 z 轴数据。
用户必须根据特定用例调整算法参数以获得最佳性能。跑步时佩戴腕部可能需要与行走时髋部佩戴不同的参数值。这些参数如下:
窗口大小:定义观察窗口的缓冲区大小。
灵敏度:确定触发动态阈值更新的最小加速度。
筛选顺序:定义平均循环缓冲区的大小。
阈值顺序:定义动态阈值循环缓冲区的大小。
表1总结了发现的参数值,对于腕戴式应用来说是一个很好的折衷方案。
参数 | 价值 |
筛选顺序 | 4 |
阈值顺序 | 4 |
窗口大小 | 筛选顺序 × 4 + 1 |
敏感性 | 0.1 克 |
在图 6 的示例中,一个人朝一个方向走 10 步,停止走路,转身,然后向后走 10 步。ADXL367测量的加速度以蓝色、红色和绿色显示,算法计算的总步数以黑色显示。
图6.一个人向一个方向行走10步,然后转身再走10步的加速度曲线;算法步数以黑线显示
使用表1参数的验证结果如表2所示。原型PCB用钩环带缠绕在测试人员的手腕上。这个人穿着普通的跑鞋。
测试 | 测试说明 | 计步器步骤 计数 | 实际数量 步骤 |
1 | 走 | 99 | 100 |
2 | 走路,忙碌的双手 | 101 | 100 |
3 | 步行,每10步停下来,改变 方向 | 53 | 50 |
4 | 跑 | 103 | 100 |
5 | 上下楼梯 | 98 | 96 |
对于测试 1(步行),该人以每秒 1.6 步的平均速度行走。对于测试 2(走路,忙碌的手),测试人员一边走路,一边用双手拿着手机。测试5(上下楼梯)在硬木地板楼梯上进行,有12个台阶。在这个测试中,这个人上下楼梯四次。除测试5(上下楼梯)外,所有测试均在混凝土地板上进行。从所有这些测试中获得的平均步数计数准确率为 97.4%。测试3(步行,每10步停止,改变方向)显示94.3%的准确率,这是性能最低的测试。
为了估计算法的平均处理时间,在表 2 中执行的每个测试期间监控其执行时间。获得的平均时间为24 μs。
图7.Arduino 代码流程图
将原型与ARDUINO IDE一起使用
用于验证测试的计步器算法源代码可从ADXL367产品页面的工具和仿真部分下载。
要将原型PCB与Arduino IDE一起使用,请执行以下步骤:
从 Arduino 网站安装 Arduino 集成开发环境 (IDE) 应用软件。
打开 Arduino IDE,然后转到“工具》管理库”。
图8.Arduino IDE 管理库
在“库管理器”窗口中,从“类型”列表中选择“Arduino”,从“主题”列表中选择“通信”,然后键入“ArduinoBLE”。单击安装。
图9.安装 ArduinoBLE 库
将通用串行总线 (USB) 电缆连接到 Arduino 和 PC。
打开 ADXL367 计步器算法项目,方法是转到“打开文件”》然后选择 ADXL367_pedometer.ino 文件。
转到工具》板:Arduino Nano 33 BLE 》 Arduino Mbed OS Nano Boards,然后选择 Arduino Nano 33 BLE。
图 10.Arduino IDE 板选择
转到“工具》端口”,然后选择相应的端口。
图 11.Arduino IDE COM 端口选择
点击 上传 按钮将程序上传到 Arduino。
图 12.上传软件
完成的上传显示为 Done,如图 13 所示。
图 13.完成上传消息
转到“工具”,然后选择“串行监视器”。
图 14.打开 Arduino IDE 串行监视器
在打开的窗口中,从波特率列表中选择 115200 波特。图 15 显示了当前步骤计数。
图 15.计步监控
审核编辑:郭婷
-
加速度计
+关注
关注
6文章
698浏览量
45853 -
计步器
+关注
关注
4文章
76浏览量
19897 -
Arduino
+关注
关注
187文章
6462浏览量
186615
发布评论请先 登录
相关推荐
评论