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

📄 cfft.txt

📁 在c语言环境下实现快速傅立叶变换的功能
💻 TXT
字号:
[代码]FFT 快速傅立叶变换 (c语言)

[代码]FFT 快速傅立叶变换 (c语言)

算法参见徐世良《计算机常用算法》第二版 第294页

void KFFT(
BNU::vector<std::complex<double> > &x,
BNU::vector<std::complex<double> > &y,
int inverse)
{
  int n = x.size();
  int k = log((double)n)/log(2.);
  int t ,m ,s , i, j, NV, r;
  double angle;
  std::complex<double> V,PODD;
  for (t = 0 ; t <= n-1 ; t++) {
    m = t;
    s = 0;
    for (i = 0 ; i <=k-1 ; i++) {
      j = int(m/2);
      s = 2*s + m - 2*j;
      m = j;
    }                                         
  if (&x!=&y) {
      y[t] = x[s];
    }else {
       if (s>t) {
           V=x[t];
           y[t]=x[s];
           y[s]=V;
       }
    }
  }
  for (t = 0 ; t <= n-2 ; t+=2) {
    V = y[t];
    y[t] = V + y[t+1];
    y[t+1] = V - y[t+1];
  }
  m = n/2;
  NV = 2;
  for (r = k-2 ; r >=0 ; r-- ) {
    m = m/2;
    NV = 2*NV;
    for (t = 0 ; t <= (m-1)*NV ; t=t+NV ){
      for (j = 0 ; j <= (NV/2)-1 ; j++) {             
  angle = -(2.0*M_PI*inverse*j)/NV;
        PODD = complex<double>(cos(angle),sin(angle))*y[t+j+(NV/2)];
        y[t+j+(NV/2)] = y[t+j] - PODD;
        y[t+j] = y[t+j] + PODD;
      }
    }
  };
for (i = 0 ; i < n; i++) {
   if (inverse==-1)
        y[i] = y[i]/double(n);
}
}

⌨️ 快捷键说明

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