A Discrete Wavelet Transform (DWT) library for the web.
npm install discrete-wavelets    
npm install discrete-wavelets
import wt from 'discrete-wavelets';
in the head of your HTML file.
PaddingMode are supported at the moment:
'zero' | Adding zeros.
'constant' | Replication of border values.
'symmetric' | Mirroring of samples.
'reflect' | Reflecting of samples.
'periodic' | Treating signal as a periodic one.
'smooth' | Signal extended as a straight line.
'antisymmetric' | Mirroring and negation of samples.
javascript
console.log(wt.Modes.modes);
// expected output: Array ['zero', 'constant', 'symmetric', 'periodic', 'smooth', 'reflect', 'antisymmetric']
`
$3
The following Wavelet types are supported at the moment:
Wavelet | Aliases
------------------------------------------------------------------|---------------------------
Daubechies 1 / Haar | 'db1', 'D2', 'haar'
Daubechies 2 | 'db2', 'D4'
Daubechies 3 | 'db3', 'D6'
Daubechies 4 | 'db4', 'D8'
Daubechies 5 | 'db5', 'D10'
Daubechies 6 | 'db6', 'D12'
Daubechies 7 | 'db7', 'D14'
Daubechies 8 | 'db8', 'D16'
Daubechies 9 | 'db9', 'D18'
Daubechies 10 | 'db10', 'D20'
API
The library offers the following functions:
- Discrete Wavelet Transform (DWT)
- dwt: Single level Discrete Wavelet Transform.
- wavedec: 1D wavelet decomposition. Transforms data by calculating coefficients from input data.
- Inverse Discrete Wavelet Transform (IDWT)
- idwt: Single level inverse Discrete Wavelet Transform.
- waverec: 1D wavelet reconstruction. Inverses a transform by calculating input data from coefficients.
- Other
- energy: Calculates the energy as sum of squares of an array of data or coefficients.
- maxLevel: Determines the maximum level of useful decomposition.
- pad: Extends a signal with a given padding mode.
$3
Single level Discrete Wavelet Transform.
#### Arguments
- data (number[]): Input data.
- wavelet (Wavelet): Wavelet to use.
- mode (PaddingMode): Signal extension mode. Defaults to 'symmetric'.
#### Return
coeffs (number[][]): Approximation and detail coefficients as result of the transform.
#### Example
`javascript
var coeffs = wt.dwt([1, 2, 3, 4], 'haar');
console.log(coeffs);
// expected output: Array [[2.1213203435596425, 4.9497474683058326], [-0.7071067811865475, -0.7071067811865475]]
`
$3
1D wavelet decomposition. Transforms data by calculating coefficients from input data.
#### Arguments
- data (number[]): Input data.
- wavelet (Wavelet): Wavelet to use.
- mode (PaddingMode): Signal extension mode. Defaults to 'symmetric'.
- level (number): Decomposition level. Defaults to level calculated by maxLevel function.
#### Return
coeffs (number[][]): Coefficients as result of the transform.
#### Example
`javascript
var coeffs = wt.wavedec([1, 2, 3, 4], 'haar');
console.log(coeffs);
// expected output: Array [[4.999999999999999], [-1.9999999999999993], [-0.7071067811865475, -0.7071067811865475]]
`
Be aware that due to floating point imprecision the result diverges slightly from the analytical solution [[5], [-2], [-0.7071067811865475, -0.7071067811865475]]
$3
Single level inverse Discrete Wavelet Transform.
#### Arguments
- approx (number[]): Approximation coefficients. If undefined, it will be set to an array of zeros with length equal to the detail coefficients.
- detail (number[]): Detail coefficients. If undefined, it will be set to an array of zeros with length equal to the approximation coefficients.
- wavelet (Wavelet): Wavelet to use.
#### Return
rec (number[]): Approximation coefficients of previous level of transform.
#### Example
`javascript
var rec = wt.idwt(
[(1 + 2) / Math.SQRT2, (3 + 4) / Math.SQRT2],
[(1 - 2) / Math.SQRT2, (3 - 4) / Math.SQRT2],
'haar'
);
console.log(rec);
// expected output: Array [0.9999999999999999, 1.9999999999999996, 2.9999999999999996, 3.9999999999999996]
`
Be aware that due to floating point imprecision the result diverges slightly from the analytical solution [1, 2, 3, 4]
$3
1D wavelet reconstruction. Inverses a transform by calculating input data from coefficients.
#### Arguments
- coeffs (number[][]): Coefficients as result of a transform.
- wavelet (Wavelet): Wavelet to use.
#### Return
data (number[]): Input data as result of the inverse transform.
#### Example
`javascript
var data = wt.waverec(
[[5], [-2], [-1 / Math.SQRT2, -1 / Math.SQRT2]],
'haar'
);
console.log(data);
// expected output: Array [0.9999999999999999, 1.9999999999999996, 2.999999999999999, 3.999999999999999]
`
Be aware that due to floating point imprecision the result diverges slightly from the analytical solution [1, 2, 3, 4]
$3
Calculates the energy as sum of squares of an array of data or coefficients.
#### Argument
- values (number[] | number[][]): Array of data or coefficients.
#### Return
energy (number): Energy of values as the sum of squares.
#### Examples
`javascript
console.log(
wt.energy([-1, 2, 6, 1])
);
// expected output: 42
console.log(
wt.energy([[5], [-2], [-1 / Math.SQRT2, -1 / Math.SQRT2]])
);
// expected output: 30
`
$3
Determines the maximum level of useful decomposition.
#### Arguments
- dataLength (number): Length of input data.
- wavelet (Wavelet): Wavelet to use.
#### Return
maxLevel (number): Maximum useful level of decomposition.
#### Examples
`javascript
var maxLevel = wt.maxLevel(4, 'haar');
console.log(maxLevel);
// expected output: 2
`
`javascript
var maxLevel = wt.maxLevel(1024, 'haar');
console.log(maxLevel);
// expected output: 10
`
$3
Extends a signal with a given padding mode.
#### Arguments
- data (number[]): Input data.
- padWidths ([number, number]): Widths of padding at front and back.
- mode (PaddingMode): Signal extension mode.
#### Return
pad (number[]): Data with padding.
#### Example
`javascript
var pad = wt.pad([42, 51], [2, 1], 'zero');
console.log(pad);
// expected output: Array [0, 0, 42, 51, 0]
`
NPM scripts
- npm install: Install dependencies
- npm test: Run test suite
- npm start: Run npm run build in watch mode
- npm run test:watch: Run test suite in interactive watch mode
- npm run test:prod: Run linting and generate coverage
- npm run build: Generate bundles and typings, create docs
- npm run lint: Lints code
This library in action
An exemplary application with code using this library can be found at https://symmetronic.github.io/covid-19-dwt-analysis/
Related project
Symmetronic Scaleogram is a web component that allows to easily create a scaleogram visualization from wavelet coefficients.
Contributing
Pull requests are welcome! Please include new tests for your code and make sure that all tests succeed running npm test`.