cwtfilterbank

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

Описание

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

Создание

Описание

пример

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

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

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
timeSpectrumУсредненный во времени спектр вейвлета
scaleSpectrumУсредненный шкалой спектр вейвлета
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')

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

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.

В этом примере показано, как построить CWT scalogram в подграфике фигуры.

Загрузите речевую выборку. Данные производятся на уровне 7 418 Гц. Постройте CWT по умолчанию scalogram.

load mtlb
cwt(mtlb,Fs)

Получите непрерывное преобразование вейвлета сигнала и частоты CWT.

[cfs,frq] = cwt(mtlb,Fs);

cwt функционируйте устанавливает время и оси частоты в scalogram. Создайте вектор, представляющий шаги расчета.

tms = (0:numel(mtlb)-1)/Fs;

На новом рисунке постройте исходный сигнал в верхнем подграфике и scalogram в более низком подграфике. Постройте частоты на логарифмическом масштабе.

figure
subplot(2,1,1)
plot(tms,mtlb)
axis tight
title('Signal and Scalogram')
xlabel('Time (s)')
ylabel('Amplitude')
subplot(2,1,2)
surface(tms,frq,abs(cfs))
axis tight
shading flat
xlabel('Time (s)')
ylabel('Frequency (Hz)')
set(gca,'yscale','log')

Советы

  • В первый раз, когда вы используете набор фильтров, чтобы взять CWT сигнала, фильтры вейвлета создаются, чтобы иметь тот же тип данных как сигнал. Предупреждающее сообщение сгенерировано, когда вы применяете тот же набор фильтров к сигналу с различным типом данных. Изменение типов данных идет со стоимостью перепроектирования или изменения точности набора фильтров. Для оптимальной эффективности используйте сопоставимый тип данных.

  • При выполнении нескольких CWTs, например, в цикле for, рекомендуемый рабочий процесс должен сначала создать cwtfilterbank возразите и затем используйте wt объектная функция. Этот рабочий процесс минимизирует наверху и максимизирует эффективность. Смотрите Используя Набор фильтров CWT на Нескольких Временных рядах.

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

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

Не рекомендуемый запуск в 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