Minimalistic and efficient FFT implementation

Downloads in past


1.1.27 years ago8 years agoMinified + gzip package size for fourier-transform in KB


fourier-transform stable Build Status
Minimalistic and efficient FFT implementation for 2n-size inputs. Includes regular and asm.js versions. npm install fourier-transform ```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 = => db.fromGain(value)) ``` To use asm.js version, require as require('fourier-transform/asm'). That is ~35% faster.


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.


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.


  • ndarray-fft FFT for ndarrays, allowing not-power-of-two inputs.
  • gl-fourier WebGL fourier transform implementations.