This library is no longer actively maintained. This means that no new functionality or documentation is added.
A Discrete Wavelet Transform (DWT) library for the web.
This library is well tested. Still, it may contain some errors. Therefore it is recommended to double check the results with another library such as PyWavelets. If you find any errors, please let me know by opening an issue or a pull request.
- Run
npm install discrete-wavelets
- Add an import to the npm package
import wt from 'discrete-wavelets';
- Then you can use the library in your code.
- Put the following script tag
<script src="https://cdn.jsdelivr.net/npm/discrete-wavelets@5/dist/discrete-wavelets.umd.min.js"></script>
in the head of your HTML file. - Then you can use the library in your code.
The library uses the following types:
- PaddingMode: Signal extension modes.
- Wavelets: Wavelet bases.
The following values for PaddingMode
are supported at the moment:
Name | Value | Description |
---|---|---|
Zero Padding | 'zero' |
Adding zeros. |
Constant Padding | 'constant' |
Replication of border values. |
Symmetric Padding | 'symmetric' |
Mirroring of samples. |
Reflect Padding | 'reflect' |
Reflecting of samples. |
Periodic Padding | 'periodic' |
Treating signal as a periodic one. |
Smooth Padding | 'smooth' |
Signal extended as a straight line. |
Antisymmetric Padding | 'antisymmetric' |
Mirroring and negation of samples. |
You can get a list of the supported signal extension modes:
console.log(wt.Modes.modes);
// expected output: Array ['zero', 'constant', 'symmetric', 'periodic', 'smooth', 'reflect', 'antisymmetric']
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' |
The library offers the following functions:
- Discrete Wavelet Transform (DWT)
- Inverse Discrete Wavelet Transform (IDWT)
- Other
Single level Discrete Wavelet Transform.
data
(number[]
): Input data.wavelet
(Wavelet
): Wavelet to use.mode
(PaddingMode
): Signal extension mode. Defaults to'symmetric'
.
coeffs
(number[][]
): Approximation and detail coefficients as result of the transform.
var coeffs = wt.dwt([1, 2, 3, 4], "haar");
console.log(coeffs);
// expected output: Array [[2.1213203435596425, 4.9497474683058326], [-0.7071067811865475, -0.7071067811865475]]
1D wavelet decomposition. Transforms data by calculating coefficients from input data.
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.
coeffs
(number[][]
): Coefficients as result of the transform.
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]]
Single level inverse Discrete Wavelet Transform.
approx
(number[]
): Approximation coefficients. Ifundefined
, it will be set to an array of zeros with length equal to the detail coefficients.detail
(number[]
): Detail coefficients. Ifundefined
, it will be set to an array of zeros with length equal to the approximation coefficients.wavelet
(Wavelet
): Wavelet to use.
rec
(number[]
): Approximation coefficients of previous level of transform.
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]
1D wavelet reconstruction. Inverses a transform by calculating input data from coefficients.
coeffs
(number[][]
): Coefficients as result of a transform.wavelet
(Wavelet
): Wavelet to use.
data
(number[]
): Input data as result of the inverse transform.
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]
Calculates the energy as sum of squares of an array of data or coefficients.
values
(number[] | number[][]
): Array of data or coefficients.
energy
(number
): Energy of values as the sum of squares.
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
Determines the maximum level of useful decomposition.
dataLength
(number
): Length of input data.wavelet
(Wavelet
): Wavelet to use.
maxLevel
(number
): Maximum useful level of decomposition.
var maxLevel = wt.maxLevel(4, "haar");
console.log(maxLevel);
// expected output: 2
var maxLevel = wt.maxLevel(1024, "haar");
console.log(maxLevel);
// expected output: 10
Extends a signal with a given padding mode.
data
(number[]
): Input data.padWidths
([number, number]
): Widths of padding at front and back.mode
(PaddingMode
): Signal extension mode.
pad
(number[]
): Data with padding.
var pad = wt.pad([42, 51], [2, 1], "zero");
console.log(pad);
// expected output: Array [0, 0, 42, 51, 0]
npm install
: Install dependenciesnpm test
: Run test suitenpm start
: Runnpm run build
in watch modenpm run test:watch
: Run test suite in interactive watch modenpm run test:prod
: Run linting and generate coveragenpm run build
: Generate bundles and typings, create docsnpm run lint
: Lints code