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

Первый шаг в подъеме должен просто разделить сигнал в даже - и нечетно индексированные выборки. Они называются многофазными компонентами, и тот шаг в поднимающемся процессе часто упоминается как "ленивый" поднимающийся шаг, потому что вы действительно не делаете, так очень работают. Можно сделать это в 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. Это совершенно сопоставимо в контексте подъема, но простое разделение данных делает действительно sparsify или получает любую соответствующую деталь.
Следующий шаг в поднимающейся схеме должен предсказать нечетные выборки на основе ровных выборок. Теоретический базис для этого - то, что самые естественные сигналы и отображают корреляцию выставки среди соседних выборок. Соответственно, можно "предсказать" нечетно индексированные выборки с помощью даже индексированных выборок. Различием между вашим предсказанием и фактическим значением является "деталь" в данных, пропущенных предиктором. Та недостающая деталь включает коэффициенты вейвлета.
В форме уравнения можно записать шаг предсказания как где коэффициенты вейвлета в более прекрасной шкале и некоторое количество масштабных коэффициентов более прекрасной шкалы. оператор предсказания.
Добавьте простое (Хаар) шаг предсказания, который вычитает ровное (приближение) коэффициент от нечетного (деталь) коэффициент. В этом случае оператор предсказания просто . Другими словами, это предсказывает нечетные выборки на основе сразу предыдущий даже выборка.
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
На вашем шаге предсказания вы предсказали, что смежная нечетная выборка в вашем сигнале имела то же значение как сразу предыдущий даже выборка. Очевидно, это верно только для тривиальных сигналов. Коэффициенты вейвлета получают различие между предсказанием и фактическими значениями (на нечетных выборках). Наконец, используйте шаг обновления, чтобы обновить ровные выборки на основе различий, полученных на шаге предсказания. В этом случае, обновление с помощью следующего . Это заменяет каждый даже индексированный коэффициент средним арифметическим четных и нечетных коэффициентов.
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
Теперь норма сигнала равна сумме энергий в коэффициентах вейвлета и масштабировании. Поднимающаяся схема, которую вы разработали в этом примере, является схемой подъема Хаара.
Wavelet Toolbox™ поддерживает многих обычно используемые поднимающиеся схемы через liftingScheme с предопределенным предсказывают и обновляют шаги и коэффициенты нормализации. Например, можно получить схему подъема Хаара со следующим.
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