Добавьте квадратуру зеркальные и биоортогональные фильтры вейвлета

В этом примере показано, как добавить ортогональный квадратурный фильтр зеркала (QMF), парный и биоортогональный фильтр вейвлета увеличивается в четыре раза к Wavelet Toolbox™. В то время как Wavelet Toolbox™ уже содержит многие наиболее широко используемые ортогональные и биоортогональные семейства вейвлетов, включая экстремальную фазу Добечиса, Добечис меньше всего - асимметричная фаза, coiflet, фильтры Fejér-Korovkin и биоортогональные вейвлеты сплайна, можно легко добавить собственные фильтры и использовать фильтр в любом дискретном вейвлете или пакетных алгоритмах вейвлета.

Этот пример добавляет Бейлкина (18) пара фильтра QMF к тулбоксу и показывает, как впоследствии использовать фильтр в дискретном анализе вейвлета. Пример затем демонстрирует, как проверить необходимые и достаточные условия для пары QMF, чтобы составить фильтр вейвлета и масштабирование. После добавления пары QMF пример добавляет почти ортогональный биоортогональный вейвлет четыре раза на основе Лапласовой финансовой пирамиды Берта и Адельсона (Таблица 8.4 на странице 283 в [1]).

Добавление QMF

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

beyl = [9.93057653743539270E-02
    4.24215360812961410E-01
    6.99825214056600590E-01 
    4.49718251149468670E-01
    -1.10927598348234300E-01
    -2.64497231446384820E-01
    2.69003088036903200E-02
    1.55538731877093800E-01
    -1.75207462665296490E-02
    -8.85436306229248350E-02
    1.96798660443221200E-02
    4.29163872741922730E-02
    -1.74604086960288290E-02
    -1.43658079688526110E-02
    1.00404118446319900E-02
    1.48423478247234610E-03
    -2.73603162625860610E-03
    6.40485328521245350E-04];

Сохраните Бейлкина (18) фильтр и добавьте новый фильтр в тулбокс. Чтобы добавить к тулбоксу, ортогональный вейвлет, который задан в MAT-файле, имени MAT-файла и переменной, содержащей коэффициенты фильтра, должен соответствовать. Имя должно быть меньше пяти символов в длину.

save beyl beyl

Используйте wavemngr чтобы добавить вейвлет фильтруют к тулбоксу. Задайте фамилию вейвлета, и краткое название раньше получало доступ к фильтру. Краткое название должно быть тем же именем как MAT-файл. Задайте тип вейвлета, чтобы быть 1. Вейвлеты типа 1 являются ортогональными вейвлетами в тулбоксе. Поскольку вы добавляете только один вейвлет в этом семействе, задаете ввод переменной NUMS к wavemngr быть пустой строкой.

familyName      = 'beylkin';
familyShortName = 'beyl';
familyWaveType  = 1;
familyNums      = '';
fileWaveName    = 'beyl.mat';

Добавьте вейвлет с помощью wavemngr.

wavemngr('add',familyName,familyShortName,familyWaveType,familyNums,fileWaveName)

Проверьте, что вейвлет был добавлен к тулбоксу.

wavemngr('read')
ans = 19x35 char array
    '==================================='
    'Haar              ->->haar           '
    'Daubechies        ->->db             '
    'Symlets           ->->sym            '
    'Coiflets          ->->coif           '
    'BiorSplines       ->->bior           '
    'ReverseBior       ->->rbio           '
    'Meyer             ->->meyr           '
    'DMeyer            ->->dmey           '
    'Gaussian          ->->gaus           '
    'Mexican_hat       ->->mexh           '
    'Morlet            ->->morl           '
    'Complex Gaussian  ->->cgau           '
    'Shannon           ->->shan           '
    'Frequency B-Spline->->fbsp           '
    'Complex Morlet    ->->cmor           '
    'Fejer-Korovkin    ->->fk             '
    'beylkin           ->->beyl           '
    '==================================='

Можно теперь использовать вейвлет, чтобы анализировать сигналы или изображения. Например, загрузите ECG, сигнализируют и получают MODWT сигнала вниз, чтобы выровнять четыре использования Бейлкина (18) фильтр.

load wecg
wtecg = modwt(wecg,'beyl',4);

Загрузите изображение поля, получите 2D DWT использование Бейлкина (18) фильтр. Покажите уровню диагональные коэффициенты детали.

load xbox
[C,S] = wavedec2(xbox,1,'beyl');
[H,V,D] = detcoef2('all',C,S,1);
subplot(2,1,1)
imagesc(xbox)
axis off
title('Original Image')
subplot(2,1,2)
imagesc(D)
axis off
title('Level-One Diagonal Coefficients')

Figure contains 2 axes objects. Axes object 1 with title Original Image contains an object of type image. Axes object 2 with title Level-One Diagonal Coefficients contains an object of type image.

Наконец, проверьте, что новый фильтр удовлетворяет условиям для ортогональной пары QMF. Получите масштабирующийся (lowpass) и вейвлет (highpass) фильтры.

[Lo,Hi] = wfilters('beyl');

Суммируйте коэффициенты фильтра lowpass, чтобы проверить, что сумма равняется 2. Суммируйте коэффициенты фильтра вейвлета и проверьте, что сумма 0.

sum(Lo)
ans = 1.4142
sum(Hi)
ans = -1.9873e-16

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

[Clow,lags] = xcorr(Lo,Lo,10);
Chigh = xcorr(Hi,Hi,10);
subplot(2,1,1)
stem(lags,Clow,'markerfacecolor',[0 0 1])
grid on
title('Autocorrelation of Scaling Filter')
subplot(2,1,2)
stem(lags,Chigh,'markerfacecolor',[0 0 1])
grid on
title('Autocorrelation of Wavelet Filter')

Figure contains 2 axes objects. Axes object 1 with title Autocorrelation of Scaling Filter contains an object of type stem. Axes object 2 with title Autocorrelation of Wavelet Filter contains an object of type stem.

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

[xcr,lags] = xcorr(Lo,Hi,10);
figure
stem(lags,xcr,'markerfacecolor',[0 0 1])
title('Cross-correlation of QMF filters')

Figure contains an axes object. The axes object with title Cross-correlation of QMF filters contains an object of type stem.

Итоговый критерий утверждает, что сумма величин в квадрате преобразований Фурье масштабирования и фильтров вейвлета на каждой частоте равна 2. Другими словами, позволить G(f) будьте преобразованием Фурье масштабирующегося фильтра и H(f) будьте преобразованием Фурье фильтра вейвлета. Следующее содержит для всех f: |H(f)|2+|G(f)|2=2. Версия ДПФ этого равенства: |G2mkmodN|2+|H2mkmodN|2=2 для любого m. Проверяйте это на Бейлкина (18) фильтр с m=0.

N = numel(Lo);
LoDFT = fft(Lo);
HiDFT = fft(Hi);
k = 0:N-1;
m = 0;
sumDFTmags = abs(LoDFT(1+mod(2^m*k,N))).^2+abs(HiDFT(1+mod(2^m*k,N))).^2
sumDFTmags = 18×1

    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
    2.0000
      ⋮

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

nfft = 512;
F = 0:1/nfft:1/2;
LoDFT = fft(Lo,nfft);
HiDFT = fft(Hi,nfft);
figure
plot(F,abs(LoDFT(1:nfft/2+1)).^2,'DisplayName','Scaling Filter')
hold on
plot(F,abs(HiDFT(1:nfft/2+1)).^2,'r','DisplayName','Wavelet Filter')
xlabel('Frequency')
ylabel('Squared Magnitude')
title('Beylkin(18) QMF Filter Pair')
grid on
plot([1/4 1/4], [0 2],'k','HandleVisibility','off')
legend show

Figure contains an axes object. The axes object with title Beylkin(18) QMF Filter Pair contains 2 objects of type line. These objects represent Scaling Filter, Wavelet Filter.

Обратите внимание, что ответы величины симметричны, или зеркальные отображения друг друга вокруг квадратурной частоты 1/4.

Следующий код удаляет Бейлкина (18) фильтр вейвлета.

wavemngr('del',familyShortName);
delete('beyl.mat')

Добавление биоортогонального вейвлета

Добавление биоортогонального вейвлета к тулбоксу похоже на добавление QMF. Вы обеспечиваете допустимый lowpass (масштабирующий) пару фильтров, используемую в анализе и синтезе. wfilters функция сгенерирует фильтры highpass.

Быть распознанным wfilters, аналитический фильтр масштабирования должен быть присвоен переменной Df, и фильтр масштабирования синтеза должен быть присвоен переменной Rf. Биоортогональные фильтры масштабирования не должны иметь даже равной длины. Выход биоортогональные созданные пары фильтра будет иметь даже равные длины. Вот масштабирующиеся функциональные пары почти ортогонального биоортогонального вейвлета четыре раза на основе Лапласовой финансовой пирамиды Берта и Адельсона.

Df = [-1 5 12 5 -1]/20*sqrt(2);
Rf = [-3 -15 73 170 73 -15 -3]/280*sqrt(2);

Сохраните фильтры в MAT-файл.

save burt Df Rf

Используйте wavemngr добавить биоортогональный вейвлет фильтрует к тулбоксу. Задайте фамилию вейвлета, и краткое название раньше получало доступ к фильтру. Краткое название должно совпадать с именем MAT-файла. Поскольку вейвлеты биоортогональны, установите тип вейвлета быть 2. Поскольку вы добавляете только один вейвлет в этом семействе, задаете ввод переменной NUMS к wavemngr быть пустой строкой.

familyName      = 'burtAdelson';
familyShortName = 'burt';
familyWaveType  = 2;
familyNums      = '';
fileWaveName    = 'burt.mat';
wavemngr('add',familyName,familyShortName,familyWaveType,familyNums,fileWaveName)

Проверьте, что биоортогональный вейвлет был добавлен к тулбоксу.

wavemngr('read')
ans = 19x35 char array
    '==================================='
    'Haar              ->->haar           '
    'Daubechies        ->->db             '
    'Symlets           ->->sym            '
    'Coiflets          ->->coif           '
    'BiorSplines       ->->bior           '
    'ReverseBior       ->->rbio           '
    'Meyer             ->->meyr           '
    'DMeyer            ->->dmey           '
    'Gaussian          ->->gaus           '
    'Mexican_hat       ->->mexh           '
    'Morlet            ->->morl           '
    'Complex Gaussian  ->->cgau           '
    'Shannon           ->->shan           '
    'Frequency B-Spline->->fbsp           '
    'Complex Morlet    ->->cmor           '
    'Fejer-Korovkin    ->->fk             '
    'burtAdelson       ->->burt           '
    '==================================='

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

fb = dwtfilterbank('Wavelet','burt');
isBiorthogonal(fb)
ans = logical
   1

freqz(fb)

Figure contains an axes object. The axes object with title DWT Filter Bank burt contains 8 objects of type line. These objects represent D 1, D 2, D 3, D 4, D 5, D 6, D 7, A 7.

Получите вейвлет и масштабирующиеся функции набора фильтров. Постройте вейвлет и масштабирующиеся функции в самой грубой шкале.

[fb_phi,t] = scalingfunctions(fb);
[fb_psi,~] = wavelets(fb);
subplot(2,1,1)
plot(t,fb_phi(end,:))
axis tight
grid on
title('Analysis - Scaling')
subplot(2,1,2)
plot(t,fb_psi(end,:))
axis tight
grid on
title('Analysis - Wavelet')

Figure contains 2 axes objects. Axes object 1 with title Analysis - Scaling contains an object of type line. Axes object 2 with title Analysis - Wavelet contains an object of type line.

Создайте синтез набор фильтров DWT с помощью burt вейвлет. Вычислите framebounds.

fb2 = dwtfilterbank('Wavelet','burt','FilterType','Synthesis','Level',4);
[synthesisLowerBound,synthesisUpperBound] = framebounds(fb2)
synthesisLowerBound = 0.9800
synthesisUpperBound = 1.0509

Получите lowpass и highpass фильтры анализа и синтеза, сопоставленные с burt. Обратите внимание, что выходные фильтры являются всей равной ровной длиной. Подтвердите содействующую сумму фильтра lowpass к sqrt(2) и highpass фильтруют содействующую сумму к 0.

[LoD,HiD,LoR,HiR] = wfilters('burt');
[LoD' HiD' LoR' HiR']
ans = 8×4

         0    0.0152   -0.0152         0
         0   -0.0758   -0.0758         0
   -0.0707   -0.3687    0.3687   -0.0707
    0.3536    0.8586    0.8586   -0.3536
    0.8485   -0.3687    0.3687    0.8485
    0.3536   -0.0758   -0.0758   -0.3536
   -0.0707    0.0152   -0.0152   -0.0707
         0         0         0         0

sum([(LoD'/sqrt(2)) HiD' (LoR'/sqrt(2)) HiR'])
ans = 1×4

    1.0000   -0.0000    1.0000         0

Удалите фильтр Берта-Адельсона из Тулбокса.

wavemngr('del',familyShortName);
delete('burt.mat')

Ссылки

[1] Daubechies, я. Десять лекций по вейвлетам. CBMS-NSF региональный ряд конференции в прикладной математике. Филадельфия, усилитель мощности (УМ): общество промышленной и прикладной математики, 1992.