Взаимная корреляция вейвлета для анализа Ведущей Задержки

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

Взаимная корреляция вейвлета является просто локализованной версией шкалы обычной взаимной корреляции между двумя сигналами. Во взаимной корреляции вы определяете подобие между двумя последовательностями путем сдвига один относительно другого, умножения переключенных последовательностей поэлементно и подведения итогов результата. Для детерминированных последовательностей можно записать это как обычное скалярное произведение: <xn,yn-k>n=nxnyn-k где xn и yn последовательности (сигналы), и панель обозначает комплексное спряжение. Переменная, k, является переменной задержки и представляет сдвиг, к которому применяются yn. Если оба xn и yn действительны, сопряженное комплексное число не необходимо. AssumeThat yn та же последовательность как xn но задержанный L> 0 выборок, где L является целым числом. Для конкретности принять yn=xn-10. Если вы описываете yn в терминах xn выше, вы получаете <xn,xn-10-k>n=nxnxn-10-k. Неравенством Коши-Шварца вышеупомянутое максимизируется когда k=-10. Это означает если вы сдвиг влево (усовершенствование) yn 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 objects. Axes object 1 with title Input Sequence contains an object of type stem. Axes object 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 object. The axes object 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 object. The axes object 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 Гц с аддитивным шумом. 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 object. The axes object 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 для 2 000 задержек, сосредоточенных в нулевой задержке. Умножьте задержки на период выборки, чтобы получить значимую ось времени.

[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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object with title Wavelet Cross-Correlation Sequence (level 5) contains an object of type line.

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

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

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

Figure contains an axes object. The axes object 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 object. The axes object with title Wavelet Cross-Correlation Sequence -- [2Q,4Q) Personal Consumption and Private Investment contains 3 objects of type line.

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