在我的代码中,我使用Fsensor库(https://github.com/KalebKE/FSensor)来实现LowPassFilter和LinearAccelerationFilter来过滤加速度计数据:
lowPassFilter = new LowPassFilter();
linearAccelerationFilter = new LinearAcceleration(lowPassFilter) {
@Override
public float[] getGravity() {
return new float[0];
}
};
lowPassFilter.setTimeConstant(5);
过滤器用于onSensorChanged:
Sensor mySensor = sensorEvent.sensor;
//if Sensor is Accelerator
if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
try{
//filtering the acceleration
System.arraycopy(sensorEvent.values, 0, acceleration, 0, sensorEvent.values.length);
filteredAcceleration = lowPassFilter.filter(acceleration);
filteredAcceleration = linearAccelerationFilter.filter(filteredAcceleration);
}catch (Exception e){
Log.e("Low Pass Filter", ""+e);
}
每次调用onSensorChanged都会收到错误消息:
E/Low Pass Filter: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
因此linearAccelerationFilter尝试在不存在的索引上使用数组的浮点数。 但是为什么要这样做呢? 你有什么主意吗?