叶东明:二维FFT的程序实现及其应用
{ j=inverseq(i,M2); x[0][i]=A[0][j]; x[1][i]=A[1][j];} for(i=0;i {A[0][i]=x[0][i];A[1][i]=x[1][i];} if(ifft==-1) for(i=0;i /***********************************************/ unsigned int inverseq(unsigned int i1,unsigned int imax) { unsigned int j,ii,i0,inv; i0=i1;inv=0; for(j=0;j {ii=i0%2;inv=2*inv+ii;i0=(i0-ii)/2;} return(inv); } /**************************************************************************/ 附录4:程序文件rowco2.c #include \ void rowcolumn(double A[2][N1][N2],int ifft); /**rowcolume algorithm ,N2,N1,ifft=1or-1**/ void rowcolumn(double A[2][N1][N2],int ifft) { unsigned int i,j; double B1[2][N1],B2[2][N2]; initial(); for(j=0;j {B1[0][i]=A[0][i][j]; B1[1][i]=A[1][i][j];} fft21(B1,ifft); for(i=0;i {A[0][i][j]=B1[0][i]; A[1][i][j]=B1[1][i];} } for(i=0;i {B2[0][j]=A[0][i][j]; B2[1][j]=A[1][i][j];} 31 集美大学学士学位论文 fft22(B2,ifft); for(j=0;j {A[0][i][j]=B2[0][j]; A[1][i][j]=B2[1][j];} } } /**************************************************************************/ 附录5 实例2.4.1的主函数程序fft2m.c #define N1 512 #define N2 512 #include \ void functf(double A[2][N1][N2]); extern void rowcolumn(double A[2][N1][N2],int ifft); void main(void) { unsigned int i,j; static double A[2][N1][N2]; FILE *fp; fp=fopen(\system(\functf(A); printf(\fprintf(fp,\ for(i=0;i fprintf(fp,\rowcolumn(A,1); printf(\fprintf(fp,\ for(i=0;i fprintf(fp,\ } rowcolumn(A,-1); printf(\fprintf(fp,\ for(i=0;i fprintf(fp,\ } fclose(fp); printf(\ 32 叶东明:二维FFT的程序实现及其应用 } /***********************************************/ void functf(double A[2][N1][N2]) { unsigned int i,j; double tti,ttj,dti,dtj,A0i,A0j,A1i,A1j; dti=0.1; dtj=dti; A0i=exp(-N1*dti); A0j=exp(-N2*dtj); for(i=0;i tti=(double)i*dti; A1i=exp(-tti); for(j=0;j A[0][i][j]=(A1i+A0i/A1i)*dti*(A1j+A0j/A1j)*dtj; } } } 33