Mercurial > hg > js-dsp-test
diff fft/kissfft/FFT.js @ 40:223f770b5341 kissfft-double tip
Try a double-precision kissfft
author | Chris Cannam |
---|---|
date | Wed, 07 Sep 2016 10:40:32 +0100 |
parents | a47f895d79c0 |
children |
line wrap: on
line diff
--- a/fft/kissfft/FFT.js Wed May 11 09:43:00 2016 +0100 +++ b/fft/kissfft/FFT.js Wed Sep 07 10:40:32 2016 +0100 @@ -35,24 +35,25 @@ this.size = size; this.fcfg = kiss_fft_alloc(size, false); this.icfg = kiss_fft_alloc(size, true); + + var samplesize = 8; + this.inptr = kissFFTModule._malloc(size*samplesize*2 + size*samplesize*2); + this.outptr = this.inptr + size*samplesize*2; - this.inptr = kissFFTModule._malloc(size*8 + size*8); - this.outptr = this.inptr + size*8; - - this.cin = new Float32Array(kissFFTModule.HEAPU8.buffer, this.inptr, size*2); - this.cout = new Float32Array(kissFFTModule.HEAPU8.buffer, this.outptr, size*2); + this.cin = new Float64Array(kissFFTModule.HEAPU8.buffer, this.inptr, size*2); + this.cout = new Float64Array(kissFFTModule.HEAPU8.buffer, this.outptr, size*2); this.forward = function(cin) { this.cin.set(cin); kiss_fft(this.fcfg, this.inptr, this.outptr); - return new Float32Array(kissFFTModule.HEAPU8.buffer, + return new Float64Array(kissFFTModule.HEAPU8.buffer, this.outptr, this.size * 2); } this.inverse = function(cin) { this.cin.set(cpx); kiss_fft(this.icfg, this.inptr, this.outptr); - return new Float32Array(kissFFTModule.HEAPU8.buffer, + return new Float64Array(kissFFTModule.HEAPU8.buffer, this.outptr, this.size * 2); } @@ -69,23 +70,24 @@ 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; + var samplesize = 8; + this.rptr = kissFFTModule._malloc(size*samplesize + (size+2)*samplesize); + this.cptr = this.rptr + size*samplesize; - this.ri = new Float32Array(kissFFTModule.HEAPU8.buffer, this.rptr, size); - this.ci = new Float32Array(kissFFTModule.HEAPU8.buffer, this.cptr, size+2); + this.ri = new Float64Array(kissFFTModule.HEAPU8.buffer, this.rptr, size); + this.ci = new Float64Array(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, + return new Float64Array(kissFFTModule.HEAPU8.buffer, this.cptr, this.size + 2); } this.inverse = function(cpx) { this.ci.set(cpx); kiss_fftri(this.icfg, this.cptr, this.rptr); - return new Float32Array(kissFFTModule.HEAPU8.buffer, + return new Float64Array(kissFFTModule.HEAPU8.buffer, this.rptr, this.size); }