2011-06-21 112 views
5

我在当时有两个数据集(以矢量的形式),并将它们绘制在同一个轴上以查看它们如何相互关联,并且特别注意并寻找两个图具有相似的形状(即,在大致相同的时间间隔处两者看似具有正/负梯度的位置)。例如:比较两个数据集的过程

enter image description here

到目前为止,我一直在努力通过图形化数据,但认识到,由于数据量是如此之大,每次策划我想看看如何两套相关图形将采取太多很多时间。

是否有任何想法,脚本或函数可能有用于自动化此过程?

+2

根据数据的性质,我建议使用FFT函数进行频率分析。 (请务必了解如何在FFT域中正确缩放数据!) 或者使用简单的均方误差可能会有用。如果您可以详细说明数据的性质和来源,我们可能会给您一些更好的建议。 –

+0

@thron请注意,要获得他想要的东西,他需要找到相位相似性而不仅仅是两个信号之间的频率。这不是微不足道的。 –

回答

5

您必须考虑的第一件事是您要应用于建立相似性的标准的性质。测量相似性的方法有很多种,您可以更准确地描述您希望“相似”在您的问题中意味着什么,无论编程语言如何,实现它都是最简单的。

说了这么多,下面是一些你可以看看的东西:两个数据集的

  • 相关数据集的衍生物
  • 差(但我不认为这将是足够强大)
  • 频谱分析mentionned由三个
  • 等@thron ...

知道的起源的数据集及其变化性也可以帮助制定足够强大的算法。

1

当然。调用你的两个向量A和B.

1)(可选)使用简单的平均滤波器(Matlab'smooth')或'filter'命令平滑数据。这将消除似乎基本上是噪声的速度(“梯度”)的局部变化(如在红色轨迹的上升分量中)

2)区分A和B.现在您直接表示速度每个矢量(Matlab'diff')。

3)将两个差异化向量一起添加(逐元素地)。调用这个C.

4)找出C中绝对值高于某个阈值的所有点(你必须注意数据以便了解应该是什么)。高于此阈值的点表示高度相似的速度。

5)现在查找C中高正值跟随高负值的位置,反之亦然。在这两点之间,您将在A和B中获得相似的曲线。

注意:a)您可以在步骤3之后而不是步骤1之后进行平滑。b)重新5),您可能会遇到这种情况:数据中的“山丘”位于矢量的边缘,因此“切成两半”,矢量在下一个山丘上升之前下降到基线。然后5)会错误地认定山在初始下降和随后上升之间。为了避免这种情况,您可能还需要在两个速度相似点之间的A和B中的点具有较高的绝对值。

+0

谢谢,这似乎是一条非常有趣的路线! – user718531