annotate fft/cross/Crosswrap.js @ 40:223f770b5341 kissfft-double tip

Try a double-precision kissfft
author Chris Cannam
date Wed, 07 Sep 2016 10:40:32 +0100
parents 91d77df352fa
children
rev   line source
Chris@6 1 "use strict";
Chris@5 2
Chris@5 3 document.write("<p>start</p>");
Chris@5 4
Chris@6 5 var fftCross = Module.cwrap(
Chris@5 6 'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ]
Chris@5 7 );
Chris@5 8
Chris@6 9 function FFTCross(size) {
Chris@6 10 this.size = size;
Chris@6 11 this.n = size * 8;
Chris@6 12 this.ptr = Module._malloc(this.n * 4);
Chris@6 13 this.ri = new Uint8Array(Module.HEAPU8.buffer, this.ptr, this.n);
Chris@6 14 this.ii = new Uint8Array(Module.HEAPU8.buffer, this.ptr + this.n, this.n);
Chris@6 15 this.transform = function(real, imag, inverse) {
Chris@6 16 var ptr = this.ptr;
Chris@6 17 var n = this.n;
Chris@6 18 this.ri.set(new Uint8Array(real.buffer));
Chris@6 19 this.ii.set(new Uint8Array(imag.buffer));
Chris@6 20 fftCross(this.size, inverse,
Chris@6 21 ptr, ptr + n, ptr + n * 2, ptr + n * 3);
Chris@6 22 var ro = new Float64Array(Module.HEAPU8.buffer,
Chris@6 23 ptr + n * 2, this.size);
Chris@6 24 var io = new Float64Array(Module.HEAPU8.buffer,
Chris@6 25 ptr + n * 2, this.size);
Chris@6 26 return { real: ro, imag: io };
Chris@6 27 }
Chris@6 28 this.discard = function() {
Chris@6 29 Module._free(this.ptr);
Chris@6 30 }
Chris@6 31 }
Chris@6 32
Chris@6 33 var f = new FFTCross(8);
Chris@6 34 var real = new Float64Array([1,1,1,1,1,1,1,1]);
Chris@6 35 var imag = new Float64Array([0,0,0,0,0,0,0,0]);
Chris@6 36 var out = f.transform(real, imag, false);
Chris@5 37 document.write("output: ");
Chris@5 38 for (var i = 0; i < 8; ++i) {
Chris@6 39 document.write(out.real[i] + "," + out.imag[i] + " ");
Chris@5 40 }
Chris@5 41
Chris@5 42
Chris@5 43 document.write("<p>end</p>");