我需要检测在查看加速度计数据时发生的两种不同的手势。这是一个失败的过程(我可以做得很简短):

可以说,iPhone在保持面朝上的同时来回摆动。用户可以进行一次振荡(一次向前或向后一次手势),也可以连续振荡任意一段时间(第二次手势)。

当前,我的代码维护着该设备的加速度计数据列表( y轴)从最近50帧开始。此数据的每一帧都通过FFT算法(http://goo.gl/yi3mn)进行处理,然后尝试解释给定的频域。我注意到振荡速度与频率空间中低范围的功率之间有很强的关系。

问题是我需要进行检测(动作将动画显示在屏幕上),无论刚结束的振荡是奇异的振荡,还是在相反方向上继续进入另一振荡的振荡。在此我要指出,加速度计可与压力板配合使用。当振荡停止时,输入数据将显示与执行振荡时相反的值。这使得很难看到单次向前运动和两次向前然后向后运动之间的明显区别(在每个第一次振荡的结尾)。

有人可以建议我如何利用FFT可以解密准确的幅度值(或其他有用的东西),我可以用它来分辨上述手势之间的区别?

我已经将要使用的数据记录到文本文件中了。它是加速度计输入沿y轴的原始数据(g力值)。

http://pastebin.ca/2108123显示了2个奇异振荡的数据(我保持设备静止在开始,结束和两次振荡之间)。



注意:具有20次振荡的新原始数据已上传,但尚未绘制。
http://pastebin.ca/2108387显示了20次连续振荡的数据(我将设备始终保持在起点和终点)。



评论

我自己没有看过数据,第一印象是,这似乎不是FFT的良好应用。您是否有可以原始格式或绘图形式发布的捕获数据?

您好,感谢您的反馈。只是一个按时间顺序显示每个值并带有','分隔符的文件是否可以接受?我每秒获得大约60个值。我怀疑这可能也不是一个好的应用程序。也许我们可以通过一些数据来处理它。

如果您发布原始数据,则可能有人可以将其转换为绘图并使用它来编辑您的帖子。

好,很好。即将上传一些。

那花了比我预期更长的时间。我正在使用Unity运行项目,该项目只能以60帧/秒的速度从设备接收输入数据。这意味着我不能有很高的采样率,但是。这是您的建议的意思吗?

#1 楼

查看数据,我看不到为什么要为此目的使用FFT(不过我可能错了)。假设您要基于此数据集(已附加)检测单个或多个移动,我要查看的方法将是


汇率的东西绝对值的变化。我猜一阶导数会很好。
小波变换可能吗?在不知道是否要知道峰值位置之前,我无法详细说明其效用。

如果要检测的唯一东西是单振荡还是多振荡,则FFT是,我认为这不是一个很好的分析选择。

评论


$ \ begingroup $
感谢您的反馈!一位朋友建议使用FFT,因为在此之前我从未使用过FFT。我需要检测的是是否在每次振荡结束时开始新的振荡。上面的图应该揭示出为什么很难。我以为可以使用幅度算法,但这很棘手,因为每个用户的振荡功率/速度会有所不同。
$ \ endgroup $
– rykardo
2012年2月2日在3:35