最近再做一个小作业,是关于寻找太平洋Nino3.4区和热带印度洋(TI)海温(SST)的最大超前滞后关系,不可避免需要求解互相关函数。其中numpy,scipy,statsmodels均有求解互相关的函数,最后选择numpy.correlate。但是我发现其中关于互相关的定义好像有点问题(或者函数其实并不完善),其中问题如下:
先来看一下numpy.correlate计算定义:c_{av}[k] = sum_n a[n+k] * conj(v[n]) (其中conj为求解共轭,对于实数时间序列,不必考虑),简单来说numpy.correlate做的事情就是计算出两个序列之间的"错位点积"
a=[1,2,3]
b=[2,4,5]
那么当时滞为1(即a落后b一位)时,"错位点积"为2×2+3×4=16,当时滞为-1(即a超前b一位),“错位点积”为1×4+2×5=14,其他情况也是以此类推。
那么问题就来了,函数中并没提供'unbiased'和'normalize'的选项,仅仅是求解了"错位点积",这样就可以代表互相关函数吗?
在我查阅资料过程中,我翻到了知乎上的这篇文章:明天:卷积、互相关与自相关zhuanlan.zhihu.com
似乎在信号处理中,定义的确是这样。但是类似功能的MATLAB函数xcorr提供了'unbiased'和'normalize'的选项,同时还有'maxlags'规定最大时滞的参数。statsmode