UNPKG

ml-fft

Version:
2 lines 5.61 kB
!function(r,f){"object"==typeof exports&&"object"==typeof module?module.exports=f():"function"==typeof define&&define.amd?define([],f):"object"==typeof exports?exports.mlFft=f():r.mlFft=f()}(this,function(){return function(r){function f(e){if(t[e])return t[e].exports;var o=t[e]={exports:{},id:e,loaded:!1};return r[e].call(o.exports,o,o.exports,f),o.loaded=!0,o.exports}var t={};return f.m=r,f.c=t,f.p="",f(0)}([function(r,f,t){"use strict";f.FFTUtils=t(1),f.FFT=t(2)},function(r,f,t){"use strict";var e=t(2),o={DEBUG:!1,ifft2DArray:function(r,f,t){var o=new Array(f*t),a=f/2,n=2*(t-1);e.init(a);for(var i={re:new Array(a),im:new Array(a)},v=0;v<t;v++){for(var u=a-1;u>=0;u--)i.re[u]=r[2*u*t+v],i.im[u]=r[(2*u+1)*t+v];e.bt(i.re,i.im);for(var u=a-1;u>=0;u--)o[2*u*t+v]=i.re[u],o[(2*u+1)*t+v]=i.im[u]}var c=new Array(a*n);e.init(n);for(var l={re:new Array(n),im:new Array(n)},s=n*a,u=0;u<f;u+=2){l.re[0]=o[u*t],l.im[0]=o[(u+1)*t];for(var v=1;v<t;v++)l.re[v]=o[u*t+v],l.im[v]=o[(u+1)*t+v],l.re[n-v]=o[u*t+v],l.im[n-v]=-o[(u+1)*t+v];e.bt(l.re,l.im);for(var d=u/2*n,v=n-1;v>=0;v--)c[d+v]=l.re[v]/s}return c},fft2DArray:function(r,f,t,o){var a=(Object.assign({},{inplace:!0}),t/2+1),n=2*f,i=new Array(n*a);e.init(t);for(var v,u,c,l,s,d={re:new Array(t),im:new Array(t)},m={re:new Array(t),im:new Array(t)},y={re:new Array(t),im:new Array(t)},A=0;A<f/2;A++){v=2*A*t,d.re=r.slice(v,v+t),v=(2*A+1)*t,d.im=r.slice(v,v+t),e.fft1d(d.re,d.im),this.reconstructTwoRealFFT(d,m,y),u=4*A*a,c=(4*A+1)*a,l=(4*A+2)*a,s=(4*A+3)*a;for(var w=a-1;w>=0;w--)i[u+w]=m.re[w],i[c+w]=m.im[w],i[l+w]=y.re[w],i[s+w]=y.im[w]}m=null,y=null;var h=new Array(n*a);e.init(f);for(var p={re:new Array(f),im:new Array(f)},b=a-1;b>=0;b--){for(var A=f-1;A>=0;A--)p.re[A]=i[2*A*a+b],p.im[A]=i[(2*A+1)*a+b],isNaN(p.re[A])&&(p.re[A]=0),isNaN(p.im[A])&&(p.im[A]=0);e.fft1d(p.re,p.im);for(var A=f-1;A>=0;A--)h[2*A*a+b]=p.re[A],h[(2*A+1)*a+b]=p.im[A]}return h},reconstructTwoRealFFT:function(r,f,t){var e=r.re.length;f.re[0]=r.re[0],f.im[0]=0,t.re[0]=r.im[0],t.im[0]=0;for(var o,a,n,i,v,u=e/2;u>0;u--)v=e-u,o=.5*(r.re[u]-r.re[v]),a=.5*(r.re[u]+r.re[v]),n=.5*(r.im[u]-r.im[v]),i=.5*(r.im[u]+r.im[v]),f.re[u]=a,f.im[u]=n,f.re[v]=a,f.im[v]=-n,t.re[u]=i,t.im[u]=-o,t.re[v]=i,t.im[v]=o},convolute2DI:function(r,f,t,e){for(var o,a,n=0;n<t/2;n++)for(var i=0;i<e;i++)o=r[2*n*e+i]*f[2*n*e+i]-r[(2*n+1)*e+i]*f[(2*n+1)*e+i],a=r[2*n*e+i]*f[(2*n+1)*e+i]+r[(2*n+1)*e+i]*f[2*n*e+i],r[2*n*e+i]=o,r[(2*n+1)*e+i]=a},convolute:function(r,f,t,e,o){for(var a=new Array(e*t),n=0;n<t*e;n++)a[n]=r[n];a=this.fft2DArray(a,t,e);for(var i=f.length,v=f[0].length,u=new Array(e*t),n=0;n<e*t;n++)u[n]=0;for(var c,l,s=Math.floor((i-1)/2),d=Math.floor((v-1)/2),m=0;m<i;m++){c=(m-s+t)%t;for(var y=0;y<v;y++)l=(y-d+e)%e,u[c*e+l]=f[m][y]}u=this.fft2DArray(u,t,e);var A=2*t,w=e/2+1;return this.convolute2DI(a,u,A,w),this.ifft2DArray(a,A,w)},toRadix2:function(r,f,t){var e,o,a,n,i=t,v=f,u=0,c=0;if(0===t||0!==(t&t-1)){for(i=0;t>>++i!=0;);i=1<<i,c=i-t}if(0===f||0!==(f&f-1)){for(v=0;f>>++v!=0;);v=1<<v,u=(v-f)*i}if(v==f&&i==t)return{data:r,rows:f,cols:t};var l=new Array(v*i),s=Math.floor((v-f)/2)-f,d=Math.floor((i-t)/2)-t;for(e=0;e<v;e++)for(a=e*i,n=(e-s)%f*t,o=0;o<i;o++)l[a+o]=r[n+(o-d)%t];return{data:l,rows:v,cols:i}},crop:function(r,f,t,e,o,a){if(f==e&&t==o)return r;var n,i,v,u,c=(Object.assign({},a),new Array(o*e)),l=Math.floor((f-e)/2),s=Math.floor((t-o)/2);for(v=0;v<e;v++)for(n=v*o,i=(v+l)*t,u=0;u<o;u++)c[n+u]=r[i+(u+s)];return c}};r.exports=o},function(r,f,t){(function(){var r;r=f;var t={release:"0.3.0",date:"2013-03"};r.toString=function(){return"version "+t.release+", released "+t.date};for(var e=0,o=null,a=null,n={init:function(r){if(0===r||0!==(r&r-1))throw new Error("init: radix-2 required");e=r,n._initArray(),n._makeBitReversalTable(),n._makeCosSinTable()},fft1d:function(r,f){n.fft(r,f,1)},ifft1d:function(r,f){var t=1/e;n.fft(r,f,-1);for(var o=0;o<e;o++)r[o]*=t,f[o]*=t},bt1d:function(r,f){n.fft(r,f,-1)},fft2d:function(r,f){for(var t=[],o=[],a=0,i=0;i<e;i++){a=i*e;for(var v=0;v<e;v++)t[v]=r[v+a],o[v]=f[v+a];n.fft1d(t,o);for(var u=0;u<e;u++)r[u+a]=t[u],f[u+a]=o[u]}for(var c=0;c<e;c++){for(var l=0;l<e;l++)a=c+l*e,t[l]=r[a],o[l]=f[a];n.fft1d(t,o);for(var s=0;s<e;s++)a=c+s*e,r[a]=t[s],f[a]=o[s]}},ifft2d:function(r,f){for(var t=[],o=[],a=0,i=0;i<e;i++){a=i*e;for(var v=0;v<e;v++)t[v]=r[v+a],o[v]=f[v+a];n.ifft1d(t,o);for(var u=0;u<e;u++)r[u+a]=t[u],f[u+a]=o[u]}for(var c=0;c<e;c++){for(var l=0;l<e;l++)a=c+l*e,t[l]=r[a],o[l]=f[a];n.ifft1d(t,o);for(var s=0;s<e;s++)a=c+s*e,r[a]=t[s],f[a]=o[s]}},fft:function(r,f,t){for(var n,i,v,u,c,l,s,d,m,y=e>>2,A=0;A<e;A++)u=o[A],A<u&&(c=r[A],r[A]=r[u],r[u]=c,c=f[A],f[A]=f[u],f[u]=c);for(var w=1;w<e;w<<=1){i=0,n=e/(w<<1);for(var h=0;h<w;h++){l=a[i+y],s=t*a[i];for(var p=h;p<e;p+=w<<1)v=p+w,d=l*r[v]+s*f[v],m=l*f[v]-s*r[v],r[v]=r[p]-d,r[p]+=d,f[v]=f[p]-m,f[p]+=m;i+=n}}},_initArray:function(){o="undefined"!=typeof Uint32Array?new Uint32Array(e):[],a="undefined"!=typeof Float64Array?new Float64Array(1.25*e):[]},_paddingZero:function(){},_makeBitReversalTable:function(){var r=0,f=0,t=0;for(o[0]=0;++r<e;){for(t=e>>1;t<=f;)f-=t,t>>=1;f+=t,o[r]=f}},_makeCosSinTable:function(){var r=e>>1,f=e>>2,t=e>>3,o=r+f,n=Math.sin(Math.PI/e),i=2*n*n,v=Math.sqrt(i*(2-i)),u=a[f]=1,c=a[0]=0;n=2*i;for(var l=1;l<t;l++)u-=i,i+=n*u,c+=v,v-=n*c,a[l]=c,a[f-l]=u;0!==t&&(a[t]=Math.sqrt(.5));for(var s=0;s<f;s++)a[r-s]=a[s];for(var d=0;d<o;d++)a[d+r]=-a[d]}},i=["init","fft1d","ifft1d","fft2d","ifft2d"],v=0;v<i.length;v++)r[i[v]]=n[i[v]];return r.bt=n.bt1d,r.fft=n.fft1d,r.ifft=n.ifft1d,r}).call(this)}])}); //# sourceMappingURL=ml-fft.min.js.map