2014-11-21 75 views
0

我正在研究一种半增强现实应用,其中平滑和准确的数据非常重要。传感器返回的值在0到4度之间跳跃,不幸的是它使生活变得困难。如何使android compas传感器变得光滑

我已经尝试实现一个临时解决方案:

private float[] Total = new float[11]; 
private float Average(){ 
    if (counter == Total.length - 1) { 
     counter --; 
     for (int i = 0; i < Total.length - 1; i++) { 
      Total[i] = Total[i + 1]; 
     } 
    } 
    float tot = 0; 
    for (int i = 0; i < Total.length - 1; i++) { 
     tot = tot + Total[i]; 
    } 
    return tot/counter; 
} 

但是这不符合我的需要的任何建议或帮助?

+0

我认为有精度为每个传感器读这http://developer.android.com/guide/topics/sensors/ sensors_overview.html#sensors-monitor – 2014-11-21 12:30:17

回答

0

您在FIR实施中使用移动均值过滤器。尽管简单,但移动平均滤波器对于一项常见任务来说是最佳的:降低随机噪声,同时保持急剧的阶跃响应。

FIR实现的一个缺点是计算时间随着滤波器的大小而增加。您可以考虑在IIR过滤器中实施过滤器,但对于这个简单的应用程序,我不会推荐它。

另一个改进可能是使用window function来最小化边缘效应。

您可以使用汉明窗口中找到一个低通滤波器的一个很好的例子here

+0

我现在只上完了学校,并阅读了你提到的那些过滤器。我无法理解它将如何实现,因为目前我使用的Float数组会一直充满新数据,所以它在iir上工作,除非我理解错误。我会很感激,如果你可以帮助我在一个更简单的方式,或者也可以用一个例子:) ty – 2014-11-21 12:48:36

+0

我正在为你写一个例子:) – mach 2014-11-21 12:51:49

+0

我明白你为什么说它不被推荐。需要很多处理能力才能将其添加到我的应用程序中。幸运的是,窗口函数给了我一个想法,即抛弃非正常的读数并减少找到平均值所需的范围。 – 2014-11-21 13:20:51