小小手环,记录每日步数,面对数据叠加问题,如何精确处理呢? 上个月买了小米4手环,初心有二:体验新鲜电子产品;用来计算步数 。在使用过程中我一直对其计算方式比较好奇,索性今天满足下自己的好奇心。 一、小米手环怎么解决数据叠加问题呢? 简单列举两个场景: 早上我只带了手环去了篮球场,显示步数5000;下午我只带了手机外出,显示步数3000; 早上我只带了手环去了篮球场,显示步数5000;中午我同时带了手机和手环走了1小时,手机显示步数3000。 那么,今天我的微信运动步数是多少呢? 这个问题,我小侄子都能算出,正确应该是5000+3000=8000步。 但我想表达的是,微信运动在读取数据时,是如何做到精确统计呢? 我的推理是这样的: 小米手环和iPhone的健康数据作为一个数据源,可以简单理解为数据ID。那么在汇总统计时,会对每一条上传的数据打上数据来源标签。对于在同一时间段内的重复数据进行合并处理。 即将一天24小时按照时间长度依次叠加数据,这样就可以保证数据的准确性。 那么,事实上是不是这样呢? 二、揭秘时刻 下面这张图是我选取上周日的数据。 可以看到,每条数据由3部分构成:数据来源+步数+时间点。每个上传的数据都按照时间进行展示,最终一天的数据就是这些数据的累加。 完美! 三、小米手环的计步原理是什么呢? 是的,我就是来自本山大叔刨根问底栏目组的那个谁谁谁。根据小米官方文档看出,小米手环能够精准计步由硬件和软件算法两方面组成。 硬件 是指小米手环里内置的那枚强悍的三轴加速度传感器,军用级。 那么,啥是三轴加速度传感器呢? 这里的三轴是指空间坐标轴X/Y/Z。物理知识告诉我们,运动就会产生加速度,通过传感器获取这些数据,接下来的事情交给软件算法。 软件算法 程序猿根据三轴加速度实时捕捉到的三维数据,经过滤波、峰谷检测等过程,使用各种算法和逻辑计算,最终将这些数据转变成手环里的可读数字,包括步数、距离、消耗的卡路里等数值。 好了,大概就是这些了,算是给自己在这块的一个基本交代。下周有时间好好学习下硬件传感器方面的知识。