【问题标题】:Process for comparing two datasets比较两个数据集的过程
【发布时间】:2011-09-19 14:54:01
【问题描述】:

当时我有两个数据集(以向量的形式),我将它们绘制在同一轴上以查看它们之间的关系,我特别注意并寻找两个图形具有相似形状的地方(即两者在大致相同的时间间隔具有看似正/负梯度的地方)。示例:

到目前为止,我一直在以图形方式处理数据,但意识到由于数据量如此之大,每次我想检查两组如何以图形方式关联时,都会花费太多时间。

是否有任何想法、脚本或功能可能有助于使这个过程在某种程度上自动化?

【问题讨论】:

  • 根据数据的性质,我建议使用 FFT 函数进行频率分析。 (一定要了解如何在 FFT 域中正确缩放数据!)或者使用像均方误差这样简单的东西可能会很有用。如果您能详细说明数据的性质和来源,我们或许可以为您提供更好的建议。
  • @thron 请注意,要得到他想要的,他需要找到两个信号之间的相位相似性,而不仅仅是频率。这不是微不足道的。

标签: matlab dataset compare signal-processing similarity


【解决方案1】:

首先要考虑的是要应用的标准的性质来确定相似性。衡量相似度的方法有很多种,如果您能更准确地描述您想要“相似”在您的问题中的含义,那么无论使用哪种编程语言,实现它都将是最简单的。

话虽如此,这里有一些你可以看的东西:

  • 两个数据集的相关性
  • 数据集导数的差异(但我认为它不够稳健)
  • @thron of three 提到的光谱分析
  • 等。 ...

了解数据集的来源及其可变性也有助于制定足够稳健的算法。

【讨论】:

    【解决方案2】:

    当然。调用你的两个向量 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 中的点具有较高的绝对值。

    【讨论】:

    • 谢谢,这似乎是一条非常有趣的路线!
    猜你喜欢
    • 2011-07-30
    • 2015-07-10
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多