void FFT(Comp* x, int M)
// x 是存有输入数据的复数数组,元素个数为2M
// FFT变换结果存入数组x中返回
{
计算数组元素数目;
按二进制倒读次序对输入数据进行整序; // 使得输入结果为自然次序
计算旋转因子并保存到数组W中; // 避免旋转因子的重复运算
对各级进行如下处理
{
计算当前级内的组数与组内单元数;
依次处理级内各组
{
依次处理组内各蝶形单元
{
分别计算当前蝶形单元所含的两个元素在数据数组中的位置;
从旋转因子数组中取出当前蝶形单元对应的旋转因子;
计算旋转因子与蝶形单元第二元素的复数乘积;
按蝶形运算关系,计算最终结果,存入数组的原先位置;
} // 群内循环
} // 级内循环
} // 所有各级的循环
// 至此,数组x中已经是原输入数据的DFT运算结果了
}
|