FFT中倒序数的产生

来源:互联网 发布:激战2优化补丁 编辑:程序博客网 时间:2024/06/12 01:42

说明:

     1、基本思路:将十进制转化为二进制数,然后把二进制最低位当作最高位,最高位当作最低位再转化为十进制

     2、只考虑了FFT点数为2的整数次幂

     3、代码以8点FFT为例,经过DataReRank(int)函数处理后,Data[ ]里数据已经重新排列

     4、倒序数的产生有一种比较流行的算法:雷德算法,在此没有采用这种方法

     5、水平所限,代码难免质量不高

#include<iostream>#include<list>#include<vector>using namespace std;float Data[] = {0,1,2,3,4,5,6,7};//进行FFT的数据void DataReRank(int num);//对数据倒序,有一种雷德算法可以完成此功能,不过在此并未采用int main(){DataReRank(8);    return 0;}void DataReRank(int num){int BitNum = log(num) / log(2); int flag = 1, index = 0, flag2 = 0;;list<int> Bit;   //存放二进制数,重复使用,每次用完需清零vector<float> DataTemp; //暂时存放重新排列过后的FFT数据for (int i = 0; i < num; i++){for (int j = 0; j < BitNum; j++){              //十进制转化为长度一致的二进制数int x = (i & flag)>0 ? 1 : 0;Bit.push_front(x);flag <<= 1;}for (auto it = Bit.begin(); it != Bit.end(); it++)  index += *it*pow(2, flag2++); //将原数组的索引倒序DataTemp.push_back(Data[index]);Bit.clear();flag = 1; flag2 = 0; index = 0;    }for (int i = 0; i < num; i++) Data[i] = DataTemp[i];  //将DataTemp中数据复制到Data}


0 0
原创粉丝点击