# Comparing MODWT and MODWTMRA

This example demonstrates the differences between the MODWT and MODWTMRA. The MODWT partitions a signal's energy across detail coefficients and scaling coefficients. The MODWTMRA projects a signal onto wavelet subspaces and a scaling subspace.

Choose the `sym6` wavelet. Load and plot an electrocardiogram (ECG) signal. The sampling frequency for the ECG signal is 180 hertz. The data are taken from Percival and Walden (2000), p.125 (data originally provided by William Constantine and Per Reinhall, University of Washington).

```load wecg t = (0:numel(wecg)-1)/180; wv = 'sym6'; plot(t,wecg) grid on title(['Signal Length = ',num2str(numel(wecg))]) xlabel('Time (s)') ylabel('Amplitude')``` Take the MODWT of the signal.

`wtecg = modwt(wecg,wv);`

The input data are samples of a function $f\left(x\right)$ evaluated at $N$ time points. The function can be expressed as a linear combination of the scaling function $\varphi \left(x\right)$ and wavelet $\psi \left(x\right)$at varying scales and translations: $f\left(x\right)=\sum _{k=0}^{N-1}{c}_{k}\phantom{\rule{0.16666666666666666em}{0ex}}{2}^{-{J}_{0}/2}\varphi \left({2}^{-{J}_{0}}\phantom{\rule{0.16666666666666666em}{0ex}}x-k\right)+\sum _{j=1}^{{J}_{0}}{f}_{j}\left(x\right),$ where ${f}_{j}\left(x\right)=\sum _{k=0}^{N-1}{d}_{j,k}\phantom{\rule{0.16666666666666666em}{0ex}}{2}^{-j/2}\phantom{\rule{0.16666666666666666em}{0ex}}\psi \left({2}^{-j}x-k\right)$ and ${J}_{0}$ is the number of levels of wavelet decomposition. The first sum is the coarse scale approximation of the signal, and the ${f}_{j}\left(x\right)$ are the details at successive scales. MODWT returns the $N$ coefficients $\left\{{c}_{k}\right\}$and the $\left({J}_{0}×N\right)$ detail coefficients $\left\{{d}_{j,k}\right\}$ of the expansion. Each row in `wtecg` contains the coefficients at a different scale.

When taking the MODWT of a signal of length $N,$ there are $\text{floor}\left({\mathrm{log}}_{2}\left(N\right)\right)$ levels of decomposition by default. Detail coefficients are produced at each level. Scaling coefficients are returned only for the final level. In this example, $N=2048$, ${J}_{0}=\text{floor}\left(\mathrm{log}2\left(2048\right)\right)=11,$ and the number of rows in `wtecg` is ${J}_{0}+1=11+1=12$.

The MODWT partitions the energy across the various scales and scaling coefficients: ${||X||}^{2}=\sum _{j=1}^{{J}_{0}}{||{W}_{j}||}^{2}+{||{V}_{{J}_{0}}||}^{2},$ where $X$ is the input data, ${W}_{j}$ are the detail coefficients at scale $j$, and ${V}_{{J}_{0}}$ are the final-level scaling coefficients.

Compute the energy at each scale, and evaluate their sum.

```energy_by_scales = sum(wtecg.^2,2); Levels = {'D1';'D2';'D3';'D4';'D5';'D6';... 'D7';'D8';'D9';'D10';'D11';'A11'}; energy_table = table(Levels,energy_by_scales); disp(energy_table)```
``` Levels energy_by_scales _______ ________________ {'D1' } 14.063 {'D2' } 20.612 {'D3' } 37.716 {'D4' } 25.123 {'D5' } 17.437 {'D6' } 8.9852 {'D7' } 1.2906 {'D8' } 4.7278 {'D9' } 12.205 {'D10'} 76.428 {'D11'} 76.268 {'A11'} 3.4192 ```
`energy_total = varfun(@sum,energy_table(:,2))`
```energy_total=table sum_energy_by_scales ____________________ 298.28 ```

Confirm the MODWT is energy-preserving by computing the energy of the signal and comparing it with the sum of the energies over all scales.

```energy_ecg = sum(wecg.^2); max(abs(energy_total.sum_energy_by_scales-energy_ecg))```
```ans = 7.4402e-10 ```

Take the MODWTMRA of the signal.

`mraecg = modwtmra(wtecg,wv);`

MODWTMRA returns the projections of the function $f\left(x\right)$ onto the various wavelet subspaces and final scaling space. That is, MODWTMRA returns $\sum _{k=0}^{N-1}{c}_{k}\phantom{\rule{0.16666666666666666em}{0ex}}{2}^{-{J}_{0}/2}\varphi \left({2}^{-{J}_{0}}\phantom{\rule{0.16666666666666666em}{0ex}}x-k\right)$ and the ${J}_{0}$-many $\left\{{f}_{j}\left(x\right)\right\}$evaluated at $N$ time points. Each row in `mraecg` is a projection of $f\left(x\right)$ onto a different subspace. This means the original signal can be recovered by adding all the projections. This is not true in the case of the MODWT. Adding the coefficients in `wtecg` will not recover the original signal.

Choose a time point, add the projections of $f\left(x\right)$ evaluated at that time point, and compare with the original signal.

```time_point = 1000; abs(sum(mraecg(:,time_point))-wecg(time_point))```
```ans = 3.0846e-13 ```

Confirm that, unlike MODWT, MODWTMRA is not an energy-preserving transform.

```energy_ecg = sum(wecg.^2); energy_mra_scales = sum(mraecg.^2,2); energy_mra = sum(energy_mra_scales); max(abs(energy_mra-energy_ecg))```
```ans = 115.7053 ```

The MODWTMRA is a zero-phase filtering of the signal. Features will be time-aligned. Show this by plotting the original signal and one of its projections. To better illustrate the alignment, zoom in.

```plot(t,wecg,'b') hold on plot(t,mraecg(4,:),'-') hold off grid on xlim([4 8]) legend('Signal','Projection','Location','northwest') xlabel('Time (s)') ylabel('Amplitude')``` Make a similar plot using the MODWT coefficients at the same scale. Features will not be time-aligned. The MODWT is not a zero-phase filtering of the input.

```plot(t,wecg,'b') hold on plot(t,wtecg(4,:),'-') hold off grid on xlim([4 8]) legend('Signal','Coefficients','Location','northwest') xlabel('Time (s)') ylabel('Amplitude')``` Percival, D. B., and A. T. Walden. Wavelet Methods for Time Series Analysis. Cambridge, UK: Cambridge University Press, 2000.