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
- FFT中的Rader算法:码率倒序
- FFT倒序算法——Rader算法
- FFT倒序算法—雷德Rader算法及matlab实现
- FFT倒序算法—雷德算法
- 雷德(rader)算法
- 雷德(Rader)算法
- 雷德(Rader)算法
- FFT(傅里叶变换)输入序列的倒序算法设计
- 求一个数L,在二进制下末尾0的个数k,与fft过程中的码位倒序
- 3.6 FFT算法中的对称性
- 倒序算法
- FFT算法
- FFT算法
- FFT算法
- FFT算法
- FFT算法
- FFT算法
- FFT中倒序数的产生
- 实现简单地小菜单效果
- 德比
- 欢迎使用CSDN-markdown编辑器
- 关于json返回日期格式化的解决方案
- LeetCode 238 Product of Array Except Self
- FFT中的Rader算法:码率倒序
- python基础教程共60课-第31课读文件
- 关于使用AFNetworking3.0.0报错的解决方案与建议
- 如何使用java自动生成数据表id,java.util.UUID类
- 销售运作计划(SOP)
- 移动端的rem单位
- CSS动画:Transform中使用频繁的scale,rotate,translate动画
- Swift2.1-继承
- 【Android高级】高斯模糊效果从319ms到3ms的优化实现