exponenta event banner

Подъем

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

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