Подъем

В этом примере показано, как использовать подъем на 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])
title('Signal')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Signal contains an object of type line.

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

LS = liftingScheme;
[A,D] = lwt(x,'LiftingScheme',LS,'Level',1);
plot(D{1})
xlim([0 100])
title('Detail Coefficients')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Detail Coefficients contains an object of type line.

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

ElemLiftStep = liftingStep('Type','predict','Coefficients',-1,'MaxOrder',0);
LSnew = addlift(LS,ElemLiftStep);

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

[A,D] = lwt(x,'liftingScheme',LSnew,'Level',1);

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

plot(D{1})
xlim([0 100])
title('Detail Coefficients')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Detail Coefficients contains an object of type line.

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

ElemLiftStep = liftingStep('Type','update','Coefficients',1/2,'MaxOrder',0);
LSnew = addlift(LSnew,ElemLiftStep);

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

[A,D] = lwt(x,'liftingScheme',LSnew,'Level',1);
plot(A)
xlim([0 100])

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

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

scaleFactors = [sqrt(2) sqrt(2)/2];
ElemLiftStep1 = liftingStep('Type','predict','Coefficients',-1,'MaxOrder',0);
ElemLiftStep2 = liftingStep('Type','update','Coefficients',1/2,'MaxOrder',0);
LSscale = liftingScheme('LiftingSteps',[ElemLiftStep1;ElemLiftStep2],'NormalizationFactors',scaleFactors);
[A,D] = lwt(x,'liftingScheme',LSscale,'Level',1);
xrecon = ilwt(A,D,'liftingScheme',LSscale);
max(abs(x(:)-xrecon(:)))
ans = 1.7764e-15

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

Используйте поднимающуюся схему спроектировать вейвлет с двумя исчезающими моментами. Двойной вейвлет с двумя исчезающими моментами декоррелирует сигнал с локальным поведением, аппроксимированным полиномом первого порядка. Создайте сигнал, охарактеризованный полиномиальным поведением первого порядка с дополнением 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])

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

В этом случае коэффициенты вейвлета должны удалить полином первого порядка. Если значение сигналов в нечетном индексе, 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)) должен декоррелировать сигнал.

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

ElemLiftStep = liftingStep('Type','predict','Coefficients',[-1/2 -1/2],'MaxOrder',1);
LS = liftingScheme('LiftingSteps',ElemLiftStep,'NormalizationFactors',1);

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

[A,D] = lwt(y1,'LiftingScheme',LS,'Level',1);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D{1})
xlim([1 512])
title('Detail Coefficients')

Figure contains 2 axes objects. Axes object 1 with title Approximation Coefficients contains an object of type line. Axes object 2 with title Detail Coefficients contains an object of type line.

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

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

scaleFactors = [sqrt(2) sqrt(2)/2];
ElemLiftStep1 = liftingStep('Type','predict','Coefficients',[-1/2 -1/2],'MaxOrder',1);
ElemLiftStep2 = liftingStep('Type','update','Coefficients',[1/4 1/4],'MaxOrder',0);
LSnew = liftingScheme('LiftingSteps',[ElemLiftStep1;ElemLiftStep2],'NormalizationFactors',scaleFactors);
[A,D] = lwt(y1,'liftingScheme',LSnew,'Level',1);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D{1})
xlim([1 512])
title('Detail Coefficients')

Figure contains 2 axes objects. Axes object 1 with title Approximation Coefficients contains an object of type line. Axes object 2 with title Detail Coefficients contains an object of type line.

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

y2 = ilwt(A,D,'liftingScheme',LSnew);
max(abs(y2(:)-y1(:)))
ans = 1.7764e-15