UNPKG

ziko

Version:

a versatile javaScript framework offering a rich set of UI components, advanced mathematical utilities, reactivity, animations, client side routing and graphics capabilities

55 lines (53 loc) 1.41 kB
import { Complex , complex } from "../complex"; import { PI } from "../const"; import { cos , sin } from "../functions"; const fft=x=>{ const output = []; const N = x.length; if(!(x[0]instanceof Complex))x=x.map((n)=>complex(n,0)); for (let k = 0; k < N; k++) { let re = 0,im=0; for (let n = 0; n < N; n++) { const phi = (2*PI * k * n) / N; re += x[n].a*cos(phi)+x[n].b*sin(phi); im += -x[n].a*sin(phi)+x[n].b*cos(phi); } re = re / N; im = im / N; output[k] = complex(re,im); } return { output, re:output.map(n=>n.a), im:output.map(n=>n.b), z:output.map(n=>n.z), phi:output.map(n=>n.phi) } } const ifft=x=>{ const output = []; const N = x.length; if(!(x[0]instanceof Complex))x=x.map((n)=>complex(n,0)); for (let k = 0; k < N; k++) { let re=0,im=0; for (let n = 0; n < N; n++) { const phi = (2*PI * k * n) / N; re += x[n].a*cos(phi)+x[n].b*sin(phi); im += x[n].a*sin(phi)+x[n].b*cos(phi); } re = re / N; im = im / N; output[k] = complex(re,im); } return { output, re:output.map(n=>n.a), im:output.map(n=>n.b), z:output.map(n=>n.z), phi:output.map(n=>n.phi) }; } export{ fft, ifft }