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

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

Этот пример добавляет Бейлкина (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) фильтр и добавьте новый фильтр в тулбокс.

save beyl beyl

Используйте wavemngr чтобы добавить вейвлет фильтруют к тулбоксу. Задайте фамилию вейвлета, и краткое название раньше получало доступ к фильтру. Задайте тип вейвлета, чтобы быть 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. Axes 1 with title Original Image contains an object of type image. Axes 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. У вас должен быть Signal Processing Toolbox™, чтобы использовать xcorr.

[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. Axes 1 with title Autocorrelation of Scaling Filter contains an object of type stem. Axes 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. The axes 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. The axes 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 добавить биоортогональный вейвлет фильтрует к тулбоксу. Задайте фамилию вейвлета, и краткое название раньше получало доступ к фильтру. Поскольку вейвлеты биоортогональны, установите тип вейвлета быть 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. The axes 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. Axes 1 with title Analysis - Scaling contains an object of type line. Axes 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 региональный ряд конференции в прикладной математике. Филадельфия, PA: общество промышленной и прикладной математики, 1992.