annotate fft/cross/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 a901eeeabf3b
children
rev   line source
Chris@7 1 "use strict";
Chris@7 2
Chris@8 3 var crossModule = CrossModule({});
Chris@8 4
Chris@8 5 var fftCross = crossModule.cwrap(
Chris@7 6 'fftCross', 'void', ['number', 'number', 'number',
Chris@7 7 'number', 'number', 'number' ]
Chris@7 8 );
Chris@7 9
Chris@7 10 function FFTCross(size) {
Chris@7 11 this.size = size;
Chris@7 12 this.n = size * 8;
Chris@8 13 this.ptr = crossModule._malloc(this.n * 4);
Chris@8 14 this.ri = new Uint8Array(crossModule.HEAPU8.buffer, this.ptr, this.n);
Chris@8 15 this.ii = new Uint8Array(crossModule.HEAPU8.buffer, this.ptr + this.n, this.n);
Chris@7 16 this.transform = function(real, imag, inverse) {
Chris@7 17 var ptr = this.ptr;
Chris@7 18 var n = this.n;
Chris@7 19 this.ri.set(new Uint8Array(real.buffer));
Chris@7 20 this.ii.set(new Uint8Array(imag.buffer));
Chris@7 21 fftCross(this.size, inverse,
Chris@7 22 ptr, ptr + n, ptr + n * 2, ptr + n * 3);
Chris@8 23 var ro = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 2, this.size);
Chris@8 24 var io = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 3, this.size);
Chris@21 25 return { real: ro, imag: io };
Chris@7 26 }
Chris@7 27 this.transformReal = function(real, inverse) {
Chris@7 28 var ptr = this.ptr;
Chris@7 29 var n = this.n;
Chris@7 30 this.ri.set(new Uint8Array(real.buffer));
Chris@7 31 fftCross(this.size, inverse,
Chris@7 32 ptr, 0, ptr + n * 2, ptr + n * 3);
Chris@8 33 var ro = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 2, this.size);
Chris@8 34 var io = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 3, this.size);
Chris@21 35 return { real: ro, imag: io };
Chris@7 36 }
Chris@19 37 this.dispose = function() {
Chris@8 38 crossModule._free(this.ptr);
Chris@7 39 }
Chris@7 40 }
Chris@7 41