cwtfilterbank

Непрерывный банк фильтра преобразований вейвлета

Описание

Используйте cwtfilterbank, чтобы создать набор фильтров непрерывного вейвлета преобразовывает (CWT). Вейвлетом по умолчанию, используемым в наборе фильтров, является аналитический Морзе (3,60) вейвлет. Можно отличаться пропускная способность времени и параметры симметрии для вейвлетов Морзе, чтобы настроить вейвлет Морзе для потребностей. Можно также использовать аналитический Morlet (Габор) вейвлет или ударить вейвлет. При анализе нескольких сигналов в частоте времени, для повышенной вычислительной эффективности, можно предварительно вычислить фильтры однажды и затем передать набор фильтров как вход к cwt. С набором фильтров можно визуализировать вейвлеты вовремя и частоту. Можно также создать наборы фильтров с определенной частотой или областями значений периода, и измерить пропускную способность на 3 дБ. Можно определить добротность для вейвлетов в наборе фильтров.

Создание

Синтаксис

fb = cwtfilterbank
fb = cwtfilterbank(Name,Value)

Описание

пример

fb = cwtfilterbank создает набор фильтров непрерывного вейвлета преобразовывает (CWT) fb. Фильтры нормированы так, чтобы пиковые значения для всех полос пропускания были приблизительно равны 2. Набор фильтров по умолчанию разработан для сигнала с 1 024 выборками. Набор фильтров по умолчанию использует аналитического Морзе (3,60) вейвлет. Набор фильтров использует шкалы по умолчанию: приблизительно 10 полосовых фильтров вейвлета на октаву (10 речи на октаву). Полоса пропускания самой высокой частоты разработана так, чтобы значение упало на половину пикового значения на частоте Найквиста.

Как реализовано, CWT использует нормализацию L1. С нормализацией L1, если у вас есть равные амплитудные колебательные компоненты в ваших данных в различных шкалах, у них будет равное значение в CWT. Используя нормализацию L1 показывает более точное представление сигнала. См. Норму L1 для CWT. Фильтры вейвлета нормированы с пиковыми значениями, приблизительно равняются 2 так, чтобы амплитуды колебательных компонентов согласились с амплитудами соответствующих коэффициентов вейвлета. Смотрите Содействующие Амплитуды Синусоиды и Вейвлета.

fb может использоваться в качестве входа для cwt.

пример

fb = cwtfilterbank(Name,Value) создает набор фильтров CWT fb со свойствами, заданными одним или несколькими аргументами пары Name,Value. Свойства могут быть заданы в любом порядке как Name1,Value1,...,NameN,ValueN. Заключите каждое имя свойства в кавычки.

Примечание

Вы не можете изменить значение свойства существующего набора фильтров. Например, если у вас есть набор фильтров fb с SignalLength 2 000, необходимо создать второй набор фильтров fb2, чтобы обработать сигнал с 2 001 выборкой. Вы не можете присвоить различный SignalLength fb.

Свойства

развернуть все

Длина сигнала, заданного как положительное целое число. Сигнал должен иметь по крайней мере четыре выборки.

Пример: 'SignalLength',1700

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

Аналитический вейвлет используется в наборе фильтров, заданном как 'Morse', 'amor' или 'bump'. Эти строки задают аналитического Морзе, Morlet (Габор) и вейвлет удара, соответственно. Вейвлетом по умолчанию является аналитический Морзе (3,60) вейвлет.

По умолчанию, для вейвлетов Морзе, частотная характеристика затухает к 50% пикового значения в Найквисте. Для Morlet и вейвлетов удара, частотная характеристика затухает к 10% пикового значения. Можно изменить процент затухания путем установки свойства FrequencyLimits набора фильтров. Смотрите cwtfreqbounds.

Для вейвлетов Азбуки Морзе можно также параметризовать вейвлет с помощью свойств TimeBandwidth или WaveletParameters.

Пример: 'Wavelet','bump'

Количество речи на октаву, чтобы использовать для CWT, заданного как ровное целое число от 4 до 48. Шкалы CWT дискретизируются с помощью конкретного количества речи на октаву. Энергетическое распространение вейвлета в частоте и время автоматически определяет минимальные и максимальные шкалы.

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

Пример: 'VoicesPerOctave',20

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

Частота дискретизации в герц, заданном как положительная скалярная величина. Если незаданный, частоты находятся в циклах/выборке, и частота Найквиста ½. Чтобы задать шкалы в периоды, используйте свойства SamplingPeriod и PeriodLimits.

Вы не можете задать обоих свойства SamplingFrequency и SamplingPeriod.

Пример: 'SamplingFrequency',5

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

Пределы частоты набора фильтров вейвлета, заданного как двухэлементный вектор с положительными строго увеличивающимися записями. Первый элемент задает самую низкую пиковую частоту полосы пропускания и должен быть больше, чем или равным продукту частоты пика вейвлета в герц и в два раза стандартных отклонениях, разделенных на длину сигнала. Основа 2 логарифма отношения максимальной частоты к минимальной частоте должны быть больше, чем или равными 1/NV, где NV является количеством речи на октаву. Высокочастотный предел должен быть меньше чем или равен Найквисту.

Если вы задаете пределы частоты вне допустимой области значений, cwtfilterbank обрезает пределы минимальным и максимальным значениям. Используйте cwtfreqbounds, чтобы решить, что пределы частоты для различной параметризации вейвлета преобразовывают.

При использовании периода выборки в наборе фильтров вы не можете задать свойство FrequencyLimits.

Пример: 'SamplingFrequency',20,'FrequencyLimits',[1 5]

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

Выборка периода, заданного как скалярная длительность. Вы не можете задать обоих свойства SamplingFrequency и SamplingPeriod.

Пример: 'SamplingPeriod',seconds(0.5)

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

Пределы периода набора фильтров вейвлета, заданного как двухэлементный массив duration с положительными строго увеличивающимися записями. Первый элемент PeriodLimits задает самую большую пиковую частоту полосы пропускания и должен быть больше, чем или равным дважды SamplingPeriod. Основа 2 логарифма отношения минимального периода к максимальному периоду должны быть меньше чем или равны-1/NV, где NV является количеством речи на октаву. Максимальный период не может превысить длину сигнала, разделенную на продукт двух раз стандартные отклонения вейвлета и частоты пика вейвлета.

Если вы задаете пределы периода вне допустимой области значений, cwtfilterbank обрезает пределы минимальным и максимальным значениям. Используйте cwtfreqbounds, чтобы решить, что пределы периода для различной параметризации вейвлета преобразовывают.

При использовании частоты дискретизации в наборе фильтров вы не можете задать свойство PeriodLimits.

Пример: 'SamplingPeriod',seconds(0.1),'PeriodLimits',[seconds(0.2) seconds(1)]

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

Продукт пропускной способности времени для вейвлетов Морзе, заданных как положительная скалярная величина. Это свойство только допустимо, когда свойством Wavelet является 'morse'. Это свойство задает продукт пропускной способности времени вейвлета Морзе с параметром симметрии (гамма), зафиксированная в 3. TimeBandwidth является положительным числом, строго больше, чем 3 и меньше чем или равный 120.

Чем больше продукт пропускной способности времени, тем более распространен вейвлет вовремя и более узкий, вейвлет находится в частоте. Стандартным отклонением вейвлета Морзе вовремя является приблизительно sqrt(TimeBandwidth/2). Стандартным отклонением в частоте является приблизительно 1/2*sqrt(2/TimeBandwidth). Смотрите Обобщенного Морзе и Аналитические Вейвлеты Morlet.

Свойства TimeBandwidth и WaveletParameters не могут оба быть заданы.

В обозначении Вейвлетов Азбуки Морзе TimeBandwidth является P 2.

Пример: 'TimeBandwidth',20

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

Параметры вейвлета азбуки Морзе, заданные как двухэлементный вектор. Первый элемент является параметром симметрии (гамма), которая должна быть больше, чем или равной 1. Второй элемент является продуктом пропускной способности времени, который должен быть строго больше, чем гамма. Отношение продукта пропускной способности времени к гамме не может превысить 40.

Когда гамма равна 3, вейвлет Морзе совершенно симметричен в частотном диапазоне. Скошенность равна 0. Значения гаммы, больше, чем 3 результата в положительной скошенности, в то время как значения гаммы меньше чем 3 результата в отрицательной скошенности. WaveletParameters только допустим, если свойство Wavelet установлено в 'Morse'.

Свойства WaveletParameters и TimeBandwidth не могут оба быть заданы.

Пример: 'WaveletParameters',[4,20]

Граничное расширение сигнала, заданного или как 'reflection' или как 'periodic'. Определяет, как данные обработаны на контуре.

Пример: 'Boundary','periodic'

Функции объекта

wtНепрерывный вейвлет преобразовывает с набором фильтров
freqzЧастотные характеристики набора фильтров CWT
waveletsВейвлеты временного интервала набора фильтров CWT
scalesШкалы набора фильтров CWT
waveletsupportПоддержки времени набора фильтров CWT
qfactorДобротность набора фильтров CWT
powerbwПропускная способность набора фильтров CWT 3 дБ
centerFrequenciesПолоса пропускания набора фильтров CWT сосредотачивает частоты
centerPeriodsПолоса пропускания набора фильтров CWT сосредотачивает периоды

Примеры

свернуть все

Создайте непрерывный банк фильтра преобразований вейвлета.

fb = cwtfilterbank
fb = 
  cwtfilterbank with properties:

      VoicesPerOctave: 10
              Wavelet: 'Morse'
    SamplingFrequency: 1
       SamplingPeriod: []
         PeriodLimits: []
         SignalLength: 1024
      FrequencyLimits: []
        TimeBandwidth: 60
    WaveletParameters: []
             Boundary: 'reflection'

Постройте частотную характеристику значения.

freqz(fb)

Создайте две синусоиды с частотами 16 и 64 Гц. Данные выбираются на уровне 1 000 Гц. Постройте сигнал.

Fs = 1e3;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*64*t).*(t>=0.1 & t<0.3)+sin(2*pi*16*t).*(t>=0.5 & t<0.9);
plot(t,x)
title('Signal')

Создайте набор фильтров CWT для сигнала. Постройте частотные характеристики вейвлетов в наборе фильтров.

fb = cwtfilterbank('SignalLength',numel(t),'SamplingFrequency',Fs);
freqz(fb)
title('Frequency Responses — Morse (3,60) Wavelet')

Аналитический Морзе (3,60) вейвлет является вейвлетом по умолчанию в наборе фильтров. Вейвлет имеет продукт пропускной способности времени, равный 60. Создайте второй набор фильтров, идентичный первому набору фильтров, но вместо этого использует аналитического Морзе (3,5) вейвлет. Постройте частотные характеристики вейвлетов во втором наборе фильтров.

fb3x5 = cwtfilterbank('SignalLength',numel(t),'SamplingFrequency',Fs,...
    'TimeBandwidth',5);
figure
freqz(fb3x5)
title('Frequency Responses — Morse (3,5) Wavelet')

Заметьте, что частотные характеристики более широки, чем в первом наборе фильтров. Азбука Морзе (3,60) вейвлет лучше локализуется в частоте, чем Азбука Морзе (3,5) вейвлет. Примените каждый набор фильтров к сигналу и постройте получившийся scalograms. Заметьте, что у Азбуки Морзе (3,60) вейвлет есть лучшее разрешение частоты, чем Азбука Морзе (3,5) вейвлет.

figure
cwt(x,'FilterBank',fb)
title('Magnitude Scalogram — Morse (3,60)')

figure
cwt(x,'FilterBank',fb3x5)
title('Magnitude Scalogram — Morse (3,5)')

Этот пример показывает, что амплитуды колебательных компонентов в сигнале соглашаются с амплитудами соответствующих коэффициентов вейвлета.

Создайте сигнал, состоявший из двух синусоид с непересекающейся поддержкой вовремя. Одна синусоида имеет частоту 32 Гц и амплитуду, равную 1. Другая синусоида имеет частоту 64 Гц и амплитуду, равную 2. Сигнал выбирается в течение одной секунды на уровне 1 000 Гц. Постройте сигнал.

frq1 = 32;
amp1 = 1;
frq2 = 64;
amp2 = 2;

Fs = 1e3;
t = 0:1/Fs:1;
x = amp1*sin(2*pi*frq1*t).*(t>=0.1 & t<0.3)+amp2*sin(2*pi*frq2*t).*(t>0.6 & t<0.9);

plot(t,x)
grid on
xlabel('Time (sec)')
ylabel('Amplitude')
title('Signal')

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

fb = cwtfilterbank('SignalLength',numel(x),'SamplingFrequency',Fs,...
    'FrequencyLimits',[20 100]);
figure
freqz(fb)

Используйте cwt и набор фильтров, чтобы построить scalogram сигнала.

figure
cwt(x,'FilterBank',fb)

Выполните этот скрипт и используйте Data Cursor, чтобы подтвердить, что амплитуды коэффициентов вейвлета чрезвычайно равны амплитудам синусоидальных компонентов.

Этот пример показывает, как отличаться параметр пропускной способности времени обобщенного вейвлета Морзе, чтобы аппроксимировать аналитический вейвлет Morlet.

Обобщенные вейвлеты Азбуки Морзе являются семейством точно аналитических вейвлетов. Вейвлеты азбуки Морзе имеют два параметра, симметрию и продукт пропускной способности времени. Можно отличаться эти параметры, чтобы получить аналитические вейвлеты с различными свойствами и поведениями. Для получения дополнительной информации смотрите Вейвлеты Азбуки Морзе и ссылки там.

Загрузите данные о сейсмографе, зарегистрированные во время 1 995 землетрясений Кобе. Данные являются сейсмографом (вертикальное ускорение, nm/sq.sec) измерения, зарегистрированные в Университете Тасмании, Хобарт, Австралия 16 января 1995, начинаясь в 20:56:51 (GMT) и продолжаясь в течение 51 минуты в 1 втором интервале. Создайте набор фильтров CWT с настройками по умолчанию, которые могут быть применены к данным. Используйте набор фильтров, чтобы сгенерировать scalogram.

load kobe
fb = cwtfilterbank('SignalLength',numel(kobe),'SamplingFrequency',1);
cwt(kobe,'FilterBank',fb)

Значение коэффициентов вейвлета является большим в частотном диапазоне от 10 МГц до 100 МГц. Создайте новый набор фильтров с предельным набором частоты к этим значениям. Сгенерируйте scalogram.

fb2 = cwtfilterbank('SignalLength',numel(kobe),'SamplingFrequency',1,...
    'FrequencyLimits',[1e-2 1e-1]);
cwt(kobe,'FilterBank',fb2)
title('Default (3,60) Morse')

По умолчанию cwtfilterbank использует (3,60) вейвлет Морзе. Создайте набор фильтров с помощью аналитического вейвлета Morlet с теми же пределами частоты. Сгенерируйте scalogram и сравните с scalogram, сгенерированным (3,60) вейвлет Морзе.

fbMorlet = cwtfilterbank('SignalLength',numel(kobe),'SamplingFrequency',1,...
    'FrequencyLimits',[1e-2 1e-1],...
    'Wavelet','amor');
cwt(kobe,'FilterBank',fbMorlet)
title('Analytic Morlet')

Вейвлет Morlet также не локализуется в частоте как (3,60) вейвлет Морзе. Однако путем варьирования продукта пропускной способности времени, можно создать вейвлет Морзе со свойствами, подобными вейвлету Morlet.

Создайте набор фильтров с помощью вейвлета Морзе со значением пропускной способности времени 30 [2] с пределами частоты как выше. Сгенерируйте scalogram данных о сейсмографе. Примечание там мажет в частоте, почти идентичной результатам Morlet.

fbMorse = cwtfilterbank('SignalLength',numel(kobe),'SamplingFrequency',1,...
    'FrequencyLimits',[1e-2 1e-1],...
    'TimeBandwidth',30);
cwt(kobe,'FilterBank',fbMorse)
title('(3,30) Morse')

Теперь исследуйте вейвлеты, сопоставленные с наборами фильтров fbMorse и fbMorlet. От обоих наборов фильтров получите частоты центра вейвлета, отфильтруйте частотные характеристики и вейвлеты временного интервала. Подтвердите, что центральные частоты почти идентичны.

cfMorlet = centerFrequencies(fbMorlet);
[frMorlet,fMorlet] = freqz(fbMorlet);
[wvMorlet,tMorlet] = wavelets(fbMorlet);
cfMorse = centerFrequencies(fbMorse);
[frMorse,fMorse] = freqz(fbMorse);
[wvMorse,tMorse] = wavelets(fbMorse);

disp(['Number of Center Frequencies: ',num2str(length(cfMorlet))]);
Number of Center Frequencies: 34
disp(['Maximum difference: ',num2str(max(abs(cfMorlet-cfMorse)))]);
Maximum difference: 2.7756e-17

Каждый набор фильтров содержит то же количество вейвлетов. Выберите центральную частоту и постройте частотную характеристику связанного фильтра от каждого набора фильтров. Подтвердите, что ответы почти идентичны.

wv = 13;
figure
plot(fMorlet,frMorlet(wv,:));
hold on
plot(fMorse,frMorse(wv,:));
grid on
title('Frequency Response')
xlabel('Frequency')
ylabel('Amplitude')
legend('Morlet','(3,30) Morse')

Постройте вейвлеты временного интервала, сопоставленные с той же центральной частотой. Подтвердите, что они почти идентичны.

figure
subplot(2,1,1)
plot(tMorlet,real(wvMorlet(wv,:)))
hold on
plot(tMorse,real(wvMorse(wv,:)))
grid on
title('Real')
legend('Morlet','(3,30) Morse')
xlim([-100 100])
subplot(2,1,2)
plot(tMorlet,imag(wvMorlet(wv,:)))
hold on
plot(tMorse,imag(wvMorse(wv,:)))
grid on
title('Imaginary')
legend('Morlet','(3,30) Morse')
xlim([-100 100])

Этот пример показывает что, увеличивая продукт пропускной способности времени P2 из Морзе вейвлет создает вейвлет с большим количеством колебаний под его конвертом. При прочих равных условиях, увеличение P2 делает вейвлет более локализованным частотой в результате.

Создайте два набора фильтров. Один набор фильтров имеет значение TimeBandwidth по умолчанию 60. Второй набор фильтров имеет значение TimeBandwidth 10. SignalLength для обоих наборов фильтров является 4 096 выборками.

sigLen = 4096;
fb60 = cwtfilterbank('SignalLength',sigLen);
fb10 = cwtfilterbank('SignalLength',sigLen,'TimeBandwidth',10);

Получите вейвлеты временного интервала для наборов фильтров.

[psi60,t] = wavelets(fb60);
[psi10,~] = wavelets(fb10);

Используйте функцию scales, чтобы найти родительский вейвлет для каждого набора фильтров.

sca60 = scales(fb60);
sca10 = scales(fb10);
[~,idx60] = min(abs(sca60-1));
[~,idx10] = min(abs(sca10-1));
m60 = psi60(idx60,:);
m10 = psi10(idx10,:);

Поскольку продукт пропускной способности времени больше для набора фильтров fb60, проверьте, что вейвлет m60 имеет больше колебаний под своим конвертом, чем вейвлет m10.

subplot(2,1,1)
plot(t,abs(m60))
grid on
hold on
plot(t,real(m60))
plot(t,imag(m60))
xlim([-30 30])
legend('abs(m60)','real(m60)','imag(m60)')
title('TimeBandwidth = 60')
subplot(2,1,2)
plot(t,abs(m10))
grid on
hold on
plot(t,real(m10))
plot(t,imag(m10))
xlim([-30 30])
legend('abs(m10)','real(m10)','imag(m10)')
title('TimeBandwidth = 10')

Выровняйте peaks m60 и частотных характеристик значения m10. Проверьте, что частотная характеристика вейвлета m60 является более узкой, чем частотная характеристика для вейвлета m10.

cf60 = centerFrequencies(fb60);
cf10 = centerFrequencies(fb10);

m60cFreq = cf60(idx60);
m10cFreq = cf10(idx10);

freqShift = 2*pi*(m60cFreq-m10cFreq);
x10 = m10.*exp(1j*freqShift*(-sigLen/2:sigLen/2-1));

figure
plot([abs(fft(m60)).' abs(fft(x10)).'])
grid on
legend('Time-bandwidth = 60','Time-bandwidth = 10')
title('Magnitude Frequency Responses')

Этот пример показывает, как использование набора фильтров CWT повышает вычислительную эффективность при взятии CWT нескольких временных рядов.

Загрузите данные о сейсмографе, зарегистрированные во время 1 995 землетрясений Кобе. Данные являются сейсмографом (вертикальное ускорение, nm/sq.sec) измерения, зарегистрированные в Университете Тасмании, Хобарт, Австралия 16 января 1995, начинаясь в 20:56:51 (GMT) и продолжаясь в течение 51 минуты в 1 втором интервале. Создайте набор фильтров CWT, который может быть применен к данным.

load kobe
fb = cwtfilterbank('SignalLength',numel(kobe),'SamplingFrequency',1);

Используйте cwt, функционируют и берут CWT данных 250 раз. Отобразите используемое прошедшее время.

num = 250;
tic;
for k=1:num
    cfs = cwt(kobe);
end
toc
Elapsed time is 6.551628 seconds.

Теперь используйте функцию объекта wt набора фильтров, чтобы взять CWT данных. Подтвердите, что использование набора фильтров быстрее.

tic;
for k=1:num
    cfs = wt(fb,kobe);
end
toc
Elapsed time is 3.782376 seconds.

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2018b

Ссылки

[1] Лилли, J. M. и С. К. Олхед. “Обобщенные Вейвлеты Азбуки Морзе как Суперсемейство Аналитических Вейвлетов”. Транзакции IEEE на Обработке сигналов. Издание 60, № 11, 2012, стр 6036–6041.

[2] Лилли, J. M. и С. К. Олхед. “Свойства высшего порядка Аналитических Вейвлетов”. Транзакции IEEE на Обработке сигналов. Издание 57, № 1, 2009, стр 146–160.

[3] Лилли, J. M. jLab: пакет анализа данных для MATLAB, версии 1.6.2. 2016. http://www.jmlilly.net/jmlsoft.html.

[4] Лилли, J. M. “Элементный анализ: основанный на вейвлете метод для анализа локализованных временем событий в шумных временных рядах”. Продолжения Королевского общества A. Объем 473: 20160776, 2017, стр 1–28. dx.doi.org/10.1098/rspa.2016.0776.

Расширенные возможности

Введенный в R2018a