## cl-wavelets

2022-07-08

Wavelet transform library

### Upstream URL

### Author

### License

# cl-wavelets

**cl-wavelets** is a library with a set of algorithms related to
various kinds of wavelet transform. Currently they all work with
arrays of type `(simple-array (signed-byte 32) (*))`

(i.e. they are
1D). This makes this library suitable for audio processing and
compression. For more info visit the project page
here.

Currently supported algorithms:

- DWT
- Frequency analysis using PWT.
- Best-basis PWT.

Currently supported wavelets:

- Haar wavelet
- CDF (2,2) wavelet
- CDF (3,1) wavelet
- CDF (4,2) wavelet

### Usage

In examples:

```
(wavelets:dwt (make-array 8
:element-type '(signed-byte 32)
:initial-contents '(0 1 2 3 4 5 7 8))
:wavelet :cdf-2-2
:boundary-style :mirror)
#(2 4 0 3 0 0 0 1)
(wavelets:dwt-inverse *
:wavelet :cdf-2-2
:boundary-style :mirror)
#(0 1 2 3 4 5 7 8)
```

Generally, there are two kinds of functions: with `!`

at the end and without
`!`

. Whose with `!`

are in-place functions, in other words they modify their
first argument. Whose without `!`

do not modify their first argument.

For more info, generate a documentation with **codex** like so:
`codex:document :cl-wavelets :skip-unsocumented t`

.

### Examples package

You can load `cl-wavelets/examples`

system which contains packages to
demonstrate some components of this library. For example, you can
build a spectrogram of an uncompressed WAV file making use of
`wavelets:frequency-domain`

function. To build a spectrogram, try this:

```
(wavelets-spectrogram:spectrogram "/path/to/audio.wav"
"/path/to/spectrogram.jpg")
```

This will produce `spectrogram.jpg`

image with the spectrogram. Note,
that the time axis is the vertical one, with the time going
up-down. This is a spectrogram rotated by 90 degrees clockwise,
actually. Also, the quality of the spectrogram will be much worse
compared to the qualily of a spectrogram obtained via FFT. This is
because the filters used in the process are far from ideal.