#include#include "C:\Users\Administrator\Desktop\fftw\fftw-3.3.4-dll32\fftw3.h"#include "D:\Qt\Eigen\Dense"#include #include #include using namespace std;// using namespace fftw_complex;#define N 3class MyComplex:public complex {public: MyComplex():complex (0.0, 0.0){m_r=0.0;m_i=0.0;} MyComplex(double r, double i):complex (r,i){m_r=r;m_i=i;} double getR(){return m_r;} double getI(){return m_i;}private: double m_r; double m_i;};int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); //complex www=(1,5); MyComplex www(2,4); std::cout< <
QT -= guiCONFIG += c++11 consoleCONFIG -= app_bundleLIBS += -L"C:\Users\Administrator\Desktop\fftw\fftw-3.3.4-dll32" \ -llibfftw3-3DEFINES += QT_DEPRECATED_WARNINGSSOURCES += main.cpp
#include
#include"C:\Users\Administrator\Desktop\fftw\fftw-3.3.4-dll32\fftw3.h"
#include"D:\Qt\Eigen\Dense"
#include
#include
#include
usingnamespacestd;
//usingnamespacefftw_complex;
#defineN3
classMyComplex:publiccomplex
{
public:
MyComplex():complex(0.0,0.0){ m_r=0.0;m_i=0.0;}
MyComplex(doubler,doublei):complex(r,i){ m_r=r;m_i=i;}
doublegetR(){ returnm_r;}
doublegetI(){ returnm_i;}
private:
doublem_r;
doublem_i;
};
intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
//complexwww=(1,5);
MyComplexwww(2,4);
std::cout<<
std::cout<<
std::cout<<
inti;
fftw_complex*in,*out,*result;
in=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N*N);
out=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N*N);
result=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N*N);
if(in==NULL||out==NULL)
{
printf("ERROR!");
}
else
{
//for(i=0;i
{
in[0][0]=0;in[0][1]=0;
in[1][0]=1;in[1][1]=0;
in[2][0]=2;in[2][1]=0;
in[3][0]=2;in[3][1]=0;
in[4][0]=3;in[4][1]=0;
in[5][0]=4;in[5][1]=0;
in[6][0]=3;in[6][1]=0;
in[7][0]=2;in[7][1]=0;
in[8][0]=1;in[8][1]=0;
}
}
for(i=0;i
{
printf("%.6f,%.6fi",in[i][0],in[i][1]);
if(i==2||i==5||i==8)printf("\n");
}
//傅里叶变换
cout<
fftw_planp=fftw_plan_dft_2d(N,N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p);
for(i=0;i
{
printf("%.6f,%.6fi",out[i][0],out[i][1]);
if(i==2||i==5||i==8)printf("\n");
}
//逆傅里叶变换
cout<
fftw_planpp=fftw_plan_dft_2d(N,N,in,result,FFTW_BACKWARD,FFTW_ESTIMATE);
fftw_execute(pp);
for(i=0;i
{
printf("%.6f,%.6fi",result[i][0]/(N*N),result[i][1]/(N*N));
if(i==2||i==5||i==8)printf("\n");
}
fftw_destroy_plan(p);
fftw_cleanup();
if(in!=NULL)
fftw_free(in);
if(out!=NULL)
fftw_free(out);
}