annotate fft/fftw/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@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