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