2012-09-24 130 views
4

我想問一些關於磁力計採樣率和抖動的幫助。 我正在與一些涉及高速率磁場採樣應用的人一起開展項目。儘管我們開發了一種算法來解決我們遇到的抖動和其他問題,但我們希望以某種方式提高採樣率,同時儘可能減少採樣抖動。提高採樣率將使我們能夠爲我們的應用取得更好的結果。我們使用的是三星Nexus S,根據我們執行的測試,我們觀察到採樣率在15ms到20ms之間,有時在50ms左右(這是連續事件之間)達到峯值。Android磁力計採樣率改善/抖動減少

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

我們用於NDK的代碼基於Android文檔(NativeActivity)提供的示例以及我們通過Google搜索(谷歌組和其他文章)遇到的其他一些示例。我們發現的文章非常有趣(Native Sampling,Sensor Sampling Performance)。儘管據報道,本地採樣可以獲得更好的性能,但在我們的案例中似乎並沒有發生。

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

+0

您正試圖用一臺消費級設備替換一臺實驗室設備。除了手機的其他功能之外,您的採樣率實際上令人印象深刻。可能你可以調查一個爲你的應用設計的設備,通過USB連接到手機。您可能想要調查Arduino設備。 –

+0

感謝您的反饋。我明白你的意思。如果我正確地理解了你的話,那表明電話應該靜止不動。即使這是我們的情況之一,手機也應該可以自由移動。不幸的是,因爲它是爲終端消費者設計的消費級設備應用程序,所以我們不能依賴其他任何東西(其他硬件平臺等),而我們僅限於智能手機的功能。 – acostalima

+0

嗯。你可以根植手機,並將手機功能降至基本水平。連接網絡wi-fi並消除供應商放入後臺的垃圾任務?您可能會爲構建特定型號手機的操作系統極端化... –

回答

1

隨着另一款智能手機,三星Galaxy Nexus,我們決定收集更多的磁力儀數據樣本,做一些統計分析並比較三星Nexus S獲得的結果。這次我們使用了Android v4.1.2。再次,我們觀察到,使用分別使用ASensor_getMinDelay()SENSOR_DELAY_FASTEST的數值比較NDK與SDK API與兩款智能手機的比較,我們能夠收集數據的速度並沒有顯着提高,這些數據給出了最高的性能。但是,對於使用NDK API的智能手機,時間戳抖動降低非常重要,無論使用何種方法:輪詢或基於回調的方式。一般來說,輪詢提供的結果很少或沒有更好的結果,並且應該佔用更多的CPU資源。

三星Galaxy Nexus傳感器硬件遠遠優越,因此對所需事件速率進行細粒度調整的速度自然可能高於ASensor_getMinDelay()。對於三星Nexus S來說,這是不可能的;對於較低的利率,目標利率不能滿足,樣本以更低的利率獲得。激活多個傳感器時,總體抖動減少量大於僅使用單個傳感器。