現
在的智能手機嵌入了一些微小的傳感器,比如重力傳感器、光傳感器、聲音傳感器等。如何有效地利用這些傳感器來開發一些應用,是一個值得深入研究的課題。比
如開發醫療健康的應用、運動量監視器等。本文采用htc Touch Pro
智能手機的重力傳感器來開發一款監視步數的程序,程序的關鍵在于計步模型的建立。由于程序算法還存在一定的問題,在本文最后的“存在問題”給出。如有問題請不吝指出。
智能手機
所
謂的智能手機是指,具有獨立的操作系統,用戶可以自行安裝第三方應用軟件,通過此類程序來對手機的功能進行擴充,并可以通過移動通訊網絡來實現無線網絡接
入的手機,它實際上就是一臺迷你的個人電腦。智能手機的操作系統主要有:Windows Mobile, iPhone,
BlackBerry, Linux等。
步數識別系統
步數識別系統是指運行在移動手機上,能夠監視用戶走了多少步的應用程序。它一般由以下3個部分構成:
· 傳感器模塊,用來采集傳感器數據;
· 特征提取模塊,處理和分析原始數據,并進行特征提取、建立模型;
· 步數識別模塊,把所提取的特征用來識別步數。
硬件設備
重
力傳感器(G-Sensor)又稱為加速度傳感器,用來感知加速度的變化,它使用三維方向的加速度分量來表示。G-Sensor被用在很多智能設備當中,
比如IBM的高端筆記本電腦內置了G-Sensor,在發生劇烈的拉動時(如跌落),立即啟動硬盤保護,避免硬盤損害。再如Apple 的
iPhone
使用G-Sensor來感知手機屏幕的方向,當在觀看視頻時手機橫放,屏幕自動跟著旋轉,這使得用戶體驗大大增加。本文采用htc Touch
Pro手機上的G-Sensor,同樣也適用于htc 其它型號的G-Sensor。
方案實現
日
常生活當中,人們使用手機一般是拿在手上,放在褲兜里,女士也經常把它放在包里。因為手機外界環境總是很復雜的,褲兜有松有緊,放在松褲兜的手機比放在緊
的更容易抖動,產生的噪音也更多。為了使該算法盡可能的適用于不同的應用環境,需要對大部分的使用環境進行測試。首先,由4個人(8個或更多也可以)各自
對不同手機使用環境進行數據收集,因為人們在同樣的場合使用手機的習慣是不一樣的。其次,對采集來的這些數據分別進行特征提取。最后,使用提取的特征模型
進行識別檢驗。
數據采集
htc Touch Pro G-Sensor提供的數據如表1所示。
表1. htc Touch Pro G-Sensor 提供的數據
字段
含義
X
加速度在手機坐標X方向的分量大小,類型為 double
Y
加速度在手機坐標Y方向的分量大小,類型為double
Z
加速度在手機坐標Y方向的分量大小,類型為double
Length
加速度大小,值為,類型為double
Xangle
加速度在手機坐標X方向的分量與地平面的夾角,范圍為 -180°~180°,類型為 int
Yangle
加速度在手機坐標Y方向的分量與地平面的夾角,范圍為 -180°~180°,類型為 int
DateTime
采樣的時間,不是G-Sensor提供的,為了方便算法計算保留采樣的時間,類型為double
本
文算法采用的采樣頻率為20HZ,采樣環境有:慢走、快走、跑步、騎自行車、坐的士、坐公交、坐電梯(上/下)、坐地鐵、上下樓梯。其中,有走路的采集走
100
步的數據(慢走、快走等),不是走路的采集1分鐘的數據。由于開始和結束的時候放置手機(放口袋、包里)會有一些波動,不是我們想要的,因此這兩個時間段
的數據可以刪去,或不考慮。手機放在口袋,收集的原始Length字段數據,在Excel
2007上繪制波形圖如圖1。橫軸為每個采樣點的索引,縱軸為Length值大小,也就是加速度大小,值在9.8附近變化。
圖 1. Length字段波形圖
特征提取
由于收集的數據包含有噪聲,特別是在兩個動作切換之間Length字段值的波動比較大,比如慢走和上樓梯的過程。這里使用快速傅里葉變換(FFT)來處理Length字段的數據,波形圖如圖2。縱軸已向下平移9.8。
圖 2. 經過FFT處理的Length字段波形圖
我
們發現上面經過FFT處理的波形表現出一定的規則,就是在一定的時間間格內總有一個波谷,我們稱這個點為“踩點”(如圖3中的1、2、3、4點),也就是
加速度最小的時刻(腳往下踩,手機相對有一個往下“掉”的過程)。另外,圖3上A點也是波谷,但這一點是一個波動點,需要排除。所以踩點還必須小于一定的
值-Threshold。當腳抬起來的時候(“起點”),身體對手機的作用力會增大,加速度也增大。所以起點必須大于Threshold,大于
Threshold的都稱為起點,因為我們只關心狀態的變化。通常地,走路的時候步與步之間的有一定的時間間隔,走快些間隔小,走慢些間隔大。如果是跑的
話,人類的極限是1秒種跑5步,也就是1步0.2秒。從起點到踩點狀態變化1次就是走了1步。所以,我們建立包含如下2個要素的模型M:
1. Length滿足一定閥值,比如 –Threshold < Length
< Threshold
2. 兩個連續踩點的時間間隔必須在Timespan (200~2000毫秒)之內
圖 3. 模型滿足的條件
步數識別
我們把建立的模型用來檢驗在坐的士環境下所采集的數據,波形圖如圖4.
圖 4. 用模型檢驗的士環境下的數據
我
們可以看到后面的一段時間是比較平穩的,前面有一些波動,這些波動導致了錯誤的識別,識別為走路。我們可以改進這個模型,增加一個約束條件:在監視了連續
k(比如3)個踩點后才開始計步,所以從圖3上標號為4的點開始計步。這樣的約束就可以把大部分的抖動給去掉。把最終的模型用來檢驗所采集的不同環境下的
數據得到的計步結果還是比較準確的。
存在問題
如 果拿著手機左右搖擺,采集的數據經過FFT
處理后的波形也符合上面的模型,但這并不是走路的狀態,產生了錯誤的計步。直覺上認為這可以通過監視Xangle,Yangle
兩個字段(在某一范圍來回變化)來預防這種情況的發生。但使用htc G-Sensor采集的這兩個字段的數據得到的效果并不好。
經驗教訓
以 上模型使用的數據只有Length字段,其它字段并沒有用到。實際上,在決定只使用 Length
字段建立模型之前,有嘗試使用Xangle,Yangle,并推導出Zangle(htc
G-Sensor沒有給出這個字段),使用這三個角度的狀態變化來輔助判斷計步。事實上這三個量的數值并不可靠,比如把手機水平放置,做左右搖擺,得到的
Xangle,Yangle 的范圍變化有超過 30°的。另外,也可以嘗試使用Samsung,iPhone
上的G-Sensor,但本文并沒有實現該想法。
總結
使
用智能手機來計步這個課題比較新穎,而且很容易實現個人健康監視的手機助理。收集不同使用環境下的數據是一個比較耗時的過程,需要由不同的人員在不同的環
境下收集。整個計步的關鍵過程在于模型的建立,而且必須滿足使用手機的任意性和處理不同環境下的噪聲。所使用的算法也比較簡單,用FFT
來處理原始數據,設立一定的閥值和時間間隔,然后監視過程的變化(踩點->起點->踩點)。其中采樣率、Length閥值和時間間隔等參數的
設置也是需要一個一個調試的,在本文的程序里采樣率為20HZ,Threshold取1,時間間隔在200~2000毫秒。