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