Calculating wavelet coefficients at every possible scale is a fair amount of work, and it generates an awful lot of data. What if we choose only a subset of scales and positions at which to make our calculations?

It turns out, rather remarkably, that if we choose scales and positions based on powers of
two — so-called *dyadic*
scales and positions — then our analysis will be much more efficient and just as
accurate. We obtain such an analysis from the *discrete wavelet transform*
(DWT). For more information on DWT, see Algorithms in the
*Wavelet Toolbox User's Guide*.

An efficient way to implement this scheme using filters was developed in 1988 by Mallat (see [Mal89] in References). The Mallat algorithm is in fact a classical
scheme known in the signal processing community as a *two-channel subband coder
*(see page 1 of the book *Wavelets and Filter Banks**,
by Strang and Nguyen *[StrN96]*).*

This very practical filtering algorithm yields a *fast wavelet
transform* — a box into which a signal passes, and out of which wavelet
coefficients quickly emerge. Let's examine this in more depth.

For many signals, the low-frequency content is the most important part. It is what gives the signal its identity. The high-frequency content, on the other hand, imparts flavor or nuance. Consider the human voice. If you remove the high-frequency components, the voice sounds different, but you can still tell what's being said. However, if you remove enough of the low-frequency components, you hear gibberish.

In wavelet analysis, we often speak of *approximations* and
*details*. The approximations are the high-scale, low-frequency
components of the signal. The details are the low-scale, high-frequency components.

The filtering process, at its most basic level, looks like this.

The original signal, `S`

, passes through two complementary filters and
emerges as two signals.

Unfortunately, if we actually perform this operation on a real digital signal, we wind up with twice as much data as we started with. Suppose, for instance, that the original signal S consists of 1000 samples of data. Then the resulting signals will each have 1000 samples, for a total of 2000.

These signals A and D are interesting, but we get 2000 values instead of the 1000 we
had. There exists a more subtle way to perform the decomposition using wavelets. By looking
carefully at the computation, we may keep only one point out of two in each of the two
2000-length samples to get the complete information. This is the notion of
*downsampling*. We produce two sequences called `cA`

and `cD`

.

The process on the right, which includes downsampling, produces DWT coefficients.

To gain a better appreciation of this process, let's perform a one-stage discrete wavelet transform of a signal. Our signal will be a pure sinusoid with high-frequency noise added to it.

Here is our schematic diagram with real signals inserted into it.

The MATLAB^{®} code needed to generate `s`

, `cD`

, and
`cA`

is

s = sin(20.*linspace(0,pi,1000)) + 0.5.*rand(1,1000); [cA,cD] = dwt(s,'db2');

where `db2`

is the name of the wavelet we want to use for the
analysis.

Notice that the detail coefficients `cD`

are small and consist mainly
of a high-frequency noise, while the approximation coefficients `cA`

contain much less noise than does the original signal.

[length(cA) length(cD)] ans = 501 501

You may observe that the actual lengths of the detail and approximation coefficient
vectors are slightly *more* than half the length of the original signal.
This has to do with the filtering process, which is implemented by convolving the signal
with a filter. The convolution “smears” the signal, introducing several extra
samples into the result.

The decomposition process can be iterated, with successive approximations being
decomposed in turn, so that one signal is broken down into many lower resolution components.
This is called the *wavelet decomposition tree*.

Looking at a signal's wavelet decomposition tree can yield valuable information.

Since the analysis process is iterative, in theory it can be continued indefinitely.
In reality, the decomposition can proceed only until the individual details consist of a
single sample or pixel. In practice, you'll select a suitable number of levels based on
the nature of the signal, or on a suitable criterion such as *entropy*
(see Choosing the Optimal Decomposition in the *Wavelet Toolbox User's
Guide*).