|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
FFT快速傅立叶变换程序实验用的头文件 MYFFT.H作用:为帮助小虎子做实验,这个头文件提供了完整的一维与二维FFT算法,我想应改是够你折腾了吧!#include // complexusing namespace std;typedef complex Comp; // 复数类型定义const float _2PI_ = 2.0f * 3.14159265f; // 常数2PI定义const int MAX_N = 256; // 最大DFT点数/*----*----*----*----*----*----*----*----*----*----*----*----* FFT算法模块接口定义*----*----*----*----*----*----*----*----*----*----*----*----*////////////////////////////////////////////// Function name : BitReverse// Description : 二进制倒序操作// Return type : int// Argument : int src 待倒读的数// Argument : int size 二进制位数int BitReverse(int src, int size){ int tmp = src; int des = 0; for (int i=size-1; i>=0; i--) { des = ((tmp & 0x1) << i) | des; tmp = tmp >> 1; } return des;}//////////////////////////////////////////////////// Function name : Reorder// Description : 数据二进制整序// Return type : void// Argument : Comp x[MAX_N] 待整序数组// Argument : int N FFT点数// Argument : int M 点数的2的幂次void Reorder(Comp x[MAX_N], int N, int M){ Comp new_x[MAX_N]; for (int i=0; i<< M); // 二进制整序 Reorder(x, N, M); // 旋转因子计算 Comp W[MAX_N]; CalcW(W, N, flag); // 级内群数 int GroupNum = N/2; // 第一级的群数为N/2 // 群内蝶形单元数 int CellNum = 1; // 第一级的群内蝶形单元数为1 // 处理各级 for (int i=0; i>= 1; // 级别增加, 则相应的群数减少一半 CellNum <<= 1; // 级别增加, 则相应的群内单元数增加一倍 } // 如果是IFFT,各元素还要再除以N if (flag != 1) { for (i=0; i<< M); // 先逐行进行 1D-FFT for (int i=0; i<--- 计算结果再存入矩阵x中 // 再逐列进行 1D-FFT Comp col[MAX_N]; for (int j=0; j<--- 计算结果在数组col中 // 将结果放回矩阵第j列中 for (i=0; i<--- End of [FFT.H] |
|