我必须开发与此相同的功能计步器应用程序
我观察到了这一点计步器应用程序非常详细。
这不是一个完美的计步器应用程序。例如,如果您停留/坐在一个地方并握手,它还会检测步数和距离。
忽略这种理想和重力行为,因为在这个应用程序的说明中已经提到你应该绑住你的 iPhone 或者你应该把它放在口袋里来计算步数。
通过这种方式,我发现这个应用程序运行得非常好,它几乎可以检测到所有步骤。
我的问题是:我已经根据上述逻辑开发了一个示例,但它没有达到该级别。例如,有时它会同时检测到2-3步。有时效果很好。
My code:
在viewDidLoad中:
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.2]
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
const float violence = 1.2;
static BOOL beenhere;
BOOL shake = FALSE;
if (beenhere) return;
beenhere = TRUE;
if (acceleration.x > violence || acceleration.x < (-1* violence))
shake = TRUE;
if (acceleration.y > violence || acceleration.y < (-1* violence))
shake = TRUE;
if (acceleration.z > violence || acceleration.z < (-1* violence))
shake = TRUE;
if (shake) {
steps=steps+1;
}
beenhere = false;
}
我究竟做错了什么?我无法确定阈值。如果我把它调高,它就不会检测到小步骤。如果我把它变小,它会同时记录 3-4 个步骤。
是否需要任何其他实现来执行此操作,或者对此代码进行一些调整?
我已经看到了所有其他类似的 Stack Overflow 链接。我发现没有任何东西可以达到这个水平。
请帮忙。
一直在计算打鼾的次数,而不是步数,但也有一些相同的问题。没有实际答案,但有一些建议:
- 步骤之间需要有时间间隔。是的,有人可以缓慢行走或慢跑,但即使最快,步与步之间也可能有 1/5 秒的时间间隔。如果“影响”看起来比这更快,那么它们很可能只是来自反弹/震动。
- 而不是你的固定阈值(
violence
)采用可变阈值,基于移动平均线以前的事件。
- 基于手机不会在短时间内改变方向的假设,考虑保留单独的 x、y 和 z 阈值。
- 不要只是忽略强于某一水平的事件,而是考虑忽略某个范围之外的事件,并由两个阈值(一个可能是另一个阈值的一小部分)指定限制。
- 考虑一下当你走路时会发生什么——身体有一个非常有节奏的向前/向后加速,并且当脚接触地面时会产生“震动”。最好尝试忽略震动(相当短期的信号),而寻找有节奏的向前/向后运动。
另一个建议
“现场”测试这个野兽是不可能的。 (我可以想象您试图慢跑,同时将笔记本电脑放在您面前,试图让调试器控制台聚焦。)您应该做的是首先装备您的应用程序以制作一些包含原始数据的录音(即写入文件)测量,然后重新装备您的应用程序(#ifdefs 在这里会很方便),以便能够“回放”这些测量结果,以便您可以使用调试器单步调试应用程序并观察其行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)