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

Первый шаг в подъеме состоит в том, чтобы просто разделить сигнал на его четные и нечетные выборки. Они называются полифазными компонентами, и этот шаг в процессе подъема часто называют «ленивым» шагом подъема, потому что вы действительно не выполняете такую большую работу. Сделать это можно в MATLAB™, создав «ленивую» схему подъёма с помощью liftingScheme с настройками по умолчанию.
LS = liftingScheme;
Используйте схему подъема для получения вейвлет-разложения уровня 1 случайного сигнала.
x = randn(8,1); [ALazy,DLazy] = lwt(x,'LiftingScheme',LS,'Level',1);
Индексы MATLAB от 1 так ALazy содержит нечетно индексированные выборки x и DLazy содержит четно-индексированные выборки. Большинство объяснений подъема предполагают, что сигнал начинается с выборки 0, поэтому ALazy будут четными индексированными выборками и DLazy выборки с нечетным индексом. Этот пример следует за последним соглашением. «Ленивое» вейвлет-преобразование обрабатывает половину сигнала как вейвлет-коэффициенты, DLazyи другая половина в качестве коэффициентов масштабирования, ALazy. Это совершенно согласовано в контексте подъема, но простое разделение данных действительно сокращает или фиксирует любые релевантные детали.
Следующим шагом в схеме подъема является прогнозирование нечетных образцов на основе четных образцов. Теоретическая основа этого состоит в том, что большинство естественных сигналов и изображений демонстрируют корреляцию между соседними выборками. Соответственно, можно «предсказать» нечетно индексированные выборки, используя четно-индексированные выборки. Разница между вашим прогнозом и фактическим значением является «детализацией» в данных, пропущенных предиктором. Эта отсутствующая деталь содержит вейвлет-коэффициенты.
В форме уравнения можно записать этап прогнозирования как (aj-1), dj-1 (n) - вейвлет-коэффициенты в более мелком а aj-1 - некоторое количество коэффициентов масштабирования в более мелком масштабе. P (⋅) является оператором прогнозирования.
Добавьте простой (Haar) шаг прогнозирования, который вычитает четный (аппроксимационный) коэффициент из нечетного (детального) коэффициента. В этом случае оператор прогнозирования является просто n). Другими словами, он предсказывает нечетные выборки на основе непосредственно предшествующей четной выборки.
ElemLiftStep = liftingStep('Type','predict','Coefficients',-1,'MaxOrder',0);
Вышеприведенный код говорит "создать шаг подъема с элементарным предсказанием, используя многочлен в с наибольшей мощностью . Коэффициент равен -1. Обновить ленивую схему подъема.
LSN = addlift(LS,ElemLiftStep);
Примените к сигналу новую схему подъема.
[A,D] = lwt(x,'LiftingScheme',LSN,'Level',1);
Обратите внимание, что элементы A идентичны таковым в ALazy. Ожидается, что коэффициенты аппроксимации не были изменены.
[A ALazy]
ans = 4×2
0.5377 0.5377
-2.2588 -2.2588
0.3188 0.3188
-0.4336 -0.4336
Если вы посмотрите на элементы D{1}, вы видите, что они равны DLazy{1}-ALazy.
Dnew = DLazy{1}-ALazy;
[Dnew D{1}]ans = 4×2
1.2962 1.2962
3.1210 3.1210
-1.6265 -1.6265
0.7762 0.7762
Выдержать сравнение Dnew кому D. Представьте пример, где сигнал был кусочно постоянным на каждые две выборки.
v = [1 -1 1 -1 1 -1]; u = repelem(v,2)
u = 1×12
1 1 -1 -1 1 1 -1 -1 1 1 -1 -1
Применить новую схему подъема к u.
[Au,Du] = lwt(u,'LiftingScheme',LSN,'Level',1); Du{1}
ans = 6×1
0
0
0
0
0
0
Вы видите, что все Du равны нулю. Этот сигнал был сжат, потому что вся информация теперь содержится в 6 выборках вместо 12 выборок. Можно легко восстановить исходный сигнал
urecon = ilwt(Au,Du,'LiftingScheme',LSN);
max(abs(u(:)-urecon(:)))ans = 0
На этапе прогнозирования вы предсказали, что соседняя нечетная выборка в вашем сигнале имела то же значение, что и непосредственно предшествующая четная выборка. Очевидно, что это справедливо только для тривиальных сигналов. Вейвлет-коэффициенты фиксируют разность между предсказанием и фактическими значениями (в нечетных выборках). Наконец, используйте этап обновления для обновления четных выборок на основе различий, полученных на этапе прогнозирования. В этом случае обновите, используя следующие dj-1 (n )/2. Это заменяет каждый чётно-индексированный коэффициент на среднее арифметическое чётного и нечётного коэффициентов.
elsUpdate = liftingStep('Type','update','Coefficients',1/2,'MaxOrder',0); LSupdated = addlift(LSN,elsUpdate);
Получить вейвлет-преобразование сигнала с обновленной схемой подъема.
[A,D] = lwt(x,'LiftingScheme',LSupdated,'Level',1);
Если сравнивать A к исходному сигналу, x, вы видите, что среднее значение сигнала фиксируется в коэффициентах аппроксимации.
[mean(A) mean(x)]
ans = 1×2
-0.0131 -0.0131
Фактически, элементы A легко получить из x следующим образом.
n = 1; for ii = 1:2:numel(x) meanz(n) = mean([x(ii) x(ii+1)]); n = n+1; end
Выдержать сравнение meanz и A. Как всегда, можно перевернуть схему подъема, чтобы получить идеальную реконструкцию данных.
xrec = ilwt(A,D,'LiftingScheme',LSupdated);
max(abs(x-xrec))ans = 2.2204e-16
Распространено добавить шаг нормализации в конце так, чтобы энергия в сигнале ( нормы) была сохранена как сумма энергий в коэффициентах небольшой волны и вычислении. Без этого шага нормализации энергия не сохраняется.
norm(x,2)^2
ans = 11.6150
norm(A,2)^2+norm(D{1},2)^2ans = 16.8091
Добавьте необходимый шаг нормализации.
LSsteps = LSupdated.LiftingSteps; LSscaled = liftingScheme('LiftingSteps',LSsteps,'NormalizationFactors',[sqrt(2)]); [A,D] = lwt(x,'LiftingScheme',LSscaled,'Level',1); norm(A,2)^2+norm(D{1},2)^2
ans = 11.6150
Теперь норма сигнала равна сумме энергий в коэффициентах масштабирования и вейвлета. Схема подъема, разработанная в этом примере, представляет собой схему подъема Хаара.
Вейвлет Toolbox™ поддерживает многие часто используемые схемы подъема через liftingScheme с предопределенными шагами прогнозирования и обновления и коэффициентами нормализации. Например, можно получить схему подъема Haar следующим образом.
lshaar = liftingScheme('Wavelet','haar');
Чтобы увидеть, что не все схемы подъема состоят из отдельных этапов прогнозирования и обновления подъема, изучите схему подъема, которая соответствует bior3.1 вейвлет.
lsbior3_1 = liftingScheme('Wavelet','bior3.1')
lsbior3_1 =
Wavelet : 'bior3.1'
LiftingSteps : [3 × 1] liftingStep
NormalizationFactors : [2.1213 0.4714]
CustomLowpassFilter : []
Details of LiftingSteps :
Type: 'update'
Coefficients: -0.3333
MaxOrder: -1
Type: 'predict'
Coefficients: [-0.3750 -1.1250]
MaxOrder: 1
Type: 'update'
Coefficients: 0.4444
MaxOrder: 0