mode参数确定边界附近发生的事情。如果有长度为x和y(x>y)的输入向量:valid/0:只接收两个信号重叠(x-y+1点)的卷积部分

same/1:输出向量的长度与较长输入向量的长度相同(x点)

full/2:来自信号(x+y-1点)之间甚至有一个重叠样本的区域的所有数据

这些模式的数字不是很公开定义的,但是可以在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中corr函数_Python:XCORR的解释