java - 应该如何实时计算加速度计数据(jerk)的时间导数(Java)?
问题描述
我正在尝试从onReceive()
循环 Android 方法中的流式加速度计数据计算加速度(加加速度)的时间导数。
我假设,从一个传感器更新到下一个,我可以通过简单地计算增量加速度 (x, y, z) 和相关的增量时间来近似这一点。为了确保最大的准确性,我使用了该System.nanoTime()
方法(除以 10e8)。
一切似乎都很愉快,并且出现了 jerk 数据,但我认为检查所有delta_time
s ( sumDeltaTime
) 的总和是否接近 和 之间的差是last_time
明智的first_time
。令我惊讶的是,差异是几千倍。即使替换System.nanoTime()
为System.currentTimeMillis()
(除以 10e2)也没有改变这种差异。这是我的代码:
// 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
异常大,因为new_time
它远大于 0,就像System.nanoTime()
远大于 0 一样。
推荐阅读
- amazon-web-services - 使用 vendia serverless-express 的 lambda 能否成为状态机中的一个步骤?
- django-models - 获取多对一的多对一关系的COUNT,限制django中的queryset
- java - 如何在“定义变量时”检查随机数是否相同
- c++ - 在 C++ 演员类中创建场景组件
- python - Twilio 发送多条消息来唱号 - python
- php - 将应用程序从 mysql phpmyadmin 移动到数据库 workbech
- angular - Angular canActivate 预加载模板
- react-native - 哪种存储选项最适合我的 React Native 应用程序?
- java - 如何插入 365 行并为每一行增加一天的日期
- javascript - 如何使用文件中的数据在 Node.js 脚本中创建表?