Mercurial > hg > js-dsp-test
view fft/kissfft/FFT.js @ 19:26056e866c29
Add FFTW to comparison table
author | Chris Cannam |
---|---|
date | Tue, 06 Oct 2015 13:08:39 +0100 |
parents | c6577c4b3780 |
children | a901eeeabf3b |
line wrap: on
line source
"use strict"; var kissFFTModule = KissFFTModule({}); var kiss_fftr_alloc = kissFFTModule.cwrap( 'kiss_fftr_alloc', 'number', ['number', 'number', 'number', 'number' ] ); var kiss_fftr = kissFFTModule.cwrap( 'kiss_fftr', 'void', ['number', 'number', 'number' ] ); var kiss_fftri = kissFFTModule.cwrap( 'kiss_fftri', 'void', ['number', 'number', 'number' ] ); var kiss_fftr_free = kissFFTModule.cwrap( 'kiss_fftr_free', 'void', ['number'] ); function KissFFT(size) { this.size = size; this.fcfg = kiss_fftr_alloc(size, false); this.icfg = kiss_fftr_alloc(size, true); this.rptr = kissFFTModule._malloc(size*4 + (size+2)*4); this.cptr = this.rptr + size*4; this.ri = new Float32Array(kissFFTModule.HEAPU8.buffer, this.rptr, size); this.ci = new Float32Array(kissFFTModule.HEAPU8.buffer, this.cptr, size+2); this.forward = function(real) { this.ri.set(real); kiss_fftr(this.fcfg, this.rptr, this.cptr); return (new Float32Array (kissFFTModule.HEAPU8.buffer, this.cptr, this.size + 2)) .slice(0); } this.inverse = function(cpx) { this.ci.set(cpx); kiss_fftri(this.icfg, this.cptr, this.rptr); return (new Float32Array (kissFFTModule.HEAPU8.buffer, this.rptr, this.size)) .slice(0); } this.dispose = function() { kissFFTModule._free(this.rptr); kiss_fftr_free(this.fcfg); kiss_fftr_free(this.icfg); } }