2013-03-21 129 views
2

我正在制作一个指南针,我有它的工作,但它有一个缺陷。即使设备不移动,指南针上的读数也会持续几度变化。我知道这是由于传感器的磁场失真造成的,但是如何让我的应用在用户移动时仍然能够响应,而用户仍然没有显示太多的变化。那么我怎么能给出一个更稳定的指南针呢?如何稳定指南针?

回答

2

你必须平滑信号。如何显示最后N个值的平均值而不是显示原始最后一个值?

1

如果你想写一个指南针,你需要低通滤波器加速度和磁场均为

下面是一个低通滤波器的例子。不是很优雅,但只是为了表明的原则:

float filteredValue; 

void lowPassFilter(float rawValue) { 

    final float alpha = 0.8f; 
    float filteredValue = alpha * filteredValue + (1.0f - alpha) * rawValue; 

    return filteredValue; 
} 

注意filteredValue是每次调用(如一个成员变量)之后记住。

在另一方面,rawValue是从传感器事件的值,像event.values [0]

注意如何每一个“新鲜”新rawValue只影响滤波值的20%(这是由阿尔法给出)。这会给阅读带来“稳定性”,但需要付出一定的代价。