Android 加速度计滤波?

5

我看到了很多有关过滤加速度计值以消除重力(高通滤波器)的示例。

但是大多数都是一阶的,据说这种方法简单但滞后且不是最好的选择(尽管我对滤波器或DSP一无所知)。

这里有人说,在DSP中存在更好的解决方案来感知运动。遗憾的是,我甚至无法想象它会是什么,因为我完全是外行。

我希望有人可以告诉我在处理传感器时可以使用哪些类型的滤波器。当然,即使是对特定算法的简要介绍也将非常受欢迎:)

提前致谢。

3个回答

4
你可以尝试使用高阶FIR或IIR滤波器,这可以让频率域转换更加锐利。但更先进的方法是使用自适应卡尔曼滤波器。这里有一篇关于加速度计和卡尔曼滤波器的文章。

谢谢大家!指南非常有帮助。 - Kyoung-Rok Jang

2
DSP指南是您需要的内容。它提供了数字信号处理背后的基本“理论”和数学知识。 http://www.dspguide.com/ch14.htm是一个不错的起点。
请查看一下。
从个人经验来看,对于大多数简单应用程序,一阶滤波器就足够“好”。但这完全取决于具体应用。

1

您想要使用Android的SensorListener()类。例如,“The Schwartz Unsheathed”是一个开源的Android项目,托管在Google Code上,看起来应该非常有用(由Clark Scheff编写)。

您可以通过SVN http://code.google.com/p/the-schwartz-unsheathed/source/checkout查看其源代码,或者直接在Web上浏览它。源代码分为一个Activity(TheSchwartz.java)和一个View(GraphView.java)。GraphView.java包含SensorListener()onSensorChanged()类,其中包括加速度计处理。第284和285行:

magnitude = (float)Math.sqrt(values[0]*values[0]+values[1]*values[1]+values[2]*values[2]);
magnitude = Math.abs(magnitude - SensorManager.GRAVITY_EARTH);

magnitude 的值被评估为 Android 手机的“静止”、“击中”或“挥动”。我意识到这并不是在信号处理意义上过滤数据,但它确实展示了一种分类传感器数据的方法。希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接