android - 实现计步器 : How to find a local peak?

标签 android accelerometer sensors android-sensors

我正在尝试制作一个非常简单的 Android 计步器,但到目前为止它的失败非常严重。我在互联网上得到了一些建议,但似乎没有任何效果。

我主要是设置加速度传感器并获取 x、y 和 z 轴的值。之后我计算它们与原点的距离,基本上是: d = sqrt(x²+y²+z²) 然后计算它们的移动平均值。我的想法是,每当我找到一个局部峰值时,我都应该算作一个步骤。问题是,我不知道如何立即找到局部峰值以计算步数。如果这看起来像是一个简单的问题,我很抱歉,但我真的不知道如何从这里继续下去。

非常感谢。

最佳答案

我尝试实现此方法,但您采用的方法存在大量测量误差。你应该接受它。原因是:

  • 手机可以放在任何地方,不仅仅是裤兜
  • 手机加速器在医学上并不精确,它们可以偏离并“流动”给定空间中完全相同的位置
  • 移动平均线并不是最著名的技术,更好的方法是使用某种波浪和小波分析
  • 一步有两个局部最大值和两个局部最小值(如果我没记错的话)
  • 没有全局公认的“步骤”的严格定义,这是由于研究领域中使用的生理学、测量和各种技术所致

现在回答你的问题:

  • 绘制来自您拥有的三个轴的信号,这将极大地帮助您(信号与时间)
  • 定义一个固定(或稍微移动)大小的窗口,需要移动窗口来检测走得较慢、运行或有残疾的人
  • 每次您进行新的测量(通常频率约为 20-30 赫兹)时,将一个放在窗口的尾部(您的信号测量队列)并从头部弹出一个。通过这种方式,您将始终拥有一个包含最后 N 个测量值的队列
  • 再次为每个测量值重新计算你的东西并确定窗口是否包含一个(或两个!)最小值并将其计为一个步骤

祝你好运!

关于android - 实现计步器 : How to find a local peak?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479818/

相关文章:

java - Google Maps API v2 上的随机 NullPointerException

android - Android O 启动时 Onesignal 崩溃

java - 在服务中实现 onActivityResult()

c++ - 方向传感器的 Windows Sensor API C++ COM 集成未在 Windows 10 上定期更新

objective-c - objective-c : Shake problems

android - 恒定采样率加速度计android?

java - 记录或重新抛出此异常

javascript - 三 Angular 学根据加速度计数据计算倾斜 Angular

printf - 使用 printf 的 atmel 传感器

grafana - 如何动态地将值从警报条件/查询条件传递到我的通知?