Python:对XCORR的解释
我有一个关于Python的问题。假设我执行以下操作:Python:对XCORR的解释,python,numpy,correlation,Python,Numpy,Correlation,我有一个关于Python的问题。假设我执行以下操作: output=plt.xcorr(x,y, maxlags=4) 哪个时间序列是滞后的?输出将是时间t=-4到+4时x和y之间的互相关。那么,输出是否指x和y之间的互相关,如下所示: 或者它是x和y之间的倒数? 我试图深入研究xcorr的代码以获得更好的想法(请参阅),但我有点不知所措。。。np.相关(x,y,模式=2)。mode=2意味着什么?我只看到模式是=有效,完整,或相同 模式参数确定边界附近发生的情况。如果有长度为x和y(x>y
output=plt.xcorr(x,y, maxlags=4)
哪个时间序列是滞后的?输出将是时间t=-4到+4时x和y之间的互相关。那么,输出是否指x和y之间的互相关,如下所示:
或者它是x和y之间的倒数?
我试图深入研究xcorr的代码以获得更好的想法(请参阅),但我有点不知所措。。。np.相关(x,y,模式=2)。mode=2意味着什么?我只看到模式是=
有效
,完整
,或相同
模式参数确定边界附近发生的情况。如果有长度为x和y(x>y)的输入向量:
/0:您将只接收两个信号重叠的卷积部分(x-y+1点)valid
/1:输出向量的长度与较长输入向量的长度相同(x点)相同
/2:信号(x+y-1点)之间甚至有一个重叠样本的区域的所有数据full
numpy
的源代码中找到。在任何情况下,xcorr
都使用full
模式。(实际上,在为corvalve
或correlate
指定模式时,只有模式名称的首字母起作用)
关于这些函数的真正作用,存在一些混淆numpy.correlate
有两种不同的行为,具体取决于numpy
版本。内部称为multiarray.correlate
(旧)和multiarray.correlate2
(新)numpy.convalve
反转第二个输入向量,然后使用multiarray.correlate
(即不推荐用于相关的向量)
所以,如果你真的想确定的话,你可以测试发生了什么。基本函数是两个向量之间的乘积,其中向量一次移动一个位置。为了澄清这一点,我将使用一些带有两个向量的数值示例
a <= [1,2,3,4,5]
b <= [10,20]
这是因为:
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
时,卷积会给出相同的结果,在这种情况下,相关会给出相反的结果。使用复数关联
在上述计算之前共轭第二个向量
回到
matplotlib
的xcorr
图形。它接收两个长度相等的向量x
和y
,并计算这些向量在不同滞后时间的互相关
它首先使用numpy计算完整卷积。如上所示,在x
和y
之间关联。然后,它从位置-maxlags
处的完整输出向量中提取相关结果。maxlags
。规则是第二个输入向量移位。在最左边的图形位置,第二个向量y
位于其最左边的位置(即从x
向左移动)
检查这一点的最简单方法可能是:
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)
很好,现在我理解了Python中的模式,但是我应该如何解释交叉自相关输出?哪个时间序列是滞后的?
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)