C 语言、 MATLAB 实现 FFT 几种方法总结前人经验,仅供参考///一、///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////c语言程序 ////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include #include #include #define PI 3.1415926535897932384626433832795028841971 //定义圆周率值#define FFT_N 128 //定义福利叶变换的点数struct compx {float real,imag;}; //定义一个复数结构struct compx s[FFT_N]; //FFT 输入和输出:从 S[1]开始存放,根据大小自己定义/******************************************************************* 函数原型: struct compx EE(struct compx b1,struct compx b2) 函数功能:对两个复数进行乘法运算输入参数:两个以联合体定义的复数a,b 输出参数: a 和 b 的乘积,以联合体的形式输出*******************************************************************/ struct compx EE(struct compx a,struct compx b) { struct compx c; c.real=a.real*b.real-a.imag*b.imag; c.imag=a.real*b.imag+a.imag*b.real; return(c); } /***************************************************************** 函数原型: void FFT(struct compx *xin,int N) 函数功能:对输入的复数组进行快速傅里叶变换(FFT)输入参数: *xin 复数结构体组的首地址指针,struct 型*****************************************************************/ void FFT(struct compx *xin) { int f,m,nv2,nm1,i,k,l,j=0; struct compx u,w,t; nv2=FFT_N/2; //变址运算,即把自然顺序变成倒位序,采用雷德算法nm1=FFT_N-1; for(i=0;i