我需要在加速度计上训练运动模式数据的分类器。对于每次样本,我存储了X Y和Z坐标。因此,在我的数据集中表示单个移动,如下所示:
[0.39028051 -0.5483283 10.385374]; [0.17420317 -0.2802931 10.72625]; [0.28956637 -0.13387422 11.9645]; [0.6281768 -0.14725612 13.369692]; [0.72674876 -0.115191355 14.50422]; [0.7450281 -0.079684645 15.090715]; [0.74526054 -0.44727635 15.027773]; [0.6936915 -0.9639046 14.088198]; [0.5290651 -1.1378883 12.5164585]; [0.23881127 -1.346372 10.889902]; [0.052466527 -1.2700776 9.227933]; [0.019615699 -0.8237766 7.65959]; [0.10373996 -0.29147366 6.416745]; [0.17365126 0.09419979 5.420801]; [0.18465124 0.3646446 4.5289593]; [0.22039331 0.52677184 3.8076568]; [0.33365434 0.48184758 3.4170833]; [0.40346703 0.21976978 3.472282];
其中[]之间的值表示XYZ组件。
起初我认为隐马尔可夫模型最适合我的问题。但我在定义数据中的状态时遇到了麻烦。我发现的所有例子都有明确定义的有限状态集(即下雨,晴天或阴天)。我的数据集中的所有值都介于-11和+11之间,但它们显然不是整数。不过,我可以用它作为国家吗?从而给我11 * 11 * 11 = 1331个州?我将如何计算转换矩阵?
此外,观察次数在运动之间不同(虽然属于同一级别)。
对不起,我这个问题太宽泛,指向HMM教程的指针也有很多帮助!
谢谢
答案 0 :(得分:0)
在伪代码中,计算两点之间的所有距离:
for index=0 to coords.length() step 2
{
x1=coord[i].x
y1=coord[i].y
z1=coord[i].z
x2=coord[i+1].x
y2=coord[i+1].y
z2=coord[i+1].z
deltaX = x2-x1
deltaY = y2-y1
deltaZ = z2-z1
distance[i] = SquareRoot(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)
}
然后你可以计算distance
值的高斯分布,以及均值,中位数,方差......一个算法不应该太复杂,即使它可能需要一些调整到处都是。
或者,在循环中,您可以轻松计算当前距离和之前距离之间的差异:
previousDistance = distance
distance = SquareRoot(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)
diff = distance - previousDistance
然后在diff
上应用high pass filter。