在Python中计算规范化的互相关

Dan*_*aro 10 python numpy correlation cross-correlation

在参考Chelton(1983)后,我一直在努力计算两对向量(x和y)的自由度,这是:

根据切尔顿(1983)的自由度

并且我找不到使用np.correlate计算归一化互相关函数的正确方法,我总是得到一个不在-1,1之间的输出.

为了计算两个向量的自由度,有没有简单的方法来对互相关函数进行归一化?

mak*_*kis 10

好问题。没有直接的方法,但是您可以np.correlate像这样使用之前“标准化”输入向量,并且将在[-1,1]范围内返回合理的值:

在这里,我定义了相关性,如信号处理教科书中通常定义的那样。

c'_{ab}[k] = sum_n a[n] conj(b[n+k])
Run Code Online (Sandbox Code Playgroud)

代码:如果a和b是向量:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')
Run Code Online (Sandbox Code Playgroud)

参考文献:

https://docs.scipy.org/doc/numpy/reference/generation/numpy.correlate.html

https://zh.wikipedia.org/wiki/交叉关联

在此处输入图片说明


Ene*_*bek 7

MATLAB \xe2\x9e\x9c xcorr(a, b, '标准化');

\n

Python 中的 MATLAB 归一化互相关实现。

\n
import numpy as np\na = [1, 2, 3, 4]\nb = [2, 4, 6, 8]\nnorm_a = np.linalg.norm(a)\na = a / norm_a\nnorm_b = np.linalg.norm(b)\nb = b / norm_b\nc = np.correlate(a, b, mode = 'full')\n
Run Code Online (Sandbox Code Playgroud)\n