# Autocorrelation.y1 = [1, 1, 0, 0, 1, -1, -1]corr, lag = cross_corr(y1, y1)self.assertEqual(lag, 0)y1 = [1, 1, 0 ,1, -1, -1]y2 = [1, 0, 1, 0, 0, 2]corr, lag = cross_corr(y1, y2)self.assertEqual(lag, -2)
这是我的代码。
import numpy as npdef cross_corr(y1, y2): """Calculates the cross correlation and lags without normalization. The definition of the discrete cross-correlation is in: https://www.mathworks.com/help/matlab/ref/xcorr.html Args: y1, y2: Should have the same length. Returns: max_corr: Maximum correlation without normalization. lag: The lag in terms of the index. """ if len(y1) != len(y2): raise ValueError('The lengths of the inputs should be the same.') y1_auto_corr = np.dot(y1, y1) / len(y1) y2_auto_corr = np.dot(y2, y2) / len(y1) corr = np.correlate(y1, y2, mode='same') # The unbiased sample size is N - lag. unbiased_sample_size = np.correlate( np.ones(len(y1)), np.ones(len(y1)), mode='same') corr = corr / unbiased_sample_size / np.sqrt(y1_auto_corr * y2_auto_corr) shift = len(y1) // 2 max_corr = np.max(corr) argmax_corr = np.argmax(corr) return max_corr, argmax_corr - shift
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)