📄 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 + -