Chris@25: # jsfft Chris@25: Chris@25: Small, efficient Javascript FFT implementation for node or the browser. Chris@25: Chris@25: ## Usage Chris@25: Chris@25: JSFFT ships with a **complex_array** and a **fft** module. Chris@25: Chris@25: ```javascript Chris@25: var data = new complex_array.ComplexArray(512) Chris@25: // Use the in-place mapper to populate the data. Chris@25: data.map(function(value, i, n) { Chris@25: value.real = (i > n/3 && i < 2*n/3) ? 1 : 0 Chris@25: }) Chris@25: ``` Chris@25: Chris@25: Including the **fft** module attaches FFT methods to ComplexArray. FFT and Chris@25: InvFFT perform in-place transforms on the underlying data: Chris@25: Chris@25: ```javascript Chris@25: var frequencies = data.FFT() Chris@25: // Implement a low-pass filter using the in-place mapper. Chris@25: frequencies.map(function(frequency, i, n) { Chris@25: if (i > n/5 && i < 4*n/5) { Chris@25: frequency.real = 0 Chris@25: frequency.imag = 0 Chris@25: } Chris@25: }) Chris@25: ``` Chris@25: Chris@25: Alternatively, frequency-space filters can be implemented via the frequencyMap: Chris@25: Chris@25: ```javascript Chris@25: var filtered = data.frequencyMap(function(frequency, i, n) { Chris@25: if (i > n/5 && i < 4*n/5) { Chris@25: frequency.real = 0 Chris@25: frequency.imag = 0 Chris@25: } Chris@25: }) Chris@25: ``` Chris@25: Chris@25: ## Other Implementations Chris@25: Chris@25: [DSP](https://github.com/corbanbrook/dsp.js) is a full featured Digital Signal Chris@25: Processing library in JS which includes a JS FFT implementation.