FFT程序的設计.docVIP

  • 13
  • 0
  • 约 17页
  • 2016-11-26 发布于重庆
  • 举报
FFT程序的設计

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=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的长度N ≥N1+N2-1对于长度不足N的两个序列,分别将他们补零延长到N。 2.2 C程序设计法及程序流程图 FFT算法是离散傅立叶变换的快速算法,其结果应该与离散傅立叶变换所算出的结果一致。图1是采样点数为8的FFT算法的一种形式,本程序也是以这种形式设计的。 x(0) X(0) x(4) X(1) x(2) X(2) x(6) X(3) x(1) X(4) x(5) X(5) x(3) X(6) x(7) X(7) 图1 FFT算法形式 程序设计的基本思路是在程序开始时刻要求输入采样点数,如果采样点数不是2的整数次方(不包括0次方),则要求输入采样点的数值,并根据采样点数分配响应的数组大小,计算迭代次数。然后对采样点进行逆二进制排序,再按上图所示的算法进行计算,程序流程图如图2: 图2 流程图 本程序在VC++6.0的开发环境下创建Win32 Console Application工程对程序进行设计,下面分别对程序设计中复数类的应用,判断和求迭代次数,逆二进制排序,蝶形运算进行具体说明。 2.3 快速傅里叶变换程序设计各类的应用 2.3.1 复数类的应用 C++语言本身并不包含复数数据类型,但在经过的不断扩展后,如今的STL(Standard Template Library)中已经包含了相应的复数类,但在尝试后发现其功能仍不能满足本程序设计的要求,所以仍需要在其基础上编写函数。 在FFT程序设计中,复数类主要被用来计算两复数的加法和乘法以及旋转因子,其中,式中N=2的i次方,i代表第i次迭代,而k代表第k次蝶形运算,由于ST

文档评论(0)

1亿VIP精品文档

相关文档