Вейвлет
Использовать 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-> '
'=================================== '
В этом примере показано, как добавить новые компактно поддерживаемые ортогональные вейвлеты к тулбоксу. Эти вейвлеты, являющиеся легким обобщением волн Добехи, основаны на использовании полиномов Бернштейна и обусловлены Катебом и Лемарие.
Добавьте новое семейство ортогональных вейвлетов. Необходимо определить:
Имя семейства: 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')
Область ASCII-файла wavelets.asc
сохранен как 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 и high pass фильтрами синтеза. Все они являются фильтрами с конечной импульсной характеристикой (КИХ). Подтвердите сумму коэффициентов lowpass к sqrt(2)
и коэффициенты высокочастотного фильтра равны 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 требует, чтобы фильтры, сопоставленные с вейвлетом, имели даже одинаковую длину. Чтобы использовать Laplacian вейвлет в тулбоксе, необходимо включить отсутствующие степени ряда Лорана в качестве нулей.
Степени PHd
и PHr
равны 4 и 6, соответственно. Фильтр минимальной четной длины, который может включать четыре фильтра, имеет длину 8, которая соответствует полиному Лорана степени 7. Стратегия состоит в том, чтобы подготовиться и добавить 0 как можно более равномерно, чтобы все фильтры имели длину 8. Подготовьте 0 ко всем фильтрам, а затем добавьте два 0 к 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')
Вычислите границы фрейма банка фильтров.
[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
- Тип семейства вейвлет1
| 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, I. Ten Lectures on Wavelets. Серия региональных конференций CBMS-NSF по прикладной математике. Филадельфия, Пенсильвания: Общество промышленной и прикладной математики, 1992.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.