pythonnumpymachine-learningcorrelationcross-correlation

Normalized Cross-Correlation in Python


I have been struggling the last days trying to compute the degrees of freedom of two pair of vectors (x and y) following reference of Chelton (1983) which is:

degrees of freedom according to Chelton(1983)

and I can't find a proper way to calculate the normalized cross correlation function using np.correlate, I always get an output that it isn't in between -1, 1.

Is there any easy way to get the cross correlation function normalized in order to compute the degrees of freedom of two vectors?


Solution

  • Nice Question. There is no direct way but you can "normalize" the input vectors before using np.correlate like this and reasonable values will be returned within a range of [-1,1]:

    Here i define the correlation as generally defined in signal processing textbooks.

    c'_{ab}[k] = sum_n a[n] conj(b[n+k])
    

    CODE: If a and b are the vectors:

    a = (a - np.mean(a)) / (np.std(a) * len(a))
    b = (b - np.mean(b)) / (np.std(b))
    c = np.correlate(a, b, 'full')
    

    References:

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

    https://en.wikipedia.org/wiki/Cross-correlation

    enter image description here