#include <stdio.h> #include <fftw3.h> #include <reedpkg.h> char *sdoc[]={ "fft-test", }; int main(int argc,char *argv[]) { fftwf_plan plan1,plan2; complex *w; float *t; int i; t=alloc1float(10); w=alloc1complex(10); plan1=fftwf_plan_dft_r2c_1d(10,t,w,FFTW_ESTIMATE); plan2=fftwf_plan_dft_c2r_1d(10,w,t,FFTW_ESTIMATE); for (i=0;i<10;++i) { t[i]=i; } fftwf_execute(plan1); fftwf_execute(plan2); for (i=0;i<10;++i) { t[i]/=10.0; } for (i=0;i<10;++i) { printf("%f\n",t[i]); } }
傅立叶变换无论是 fftwf_plan_dft_1d 还是 实序列到复序列 r2c 的变换 再正反变换之后都会被放大序列长度倍,因此由程序调用者自身负责这个scale
示例中的w给的比较长,实际上只需要n/2+1个长度就可以。