2011-10-29 10 views
0

私はAndroidのセンサーの読み取りレートに少し戸惑っています。以下のコードは〜53 msの遅延を報告します(ZTE Blade、レートセンサーイベントはSENSOR_DELAY_FASTESTに設定されています)。Android:onSensorChangeサンプリングレートを制御する方法

public void onSensorChanged(SensorEvent event) { 
synchronized (this) { 
    switch (event.sensor.getType()) { 
    case Sensor.TYPE_MAGNETIC_FIELD: 
    TimeNew = event.timestamp; 
    delay = (long)((TimeNew - TimeOld)/1000000); 
    TimeOld = TimeNew; 
    Log.d("Test", delay + " ms"); 
    break; 
    } 
    } 
    } 

ログ:

DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 53 ms 
DEBUG/Test(23024): 54 ms 
DEBUG/Test(23024): 56 ms 
DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 55 ms 
DEBUG/Test(23024): 52 ms 

我々は100個のサンプルを言う平均して、データを保存したい場合は、それぞれ100番目のサンプルの間の時間が大幅に変化します。これは、センサーの値が定期的に変化していないためと考えられます。

でも、何か不足していますか? (もっと)定期的な測定値(例えば100ミリ秒)を得る方法はありますか?あるいは、私はサンプルの代わりに特定の期間にわたって平均化するべきでしょうか?

また、50msはちょっと長いようです。それはデバイスのハードウェアの制限ですか?この数はプラットフォームによって異なりますか?

アドバイスありがとうございます。

答えて

1

私は、いくつかのサンプルではなく一定の期間にわたって平均します。ナンバーベースのアプローチを使用する場合、異なるデバイス機能を持つ異なるデバイスでは、実質的に異なる結果が生じることが予想されます。サンプリングをより定期的に管理したいのであれば、私はおそらくイベントからテストを切り離し、あなたが望む任意の周波数でデバイスをポーリングするだけです。

関連する問題