Android加速度计分析

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

在我的onSensorChanged(SensorEvent event)我只是selectX,Y,Z格式的值,并把它们写到一个文件。

添加到这个X,Y,Z是一个标签,标签是特定于我正在执行的活动。 所以它的X,Y,Z,label

像这样,我获得了我的活动简介。 希望对收集数据后要执行的操作有所build议,以消除噪音并获得最佳数据。

这个数据收集的主要目的是使用neural network库(NeuroPh for Android) 链接来构build用户活动检测应用程序。

Solutions Collecting From Web of "Android加速度计分析"

为了好玩,我在几个星期前写了一个计步器,它能够检测到你提到的三个活动。 我会提出以下意见:

  1. 除了Sensor.TYPE_ACCELEROMETER ,Android还具有Sensor.TYPE_GRAVITYSensor.TYPE_LINEAR_ACCELERATION 。 如果logging所有三个值,那么您会注意到TYPE_ACCELEROMETER的值总是等于TYPE_GRAVITY和TYPE_LINEAR_ACCELERATION的值之和。 onSensorChanged(…)方法首先为您提供TYPE_ACCELEROMETER,其次是TYPE_GRAVITY和TYPE_LINEAR_ACCELERATION,它们是将加速度计读数分解为重力和非重力加速度的内部方法的结果。 由于您对活动引起的加速感兴趣,而不是重力引起的加速,您可能会发现TYPE_LINEAR_ACCELERATION更适合您的需求。
  2. 无论您使用哪种传感器,您正在测量的X,Y,Z都将取决于设备的方向。 但是,为了检测您提到的活动,结果不能取决于例如用户是否将设备保持在纵向或横向位置,或设备是平的还是竖直的,因此X,Y和Z不会有任何用处。 相反,您必须查看vector的长度,即与设备方向无关的 sqrt(X X + Y Y + Z Z)。
  3. 如果您将数据input到对噪声敏感的数据中,您只需要平滑数据。 相反,我会说数据是数据,如果使用对噪声不敏感的机制,并且因此不需要数据平滑,您将获得最佳结果。 根据定义,平滑是丢弃数据。 你想要devise一个algorithm,一端接收噪声数据,另一端输出当前活动,所以不要预先判断是否有必要将平滑作为该algorithm的一部分
  4. 以下是我在制作计步器时logging的Sensor.TYPE_ ACCELEROMETER的sqrt(X X + Y Y + Z Z)图。 图表显示了我步行100步时所测得的读数。 绿线是sqrt(X X + Y Y + Z * Z),蓝线是绿线的指数加权移动平均值 ,它给出了绿线的平均水平,红线表示我的algorithm计数步骤。 我能够通过查找最大值和最小值以及绿线是否穿过蓝线来计算这些步骤。 我没有使用任何平滑或快速傅立叶变换。 根据我的经验,对于这样的事情,最简单的algorithm通常效果最好,因为虽然复杂的algorithm在某些情况下可能会起作用,但是很难预测它们在所有情况下的行为。 鲁棒性是任何algorithm的重要特征:-)。

在这里输入图像说明

这听起来像一个有趣的问题!

您是否将数据与时间作图,以便了解它,了解您正在处理的噪音types,并帮助您决定如何预处理数据以input到检测器?

  ^ | A | | | | |_________________> | time | v 

我将开始为每个活动的行:

  • | Ax + Ay + Az |
  • | Vx + Vy + Vz | (通过计算你的数据点形成的梯形的面积近似)等等

也许你可以通过尝试检测重力来计算手机的方向,然后将vector旋转到“标准”方向(例如,正Z轴=向上)。 如果你能做到这一点,那么不同的轴可能会变得更有意义。 例如,步行(在口袋里)往往会在水平面上有一个速度,这可能与在垂直面上的运动(在手中)有区别。

至于filter,如果数据出现噪音,一个简单的起点是应用一个移动平均来平滑它。 一般而言,这是传感器数据的常用技术:

https://en.wikipedia.org/wiki/Moving_average

另外,这个post似乎与你的问题有关:

如何从Android 3轴加速度计中的加速度计读数中删除重力因子

我确定的事情:

  1. 数据必须被预处理,你需要如何处理,在我的情况下,我只需要3个input和一个输出
  2. 数据必须经过平滑处理(五点平滑或其他任何适合您的最佳技术) 参考 。 所以,噪音被滤除(不完全虽然)。 移动平均线是技术之一
  3. 线性化的数据是好的,因为你不知道如何采样数据,使用插值来帮助你线性化数据
  4. 最后使用FFT(快速傅里叶变换)从菜中提取出配方,即从数据集中提取特征!