FFT程序的设计.doc
《FFT程序的设计.doc》由会员分享,可在线阅读,更多相关《FFT程序的设计.doc(17页珍藏版)》请在沃文网上搜索。
1、FFT程序的设计一、设计内容1.1 设计要求 用C程序平台设计快速傅里叶变换的程序,既要有设计的理论内容,也要有相应的流程图,及源代码。1.2 设计目的 1.掌握了解快速傅里叶变换程序的设计。 2.学习C语言平台的使用方法及基本功能。 3.加深对快速傅里叶变换的理解,熟悉快速傅里叶变换子程序调用。 4.熟悉应用快速傅里叶变换实现两个序列线性卷积的方法二、设计思路2.1 设计原理2.1.1 FFT算法原理FFT并不是另一种变换傅里叶变换,而是DFT的一种快速算法。它通过对DFT变换式的一次次分解,将长序列的DFT分解为一系列短序列DFT的组合,从而减少运算量。常用的FFT是以2为基数的,其长度N
2、=2L。当要变换的序列长度不等于2的整数次方时,是为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。2.1.2 FFT的运算量 对于一个N长的序列,直接计算DFT需要N2次复数乘及N(N-1)=N2复数加。 按时间抽选法FFT,当N=2L时,共有L级蝶形,每级都由N/2个蝶形运算组成,每个蝶形有一次复数乘、二次复数加,总的运算量为(N/2)L次复数乘,NL次复数加。2.1.3 用FFT计算线性卷积 用FFT可以实现两个序列的圆周卷积。在一定的条件下,可以使圆周卷积等于线性卷积。一般情况,设两个序列的长度分别为N1和N2,要使圆周卷积等于线性卷积的充分必要条件是FFT
3、的长度N N1+N2-1对于长度不足N的两个序列,分别将他们补零延长到N。2.2 C程序设计法及程序流程图x3(0)m=2x2(0)m=1x1(0)m=0x0(0) FFT算法是离散傅立叶变换的快速算法,其结果应该与离散傅立叶变换所算出的结果一致。图1是采样点数为8的FFT算法的一种形式,本程序也是以这种形式设计的。x3(1)x2(1)x1(1)x0(1)x(0) X(0)x3(2)x2(2)x1(2)x0(2)-1x(4) X(1)x3(3)x2(3)-1x1(3)x0(3)x(2) X(2)x3(4)x2(4)-1x1(4)-1x0(4)x(6) X(3)x3(5)-1x2(5)x1(5)
4、x0(5)x(1) X(4)x3(6)-1x2(6)x1(6)-1x0(6)x(5) X(5)x3(7)-1x2(7)-1x1(7)x0(7)x(3) X(6)-1-1-1x(7) X(7) 图1 FFT算法形式 程序设计的基本思路是在程序开始时刻要求输入采样点数,如果采样点数不是2的整数次方(不包括0次方),则要求输入采样点的数值,并根据采样点数分配响应的数组大小,计算迭代次数。然后对采样点进行逆二进制排序,再按上图所示的算法进行计算,程序流程图如图2:输入采样点数程序开始采样点数是否为2的不为0的整数次方?NY根据输入点数分配数组大小按迭代,分组,碟形运算的顺序进行运算 输出计算结果 程序
5、结束 图2 流程图 本程序在VC+6.0的开发环境下创建Win32 Console Application工程对程序进行设计,下面分别对程序设计中复数类的应用,判断和求迭代次数,逆二进制排序,蝶形运算进行具体说明。2.3 快速傅里叶变换程序设计各类的应用2.3.1 复数类的应用 C+语言本身并不包含复数数据类型,但在经过的不断扩展后,如今的STL(Standard Template Library)中已经包含了相应的复数类,但在尝试后发现其功能仍不能满足本程序设计的要求,所以仍需要在其基础上编写函数。在FFT程序设计中,复数类主要被用来计算两复数的加法和乘法以及旋转因子,其中,式中N=2的i次
6、方,i代表第i次迭代,而k代表第k次蝶形运算,由于STL中的Complex类不能进行带参数的复数运算,所以本程序编写了带参数的复数运算cW(int cm,int sign2m),用于计算,设计的基本思路是化复数乘法和除法运算为几个复数基本单元的加法运算和除法运算,其中加法运算的次数由函数输入参量int cm决定,复数除法运算次数由int sign2m决定。基本加法单元为复数类对象wmt(0,-1*2*pi),基本除法类对象为pm(2,0)。下面是cW(int cm,int sign2m)的代码: complex cW(int cm,int sign2m)int s;complex Wm(0,0
7、),pm(2,0),Wmt(0,-1*2*pi);for(s=0;scm;s+)Wm=Wm+Wmt;for(s=0;ssign2m;s+)Wm=Wm/pm;return Wm;2.3.1.1 判断和求迭代次数 本程序编写iternumb(int numb)函数对采样点数进行判断,如果采样点数不符合2的整数次方或采样点数为1或0,则跳出程序,程序设计基本思路是对输入采样点数的十进制形式进行模2运算和除法运算,在除法运算结果大于1之前,一旦模2运算的结果等于1,则说明输入采样点数不符合要求,而如果符合要求,则把出发结果存入数组当中,函数代码如下:int iternumb(int numb)int
8、iternumb=0;if(numb=0)|(numb=1)coutnum error!n;exit(0);while(numb!=0)&(numb!=1) if(numb%2)coutnum error!n;exit(0);numb=numb/2;iternumb=iternumb+1;return iternumb;2.3.1.2 逆二进制排序在逆二进制排序程序中,设置for循环分别将输入数据数组inputi的索引号i进行模2运算,所得的结果按逆序存入inverse数组(存入inverse数组的顺序是从数组尾部开始)。然后再将inverse中的二进制数转换为十进制数,并以此数为Aj的索引号
9、,令Aj= inputi,从而实现了逆二进制排序,代码如下:for(a=0;anum;a+)coutxatemp;inputa=temp;for(a=0;anum;a+)temp2=a;for(b=0;biternum;b+)temp4=temp2%2;inverseiternum-1-b=temp4;temp2=temp2/2;temp1=0;sign=1;for(c=0;citernum;c+)temp1=sign*inversec+temp1;sign=sign*2;Atemp1=inputa;2.3.2 蝶形运算 蝶形运算是FFT中最基本的一个运算单元。在FFT程序设计中要找到蝶形运算
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFT 程序 设计
