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);
     }