python里面的corr函数含义_Python:XCORR的解释

mode参数确定边界附近发生的情况.如果您有长度为x和y(x> y)的输入向量:

> valid / 0:只接收两个信号重叠的卷积部分(x-y 1个点)

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

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

这些模式的数字不是很公开定义,可以在numpy的源代码中找到.在任何情况下,xcorruses完整模式. (实际上,在给出卷积或关联模式时,只有模式名称的第一个字母很重要.)

关于这些功能的真正作用存在一些混淆. 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被交换,卷积会给出相同的结果,在这种情况下,相关性会产生相反的结果.对于复数,在上面的计算之前将第二矢量的共轭相关联.

回到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的解释)