私は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はちょっと長いようです。それはデバイスのハードウェアの制限ですか?この数はプラットフォームによって異なりますか?
アドバイスありがとうございます。