exponenta event banner

Взаимная корреляция вейвлета для анализа опережения-запаздывания

В этом примере показано, как использовать вейвлет-взаимную корреляцию для измерения подобия между двумя сигналами в разных масштабах.

Вейвлет-кросс-корреляция является просто масштабно-локализованной версией обычной взаимной корреляции между двумя сигналами. При взаимной корреляции определяется сходство между двумя последовательностями путем сдвига одной относительно другой, умножения сдвинутых последовательностей на элемент и суммирования результата. Для детерминированных последовательностей можно записать это как обычное внутреннее произведение: <xn,yn-k>n=∑nxny‾n-k где xn и yn - последовательности (сигналы) и штрих обозначает комплексное сопряжение. Переменная k является переменной запаздывания и представляет сдвиг, применяемый к yn. Если и xn, и yn являются реальными, комплексный конъюгат не является необходимым. Предположим, что yn является той же последовательностью, что и xn, но задерживается на L > 0 выборок, где L - целое число. Для конкретизации предположим, что yn = xn-10. Если вы выражаете yn в терминах xn выше, вы получаете <xn,xn-10-k>n=∑nxnx‾n-10-k. По неравенству Коши - Шварца вышеуказанное максимизируется при k = -10. Это означает, что если вы оставили сдвиг (опережение) на 10 выборок, вы получите максимальное значение кросс-корреляционной последовательности. Если xn является L-задержанной версией yn, xn = yn-L, то последовательность взаимной корреляции максимизируется при k = L. Вы можете показать это с помощьюxcorr.

Создайте треугольный сигнал, состоящий из 20 выборок. Создайте шумно сдвинутую версию этого сигнала. Сдвиг в пике треугольника составляет 3 образца. Постройте график x и y последовательности.

n = 20;
x0 = 1:n/2;
x1 = (2*x0-1)/n;
x = [x1 fliplr(x1)]';
rng default;
y = [zeros(3,1);x]+0.3*randn(length(x)+3,1);

subplot(2,1,1)
stem(x,'filled')
axis([0 22 -1 2])
title('Input Sequence')

subplot(2,1,2)
stem(y,'filled')
axis([0 22 -1 2])
title('Output Sequence')

Figure contains 2 axes. Axes 1 with title Input Sequence contains an object of type stem. Axes 2 with title Output Sequence contains an object of type stem.

Использовать xcorr для получения последовательности взаимной корреляции и определения запаздывания, где получается максимум.

[xc,lags] = xcorr(x,y);
[~,I] = max(abs(xc));
figure
stem(lags,xc,'filled')
legend(sprintf('Maximum at lag %d',lags(I)))
title('Sample Cross-Correlation Sequence')

Figure contains an axes. The axes with title Sample Cross-Correlation Sequence contains an object of type stem. This object represents Maximum at lag -3.

Максимум находится на запаздывании -3. Сигнал y является вторым входом в xcorr и это отложенная версия x. Вы должны сдвинуть y 3 выборки влево (отрицательный сдвиг), чтобы максимизировать взаимную корреляцию. При сторнировании ролей x и y в качестве входных данных для xcorrмаксимальное отставание теперь происходит при положительном запаздывании.

[xc,lags] = xcorr(y,x);
[~,I] = max(abs(xc));
figure
stem(lags,xc,'filled')
legend(sprintf('Maximum at lag %d',lags(I)))
title('Sample Cross-Correlation Sequence')

Figure contains an axes. The axes with title Sample Cross-Correlation Sequence contains an object of type stem. This object represents Maximum at lag 3.

x является расширенной версией y и вы задерживаете x на три выборки для максимизации взаимной корреляции.

modwtxcorr является масштабируемой версией xcorr. Использовать modwtxcorr, вы сначала получите недекимированные вейвлет-преобразования.

Применяют вейвлет-взаимную корреляцию к двум сигналам, которые являются сдвинутыми версиями друг друга. Создайте две экспоненциально затухающие 200-Hz синусоидальные волны с аддитивным шумом. x сигнал имеет свой центр времени на t = 0,2 секунды, в то время какy центрируют при t = 0,5 секунды.

t = 0:1/2000:1-1/2000;
x = sin(2*pi*200*t).*exp(-50*pi*(t-0.2).^2)+0.1*randn(size(t));
y = sin(2*pi*200*t).*exp(-50*pi*(t-0.5).^2)+0.1*randn(size(t));
figure
plot(t,x)
hold on
plot(t,y)
xlabel('Seconds')
ylabel('Amplitude')
grid on
legend('x','y')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent x, y.

Вы видите, что x и y очень похожи, за исключением того, что y задерживается на 0,3 секунды. Получить недекимированное вейвлет-преобразование x и y до уровня 5 с использованием вейвлета Фейера-Коровкина (14). Вейвлет-коэффициенты на уровне 3 с частотой дискретизации 2 кГц являются приблизительной [2000/24 2000/23) полосовой фильтрацией входов. Частотная локализация фильтров Фейера-Коровкина гарантирует, что эта полосовая аппроксимация достаточно хороша.

wx = modwt(x,'fk14',5);
wy = modwt(y,'fk14',5);

Получение последовательностей взаимной корреляции вейвлетов для вейвлет-преобразований x и y. Постройте график последовательности взаимной корреляции 3 уровня для 2000 лагов, центрированных с нулевым запаздыванием. Умножьте задержки на период выборки, чтобы получить значимую ось времени.

[xc,~,lags] = modwtxcorr(wx,wy,'fk14');
lev = 3;
zerolag = floor(numel(xc{lev})/2+1);
tlag = lags{lev}(zerolag-999:zerolag+1000).*(1/2000);
figure
plot(tlag,xc{lev}(zerolag-999:zerolag+1000))
title('Wavelet Cross-Correlation Sequence (level 3)')
xlabel('Time')
ylabel('Cross-Correlation Coefficient')

Figure contains an axes. The axes with title Wavelet Cross-Correlation Sequence (level 3) contains an object of type line.

Последовательность взаимной корреляции достигает пика с задержкой -0,3 секунды. Вейвлет-преобразование y является вторым входом в modwtxcorr. Потому что второй вход modwtxcorr сдвигается относительно первого, пиковая корреляция возникает при отрицательной задержке. Для выравнивания временных рядов необходимо оставить (продвинуть) последовательность взаимной корреляции. При изменении ролей входных данных на modwtxcorr, получается пиковая корреляция с положительным запаздыванием.

[xc,~,lags] = modwtxcorr(wy,wx,'fk14');
lev = 3;
zerolag = floor(numel(xc{lev})/2+1);
tlag = lags{lev}(zerolag-999:zerolag+1000).*(1/2000);
figure
plot(tlag,xc{lev}(zerolag-999:zerolag+1000))
title('Wavelet Cross-Correlation Sequence (level 3)')
xlabel('Time')
ylabel('Cross-Correlation Coefficient')

Figure contains an axes. The axes with title Wavelet Cross-Correlation Sequence (level 3) contains an object of type line.

Чтобы показать, что вейвлет-взаимная корреляция позволяет масштабировать (частотно) локализованную корреляцию, постройте график последовательностей взаимной корреляции на уровнях 1 и 5.

lev = 1;
zerolag = floor(numel(xc{lev})/2+1);
tlag = lags{lev}(zerolag-999:zerolag+1000).*(1/2000);
plot(tlag,xc{lev}(zerolag-999:zerolag+1000))
title('Wavelet Cross-Correlation Sequence (level 1)')
xlabel('Time')
ylabel('Cross-Correlation Coefficient')

Figure contains an axes. The axes with title Wavelet Cross-Correlation Sequence (level 1) contains an object of type line.

figure
lev = 5;
zerolag = floor(numel(xc{lev})/2+1);
tlag = lags{lev}(zerolag-999:zerolag+1000).*(1/2000);
plot(tlag,xc{lev}(zerolag-999:zerolag+1000))
title('Wavelet Cross-Correlation Sequence (level 5)')
xlabel('Time')
ylabel('Cross-Correlation Coefficient')

Figure contains an axes. The axes with title Wavelet Cross-Correlation Sequence (level 5) contains an object of type line.

Последовательности взаимной корреляции волн на уровнях 1 и 5 не показывают никаких доказательств экспоненциально взвешенных синусоид из-за полосового характера вейвлет-преобразования.

При использовании финансовых данных между переменными часто существует ведущая или запаздывающая связь. В этих случаях полезно исследовать последовательность взаимной корреляции, чтобы определить, максимизирует ли запаздывание одной переменной относительно другой их взаимную корреляцию. Для иллюстрации этого рассмотрим взаимосвязь между двумя компонентами ВВП -- расходами на личное потребление и валовыми частными внутренними инвестициями. Данные представляют собой ежеквартально взвешенные данные реального ВВП США для 1974Q1- 2012Q4. Данные были преобразованы, сначала взяв натуральный логарифм, а затем рассчитав годовую разницу. Посмотрите на корреляцию между двумя компонентами ВВП - расходы на личное потребление, pcи валовые частные внутренние инвестиции, privateinvest.

load GDPcomponents
piwt = modwt(privateinvest,'fk8',5);
pcwt = modwt(pc,'fk8',5);
figure
modwtcorr(piwt,pcwt,'fk8')

Figure contains an axes. The axes with title Correlation by Scale -- Wavelet Coefficients contains 2 objects of type errorbar, line.

Личные расходы и личные инвестиции негативно коррелируют в течение 2-4 кварталов. В более длительных масштабах наблюдается сильная положительная корреляция между личными расходами и личными инвестициями. Изучите вейвлет-последовательность взаимной корреляции на шкале, представляющей 2-4 четверти циклов. Постройте график последовательности взаимной корреляции вместе с 95% доверительными интервалами.

[xcseq,xcseqci,lags] = modwtxcorr(piwt,pcwt,'fk8');
zerolag = floor(numel(xcseq{1})/2)+1;
figure
plot(lags{1}(zerolag:zerolag+20),xcseq{1}(zerolag:zerolag+20))
hold on
plot(lags{1}(zerolag:zerolag+20),xcseqci{1}(zerolag:zerolag+20,:),'r--')
xlabel('Lag (Quarters)')
ylabel('Cross-Correlation')
grid on
title({'Wavelet Cross-Correlation Sequence -- [2Q,4Q)'; ...
    'Personal Consumption and Private Investment'})

Figure contains an axes. The axes with title Wavelet Cross-Correlation Sequence -- [2Q,4Q) Personal Consumption and Private Investment contains 3 objects of type line.

Наиболее точная последовательность взаимной корреляции сейсмического импульса показывает пиковую положительную корреляцию с запаздыванием в одну четверть. Это указывает на то, что личные инвестиции отстают от личных расходов на четверть. Если принять во внимание эту запаздывающую взаимосвязь, то между компонентами ВВП есть положительная корреляция на всех шкалах.