drom / fourier

:wavy_dash: Fourier transform in JavaScript
MIT License
78 stars 10 forks source link
fft fourier hacktoberfest

Fourier

NPM version Linux MacOS Windows

Pure JavaScript library discrete transforms, including Discrete Fourier Transform (DFT); It's fast, inverse, and special forms.

Use

Node.js

npm i fourier
var fourier = require('fourier');

Browser

<script src="https://cdn.jsdelivr.net/npm/fourier/fourier.min.js"></script>

Functions

FFT custom

Fast Fourier transform (FFT). Cooley–Tukey algorithm. in-place. Radix-2, Decimation in Time (DIT).

One function for each data type, vector size and coding style

fourier.custom.fft_<type>_<size>_<style>

example:

// Init
var stdlib = {
    Math: Math,
    Float32Array: Float32Array,
    Float64Array: Float64Array
};

// Create heap for the fft data and twiddle factors
var heap = fourier.custom.alloc(65536, 3);

// Create instance of FFT runner
var fft_f64_65536_asm_runner = fourier.custom.fft_f64_65536_asm(stdlib, null, heap);

// Init twiddle factors
fft_f64_65536_asm_runner.init();

// Run transformations
fft_f64_65536_asm_runner.transform();

Other

fourier.dft(realArray, imagArray); // ⇒ [realArray, imagArray]

$$\large Xk=\sum{n=0}^{N-1}x_n\cdot e^{-i 2 \pi k n/N}$$

fourier.idft(realArray, imagArray); // ⇒ [realArray, imagArray]

$$\large xn=\frac{1}{N}\sum{k=0}^{N-1}X_k\cdot e^{i 2 \pi kn/N}$$

Testing

npm test

License

MIT LICENSE.