Android: как контролировать частоту дискретизации onSensorChange - PullRequest
0 голосов
/ 30 октября 2011

Я немного озадачен скоростью чтения сенсоров в Android.Приведенный ниже код сообщает о задержках ~ 53 мс (блейд-сервер ZTE, события датчика скорости установлены на SENSOR_DELAY_FASTEST).

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 мс)?Или, может быть, я должен пойти на усреднение по определенному периоду времени, а не по количеству выборок?

Кроме того, 50 мс, похоже, слишком много времени.Может ли это быть аппаратным ограничением устройства?Будет ли это число меняться на разных платформах?

Любой совет приветствуется.

1 Ответ

1 голос
/ 30 октября 2011

Я бы усреднил за период времени, а не количество образцов.Я ожидал бы, что разные устройства с разными возможностями будут давать существенно разные результаты, если вы будете использовать числовой подход.Если вы хотите более регулярного управления выборкой, я бы, вероятно, отключил тест от события и просто опросил устройство с любой частотой, которую вы пожелаете.

...