原文发表于腾讯知乎专栏,极客公园授权转载。
有网友好奇,手机绑在狗身上,坐车出门这些,算不算微信步数?
要理解这些问题,需要先用 1 分钟解释一个简单的道理:「步数」的依据究竟是什么?着急的同学,可以直接到后面翻答案。
步数背后的秘密:加速度
路,是一步一步走出来的。即使看似匀速的闲庭信步,对我们携带的设备来说(如手机、运动手环),每一步都经历了过山车般的「加速度」变化。
一般来说,抬腿迈出一步的时候,加速度是最大的。我们把它放到一个坐标轴上,加速度的变化看起来就像一个 cos 波形。
x 轴表示时间,y 轴表示加速度
两个波峰之间,可以被认为是一步。如果连续出现了 8 个(不同硬件厂商有不同标准)波峰,就可以基本确定这个人在运动状态。设备就开始把这些前面的波动以及后面的波动,算成步数。这就是最基本的计步原理了。
在实际场景中,算法还要去掉一系列的「噪音」。比如我们走路时,手机放兜里会上下抖动,产生不同方向的加速度。这时算法就要判断并去掉「噪音」,只留下最主要的运动特征。
而这些工作是由一个采集器(加速度传感器)和一个处理器(Sensor Hub,协处理器)共同完成的。
采集器采集加速度信息,并提供给处理器进行分析。目前 iPhone 5s 及以上的苹果手机和部分安卓手机都集成了这个采集、分析的框架。而运动手环等外接设备,也是基于类似框架对数据采集和分析后,通过蓝牙传给手机。(是的,以上都是硬件厂商解决的,还没有说到微信,稍安毋躁。)
几个简单的例子
那么,现在你已经对计步的基本原理有了一定了解。让我们看一看下面几个简单的例子吧。
问:原地踏步算吗?
答:算啊,跟走路一样的。因为你原地踏步,虽然没有相对于地面的位移,但加速度是存在的。同理,在跑步机上跑步,放心,步数都记着呢。
问:坐着抖腿呢?
答:这与你抖腿的幅度和频率都有关,且看少年你骨骼惊奇还是手机厂商算法高深。任何震动会被采集到,但不同硬件厂商算法对这些场景处理可能不一样。
问:绑狗身上行吗?
答:既然你这么问了,那我恐怕只能说这与狗狗的性格有关。文静一些的,或者幼犬,走路比较慢的话,他/她迈步产生的加速度不一定有人那么高,达不到算法的阈值。性格活泼的,或者大一些的狗狗,运动加速度特征与人相似,「骗过」算法的可能性较高。不同手机厂商也有不同的算法优化方案。
问:我生活三点一线,一天就几千步,如果有机会坐火车,是不是可以狠狠刷一把步数?
答:知识点啊,知识点不能扔了啊同学。计步的基本原理不是采集距离,也不是采集速度,而是采集加速度。不管火车走多远、跑多快,大多数情况是匀速(或匀加减速)运动,加速度变化不显著,且无法形成与走路相似的波形。火车上,如果你不走路的话,计算步数的可能性是非常小的。
追问:那在火车上摇手机呢?
答:摇也可以啊,因为有一个纵向加速度,在纵向上会产生波纹。但这与火车无关,和原地抖腿没有本质区别。
问:为什么我坐公交车就算步数了呢?
答:对,公交上被计算步数的概率是比较高的。路况有一定影响,繁忙路段行驶时,走走停停都会产生加速度的变化。还和司机的开车习惯有关,如果司机不停地刹车,或者颠得厉害,加速度影响就大。如果遇上开车开得平稳又熟悉路况的本地老司机,车上乘客比较不容易计步。
问:微信运动的步数计算周期是什么?晚上 10 点排行榜以后步数还算吗?
答:零点到夜里 24 点。但微信运动排行榜在晚上 10 点推送,用户一般都在那个时候查看排行、相互点赞。如果你晚上 11 点去跑步的话,记上是记上了,但别人都没看到,就少了一些攀比的乐趣。步数过零点清零。
问:厂商各有算法,不同设备用户在微信运动上一起排名,如何公平呢?
答:实际上,在抖腿、公交之外,走路、跑步才是日常运动最主要的场景。这些基本场景的算法,业界是较为统一的。微信对主要场景也有一套测试流程,确保不同设备计入的步数差距不大。对极端场景,也会持续优化算法。
作弊,你想好了吗?
说了这么多计步原理,敲黑板,划重点:微信运动并不是计步工具,而是一个以步数排行榜为主题的轻社交空间。
开启功能后,每天晚上 10 点会向用户推送一个步数排行榜,步数多的人排在前面,步数少的人排在后面。用户可以查看他人当日步数/步数历史图表,并对他人的步数进行点赞并回赞。
算法的事,大多是解决「好奇心」的问题,而微信运动,恐怕也与「好胜心」有关。
有人愿意为步数攀比,甚至作弊,毕竟排名靠在一部分人眼里,一定程度上代表了不仅有自己时间,而且认真的生活,有力量,有毅力。但其实又如何呢?
偶尔收到好朋友的步数点赞,偶尔会回。有点像处于生活战壕里的战友,在繁忙的枪林弹雨中,偶尔拍一拍对方的肩膀,然后继续投入宏大的战斗中去。对于努力的人来说,努力本身就是一种最好的回报了,没有别的什么奖励能够代替。
最后还有你们一直想问的,作弊问题。
其实可以作弊的地方有很多。特别是安卓,作为一个开源的系统,人为变更上报数据都是可能的。微信有一套反作弊机制,比如在用户手机端对速度做简单的合法性校验。假如一秒钟就走了 10 步,这种数据就可能被系统直接抹掉。而且还给他暂停计步,让他觉得作弊没用。
如你所想,抖腿、绑狗,小小「作弊」,完全杜绝是不太可能的。对于严重、明显的连续作弊,微信会请他进入黑名单,他的数据不会再被别人看到,就只能自嗨了。