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