Подъем

В этом примере показано, как использовать подъем на 1D сигнале.

Создайте 1D сигнал, который является кусочной константой более чем 2 выборки. Добавление N(0,0.12) шум к сигналу.

x = [1 1 2 2 -3.5 -3.5 4.3 4.3 6 6 -4.5 -4.5 2.2 2.2 -1.5 -1.5];
x = repmat(x,1,64);
rng default
x = x+ 0.1*randn(size(x));

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

plot(x)
xlim([0 100])

Используйте ленивый вейвлет, чтобы получить четные и нечетные многофазные компоненты сигнала.

LS = liftwave('lazy');
[A,D] = lwt(x,LS);

Если вы строите деталь (вейвлет) коэффициенты в D, вы видите, что это преобразование не декоррелировало сигнал. Коэффициенты вейвлета очень походят на сигнал.

Добавьте двойной поднимающийся шаг, который вычитает даже индексированный коэффициент из нечетного коэффициента одна выборка позже, x(2n+1)-x(2n).

els = {'d',-1,0};
LSnew = addlift(LS,els);

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

[A,D] = lwt(x,LSnew);

Если вы строите деталь (вейвлет) коэффициенты, вы видите, что коэффициенты вейвлета больше не напоминают исходный сигнал.

Коэффициенты приближения, A, из предыдущего преобразования составляют ровный многофазный компонент сигнала. Поэтому коэффициенты затронуты путем искажения. Используйте основной поднимающийся шаг, чтобы обновить коэффициенты приближения и уменьшать искажение. Основной шаг заменяет коэффициенты приближения x(2n)+1/2(x(2n+1)-x(2n)), который равен среднему значению x(2n) и x(2n+1). Усреднение является фильтрацией lowpass, которая помогает уменьшать искажение.

els = {'p',1/2, 0};
LSnew = addlift(LSnew,els);

Используйте обновленную поднимающуюся схему получить преобразование вейвлета входного сигнала.

[A,D] = lwt(x,LSnew);

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

LSnew(end,:) = {sqrt(2),sqrt(2)/2,[]};
[A,D] = lwt(x,LSnew);
x1 = ilwt(A,D,LSnew);
max(abs(x1-x))
ans = 1.7764e-15

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

Используйте поднимающуюся схему спроектировать вейвлет с 2 исчезающими моментами. Двойной вейвлет с 2 исчезающими моментами декоррелирует сигнал с локальным поведением, аппроксимированным полиномом первого порядка. Создайте сигнал, охарактеризованный полиномиальным поведением первого порядка с дополнением N(0,0.252) шум.

y = [1 0 0 4 0 0 -1 0 0 2 0 0 7 0 0 -4 0 0 1 0 0 -3];
x1 = 1:(21/1024):22-(21/1024);
y1 = interp1(1:22,y,x1,'linear');
rng default
y1 = y1+0.25*randn(size(y1));
plot(x1,y1)
xlim([1 22])

В этом случае коэффициенты вейвлета должны удалить полином первого порядка. Если значение сигналов в нечетном индексе, x(2n+1), хорошо аппроксимирован полиномом первого порядка, адаптированным к окружающим демонстрационным значениям, затем 1/2(x(2n)+x(2n+2)) должен обеспечить подходящий вариант для x(2n+1). Другими словами, x(2n+1) должна быть средняя точка между x(2n) и x(2n+2).

Из этого следует, что x(2n+1)-1/2(x(2n)+x(2n+2)) должен декоррелировать сигнал.

Начните с ленивого вейвлета, преобразовывают и добавляют двойной поднимающийся шаг, который моделирует предыдущее уравнение.

LS = liftwave('lazy');
els = {'d',[-1/2 -1/2],1};
LSnew = addlift(LS,els);

Используйте поднимающуюся схему получить приближение и коэффициенты детали и построить результат.

[A,D] = lwt(y1,LSnew);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D)
xlim([1 512])
title('Detail Coefficients')

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

Получите дискретный вейвлет, преобразовывают с новой поднимающейся схемой и строят результаты.

els = {'p',[1/4 1/4],0};
LSnew = addlift(LSnew,els);
LSnew(end,:) = {sqrt(2),sqrt(2)/2,[]};
[A,D] = lwt(y1,LSnew);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D)
xlim([1 512])
title('Detail Coefficients')

Продемонстрируйте, что вы спроектировали совершенный набор фильтров реконструкции.

y2 = ilwt(A,D,LSnew);
max(abs(y2-y1))
ans = 8.8818e-16