FFT以及IFFT的实现

继续做图像工程作业,还没搞懂fft及ifft的原理,先找点源码,等做完再贴出来,呵呵
 
#define   SWAP(a,b)   tempr=(a);(a)=(b);(b)=tempr  
  float   data[32];  
  void   four(int   nn,int   isign)  
  {  
    unsigned   long   n,mmax,m,j,istep,i;  
    double   wtemp,wr,wpr,wpi,wi,theta;    
    float   tempr,tempi;  
   
    n=nn   <<   1;  
    j=1;  
    for   (i=1;i<n;i+=2)  
    {    
          if   (j   >   i)  
  {  
              SWAP(data[j],data[i]);    
              SWAP(data[j+1],data[i+1]);  
  }  
          m=n   >>   1;  
          while   (m   >=   2   &&   j   >   m)    
  {  
                j   -=   m;  
                m   >>=   1;  
  }  
          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<mmax;m+=2)    
      {    
            for   (i=m;i<=n;i+=istep)    
    {  
                j=i+mmax;    
                tempr=wr*data[j]-wi*data[j+1];  
                tempi=wr*data[j+1]+wi*data[j];  
                data[j]=data[i]-tempr;  
                data[j+1]=data[i+1]-tempi;  
                data[i]   +=   tempr;  
                data[i+1]   +=   tempi;  
    }  
              wr=(wtemp=wr)*wpr-wi*wpi+wr;    
              wi=wi*wpr+wtemp*wpi+wi;  
      }  
        mmax=istep;  
    }  
  }  
   
  int   main(int   argc,   char*   argv[])  
  {/*  
          FILE   *fp=fopen("D:\\Program\\VCTempCon\\data.txt","r");  
  if(!fp)  
  {  
      printf("Hello   World!\n");  
      return   0;  
          }  
  int   i;  
  for(i=0;i<32;i++)  
  {  
                  fscanf(fp,"%f   %f",&data[i],&data[i+1]);  
  i++;  
  }  
  fclose(fp);  
  four(16,1);  
  fp=fopen("four.txt","w");  
  if(!fp)  
  {  
              printf("can't   create   file\n");  
      return   0;  
  }  
  for(i=0;i<32;i++)  
  fprintf(fp,"%f   ",data[i]);  
  fclose(fp);  
   
  four(16,-1);  
          fp=fopen("four2.txt","w");  
  if(!fp)  
  {  
              printf("can't   create   file\n");  
      return   0;  
  }  
  for(i=0;i<32;i++)  
  fprintf(fp,"%f   ",data[i]);  
  fclose(fp);*/  
  int   d[4],i;  
  float   *p;  
  for(i=0;i<4;i++)  
  d[i]=i;  
  p=(float*)d;  
  printf("sizeof(int)=%d   \n",sizeof(int));  
          printf("sizeof(float)=%d   \n",sizeof(float));  
  for(i=0;i<4;i++)  
  printf("%d   %f\n",d[i],p[i]);  
  return   0;  
  }  

你可能感兴趣的:(c,图像,休闲,fft,IFFT)