modwt

Максимальное перекрытие дискретного вейвлет

Описание

пример

w = modwt(x) возвращает максимальное перекрытие дискретного вейвлет (MODWT) x. x может быть реальным или комплексным вектором или матрицей. Если x является матрицей, modwt работает с столбцами x. modwt вычисляет преобразование вейвлета до уровня floor(log2(length(x))) если x является вектором и floor(log2(size(x,1))) если x является матрицей. По умолчанию, modwt использует Daubechies наименее-асимметричный вейвлет с четырьмя моментами исчезновения ('sym4') и периодическая обработка границ.

пример

w = modwt(x,wname) использует ортогональный вейвлет, wname, для MODWT.

пример

w = modwt(x,Lo,Hi) использует фильтр масштабирования, Lo, и вейвлет, Hi, для вычисления MODWT. Эти фильтры должны удовлетворять условиям для ортогонального вейвлета. Вы не можете задать оба wname и пару фильтров, Lo и Hi.

пример

w = modwt(___,lev) вычисляет MODWT до заданного уровня, lev, с использованием любого из аргументов из предыдущих синтаксисов.

пример

w = modwt(___,'reflection') вычисляет MODWT с помощью обработки контуров отражения. Другими входами могут быть любые аргументы из предыдущих синтаксисов. Перед вычислением вейвлет, modwt расширяет сигнал симметрично на конце терминала до удвоения длины сигнала. Количество вейвлет и масштабирующих коэффициентов, которые modwt возвраты равны удвоенной длине входного сигнала. По умолчанию сигнал периодически расширяется.

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

Примеры

свернуть все

Получите MODWT сигнала электрокардиограммы (ECG) с помощью sym4 по умолчанию вейвлет до максимального уровня. Данные взяты из Percival & Walden (2000), стр. 25 (данные первоначально предоставлены Уильямом Константином и Пером Рейнхоллом, Университет Вашингтона).

load wecg;
wtecg = modwt(wecg);
whos wtecg
  Name        Size               Bytes  Class     Attributes

  wtecg      12x2048            196608  double              

Первые одиннадцать строк wtecg являются вейвлет для шкал 21 кому 211. Итоговая строка содержит коэффициенты масштабирования в шкале 211. Постройте график коэффициентов детализации (вейвлет) для шкалы 23.

plot(wtecg(3,:))
title('Level 3 Wavelet Coefficients')

Figure contains an axes. The axes with title Level 3 Wavelet Coefficients contains an object of type line.

Получите данные MODWT индекса южного колебания с db2 вейвлет до максимального уровня.

load soi;
wsoi = modwt(soi,'db2');

Получите данные MODWT по обменному курсу Deutsche Mark - U.S. Dollar с помощью масштабирующих и вейвлет Fejer-Korovkin length 8.

load DM_USD;
[Lo,Hi] = wfilters('fk8');
wdm = modwt(DM_USD,Lo,Hi);

Получите MODWT сигнала ECG до масштаба 24, что соответствует четвертому уровню. Используйте sym4 по умолчанию вейвлет. Данные взяты из Percival & Walden (2000), стр. 25 (данные первоначально предоставлены Уильямом Константином и Пером Рейнхоллом, Университет Вашингтона).

load wecg;
wtecg = modwt(wecg,4);
whos wecg wtecg
  Name          Size              Bytes  Class     Attributes

  wecg       2048x1               16384  double              
  wtecg         5x2048            81920  double              

Размер строки wtecg является L + 1, где, в этом случае, уровень (L) равен 4. Размер столбца соответствует количеству входа отсчетов.

Получите MODWT сигнала ECG с помощью обработки контуров отражения. Используйте sym4 по умолчанию вейвлет и получить преобразование до уровня 4. Данные взяты из Percival & Walden (2000), стр. 25 (данные первоначально предоставлены Уильямом Константином и Пером Рейнхоллом, Университет Вашингтона).

load wecg;
wtecg = modwt(wecg,4,'reflection');
whos wecg wtecg
  Name          Size               Bytes  Class     Attributes

  wecg       2048x1                16384  double              
  wtecg         5x4096            163840  double              

wtecg имеет 4096 столбцов, что в два раза больше длины входного сигнала, wecg.

Загрузите 23-канальные данные EEG Espiga3 [3]. Каналы расположены столбчато. Данные отбираются с частотой дискретизации 200 Гц.

load Espiga3

Вычислите максимальное перекрытие дискретного вейвлет до максимального уровня.

wt = modwt(Espiga3);

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

sigN2 = vecnorm(Espiga3).^2;
wtN2 = sum(squeeze(vecnorm(wt,2,2).^2));
bar(1:23,log(sigN2))
hold on
scatter(1:23,log(wtN2),'filled','SizeData',100)
alpha(0.75)
legend('Signal Energy','Energy in Wavelet Coefficients', ...
        'Location','NorthWest')
xlabel('Channel')
ylabel('ln(squared energy)')

Figure contains an axes. The axes contains 2 objects of type bar, scatter. These objects represent Signal Energy, Energy in Wavelet Coefficients.

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

Выберите sym6 вейвлет. Загрузите и постройте график сигнала электрокардиограммы (ЭКГ). Частота дискретизации для сигнала ЭКГ составляет 180 герц. Данные взяты из Percival and Walden (2000), p.125 (данные первоначально предоставлены Уильямом Константином и Пером Рейнхоллом, Университет Вашингтона).

load wecg
t = (0:numel(wecg)-1)/180;
wv = 'sym6';
plot(t,wecg)
grid on
title(['Signal Length = ',num2str(numel(wecg))])
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes. The axes with title Signal Length = 2048 contains an object of type line.

Возьмите MODWT сигнала.

wtecg = modwt(wecg,wv);

Входные данные являются выборками функции f(x) оценивается в N-many time points. Функция может быть выражена как линейная комбинация функции масштабирования ϕ(x) и вейвлет ψ(x)в меняющихся шкалах и переводах: f(x)=k=0N-1ck2-J0/2ϕ(2-J0x-k)+j=1J0fj(x) где fj(x)=k=0N-1dj,k2-j/2ψ(2-jx-k) и J0 - количество уровней разложения вейвлета. Первая сумма является грубой шкалой сигнала, и fj(x) являются деталями в последовательных шкалах. MODWT возвращает N-мерные коэффициенты {ck}и (J0×N)-many detail коэффициенты {dj,k} расширения. Каждая строка в wtecg содержит коэффициенты в другой шкале.

При приеме MODWT сигнала длины N, есть floor(log2(N))-many уровни разложения (по умолчанию). Коэффициенты детализации формируются на каждом уровне. Коэффициенты масштабирования возвращаются только для конечного уровня. В этом примере, с N=2048, J0=пол(log2(2048))=11 и количество строк в wtecg является J0+1=11+1=12.

MODWT разбивает энергию на различные шкалы и коэффициенты масштабирования: ||X||2=j=1J0||Wj||2+||VJ0||2 где X - входные данные, Wj являются коэффициентами детализации в шкале j, и VJ0 являются коэффициентами масштабирования конечного уровня.

Вычислите энергию в каждой шкале и оцените их сумму.

energy_by_scales = sum(wtecg.^2,2);
Levels = {'D1';'D2';'D3';'D4';'D5';'D6';'D7';'D8';'D9';'D10';'D11';'A11'};
energy_table = table(Levels,energy_by_scales);
disp(energy_table)
    Levels     energy_by_scales
    _______    ________________

    {'D1' }         14.063     
    {'D2' }         20.612     
    {'D3' }         37.716     
    {'D4' }         25.123     
    {'D5' }         17.437     
    {'D6' }         8.9852     
    {'D7' }         1.2906     
    {'D8' }         4.7278     
    {'D9' }         12.205     
    {'D10'}         76.428     
    {'D11'}         76.268     
    {'A11'}         3.4192     
energy_total = varfun(@sum,energy_table(:,2))
energy_total=table
    sum_energy_by_scales
    ____________________

           298.28       

Подтвердите, что MODWT сохраняет энергию, вычисляя энергию сигнала и сравнивая его с суммой энергий по всем шкалам.

energy_ecg = sum(wecg.^2);
max(abs(energy_total.sum_energy_by_scales-energy_ecg))
ans = 7.4402e-10

Возьмите MODWTMRA сигнала.

mraecg = modwtmra(wtecg,wv);

MODWTMRA возвращает проекции функции f(x) на различные подпространства вейвлета и конечное пространство масштабирования. То есть MODWTMRA возвращается k=0N-1ck2-J0/2ϕ(2-J0x-k)и J0- многие {fj(x)}оценивается в N-many time points. Каждая строка в mraecg является проекцией f(x) в другой подпространство. Это означает, что исходный сигнал может быть восстановлен путем добавления всех проекций. Это не соответствует действительности в случае MODWT. Добавление коэффициентов в wtecg не восстанавливает исходный сигнал.

Выберите временной точкой, добавьте проекции f(x) оценивают в этот момент времени и сравнивают с исходным сигналом.

time_point = 1000;
abs(sum(mraecg(:,time_point))-wecg(time_point))
ans = 3.0846e-13

Подтвердите, что, в отличие от MODWT, MODWTMRA не является энергосберегающим преобразованием.

energy_ecg = sum(wecg.^2);
energy_mra_scales = sum(mraecg.^2,2);
energy_mra = sum(energy_mra_scales);
max(abs(energy_mra-energy_ecg))
ans = 115.7053

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

plot(t,wecg,'b')
hold on
plot(t,mraecg(4,:),'-')
hold off
grid on
xlim([4 8])
legend('Signal','Projection','Location','northwest')
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Signal, Projection.

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

plot(t,wecg,'b')
hold on
plot(t,wtecg(4,:),'-')
hold off
grid on
xlim([4 8])
legend('Signal','Coefficients','Location','northwest')
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Signal, Coefficients.

Входные параметры

свернуть все

Входной сигнал, заданный как вектор или матрица. Если x является вектором, x должен иметь не менее двух элементов. Если x является матрицей, строкой размерностью x должно быть не менее 2.

Типы данных: single | double
Поддержка комплексного числа: Да

Анализ вейвлета, заданный как одно из следующего:

  • 'haar' - Haar wavelet

  • 'db N' - Экстремальная фаза Daubechies вейвлет с N моменты исчезновения, где N является положительным целым числом от 1 до 45.

  • 'sym <reservedrangesplaceholder0>' - Симлеты вейвлет с N моменты исчезновения, где N является положительным целым числом от 2 до 45.

  • 'чепец N' - Вейвлет Coiflets с N моменты исчезновения, где N является положительным целым числом от 1 до 5.

  • 'fk <reservedrangesplaceholder0>' - Фежер-Коровкин вейвлет с N коэффициенты, где N = 4, 6, 8, 14, 18 и 22.

Фильтры, заданные как пара векторов с реальным значением четной длины. Lo - масштабирующий фильтр, и Hi - вейвлет. Фильтры должны удовлетворять условиям для ортогонального вейвлета. Длины Lo и Hi должно быть равным. Посмотрите wfilters для получения дополнительной информации. Вы не можете задать оба вейвлет- wname и фильтровать пары Lo,Hi.

Уровень преобразования, заданный как положительное целое число, меньше или равное floor(log2(N)), где N = length(x) если x является вектором, или N = size(x,1) если x является матрицей. Если не задано, lev по умолчанию является floor(log2(N)).

Выходные аргументы

свернуть все

MODWT-преобразование x. w содержит вейвлет и коэффициенты масштабирования конечного уровня x. Если x является вектором, w является lev+ 1-by- N матрица. Если x является матрицей, w является lev+ 1-by- N -by- NC массив, где NC - количество столбцов в x. N равно длине входного сигнала, если вы не задаете 'reflection' обработка границ, в этом случае N в два раза превышает длину входного сигнала. k строка массива, w, содержит коэффициенты вейвлета для шкалы 2k (вейвлет 2(k-1)). Окончательная, (lev+ 1) th, строка содержит коэффициенты масштабирования для шкалы 2lev.

Алгоритмы

Стандартный алгоритм для MODWT реализует круговую свертку непосредственно во временном интервале. Эта реализация MODWT выполняет круговую свертку в области Фурье. Вейвлет и коэффициенты масштабирующего фильтра на уровне j вычисляются путем взятия обратного дискретного преобразования Фурье ( DFT) продукта ДПФ. ДПФ в продукте являются ДПФ сигнала и ДПФ вейвлет j-го уровня или масштабирующим фильтром .

Давайте Hk и Gk обозначать длину N ДПФ вейвлет MODWT и масштабирующих фильтров, соответственно. Позвольте j обозначить уровень и N обозначить размер выборки.

Вейвлет-фильтр j-го уровня задан как

1Nk=0N1Hj,kei2πnk/N

где

Hj,k=H2j1kmodNm=0j2G2mkmodN

Масштабирующий фильтр j-го уровня

1Nk=0N1Gj,kei2πnk/N

где

Gj,k=m=0j1G2mkmodN

Ссылки

[1] Персиваль, Дональд Б. и Эндрю Т. Уолден. Вейвлет для анализа временных рядов. Кембриджская серия в статистической и вероятностной математике. Кембридж; Нью-Йорк: Cambridge University Press, 2000.

[2] Персиваль, Дональд Б. и Гарольд О. Мофьелд. Анализ субтидных колебаний уровня прибрежного моря с использованием вейвлетов. Журнал Американской статистической ассоциации 92, № 439 (сентябрь 1997 года): 868-80. https://doi.org/10.1080/01621459.1997.10474042.

[3] Меса, Гектор. «Адаптированные вейвлеты для обнаружения шаблона». В Прогресс Pattern Recognition, Image Analysis and Applications, под редакцией Альберто Санфелиу и Мануэля Лазо Кортеса, 3773: 933-44. Берлин, Гейдельберг: Спрингер Берлин Гейдельберг, 2005. https://doi.org/10.1007/11578079_96 .

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

..
Введенный в R2015b