2014-06-24 68 views
4

我對Python中的xcorr有疑問。假設我做了以下操作:Python:對XCORR的解釋

output=plt.xcorr(x,y, maxlags=4) 

哪個時間序列滯後?輸出將是在時間t = -4到+4之間的x和y之間的互相關。那麼輸出是指x和y之間的互相關如下?:

enter image description here 或者它是x和y之間的相反關係? 我試圖深入瞭解xcorr的代碼以獲得更好的主意(請參閱here),但我有點失落...... np.correlate(x,y,mode = 2)。 mode = 2是什麼意思?我只看到here模式= valid,fullsame

回答

7

mode參數確定邊界附近發生了什麼。如果你有長度x和y(X> Y)的輸入向量:

  • valid/0:其中兩個信號重疊您將僅接收卷積的部分(X-Y + 1個點)
  • 輸出矢量的長度與較長輸入矢量(x點)的長度相同
  • full/2:來自信號之間甚至存在單個重疊樣本的區域的所有數據( x + y-1分)

數字fo這些模式並不是非常公開的,它們可以在numpy的源代碼中找到。無論如何xcorr使用full模式。 (實際上,在給出convolvecorrelate的模式時,只有模式名稱的第一個字母很重要。)

對於這些函數的功能有些疑惑。 numpy.correlate根據numpy版本有兩種不同的行爲。在內部,這些被稱爲multiarray.correlate(舊)和multiarray.correlate2(新)。 numpy.convolve反轉第二個輸入矢量,然後使用multiarray.correlate(即不贊成用於相關)。

所以,如果你想真正確定,你測試會發生什麼。基本功能是向量一次移動一個位置的兩個向量之間的乘積。爲了澄清這一點,我將使用兩個向量的數字示例。

a <= [1,2,3,4,5] 
b <= [10,20] 

讓我們先來看看卷積:

numpy.convolve(a,b,mode='full') => [ 10, 40, 70, 100, 230, 100] 

這是因爲:

1 2 3 4 5 => 1 x 10 = 10 
20 10 

    1 2 3 4 5 => 1 x 20 + 2 x 10 = 40 
    20 10 

... 

    1 2 3 4 5  => 5 x 20 = 100 
       20 10 

不同的模式,在每端返回相同的數據,但截斷。

對於相關:

numpy.correlate(a,b,mode='full') => [ 20, 50, 80, 110, 140, 50] 

    1 2 3 4 5 => 1 x 20 = 20 
10 20 

    1 2 3 4 5 => 1 x 10 + 2 x 20 = 50 
    10 20 

... 

    1 2 3 4 5  => 5 x 10 = 100 
       10 20 

所以,基本上與實數的唯一的區別是,矢量的一個被鏡像。這會帶來一些後果,例如,如果ab被交換,則卷積會給出相同的結果,在這種情況下,相關會給出相反的結果。在上面的計算之前用複數correlate共軛第二個向量。


返回matplotlibxcorr圖。它接收兩個具有相同長度的矢量xy,並計算這些向量在不同滯後時的互相關。

它首先計算xy之間的numpy.correlate的全卷積,如上所示。然後它從位置-maxlags .. maxlags的全輸出向量繪製相關結果。規則是第二個輸入向量被移位。在最左邊的圖形位置處,第二矢量y位於其最左邊的位置(即,從x向左移動)。

檢查,這可能是最簡單的方法:

xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4) 
+0

大,現在我明白在Python模式,但是我應該如何解釋交叉自相關輸出?哪個時間序列滯後? – Plug4

+0

@ Plug4:在我的答案結尾處查看編輯。 – DrV