FFT算法1-倒位排序法的实现
来源:互联网 发布:安全使用网络手抄报 编辑:程序博客网 时间:2024/05/23 15:28
倒位排序法的实现
摘要:FFT算法的第一步是对数据进行处理,输入并不是自然序列而是倒位序列。
下面假如使用A[I]存的是顺序位序,而B[J]存的是倒位序。I<J的时候需要变序,I>J的时候就不用,不然就白忙活了。【重点一】
例如 N = 8 的时候,(红色标注表示要变序)
倒位序 顺序 二进制表示 倒位序顺序
倒位序 顺序 二进制表示 倒位序顺序
0 0 000 000
4 1 100 001
2 2 010 010
6 3 110 011
1 4 001 100
5 5 101 101
3 6 011 110
7 7 111 111
由上面的表可以看出,按自然顺序排列的二进制数,其下面一个数总是比其上面一个数大1,即下面一个数是上面一个数在最低位加1并向高位进位而得到的。而倒位序二进制数的下面一个数是上面一个数在最高位加1并由高位向低位进位而得到。
I、J都是从0开始,若已知某个倒位序J,要求下一个倒位序数,则应先判断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=N\4相比较,若次高位为0,则需将它变为1(加N\4即可)其他位不变,既得到下一个倒位序数;若次高位是1,则需将它也变为0。然后再判断下一位。。。。
nv2=FFT_N/2; //变址运算,即把自然顺序变成倒位序,采用雷德算法 nm1=FFT_N-1; for(i=0;i<nm1;i++) { if(i<j) //如果i<j,即进行变址 参见上文中【重点一】 { t=xin[j]; xin[j]=xin[i]; xin[i]=t; } k=nv2; //求j的下一个倒位序 while(k<=j) //如果k<=j,表示j的最高位为1 { j=j-k; //把最高位变成0 k=k/2; //k/2,比较次高位,依次类推,逐个比较,直到某个位为0 } j=j+k; //把0改为1 }
0 0
- FFT算法1-倒位排序法的实现
- FFT算法的DSP实现
- FFT算法的实现_1
- FFT算法8点12位硬件实现 (verilog)
- FFT算法8点12位硬件实现 (verilog)
- 倒排索引算法的Java实现
- FFT的C语言算法实现
- fft算法的C语言实现
- FFT算法的完整DSP实现
- FFT算法的完整DSP实现
- FFT算法的完整DSP实现
- FFT的C语言算法实现
- FFT算法的完整DSP实现
- 实验二:FFT算法的MATLAB实现
- FFT算法的完整DSP实现
- FFT算法的完整DSP实现
- FFT算法的完整DSP实现
- 倒排算法实现
- Vue初体验(四),关于事件v-on
- [PAT-乙级]1002.写出这个数
- 单件模式
- Python Code :不同Json文件的数据挖掘、清洗、反写
- 软件开发常用英语词汇
- FFT算法1-倒位排序法的实现
- webpack入门学习4-browser(浏览器自动运行)
- 打造自己的RecyclerView(二)之下拉刷新和上拉加载更多
- docker学习笔记
- Jmeter接口测试+压力测试
- 【数据结构】中的选择(SelectSort)排序
- string简单实现
- 个人PAT经历
- 1098 均分纸牌