[我正在尝试通过onReceive()循环Android方法中的流式加速度计数据来计算加速度(加加速度)的时间导数。
我假设,从一个传感器更新到下一个,我可以通过简单地计算增量加速度(x,y,z)和相关的增量时间来近似估算。为了确保最大的准确性,我使用了System.nanoTime()
方法(并除以10e8)。
[一切似乎都很高兴,并且出现了混帐数据,但是我认为检查所有delta_time
(C0)的总和是否接近sumDeltaTime
与last_time
之间的差是明智的。令我惊讶的是,相差了数千倍。即使将first_time
替换为System.nanoTime()
(除以10e2)也不会更改此差异。这是我的代码:
System.currentTimeMillis()
有人可以看到我必须做错了吗?谢谢!
您没有在第一遍(// 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。