Как установить частоту дискретизации акселерометра и гироскопа 50 Гц на Android?

Я хочу хранить данные, собранные акселерометром и гироскопом телефона Android. В частности, я хочу сэмплировать их на частоте 50 Гц, ни больше, ни меньше.

Как я могу указать это на Android Java?

Я видел другой пост, где они используют:

 mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);

Что принимает как максимальное количество образцов, которые датчики могут. Хотя иногда мощность датчиков может превышать 50 Гц, как я могу взять только 50 Гц?


person RabbitBadger    schedule 27.02.2020    source источник


Ответы (1)


Согласно в документации можно указать "желаемую задержку между событиями в микросекундах", так должно быть:

 mSensorManager.registerListener(this, mAccelerometer, 20000); // 20000 = 50Hz in microseconds

изменить: в соответствии с документацией:

События датчика скорости доставляются в. Это только намек на систему. События могут быть получены быстрее или медленнее указанной скорости. Обычно события принимаются быстрее. Значение должно быть одним из SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME или SENSOR_DELAY_FASTEST или желаемой задержкой между событиями в микросекундах.

Кажется, нет никакого способа быть точным, по крайней мере, с этим API.

person Vitor M. Barbosa    schedule 27.02.2020
comment
но будет ли эта задержка пропорциональна возможности выборки каждого сенсорного устройства? - person RabbitBadger; 27.02.2020
comment
Я имею в виду, что я буду запускать приложение на обычном устройстве. Его частота дискретизации также может составлять 50 Гц, что означает, что если установить задержку на 20000, частота дискретизации будет 25 Гц? - person RabbitBadger; 27.02.2020
comment
@RabbitBadger это желаемая задержка между событиями, поэтому она должна быть абсолютным значением, но, как указано в документации, это всего лишь подсказка. - person Vitor M. Barbosa; 27.02.2020