annotate fft/jsfft/README.md @ 40:223f770b5341 kissfft-double tip

Try a double-precision kissfft
author Chris Cannam
date Wed, 07 Sep 2016 10:40:32 +0100
parents 66f9fd5ac611
children
rev   line source
Chris@25 1 # jsfft
Chris@25 2
Chris@25 3 Small, efficient Javascript FFT implementation for node or the browser.
Chris@25 4
Chris@25 5 ## Usage
Chris@25 6
Chris@25 7 JSFFT ships with a **complex_array** and a **fft** module.
Chris@25 8
Chris@25 9 ```javascript
Chris@25 10 var data = new complex_array.ComplexArray(512)
Chris@25 11 // Use the in-place mapper to populate the data.
Chris@25 12 data.map(function(value, i, n) {
Chris@25 13 value.real = (i > n/3 && i < 2*n/3) ? 1 : 0
Chris@25 14 })
Chris@25 15 ```
Chris@25 16
Chris@25 17 Including the **fft** module attaches FFT methods to ComplexArray. FFT and
Chris@25 18 InvFFT perform in-place transforms on the underlying data:
Chris@25 19
Chris@25 20 ```javascript
Chris@25 21 var frequencies = data.FFT()
Chris@25 22 // Implement a low-pass filter using the in-place mapper.
Chris@25 23 frequencies.map(function(frequency, i, n) {
Chris@25 24 if (i > n/5 && i < 4*n/5) {
Chris@25 25 frequency.real = 0
Chris@25 26 frequency.imag = 0
Chris@25 27 }
Chris@25 28 })
Chris@25 29 ```
Chris@25 30
Chris@25 31 Alternatively, frequency-space filters can be implemented via the frequencyMap:
Chris@25 32
Chris@25 33 ```javascript
Chris@25 34 var filtered = data.frequencyMap(function(frequency, i, n) {
Chris@25 35 if (i > n/5 && i < 4*n/5) {
Chris@25 36 frequency.real = 0
Chris@25 37 frequency.imag = 0
Chris@25 38 }
Chris@25 39 })
Chris@25 40 ```
Chris@25 41
Chris@25 42 ## Other Implementations
Chris@25 43
Chris@25 44 [DSP](https://github.com/corbanbrook/dsp.js) is a full featured Digital Signal
Chris@25 45 Processing library in JS which includes a JS FFT implementation.