目标:读完你能回答三件事:
① 传感器里到底有什么“和走路有关”的信号;
② 我们怎样在这些信号里识别出“每一步”;
③ 找到每一步之后,如何得到“步频”和“步长”。
先建立一个“脑内模型”
把你走路想象成放音乐:
-
节拍稳不稳 → 就是步频(cadence):每秒几步、每分钟几步。
-
音量有多大 → 就是每一步的“用力/摆动强度”,它映射成步长。
手机里三件“乐器”在工作:
加速度计(节拍 + 强弱)、陀螺仪(转身/转向)、磁力计(朝向参照)。
本文只聊加速度的“节拍与强弱”。
当你抬脚—摆动—落地,合成后的加速度会出现这样的规律:

-
抬脚/摆动到最高 → 曲线出现峰(向上鼓起);
-
触地/回落最低 → 曲线出现谷(向下凹陷);
-
峰和谷交替出现,像规则的海浪。
-
一个“峰↔谷”的配对 = 一步。
先找到“每一步在哪儿”,步频与步长才有着落。
一步如何被手机“察觉”:数据预处理 + 峰谷检测
1.先把加速度弄干净、弄通明
-
手机会给你三轴加速度数据(静止时约 9.8 m/s²),我们先把这重力减掉,用加速度模长表达真实摆动幅度,即所谓的 total acceleration。
-
再用“低通滤波”去除高频震颤(抖动、手抖),把波形磨平,方便找“峰”和“谷”。
2.怎么判断“这儿是一脚”?
-
峰:曲线先上升后下降,且高过阈值 → 代表抬脚最高点;
-
谷:先下降后上升,且低过阈值 → 代表落地最低点;
-
峰-谷 一对就是一步。
步频(步率):你快不快?用节奏就知道
知道每一步发生的时间点后,“节奏”就很容易算:
-
步时 = 当前峰的时间 - 上一个峰的时间;
-
步频(Hz) = 1 / 步时;
-
步/分钟 = 60 × 步频。
举个例子:如果两步间隔 0.5 秒,步频就是 2 Hz,也就是 120 步/分钟。
想让数据看起来更舒服?滑动平均一下就行——就像音量条滑得更平滑。
步长:比“节奏”难一点,但也能玩得更好
为什么要估步长?
因为有时候你走很快、步频高,但每一步很短(比如快走),也可能步频普通,但每步覆盖很远(大跨步)。
步频告诉你“快慢节奏”,步长告诉你“跨多远”——两者合起来才完整。
为什么不能直接测?需要模型
你脚下“跨了几米”没有直接传感器。当你用加速度来估,必须面对太多变量:
-
人身高度、腿长
-
地面坡度、鞋底硬度
-
设备(手机)放哪:口袋、手、包里
-
走路方式:摇摆多、轻踩重抬…
所以,常见解决方案是建立“经验模型”:把某种容易量化的“信号强度”映射成步长。这就是各种“线性模型”“常数模型”“非线性模型”出现的原因。
常用的两种模型
1. 线性模型(优快云 非常多篇介绍这类):
步长 ≈ a × 身高 + b × 步频 + c
适合粗略估算,对水平一致的人群、规范走法比较管用。
2. 非线性 Weinberg 模型(更细致,更贴合实际):
步长 ≈ K × (峰值 – 谷值 – C)^(¼)
-
(峰 – 谷)表示“这一脚用力/摆幅有多大”,很直观; -
减 C 是抹掉毛躁幅度(不起步时的微波动);
-
¼ 次方控制“增强收益递减”,符合人体步伐逻辑。
如何把模型从“纸上”变成“现实可用”
1. 在现实里走一段直线,标定你的 K
最接地气的方法:
-
找一条直线(20–50 米),自然走一遍;
-
底下你知道真实距离,手机知道“每步摆幅”;
-
调整 K,让算出的总距离最逼近真实距离。
这一步关键且无需复杂,只要你走得不飘,准确度立马提升。
2. 调节阈值与模型适应不同场景
-
快跑时摆幅更大,要降低 C 或调高 K;
-
上楼下楼摆幅、节奏都不同,建议切换模式;
-
同一模型跑步走路都用?建议做滑动(临时)调整。
683

被折叠的 条评论
为什么被折叠?



