2011-06-21 111 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