簡體   English   中英

Android磁力計采樣率提高/抖動減少

[英]Android magnetometer sampling rate improvement/jitter reduction

我想就磁力計的采樣率和抖動問一些幫助。 我正在與一些涉及高速磁場采樣應用的人一起開展項目。 盡管我們已經開發出一種算法來解決我們遇到的抖動和其他問題,但我們還是希望以某種方式提高采樣率,同時盡可能地嘗試減少采樣抖動。 提高采樣率將使我們能夠為我們的應用取得更好的結果。 我們正在使用三星Nexus S,根據我們進行的測試,我們觀察到采樣率在15ms到20ms之間,有時高峰時間約為50ms(這是在連續事件之間)。

我們采用不同的方法來嘗試開發這些問題的解決方案,但到目前為止沒有任何成功。 首先,我們考慮修改當前的磁力計(AK8973)設備驅動程序,但我們很快意識到瓶頸不可能,因為設備驅動程序直接實現了正確的傳感器操作模式,數據讀取和尊重傳感器硬件時序約束。 作為第二種選擇,我們使用Android NDK開發了一個小代碼來獲取樣本,以比較連續事件之間(即樣本之間)獲得的時間與Java級別開發的代碼。 可悲的是,結果幾乎是一樣的。 作為最后的替代方案,我們目前正在嘗試理解API如何處理事件並將其傳遞給Java。 也就是說,如果存在瓶頸,我們會嘗試更改代碼來解決問題。 但是,我們不確定瓶頸是否在底層硬件或軟件API中。

我們用於NDK的代碼基於Android文檔(NativeActivity)提供的示例以及我們通過Google搜索(google組和其他文章)遇到的一些其他示例。 我們發現的文章非常有趣( Native SamplingSensor Sampling Performance )。 盡管據報道本機采樣可以提供更好的性能,但在我們的情況下似乎並未發生。

我們想知道是否真的可以獲得更高的采樣率,或者是否有人已經開發出解決方案。 是軟件或硬件級別的瓶頸嗎? 在上面引用的文章中,提到自定義庫(FreeMotion)能夠提供更好的性能結果,作為原始傳感器庫的替代,因為它直接與驅動程序一起使用。 有沒有人之前使用過這個圖書館,如果是的話,你可以向我們提供你的結果嗎?

使用另一款智能手機,三星Galaxy Nexus,我們決定收集更多的磁力計數據樣本並做一些統計分析,並比較三星Nexus S的結果。這次我們使用的是Android v4.1.2。 再次,我們觀察到,在將NDK與SDK API與兩個智能手機進行比較時,我們能夠收集數據的速率沒有顯着提高,分別使用ASensor_getMinDelay()SENSOR_DELAY_FASTEST的值,這些值可以提供最高性能。 然而,對於具有NDK API的智能手機而言,時間戳抖動減少非常重要,無論使用何種方法:輪詢或基於回調。 通常,輪詢提供很少或沒有更好的結果,並且應該更加CPU密集。

三星Galaxy Nexus傳感器硬件非常優越,因此可以自然地將速率調整到所需的事件速率,高於ASensor_getMinDelay() 然而,對於三星Nexus S來說,這是不可能的; 對於較低的速率,不滿足目標速率並且以甚至更慢的速率獲取樣本。 激活多個傳感器,整體抖動降低幅度大於僅使用單個傳感器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM