在Matlab中进行互相关以计算两个时间序列的时滞

时间:2019-03-19 20:39:27

标签: matlab cross-correlation

我有两个时间序列y1和y2,需要在Matlab中使用互相关来找到它们之间的时间差。然后,我需要绘制互相关图,对齐两个图并重新绘制图。我已经写了一些Matlab代码来做到这一点,但是我认为互相关图很奇怪,我无法解释它。我不确定我在做什么错,请您能帮忙吗?谢谢。

这是我的代码:

% Generate time series 

t = 1:1000;
y1=2*sin(2*pi*t/5);
y2=2*sin(2*pi*t/5 + 2); % y2 has an introduce phase lag of 2

% Plot the two time series 
figure (1)
plot (t,y1, 'b-', t,y2, 'r-');
axis ([0 50 -2 2]), grid;

% compute the cross correlation using the function xcorr
maxlag = length(y1);   %# set a max lag value here

[c,lags]=xcorr(y1,y2, 'coeff');% compute cross correlation

figure (2);
plot(lags,c)% plot lag versus correlation

1 个答案:

答案 0 :(得分:1)

问题是您的“信号”只是一个从1到1000的长正弦曲线。因此代码可以很好地工作,但是您不明白为什么绘图是三角形的。好吧,这是因为在第一个元素上,样本重叠的大小很小(例如y1(1:5)+ y2(end-4:end)),所以在该点获得的幅度小于整个信号时的幅度重叠(例如y1(1:end)+ y2(1:end))。仅查看带有框的xcorr框的草图(之所以这样做,是因为您在整个网格中从1到1000发出信号)

enter image description here