⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft c++.txt

📁 快速傅立叶变化
💻 TXT
字号:
#include <iostream.h> 
#include "math.h" 

#define PI 3.14159265358976323846 
#define NN 2048 

struct complex                                                //data form                
{ 
  float Re; 
  float Im; 
}; 

void FFT(complex x[], complex y[], int N);                

void main() 
{ 
  int i, N; 
    complex x[NN], y[NN]; 
  cout < < "how many point FFT do you want to do:(N=2,4,8,16...)" < < endl; 
  cin >> N; 
  cout < < "please input the data:" < <endl; 
  
  for(i=0;i <N;i++)                    //input 
  { 
    cout < <"Rm(" < <i < <"):"; 
    cin>>x[i].Re; 
    cout < <"Im(" < <i < <"):"; 
    cin>>x[i].Im; 
  } 
  FFT(x,y,N); 
  for(i=0;i <N;i++) 
  { 
    cout < <"X[" < <i < <"]=(" < <x[i].Re < <")+j(" < <x[i].Im < <")" < <endl; 
  } 
} 

void FFT(complex x[],complex y[],int N)          //FFT 
{ 
  int i,j,k,m=0; 
  int p,q,s; 
  double angle; 
  complex W; 
  complex c[NN]; 

  for(i=0,j=0;i <N-1;i++)                  //hehe 
  { 
    if(i <j) 
    { 
      c[i]=x[i]; 
      x[i]=x[j]; 
      x[j]=c[i]; 
    } 
    k=N/2; 
    while(k <=j) 
    { 
      j=j-k; 
      k=k/2; 
    } 
    j=j+k; 
  } 
  
  for(m=0;m <(log(N)/log(2));m++)                    //level 0,1,2... 
  { 
    for(k=0;k <pow(2,((log(N)/log(2))-m-1));k++)    //group ...4,2,1 
    { 
      for(s=0;s <pow(2,m);s++)                    //point  0,1,3... 
      { 
        p=k*int(pow(2,m+1))+s; 
        angle=-PI*2*s*pow(2,((log(N)/log(2))-m-1))/N; 
        W.Re=float (cos(angle)); 
        W.Im=float (sin(angle)); 
        q=p+int(pow(2,m)); 
        y[p].Re=x[p].Re+W.Re*x[q].Re-x[q].Im*W.Im; 
        y[p].Im=x[p].Im+W.Im*x[q].Re+x[q].Im*W.Re; 
        y[q].Re=x[p].Re-(W.Re*x[q].Re-x[q].Im*W.Im); 
        y[q].Im=x[p].Im-(W.Im*x[q].Re+x[q].Im*W.Re); 
      } 
    } 
    for(i=0;i <N;i++) 
    { 
      x[i]=y[i]; 
    } 
  } 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -