/* fft2.c CCMATH mathematics library source code. * * Copyright (C) 2000 Daniel A. Atkinson All rights reserved. * This code may be redistributed under the terms of the GNU library * public license (LGPL). ( See the lgpl.license file for details.) * ------------------------------------------------------------------------ */ #include "complex.h" void fft2(struct complex *ft,int m,int inv) { int n,i,j,k,mm,mp; double s,t,ang,tpi=6.283185307179586; struct complex u,w,*p,*q,*pf; n=1; n<<=m; pf=ft+n-1; for(j=0,p=ft; pre; p->re=q->re; q->re=t; t=p->im; p->im=q->im; q->im=t; } for(mm=n/2; mm<=j ;mm/=2) j-=mm; j+=mm; } if(inv=='d') for(p=ft,s=1./n; p<=pf ;){ p->re*=s; (p++)->im*=s; } for(i=mp=1; i<=m ;++i){ mm=mp; mp*=2; ang=tpi/mp; if(inv=='d') ang= -ang; w.re=cos(ang); w.im=sin(ang); for(j=0; jre*u.re-q->im*u.im; s=q->im*u.re+q->re*u.im; q->re=p->re-t; q->im=p->im-s; p->re+=t; p->im+=s; t=u.re*w.re-u.im*w.im; u.im=u.im*w.re+u.re*w.im; u.re=t; } } } }