4. 计步器与运动状态识别
计步器看似只是“数步子”,但在 Wear OS 上它本质上是一条从原始传感器采样到状态判定的信号处理链。手表佩戴在手腕上,加速度计读到的不是纯粹的垂直躯干振动,而是手臂摆动、身体起伏和重力分量叠加后的复合信号;陀螺仪则补充了腕部旋转信息。要把这些信号变成可靠的步数和运动状态,需要依次完成坐标统一、滤波、峰值检测、步频估计和状态分类,并在必要时用陀螺仪修正误判。
一、从三轴加速度到“步态波形”
加速度计输出的是设备坐标系下的三轴加速度 ax、ay、az,单位通常为 m/s²,静止时合矢量模长约为 9.81 m/s²。直接对某一轴做阈值判断会因佩戴方向和手腕姿态变化而失效,因此第一步是计算合加速度模长:
mag = sqrt(ax*ax + ay*ay + az*az)
linear = mag - 9.81 // 去除重力后的动态分量
更稳健的做法是先用低通滤波估计重力分量,再相减得到线性加速度。例如一阶低通:
gravity = alpha * gravity + (1 - alpha) * mag // alpha 取 0.8~0.95
linear = mag - gravity
这样得到的 linear 波形在步行时呈现近似周期性的正负交替,每个“迈步—落脚”周期对应一个主峰。采样率建议不低于 50 Hz,Wear OS 上常用 SENSOR_DELAY_GAME(约 50 Hz)或 SENSOR_DELAY_FASTEST,兼顾功耗与波形分辨率。
二、步数检测:峰值—阈值—时间窗
最常用的步数检测是“动态阈值 + 峰值间隔约束”。核心逻辑是:当 linear 超过当前动态阈值且处于上升沿后的局部极大值,并且距离上一次有效步的时间间隔在合理范围内(步行约 0.25~1.2 s,即步频 50~240 步/分),就计为一步。动态阈值可随最近若干秒的波形幅度自适应调整,避免固定阈值在慢走或快跑时漏计、误计。
一个可参考的判定条件(示例参数,需按实际设备调优):
- 峰值幅度阈值:max(1.2 m/s², 0.6 × 最近 3 s 峰值均值)
- 最小步间隔:250 ms(对应最高约 240 步/分)
- 最大步间隔:2000 ms(超过则视为停顿,重置步频估计)
- 峰值需满足前后各 100 ms 内无更高峰,抑制抖动重复计数
为抑制手腕轻微晃动造成的伪峰,可加入“半周期对称性”检查:真实步态的上升沿与下降沿时间大致对称,而随机抖动往往不对称。若条件允许,再结合陀螺仪角速度模长判断——真实迈步时腕部角速度通常也会出现与加速度峰同步的周期性波动。
三、步行 / 跑步 / 静止分类
步数只回答“走了多少”,运动状态还要回答“以什么方式在动”。分类主要依赖三个特征:步频、波形幅度和波形规律性。静止时 linear 接近 0,方差极小;步行时步频约 80~140 步/分,峰值幅度中等且周期稳定;跑步时步频通常高于 140 步/分,峰值幅度明显增大,且垂直方向冲击更强。
可以用一个简单的状态机配合阈值分类:
| 状态 | 步频(步/分) | linear 峰值幅度 | 波形规律性 |
|---|---|---|---|
| 静止 | < 10 | < 0.5 m/s² | 无周期 |
| 步行 | 80~140 | 1~4 m/s² | 周期稳定 |
| 跑步 | > 140 | > 4 m/s² | 周期稳定、冲击尖峰明显 |
实际实现中,状态切换应加“迟滞”和“持续时间”约束:例如连续 3 s 满足跑步条件才切到跑步,连续 5 s 低于步行阈值才回到静止,避免在状态边界反复抖动。步频可用最近 5~10 步的间隔中位数换算,比瞬时值更稳定。
四、加速度计与陀螺仪融合
加速度计对线性运动敏感,但对旋转和姿态变化不敏感;陀螺仪对角速度敏感,能捕捉腕部摆动节奏,却存在零偏漂移。两者融合的价值在于:用陀螺仪验证加速度峰是否来自真实步态,用加速度计校正陀螺仪的长期漂移,并共同支撑状态分类。
一种轻量融合方式是“特征级融合”:分别从加速度和陀螺仪提取周期特征,再做一致性判断。例如计算两路信号的自相关主周期,若周期接近且都在步态范围内,则置信度高;若加速度有峰但陀螺仪无对应周期,可能是手腕晃动而非迈步,应降低计数权重。另一种是“姿态级融合”:用陀螺仪积分得到腕部姿态变化,把加速度投影到更接近躯干垂直方向,从而让峰值检测更稳定。
五、信号链与判定关系
下图把本节的关键处理环节、输入输出和状态判定关系集中呈现,便于对照实现。
六、实现要点与调优建议
在 Wear OS 上落地时,建议把传感器监听放在前台服务或 SensorManager 的独立回调中,避免界面卡顿影响采样。计步结果可先写入本地环形缓冲区,再按秒聚合上报,减少频繁写存储。调优时重点观察三类现象:慢走时是否漏计、快跑时是否重复计数、静止时是否出现伪步。若漏计,可适当降低动态阈值下限或放宽最小步间隔;若重复计数,应加强峰值对称性检查和陀螺仪一致性验证;若静止伪步,可提高静止判定阈值并延长状态切换的持续时间要求。
最后要强调,任何阈值都不是普适的。不同佩戴松紧、左右手、表带位置都会改变波形幅度。工程上应保留一组可配置参数,并在真实步行、跑步、静止场景下分别采集数据做回归验证,才能让计步与状态识别在多样使用条件下保持稳定。