Java 消除加速度计读数的重力效应

Java 消除加速度计读数的重力效应,java,android,accelerometer,Java,Android,Accelerometer,我正在开发一个应用程序,其中我使用了加速计来感应线性加速度,但经过一段时间后,我知道加速计不会显示线性加速度(也会对其产生重力效应) 所以为了消除重力,我尝试了一些方法,得出结论,我必须设计一个过滤器 为了设计过滤器,我尝试了以下代码 public void onSensorChanged(SensorEvent event) { // alpha is calculated as t / (t + dT) // with t, the low-pass filter'

我正在开发一个应用程序,其中我使用了加速计来感应线性加速度,但经过一段时间后,我知道加速计不会显示线性加速度(也会对其产生重力效应)

所以为了消除重力,我尝试了一些方法,得出结论,我必须设计一个过滤器

为了设计过滤器,我尝试了以下代码

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];
 }
这是从

现在我在上面的代码中遇到了一些问题:

  • 什么是alpha,t和dt
  • 如何得到t和dt的值以及如何计算它们
  • 还请让我知道,我用于获得线性加速度的代码是否有效

  • 这种方法是“阻尼”传感器值的变化。它叫。在一个快速变化的变量中,您可以通过获取最新的值并让它计算分数(alpha)来找到平均值的估计值

    此算法使用此过滤器查找常量,该常量“必须”为重力。总加速度=重力+瞬时加速度,因此可通过
    event.values-gravity
    计算瞬时加速度


    除非你在不断加速(火箭发射、高速公路上加速等),否则这是有效的。α因子告诉您“平均值”变化的速度,当您想要测量变化更快的加速度时,它需要更大。这可以通过术语
    dt
    反映出来:当相对于滤波器时间常数较小(较高的事件率)时,alpha变大。时间常数告诉你波纹效应在平均值中衰减的速度。

    “我知道加速计不显示线性加速度”--不包括重力效应。我也使用过,但效率不高。你是什么意思,无效?无效是指当我在应用程序中使用时,有时它不会显示加速度的任何变化。那么t和dt呢?