#include <stdio.h> #include <stdlib.h> #include<math.h> #define pi 3.1415926 #define N 16//16个点 typedef struct { double real,imag; } complex;//复数结构体 complex dft_out[8020];//单个点计算k complex dft_one[8020];//单个点计算n double amp[N];//DFT的结果 int main(void) { int n,k; double xn[N]; int q; //制造输入序列 for(q=0;q<N;q++) { xn[q]=q; } //将DFT前的序列输出 printf("您将要DFT的序列为:\n"); for(q=0;q<N;q++) { printf("%f\n",xn[q]); } //两级循环 for(k=0; k<N; k++)//k循环 { for(n=0; n<N; n++)//n循环 { //xn=0.6*sin(n*pi*100)+0.6*sin(n*pi*1000);//原信号 dft_one[n].real=xn[n]*cos(2*pi/N*n*k);//实部 dft_one[n].imag=xn[n]*sin(2*pi/N*n*k);//虚部 dft_out[k].real+=dft_one[n].real; dft_out[k].imag+=dft_one[n].imag;// } amp[k]=sqrt(dft_out[k].real*dft_out[k].real+dft_out[k].imag*dft_out[k].imag);//正余弦合并(根号下平方之和) printf("%d %f\n",k,amp[k]); } return 0; }
参考:https://blog.csdn.net/yga_airspace/article/details/86561371