Подъем

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

Создайте сигнал 1-D, который является кусочно-постоянным по 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. The axes 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. The axes 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. The axes 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. The axes 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. The axes 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. Axes 1 with title Approximation Coefficients contains an object of type line. Axes 2 with title Detail Coefficients contains an object of type line.

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

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

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. Axes 1 with title Approximation Coefficients contains an object of type line. Axes 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