Соответствующее преследование

Соответствие создания и визуализации словаря преследования

В этом примере показано, как создать и визуализировать словарь, состоящий из вейвлета Haar, до уровня 2.

[mpdict,~,~,longs] = wmpdictionary(100,'lstcpt',{{'haar',2}});

Используйте longs выходной аргумент для деления вейвлет-словаря на уровень и тип функции (масштабирование или вейвлет). Пройдите график переведенных функций масштабирования и вейвлетов по уровням.

for nn = 1:size(mpdict,2)
    if (nn <= longs{1}(1))
        plot(mpdict(:,nn),'k','linewidth',2)
        grid on
        xlabel('Translation')
        title('Haar Scaling Function - Level 2')
    elseif (nn>longs{1}(1) && nn<= longs{1}(1)+longs{1}(2))
        plot(mpdict(:,nn),'r','linewidth',2)
        grid on
        xlabel('Translation')
        title('Haar Wavelet - Level 2')
    else
        plot(mpdict(:,nn),'b','linewidth',2)
        grid on
        xlabel('Translation')
        title('Haar Wavelet - Level 1')
    end
        pause(0.2)
end

Эта анимация бесконечно петлет через все сгенерированные графики.

Ортогональное совпадение преследования по 1-D сигналу

Этот пример показывает, как выполнить ортогональное совпадение для входного сигнала 1-D, который содержит cusp.

Загрузите сигнал cuspamax. Создайте словарь, состоящий из наименее асимметричных вейвлет-пакетов Daubechies на уровне 4, вейвлетов экстремальной фазы Daubechies на уровне 2, базиса DCT-II, основа sin и сдвинутого базиса дельты Кронекера.

load cuspamax;
dict = {{'wpsym4',1},{'db4',2},'dct','sin','RnIdent'};
mpdict = wmpdictionary(length(cuspamax),'lstcpt',dict);

Используйте ортогональное совпадение для получения приближения сигнала в словаре overcomplete, mpdict, с 25 итерациями. Постройте график результата как фильм, обновляя каждые 5 итераций.

[yfit,r,coeff,iopt,qual] = wmpalg('OMP',cuspamax,mpdict,'typeplot',...
    'movie','stepplot',5);

Анализ потребления электроэнергии с использованием совпадающего преследования

Этот пример показывает, как сравнить совпадающее преследование с нелинейным приближением в дискретном базисе преобразования Фурье. Данные представляют собой данные о потреблении электроэнергии, собранные за 24 часа. Пример демонстрирует, что, выбирая атомы из словаря, совпадающее преследование часто способно аппроксимировать вектор более эффективно с M векторами, чем любой отдельный базис.

Соответствие преследованию с использованием словарей DCT, Sine и Wavelet

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

load elec35_nor
x = signals(32,:);

plot(x)
xlabel('Minutes')
ylabel('Usage')

Figure contains an axes. The axes contains an object of type line.

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

Изменение масштаба интервала времени от 500 минут до 1200 минут.

xlim([500 1200])

Figure contains an axes. The axes contains an object of type line.

Вы можете увидеть резкие изменения в медленно изменяющемся сигнале примерно на 650, 760 и 1120 минутах. Во многих реальных сигналах, подобных этим данным, интересная и важная информация содержится в переходных процессах. Важно смоделировать эти переходные явления.

Создайте приближение сигнала, используя 35 векторов, выбранных из словаря с ортогональным поиском соответствия (OMP). Словарь состоит из вейвлет экстремальной фазы Daubechies и векторов масштабирования на уровне 2, базиса дискретного косметического преобразования (DCT), синусоидального базиса, базиса дельты Кронекера и наименее асимметричного фазового вейвлета Daubechies и векторов масштабирования с 4 моментами исчезновения на уровнях 1 и 4. Затем используйте OMP, чтобы найти лучшее 35-терминовое жадное приближение данных электрического потребления. Постройте график результата.

dictionary = {{'db1',2},{'db1',3},'dct','sin','RnIdent',{'sym4',4}};
[mpdict,nbvect] = wmpdictionary(length(x),'lstcpt',dictionary);
[y,~,~,iopt] = wmpalg('OMP',x,mpdict);

plot(x)
hold on
plot(y)
hold off
xlabel('Minutes')
ylabel('Usage')
legend('Original Signal','OMP')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, OMP.

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

Определите, сколько векторов алгоритм OMP выбрал из каждого из подсловарей.

basez = cumsum(nbvect);
k = 1;
for nn = 1:length(basez)
    if (nn == 1)
        basezind{nn} = 1:basez(nn);
    else
        basezind{nn} = basez(nn-1)+1:basez(nn);
    end
end
dictvectors = cellfun(@(x)intersect(iopt,x),basezind, ...
    'UniformOutput',false);

Большинство (60%) векторов происходит из базиса DCT и синуса. Учитывая общий медленно изменяющийся характер данных о потреблении электроэнергии, это ожидаемое поведение. Дополнительные 14 векторов из вейвлета подсловарей захватывают резкие изменения сигнала. Количество векторов каждого типа:

  • 3 вектора уровня 2 Daubechies вейвлет (db4)

  • 16 Дискретных векторов косинусоидального преобразования

  • 5 векторов синуса

  • 2 Daubechies наименее-асимметричные векторы вейвлет (sym4) уровня 1

  • 9 Daubechies наименее асимметричных векторов вейвлет (sym4) уровня 4

Соответствие преследования с использованием DCT и словаря синуса по сравнению с полным словарем

Повторите OMP только с подсловарями DCT и sine. Установите OMP, чтобы выбрать 35 лучших векторов из словаря DCT-sine. Создайте словарь и выполните OMP. Сравните OMP со словарем DCT-sine с OMP с дополнительными вейвлетами подсловарями. Заметьте, что добавление вейвлета подсловарей показывает резкие изменения в потреблении электроэнергии более точно. Преимущество включения вейвлета основ особенно очевидно в аппроксимацию восходящих и нисходящих шипов при использовании приблизительно на 650 и 1120 минутах.

dictionary2 = {'dct','sin'};
[mpdict2,nbvect2] = wmpdictionary(length(x),'lstcpt',dictionary2);
y2 = wmpalg('OMP',x,mpdict2,'itermax',35);

plot(x)
hold on
plot(y2,'linewidth',2)
hold off
title('DCT and Sine Dictionary')
xlabel('Minutes')
ylabel('Usage')
xlim([500 1200])

Figure contains an axes. The axes with title DCT and Sine Dictionary contains 2 objects of type line.

figure
plot(x)
hold on
plot(y,'linewidth',2)
hold off
title('Full Dictionary')
xlabel('Minutes')
ylabel('Usage')
xlim([500 1200])

Figure contains an axes. The axes with title Full Dictionary contains 2 objects of type line.

Получите лучшее 35-терминовое нелинейное приближение сигнала в дискретном базисе Фурье. Получите ДПФ данных, отсортируйте коэффициенты ДПФ и выберите 35 самых больших коэффициентов. ДПФ реального сигнала сопряжена симметрично, поэтому учитывайте только частоты от 0 (DC) до Nyquist (1/2 цикла/минуту).

xdft = fft(x);
[~,I] = sort(xdft(1:length(x)/2+1),'descend');
ind = I(1:35);

Исследуйте векторную ind. Ни один из индексов не соответствует 0 или Nyquist. Добавьте соответствующий комплексный сопряженный, чтобы получить нелинейное приближение в базисе ДПФ. Постройте график приближения и исходного сигнала.

indconj = length(xdft)-ind+2;
ind = [ind indconj];
xdftapp = zeros(size(xdft));
xdftapp(ind) = xdft(ind);
xrec = ifft(xdftapp);

plot(x)
hold on
plot(xrec,'LineWidth',2)
hold off
xlabel('Minutes')
ylabel('Usage')
legend('Original Signal','Nonlinear DFT Approximation')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, Nonlinear DFT Approximation.

Подобно словарю DCT-sine, нелинейное приближение ДПФ хорошо работает при согласовании плавных колебаний в данных о потреблении электроэнергии. Однако нелинейное приближение ДПФ не аппроксимирует резкие изменения точно. Изменение масштаба интервала данных, содержащих резкие изменения в потреблении.

plot(x)
hold on
plot(xrec,'LineWidth',2)
hold off
xlabel('Minutes')
ylabel('Usage')
legend('Original Signal','Nonlinear DFT Approximation')
xlim([500 1200])

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, Nonlinear DFT Approximation.