fourier-transform  
Minimalistic and efficient FFT implementation for 2
n-size inputs. Includes regular and asm.js versions.

``
js
var ft = require('fourier-transform');
var db = require('decibels');
var frequency = 440;
var size = 1024;
var sampleRate = 44100;
var waveform = new Float32Array(size);
for (var i = 0; i < size; i++) {
waveform[i] = Math.sin(frequency Math.PI 2 * (i / sampleRate));
}
//get normalized magnitudes for frequencies from 0 to 22050 with interval 44100/1024 ≈ 43Hz
var spectrum = ft(waveform);
//convert to decibels
var decibels = spectrum.map((value) => db.fromGain(value))
`
To use asm.js version, require as require('fourier-transform/asm')`. That is ~35% faster.
Thanks
To all the
existing fft packages, without them this one would not be possible. Special thanks to @corbanbrook for the most efficient implementation in
dsp.js. This package is based on
dsp.js RFFT, which is based on
RealFFT.
Contribute
If you find it slow, difficult or broken, please
post an issue. If you have ideas or know-hows for better implementation -
PR’s are welcome.
Related
*
fourier transforms benchmark.
*
ndarray-fft FFT for ndarrays, allowing not-power-of-two inputs.
*
gl-fourier WebGL fourier transform implementations.
*
gl-spectrum render spectrum in 2d/3d canvas.