Chris@19
|
1 "use strict";
|
Chris@19
|
2
|
Chris@19
|
3 var fftwModule = FFTWModule({});
|
Chris@19
|
4
|
Chris@19
|
5 var fftwf_plan_dft_r2c_1d = fftwModule.cwrap(
|
Chris@19
|
6 'fftwf_plan_dft_r2c_1d', 'number', ['number', 'number', 'number', 'number']
|
Chris@19
|
7 );
|
Chris@19
|
8
|
Chris@19
|
9 var fftwf_plan_dft_c2r_1d = fftwModule.cwrap(
|
Chris@19
|
10 'fftwf_plan_dft_c2r_1d', 'number', ['number', 'number', 'number', 'number']
|
Chris@19
|
11 );
|
Chris@19
|
12
|
Chris@19
|
13 var fftwf_execute = fftwModule.cwrap(
|
Chris@19
|
14 'fftwf_execute', 'void', ['number']
|
Chris@19
|
15 );
|
Chris@19
|
16
|
Chris@19
|
17 var fftwf_destroy_plan = fftwModule.cwrap(
|
Chris@19
|
18 'fftwf_destroy_plan', 'void', ['number']
|
Chris@19
|
19 );
|
Chris@19
|
20
|
Chris@19
|
21 function FFTW(size) {
|
Chris@19
|
22
|
Chris@19
|
23 this.size = size;
|
Chris@19
|
24 this.rptr = fftwModule._malloc(size*4 + (size+2)*4);
|
Chris@19
|
25 this.cptr = this.rptr + size*4;
|
Chris@19
|
26 this.r = new Float32Array(fftwModule.HEAPU8.buffer, this.rptr, size);
|
Chris@19
|
27 this.c = new Float32Array(fftwModule.HEAPU8.buffer, this.cptr, size+2);
|
Chris@19
|
28
|
Chris@19
|
29 var FFTW_ESTIMATE = (1 << 6);
|
Chris@19
|
30 this.fplan = fftwf_plan_dft_r2c_1d(size, this.rptr, this.cptr, FFTW_ESTIMATE);
|
Chris@19
|
31 this.iplan = fftwf_plan_dft_c2r_1d(size, this.cptr, this.rptr, FFTW_ESTIMATE);
|
Chris@19
|
32
|
Chris@19
|
33 this.forward = function(real) {
|
Chris@19
|
34 this.r.set(real);
|
Chris@19
|
35 fftwf_execute(this.fplan);
|
Chris@21
|
36 return new Float32Array(fftwModule.HEAPU8.buffer, this.cptr, this.size+2);
|
Chris@19
|
37 }
|
Chris@19
|
38
|
Chris@19
|
39 this.inverse = function(cpx) {
|
Chris@19
|
40 this.c.set(cpx);
|
Chris@19
|
41 fftwf_execute(this.iplan);
|
Chris@21
|
42 return new Float32Array(fftwModule.HEAPU8.buffer, this.rptr, this.size);
|
Chris@19
|
43 }
|
Chris@19
|
44
|
Chris@19
|
45 this.dispose = function() {
|
Chris@19
|
46 fftwf_destroy_plan(this.fplan);
|
Chris@19
|
47 fftwf_destroy_plan(this.iplan);
|
Chris@19
|
48 fftwModule._free(this.rptr);
|
Chris@19
|
49 }
|
Chris@19
|
50 }
|
Chris@19
|
51
|