## 1-D Decimated Wavelet Transforms

This section takes you through the features of 1-D critically-sampled wavelet analysis using the Wavelet Toolbox™ software.

The toolbox provides these functions for 1-D signal analysis. For more information, see the reference pages.

### Analysis-Decomposition Functions

Function Name

Purpose

`dwt`

Single-level decomposition

`wavedec`

Decomposition

`wmaxlev`

Maximum wavelet decomposition level

### Synthesis-Reconstruction Functions

Function Name

Purpose

`idwt`

Single-level reconstruction

`waverec`

Full reconstruction

`wrcoef`

Selective reconstruction

`upcoef`

Single reconstruction

### Decomposition Structure Utilities

Function Name

Purpose

`detcoef`

Extraction of detail coefficients

`appcoef`

Extraction of approximation coefficients

`upwlev`

Recomposition of decomposition structure

### Denoising and Compression

Function Name

Purpose

`wdenoise`

Automatic wavelet signal denoising (recommended)

`ddencmp`

Provide default values for denoising and compression

`wbmpen`

Penalized threshold for wavelet 1-D or 2-D denoising

`wdcbm`

Thresholds for wavelet 1-D using Birgé-Massart strategy

`wdencmp`

Wavelet denoising and compression

`wthrmngr`

Threshold settings manager

### Apps

App

Purpose

Signal Multiresolution AnalyzerDecompose signals into time-aligned components
Wavelet Signal AnalyzerAnalyze and compress signals using wavelets
Wavelet Signal DenoiserVisualize and denoise time series data

### 1-D Decimated Wavelet Analysis

This example involves a real-world signal — electrical consumption measured over the course of three days. This signal is particularly interesting because of noise introduced when a defect developed in the monitoring equipment as the measurements were being made. Wavelet analysis effectively removes the noise.

Decomposition and Reconstruction

Load the signal and select a portion for wavelet analysis.

```load leleccum s = leleccum(1:3920); l_s = length(s);```

Use the `dwt` function to perform a single-level decomposition of the signal using the `db1` wavelet. This generates the coefficients of the level 1 approximation (`cA1`) and detail (`cD1`).

`[cA1,cD1] = dwt(s,"db1");`

Construct the level 1 approximation and detail (`A1` and `D1`) from the coefficients `cA1` and `cD1`. You can use either the `idwt` function or the `upcoef` function.

```useIDWT = true; if useIDWT A1 = idwt(cA1,[],"db1",l_s); D1 = idwt([],cD1,"db1",l_s); else A1 = upcoef("a",cA1,"db1",1,l_s); D1 = upcoef("d",cD1,"db1",1,l_s); end```

Display the results of the level-one decomposition.

```tiledlayout(1,2) nexttile plot(A1) title("Approximation A1") nexttile plot(D1) title("Detail D1")```

Reconstruct a signal by using the `idwt` function. Compare the reconstruction with the original signal.

```A0 = idwt(cA1,cD1,"db1",l_s); err = max(abs(s-A0))```
```err = 2.2737e-13 ```

Use the `wavedec` function to perform a level 3 decomposition of the signal.

`[C,L] = wavedec(s,3,"db1");`

The coefficients of all the components of a third-level decomposition (that is, the third-level approximation and the first three levels of detail) are returned concatenated into one vector, `C`. Vector `L` gives the lengths of each component.

Use the `appcoef` function to extract the level 3 approximation coefficients from `C`.

`cA3 = appcoef(C,L,"db1",3);`

Use the `detcoef` function to extract the levels 3, 2, and 1 detail coefficients from `C`. The `detcoef` function gives you the option to extract the coefficients at the different levels one at a time.

```extractTogether = true; if extractTogether [cD1,cD2,cD3] = detcoef(C,L,[1,2,3]); else cD3 = detcoef(C,L,3); cD2 = detcoef(C,L,2); cD1 = detcoef(C,L,1); end```

Use the `wrcoef` function to reconstruct the Level 3 approximation and the Level 1, 2, and 3 details.

`A3 = wrcoef("a",C,L,"db1",3);`

Reconstruct the details at levels 1, 2, and 3.

```D1 = wrcoef("d",C,L,"db1",1); D2 = wrcoef("d",C,L,"db1",2); D3 = wrcoef("d",C,L,"db1",3);```

Display the results of the level 3 decomposition.

```figure tiledlayout(2,2) nexttile plot(A3) title("Approximation A3") nexttile plot(D1) title("Detail D1") nexttile plot(D2) title("Detail D2") nexttile plot(D3) title("Detail D3")```

Reconstruct the original signal from the Level 3 decomposition.

```A0 = waverec(C,L,"db1"); err = max(abs(s-A0)) ```
```err = 4.5475e-13 ```

Crude Denoising

Using wavelets to remove noise from a signal requires identifying which component or components contain the noise, and then reconstructing the signal without those components.

In this example, we note that successive approximations become less and less noisy as more and more high-frequency information is filtered out of the signal. The level 3 approximation, `A3`, is quite clean as a comparison between it and the original signal.

Compare the approximation to the original signal.

```figure tiledlayout(2,1) nexttile plot(s) title("Original") axis off nexttile plot(A3) title("Level 3 Approximation") axis off```

Of course, in discarding all the high-frequency information, we've also lost many of the original signal's sharpest features.

Optimal denoising requires a more subtle approach called thresholding. This involves discarding only the portion of the details that exceeds a certain limit.

Denoise by Thresholding

Let's look again at the details of our level 3 analysis. Display the details `D1`, `D2`, and `D3`.

```figure tiledlayout(3,1) nexttile plot(D1) title("Detail Level 1") axis off nexttile plot(D2) title("Detail Level 2") axis off nexttile plot(D3) title("Detail Level 3") axis off```

Most of the noise occurs in the latter part of the signal, where the details show their greatest activity. What if we limited the strength of the details by restricting their maximum values? This would have the effect of cutting back the noise while leaving the details unaffected through most of their durations. But there's a better way.

Note that `cD1`, `cD2`, and `cD3` are vectors, so we could directly manipulate each vector, setting each element to some fraction of the vectors' peak or average value. Then we could reconstruct new detail signals `D1`, `D2`, and `D3` from the thresholded coefficients.

To denoise a signal, use the `wdenoise` function. The `wdenoise` function is recommended for denoising 1-D signals. The function provides a simple interface to a variety of denoising methods. Default parameters are provided are automatically provided for quick and easy use.

Instead of using all the default function values, denoise the signal using the `db1` wavelet and a wavelet decomposition down to level 3.

`clean = wdenoise(s,3,Wavelet="db1");`

Display the original and denoised signals. Notice how we have removed the noise without compromising the sharp detail of the original signal. This is a strength of wavelet analysis.

```figure tiledlayout(2,1) nexttile plot(s(2000:3920)) title("Original") nexttile plot(clean(2000:3920)) title("Denoised")```

We have plotted here only the noisy latter part of the signal. Notice how we have removed the noise without compromising the sharp detail of the original signal. This is a strength of wavelet analysis.

You can also use the Wavelet Signal Denoiser app to denoise 1-D signals.