Кросс-корреляция в Matlab для вычисления временного лага для двух временных рядов - PullRequest
0 голосов
/ 19 марта 2019

У меня есть два временных ряда, 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 Ответ

1 голос
/ 20 марта 2019

Проблема в том, что ваш «сигнал» представляет собой одну длинную синусоиду от 1 до 1000. Поэтому коды работают отлично, но вы не понимаете, почему график имеет треугольную форму. Ну, это потому, что на первых элементах размер перекрытия выборки мал (скажем, y1 (1: 5) + y2 (end-4: end)), поэтому амплитуда, которую вы получаете в этой точке, меньше, чем когда весь сигнал перекрытие (скажем, y1 (1: конец) + y2 (1: конец)). Посмотрите на эскиз только коробки xcorr с коробкой (это то, что вы на самом деле делаете, потому что у вас есть сигнал по всей сетке от 1 до 1000)

enter image description here

...