wavemngr

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

Синтаксис

wavemngr('add',FN,FSN,WT,NUMS,FILE)
wavemngr('add',FN,FSN,WT,NUMS,FILE,B)
wavemngr('add',FN,FSN,WT,{NUMS,TYPNUMS},FILE)
wavemngr('add',FN,FSN,WT,{NUMS,TYPNUMS},FILE,B)

Описание

wavemngr является типом менеджера по вейвлетам. Это позволяет вам добавлять, удалять, восстанавливать, или читать вейвлеты.

wavemngr('add',FN,FSN,WT,NUMS,FILE) или wavemngr('add',FN,FSN,WT,NUMS,FILE,B) или wavemngr('add',FN,FSN,WT,{NUMS,TYPNUMS},FILE) или wavemngr('add',FN,FSN,WT,{NUMS,TYPNUMS},FILE,B), добавьте новое семейство вейвлетов в тулбокс.

FN = Фамилия (вектор символов или скаляр строки)

FSN = Краткое название Семейства (вектор символов или скаляр строки равной длины или меньше чем четыре символа)

WT задает тип вейвлета:

  • WT = 1, для ортогональных вейвлетов

  • WT = 2, для биоортогональных вейвлетов

  • WT = 3, для вейвлета с масштабирующейся функцией

  • WT = 4, для вейвлета, не масштабируя функцию

  • WT = 5, для комплексного вейвлета, не масштабируя функцию

Если семейство содержит один вейвлет, NUMS = ''. Обратите внимание на то, что для этого случая вы задаете пустой символьный вектор или представляете скаляр в виде строки.

Примеры:

mexh

''

morl

''


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

Пример:

bior     NUMS = '1.1 1.3 ... 4.4 5.5 6.8'


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

Примеры:

db          NUMS = '1 2 3 4 5 6 7 8 9 10 **'
shan     NUMS = '1-1.5 1-1 1-0.5 1-0.1 2-3 **'


В этих последних двух случаях TYPNUMS задает формат ввода параметра вейвлета: 'integer' или 'real' или 'charactervector'; значением по умолчанию является 'integer'.

Примеры:

db

TYPNUMS = 'integer'

bior

TYPNUMS = 'real'

shan

TYPNUMS = 'charactervector'


FILE = MAT-файл или имя файла кода (вектор символов или скаляр строки). Смотрите использование в разделе “Examples”.

B = [lb ub] задает нижние и верхние границы эффективной поддержки вейвлетов типа = 3, 4, или 5.

wavemngr('del',N), удаляет вейвлет или семейство вейвлетов. N является Кратким названием Семейства или Именем Вейвлета (в семействе). N является скаляром строки или вектором символов.

wavemngr('restore') или wavemngr('restore',IN2) восстанавливают предыдущие или начальные вейвлеты. Если nargin = 1, предыдущий wavelets.asc ASCII-файл восстанавливается; в противном случае начальный wavelets.asc ASCII-файл восстанавливается. Здесь IN2 является фиктивным аргументом.

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

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

OUT1 = 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 должен быть следующие:

function w = lemwavf(wname)
где входной параметр wname является вектором символов или скаляром строки формы sh.name + number (например, 'lem1' или 'lem2') и w соответствующий фильтр масштабирования. Сложение получено с помощью

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

'wavelets.asc' ASCII-файла сохранен как 'wavelets.prv', затем это изменяется и MAT-файл, 'wavelets.inf' сгенерирован.

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

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

wavemngr('read')
%  ans =
===================================
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 
Lemarie             lem 
===================================

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

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

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

wavemngr('restore');
wavemngr('read',1)
ans =
===================================         
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	                    
gaus**	                                     
===================================         
Mexican_hat       		  mexh                    
===================================         
Morlet            		  morl                    
===================================         
Complex Gaussian  		  cgau                    
------------------------------              
cgau1	  cgau2	  cgau3	  cgau4	                    
cgau5	  cgau**	                               
===================================         
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**	                 
===================================         
Lemarie     lem 
------------------------------ 
lem1    lem2    lem3    lem4    lem5	 
===================================

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

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

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

wavemngr('add','Lemarie','lem',1,'1 2 3','lemwavf');
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('lem3');
[phi,psi,xval] = wavefun('lem3');

Добавьте новое семейство ортогональных вейвлетов в форме, специализированной для режима GUI. Файл lemwavf позволяет вам вычислять фильтр для любого порядка. Если вы хотите получить всплывающее окно формы '1 2 3 **', сопоставленный с семейством, то вейвлеты добавлены для использования режима GUI:

wavemngr('restore',0); 
wavemngr('add','Lemarie','lem',1,'1 2 3 **','lemwavf');
После этой последовательности все возможности графический интерфейса пользователя доступны для новых вейвлетов. Обратите внимание на то, что последняя команда позволяет ярлык в определении порядка, только если возможные порядки являются целыми числами.

Этот пример показывает, как взять фильтры анализа и синтеза, сопоставленные с биоортогональным вейвлетом, и сделать их совместимыми с 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

Ограничения

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

Ссылки

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

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