2013-03-21 108 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%(這是由阿爾法給出)。這會給閱讀帶來「穩定性」,但需要付出一定的代價。