我正在从事一个涉及运动数据分析的项目,以比较并给出相似度分数。我在我的应用程序中可以收集和显示数据,现在需要一些算法指导。
目标:给定从加速度计记录的两个 (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]
点以匹配它。然后进行比较。目前的计划是使用这个旋转公式:罗德里格斯的旋转公式这有意义吗?