FFT中的Rader算法:码率倒序

来源:互联网 发布:搞笑网络小视频 编辑:程序博客网 时间:2024/06/05 15:14

在实现FFT(快速Fourier变换)计算的时候,第一步要做的就是实现码位(二进制码)倒序,这里有一种算法,叫做雷德(Rader)算法

废话少说,请看下面0-7的顺序排列与倒序排列:

    由上面的表可以看出,按自然顺序排列的二进制数,其下面一个数总是比其上面一个数大1,即下面一个数是上面一个数在最低位加1并向高位进位而得到的。而倒位序二进制数的下面一个数是上面一个数在最高位加1并由高位向低位进位而得到。
   若已知某个倒位序J(0是已知的嘛),要求下一个倒位序数
    首先判断J的最高位是否为0,这可与k=N/2相比较,因为N/2总是等于100..的。
  •     如果k>J,则J的最高位为0,只要把该位变为1(J与k=N/2相加即可),就得到下一个倒位序数;
  •     如果K<=J,则J的最高位为1,可将最高位变为0(J与k=N/2相减即可)。

    然后(k<=J时)还需判断次高位,这可与k=N\4相比较,若次高位为0,则需将它变为1(加N\4即可)其他位不变,既得到下一个倒位序数;若次高位是1,则需将它也变为0。然后再判断下一位。。。。(以此循环)

   看文字可能不是很好理解,直接上代码了:

#include <iostream>using namespace std;const int N = 8;/************************************************************************//*函数功能:求src的下一个二进制码倒序数*//************************************************************************/int rader(int src,int SIZE=N){int next = 0;//下一个倒码数int k = SIZE / 2;while (k>0){if (k>src)//如果k>src,说明src的最高位为0{next = src + k;//下一个倒码数就是将src的最高位变成1(+k)break;//推出循环}else   //否则 k<=src  说明src的最高位是1  {src -= k; //先将src的最高位变成0(-k)k /= 2;//然后k=k/2 等待比较次高位 循环继续}}return next;}/************************************************************************//*函数功能:对顺序数组进行二进制码倒序排列*//************************************************************************/template <typename T>static void array_rader(T array[], int SIZE){if (NULL == array || SIZE<=0){return;}for (int i = 1; i < SIZE;++i){*(array + i) = rader(*(array + i-1));}}/************************************************************************//*函数功能:输出数组*//************************************************************************/template <typename T>void PrintArray(T array[], int length){for (int i = 0; i < length; ++i){cout << array[i] << " ";}cout << endl;}int main(){int array_8[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };int i = 2;int next = rader(i, N);//测试i的下一个二进制倒序数cout << "First = " << i << " Next = " << next << endl;PrintArray<int>(array_8, 8);array_rader(array_8, 8);//对整个数组进行倒序排列PrintArray<int>(array_8, 8);return 0;}
测试结果:

  结束。谢谢大家。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 足球比赛中裁判碰到球怎么办 花盆的土变硬板结怎么办 lol皮肤不想要了怎么办 泉州小黄人自行车被偷怎么办 小学数学没学好上初中怎么办 50天的宝宝缺钙怎么办 5个月的宝宝缺钙怎么办 空调接电后指示灯不亮怎么办 欧普led灯坏了怎么办 led灯条芯片坏了怎么办 太阳能板只有电压没有电流怎么办 农村按空调房屋不保温怎么办 自己一个人想去足疗店不敢去怎么办 吊灯led灯坏了怎么办 办健身卡老板携款跑路了怎么办 武安丰尚健身怎么办卡 热敷后眼睛肿了怎么办 两眼视力差距大怎么办 怀孕体重长得快怎么办 怀孕初期发胖6斤怎么办 孕早期长得太快怎么办 怀孕了肚子眼脏怎么办 孕38周孩子偏小怎么办 孕初期胖的厉害怎么办 怀孕干活累着了怎么办 怀孕了上班很累怎么办 孕妇胖的太快怎么办 孕妇长得太快怎么办 眼睛一按吱吱响怎么办 孕期太胖了怎么办啊 人流后子宫复位不好怎么办 怀孕初期有盆腔积液怎么办 怀孕了有盆腔积液怎么办 多囊怀孕不想要怎么办 6个月婴儿大小眼怎么办 健身教练岁数大了以后怎么办 超变战陀玩具手柄坏了怎么办 飓风战魂三陀螺中轴坏了怎么办 怎么办晚安角和铁陀螺 白衣服染上荧光剂了怎么办 指尖陀螺不亮了怎么办