- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要找出加速度计值流达到最大值的次数。我绘制了从 iPhone 获得的加速度计值随时间变化的图,使用 CoreMotion 方法获取 DeviceMotionUpdates。记录数据时,我摇了手机 9 次(每个肢体都是加速度最高点之一)。
我在图上的红框中标出了加速度达到最大值的 18(即 9*2)次。
但是,如您所见,有一些我不想考虑的局部最大值。有人可以指导我找到一个想法,帮助我实现只检测对我最重要的最大值吗?
编辑:我想我必须使用低通滤波器。但是,我如何在 Swift 中实现它呢?如何选择截止频率?
编辑 2: 我实现了一个低通滤波器并通过它传递原始运动数据并获得如下图所示的图表。这样好多了。我仍然需要一种方法来避免可以观察到的微不足道的最大值。我将深入研究过滤器并可能修复它。
最佳答案
我不会尝试寻找最大值,而是尝试寻找周期。特别是,我们注意到(主要)最小值似乎比最大值更一致。
我不熟悉swift,所以我会用伪代码来表达我的想法。假设我们的值在 v[i]
中,导数在 dv[i] = v[i] - v[i - 1]
中。如果您获得更好的结果,您可以使用任何其他微分方案。
我会尝试类似的东西
cycles = [] // list of pairs
cstart = -1
cend = -1
v_threshold = 1.8 // completely guessing these figures looking at the plot
dv_threshold = 0.01
for i in v:
if cstart < 0 and
v[i] > v_threshold and
dv[i] < dv_threshold then:
// cycle is starting here
cstart = i
else if cstart > 0 and
v[i] < v_threshold and
dv[i] < dv_threshold then:
// cycle ended
cend = i
cycles.add(pair(cstart, cend))
cstart = -1
cend = -1
end if
现在您在评论中注意到用户应该能够用不同的力量摇晃并且您应该能够识别该 Action 。我会从一个简单的“硬编码”案例开始,如上面的案例,看看您是否可以让它充分发挥作用。您可以尝试很多方法来获得可变阈值,但您始终需要一个。但是,根据您展示的数据,我强烈建议您至少将自己限制在查看最小值而不是最大值。
此外:我建议的代码是在假设您拥有完整数据集的情况下编写的,但是您会希望实时运行它。这不会有问题,算法仍然有效(也就是说,这个想法仍然有效,但您必须以不同的方式编写代码)。
关于ios - 如何在从 iPhone 获得的加速度数据中找到所需的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425193/
我有一个依赖于包 B 的包 A。当包 A 中的代码运行并访问包 B 中的类时,包 B 的状态将被解析 (4),而不是 Activity (32) 和包 B 的激活器也没跑好。我认为 bundle B
这个问题在这里已经有了答案: How to remove the space between inline/inline-block elements? (41 个回答) 关闭 7 年前。
我正在尝试使用 Java OpenAL 库。我在导入名为 libsoft_oal.so 的 native 库时遇到问题。 Java OpenAL 依赖于 OpenAL 软实现。我尝试根据他们在 git
我正在尝试启动我的应用程序。是一个 unicorn +工头+sinatra的应用。 这是我的 config.ru 文件: require "rubygems" require "sinatra" Bu
我有一个下拉列表,其中包含一些从数据库表中检索的值,我想要的是当单击按钮时它应该只获得选项标签的中间值,但只有那些类名为“get_this”的选项标签并离开那些选项,如果他们没有这个类 预期输出:值
我有一个index.php文件,需要一个通用的head.php文件,head.php文件中有几个Javascript文件,当这样尝试时,代码在源代码中看起来很好,但文件却不是实际上对文档做任何事情。
有人能帮帮我吗? 我已经像这样运行了 imsmod: $ insmod /data/mm/mmdev.ko epoll_rate=100 但是我得到一个错误: insmod: init_module
是否有键盘快捷键或插件可以在 Notepad++ 中打开 PHP 所需或包含的文件?我知道,在 Dreamweaver 中,执行此操作的命令是 Ctrl+D,但我似乎无法在 Notepad++ 中找到
我已经用 js 设置了一个显示/隐藏 div,但我很难弄清楚如何一次显示一个 div。目前发生的情况是,除非我再次单击原始链接来关闭该 div,否则每个 div 都会显示。 http://www.li
当我尝试将未分配的辅助分片分配给节点时出现错误。 { "error": { "root_cause": [ { "type": "remote_transpor
我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。 我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++
我是一名优秀的程序员,十分优秀!