В этом примере показано, как создать и визуализировать словарь, состоящий из вейвлета Хаара до уровня 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 входного сигнала, содержащего 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);
Используйте поиск ортогонального сопоставления для получения аппроксимации сигнала в сверхполном словаре, mpdict, с 25 итерациями. Постройте график в виде фильма, обновляя каждые 5 итераций.
[yfit,r,coeff,iopt,qual] = wmpalg('OMP',cuspamax,mpdict,'typeplot',... 'movie','stepplot',5);

В этом примере показано, как сравнивать поиск соответствия с нелинейным приближением в дискретном базисе преобразования Фурье. Данные представляют собой данные о потреблении электроэнергии, собранные в течение 24-часового периода. Пример демонстрирует, что, выбирая атомы из словаря, совпадающий поиск часто способен более эффективно аппроксимировать вектор с М векторами, чем любой единственный базис.
Поиск соответствия с использованием словарей DCT, Sine и Wavelet
Загрузите набор данных и постройте график данных. Набор данных содержит 35 дней потребления электроэнергии. Выберите день 32 для дальнейшего анализа. Данные центрируются и масштабируются, поэтому фактические единицы использования не являются релевантными.
load elec35_nor x = signals(32,:); plot(x) xlabel('Minutes') ylabel('Usage')

Данные о потреблении электроэнергии содержат плавные колебания, пунктуированные резким увеличением и уменьшением потребления.
Увеличьте временной интервал от 500 минут до 1200 минут.
xlim([500 1200])

Вы можете увидеть резкие изменения в медленно изменяющемся сигнале приблизительно через 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')
Вы можете видеть, что с 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%) векторов происходит из ДКП и синусоидальной основы. Учитывая общий медленно изменяющийся характер данных о потреблении электроэнергии, это ожидаемое поведение. Дополнительные 14 векторов из субсловарей вейвлет фиксируют резкие изменения сигнала. Число векторов каждого типа:
3 Вектора вейвлета Daubechies (db4) уровня 2
16 Векторы дискретного косинусного преобразования
5 Синусоидальных векторов
2 Векторы уровня 1 наименее асимметричного вейвлета (sym4)
9 Векторы уровня 4 наименее асимметричного вейвлета (sym4)
Сопоставление поиска с использованием DCT и словаря синусоиды и полного словаря
Повторите OMP только с субсловарями DCT и sine. Установите OMP для выбора 35 лучших векторов из DCT-синусоидального словаря. Создайте словарь и выполните OMP. Сравните OMP с DCT-синусоидальным словарем с 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 plot(x) hold on plot(y,'linewidth',2) hold off title('Full Dictionary') xlabel('Minutes') ylabel('Usage') xlim([500 1200])

Получить наилучшую 35-мерную нелинейную аппроксимацию сигнала в дискретном базисе Фурье. Получить DFT данных, отсортировать коэффициенты DFT и выбрать 35 самых больших коэффициентов. ДПФ вещественно-значимого сигнала сопряжён симметрично, поэтому рассмотрим только частоты от 0 (DC) до Найквиста (1/2 цикла/минуту).
xdft = fft(x);
[~,I] = sort(xdft(1:length(x)/2+1),'descend');
ind = I(1:35);Осмотрите вектор ind. Ни один из индексов не соответствует 0 или Nyquist. Добавьте соответствующий комплексный конъюгат для получения нелинейной аппроксимации в базисе DFT. Постройте график аппроксимации и исходного сигнала.
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')

Аналогично DCT-синусоидальному словарю нелинейная аппроксимация DFT хорошо работает при согласовании плавных колебаний в данных о потреблении электроэнергии. Однако нелинейная аппроксимация ДПФ не аппроксимирует резкие изменения точно. Увеличьте масштаб интервала данных, содержащих резкие изменения потребления.
plot(x) hold on plot(xrec,'LineWidth',2) hold off xlabel('Minutes') ylabel('Usage') legend('Original Signal','Nonlinear DFT Approximation') xlim([500 1200])
