试图了解加速度计传感器的官方 Android 文档。那里说:
显然,为了测量设备的真实加速度,必须消除重力的影响。这可以通过应用高通滤波器来实现。相反,可以使用低通滤波器来隔离重力。
过滤器的代码是:
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];
}
好的。假设我以 6 m / s^2 的加速度将设备纵向推向天空。我认为在那种情况下我应该得到类似[0, 15, 0]
in 的东西event.values
,对吧?
因此,当我在 Excel 中将此过滤器应用于 20 个点时,结果gravity
往往等于[0, 15, 0]
并linear_acceleration
旨在[0, 0, 0]
.
我错过了什么?
PS我知道TYPE_GRAVITY
,只是想理解数学。
PPS 另外,为什么TYPE_GRAVITY
传感器y
在纵向模式下返回正值(+9.806)?不应该-9.806
取而代之吗?