Расчет значений DeviceMotionEvent для Android - PullRequest
0 голосов
/ 13 января 2012

Я хотел бы использовать значения, которые AndroidEvent SensorEvent предоставляет , чтобы вычислить те же значения, которые указаны для DeviceMotionEvent .

Моя проблема - часть в документации Android, которая относится к Gx, Gy, Gz:

 public void onSensorChanged(SensorEvent event)
 {
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }

Какими должны быть значения массива gravity, на который ссылается этот код? В нем также упоминается alpha, но я до сих пор не понимаю, что это / представляет, как работает уравнение (Что такое фильтр нижних частот? Как вы определяете «постоянную времени»? Какова «скорость доставки») даже измерения?), или почему он даже был установлен (совершенно произвольно) на 0,8.

Мне явно не хватает физического факультета, но я понимаю математику. Поэтому, если кто-то будет так любезно объяснить физические причины, я был бы очень благодарен. Я знаю, что на страницах, на которые я ссылаюсь, есть объяснения терминов, но они все еще не имеют никакого значения в моем уме, за исключением того, что термины соответствуют картинкам, по осям которых устройство ускоряется или вращается вокруг.

1 Ответ

2 голосов
/ 13 января 2012

Это цифровой фильтр нижних частот. Он используется для простого устранения вибраций (высокочастотных сигналов).

Альфа находится между 0 и 1. Чем выше альфа, тем больше вибраций удаляется (вы больше доверяете историческим значениям гравитации), с другой стороны, значение гравитации сильно задерживается.

У вас есть больше информации здесь: http://en.wikipedia.org/wiki/Low-pass_filter, посмотрите раздел реализации с дискретным временем.

...