2012-01-13 70 views
0

我想使用the values that Android's SensorEvent provides来计算与DeviceMotionEvent指定的值相同的值。计算Android的DeviceMotionEvent值

我的问题是指GX,戈瑞,GZ Android的文档中的部分:

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]; 
} 

什么都应该是在代码中引用的gravity阵列的价值?它也提到了alpha,但我仍然不明白它是什么/代表什么,它是如何工作的(什么是低通滤波器?你如何确定“时间常数”?甚至测量“传输率”是什么?),或者为什么它甚至设置为0.8(相当随意)。

我明显缺乏物理系,但我理解数学。所以如果有人会如此善意地解释背后的物理推理,我会非常感激。我知道我链接的页面上有条款的解释,但它们在我的脑海中仍然没有任何意义,只是术语匹配设备加速或旋转的轴的图片。

回答

2

这是一个低通数字滤波器。它用于以简单的方式去除振动(高频信号)。

α在0到1之间。α越高,振动的去除就越多(您对重力的历史数值更加信任),另一方面重力的价值被高度延迟。

这里您有更多的信息:http://en.wikipedia.org/wiki/Low-pass_filter,看看离散时间的实现部分。