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

📄 fft.txt

📁 用于计算fft系数的程序
💻 TXT
字号:
#include<fstream.h>
#include<stdlib.h>
#include<math.h>
#define N 1024                        //1024点               
#define R 10                          //1024=2的10次幂
#define PI 3.1415926
void main(void)
{   
    int        temp[R];                  //余数
    int        n[N];                     //对0~1023顺序数乱序后的数组
    int        sum=0;                     
    int        i,J,k,s;
    double  out[N];                   //尤拉公式exp(j theta)中的theta
    struct  complex {double real;double ima;};
    complex W[N];                     //复系数数组W[N]

    for(i=0;i<N;i++)                  
    {   for(k=1;k<=R;k++){temp[k]=0;} //temp[R]清0
        s=i;                          //除数(原始顺序数)
        for(J=1;J<=R;J++)             //对i进行乱序
        {    temp[J]=int(fmod(s,2));   //获得余数(除2取余)
            s=int(s/2);               
            sum+=int(temp[J]*int(pow(2,R-J)));//获得i对应的乱序输出
        }
        n[i]=sum;
        sum=0;
    }                                
    for(k=0;k<N;k++)
    {out[k]=-k*n[k]*2*PI/N;
     W[k].real=pow(-1,k)*cos(out[k]);
     W[k].ima=pow(-1,k)*sin(out[k]); //!得到系数=exp(-j*2*pi*kn/N)!
                            //pow(-1,k)为符号函数,k为奇数时输出负号
    }                                
    //1024点的系数绝对值只有512个,实际系数是在每个数前加负号,形成新系数,共1024点
    ofstream outfile("data.dat",ios::out|ios::binary);//从这以后是输出格式,可以不看:)
    if(!outfile){
        cout<<"不能打开目的文件 data.dat\n";
        exit(1);
    }
    for(i=0;i<N;i++)
    {   
        if(i%4==0&&i!=0)
        {outfile<<"\n";
        }
        outfile<<"W["<<i<<"]=";
        outfile<<W[i].real;
        if(W[i].ima>=0)
        {outfile<<'+';
        }
    outfile<<W[i].ima;
    outfile<<"j";
    outfile<<'\t';
    }
    outfile.close();
}

⌨️ 快捷键说明

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