gpt4 book ai didi

iphone - 如何使用加速度计计算步数?

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:34 32 4
gpt4 key购买 nike

我必须开发与此相同的功能 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 链接。我发现没有任何东西能达到这个水平。

请帮忙。

最佳答案

一直在数鼾声,而不是步数,但有一些相同的问题。没有实际答案,但有一些建议:

  1. 要求步骤之间有时间间隔。是的,有人可以慢走或慢跑,但即使以最快的速度行走,每一步之间的时间间隔也可能为 1/5 秒。如果“影响”看起来比这更快,它们很可能只是来自反弹/嘎嘎声。
  2. 而不是你的固定阈值(暴力)使用可变阈值,基于moving average以前的事件。
  3. 考虑保持单独的 x、y 和 z 阈值,基于手机不会在短时间内改变方向的假设。
  4. 与其忽略强于特定级别的事件,还不如考虑忽略范围之外的事件,限制由两个阈值(一个可能是另一个阈值的一小部分)指定。
  5. 想想当您走路时会发生什么—— body 有节奏地向前/向后加速,伴随着脚触地时的“震动”。最好尝试忽略震动(一个相当短期的信号),而是寻找有节奏的向前/向后运动。

另一个建议

“现场”测试这个野兽是不可能的。 (我可以想象你一边拿着笔记本电脑一边慢跑,试图让调试器控制台集中注意力。)测量结果,然后重新装配您的应用程序(#ifdefs 在这里会很方便)以便能够“回放”这些测量结果,以便您可以使用调试器单步调试应用程序并观察其行为。

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

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com