日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 计步器acc,基于加速度的门限检测计步算法设计

發布時間:2023/12/20 编程问答 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 计步器acc,基于加速度的门限检测计步算法设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 引言

步行運動是一項普遍的,門檻低的全民健身運動,在諸多方面對人體有益,但是過多運動也會對人體產生損傷,因而有效計步顯得十分重要。計步器可以記錄步行的步數,在孕婦健康管理、體育教學、反映能量消耗、增強運動等方面發揮著巨大的作用。微機電系統(Micro-electro Mechanical Systems, MEMS)以體積小、重量輕、功耗低、耐用性好、價格低廉等優點廣泛應用于智能手機傳感器模塊中。目前大多數計步算法都是圍繞加速度實現的,而智能手機內置的加速度傳感器能夠方便獲取加速度。

對于精確計步問題,很多學者已經進行了研究,涌現出了很多方法。

文獻 [1] 提出多級自適應門限計步算法,先檢測加速度信號中的峰值點和谷值點,接著基于獲得的峰值點和谷值點,計算人物的步頻特征,根據所得步頻特征判斷人物的運動狀態,最后,針對每種運動狀態,自適應分配對應的時間差閾值和動態峰谷值差值閾值,實現多級自適應。該算法的準確率能達到95%以上,但對波峰或者波谷的檢測準確度要求很高。文獻 [2] 提出了一種基于加速度傳感器的自適應計步算法,通過對加速度傳感器采集的信號數據進行一系列處理,然后利用人工免疫算法對處理后提取的特征值進行判斷,確定人的運動狀態,再進行計步。該算法改進了特征值提取方法,摒棄了傳統的貝葉斯分類算法,采用人工免疫分類算法有效地提高了計步的準確率,但是運動狀態的判定對樣本數據庫有較強的依賴性。

文獻 [3] 設計了一種基于MPU6050加速度傳感器的自適應采樣計步器,該計步器通過MPU6050加速度傳感器采集步態信號,運用滑動濾波算法對傳感器輸出的數字步態信號進行濾波與降噪處理,采用動態閥值算法對行人的跑步和走路兩種狀態進行自動識別,并根據人體不同的運動狀態自動調整采樣速率,計步精度可以達到95%以上。文獻 [4] 利用MEMES-IMU多種特征值,提出了行走和跑步的兩種步態檢測算法。在行走狀態下,采用加速度、角速度,足部著地和跨步時間的多條件約束實現零速區間檢測。在跑步狀態時,通過步伐探測和跨步探測的方法,并結合多條件約束,實現零速區間檢測。檢測精度達到99%以上,但未將行走狀態與跑步狀態算法統一。

針對以上算法出現的問題,本文提出了基于加速度的門限檢測算法,在波谷檢測算法的基礎上改進和優化。算法運用卡爾曼濾波算法對傳感器輸出的步態信號進行濾波和降噪等預處理,然后根據狀態門限閾值判定行人的運動狀態,比如跑步、行走或者靜止,針對不同的運動狀態分別設置步頻時間差閾值和峰谷值時間差閾值,滿足閾值條件則計步。該算法計步精度可以達到96%以上,可以有效應用于計步器、室內定位等領域,測量不同狀態下的步數,滿足工程應用的需求。

2. 計步原理

步態周期可以分為支撐期和擺動期,是指行走過程中一側足跟著地至該側足跟再次著地時所經過的時間 [5]。

如圖1所示,在一個步態周期中,人由于大腿的擺動,垂直加速度先增大后減小,前向加速度在邁步過程中增大,在提腳過程中減小。

通過Android手機的三軸加速度傳感器獲取手機坐標系(如圖2(a)所示,x軸沿手機左右方向,y軸沿手機上下方向,z軸沿垂直于手機屏幕的方向)下的加速度數據,如圖2(b)所示。加速度數據的變化可以反映出行人運動的全過程,因而基于加速度的算法實現計步是可行的。

Figure 1. The law of acceleration change during a gait cycle

圖1. 一個步態周期過程中加速度變化規律

Figure 2. Acceleration changes in the mobile phone coordinate system and a gait cycle

圖2. 手機坐標系和一個步態周期里加速度變化

3. 算法設計

3.1. 預處理

acc_z (z軸加速度)盡管能夠反映出行人運動的加速度變化,但是單軸加速度對噪聲的抗干擾能力較差,不穩定.在實際生活中,行人握持手機的姿勢或者手機的擺放位置不盡相同,而且手機加速度的方向與行人行走方向并不相同。對此,大部分研究采用三軸合一加速度,如公式(1)所示:

(1)

其中acc_x表示側向加速度,acc_y表示垂直加速度,acc_z表示前向加速度 [5]。

三軸合一的加速度結果如圖3所示。

Figure 3. Three-axis combined acceleration

圖3. 三軸合一加速度

3.2. 卡爾曼濾波

在數據的采集過程中,由于傳感器的噪聲和手機的擺動或者與衣服的摩擦,不可避免會產生錯誤的數據(如圖4(a)所示),因此需要對采集的數據進行濾波,矯正錯誤的數據.本文采用卡爾曼濾波算法 [6]。

圖4(b)是經過卡爾曼濾波后的波形圖,從圖中可以看出卡爾曼濾波模型有效地消除了偽波峰或波谷,提高了計步的準確性,同時也使得波形更加平滑,趨近于實際加速度的變化趨勢。

(a)

(b)

Figure 4. (a) Before Kalman filtering; (b) After Kalman filtering

圖4. (a) 卡爾曼濾波前;(b) 卡爾曼濾波后

3.3. 門限檢測計步算法

傳統的波峰波谷計步算法由于只檢測峰值或者谷值對噪聲抗干擾能力較弱,當濾波過程中無法完全消除偽波峰或者偽波谷,那么就會出現多次計步的情況,降低計步的準確性。本文在傳統波峰波谷計步算法上做出改進,兼顧波峰和波谷檢測,同時引入波峰時間自更新,避免由于行人停留使得相鄰兩波峰或波谷的時間差大大超過閾值而無法計步的情況,有效提高了計步的準確性。

3.3.1. 狀態門限閾值設置

行人在慢走、快走或者跑步過程中的步頻是不一樣的,一步所需的時間也不同,因而在計步前需要判斷行人的運動狀態。本文區分靜止、行走和跑步這3中狀態,約定靜止狀態state = 0,行走狀態state = 1,跑步狀態state = 2。為描述狀態判斷的過程,引入如下符號:

still_peak:靜止時加速度的峰值最大閾值,即行走時加速度的峰值最小閾值;

walk_peak:行走時加速度的峰值最大閾值,即跑步時加速度的峰值最小閾值;

still_valley:行走時加速度的谷值最小閾值,即行走時加速度的谷值最大閾值;

walk_valley:行走時加速度的谷值最小閾值,即跑步時加速度的谷值最大閾值;

在8個歷元的滑動窗口中取出最大值Max和最小值Min (一般重力加速度g取9.8 m/s2,滿足最大值大于重力加速度,最小值小于重力加速度),狀態轉移方程如(2)所示:

(2)

如圖5所示,行人在不同狀態運動時,峰值和谷值都有明顯的差別,對人行走和跑步時的數據多次采樣,繪制加速度幅值分布情況圖,由實驗統計結果可知:行人在正常行走情況下加速度峰值幅值分布在[1.1 g, 2 g],谷值幅值分布在[0.4 g, 0.9 g]的比重達到98%以上;跑步狀態下加速度峰值幅值大于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. 不同運動狀態下的加速度波形

狀態判定函數Judge_State()的偽代碼如下。

Dim state AS INTERGER

state=1

input(acc)

if acc<9.8 Then

do 狀態轉

Endif

if acc>9.8 Then

do 狀態轉移

Endif

3.3.2. 時間差門限閾值設置

通常情況下,正常人行走的頻率為1~2.5 Hz,跑步時的頻率不超過5 Hz,所以設置行走時的時間差門限閾值為[0.4 s, 1 s],設置跑步時的時間差門限閾值為[0.2 s, 0.5 s];記行走時相鄰兩波谷的時間差為delta_1,跑步時相鄰兩波谷的時間差為delta_2,通過檢測delta_1或者delta_2是否在門限閾值范圍內進行一次判斷,如果小于閾值下限,表示存在偽波谷(如圖6波谷2所示,波谷2中兩個波谷的時間差小于閾值),如果大于閾值上限,可能行人停止行走或休息,此時需要更新前一個谷值時間,避免影響后續計步。

Figure 6. Two types of pseudo-valley

圖6. 兩種偽波谷類型

記相鄰的波峰與波谷的時間差為delta;如圖6所示,盡管波谷1達到閾值要求,但是波峰1沒有達到閾值要求,在計步過程中并不能計成一步,因而需要通過delta來進行二次判斷消除這種情況的偽波谷的影響。錯誤率與delta的關系如圖8所示,當delta取值過小,會導致一步內波峰與波谷的檢測時間差過小,從而忽略如慢走的步數,降低了計步準確性;當delta取值過大,會導致本次判斷失效,不能消除圖6中偽波谷1。根據實驗數據的統計,如圖7所示,當delta取0.4時,錯誤率最低即計步的準確率最高。

Figure 7. Relationship between step error rate and delta

圖7. 計步的錯誤率與delta的關系

閾值判斷的峰值和谷值盡管在窗口里是最值,但仍需判斷是否是前后鄰域的最值,窗口兩側的最值不滿足要求,需要摒棄,這是第三次判斷.當三次判斷都滿足條件時,計步并更新前一個谷值時間,進入下一輪讀取,算法偽代碼如下所示。

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. 實驗與結果分析

4.1. 實驗設計

為了獲取行人在運動過程中握持Android手機時的加速度,編寫了一款APP讀取三軸加速度的數值.選取物聯網工程學院寬闊的走廊作為實驗的場地(如圖8所示),便于實驗。

Figure 8. Experimental corridor

圖8. 實驗走廊

實驗使用的手機是HUAWEI Honor 10,系統為Android9.0.1。實驗區別靜止、行走和跑步三種狀態,每種狀態均采用門限檢測計步算法,采集三組數據,每組數據的實際步數都是100步。

4.2. 實驗結果分析

經過行人運動時加速度數據的采集,預處理,濾波,計步算法等過程進行了隨機測試,測試的結果如表1所示。通過門限檢測算法可以有效實現計步,行走狀態下的準確率可達100%,最低為93%;跑步狀態下的準確率可達99%,最低為95%;靜止狀態下的行人可以100%識別;在實際生活應用中可以作為室內定位或者計步器的一部分,準確提供行人的步數信息。

Table 1. Step detection results

表1. 步數檢測結果

4.3. 與傳統波峰檢測算法比較

文獻 [7] 采用傳統峰值檢測實現計步,選取統一的時間窗口[0.2 s, 2 s],比較上一峰值與此峰值的時間間隔,如果處于時間窗口內,則視為有效信號。此算法對噪聲的抗干擾能力較弱,只能一次性計步,計步過程中不能過長停留,否則會形成累積誤差,無法計步。如圖9所示,紅線以上部分均達到峰值要求,計步是前3個峰值計步有效,但第三個與第四個峰值間有較長的時間間隔,且超過時間閾值,第四個峰值以及往后的峰值都是無效的。

Figure 9. Results of step counting in [7]

圖9. 文獻 [7] 計步結果

對于本文的算法和文獻 [7] 的算法分別進行10次行走和跑步測試.將2種算法計算的總步數與實際行走的步數進行比較,可以得到如圖10所示的誤差比較。

由圖10可知,測試10次之后,文獻 [7] 傳統峰值檢測算法計算出的總步數與實際的步數誤差較大,跑步狀態下步態周期短,誤差范圍大于等于3%占比60%,均在5%以內。行走狀態下步態周期相對變長,此時誤差范圍大于等于3%占比90%,大于等于5%占比60%。而本文算法測試10次,跑步狀態下誤差范圍大于等于3%占比30%,均在5%以內。行走狀態下誤差范圍大于等于3%占比30%,均在5%以內。由實驗結果表明:本文的算法優于傳統的峰值檢測算法,有效地提高了計步的精度。

Figure 10. Experimental error comparison

圖10. 實驗誤差比較

5. 結束語

本文討論了基于加速度的門限檢測計步算法,在傳統的波峰波谷檢測算法的基礎上做出改進,提高了計步的準確性。本文也討論了卡爾曼濾波原理,對原始的加速度數據進行過濾,降低了噪聲的干擾。在狀態判斷的基礎上進行三次門限檢測有效對偽波峰和偽波谷起到抑制作用。實驗表明本算法能夠滿足計步器、室內定位等方向的精度要求,在此后的工作里,我們團隊將致力于濾波方法的改進,進一步提高精度,降低噪聲對實驗的影響。

參考文獻

總結

以上是生活随笔為你收集整理的android 计步器acc,基于加速度的门限检测计步算法设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。