Менеджер по вейвлету
Использование wavemngr
чтобы добавить, удалите, восстановите или считайте вейвлеты.
wavemngr('add',
добавляет семейство вейвлетов к тулбоксу. Эти параметры задают семейство вейвлетов:FN
,FSN
,WT
,NUMS
,FILE
)
FN
— Фамилия
FSN
— Краткое название семейства
WT
— Тип семейства вейвлетов
NUMS
— Параметры вейвлета
FILE
— Файл определения вейвлета
Примечание
Когда вы используете wavemngr
чтобы добавить семейство вейвлетов, три файла расширения вейвлета создаются в текущей папке: эти два ASCII-файла wavelets.asc
и wavelets.prv
, и MAT-файл wavelets.inf
. Если вы добавляете новое семейство вейвлетов, это доступно в этой папке только.
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
вектор символов формы lem
N, где 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 = 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 '
'Lemarie ->->lem '
'==================================='
Удалите добавленное семейство. Регенерируйте список семейств вейвлетов.
wavemngr('del','Lemarie') 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 '
'==================================='
Восстановите предыдущий ASCII-файл wavelets.prv
, затем создайте MAT-файл wavelets.inf
. Перечислите восстановленные вейвлеты. Поскольку wavemngr
читает ASCII-файл в текущей рабочей директории, новое семейство появляется в списке.
wavemngr('restore') wavemngr('read',1)
ans = 76x44 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 = 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('add','Lemarie','lem',1,'1 2 3 4 5','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) %LEMWAVF Lemarie wavelet filters. % F = LEMWAVF(W) returns the scaling filter associated with the Lemarie % wavelet specified by the character array, 'lemN'. % Possible values for N are 1, 2, 3, 4 or 5. % % This function is only for use in the "Add Wavelet Families" example. It % may change or be removed in a future release. % % Copyright 2019 The MathWorks, Inc. TFlem = startsWith(wname,'lem'); if ~TFlem error('Wavelet short name is lem followed by filter number'); end fnum = regexp(wname,'(\d+)','match','Once'); if isempty(fnum) error('Specify a filter number as 1,2,3,4,or 5'); end if ~isempty(fnum) num = str2double(fnum); end tffilt = ismember(num,[1 2 3 4 5]); if ~tffilt error('Filter number must be 1, 2, 3, 4, or 5'); 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 ... ]; 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-преобразование КИХ-фильтра полином Лорана данный . Степень из Лорана полином задан как . Поэтому длина фильтра . Исследуйте расширение Лорана фильтров вейвлета и масштабирования.
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*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
FN
— Фамилия вейвлетаФамилия вейвлета в виде вектора символов или строкового скаляра.
FSN
— Краткое название семейства вейвлетовКраткое название семейства вейвлетов в виде вектора символов или строкового скаляра. Количество символов в FSN
должно быть меньше чем или равно 4.
WT
— Тип семейства вейвлетов
| 2
| 3
| 4
| 5
Семейство вейвлетов вводит в виде одного из следующего:
1 – Ортогональные вейвлеты
2 – Биоортогональные вейвлеты
3 – Вейвлет с масштабирующейся функцией
4 – Вейвлет без масштабирующейся функции
5 – Комплексный вейвлет без масштабирующейся функции
NUMS
— Параметры вейвлета''
| вектор символов | строковый скалярПараметры вейвлета в виде:
Если семейство состоит из одного вейвлета, 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 |
---|---|
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'
— Используйте эту опцию, когда параметр будет целым числом. Например, семейство вейвлетов Daubechies db
использует целочисленный параметр.
'real'
— Используйте эту опцию, когда параметр будет действителен. Например, биоортогональное семейство вейвлетов bior
использует действительный параметр.
'charactervector'
— Используйте эту опцию, когда параметр будет вектором символов. Например, Шенноновское семейство вейвлетов использует вектор символов.
FILE
— Файл определения вейвлетаФайл определения вейвлета в виде вектора символов или строкового скаляра. FILE
имя MAT-файла или имя файла кода, которое задает семейство вейвлетов.
B
— Эффективная поддержкаЭффективная поддержка вейвлетов с семейством вводит WT
равняйтесь 3, 4, или 5 в виде двухэлементного вектора с действительным знаком. Если B = [lb ub]
, затем lb
задает нижнюю границу и ub
задает верхнюю границу.
Типы данных: double
WN
— Семейство вейвлетовСемейство вейвлетов, заданное вектором символов или строковым скаляром WN
. Значение WN
или фамилия вейвлета или краткое название семейства вейвлетов.
Пример: wavemngr('del','Lemarie')
wavemngr
позволяет вам добавлять вейвлет. Необходимо проверить, что это - действительно вейвлет. Никакая проверка не выполнена, чтобы подтвердить, что сложение является вейвлетом или подтвердить тип нового вейвлета. Можно использовать dwtfilterbank
проверять, является ли вейвлет ортогональным или биоортогональным.
[1] Daubechies, я. Десять лекций по вейвлетам. CBMS-NSF региональный ряд конференции в прикладной математике. Филадельфия, PA: общество промышленной и прикладной математики, 1992.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.