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