Android加速度计过滤?

Posted

技术标签:

【中文标题】Android加速度计过滤?【英文标题】:Android Accelerometer filtering? 【发布时间】:2011-06-12 04:19:42 【问题描述】:

我看到了很多关于过滤 Accelermeter 值以抵消重力(高通滤波器)的示例。

但其中大多数是一阶一阶,据说很简单,但滞后且不是最好的(尽管我对过滤器或 DSP 一无所知)。

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

我希望有人至少能说出在处理传感器时可以使用的过滤器类型。当然,即使是对具体算法的简单介绍也会很高兴:)

提前致谢。

【问题讨论】:

【参考方案1】:

您可以尝试使用更高阶的 FIR 或 IIR 滤波器,它可以为您提供更清晰的频域转换。但更高级的方法是使用自适应卡尔曼滤波器。这里是one article on accelerometers and Kalman filters。

【讨论】:

谢谢大家!指南非常有帮助。【参考方案2】:

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

您可以通过 SVN http://code.google.com/p/the-schwartz-unsheathed/source/checkout 查看它的来源,或者只是在网络上浏览它。源分为一个活动 (TheSchwartz.java) 和一个视图 (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 手机没有移动、“撞击”或“摆动”。我意识到这不会在信号处理意义上过滤数据,但它确实显示了一种对传感器数据进行分类的方法。希望对您有所帮助。

【讨论】:

【参考方案3】:

DSP 指南正是您要找的。它给出了数字信号处理和作品背后的基本“理论”和数学。

http://www.dspguide.com/ch14.htm 这是一个很好的起点

检查一下。

根据个人经验,一阶过滤器对于大多数简单的应用程序来说已经足够“好”了。虽然这完全取决于具体的应用程序

【讨论】:

以上是关于Android加速度计过滤?的主要内容,如果未能解决你的问题,请参考以下文章

android从加速度计读数中删除重力

ANDROID_MARS学习笔记_S05_004_过滤杂质,得到真正的加速度

互补滤波器陀螺加速度计

Android 低通滤波器和高通滤波器

您如何使用移动平均值过滤 iPhone OS 中的加速度计值

加速度计到相对位置