Android加速度计分析

shr*_*att 16 android sensor accelerometer

我写了一个简单的Activity,它是SensorEventListenerfor Sensor.TYPE_ACCELEROMETER.

在我的onSensorChanged(SensorEvent event)i中,只需选择X,Y,Z格式的值并将其写入文件.

除此之外还有X,Y,Z一个标签,该标签特定于我正在执行的活动.所以这是X,Y,Z,label

像这样,我获得了我的活动资料.希望对数据收集后要执行的操作提出建议,以便消除噪音并获取活动的最佳数据.

此数据收集的主要目的是使用神经网络库(NeuroPh for Android)Link构建用户活动检测应用程序.

Sto*_*lly 54

只是为了好玩,几个星期前我写了一个计步器,它本来能够检测到你提到的三个活动.我会做出以下观察:

  1. 除此之外Sensor.TYPE_ACCELEROMETER,Android还有Sensor.TYPE_GRAVITYSensor.TYPE_LINEAR_ACCELERATION.如果记录所有三个的值,则会注意到TYPE_ACCELEROMETER的值始终等于TYPE_GRAVITY和TYPE_LINEAR_ACCELERATION值的总和.该onSensorChanged(…)方法首先为您提供TYPE_ACCELEROMETER,然后是TYPE_GRAVITY和TYPE_LINEAR_ACCELERATION,它们是将加速度计读数分解为重力的内部方法的结果,以及不是由重力引起的加速度.鉴于您对由于活动引起的加速感兴趣,而不是由于重力引起的加速度,您可能会发现TYPE_LINEAR_ACCELERATION更适合您的需要.
  2. 无论使用何种传感器,您测量的X,Y,Z都取决于设备的方向.但是,为了检测您提到的活动,结果不能取决于例如用户是将设备保持在纵向或横向位置,还是设备是平面还是垂直,因此X,Y和X的个别值Z不会有任何用处.相反,您必须查看矢量的长度,即sqrt(X X + Y Y + Z Z),它与设备方向无关.
  3. 如果您将数据输入对噪声敏感的数据,则只需要平滑数据.相反,我会说数据是数据,如果你使用对噪声不敏感的机制,你就会得到最好的结果,因此不需要对数据进行平滑处理.根据定义,平滑是丢弃数据.您希望设计一种算法,该算法在一端采用噪声数据并在另一端输出当前活动,因此不要预先确定是否有必要将平滑作为该算法的一部分包含在内
  4. 这是我在构建计步器时记录的Sensor.TYPE_ ACCELEROMETER 的sqrt(X X + Y Y + Z Z)图.图表显示了我走100步时测量的读数.绿线是sqrt(X X + Y Y + Z*Z),蓝线是绿线的指数加权移动平均线,它给出了绿线的平均水平,红线显示了我的算法计数步骤.我只能通过寻找最大值和最小值以及绿线越过蓝线来计算步数.我没有使用任何平滑或快速傅立叶变换.根据我的经验,对于这类事情,最简单的算法通常效果最好,因为虽然复杂的算法可能在某些情况下起作用,但很难预测它们在所有情况下的行为方式.稳健性是任何算法的重要特征:-).

在此输入图像描述