mlpt

Многошкальное локальное 1D полиномиальное преобразование

Описание

пример

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x,t) возвращает многошкальное локальное полиномиальное 1D преобразование (MLPT) входного сигнала x произведенный в моменты выборки, t. Если x или t содержите NaNs, объединение NaNs в x и t удален прежде, чем получить mlpt.

пример

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x,t,numLevel) возвращает преобразование для numLevel уровни разрешения.

пример

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x) универсальная форма использования выборка моментов для x как моменты времени, если x не содержит NaNs. Если x содержит NaNs, NaNs удалены из x и неоднородные моменты выборки получены из числовых элементов x.

пример

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(___,Name,Value) задает mlpt свойства с помощью одного или нескольких Name,Value парные аргументы и любой из предыдущих входных параметров.

Примеры

свернуть все

Создайте сигнал с неоднородной выборкой и проверьте хорошую реконструкцию при выполнении mlpt и imlpt.

Создайте и постройте синусоиду с неоднородной выборкой.

timeVector = 0:0.01:1;
sineWave = sin(2*pi*timeVector)';

samplesToErase = randi(100,100,1);
sineWave(samplesToErase) = [];
timeVector(samplesToErase) = [];

figure(1)
plot(timeVector,sineWave,'o')
hold on

Выполните многошкальное локальное 1D полиномиальное преобразование (mlpt) на сигнале. Визуализируйте коэффициенты.

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(sineWave,timeVector);

figure(2)
stem(coefs)
title('Wavelet Coefficients')

Выполните обратное многошкальное локальное 1D полиномиальное преобразование (imlpt) на коэффициентах. Визуализируйте восстановленный сигнал.

y = imlpt(coefs,T,coefsPerLevel,scalingMoments);

figure(1)
plot(T,y,'*')
legend('Original Signal','Reconstructed Signal')
hold off

Посмотрите на полную погрешность, чтобы проверить хорошую реконструкцию.

reconstructionError = sum(abs(y-sineWave))
reconstructionError = 1.7552e-15

Задайте двойные моменты не по умолчанию при помощи mlpt функция. Сравните результаты анализа и синтеза с помощью значения по умолчанию и двойные моменты не по умолчанию.

Создайте входной сигнал и визуализируйте его.

T = (1:16)';
x = T.^2;
plot(x)
hold on

Выполните прямое и обратное преобразование для входного сигнала с помощью значения по умолчанию и двойные моменты не по умолчанию.

[w2,t2,nj2,scalingmoments2] = mlpt(x,T);
y2 = imlpt(w2,t2,nj2,scalingmoments2);

[w3,t3,nj3,scalingmoments3] = mlpt(x,T,'dualmoments',3);
y3 = imlpt(w3,t3,nj3,scalingmoments3,'dualmoments',3);

Постройте восстановленный сигнал и проверьте совершенную реконструкцию с помощью и значения по умолчанию и двойные моменты не по умолчанию.

plot(y2,'o')
plot(y3,'*')
legend('Original Signal', ...
       'DualMoments = 3', ...
       'DualMoments = 2 (Default)');

fprintf('\nMean Reconstruction Error:\n');
Mean Reconstruction Error:
fprintf('  - Nondefault dual moments: %0.2f\n',mean(abs(y3-x)));
  - Nondefault dual moments: 0.00
fprintf('  - Default dual moments: %0.2f\n\n',mean(abs(y2-x)));
  - Default dual moments: 0.00
hold off

Уровни разрешения являются количеством каскадных локальных операций сглаживания полинома. Детали на каждом уровне разрешения получены путем предсказания одной половины выборок на основе локальной полиномиальной интерполяции другой половины. Различием между предсказанными и фактическими значениями являются детали на каждом уровне разрешения. Масштабные коэффициенты на каждом более грубом уровне разрешения являются более сглаженными версиями более высоких масштабных коэффициентов разрешения. Только масштабные коэффициенты итогового уровня сохраняются.

Увеличение числа уровней разрешения позволяет вам анализировать узкополосные коэффициенты для вычислительной стоимости и стоимости памяти.

Создайте двухтональный входной сигнал, x, это содержит высокие частоты и низкие частоты.

fs = 1000;
t = (0:1/fs:10)';
x = sin(499*pi.*t) + sin(2*pi.*t);

Используйте mlpt получить коэффициенты для уровней минимального и максимального разрешения. Распечатайте время вычисления.

tic
[w1,~,nj1,m1] = mlpt(x,t,1);
computationTime1 = toc;
fprintf('Level one computation time: %0.2f\n',computationTime1)
Level one computation time: 3.38
tic
[w13,~,nj13,m13] = mlpt(x,t,13);
computationTime13 = toc;
fprintf('Level thirteen computation time: %0.2f\n',computationTime13)
Level thirteen computation time: 4.97

Если ваши моменты времени не известны или заданы, можно вычислить MLPT, использующий моменты времени по умолчанию.

Загрузите сигнал данных, поврежденный с NaNs и с неизвестными моментами времени. Вычислите MLPT, не задавая моменты времени. Получившиеся подразумеваемые моменты времени являются вектором из допустимых индексов поврежденного сигнала.

load('CorruptedData.mat');

[w,t,nj,scalingMoments] = mlpt(yCorrupt);

Вычислите обратный MLPT и визуализируйте результаты. Повторно введите NaNs, чтобы визуализировать разрывы в сигнале.

z = imlpt(w,t,nj,scalingMoments);

zToPlot = NaN(numel(yCorrupt),1);
zToPlot(t) = z;

plot(yCorrupt,'k','LineWidth',2.5)
hold on
plot(zToPlot,'c','LineWidth',1)
hold off
legend('Original Signal','Reconstructed Signal')
xlabel('Time Instants')

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

свернуть все

Входной сигнал в виде вектора или матрицы.

  • матрица — x должен иметь по крайней мере две строки. mlpt работает независимо с каждым столбцом x. Число элементов в t должен равняться размерности строки x. Любой NaNs в столбцах x должен произойти в тех же строках.

  • вектор — x и t должен иметь то же число элементов.

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

Производя моменты, соответствуя входному сигналу в виде вектора, duration массив или datetime массив монотонно увеличения действительных значений. Значение по умолчанию зависит от длины входного сигнала, x.

Типы данных: double | duration | datetime

Количество уровней разрешения в виде положительного целого числа. Максимальное значение numLevel зависит от формы входного сигнала, x:

  • матрица — floor(log2(size(x,1)))

  • вектор — floor(log2(length(x)))

Если numLevel не задан, mlpt использует максимальное значение.

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'DualMoments',3 вычисляет преобразование с помощью трех двойных исчезающих моментов.

Номер двойных исчезающих моментов в поднимающейся схеме в виде разделенной запятой пары, состоящей из 'DualMoments' и 2, 3 или 4.

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

Номер основных исчезающих моментов в поднимающейся схеме в виде разделенной запятой пары, состоящей из 'PrimalMoments' и 2, 3, или 4.

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

Предварительный фильтр прежде mlpt операция в виде разделенной запятой пары, состоящей из 'Prefilter' and'Haar' [1], 'UnbalancedHaar', или 'None'.

Типы данных: char | string

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

свернуть все

Коэффициенты MLPT, возвращенные как вектор или матрица коэффициентов, в зависимости от уровня, к которому вычисляется преобразование. coefs содержит коэффициенты детали и приближение.

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

Выборка моментов, соответствующих, чтобы вывести, возвращенный как вектор или duration массив шагов расчета получен из x и t. imlpt функция требует T как вход. Если вход t datetime или duration массив, t преобразован в модули, которые допускают устойчивый расчет mlpt и imlpt. Затем T возвращен как duration массив.

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

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

  • coefsPerLevel(1) — Количество коэффициентов приближения на самом грубом уровне разрешения.

  • coefsPerLevel(i) — Количество коэффициентов детали на уровне разрешения i, где i = numLevel – i + 2 для i = 2, ..., numLevel + 1.

Меньшее индекс i, ниже разрешение. MLPT два раза избыточен в количестве коэффициентов детали, но не в количестве коэффициентов приближения.

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

Масштабирование функциональных моментов, возвращенных как length(coefs)- P матрица, где P номер основных моментов, заданных PrimalMoments пара "имя-значение".

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

Алгоритмы

Маартен Янсен разработал теоретическую основу многошкального локального полиномиального преобразования (MLPT) и алгоритмов для его эффективного расчета [1][2][3]. MLPT использует поднимающуюся схему, где функция ядра сглаживает коэффициенты прекрасной шкалы с данной пропускной способностью, чтобы получить более грубые коэффициенты разрешения. mlpt функционируйте использует только локальную полиномиальной интерполяцию, но метод, разработанный Янсеном, является более общим и допускает много других типов ядра с корректируемой пропускной способностью [2].

Ссылки

[1] Янсен, M. "Многошкальное Локальное Сглаживание Полинома в Снятой Пирамиде для Неравномерно расположенных Данных". Транзакции IEEE на Обработке сигналов. Издание 61, Номер 3, 2013, стр 545–555.

[2] Янсен, M. и М. Амгэр. "Многошкальные локальные полиномиальные разложения с помощью пропускной способности в качестве шкал". Статистика и Вычисление (предстоящего). 2016.

[3] Янсен, M. и Патрик Унинккс. Вейвлеты второго поколения и приложения. Лондон: Спрингер, 2005.

Введенный в R2017a