В этом примере показано сглаживание и затенение неравномерно дискретизированных данных с использованием многомасштабного локального полиномиального преобразования (MLPT). MLPT - это схема подъема (Jansen, 2013), которая разделяет многие характеристики дискретного вейвлет-преобразования и работает с неравномерно дискретизированными данными.
Многие ряды реального времени имеют наблюдения, которые не регистрируются с регулярными интервалами. Это может быть результатом неравномерной выборки данных или отсутствующих или поврежденных наблюдений. Дискретное вейвлет-преобразование (DWT) является мощным инструментом для деноизирования данных или выполнения непараметрической регрессии, но классический DWT определяется для данных с равномерной выборкой. Концепция масштаба, которая является центральной для DWT, в решающей степени зависит от регулярного интервала между наблюдениями.
Схема подъема (вейвлеты второго поколения) (Jansen & Oonincx, 2005) обеспечивает способ конструирования вейвлетов и реализации вейвлетного преобразования полностью во временной (пространственной) области. Хотя классический DWT также может быть представлен схемой подъема, подъем также является достаточно гибким для обработки неравномерно отобранных данных.
Загрузите и постройте график шумного неравномерно дискретизированного временного ряда.
load skyline plot(T,y) xlabel('Seconds') grid on

При построении графика разницы времени выборки можно увидеть, что данные дискретизированы неравномерно.
plot(diff(T)) title('First Difference of Sampling Times') axis tight ylabel('\Delta T') xlabel('Sample') grid on

В этом синтетическом наборе данных имеется доступ к исходному сигналу без шума. При построении графика эти данные характеризуются плавно изменяющимися элементами, а также внезапными переходными элементами, близкими к 0,07, 0,26 и 0,79 секундам.
plot(T,f) xlabel('Seconds') grid on title('Original (Noise-Free) Data')

В реальных приложениях резкие изменения данных часто означают важные события. Когда вы отрицаете такие данные, важно не сглаживать переходные процессы. Вейвлеты, как правило, превосходят при деноизировании таких данных, потому что вейвлеты растягиваются, чтобы соответствовать более длительным плавно изменяющимся признакам, и сжимаются, чтобы соответствовать переходным процессам. MLPT имеет аналогичные характеристики, но он, естественно, обрабатывает неравномерно дискретизированные данные. Осквернение данных с помощью MLPT.
xden = mlptdenoise(y,T,3); hline = plot(T,[f xden]); grid on hline(1).LineWidth = 2; title('MLPT Denoising')

MLPT делает хорошую работу по отрицанию данных. Плавно изменяющиеся признаки хорошо представлены, и переходные процессы сохранены. В этом синтетическом наборе данных можно измерить отношение сигнал/шум (SNR) деноизированной версии.
SNR = 20*log10(norm(f,2)/norm(xden-f,2)); title(['SNR ' num2str(SNR,'%2.2f') 'dB'])

SNR составляет почти 20 дБ. Конечно, можно игнорировать тот факт, что данные дискретизированы неравномерно, и рассматривать образцы как однородные. Удалите предыдущий набор данных с помощью DWT.
xd = wdenoise(y,3,'Wavelet','bior2.2','DenoisingMethod','SURE','NoiseEstimate','LevelDependent'); SNR = 20*log10(norm(f,2)/norm(xd-f,2)); hline = plot(T,[f xd]); title(['SNR ' num2str(SNR,'%2.2f') 'dB']) grid on hline(1).LineWidth = 2;

Здесь DWT делает хорошую работу по обесценению данных, но он превосходит MLPT, который явно принимает во внимание неравномерные моменты выборки.
Сравните результаты вейвлета и MLPT-деноизирования с методом Савицки-Голая, реализующим локальное полиномиальное приближение данных. Вариант Савицкого-Голая реализован в smoothdata обрабатывает равномерно и неравномерно дискретизированные данные.
xdsg = smoothdata(y,'sgolay','degree',4,'samplepoints',T); SNR = 20*log10(norm(f,2)/norm(xdsg-f,2)); hline = plot(T,[f xdsg]); title(['SNR ' num2str(SNR,'%2.2f') ' dB']) grid on hline(1).LineWidth = 2;

И классический DWT, и MLPT превосходят Савицки-Голая по этим данным.
Рассмотрим другой набор синтетических данных с неравномерной выборкой.
load nonuniformheavisine plot(t,x) grid on

Эти данные обычно являются более гладкими, чем в предыдущем примере, за исключением двух переходных процессов со скоростью 0,3 и 0,7 секунды. Подобные данные представляют собой проблему для таких методов, как Savitzky-Golay, потому что полином низкого порядка необходим для соответствия плавно колеблющимся данным, в то время как полином более высокого порядка необходим для аппроксимации скачков.
Удалите данные с помощью MLPT и измерьте SNR. Возвращает как исходные коэффициенты MLPT, так и деноизированные коэффициенты.
[xden,t,wthr,w] = mlptdenoise(x,t,3,'denoisingmethod','SURE'); plot(t,[f xden]) grid on SNR = 20*log10(norm(f,2)/norm(xden-f,2)); title({'MLPT Denoising'; ['SNR ' num2str(SNR,'%2.2f') ' dB']})

Постройте график исходных и обозначенных коэффициентов.
figure subplot(2,1,1) stem(w,'ShowBaseLine','off','Marker','None') title('Original MLPT Coefficients') subplot(2,1,2) stem(wthr,'ShowBaseLine','off','Marker','None') title('Denoised MLPT Coefficients')

Сравните результат MLPT с методом Савицкого-Голая.
xdsg = smoothdata(x,'sgolay','degree',4,'samplepoints',t); figure plot(t,[f xdsg]) grid on SNR = 20*log10(norm(f,2)/norm(xdsg-f,2)); title({'Savitzky-Golay Denoising'; ['SNR ' num2str(SNR,'%2.2f') ' dB']})

Здесь метод MLPT значительно превосходит Савицкого-Голая. Это особенно очевидно в неспособности метода Савицки-Голая захватить переходные процессы вблизи 0,3 и 0,7 секунды.
Во многих приложениях цель состоит в том, чтобы оценить некоторую неизвестную функцию ответа, поскольку одна или более переменных предиктора изменяются. Когда точная форма функции отклика неизвестна, это пример непараметрической регрессии.
Основной целью в этих случаях часто является получение гладкой оценки, предполагающей, что неизвестная функция ответа изменяется плавно с изменениями в предикторе.
В качестве примера непараметрической регрессии с нерегулярно отобранными данными рассмотрим следующие данные, состоящие из измерений силы G, произведенных на мотоциклетном шлеме манекена для испытания на столкновение в условиях крушения.
load motorcycledata plot(times,gmeasurements) grid on xlabel('Time') ylabel('G-force')

При построении графика разницы временных данных можно увидеть, что выборка данных выполняется неравномерно.
plot(diff(times)) title('First Difference of Time Data') grid on

Данные являются шумными, но, по-видимому, имеется четкая общая тенденция в данных. В частности, существует первоначальная отрицательная G-сила, которая затем начинает превращаться в положительную со временем. Положительный отскок продолжается после 0, а затем восстанавливается до базового уровня. Вы можете использовать mlptrecon для получения непараметрической регрессии для этих данных.
[w,t,nj,scalingmoments] = mlpt(gmeasurements,times,'dualmoments',4,... 'primalmoments',4,'prefilter','none'); a4 = mlptrecon('a',w,t,nj,scalingmoments,4,'dualmoments',4); hline = plot(times,[gmeasurements a4]); grid on hline(2).LineWidth = 2; legend('Original Data','Smooth Fit') xlabel('Time') ylabel('G-force') title('G-Force Measurements')

Аппроксимация MLPT на уровне 4 обеспечивает хорошую плавную подгонку к данным, что позволяет зафиксировать существенную природу отклика без влияния шума.
Этот пример продемонстрировал многомасштабное локальное полиномиальное преобразование (MLPT), схему подъема, которая поддается неравномерной выборке данных. MLPT полезен для деноизирования или непараметрической регрессии в случаях отсутствия или неравномерной выборки данных. Как минимум, это полезный эталон для сравнения с методами вейвлет-денойзинга, предназначенными для работы с данными с равномерной выборкой. В других случаях он превосходит обычное вейвлет-деноизирование, явно принимая во внимание неравномерную сетку выборки.
Янсен, М. «Многомасштабное локальное полиномиальное сглаживание в поднятой пирамиде для неравнозначных данных». Транзакции IEEE при обработке сигналов. Том 61, номер 3, 2013, стр. 545-555.
Янсен, М. и Патрик Унинкс. «Вейвлеты и приложения второго поколения». Лондон: Спрингер, 2005.