我正在调查NumPy correlation function

numpy.correlate(a, v, mode='valid')[source]
Cross-correlation of two 1-dimensional sequences.


此函数计算信号处理文本中通常定义的相关性:

c_{av}[k] = sum_n a[n+k] * conj(v[n])


然后举个例子:

a = [1, 2, 3]
v = [0, 1, 0.5]
np.correlate([1, 2, 3], [0, 1, 0.5], "full")
array([ 0.5,  2. ,  3.5,  3. ,  0. ])


因此,在此示例中,输出数组中的k为0到4。但是,我想知道在(n + k)> 2的情况下如何定义a [n + k]?

另外,如何定义conjugate(v(n))以及如何计算数组中的每个元素?

最佳答案

公式c_{av}[k] = sum_n a[n+k] * conj(v[n])有点误导,因为左侧的k不一定是输出数组的Python索引。在“完全”模式下,k的可能值是存在至少一个n从而定义了a[n+k] * conj(v[n])的值(即,n + k和n都位于相应数组的范围内) )。

在您的示例中,sum_n a[n+k] * conj(v[n])中的k可以是-2,-1、0、1、2。它们生成您看到的5个值。例如,k为-2导致a[2-2]*conj(v[2])为0.5,依此类推。

通常,在“完全”模式下,k的范围是从1-len(a)len(v)-1(包括两端)。因此,如果k确实被理解为Python索引,则公式应为

c_{av}[k] = sum_n a[n+k+len(a)-1] * conj(v[n])

10-06 04:19