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】:您想使用 android 的 SensorListener()
类。例如,“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_MARS学习笔记_S05_004_过滤杂质,得到真正的加速度