mode
參數確定邊界附近發生了什麼。如果你有長度x和y(X> Y)的輸入向量:
valid
/0:其中兩個信號重疊您將僅接收卷積的部分(X-Y + 1個點)
- 輸出矢量的長度與較長輸入矢量(x點)的長度相同
full
/2:來自信號之間甚至存在單個重疊樣本的區域的所有數據( x + y-1分)
數字fo這些模式並不是非常公開的,它們可以在numpy
的源代碼中找到。無論如何xcorr
使用full
模式。 (實際上,在給出convolve
或correlate
的模式時,只有模式名稱的第一個字母很重要。)
對於這些函數的功能有些疑惑。 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
所以,基本上與實數的唯一的區別是,矢量的一個被鏡像。這會帶來一些後果,例如,如果a
和b
被交換,則卷積會給出相同的結果,在這種情況下,相關會給出相反的結果。在上面的計算之前用複數correlate
共軛第二個向量。
返回matplotlib
的xcorr
圖。它接收兩個具有相同長度的矢量x
和y
,並計算這些向量在不同滯後時的互相關。
它首先計算x
和y
之間的numpy.correlate
的全卷積,如上所示。然後它從位置-maxlags
.. maxlags
的全輸出向量繪製相關結果。規則是第二個輸入向量被移位。在最左邊的圖形位置處,第二矢量y
位於其最左邊的位置(即,從x
向左移動)。
檢查,這可能是最簡單的方法:
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)
大,現在我明白在Python模式,但是我應該如何解釋交叉自相關輸出?哪個時間序列滯後? – Plug4
@ Plug4:在我的答案結尾處查看編輯。 – DrV