Соответствие с преследованием

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

В этом примере показано, как создать и визуализировать словарь, состоящий из вейвлета Хаара вниз к уровню 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

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

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

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

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

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

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

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

Анализ потребления электричества Используя соответствие с преследованием

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

Совпадая с преследованием Используя DCT, синус и словари вейвлета

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

load elec35_nor
x = signals(32,:);

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

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

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

Увеличьте масштаб временного интервала от 500 минут до 1 200 минут.

xlim([500 1200])

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

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

Создайте приближение сигнала с помощью 35 векторов, выбранных из словаря с ортогональным преследованием соответствия (OMP). Словарь состоит из Добечи экстремальный вейвлет фазы и масштабирующиеся векторы на уровне 2, базисе дискретного косинусного преобразования (DCT), базисе синуса, Кронекеровом базисе дельты и Добечи наименьшее количество асимметричного вейвлета фазы и масштабирующихся векторов с 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 object. The axes object 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 вейвлета Daubechies (db4) векторы уровня 2

  • 16 векторов Дискретного косинусного преобразования

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

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

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

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

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

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 object. The axes object 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 object. The axes object with title Full Dictionary contains 2 objects of type line.

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

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

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

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 object. The axes object contains 2 objects of type line. These objects represent Original Signal, Nonlinear DFT Approximation.

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

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 object. The axes object contains 2 objects of type line. These objects represent Original Signal, Nonlinear DFT Approximation.