Contenuto principale

imlpt

Inverse multiscale local 1-D polynomial transform

Description

y = imlpt(coefs,T,coefsPerLevel,scalingMoments) returns the inverse multiscale local polynomial 1-D transform (MLPT) of coefs. The inputs to imlpt must be the outputs of mlpt.

example

y = imlpt(___,DualMoments=dm) specifies the number of dual vanishing moments in the lifting scheme.

Example: DualMoments=2 specifies two dual vanishing moments.

example

Examples

collapse all

Create a signal with nonuniform sampling and verify good reconstruction.

Create and plot a sine wave with nonuniform sampling.

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

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

plot(timeVector,sineWave,"o")
grid on
title("Signal")
xlabel("Time (s)")
ylabel("Amplitude")

Figure contains an axes object. The axes object with title Signal, xlabel Time (s), ylabel Amplitude contains a line object which displays its values using only markers.

Use mlpt to obtain the multiscale local 1-D polynomial transform of the signal. Visualize the coefficients.

[coefs,T,coefsPerLevel,scalingMoments] = mlpt(sineWave,timeVector);
stem(coefs)
grid on
title("Wavelet Coefficients")

Figure contains an axes object. The axes object with title Wavelet Coefficients contains an object of type stem.

Use imlpt to obtain the inverse multiscale local 1-D polynomial transform of the coefficients. Plot the original signal and the reconstruction.

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

plot(timeVector,sineWave,"o")
hold on
plot(T,y,"x")
hold off
grid on
legend("Original Signal","Reconstruction")
xlabel("Time (s)")
ylabel("Amplitude")

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Amplitude contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original Signal, Reconstruction.

Inspect the total error to verify good reconstruction.

reconstructionError = sum(abs(y'-sineWave))
reconstructionError = 
3.0951e-15

Specify nondefault dual moments by using the mlpt function. Compare the results of analysis and synthesis using the default and nondefault dual moments.

Create an input signal and visualize it.

t = linspace(0,1,200)';
x = cos(10*pi*t.^2);
plot(t,x)
title("Signal")

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

By default, DualMoments, the number of dual vanishing moments, is 2. Perform the forward and inverse transform for the input signal twice, with DualMoments set to 2 and 3.

[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 both reconstructions.

plot(t,x)
hold on
plot(t2,y2,'o')
plot(t3,y3,'*')
hold off
legend("Original", ...
       "DualMoments = 2", ...
       "DualMoments = 3");

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Original, DualMoments = 2, DualMoments = 3.

For each reconstruction, compute the mean error. Verify perfect reconstruction.

fprintf("Mean Error\nDualMoments = 2: %e\nDualMoments = 3: %e", ...
    mean(abs(y2-x)),mean(abs(y3-x)))
Mean Error
DualMoments = 2: 1.539914e-16
DualMoments = 3: 7.797582e-17

Input Arguments

collapse all

MLPT coefficients, specified as a vector or matrix of MLPT coefficients returned by the mlpt function.

Data Types: double

Sampling instants corresponding to y, specified as a vector or duration array of increasing values returned by the mlpt function.

Data Types: double | duration

Coefficients per resolution level, specified as a vector containing the number of coefficients at each resolution level in coefs. coefsPerLevel is an output argument of the mlpt function.

The elements of coefsPerLevel are organized as follows:

  • coefsPerLevel(1) — Number of approximation coefficients at the coarsest resolution level.

  • coefsPerLevel(i) — Number of detail coefficients at resolution level i, where i = numLevel – i + 2 for i = 2, ..., numLevel + 1. numLevel is the number of resolution levels used to calculate the MLPT. numLevel is inferred from coefsPerLevel: numLevel = length(coefsPerLevel-1).

The smaller the index i, the lower the resolution. The MLPT is two times redundant in the number of detail coefficients, but not in the number of approximation coefficients.

Data Types: double

Scaling function moments, specified as a length(coefs)-by-P matrix, where P is the number of primal moments specified by the MLPT.

Data Types: double

Number of dual vanishing moments in the lifting scheme. The number of dual moments must match the number used by mlpt.

Data Types: double

Output Arguments

collapse all

Reconstructed signal, returned as a vector or matrix, depending on the inputs to the mlpt function.

Data Types: double

Algorithms

Maarten Jansen developed the theoretical foundation of the multiscale local polynomial transform (MLPT) and algorithms for its efficient computation [1][2][3]. The MLPT uses a lifting scheme, wherein a kernel function smooths fine-scale coefficients with a given bandwidth to obtain the coarser resolution coefficients. The mlpt function uses only local polynomial interpolation, but the technique developed by Jansen is more general and admits many other kernel types with adjustable bandwidths [2].

References

[1] Jansen, Maarten. “Multiscale Local Polynomial Smoothing in a Lifted Pyramid for Non-Equispaced Data.” IEEE Transactions on Signal Processing 61, no. 3 (February 2013): 545–55. https://doi.org/10.1109/TSP.2012.2225059.

[2] Jansen, Maarten, and Mohamed Amghar. “Multiscale Local Polynomial Decompositions Using Bandwidths as Scales.” Statistics and Computing 27, no. 5 (September 2017): 1383–99. https://doi.org/10.1007/s11222-016-9692-8.

[3] Jansen, Maarten, and Patrick Oonincx. Second Generation Wavelets and Applications. London ; New York: Springer, 2005.

Version History

Introduced in R2017a