Python:XCORR的解释

时间:2014-06-24 21:25:45

标签: python numpy correlation

我在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模式为= validfullsame

1 个答案:

答案 0 :(得分:8)

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

  • valid / 0:你只会收到两个信号重叠的卷积部分(x-y + 1个点)
  • same / 1:输出向量的长度与较长输入向量的长度相同(x点)
  • full / 2:来自信号之间甚至只有一个重叠样本的区域的所有数据(x + y-1分)

这些模式的数字并非公开定义,可以在numpy的源代码中找到。在任何情况下,xcorr都使用full模式。 (实际上,在为convolvecorrelate提供模式时,只有模式名称的第一个字母才有意义。)

对于这些功能的真正作用存在一些混淆。根据{{​​1}}版本,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的{​​{1}}图表。它接收两个长度相等的向量matplotlibxcorr,并计算这些向量在不同滞后时的互相关性。

首先计算xy之间numpy.correlate的完整卷积,如上所示。然后,它从位置x .. y处的完整输出向量绘制相关结果。规则是第二个输入向量被移位。在最左边的图形位置,第二个向量-maxlags位于其最左侧位置(即从maxlags向左移动)。

检查此问题的最简单方法可能是:

y