我必须开发与此Pedometer App相同的功能

我已经非常详细地观察了此Pedometer app

这不是一个完美的计步器应用程序。例如,如果您停留/坐在一处并握手,它还会检测步数和距离。

忽略这种理想行为和重力行为,因为已经在此应用程序的说明中提到您应该绑好iPhone或将其放在口袋中以计算步数。
这样,我发现该应用程序运行良好,几乎可以检测到所有步骤。

我的问题是:我已经根据上述逻辑开发了一个样本,但是还没有达到这个水平。例如,有时它会同时检测2-3个步骤。有时效果很好。

我的代码:

在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链接。我发现没有什么能达到这个水平。

请帮忙。

最佳答案

一直在打呼sn,不是步调,而是有一些相同的问题。没有实际答案,但有一些建议:

  • 在步骤之间需要一个时间间隔。是的,有人可能会走路或慢跑,但即使最快,步之间的时间间隔也可能是1/5秒。如果“影响”看起来比它们更快,则可能只是反弹/发出嘎嘎声。
  • 根据先前事件的moving average,而不是使用固定阈值(violence)来使用可变阈值。
  • 考虑到在短时间内手机不会改变方向的假设下,请分别设置x,y和z阈值。
  • 除了考虑忽略超出某个级别的事件之外,还应考虑忽略范围之外的事件,其极限由两个阈值(一个可能是另一个阈值)指定。
  • 考虑一下走路时发生的情况– body 向前/向后加速时很有节奏感,并且脚踩在地面时会产生“震动”。最好尝试忽略电击(相当短的信号),而寻找有节奏的向前/向后运动。

  • 另一个建议
    测试这只野兽“活着”将是不可能的。 (我可以想像您在手持便携式计算机的同时试图慢跑,试图使调试器控制台集中注意力。)您应该做的是首先装配您的应用程序以制作一些包含原始内容的录音(即,写入文件)测量,然后重新安装您的应用程序(此处#ifdefs会很方便),以便能够“回放”这些测量值,以便您可以通过调试器逐步检查应用程序并观察其行为。

    关于iphone - 如何使用加速度计计算步数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8310250/

    10-12 04:01