版权声明:本文为博主原创文章,转载请加入原文链接,谢谢。。 https://blog.csdn.net/shawncheer/article/details/87881903
参考自:http://www.alwayslearn.com/DFT%20and%20FFT%20Tutorial/DFTandFFT_TheDFT.html
我做了代码的实现。
#include<iostream>
#include<stdlib.h>
#include<math.h>
#define N 4
#define PI 3.1415926
using namespace std;
struct cplx{
float real;
float imag;
};
// Input number of the sample point .
// Input pointer of the malloc memory.
// void.
void get_cplx(int num, cplx* W_N_kn ){
for(int i=0; i<num; i++){
(W_N_kn[i]).real=cos(-2*PI*i*1.0/4);
(W_N_kn[i]).imag=sin(-2*PI*i*1.0/4);
}
return;
}
int main(){
float x_t[N]={0, 1, 0, -1};
cplx* W_N_kn=(cplx*)malloc(sizeof(cplx)*N);
cplx* F_n=(cplx*)malloc(sizeof(cplx)*N);
int num=N;
get_cplx(num, W_N_kn);
for(int i=0;i<num;i++){
cout<<"for i:"<<i<<endl;
cout<<W_N_kn[i].real<<"\t"<<W_N_kn[i].imag<<endl;
}
for(int i=0;i<num; i++){
(F_n[i]).real=0;
(F_n[i]).imag=0;
cout<<"i="<<i<<endl;
for(int j=0;j<num; j++){
(F_n[i]).real=(F_n[i]).real+x_t[j]*(W_N_kn[j*i]).real;
(F_n[i]).imag=(F_n[i]).imag+x_t[j]*(W_N_kn[j*i]).imag;
cout<<j<<"\t"<<x_t[j]<<"\t"<<W_N_kn[j*i].real<<"\t"<<W_N_kn[j*i].imag<<endl;
cout<<"x_t[j]*(W_N_kn[j*i]).real:"<<x_t[j]*(W_N_kn[j*i]).real<<"\tx_t[j]*(W_N_kn[j*i]).imag:"<<x_t[j]*(W_N_kn[j*i]).imag<<endl;
}
}
for(int i=0;i<num/2;i++){
cout<<" for: "<<i<<endl;
cout<<(F_n[i]).real<<endl;
cout<<(F_n[i]).imag<<endl;
cout<<sqrt((F_n[i]).real*(F_n[i]).real+(F_n[i]).imag*(F_n[i]).imag)<<endl;;
}
free(W_N_kn);
free(F_n);
return 0;
}