wavemngr

Менеджер по вейвлету

Описание

Используйте wavemngr чтобы добавить, удалите, восстановите или считайте вейвлеты.

пример

wavemngr('add',FN,FSN,WT,NUMS,FILE) добавляет семейство вейвлетов к тулбоксу. Эти параметры задают семейство вейвлетов:

  • FN — Фамилия

  • FSN — Краткое название семейства

  • WT — Тип семейства вейвлетов

  • NUMS — Параметры вейвлета

  • FILE — Файл определения вейвлета

Примечание

Когда вы используете wavemngr чтобы добавить семейство вейвлетов, три файла расширения вейвлета создаются в текущей папке: эти два ASCII-файла wavelets.asc и wavelets.prv, и MAT-файл wavelets.inf. Если вы добавляете новое семейство вейвлетов, это доступно в этой папке только.

wavemngr('add',FN,FSN,WT,{NUMS,TYPNUMS},FILE) добавляет семейство вейвлетов параметром NUMS с форматом ввода вводят TYPNUMS.

wavemngr(___,B) добавляет семейство вейвлетов, где B задает эффективную поддержку вейвлетов. B входной параметр допустим только для вейвлетов типа WT = 3, 4, и 5. Можно использовать этот синтаксис с любым из предыдущих синтаксисов.

пример

wavemngr('del',WN) удаляет семейство вейвлетов, заданное WN.

пример

wavemngr('restore') восстанавливает предыдущий wavelets.asc ASCII-файл

wavemngr('restore',IN2) восстанавливает начальный wavelets.asc ASCII-файл. Здесь IN2 фиктивный аргумент.

out = wavemngr('read') возвращает все фамилии вейвлета в символьном массиве.

out = wavemngr('read',IN2) возвращает все имена вейвлета в символьном массиве. Здесь IN2 фиктивный аргумент.

out = wavemngr('read_asc') читает wavelets.asc ASCII-файл и возвращает всю информацию о вейвлете.

Примеры

свернуть все

Перечислите семейства вейвлетов, доступные по умолчанию.

wavemngr('read')
ans = 18x35 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             '
    '==================================='

Перечислите все вейвлеты.

wavemngr('read',1)
ans = 71x44 char array
    '===================================         '
    'Haar              ->->haar                    '
    '===================================         '
    'Daubechies        ->->db                      '
    '------------------------------              '
    'db1->db2->db3->db4->                            '
    'db5->db6->db7->db8->                            '
    'db9->db10->db**->                              '
    '===================================         '
    'Symlets           ->->sym                     '
    '------------------------------              '
    'sym2->sym3->sym4->sym5->                        '
    'sym6->sym7->sym8->sym**->                       '
    '===================================         '
    'Coiflets          ->->coif                    '
    '------------------------------              '
    'coif1->coif2->coif3->coif4->                    '
    'coif5->                                      '
    '===================================         '
    'BiorSplines       ->->bior                    '
    '------------------------------              '
    'bior1.1->bior1.3->bior1.5->bior2.2->            '
    'bior2.4->bior2.6->bior2.8->bior3.1->            '
    'bior3.3->bior3.5->bior3.7->bior3.9->            '
    'bior4.4->bior5.5->bior6.8->                    '
    '===================================         '
    'ReverseBior       ->->rbio                    '
    '------------------------------              '
    'rbio1.1->rbio1.3->rbio1.5->rbio2.2->            '
    'rbio2.4->rbio2.6->rbio2.8->rbio3.1->            '
    'rbio3.3->rbio3.5->rbio3.7->rbio3.9->            '
    'rbio4.4->rbio5.5->rbio6.8->                    '
    '===================================         '
    'Meyer             ->->meyr                    '
    '===================================         '
    'DMeyer            ->->dmey                    '
    '===================================         '
    'Gaussian          ->->gaus                    '
    '------------------------------              '
    'gaus1->gaus2->gaus3->gaus4->                    '
    'gaus5->gaus6->gaus7->gaus8->                    '
    '===================================         '
    'Mexican_hat       ->->mexh                    '
    '===================================         '
    'Morlet            ->->morl                    '
    '===================================         '
    'Complex Gaussian  ->->cgau                    '
    '------------------------------              '
    'cgau1->cgau2->cgau3->cgau4->                    '
    'cgau5->cgau6->cgau7->cgau8->                    '
    '===================================         '
    'Shannon           ->->shan                    '
    '------------------------------              '
    'shan1-1.5->shan1-1->shan1-0.5->shan1-0.1->      '
    'shan2-3->shan**->                             '
    '===================================         '
    'Frequency B-Spline->->fbsp                    '
    '------------------------------              '
    'fbsp1-1-1.5->fbsp1-1-1->fbsp1-1-0.5->fbsp2-1-1->'
    'fbsp2-1-0.5->fbsp2-1-0.1->fbsp**->             '
    '===================================         '
    'Complex Morlet    ->->cmor                    '
    '------------------------------              '
    'cmor1-1.5->cmor1-1->cmor1-0.5->cmor1-1->        '
    'cmor1-0.5->cmor1-0.1->cmor**->                 '
    '===================================         '
    'Fejer-Korovkin    ->->fk                      '
    '------------------------------              '
    'fk4->fk6->fk8->fk14->                           '
    'fk18->fk22->                                  '
    '===================================         '

В этом примере показано, как добавить новые сжато поддерживаемые ортогональные вейвлеты в тулбокс. Эти вейвлеты, которые являются небольшим обобщением вейвлетов Daubechies, основаны на использовании полиномов Бернстайна и происходят из-за Kateb и Lemarié.

Добавьте новое семейство ортогональных вейвлетов. Необходимо задать:

  • Фамилия: Lemarie

  • Краткое название семейства: lem

  • Тип вейвлета: 1 (orth)

  • Числа вейвлета: 1 2 3 4 5

  • Драйвер файла: lemwavf

Исходный код для lemwavf.m обеспечивается в конце примера. Входной параметр lemwavf вектор символов формы lemN, где N = 1, 2, 3, 4, или 5.

wavemngr('add','Lemarie','lem',1,'1 2 3 4 5','lemwavf')

wavelets.asc ASCII-файла сохранено как wavelets.prv, затем информация, задающая новое семейство, добавляется к wavelets.asc, и MAT-файл wavelets.inf сгенерирован.

Обратите внимание на то, что wavemngr работает над текущей папкой. Если вы добавляете новое семейство вейвлетов, это доступно в этой папке только.

Перечислите доступные семейства вейвлетов.

wavemngr('read')
ans = 19×35 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             '
    'Lemarie           →→lem            '
    '==================================='

Удалите добавленное семейство. Регенерируйте список семейств вейвлетов.

wavemngr('del','Lemarie')
wavemngr('read')
ans = 18×35 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             '
    '==================================='

Восстановите предыдущий ASCII-файл wavelets.prv, затем создайте MAT-файл wavelets.inf. Перечислите восстановленные вейвлеты.

wavemngr('restore')
wavemngr('read',1)
ans = 76×44 char array
    '===================================         '
    'Haar              →→haar                    '
    '===================================         '
    'Daubechies        →→db                      '
    '------------------------------              '
    'db1→db2→db3→db4→                            '
    'db5→db6→db7→db8→                            '
    'db9→db10→db**→                              '
    '===================================         '
    'Symlets           →→sym                     '
    '------------------------------              '
    'sym2→sym3→sym4→sym5→                        '
    'sym6→sym7→sym8→sym**→                       '
    '===================================         '
    'Coiflets          →→coif                    '
    '------------------------------              '
    'coif1→coif2→coif3→coif4→                    '
    'coif5→                                      '
    '===================================         '
    'BiorSplines       →→bior                    '
    '------------------------------              '
    'bior1.1→bior1.3→bior1.5→bior2.2→            '
    'bior2.4→bior2.6→bior2.8→bior3.1→            '
    'bior3.3→bior3.5→bior3.7→bior3.9→            '
    'bior4.4→bior5.5→bior6.8→                    '
    '===================================         '
    'ReverseBior       →→rbio                    '
    '------------------------------              '
    'rbio1.1→rbio1.3→rbio1.5→rbio2.2→            '
    'rbio2.4→rbio2.6→rbio2.8→rbio3.1→            '
    'rbio3.3→rbio3.5→rbio3.7→rbio3.9→            '
    'rbio4.4→rbio5.5→rbio6.8→                    '
    '===================================         '
    'Meyer             →→meyr                    '
    '===================================         '
    'DMeyer            →→dmey                    '
    '===================================         '
    'Gaussian          →→gaus                    '
    '------------------------------              '
    'gaus1→gaus2→gaus3→gaus4→                    '
    'gaus5→gaus6→gaus7→gaus8→                    '
    '===================================         '
    'Mexican_hat       →→mexh                    '
    '===================================         '
    'Morlet            →→morl                    '
    '===================================         '
    'Complex Gaussian  →→cgau                    '
    '------------------------------              '
    'cgau1→cgau2→cgau3→cgau4→                    '
    'cgau5→cgau6→cgau7→cgau8→                    '
    '===================================         '
    'Shannon           →→shan                    '
    '------------------------------              '
    'shan1-1.5→shan1-1→shan1-0.5→shan1-0.1→      '
    'shan2-3→shan**→                             '
    '===================================         '
    'Frequency B-Spline→→fbsp                    '
    '------------------------------              '
    'fbsp1-1-1.5→fbsp1-1-1→fbsp1-1-0.5→fbsp2-1-1→'
    'fbsp2-1-0.5→fbsp2-1-0.1→fbsp**→             '
    '===================================         '
    'Complex Morlet    →→cmor                    '
    '------------------------------              '
    'cmor1-1.5→cmor1-1→cmor1-0.5→cmor1-1→        '
    'cmor1-0.5→cmor1-0.1→cmor**→                 '
    '===================================         '
    'Fejer-Korovkin    →→fk                      '
    '------------------------------              '
    'fk4→fk6→fk8→fk14→                           '
    'fk18→fk22→                                  '
    '===================================         '
    'Lemarie           →→lem                     '
    '------------------------------              '
    'lem1→lem2→lem3→lem4→                        '
    'lem5→                                       '
    '===================================         '

Восстановите начальные вейвлеты. Восстановите первоначальный ASCII-файл wavelets.ini и начальный MAT-файл wavelets.bin. Регенерируйте список семейств вейвлетов.

wavemngr('restore',0)
wavemngr('read')
ans = 18×35 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             '
    '==================================='

Все возможности командной строки доступны для новых семейств вейвлетов. Создайте новое семейство. Вычислите четыре связанных фильтра и функции вейвлета и шкалу.

wavemngr('add','Lemarie','lem',1,'1 2 3','lemwavf');
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('lem3');
[phi,psi,xval] = wavefun('lem3');
plot(xval,[phi;psi]);
legend('Scaling Function','Wavelet')
grid on

Удалите добавленное семейство.

wavemngr('del','Lemarie')

lemwavf.m

function F = lemwavf(wname)
% This function is only for use in the "Add Wavelet Families" example. It
% may change or be removed in a future release.
% 
% Lemarie wavelet filters.
% F = lemwavf(W) returns the scaling filter
% associated with Lemarie wavelet specified
% by the string W, where W = 'lemN'.
% Possible values for N are:
% N = 1, 2, 3, 4 or 5.

num = str2double(wname(4:end));

switch num
    case 1
F = [...
   0.46069299844871   0.53391629051346   0.03930700681965  -0.03391629578182 ...
	];

    case 2
F = [...
   0.31555164655258   0.59149765057882   0.20045477817080  -0.10034811856888 ...
  -0.01528128420694   0.00846362066021  -0.00072514051618   0.00038684732960 ...
        ];

    case 3
F = [...
   0.23108942231941   0.56838231367966   0.33173980738190  -0.09447000132310 ...
  -0.06203683305244   0.02661631105889  -0.00209952890579   0.00001769381066 ...
   0.00128429679795  -0.00053703458679   0.00002283826072  -0.00000928544107 ...
        ];

    case 4
F = [...
   0.17565337503255   0.52257484913870   0.42429244721660  -0.04601056550580 ...
  -0.11292720306517   0.03198741803409   0.00813124691980  -0.00743764392677 ...
   0.00548090619143  -0.00140066128481  -0.00054200083128   0.00025607264164 ...
  -0.00008795126642   0.00003025515674  -0.00000082014466   0.00000027569334 ...
        ];

    case 5
F = [...
   0.13807658847623   0.47310642622099   0.48217097800239   0.02112933622031 ...
  -0.15081998732499   0.01935767268926   0.02716532750995  -0.01588522540421 ...
   0.00671209165995   0.00120022744496  -0.00321203819186   0.00115266788547 ...
  -0.00018266213413  -0.00002953360842   0.00008433396295  -0.00002997969339 ...
   0.00000534552866  -0.00000159098026   0.00000003069431  -0.00000000895816 ...
        ];

    otherwise
        fprintf('Order: %d not supported\m',num);
 
end
end

В этом примере показано, как взять фильтры анализа и синтеза, сопоставленные с биоортогональным вейвлетом, и сделать их совместимыми с Wavelet Toolbox™. Wavelet Toolbox требует, чтобы анализ и синтез lowpass и фильтры highpass имели равный даже длина. Этот пример использует почти ортогональные биоортогональные вейвлеты на основе Лапласовой финансовой пирамиды Берта и Адельсона (Таблица 8.4 на странице 283 в [1]). Пример также демонстрирует, как исследовать свойства биоортогональных вейвлетов.

Задайте коэффициенты фильтра анализа и синтеза биоортогонального вейвлета.

Hd = [-1 5 12 5 -1]/20*sqrt(2);
Gd = [3 -15 -73 170 -73 -15 3]/280*sqrt(2);
Hr = [-3 -15 73 170 73 -15 -3]/280*sqrt(2);
Gr = [-1 -5 12 -5 -1]/20*sqrt(2);

Hd и Gd lowpass и highpass аналитические фильтры, соответственно. Hr и Gr lowpass и highpass фильтры синтеза. Они - все фильтры конечной импульсной характеристики (FIR). Подтвердите содействующую сумму фильтра lowpass к sqrt(2) и highpass фильтруют содействующую сумму к 0.

sum(Hd)/sqrt(2)
ans = 1.0000
sum(Hr)/sqrt(2)
ans = 1.0000
sum(Gd)
ans = -1.0061e-16
sum(Gr)
ans = -9.7145e-17

Z-преобразование КИХ-фильтра h полином Лорана h(z) данный h(z)=k=kbkehkz-k. Степень |h| из Лорана полином задан как |h|=ke-kb. Поэтому длина фильтра h 1+|h|. Исследуйте расширение Лорана фильтров вейвлета и масштабирования.

PHd = laurpoly(Hd,'dmin',-2)
 
PHd(z) = - 0.07071*z^(+2) + 0.3536*z^(+1) + 0.8485 + 0.3536*z^(-1) - 0.07071*z^(-2)
PHr = laurpoly(Hr,'dmin',-3)
 
PHr(z) = ...                                                                       
    - 0.01515*z^(+3) - 0.07576*z^(+2) + 0.3687*z^(+1) + 0.8586 + 0.3687*z^(-1)  ...
    - 0.07576*z^(-2) - 0.01515*z^(-3)                                              
PGd = laurpoly(Gd,'dmin',-3)
 
PGd(z) = ...                                                                       
    + 0.01515*z^(+3) - 0.07576*z^(+2) - 0.3687*z^(+1) + 0.8586 - 0.3687*z^(-1)  ...
    - 0.07576*z^(-2) + 0.01515*z^(-3)                                              
PGr = laurpoly(Gr,'dmin',-2)
 
PGr(z) = - 0.07071*z^(+2) - 0.3536*z^(+1) + 0.8485 - 0.3536*z^(-1) - 0.07071*z^(-2)

Поскольку фильтры сопоставлены с биоортогональным вейвлетом, подтвердить PHd(z)PHr(z)+PG(z)PGr(z)=2.

PHd*PHr + PGd*PGr
 
ans(z) = 2

Wavelet Toolbox требует, чтобы фильтры, сопоставленные с вейвлетом, имели даже равную длину. Использовать Лапласов вейвлет просачивается тулбокс, необходимо включать недостающие степени Ряда Лорана как нули.

Степени PHd и PHr 4 и 6, соответственно. Минимальный фильтр ровной длины, который может разместить четыре фильтра, имеет длину 8, который соответствует полиному Лорана степени 7. Стратегия состоит в том, чтобы предварительно ожидать и добавить 0s максимально равномерно так, чтобы все фильтры имели длину 8. Предварительно ожидайте 0 ко всем фильтрам, и затем добавьте два 0s к Hd и Gr.

Hd = [0 Hd 0 0];
Gd = [0 Gd];
Hr = [0 Hr];
Gr = [0 Gr 0 0];

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

fb = dwtfilterbank('Wavelet','Custom',...
    'CustomScalingFilter',[Hd' Hr'],...
    'CustomWaveletFilter',[Gd' Gr']);

fb2 = dwtfilterbank('Wavelet','Custom',...
    'CustomScalingFilter',[Hd' Hr'],...
    'CustomWaveletFilter',[Gd' Gr'],...
    'FilterType','Synthesis');

fprintf('fb: isOrthogonal = %d\tisBiorthogonal = %d\n',...
    isOrthogonal(fb),isBiorthogonal(fb));
fb: isOrthogonal = 0	isBiorthogonal = 1
fprintf('fb2: isOrthogonal = %d\tisBiorthogonal = %d\n',...
    isOrthogonal(fb2),isBiorthogonal(fb2));
fb2: isOrthogonal = 0	isBiorthogonal = 1

Постройте масштабирование и функции вейвлета, сопоставленные с наборами фильтров в самой грубой шкале.

[phi,t] = scalingfunctions(fb);
[psi,~] = wavelets(fb);
[phi2,~] = scalingfunctions(fb2);
[psi2,~] = wavelets(fb2);
subplot(2,2,1)
plot(t,phi(end,:))
grid on
title('Scaling Function - Analysis')
subplot(2,2,2)
plot(t,psi(end,:))
grid on
title('Wavelet - Analysis')
subplot(2,2,3)
plot(t,phi2(end,:))
grid on
title('Scaling Function - Synthesis')
subplot(2,2,4)
plot(t,psi2(end,:))
grid on
title('Wavelet - Synthesis')

Вычислите набор фильтров framebounds.

[analysisLowerBound,analysisUpperBound] = framebounds(fb)
analysisLowerBound = 0.9505
analysisUpperBound = 1.0211
[synthesisLowerBound,synthesisUpperBound] = framebounds(fb2)
synthesisLowerBound = 0.9800
synthesisUpperBound = 1.0528

Входные параметры

свернуть все

Фамилия вейвлета, заданная как вектор символов или скаляр строки.

Краткое название семейства вейвлетов, заданное как вектор символов или скаляр строки. Количество символов в FSN должно быть меньше чем или равно 4.

Тип семейства вейвлетов, заданный как одно из следующего:

  • 1 – Ортогональные вейвлеты

  • 2 – Биоортогональные вейвлеты

  • 3 – Вейвлет с масштабирующейся функцией

  • 4 – Вейвлет без масштабирующейся функции

  • 5 – Комплексный вейвлет без масштабирующейся функции

Параметры вейвлета, заданные как:

  • Если семейство состоит из одного вейвлета, NUMS пустая строка ''. Например, mexh и morl семейства каждый содержит один вейвлет.

  • Если вейвлет является членом конечного семейства вейвлетов, NUMS содержит разделенный пробелом список элементов, представляющих параметры вейвлета. Например, для биоортогонального семейства вейвлетов bior, NUMS = '1.1 1.3 1.5 2.2 2.4 2.6 2.8 3.1 3.3 3.5 3.7 3.9 4.4 5.5 6.8'.

  • Если вейвлет является членом бесконечного семейства вейвлетов, NUMS содержит разделенный пробелом список элементов, представляющих параметры вейвлета, отключенные специальной последовательностью **. Два примера перечислены в следующей таблице.

    Семейство вейвлетовNUMS
    dbNUMS = '1 2 3 4 5 6 7 8 9 10 **'
    shanNUMS = '1-1.5 1-1 1-0.5 1-0.1 2-3 **'

Формат ввода параметра вейвлета, заданный как:

  • 'integer' — Используйте эту опцию, когда параметр будет целым числом. Например, семейство вейвлетов Daubechies db использует целочисленный параметр.

  • 'real' — Используйте эту опцию, когда параметр будет действителен. Например, биоортогональное семейство вейвлетов bior использует действительный параметр.

  • 'charactervector' — Используйте эту опцию, когда параметр будет вектором символов. Например, Шенноновское семейство вейвлетов использует вектор символов.

Файл определения вейвлета, заданный как вектор символов или скаляр строки. FILE имя MAT-файла или имя файла кода, которое задает семейство вейвлетов.

Эффективная поддержка вейвлетов с семейством вводит WT равняйтесь 3, 4, или 5, заданный как двухэлементный вектор с действительным знаком. Если B = [lb ub], затем lb задает нижнюю границу и ub задает верхнюю границу.

Типы данных: double

Семейство вейвлетов, заданное вектором символов или скаляром строки WN. Значение WN или фамилия вейвлета или краткое название семейства вейвлетов.

Пример: wavemngr('del','Lemarie')

Ограничения

  • wavemngr позволяет вам добавлять вейвлет. Необходимо проверить, что это - действительно вейвлет. Никакая проверка не выполнена, чтобы подтвердить, что сложение является вейвлетом или подтвердить тип нового вейвлета. Можно использовать dwtfilterbank проверять, является ли вейвлет ортогональным или биоортогональным.

Ссылки

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

Представлено до R2006a