Mercurial > hg > js-dsp-test
comparison fft/cross/Crosswrap.js @ 6:91d77df352fa
Make an object (& put allocation in it)
author | Chris Cannam |
---|---|
date | Mon, 05 Oct 2015 11:54:32 +0100 |
parents | b4ab69bdb4c8 |
children |
comparison
equal
deleted
inserted
replaced
5:b4ab69bdb4c8 | 6:91d77df352fa |
---|---|
1 "use strict"; | |
1 | 2 |
2 document.write("<p>start</p>"); | 3 document.write("<p>start</p>"); |
3 | 4 |
4 fftCross = Module.cwrap( | 5 var fftCross = Module.cwrap( |
5 'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ] | 6 'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ] |
6 ); | 7 ); |
7 | 8 |
8 var data = new Float64Array([1,1,1,1,1,1,1,1]); | 9 function FFTCross(size) { |
9 var n = data.length * data.BYTES_PER_ELEMENT; | 10 this.size = size; |
10 var ptr = Module._malloc(n * 4); | 11 this.n = size * 8; |
11 var h1 = new Uint8Array(Module.HEAPU8.buffer, ptr, n); | 12 this.ptr = Module._malloc(this.n * 4); |
12 var h2 = new Uint8Array(Module.HEAPU8.buffer, ptr + n, n); | 13 this.ri = new Uint8Array(Module.HEAPU8.buffer, this.ptr, this.n); |
13 document.write("ptr = " + ptr + ", h1 = " + h1 + "<br>"); | 14 this.ii = new Uint8Array(Module.HEAPU8.buffer, this.ptr + this.n, this.n); |
14 h1.set(new Uint8Array(data.buffer)); | 15 this.transform = function(real, imag, inverse) { |
15 h2.set(new Uint8Array(data.buffer)); | 16 var ptr = this.ptr; |
16 var result = fftCross(8, 0, ptr, ptr + n, ptr + 2*n, ptr + 3*n); | 17 var n = this.n; |
17 var real = new Float64Array(Module.HEAPU8.buffer, ptr + 2*n, 8); | 18 this.ri.set(new Uint8Array(real.buffer)); |
18 var imag = new Float64Array(Module.HEAPU8.buffer, ptr + 3*n, 8); | 19 this.ii.set(new Uint8Array(imag.buffer)); |
19 document.write("result: " + result + "<br>"); | 20 fftCross(this.size, inverse, |
21 ptr, ptr + n, ptr + n * 2, ptr + n * 3); | |
22 var ro = new Float64Array(Module.HEAPU8.buffer, | |
23 ptr + n * 2, this.size); | |
24 var io = new Float64Array(Module.HEAPU8.buffer, | |
25 ptr + n * 2, this.size); | |
26 return { real: ro, imag: io }; | |
27 } | |
28 this.discard = function() { | |
29 Module._free(this.ptr); | |
30 } | |
31 } | |
32 | |
33 var f = new FFTCross(8); | |
34 var real = new Float64Array([1,1,1,1,1,1,1,1]); | |
35 var imag = new Float64Array([0,0,0,0,0,0,0,0]); | |
36 var out = f.transform(real, imag, false); | |
20 document.write("output: "); | 37 document.write("output: "); |
21 for (var i = 0; i < 8; ++i) { | 38 for (var i = 0; i < 8; ++i) { |
22 document.write(real[i] + "," + imag[i] + " "); | 39 document.write(out.real[i] + "," + out.imag[i] + " "); |
23 } | 40 } |
24 Module._free(ptr); | |
25 | 41 |
26 | 42 |
27 document.write("<p>end</p>"); | 43 document.write("<p>end</p>"); |