用于比较来自加速度计的3D信号数据的算法

时间:2013-08-31 23:55:11

标签: java algorithm machine-learning

我正在开展一个涉及运动数据分析的项目,比较并给出相似性得分。我正处于我的应用程序中,我可以收集和显示数据,现在需要一些算法方向。


目标:给定从加速度计记录的两个(x,y,z)时间序列的运动数据,计算相似度得分(实数,最终为0到100),给出衡量类似的动议来自录音。


示例:以下是我软件中的一些图片,了解我收集的数据(以及我对其相似性得分的看法):

这个应该得分很好

也许这会变得更糟

不应该得分

太可怕了

好评

非常好

不好


一些想法:我在音频处理和计算机视觉方面有一些经验,所以我最初的想法来自那里。首先,我想到了低通滤波(q:哪个LPF?有很多。)信号,然后尝试动态时间扭曲。我会用这种方式将x1与x2,y1和y2等进行比较。然而,在我看来,与x2与z2系列的关系相比,这似乎失去了重要信息,例如x1系列与z1的关系。

我的另一个想法是在频域进行分析,可能使用MFCCs。根据我的理解,这是语音识别中的常用技术。

还有“搞砸它,机器学习”的方法。我可以存储模板化的手势并运行某种魔法使它们可识别。这不是我的偏好(我希望能够在不需要大量训练数据的情况下完成这项工作),但是如果有人知道你喜欢的方案“哦,这将肯定工作好吧,“那么肯定。


软件+实施:此项目正在 Java 中完成,我的数据采用以下格式:

float[150] x1;
float[150] y1;
float[150] z1; //note: x2,y2,z2 will be of different length, but similar 

因此,如果有人想根据算法建议推荐使用库,那么它应该很容易使用。


其他:存在方向问题。但是,我的计划是将其中一个样本作为“参考”并旋转另一个x[i],y[i],z[i]点以匹配它。然后进行比较。目前的计划是使用此轮换公式:Rodrigues' rotation formula这有意义吗?


2 个答案:

答案 0 :(得分:4)

您可以使用One Nearest Neighbor分类器进行动态时间扭曲来计算分类精度。考虑到您的数据只有三个维度,这是一个相对容易的问题。使用动态时间扭曲是一个很好的方向。此外,您可以使用欧几里德距离。当您的数据集很大时,动态时间扭曲超过欧几里德距离的进展将消失。

由于只有3个轴,因此有两种方法,可以使用单轴数据,也可以使用所有轴的数据。由于使用所有轴更容易产生错误,我建议仅使用来自单个轴的数据。例如,使用x轴数据,计算精度。然后你对y和z的数据做同样的事情。最后,您将获得一个准确矩阵。在矩阵的每一行中,存在针对不同活动的分类结果。在矩阵的每一列中,您将看到不同轴上相同活动的分类结果。这是培训程序。在测试过程中,您可以按照提供最高精度的轴的结果。

此外,上述方法存在问题。它仅依赖于先验知识(过去的训练阶段)中的结果,在测试阶段不计入新证据(最近邻距离)。

我在提交的论文中谈到如何在多维时间序列分类中使用先验知识和新证据。它仍在审核中,所以我无法与您分享。否则,我可以把文件发给你,供你参考。

答案 1 :(得分:2)

非常广泛的问题,我个人将此标记为语言不可知,因为它似乎与Java无关。也就是说,我会采取两种主要的方法解决这个问题。这两个都基于频域,对于大多数有意义的应用程序而言,但是如果不了解您的应用程序,那么提供很好的建议有点困难。

一般情况下,我建议查看绝对加速度计矢量,而不是仅仅查看x / y / z方向。

  1. 归一化频谱图:假设这些样本来自不同但可比较长度的样本,我的第一种方法是比较两个归一化频谱图的重叠。 (像百分比重叠一样简单的东西会起作用,但像积分测量这样的东西可能更准确。)如果你使用这种方法,你可能会发现一些BartoszKP的链接很有用

  2. 主成分分析(或其中的一些变化):由于您实际获得的是一个非常大的问题空间,能够确定主要特征向量将使您很好地了解两个数据流的相似程度是。我建议确定前n个主要特征值,然后在特征向量的空间上使用一个简单的相似性度量(余弦相似性),以确定它们在整体上的相似程度。

相关问题