android中的加速计精度

时间:2014-03-23 18:19:52

标签: android accelerometer

我希望将Android应用程序作为大学项目的一部分,在Android手机中使用传感器来获得距离。

在看了一些性质相似的其他问题1.2.之后,有些人在玩代码时,这个想法看起来毫无意义,因为加速度计数据真的很吵。

问题

因为我正在寻找一个可行的类型的演示。是否可以让应用程序在地铁系统中工作?这样我就可以获得初始速度,也只需要处理线性运动。或者噪音是否会使加速度计数据无用?

任何提示或建议都会被大量挪用。

1 个答案:

答案 0 :(得分:1)

如果你真的必须使用加速度计,你可以根据数据中的活动量(峰值)做一个简单的估计。

  • 很少或没有峰=没有运动
  • 一些不同的山峰=步行速度
  • 许多峰值=跑步速度

这可以通过简单地保存加速度计数据窗口并计算超过给定阈值的值的数量来完成。 或者更高级,您可以对数据进行快速傅立叶变换以确定数据的频率,低频率:低活动,反之亦然。

使用机器学习可以进一步改进这个想法,并可能与陀螺仪或指南针等更多传感器融合。这将有助于更准确地确定活动,但这是一个相当大的主题,需要大量的时间和精力。

Android可以检测某些用户活动,但效果不是很好:http://developer.android.com/training/location/activity-recognition.html

该链接可以帮助确定何时打开加速度计是有意义的,因为它能够确定用户何时步行:

public class ActivityRecognitionIntentService extends IntentService {
...
/**
 * Map detected activity types to strings
 *@param activityType The detected activity type
 *@return A user-readable name for the type
 */
private String getNameFromType(int activityType) {
    switch(activityType) {
        case DetectedActivity.IN_VEHICLE:
            return "in_vehicle";
        case DetectedActivity.ON_BICYCLE:
            return "on_bicycle";
        case DetectedActivity.ON_FOOT:
            return "on_foot";
        case DetectedActivity.STILL:
            return "still";
        case DetectedActivity.UNKNOWN:
            return "unknown";
        case DetectedActivity.TILTING:
            return "tilting";
    }
    return "unknown";
}
...
}