·#前言
隨著當(dāng)前智能終端的普及浅妆,人們可做的事情變得越來(lái)越有趣变秦,比如計(jì)步器。傳統(tǒng)的計(jì)步器一般是一個(gè)單獨(dú)的設(shè)備席爽,戴在身體的某個(gè)位置意荤,由于必須在用戶身上增加一個(gè)設(shè)備,推廣起來(lái)有一定阻力只锻。其實(shí)玖像,計(jì)步器只需要一個(gè)3-軸加速度傳感器就能做到較高的記步精度,類似三星note3的計(jì)步器精度在95%以上齐饮。當(dāng)前智能手機(jī)一般都含有加速度傳感器捐寥,許多人開(kāi)始在手機(jī)上做計(jì)步器笤昨。可惜目前Android市場(chǎng)上大多數(shù)計(jì)步器精度都不理想握恳,經(jīng)本人測(cè)試瞒窒,目前最好的是三星的note3的健康伙伴,更關(guān)鍵的是三星使用了sensorhub的技術(shù)乡洼,在保持精度的同時(shí)崇裁,做到了超低功耗。
在手機(jī)上做計(jì)步器相較于傳統(tǒng)的計(jì)步器最大的難點(diǎn)在于手機(jī)使用時(shí)位置不固定束昵,計(jì)步器要能適應(yīng)不同放置位置和不同走路場(chǎng)景拔稳,這就要求計(jì)步器算法有很好的動(dòng)態(tài)調(diào)整能力。
計(jì)步器模型介紹
關(guān)于人走路的模型锹雏,前人[1]已經(jīng)做了很多研究巴比,不再累贅”普欤總結(jié)來(lái)講匿辩,人在走路時(shí),加速度傳感器會(huì)形成一個(gè)類似正弦波形圖榛丢,因此可以根據(jù)檢測(cè)波峰波谷記步铲球。見(jiàn)下圖:
算法
概述
- 特征選取
- 濾波
- 基于動(dòng)態(tài)閾值檢測(cè)步數(shù)
- 步數(shù)矯正
特征選取
考慮到手機(jī)在不同放置情況下傳感器的每個(gè)軸會(huì)有不同表現(xiàn),因此晰赞,取其強(qiáng)度特征可以避免該類問(wèn)題稼病,即取三軸平方和。
濾波
濾波是一種常見(jiàn)的數(shù)據(jù)預(yù)處理方法掖鱼,特別是手機(jī)上加速度傳感器數(shù)據(jù)存在一定的噪音然走,經(jīng)過(guò)濾波后能得到較平滑的數(shù)據(jù)。濾波算法有許多中戏挡,常見(jiàn)的有數(shù)字濾波芍瑞,也可以叫中值濾波、高斯濾波褐墅、快速傅里葉變換拆檬。本人試過(guò)幾種濾波算法后,發(fā)現(xiàn)采用中值濾波即可滿足需求妥凳,因?yàn)樗惴ǖ钠款i并不在此竟贯。另一個(gè)考慮是終端的計(jì)算資源有限,過(guò)多的計(jì)算將造成大量的耗電逝钥。
簡(jiǎn)單來(lái)講屑那,即取一個(gè)時(shí)間窗做平滑,假設(shè)以50HZ的頻率采集加速度傳感器數(shù)值,即在Android中注冊(cè)Sensor頻率為Fastest(不同手機(jī)可能會(huì)有差異)持际。我采用5個(gè)數(shù)據(jù)做一次平滑沃琅,即收到5個(gè)數(shù)據(jù)算一次平均值,當(dāng)做當(dāng)前值选酗。當(dāng)然阵难,你可以增加時(shí)間窗長(zhǎng)度,但是需要考慮用戶體驗(yàn)芒填,不能延遲太久呜叫。
動(dòng)態(tài)閾值
通常,計(jì)步器有兩種思路:一種是通過(guò)計(jì)算過(guò)零率來(lái)記步殿衰;另外一種是計(jì)算極大值和極小值朱庆,判斷峰谷值來(lái)記步。兩種算法的思想類似闷祥,都需要設(shè)置閾值娱颊。為了適應(yīng)各種不同的位置和走路姿勢(shì),你不能簡(jiǎn)單設(shè)一個(gè)閾值來(lái)檢測(cè)步數(shù)凯砍。第一種方法容易出現(xiàn)誤記箱硕,需要結(jié)合其他方法排除在mean值附近抖動(dòng)的數(shù)據(jù)。第二種方法容易出現(xiàn)漏檢悟衩,同時(shí)如果誤記剧罩,還會(huì)影響到后續(xù)的記步,因?yàn)樵谝淮尾椒ブ谐霈F(xiàn)好幾個(gè)峰谷是很正常的座泳,如何去除這些數(shù)據(jù)的影響需要良好的設(shè)計(jì)惠昔。
本人采用的檢測(cè)峰谷值得方法記步,但不是通過(guò)計(jì)算極大值和極小值挑势,而是設(shè)置波峰的閾值和波谷的閾值镇防,即當(dāng)數(shù)據(jù)大于波峰閾值時(shí),都記為未確認(rèn)峰值潮饱,保存其中最大的一個(gè)来氧,這樣可以避免數(shù)據(jù)在上升途中偶爾出現(xiàn)的抖動(dòng)。同理香拉,作用于峰谷饲漾。
檢測(cè)出峰谷之后,通過(guò)保存一個(gè)時(shí)間窗,通過(guò)里面的峰谷個(gè)數(shù)記步袄友。這里更多的是工程上的設(shè)計(jì)蕉朵。
步數(shù)矯正
基本思想是人類走路的特性,人的步伐速度在200-2000ms之間镜盯,通過(guò)記錄記步的時(shí)間戳别凤,矯正步數(shù)似嗤。步伐間隔<200ms和>2000ms枉层,認(rèn)為是無(wú)效步數(shù)泉褐。這部分也是目前終端計(jì)步器算法的核心,做的好的公司都有相應(yīng)的矯正機(jī)制鸟蜡。
總結(jié)
計(jì)步器算法的基本思想大致如此膜赃,最終產(chǎn)品的表現(xiàn)還要不斷打磨,針對(duì)異常場(chǎng)景進(jìn)行優(yōu)化揉忘。最后跳座,終端設(shè)備上應(yīng)用不可避免的是功耗問(wèn)題,如果開(kāi)了計(jì)步器泣矛,你的手機(jī)用半天就沒(méi)電疲眷,估計(jì)沒(méi)人愿意用。目前市場(chǎng)上許多低功耗計(jì)步器算法您朽,大多以降低精度為代價(jià)狂丝。目前看來(lái)只有三星采用高通的sensorhub方案有較好的表現(xiàn)。
參考:
[1] 利用3軸數(shù)字加速度計(jì)實(shí)現(xiàn)功能全面的計(jì)步器設(shè)計(jì)
[2] Github上的一個(gè)計(jì)步器實(shí)現(xiàn)代碼 改代碼直接使用效果不好