我正在尝试使用 MATLAB 查找 t = [0,1000] 上的两个时间序列之间的时间滞后(没关系)。第一个时间序列只是 t^2。第二个是 (t-15)^2,当然,它向右移动了 15 个单位(例如,秒)。我的方法是找到互相关(使用 FFT 计算),然后使用其中的最大值来确定适当的时移。出于某种原因,我一直得到的答案是 0,这没有任何意义。谁能告诉我我做错了什么?谢谢!
如图所示,我使用 FFT 计算了互相关(所有代码都在 MATLAB 中;注意 fft 是快速傅里叶变换函数,ifft 是快速傅里叶逆变换函数):
t = [1:1000];
a = t.^2;
b = (t-15).^2;
if (length(a) < length(b))
c = [zeros(1,length(b)-1) a zeros(1,length(b)-length(a))];
d = [b zeros(1,length(b)-1)];
else
c = [zeros(1,length(a)-1) a];
d = [b zeros(1,length(a)-length(b)+length(a)-1)];
end
c_fft = fft(c);
d_fft = fft(d);
cross_spectral_density = c_fft.*conj(d_fft);
cross_correlations = ifft(cross_spectral_density);
[max_xcorr shift_idx] = max(abs(cross_correlations));
shift = shift_idx - max(length(a),length(b));