mlpt

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

Синтаксис

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x,t)
[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x,t,numLevel)
[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x)
[coefs,T,coefsPerLevel,scalingMoments] = mlpt(___,Name,Value)

Описание

пример

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

пример

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

пример

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(x) универсальная выборка использования моментов для x как моменты времени, если x не содержит NaN s. Если x содержит NaN s, NaN s удалены из 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: 4.96
tic
[w13,~,nj13,m13] = mlpt(x,t,13);
computationTime13 = toc;
fprintf('Level thirteen computation time: %0.2f\n',computationTime13)
Level thirteen computation time: 6.29

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

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

load(fullfile(matlabroot,'examples','wavelet','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. Любой NaN s в столбцах 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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)-by-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