2014-11-21 24 views
0

我正在研究一種半增強現實應用,其中平滑和準確的數據非常重要。傳感器返回的值在0到4度之間跳躍,不幸的是它使生活變得困難。如何使android compas傳感器變得光滑

我已經嘗試實現一個臨時解決方案:

private float[] Total = new float[11]; 
private float Average(){ 
    if (counter == Total.length - 1) { 
     counter --; 
     for (int i = 0; i < Total.length - 1; i++) { 
      Total[i] = Total[i + 1]; 
     } 
    } 
    float tot = 0; 
    for (int i = 0; i < Total.length - 1; i++) { 
     tot = tot + Total[i]; 
    } 
    return tot/counter; 
} 

但是這不符合我的需要的任何建議或幫助?

+0

我認爲有精度爲每個傳感器讀這http://developer.android.com/guide/topics/sensors/ sensors_overview.html#sensors-monitor – 2014-11-21 12:30:17

回答

0

您在FIR實施中使用移動均值過濾器。儘管簡單,但移動平均濾波器對於一項常見任務來說是最佳的:降低隨機噪聲,同時保持急劇的階躍響應。

FIR實現的一個缺點是計算時間隨着濾波器的大小而增加。您可以考慮在IIR過濾器中實施過濾器,但對於這個簡單的應用程序,我不會推薦它。

另一個改進可能是使用window function來最小化邊緣效應。

您可以使用漢明窗口中找到一個低通濾波器的一個很好的例子here

+0

我現在只上完了學校,並閱讀了你提到的那些過濾器。我無法理解它將如何實現,因爲目前我使用的Float數組會一直充滿新數據,所以它在iir上工作,除非我理解錯誤。我會很感激,如果你可以幫助我在一個更簡單的方式,或者也可以用一個例子:) ty – 2014-11-21 12:48:36

+0

我正在爲你寫一個例子:) – mach 2014-11-21 12:51:49

+0

我明白你爲什麼說它不被推薦。需要很多處理能力才能將其添加到我的應用程序中。幸運的是,窗口函數給了我一個想法,即拋棄非正常的讀數並減少找到平均值所需的範圍。 – 2014-11-21 13:20:51