謝俊松 陳浩強 孫澤宇



摘要:目前運動強度大多數都是以心率為評級標準,對于普通運動愛好者來說操作復雜、設備成本高。針對上述問題,該文設計一種基于Android內置G-senor和步頻的運動強度分析系統,系統采用步頻作為運動強度評級標準,而步頻可以根據采集到的G-senor三軸加速度通過計步算法得到。該系統具有操作簡單、成本低等特點,可以讓普通運動愛好者能夠直接通過手機App實時查看自己的運動強度,指導科學健身。
關鍵詞:G-senor; Android;步頻;運動強度;計步
中圖分類號:TP311.5? ? ? 文獻標識碼:A
文章編號:1009-3044(2020)23-0012-04
Abstract: At present, most of the exercise intensity is based on heart rate, which is a complex operation and high equipment cost for ordinary sports enthusiasts. To solve the above problems, a motion intensity analysis system based on Android built-in G-sensor and step frequency is designed. The system uses step frequency as the exercise intensity rating standard, and the step frequency can be obtained through the step algorithm according to the collected G-sensor triaxial acceleration. The system has the characteristics of simple operation and low cost, which enables ordinary sports fans to view their exercise intensity directly through mobile app in real time and guide scientific fitness.
Key words: G-senor; android; step frequency; exercise intensity; step counting
1 背景
近年來,隨著生活條件的日益改善,人們越來越注重健康,運動作為保持健康身體有效方式之一也受到很多人的青睞[1]。文獻[2]調查了體育運動對慢性病的影響,最后得出科學的運動習慣和健康的生活方式對慢性病的影響不容忽視的結論。而過度的運動對身體則是有害的,文獻[3]指出跑步愛好者超過50%的人下肢發生過損傷,多數是由于高強度、長時間運動,沒有科學健身。
隨著移動互聯網的發展,市場上出現了越來越多的運動類軟件和硬件產品,如keep、咕咚、微信運動、小米手環和華為手表等。這些產品要么沒有給出運動強度實時提醒,要么產品價格昂貴,需要購買另外的硬件設備,對普通運動愛好者來說難以承受。比如微信運動只能看到步數,看不到步頻,更沒有運動強度提醒。針對上述問題,本文基于Android內置的G-senor(重力加速度傳感器),采集x、y和z軸三個方向的加速度,通過計步算法得到步頻,依據步頻對運動強度劃分5個等級,監測分析用戶運動過程中的運動強度,當其超過某個設定的等級后提醒用戶,及時調整運動。
2 運動強度分析系統設計
2.1 總體設計
該系統設計的目的是讓用戶看到自己的實時運動強度,如果強度過大則需要提醒用戶。每次運動過后還需要保存記錄,方便用戶后續查看。還需要一些自定義設置選項,比如運動強度等級,可能不同的人對應的強度是不同的,因此需要讓其可以自定義一些參數。
通過上述分析,App總體設計如圖1所示,主要包括三大模塊,首頁、歷史記錄和設置。其中首頁涉及的功能模塊最多,需要處理三軸加速度數據、顯示運動強度圖、統計步數步頻等。
2.2 運動強度等級設計
傳統方式評價運動強度多數是以心率為參考標準,操作復雜、設備成本高。本系統使用步頻來評價運動強度,簡單實用、設備成本低。首先需要依據步頻來劃分運動強度,確定相關標準,如表1所示為運動強度等級劃分標準。
2.3 計步算法設計
根據上節運動強度等級設計可知,首先需要實現計步,然后才能計算出步頻,進而得出運動強度。目前主流的記錄步數工具是手環,如小米手環和華為手表等[4]。Android內置G-sensor可以檢測x、y和z軸3個方向的加速度(單位m/s2),不同的運動狀態和強度會產生相應方向不同的加速度。根據文獻[5]和[6]可知,不管如何佩戴手機,總有至少一個軸具有相對較大的周期性加速度變化,稱為活躍軸。將三軸的加速度值合成一個加速度矢量|V|,計算式子為
本系統具體使用的計步算法思想如下。
1)均值濾波:通過均值濾波器實現對采集的x、y和z三軸數據的平滑處理,并將結果作為輸出。
2)動態閾值:每采集60次更新一次三軸加速度的最大值(Max)和最小值(Min),平均值(Max + Min)/2定義為“動態閾值”,它是動態變化的。通過最大和最小值可以判斷出最活躍軸,因為我們最后判斷步伐,也是根據哪個軸加速度變化最大認為哪個是活躍軸。
3)動態精度(DYNAMIC_PRECISION):用來去除高頻噪聲。移位寄存器中有兩個樣本oldData和newData,以x軸為例,采集到一個新樣本curData后,令oldData.x=newData.x,如果curData.x-newData.x的絕對值大于設定的DYNAMIC_PRECISION值,則更新newData.x的值為curData.x,否則不更新。
4)步伐判斷:判斷為一步的條件是,最活躍軸的oldData大于動態閾值,newData小于動態閾值。滿足上述條件,認為走了一步。在本文的算法實現過程中為了減少一些錯誤步數,認為連續運動大于5步才算有效步。
找到有效步后,除以時間間隔即可得到步頻,再對照表1計算出實時運動強度。根據步頻還可以區分不同的運動狀態,如走和跑,本系統設計時以步頻120(步/分鐘)為界限,以下為正常走路,以上為跑狀態。
3 App模塊設計
3.1 首頁模塊
該模塊需要顯示用戶運動狀態和運動強度等信息,當檢測到運動強度高于用戶設定的值時,給出語音提示和手機振動。語音提示功能集成了訊飛離線語音合成 Android SDK,可以將一段文字轉換成語音播放給用戶,這樣不需要停下來看手機即可聽到App的提醒,及時調整運動強度,避免不必要的身體損傷。
自定義StepService繼承自Service用來實現后臺計步并計算步頻,首先獲得加速度傳感器Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),然后注冊registerListener(SensorEventListener listener, Sensor sensor, int rate)監聽,其中采樣頻率rate使用的是SensorManager.SENSOR_DEPLAY_UI,它還有其他另外三種頻率可以設置,分別為SensorManager.SENSOR_DEPLAY_FASTEST、SensorManager.SENSOR_DEPLAY_GAME和SensorManager.SENSOR_DEPLAY_NORMAL,但對應的采樣頻率都太快,本系統使用UI級別的采樣即可滿足計步要求[7]。
運動強度圖的繪制也是該模塊的一個重點,由于Android沒有直接提供此類控件,需要自定義實現[8]。自定義SportChartView類繼承自View類,實現其onDraw()方法,此方法只有在第一次創建控件和調用invalidate()方法才會觸發。使用一個list來維護需要繪制的運動強度數據,為了降低CPU負荷同時及時處理運動數據,設計每300ms向前(從屏幕右端往左端)移動40個像素,每移動一次需要判斷是否需要繪制下一個運動狀態和強度,保證運動強度圖總是鋪滿屏幕的,同時當一個運動從最右端完全移出屏幕后,需要在list中刪除相應數據。首頁設計如圖3所示,運動強度越高,狀態圖高度也就越高。
3.2 運動記錄模塊
需要記錄用戶每次的運動詳細數據,因此需要使用SQLlite數據庫,數據庫表設計如表2所示。
用戶記錄模塊首先要展示記錄列表,這里使用Android自帶的控件RecycleView來實現,然后再為該控件設置adapter(適配器)。進入該頁面后首先從數據庫中讀取運動強度表,如果數據不為空則展示列表并按運動開始時間降序排列,為空給出“快去運動吧!”的提示。列表中展示運動的開始時間、結束時間和總時長等信息。列表頁面提供長按刪除功能,用戶對某條記錄可以進行刪除,具體實現上通過sql語句按關鍵字Id進行查找刪除。列表頁設計如圖4所示。
從用戶記錄列表進入運動詳情頁面,該頁面需要展示用戶的詳細運動信息,同時分別計算低運動強度和中低運動強度時間占比1,中高運動強度和高運動強度時間占比2。如果占比1超過50%則提示用戶適當增加運動強度,占比2超過50%提示用戶運動強度較大,建議用戶適當運動。運動詳情頁設計如圖5所示。
3.3 設置模塊
該模塊主要提供一些用戶需要自定義設置的功能。
3.3.1 運動強度等級標準
系統已經默認按表1所示設定了運動強度等級標準,用戶也可以按自己的實際情況自定義標準,使得強度檢測更符合個人特點。實現過程中使用了SharedPreferences類來存儲配置信息[9],它是一個輕量級的存儲類,特別適合用于保存軟件配置等參數。它底層實現是用xml文件存放數據,文件存放在/data/data/
3.3.2 高強度提醒
用戶可以設置步頻達到多少時,自動語音提醒。滿足了不同用戶的個性化定制需求。數據同樣使用SharedPreferences來存儲。
3.3.3 提醒時間間隔
為了避免頻繁提醒,用戶可以自己設置高強度運動提醒的時間間隔,單位為分鐘,比如設置5分鐘,表示的是每次提醒的時間間隔在5分鐘以上。
4 系統測試
4.1 計步測試
為了測試計步算法的有效性,測試者將手機分別放置在身體不同部位,然后進行行走、跑步同時記錄步數,和軟件最后的運動詳情界面記錄的步數相比較,結果如表3所示,三個不同位置和實際偏差都在5%以內,同時運動狀態的變化顯示在App上延遲大約在2秒左右,滿足系統需求。
4.2 功能測試
打開App點擊開始計時,然后進行高強度的跑步,測試軟件是否能做到實際步頻超過設定的步頻的情況能否及時提醒用戶,保持合適運動強度,健康健身。通過測試成功語音播報了提醒。最后點擊停止計時,頁面切換到運動歷史界面,列表新增了一條新的記錄,點擊打開運動詳情界面,長按點擊測試刪除功能。以上功能均通過了測試。
5 結束語
本文首先對目前存在的運動類產品進行了研究,然后提出了針對普通運動愛好者的一款依據步頻來分析運動強度的方案,隨后從系統總體設計、計步算法實現和App模塊設計等方面進行了詳細討論。通過測試,系統達到了預期的功能,能夠及時提醒用戶調整自己的運動強度,達到科學健身的目的。該系統非常適合普通運動愛好者。
參考文獻:
[1] 方旭東. 全民健身 凝聚向上向善的力量[N]. 中國體育報, 2020-05-28.
[2] 周秋菊, 王保淵, 何偉. 近年來體育運動對慢病影響的國內研究進展[J]. 四川體育科學, 2020, 39(3): 40-43.
[3] 王嘉瑛, 李令嶺, 馬梁, 等. 跑步愛好者運動損傷的調查與分析[J]. 昆明醫科大學學報, 2020, 41(1): 151-157.
[4] 苗子蕊, 吉麗娜. 健身計步器研究綜述[J]. 電腦知識與技術, 2018, 14(11): 263-264, 266.
[5] 楊潤澤. 一種節能的智能手機計步算法的研究與應用[D]. 呼和浩特: 內蒙古大學, 2019.
[6] Neil Zhao. Full-Featured Pedometer Design? Realized with 3-Axis Digital Accelerometer[EB/OL]. (2010-06-06)[2019-12-20]. https://www.analog.com/en/analog-dialogue/articles/pedometer-design-3-axis-digital-acceler.html.
[7] 丁忠成. 基于智能手機傳感器的人體行為識別技術研究[D]. 長沙: 湖南大學, 2018.
[8] 許艦. Android自定義繪圖組件的設計與實現[J]. 電腦知識與技術, 2018, 14(10): 95-98.
[9] 楊亮, 袁嵩, 蔣鵬, 等. 基于Android平臺的數據存儲機制應用研究[J]. 電腦知識與技術, 2014, 10(11): 2481-2484.
【通聯編輯:謝媛媛】