android 计步器acc,基于加速度的门限检测计步算法设计
1. 引言
步行運動是一項普遍的,門檻低的全民健身運動,在諸多方面對人體有益,但是過多運動也會對人體產(chǎn)生損傷,因而有效計步顯得十分重要。計步器可以記錄步行的步數(shù),在孕婦健康管理、體育教學(xué)、反映能量消耗、增強運動等方面發(fā)揮著巨大的作用。微機電系統(tǒng)(Micro-electro Mechanical Systems, MEMS)以體積小、重量輕、功耗低、耐用性好、價格低廉等優(yōu)點廣泛應(yīng)用于智能手機傳感器模塊中。目前大多數(shù)計步算法都是圍繞加速度實現(xiàn)的,而智能手機內(nèi)置的加速度傳感器能夠方便獲取加速度。
對于精確計步問題,很多學(xué)者已經(jīng)進行了研究,涌現(xiàn)出了很多方法。
文獻 [1] 提出多級自適應(yīng)門限計步算法,先檢測加速度信號中的峰值點和谷值點,接著基于獲得的峰值點和谷值點,計算人物的步頻特征,根據(jù)所得步頻特征判斷人物的運動狀態(tài),最后,針對每種運動狀態(tài),自適應(yīng)分配對應(yīng)的時間差閾值和動態(tài)峰谷值差值閾值,實現(xiàn)多級自適應(yīng)。該算法的準確率能達到95%以上,但對波峰或者波谷的檢測準確度要求很高。文獻 [2] 提出了一種基于加速度傳感器的自適應(yīng)計步算法,通過對加速度傳感器采集的信號數(shù)據(jù)進行一系列處理,然后利用人工免疫算法對處理后提取的特征值進行判斷,確定人的運動狀態(tài),再進行計步。該算法改進了特征值提取方法,摒棄了傳統(tǒng)的貝葉斯分類算法,采用人工免疫分類算法有效地提高了計步的準確率,但是運動狀態(tài)的判定對樣本數(shù)據(jù)庫有較強的依賴性。
文獻 [3] 設(shè)計了一種基于MPU6050加速度傳感器的自適應(yīng)采樣計步器,該計步器通過MPU6050加速度傳感器采集步態(tài)信號,運用滑動濾波算法對傳感器輸出的數(shù)字步態(tài)信號進行濾波與降噪處理,采用動態(tài)閥值算法對行人的跑步和走路兩種狀態(tài)進行自動識別,并根據(jù)人體不同的運動狀態(tài)自動調(diào)整采樣速率,計步精度可以達到95%以上。文獻 [4] 利用MEMES-IMU多種特征值,提出了行走和跑步的兩種步態(tài)檢測算法。在行走狀態(tài)下,采用加速度、角速度,足部著地和跨步時間的多條件約束實現(xiàn)零速區(qū)間檢測。在跑步狀態(tài)時,通過步伐探測和跨步探測的方法,并結(jié)合多條件約束,實現(xiàn)零速區(qū)間檢測。檢測精度達到99%以上,但未將行走狀態(tài)與跑步狀態(tài)算法統(tǒng)一。
針對以上算法出現(xiàn)的問題,本文提出了基于加速度的門限檢測算法,在波谷檢測算法的基礎(chǔ)上改進和優(yōu)化。算法運用卡爾曼濾波算法對傳感器輸出的步態(tài)信號進行濾波和降噪等預(yù)處理,然后根據(jù)狀態(tài)門限閾值判定行人的運動狀態(tài),比如跑步、行走或者靜止,針對不同的運動狀態(tài)分別設(shè)置步頻時間差閾值和峰谷值時間差閾值,滿足閾值條件則計步。該算法計步精度可以達到96%以上,可以有效應(yīng)用于計步器、室內(nèi)定位等領(lǐng)域,測量不同狀態(tài)下的步數(shù),滿足工程應(yīng)用的需求。
2. 計步原理
步態(tài)周期可以分為支撐期和擺動期,是指行走過程中一側(cè)足跟著地至該側(cè)足跟再次著地時所經(jīng)過的時間 [5]。
如圖1所示,在一個步態(tài)周期中,人由于大腿的擺動,垂直加速度先增大后減小,前向加速度在邁步過程中增大,在提腳過程中減小。
通過Android手機的三軸加速度傳感器獲取手機坐標系(如圖2(a)所示,x軸沿手機左右方向,y軸沿手機上下方向,z軸沿垂直于手機屏幕的方向)下的加速度數(shù)據(jù),如圖2(b)所示。加速度數(shù)據(jù)的變化可以反映出行人運動的全過程,因而基于加速度的算法實現(xiàn)計步是可行的。
Figure 1. The law of acceleration change during a gait cycle
圖1. 一個步態(tài)周期過程中加速度變化規(guī)律
Figure 2. Acceleration changes in the mobile phone coordinate system and a gait cycle
圖2. 手機坐標系和一個步態(tài)周期里加速度變化
3. 算法設(shè)計
3.1. 預(yù)處理
acc_z (z軸加速度)盡管能夠反映出行人運動的加速度變化,但是單軸加速度對噪聲的抗干擾能力較差,不穩(wěn)定.在實際生活中,行人握持手機的姿勢或者手機的擺放位置不盡相同,而且手機加速度的方向與行人行走方向并不相同。對此,大部分研究采用三軸合一加速度,如公式(1)所示:
(1)
其中acc_x表示側(cè)向加速度,acc_y表示垂直加速度,acc_z表示前向加速度 [5]。
三軸合一的加速度結(jié)果如圖3所示。
Figure 3. Three-axis combined acceleration
圖3. 三軸合一加速度
3.2. 卡爾曼濾波
在數(shù)據(jù)的采集過程中,由于傳感器的噪聲和手機的擺動或者與衣服的摩擦,不可避免會產(chǎn)生錯誤的數(shù)據(jù)(如圖4(a)所示),因此需要對采集的數(shù)據(jù)進行濾波,矯正錯誤的數(shù)據(jù).本文采用卡爾曼濾波算法 [6]。
圖4(b)是經(jīng)過卡爾曼濾波后的波形圖,從圖中可以看出卡爾曼濾波模型有效地消除了偽波峰或波谷,提高了計步的準確性,同時也使得波形更加平滑,趨近于實際加速度的變化趨勢。
(a)
(b)
Figure 4. (a) Before Kalman filtering; (b) After Kalman filtering
圖4. (a) 卡爾曼濾波前;(b) 卡爾曼濾波后
3.3. 門限檢測計步算法
傳統(tǒng)的波峰波谷計步算法由于只檢測峰值或者谷值對噪聲抗干擾能力較弱,當濾波過程中無法完全消除偽波峰或者偽波谷,那么就會出現(xiàn)多次計步的情況,降低計步的準確性。本文在傳統(tǒng)波峰波谷計步算法上做出改進,兼顧波峰和波谷檢測,同時引入波峰時間自更新,避免由于行人停留使得相鄰兩波峰或波谷的時間差大大超過閾值而無法計步的情況,有效提高了計步的準確性。
3.3.1. 狀態(tài)門限閾值設(shè)置
行人在慢走、快走或者跑步過程中的步頻是不一樣的,一步所需的時間也不同,因而在計步前需要判斷行人的運動狀態(tài)。本文區(qū)分靜止、行走和跑步這3中狀態(tài),約定靜止狀態(tài)state = 0,行走狀態(tài)state = 1,跑步狀態(tài)state = 2。為描述狀態(tài)判斷的過程,引入如下符號:
still_peak:靜止時加速度的峰值最大閾值,即行走時加速度的峰值最小閾值;
walk_peak:行走時加速度的峰值最大閾值,即跑步時加速度的峰值最小閾值;
still_valley:行走時加速度的谷值最小閾值,即行走時加速度的谷值最大閾值;
walk_valley:行走時加速度的谷值最小閾值,即跑步時加速度的谷值最大閾值;
在8個歷元的滑動窗口中取出最大值Max和最小值Min (一般重力加速度g取9.8 m/s2,滿足最大值大于重力加速度,最小值小于重力加速度),狀態(tài)轉(zhuǎn)移方程如(2)所示:
(2)
如圖5所示,行人在不同狀態(tài)運動時,峰值和谷值都有明顯的差別,對人行走和跑步時的數(shù)據(jù)多次采樣,繪制加速度幅值分布情況圖,由實驗統(tǒng)計結(jié)果可知:行人在正常行走情況下加速度峰值幅值分布在[1.1 g, 2 g],谷值幅值分布在[0.4 g, 0.9 g]的比重達到98%以上;跑步狀態(tài)下加速度峰值幅值大于2 g,谷值幅值小于0.4 g的比重達到99%以上,因此取still_peak為11.1 m/s2,walk_peak為20 m/s2,still_valley為9.3 m/s2,walk_valley為4 m/s2。
Figure 5. Acceleration waveforms in different motion states
圖5. 不同運動狀態(tài)下的加速度波形
狀態(tài)判定函數(shù)Judge_State()的偽代碼如下。
Dim state AS INTERGER
state=1
input(acc)
if acc<9.8 Then
do 狀態(tài)轉(zhuǎn)
Endif
if acc>9.8 Then
do 狀態(tài)轉(zhuǎn)移
Endif
3.3.2. 時間差門限閾值設(shè)置
通常情況下,正常人行走的頻率為1~2.5 Hz,跑步時的頻率不超過5 Hz,所以設(shè)置行走時的時間差門限閾值為[0.4 s, 1 s],設(shè)置跑步時的時間差門限閾值為[0.2 s, 0.5 s];記行走時相鄰兩波谷的時間差為delta_1,跑步時相鄰兩波谷的時間差為delta_2,通過檢測delta_1或者delta_2是否在門限閾值范圍內(nèi)進行一次判斷,如果小于閾值下限,表示存在偽波谷(如圖6波谷2所示,波谷2中兩個波谷的時間差小于閾值),如果大于閾值上限,可能行人停止行走或休息,此時需要更新前一個谷值時間,避免影響后續(xù)計步。
Figure 6. Two types of pseudo-valley
圖6. 兩種偽波谷類型
記相鄰的波峰與波谷的時間差為delta;如圖6所示,盡管波谷1達到閾值要求,但是波峰1沒有達到閾值要求,在計步過程中并不能計成一步,因而需要通過delta來進行二次判斷消除這種情況的偽波谷的影響。錯誤率與delta的關(guān)系如圖8所示,當delta取值過小,會導(dǎo)致一步內(nèi)波峰與波谷的檢測時間差過小,從而忽略如慢走的步數(shù),降低了計步準確性;當delta取值過大,會導(dǎo)致本次判斷失效,不能消除圖6中偽波谷1。根據(jù)實驗數(shù)據(jù)的統(tǒng)計,如圖7所示,當delta取0.4時,錯誤率最低即計步的準確率最高。
Figure 7. Relationship between step error rate and delta
圖7. 計步的錯誤率與delta的關(guān)系
閾值判斷的峰值和谷值盡管在窗口里是最值,但仍需判斷是否是前后鄰域的最值,窗口兩側(cè)的最值不滿足要求,需要摒棄,這是第三次判斷.當三次判斷都滿足條件時,計步并更新前一個谷值時間,進入下一輪讀取,算法偽代碼如下所示。
input(acc)
input(time)
do 潛在峰值和谷值獲取
if峰值:
state= Judge_State(Max)
if 時間閾值判定成立 Then
do 計步
Endif
Endif
if 谷值:
state = Judge_State(Min)
if 時間閾值判定成立 Then
do 計步
Endif
Endif
4. 實驗與結(jié)果分析
4.1. 實驗設(shè)計
為了獲取行人在運動過程中握持Android手機時的加速度,編寫了一款A(yù)PP讀取三軸加速度的數(shù)值.選取物聯(lián)網(wǎng)工程學(xué)院寬闊的走廊作為實驗的場地(如圖8所示),便于實驗。
Figure 8. Experimental corridor
圖8. 實驗走廊
實驗使用的手機是HUAWEI Honor 10,系統(tǒng)為Android9.0.1。實驗區(qū)別靜止、行走和跑步三種狀態(tài),每種狀態(tài)均采用門限檢測計步算法,采集三組數(shù)據(jù),每組數(shù)據(jù)的實際步數(shù)都是100步。
4.2. 實驗結(jié)果分析
經(jīng)過行人運動時加速度數(shù)據(jù)的采集,預(yù)處理,濾波,計步算法等過程進行了隨機測試,測試的結(jié)果如表1所示。通過門限檢測算法可以有效實現(xiàn)計步,行走狀態(tài)下的準確率可達100%,最低為93%;跑步狀態(tài)下的準確率可達99%,最低為95%;靜止狀態(tài)下的行人可以100%識別;在實際生活應(yīng)用中可以作為室內(nèi)定位或者計步器的一部分,準確提供行人的步數(shù)信息。
Table 1. Step detection results
表1. 步數(shù)檢測結(jié)果
4.3. 與傳統(tǒng)波峰檢測算法比較
文獻 [7] 采用傳統(tǒng)峰值檢測實現(xiàn)計步,選取統(tǒng)一的時間窗口[0.2 s, 2 s],比較上一峰值與此峰值的時間間隔,如果處于時間窗口內(nèi),則視為有效信號。此算法對噪聲的抗干擾能力較弱,只能一次性計步,計步過程中不能過長停留,否則會形成累積誤差,無法計步。如圖9所示,紅線以上部分均達到峰值要求,計步是前3個峰值計步有效,但第三個與第四個峰值間有較長的時間間隔,且超過時間閾值,第四個峰值以及往后的峰值都是無效的。
Figure 9. Results of step counting in [7]
圖9. 文獻 [7] 計步結(jié)果
對于本文的算法和文獻 [7] 的算法分別進行10次行走和跑步測試.將2種算法計算的總步數(shù)與實際行走的步數(shù)進行比較,可以得到如圖10所示的誤差比較。
由圖10可知,測試10次之后,文獻 [7] 傳統(tǒng)峰值檢測算法計算出的總步數(shù)與實際的步數(shù)誤差較大,跑步狀態(tài)下步態(tài)周期短,誤差范圍大于等于3%占比60%,均在5%以內(nèi)。行走狀態(tài)下步態(tài)周期相對變長,此時誤差范圍大于等于3%占比90%,大于等于5%占比60%。而本文算法測試10次,跑步狀態(tài)下誤差范圍大于等于3%占比30%,均在5%以內(nèi)。行走狀態(tài)下誤差范圍大于等于3%占比30%,均在5%以內(nèi)。由實驗結(jié)果表明:本文的算法優(yōu)于傳統(tǒng)的峰值檢測算法,有效地提高了計步的精度。
Figure 10. Experimental error comparison
圖10. 實驗誤差比較
5. 結(jié)束語
本文討論了基于加速度的門限檢測計步算法,在傳統(tǒng)的波峰波谷檢測算法的基礎(chǔ)上做出改進,提高了計步的準確性。本文也討論了卡爾曼濾波原理,對原始的加速度數(shù)據(jù)進行過濾,降低了噪聲的干擾。在狀態(tài)判斷的基礎(chǔ)上進行三次門限檢測有效對偽波峰和偽波谷起到抑制作用。實驗表明本算法能夠滿足計步器、室內(nèi)定位等方向的精度要求,在此后的工作里,我們團隊將致力于濾波方法的改進,進一步提高精度,降低噪聲對實驗的影響。
參考文獻
總結(jié)
以上是生活随笔為你收集整理的android 计步器acc,基于加速度的门限检测计步算法设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Data-structures-and-
- 下一篇: 制冷行业人人必备的设计与仿真软件大全!(