智能手機計步算法c語言實現,【轉載】智能手機計步器算法的實現

在的智能手機嵌入了一些微小的傳感器,比如重力傳感器、光傳感器、聲音傳感器等。如何有效地利用這些傳感器來開發一些應用,是一個值得深入研究的課題。比

如開發醫療健康的應用、運動量監視器等。本文采用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

加速度大小,值為a4c26d1e5885305701be709a3d33442f.png,類型為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附近變化。

a4c26d1e5885305701be709a3d33442f.png

圖 1. Length字段波形圖

特征提取

由于收集的數據包含有噪聲,特別是在兩個動作切換之間Length字段值的波動比較大,比如慢走和上樓梯的過程。這里使用快速傅里葉變換(FFT)來處理Length字段的數據,波形圖如圖2。縱軸已向下平移9.8。

a4c26d1e5885305701be709a3d33442f.png

圖 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毫秒)之內

a4c26d1e5885305701be709a3d33442f.png

圖 3. 模型滿足的條件

步數識別

我們把建立的模型用來檢驗在坐的士環境下所采集的數據,波形圖如圖4.

a4c26d1e5885305701be709a3d33442f.png

圖 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毫秒。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260045.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260045.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue點擊按鈕怎么跳轉圖片_vue-router組件里面點擊一個按鈕跳轉到一個新的組件該怎么實現...

展開全部直接修改地址欄中的路由地址即可&#xff1a;{{msg}}var testLogin Vue.component("login",{template:這是我的登錄頁面})var testRegister Vue.component("register",{template:這是我的注冊頁面})//配置路由詞典//對象數組const myRoutes [//…

Arduino教程資料匯總(8月22日悄悄跟新了一下)

http://www.geek-workshop.com/thread-985-1-1.html 本帖最后由 迷你強 于 2013-8-31 12:36 編輯 F-101 arduino基礎套件使用資料 Arduino入門教程--課前準備--Arduino驅動安裝及1.0 IDE菜單介紹Arduino入門教程--第一課--板載Led閃爍實驗Arduino入門教程--第二課--第一次面包板…

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

日期&#xff1a;2013-2-4 來源&#xff1a;GBin1.com 不管你以前在web頁面布局中如何稱呼它們 - “區域”還是“塊”&#xff0c;我們一直都在布局中將頁面分成可視的不同區域。但真正的問題在于我們并沒有使用任何正確的工具來實現。一般情況下我們使用典型的網格來劃分頁頭…

CoreAnimation —— CAReplicatorLayer(拷貝圖層)

2019獨角獸企業重金招聘Python工程師標準>>> CAReplicatorLayer是一個layer容器&#xff0c;會對其中的subLayer進行一些差異處理&#xff08;它的子layer都可以拷貝&#xff09; 屬性&#xff1a; //拷貝的次數 property NSInteger instanceCount; //是否開啟景深效…

c語言用數組寫密碼程序,想程序高手求助--用C語言來編輯一個輸入密碼的程序...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/*--------實現密碼的隱式輸入-----------------*/inputpw(char *password,int len) /*len為密碼長度*/{int i0; /*密碼數組索引值,同時也表示記錄已顯示*的數目*/char ch;fflush(stdin); /*清洗流&#xff0c;以防妨礙密碼正確輸入…

ps流 轉發_RTP協議全解析(H264碼流和PS流)(轉)

&lbrack;LeetCode&rsqb; Arranging Coins 排列硬幣You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...使用Jenkins可持續集成maven項目首先下載最新的Jenkins的war包,放在tomcat的webapps的目錄下,然后運行,例…

android 接收短信代碼,短信接收功能實現的代碼

其中包含了widget必備的要素以及對應文件分別為&#xff1a;appwidgetprovider--------------------------SmsWidget.javawidget的config--------------------------SmsWidgetConfig.javawidget引發的app-------------------------SmsAider.javaappwidgetproviderinfo---------…

使用MeanJS Yeoman Generator

1、首先全局安裝該生成器 sudo npm install -g generator-meanjs 2、為項目創建一個路徑 mkdir xmen && cd xmen 3、創建app yo meanjs 根據提示&#xff0c;輸入應用名&#xff0c;描述&#xff0c;關鍵詞&#xff0c;是否創建crud例子。。 4、運行app sudo NODE_ENVd…

Entity Framework With Oracle

雖然EF6都快要出來了&#xff0c;但是對于Oracle數據庫&#xff0c;仍然只能用DB first和Model First來編程&#xff0c;不能用Code First真是一個很大的遺憾啊。 好了&#xff0c;廢話少說&#xff0c;我們來看看EF中是如何用DB first和Model First來對Oracle編程的。 首先我們…

(三)Maven倉庫介紹與本地倉庫配置

1.Maven本地倉庫/遠程倉庫的基本介紹 示意圖&#xff1a; 本地倉庫是指存在于我們本機的倉庫&#xff0c;在我們加入依賴時候&#xff0c;首先會跑到我們的本地倉庫去找&#xff0c;如果找不到則會跑到遠程倉庫中去找。對于依賴的包大家可以從這個地址進行搜索&#xff1a;http…

大數據時代下的遷移學習_繼深度學習后,下一個熱點技術是遷移學習

最早提出大數據時代到來的是知名咨詢公司麥肯錫&#xff0c;麥肯錫稱&#xff1a;“數據&#xff0c;已經滲透到當今每一個行業和業務職能領域&#xff0c;成為重要的生產因素。人們對于海量數據的挖掘和運用&#xff0c;預示著新一波生產率增長和消費者盈余浪潮的到來。”其實…

手機廣告投放(phone advertising)唯一標識

手機標示&#xff0c;為了識別用戶&#xff0c;方面advertising。 使用設備id&#xff0c;相當于暴露用戶隱私。慢慢已不允許使用。、 &#xff08;長時間跟蹤用戶無異于暴露用戶隱私&#xff0c;雖然大量數據適合興趣建模&#xff0c;廣告個性化推薦。但復雜多樣會降低總體的準…

android分辨率比例成像,像素不是唯一 決定成像效果你必知的真相

像素并不是唯一如今不少人在選購一部手機時&#xff0c;非常重視手機攝像頭的像素大小&#xff0c;因為一部高像素的手機可以為不少喜愛拍照的人省去買單反的費用&#xff0c;而且攜帶起來也非常方便。不過&#xff0c;手機并不能與專業的單反相機相比&#xff0c;成像效果并不…

vim——打開多個文件、同時顯示多個文件、在文件之間切換

打開多個文件&#xff1a; 1.vim還沒有啟動的時候&#xff1a; 在終端里輸入 vim file1 file2 ... filen便可以打開所有想要打開的文件 2.vim已經啟動 輸入 :open file 可以再打開一個文件&#xff0c;并且此時vim里會顯示出file文件的內容。 同時顯示多個文件&#xff1a; :s…

Android底部導航欄實現(一)之BottomNavigationBar

BottomNavigationBar這個控件的使用之前已經寫過&#xff0c;這里不再贅述&#xff0c;詳情請參考BottomNavigationBar的使用。 下面直接上代碼&#xff1a; 初始化及相關設置&#xff1a; mBottomNavigationBar (BottomNavigationBar) view.findViewById(R.id.bottom_navigat…

jq 組裝數組_Jquery 數組操作

1、數組的創建var arrayObj new Array(); //創建一個數組var arrayObj new Array([size]); //創建一個數組并指定長度&#xff0c;注意不是上限&#xff0c;是長度var arrayObj new Array([element0[, element1[, ...[, elementN]]]]); 創建一個數組并賦值要說明的是&…

android 官方說明文檔,Android官方文檔翻譯-Accessibility

標簽元素向用戶提供解釋每個可互動元素的意義和目的有用且形象的標簽是非常重要的。這些標簽允許屏幕閱讀者(比如 TalkBack )正確向用戶解釋每個控制器的功能。你可以使用一下兩個方法提供元素的標簽&#xff1a;當展示在 Activity 的整個生命周期中都不會改變樣式的靜態元素時…

USACO 2.4.1 The Tamworth Two

牛和農夫按照固定的走法在10x10的地圖中走&#xff0c;每分鐘走一步&#xff0c;求經過幾分鐘相遇。永遠不能相遇輸出0. 純模擬的題。 判斷永遠不能相遇的方法是如果遇到了一個先前的狀態&#xff0c;那么肯定存在循環&#xff0c;必定不能相遇。 程序中把狀態表示為牛和農夫的…

013,spring boot下JedisCluster客戶端的配置,連接Redis集群

2019獨角獸企業重金招聘Python工程師標準>>> 1&#xff0c;pom依賴添加&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <type>jar</typ…

android控件使用大全,Android常見控件使用詳解

本文實例為大家分享了六種Android常見控件的使用方法&#xff0c;供大家參考&#xff0c;具體內容如下1、TextView 主要用于界面上顯示一段文本信息2、Button 用于和用戶交互的一個按鈕控件//為Button點擊事件注冊一個監聽器public class Click extends Activity{private Butto…