Python规范化一维互相关
我编写了一些Python代码来模拟MATLABsPython规范化一维互相关,python,matlab,signal-processing,normalization,correlation,Python,Matlab,Signal Processing,Normalization,Correlation,我编写了一些Python代码来模拟MATLABsxcorr函数的交叉相关性: def xcorr(x, y, scale='none'): # Pad shorter array if signals are different lengths if x.size > y.size: pad_amount = x.size - y.size y = np.append(y, np.repeat(0, pad_amount)) elif
xcorr
函数的交叉相关性:
def xcorr(x, y, scale='none'):
# Pad shorter array if signals are different lengths
if x.size > y.size:
pad_amount = x.size - y.size
y = np.append(y, np.repeat(0, pad_amount))
elif y.size > x.size:
pad_amount = y.size - x.size
x = np.append(x, np.repeat(0, pad_amount))
corr = np.correlate(x, y, mode='full') # scale = 'none'
lags = np.arange(-(x.size - 1), x.size)
if scale == 'biased':
corr = corr / x.size
elif scale == 'unbiased':
corr /= (x.size - abs(lags))
elif scale == 'coeff':
corr /= np.sqrt(np.dot(x, x) * np.dot(y, y))
在比较不同规模类型的值与MATLABs实现时,我得到了相同的值,因此这似乎是正确的
我想补充的另一件事是能够规范化互相关值,这样峰值就不会超过1.0
,而谷值就不会降到-1.0
coeff
已经标准化了,所以我不担心这一点。但是,其他比例类型可以超过-1/1界限
我试过几件事:
corr/=max(corr)
添加到我的函数末尾,以规范化corr
,无论选择了哪个比例选项。这会保持上界在检查中,但我不确定这是否正确处理下界corr/=np.sqrt(np.dot(x,x)*np.dot(y,y))
添加到所有选项的函数末尾,但这似乎将我的值挤压到远离1.0的地方规范化
无
、有偏
和无偏
缩放选项的正确方法是什么?MATLAB没有这方面的功能,Google也没有为有偏/无偏互相关估计的标准化提供任何结果。以下内容应该满足您的要求,尽管我不确定它是否在统计上有效:
corr /= max(np.abs(corr))
我很困惑<代码>无表示无标准化,
有偏
和无偏
表示适当的标准化,因此输出样本对应于适当的估计值。“我应该对有偏差的相关性估计应用什么标准化,使其限定在[-1,1]”这一点是没有意义的,因为这样估计就不再是有偏差的估计了,它将是其他的东西。唯一具有此特性的估计器(在这组估计器中)是相关系数(的信号处理变量),它是coeff
所对应的
这个实现是很好的。任何在[-1,1]区间寻找数字的人都知道,他们应该通过np.corrcoef()
询问相关系数