我正在尝试制作一个非常简单的 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/