我怎样才能稳定罗盘?

时间:2013-03-21 03:44:09

标签: android android-sensors

我正在为Android做一个指南针,我有它工作,但它有一个缺陷。即使设备没有移动,指南针上的读数也会持续变化几度。我知道这是由于磁传感器弄乱了传感器,但是如何在用户移动时让我的应用仍然响应,但在用户静止时没有显示太多的变化。那么我怎样才能给出更稳定的指南针外观?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

答案 2 :(得分: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%的过滤值(由 alpha 给出)。这会给读数带来“稳定性”,代价是延迟。