如何实时计算Java中的加速度计数据(加加速度)的时间导数?

问题描述 投票:1回答:1

[我正在尝试通过onReceive()循环Android方法中的流式加速度计数据来计算加速度(加加速度)的时间导数。

我假设,从一个传感器更新到下一个,我可以通过简单地计算增量加速度(x,y,z)和相关的增量时间来近似估算。为了确保最大的准确性,我使用了System.nanoTime()方法(并除以10e8)。

[一切似乎都很高兴,并且出现了混帐数据,但是我认为检查所有delta_time(C0)的总和是否接近sumDeltaTimelast_time之间的差是明智的。令我惊讶的是,相差了数千倍。即使将first_time替换为System.nanoTime()(除以10e2)也不会更改此差异。这是我的代码:

System.currentTimeMillis()

有人可以看到我必须做错了吗?谢谢!

java android timedelta acceleration differentiation
1个回答
0
投票

您没有在第一遍(// calculate jerk (time derivative of acceleration) accel_count++; if (accel_count == 1) { first_time = new_time = System.nanoTime() / 10e8; // captures first time value (in seconds) newAccel[0] = accel[0]; // x newAccel[1] = accel[1]; // y newAccel[2] = accel[2]; // z } else { prev_time = new_time; // assigns previous time value new_time = System.nanoTime() / 10e8; // immediately updates to the new time value (in seconds) prevAccel[0] = newAccel[0]; // x prevAccel[1] = newAccel[1]; // y prevAccel[2] = newAccel[2]; // z // set up for next iteration newAccel[0] = accel[0]; // x newAccel[1] = accel[1]; // y newAccel[2] = accel[2]; // z } float[] delta_accel; // difference in acceleration between consecutive sensor measurements delta_accel = new float[] { (newAccel[0] - prevAccel[0]), // x (newAccel[1] - prevAccel[1]), // y (newAccel[2] - prevAccel[2]) // z }; double delta_time = (new_time - prev_time); // time difference between consecutive sensor measurements (in seconds) float[] jerk; jerk = new float[] { (float) (delta_accel[0] / delta_time), // x (float) (delta_accel[1] / delta_time), // y (float) (delta_accel[2] / delta_time) // z }; total_time = new_time - first_time; // total time duration of entire recording (in seconds) sumDeltaTime += delta_time; // testing sum of deltas )上初始化prev_time,因此,第一次计算accel_count == 1时可能为0。这使第一个delta_time异常大,因为delta_time远大于0,就像new_time远大于0。

© www.soinside.com 2019 - 2024. All rights reserved.