Этот пример демонстрирует различия между функциями 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')
Возьмите MODWT сигнала.
wtecg = modwt(wecg,wv);
Входные данные являются выборками функции оценивается в -many time points. Функция может быть выражена как линейная комбинация функции масштабирования и вейвлет в меняющихся шкалах и переводах: где и - количество уровней разложения вейвлета. Первая сумма является грубой шкалой сигнала, и являются деталями в последовательных шкалах. MODWT возвращает -мерные коэффициенты и -many detail коэффициенты расширения. Каждая строка в wtecg
содержит коэффициенты в другой шкале.
При приеме MODWT сигнала длины , есть -many уровни разложения (по умолчанию). Коэффициенты детализации формируются на каждом уровне. Коэффициенты масштабирования возвращаются только для конечного уровня. В этом примере, с , и количество строк в wtecg
является .
MODWT разбивает энергию на различные шкалы и коэффициенты масштабирования: где - входные данные, являются коэффициентами детализации в шкале , и являются коэффициентами масштабирования конечного уровня.
Вычислите энергию в каждой шкале и оцените их сумму.
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 возвращает проекции функции на различные подпространства вейвлета и конечное пространство масштабирования. То есть MODWTMRA возвращается и - многие оценивается в -many time points. Каждая строка в mraecg
является проекцией в другой подпространство. Это означает, что исходный сигнал может быть восстановлен путем добавления всех проекций. Это не соответствует действительности в случае MODWT. Добавление коэффициентов в wtecg
не восстанавливает исходный сигнал.
Выберите временной точкой, добавьте проекции оценивают в этот момент времени и сравнивают с исходным сигналом.
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')
Сделайте аналогичный график, используя коэффициенты 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')
[1] Персиваль, Д. Б., и А. Т. Уолден. Вейвлет для анализа временных рядов. Кембридж, Великобритания: Cambridge University Press, 2000.