Main Content

modwt

Maximal overlap discrete wavelet transform

Description

w = modwt(x) returns the maximal overlap discrete wavelet transform (MODWT) of x. x can be a real- or complex-valued vector or matrix. If x is a matrix, modwt operates on the columns of x. modwt computes the wavelet transform down to level floor(log2(length(x))) if x is a vector and floor(log2(size(x,1))) if x is a matrix. By default, modwt uses the Daubechies least-asymmetric wavelet with four vanishing moments ('sym4') and periodic boundary handling.

example

w = modwt(x,wname) uses the orthogonal wavelet, wname, for the MODWT.

example

w = modwt(x,Lo,Hi) uses the scaling filter, Lo, and wavelet filter, Hi, to compute the MODWT. These filters must satisfy the conditions for an orthogonal wavelet. You cannot specify both wname and a filter pair, Lo and Hi.

example

w = modwt(___,lev) computes the MODWT down to the specified level, lev, using any of the arguments from previous syntaxes.

example

w = modwt(___,'reflection') computes the MODWT using reflection boundary handling. Other inputs can be any of the arguments from previous syntaxes. Before computing the wavelet transform, modwt extends the signal symmetrically at the terminal end to twice the signal length. The number of wavelet and scaling coefficients that modwt returns is equal to twice the length of the input signal. By default, the signal is extended periodically.

You must enter the entire character vector 'reflection'. If you added a wavelet named 'reflection' using the wavelet manager, you must rename that wavelet prior to using this option. 'reflection' may be placed in any position in the input argument list after x.

example

w = modwt(___,TimeAlign=alignflag) circularly shifts the wavelet coefficients at all levels (scales) and the scaling coefficients to correct for the delay of the scaling and wavelet filters. Other inputs can be any of the arguments from previous syntaxes.

example

Examples

collapse all

Obtain the MODWT of an electrocardiogram (ECG) signal using the default sym4 wavelet down to the maximum level. The data are taken from Percival & Walden (2000), p.125 (data originally provided by William Constantine and Per Reinhall, University of Washington).

load wecg;
wtecg = modwt(wecg);
whos wtecg
  Name        Size               Bytes  Class     Attributes

  wtecg      12x2048            196608  double              

The first eleven rows of wtecg are the wavelet coefficients for scales 21 to 211. The final row contains the scaling coefficients at scale 211. Plot the detail (wavelet) coefficients for scale 23.

plot(wtecg(3,:))
title('Level 3 Wavelet Coefficients')

Figure contains an axes object. The axes object with title Level 3 Wavelet Coefficients contains an object of type line.

Obtain the MODWT of Southern Oscillation Index data with the db2 wavelet down to the maximum level.

load soi;
wsoi = modwt(soi,'db2');

Obtain the MODWT of the Deutsche Mark - U.S. Dollar exchange rate data using the Fejér-Korovkin length 8 scaling and wavelet filters.

load DM_USD
[~,~,Lo,Hi] = wfilters("fk8");
wdmf = modwt(DM_USD,Lo,Hi);

Obtain a second MODWT with the same wavelet, but this time specify the wavelet name.

wdmn = modwt(DM_USD,"fk8");

Confirm the decompositions are equal.

max(abs(wdmf(:)-wdmn(:)))
ans = 
0

Obtain the MODWT of an ECG signal down to scale 24, which corresponds to level four. Use the default sym4 wavelet. The data are taken from Percival & Walden (2000), p.125 (data originally provided by William Constantine and Per Reinhall, University of Washington).

load wecg;
wtecg = modwt(wecg,4);
whos wecg wtecg
  Name          Size              Bytes  Class     Attributes

  wecg       2048x1               16384  double              
  wtecg         5x2048            81920  double              

The row size of wtecg is L+1, where, in this case, the level (L) is 4. The column size matches the number of input samples.

Obtain the MODWT of an ECG signal using reflection boundary handling. Use the default sym4 wavelet and obtain the transform down to level 4. The data are taken from Percival & Walden (2000), p.125 (data originally provided by William Constantine and Per Reinhall, University of Washington).

load wecg;
wtecg = modwt(wecg,4,'reflection');
whos wecg wtecg
  Name          Size               Bytes  Class     Attributes

  wecg       2048x1                16384  double              
  wtecg         5x4096            163840  double              

wtecg has 4096 columns, which is twice the length of the input signal, wecg.

Create a unit impulse signal.

n = 128;
sig = zeros(1,n);
sig(n/2) = 1;
clf
plot(sig)
axis tight
title("Unit Impulse")

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

Obtain the MODWT of the signal down to level 4 using default modwt settings. Obtain a second MODWT of the signal down to level 4 with the coefficients time aligned.

lev = 4;
w = modwt(sig,lev);
wTimeAligned = modwt(sig,lev,TimeAlign=true);

Plot the wavelet and scaling coefficients of the MODWT obtained with default settings. The delays increase with scale because the wavelet and scaling filters used in the MODWT have non-zero phase response.

for k=1:lev+1
    subplot(lev+1,1,k)
    plot(w(k,:))
    axis tight
    if k==1
        title("MODWT Analysis with Delay")
    end
end

Figure contains 5 axes objects. Axes object 1 with title MODWT Analysis with Delay contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 contains an object of type line.

Compare with plots of the time-aligned coefficients.

for k=1:lev+1
    subplot(lev+1,1,k)
    plot(wTimeAligned(k,:))
    axis tight
    if k==1
        title("Time-Aligned MODWT Analysis")
    end
end

Figure contains 5 axes objects. Axes object 1 with title Time-Aligned MODWT Analysis contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 contains an object of type line.

Load the 23 channel EEG data Espiga3 [3]. The channels are arranged column-wise. The data is sampled at 200 Hz.

load Espiga3

Compute the maximal overlap discrete wavelet transform down to the maximum level.

wt = modwt(Espiga3);

Obtain the squared signal energies and compare them against the squared energies obtained from summing the wavelet coefficients over all levels. Use the log-squared energy due to the disproportionately large energy in one component.

sigN2 = vecnorm(Espiga3).^2;
wtN2 = sum(squeeze(vecnorm(wt,2,2).^2));
bar(1:23,log(sigN2))
hold on
scatter(1:23,log(wtN2),'filled','SizeData',100)
alpha(0.75)
legend('Signal Energy','Energy in Wavelet Coefficients', ...
        'Location','NorthWest')
xlabel('Channel')
ylabel('ln(squared energy)')

Figure contains an axes object. The axes object with xlabel Channel, ylabel ln(squared energy) contains 2 objects of type bar, scatter. These objects represent Signal Energy, Energy in Wavelet Coefficients.

Input Arguments

collapse all

Input signal, specified as a vector or matrix. If x is a vector, x must have at least two elements. If x is a matrix, the row dimension of x must be at least 2.

Data Types: single | double
Complex Number Support: Yes

Orthogonal wavelet, specified as a character vector or string scalar. Orthogonal wavelets are designated as type 1 wavelets in the wavelet manager, wavemngr.

Valid built-in orthogonal wavelet families are: Best-localized Daubechies ("bl"), Beylkin ("beyl"), Coiflets ("coif"), Daubechies ("db"), Fejér-Korovkin ("fk"), Haar ("haar"), Han linear-phase moments ("han"), Morris minimum-bandwidth ("mb"), Symlets ("sym"), and Vaidyanathan ("vaid").

For a list of wavelets in each family, see wfilters. You can also use waveinfo with the wavelet family short name. For example, waveinfo("db"). Use wavemngr("type",wn) to determine if the wavelet wn is orthogonal (returns 1). For example, wavemngr("type","db6") returns 1.

Orthogonal wavelet filters, specified as a pair of even-length real-valued vectors. Lo is the scaling (lowpass) filter, and Hi is the wavelet (highpass) filter. The filters must have equal length and satisfy the conditions for an orthogonal wavelet. For more information, see wfilters and isorthwfb. You cannot specify both wname and a filter pair Lo,Hi.

Note

By default, the wfilters function returns two pairs of filters associated with an orthogonal or biorthogonal wavelet you specify. To agree with the usual convention in the implementation of MODWT in numerical packages, when you specify an orthogonal wavelet wname, the modwt function internally uses the second pair of filters returned by wfilters. For example,

wt = modwt(x,"db2");

is equivalent to

[~,~,Lo,Hi] = wfilters("db2"); wt = modwt(x,Lo,Hi);

This convention is different from the one followed by most Wavelet Toolbox™ discrete wavelet transform functions when decomposing a signal. Most functions internally use the first pair of filters.

Data Types: single | double

Transform level, specified as a positive integer less than or equal to floor(log2(N)), where N = length(x) if x is a vector, or N = size(x,1) if x is a matrix. If unspecified, lev defaults to floor(log2(N)).

Time align coefficients logical which determines whether the MODWT circularly shifts the wavelet coefficients at all levels (scales) and the scaling coefficients to correct for the delay of the scaling and wavelet filters, specified as a numeric or logical 1 (true) or 0 (false). Coefficients are shifted using the "center of energy" method of Hess-Nielsen and Wickerhauser [4]. Shifting the coefficients is useful if you want to time align features in the signal with the wavelet coefficients.

If you want to reconstruct the signal with the imodwt function, or obtain a multiresolution analysis using the modwtmra function, do not shift the coefficients. In those cases, the time alignment is performed in obtaining the inverse or multiresolution analysis.

Data Types: logical

Output Arguments

collapse all

MODWT transform of x. w contains the wavelet coefficients and final-level scaling coefficients of x. If x is a vector, w is a lev+1-by-N matrix. If x is a matrix, w is a lev+1-by-N-by-NC array, where NC is the number of columns in x. N is equal to the input signal length unless you specify 'reflection' boundary handling, in which case N is twice the length of the input signal. The kth row of the array, w, contains the wavelet coefficients for scale 2k (wavelet scale 2(k-1)). The final, (lev+1)th, row contains the scaling coefficients for scale 2lev.

Algorithms

The standard algorithm for the MODWT implements the circular convolution directly in the time domain. This implementation of the MODWT performs the circular convolution in the Fourier domain. The wavelet and scaling filter coefficients at level j are computed by taking the inverse discrete Fourier transform (DFT) of a product of DFTs. The DFTs in the product are the signal’s DFT and the DFT of the jth level wavelet or scaling filter.

Let Hk and Gk denote the length N DFTs of the MODWT wavelet and scaling filters, respectively. Let j denote the level and N denote the sample size.

The jth level wavelet filter is defined by

1Nk=0N1Hj,kei2πnk/N

where

Hj,k=H2j1kmodNm=0j2G2mkmodN

The jth level scaling filter is

1Nk=0N1Gj,kei2πnk/N

where

Gj,k=m=0j1G2mkmodN

References

[1] Percival, Donald B., and Andrew T. Walden. Wavelet Methods for Time Series Analysis. Cambridge Series in Statistical and Probabilistic Mathematics. Cambridge ; New York: Cambridge University Press, 2000.

[2] Percival, Donald B., and Harold O. Mofjeld. “Analysis of Subtidal Coastal Sea Level Fluctuations Using Wavelets.” Journal of the American Statistical Association 92, no. 439 (September 1997): 868–80. https://doi.org/10.1080/01621459.1997.10474042.

[3] Mesa, Hector. “Adapted Wavelets for Pattern Detection.” In Progress in Pattern Recognition, Image Analysis and Applications, edited by Alberto Sanfeliu and Manuel Lazo Cortés, 3773:933–44. Berlin, Heidelberg: Springer Berlin Heidelberg, 2005. https://doi.org/10.1007/11578079_96.

[4] Hess-Nielsen, N., and M.V. Wickerhauser. “Wavelets and Time-Frequency Analysis.” Proceedings of the IEEE 84, no. 4 (April 1996): 523–40. https://doi.org/10.1109/5.488698.

Extended Capabilities

Version History

Introduced in R2015b