www.pudn.com > fft_iccavr.rar > fft.c
/*data是输入和输出(复数),nn是FFT的点数 isign指示FFT变换方向1为正变换, -1为反变换,程序出自《Numerical Recipes in C》 */ #include#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr void four1(float data[], unsigned long nn, int isign) { unsigned long n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta; float tempr,tempi; n=nn << 1; //nn乘以2赋给n,作为取样点数 j=1; for (i=1;i i) { SWAP(data[j],data[i]); SWAP(data[j+1],data[i+1]); } m=n >> 1; //将n除以2的值赋给m while (m >= 2 && j > m) { j -= m; m >>= 1; //将m除以2的值赋给m } j += m; } mmax=2; while (n > mmax) { istep=mmax << 1; theta=isign*(6.28318530717959/mmax); wtemp=sin(0.5*theta); wpr = -2.0*wtemp*wtemp; wpi=sin(theta); wr=1.0; wi=0.0; for (m=1;m