收藏 分享(赏)

FFT算法分析.doc

上传人:HR专家 文档编号:7557355 上传时间:2019-05-21 格式:DOC 页数:9 大小:454KB
下载 相关 举报
FFT算法分析.doc_第1页
第1页 / 共9页
FFT算法分析.doc_第2页
第2页 / 共9页
FFT算法分析.doc_第3页
第3页 / 共9页
FFT算法分析.doc_第4页
第4页 / 共9页
FFT算法分析.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、FFT 算法分析FFT 算法的基本原理是把长序列的 DFT 逐次分解为较短序列的 DFT。按照抽取方式的不同可分为 DIT-FFT(按时间抽取)和 DIF-FFT(按频率抽取)算法。按照蝶形运算的构成不同可分为基 2、基 4、基 8 以及任意因子(2n,n 为大于 1 的整数) ,基 2、基 4 算法较为常用。基 2、DIT-FFT(按时间抽取):-10/21/21(21)/21/21/2/2()() ()()()()NknnkknNNnNkrkrrnNkr krNr nXkxWxxWx偶 数 奇 数0000令 , ,则有:/211/2()()NkrNrxWX0/212/()()krr X01

2、2(/2)()kNWk蝶形运算单元如下所示:基 2、DIF-FFT (按频率抽取):-10/21/2/211(/2)/21/2/21/2()() ()()(/)()(/)()()()()NknnNkknnNk knNNnnkknNnNrnnXkxWxxWxXrx0000/21 /2/)nrNnW0则有: 12()(/)2nNxnx蝶形运算单元如下所示:由前面的分析可知,DIT(按时间抽取)算法与 DIF(按频率抽取)算法没有本质上的区别,只是复数加减法与旋转因子乘法的次序有区别,两种方法的运算量是一样的。在基 2 算法中,每个蝶形运算单元都包括 1 次复数乘法、2 次复数加法。N(N= )2M

3、点序列的运算流图应有 M 级蝶形,每一级都由 N/2 个蝶形运算组成,所以 N 点序列的基2FFT 算法,总的运算量为 次复数乘法, 次复数加法。直接 DFT 运算2logN2log量为 次复数乘法、 次复数加法。可见,FFT 算法大大减少了运算量,当 N 越2N(1)大时,FFT 算法的优越性越明显。基 4、DIF-FFT(按频率抽取 )10/4/213/411/4/23/4/1 /(4) (/2)00 0(3/4)()() () )() (/NknnNNNkknknknnNk k kNNNn nknXkxWxxWxx /4/1 / /23/40/4 /4/1 /0()(/)(/)()/4)

4、3()(/2)()(42)NkNkNkNnn rnN rNnxxxWXrnnxjxjxr /4 2/4/1 3/0/4)/3()(/2)()nrN rNn nNnXxjxjxW 令: 1 22 33(/4)/4()()()/2/() nNnnnnxjxNxjxnj j则有: /41 /410/4 /40/ /2 3/ /0()(),()(),NNrn rnNNn nr rXrxWXxW 蝶形运算单元如下所示:由上图可知每个基 4 蝶形运算单元包括 3 次复数乘法、8 次复数加法。N(N= ,M2为偶数)点序列的 FFT 运算若采用基 4 算法则有 M/2 级蝶形,每级由 N/4 个蝶形运算构成

5、。采用基 4 算法计算 N 点序列的 FFT 共需要 次复数乘法、 次复数加法。2log2log由于主要的运算时间集中在乘法上面,可见基 4 算法的运算量较基 2 算法减少了 25%,但运算量的减少是以硬件的复杂性及使用更多资源为代价的。FFT 算法的 FPGA 实现以 8 点(复数点,包括实部与虚部) 、基 2、DIF-FFT 为例来考虑 FFT 算法的 FPGA 实现。整个运算流图应由 3 级蝶形构成,每级中有 4 个蝶形运算。若 DIF 的输入序列为顺序输入,则得到倒序输出。完整的运算流图如下所示:考虑采用流水线结构,系统可采用 3 级基 2 蝶形运算单元构成,系统总体结构如下所示:总体

6、结构说明输入数据为串行的数据流,故在第一级蝶形运算模块前加入串并转换模块,将串行数据流转换为并行的两列数据流以适应基 2 蝶形运算模块的输入信号要求。由于每级蝶形运算一次处理的两个输入数据不能直接由前一级蝶形运算一次性输出,故在两个蝶形运算单元之间插入延时对齐模块,将前一级蝶形运算的结果(两列并行的数据流)作适当的延时并通过转接器对齐,形成后一级蝶形运算模块所需要的 2 列输入序列。在最后一级蝶形运算后加入串并转换模块,将 2 列并行的数据流合成为 1 列。最后加入倒序模块将 DIF-FFT 得到的倒序输出序列整理为顺序输出。旋转因子产生模块产生各级基 2 蝶形运算所需的旋转因子。由运算流图可

7、以看出最后一级的旋转因子其实是 1,故可省略最后一级蝶形运算单元中的旋转因子乘法器。因此用一个双口 ROM 将两组数据分别输出到第一级和第二级的蝶形运算单元即可。基 2 蝶形运算模块由两个复数加法器和一个复数乘法器构成。旋转因子由 ROM 产生后,作为复数乘法器的输入之一,与前面复数加法器得到的结果相乘完成一次蝶形运算。为提高系统的运行速度可在蝶形运算单元中插入流水线寄存中间结果。若输入序列的标号为 0、1、2、3、4、5、6、7,则在 A、B、C、D、E 处的信号标号如下图所示:串并转换模块完成 A 序列到 B 序列的转换;两个延时对齐模块分别完成 B 序列到 C序列、C 序列到 D 序列的

8、转换;并串转换模块完成 D 序列到 E 序列的转换。各模块框图串并转换模块:串并转换模块可用单输入、双输出的 RAM 来实现,同时控制输入信号的时钟频率为输出信号时钟频率的两倍。这里要用到乒乓操作,即读写操作分开,故 8 点序列要用到 16个存储单元。写入地址在写入时钟控制下按顺序递增。两个读出地址的最高位都为写入地址最高位的求反结果。两个读出地址的次高位固定,一个为 0,一个为 1,其它位在读出时钟的控制下递增。16 bits16 wordsdata150wraddress30wrenrdaddress_a30rdaddress_b30wrclockrdclockaclrqa150qb150

9、ram_3portinst1data qaqb延时对齐模块:用单输入、单输出的 RAM,适当控制读、写地址可实现数据的延时,转接器可用数据选择器构成。以最后一个蝶形运算单元前的延时对齐模块为例,可由如下方案实现:转接器两种状态分别为两个输出端与输入端直接相连和交叉相连,控制转接器的状态每 1个 clk 改变一次,即控制转接器的状态持续时间与延时单元的延时时间相同。经过分析可知,若采用相同的处理方式,则倒数第 n 个蝶型运算单元前的延时单元的延时 clk 个数为个。延时单元可直接用 RAM 实现,控制读写地址之间的间隔即可实现输出与输入之12n间的延时。整个延时对齐模块的连接图如下:a150b1

10、50selqa15-10qb15-10mux_2portinst216 Word(s)RAMBlock Type: AUTOdata150wraddress30wrenrdaddress30clockaclrq150ram_2portinst16 Word(s)RAMBlock Type: AUTOdata150wraddress30wrenrdaddress30clockaclrq150ram_2portinst3data_adata_bqaqb旋转因子产生模块:用双口 ROM 产生旋转因子。按照各级蝶形运算模块中所需的旋转因子的变化规律控制两个读出地址的变化,产生相应的旋转因子到各级蝶形运

11、算模块。32 Word(s)RAMBlock Type: AUTOaddress_a40address_b40clockaclrq_a150q_b150rom_2portinstq0q1并串转换和倒序模块:先将用数据选择器将两路数据合成为一路写入 RAM 中,然后从 RAM 中读出数据,适当控制读地址可实现倒序序列的整序。这里也要用到乒乓操作,读写操作分开。输出数据的时钟频率为输入数据时钟频率的两倍,sel 信号的变化频率与输出信号频率相同。RAM 中用到的时钟信号是输出数据的时钟。控制 RAM 的写入地址按输出时钟递增,读出地址最高位为写入地址最高位求反的结果。读出地址中的其它位按如下规则产

12、生:若将余下的地址位看成一个完整的地址,则最高位与写入地址最低位相同、次高位与写入地址次低位相同、依此类推。data1x150data0x150selresult150mux_1portinst16 Word(s)RAMBlock Type: AUTOdata150wraddress30wrenrdaddress30clockaclrq150ram_2portinst2基 2 蝶形运算模块:基 2 蝶形运算单元中要完成两个复数加法和一个复数乘法。一个复数加法器可由两个实数加法器构成。下图是基 2 蝶形运算单元的结构图:复数乘法的运算为: ()(*(*)RjIXjYCjSXYCX 为输入信号的实

13、部,Y 为输入信号的虚部,C 为旋转因子的实部,S 为旋转因子的虚部,R 为运算结果的实部, I 为输出结果的虚部。若按上述运算直接构成复数乘法器需 4个实数乘法器和 3 个实数加法器。考虑简化计算为: *-EZEYSYICX令 : , ( )则 : ( )( )与旋转因子有关的数据都可预先计算,即 C、C+S、C-S 可预先计算存放在 ROM 中。这样可将旋转因子乘法器简化为 3 个实数乘法器和 3 个实数加法器。结构如下:对中间结果可用寄存器寄存以提高运算速度。FFTFFT,即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改

14、进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。 设 x(n)为 N 项的复数序列,由 DFT 变换,任一 X(m )的计算都需要 N 次复数乘法和N-1 次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算” (四次实数乘法和四次实数加法),那么求出 N 项复数序列的 X(m),即 N 点 DFT 变换大约就需要N2 次运算。当 N=1024 点甚至更多的时候,需要 N2=1048576 次运算,在 FFT 中,利用 WN 的周期性和对称

15、性,把一个 N 项序列(设 N=2k,k 为正整数),分为两个 N/2项的子序列,每个 N/2 点 DFT 变换需要(N/2)2 次运算,再用 N 次运算把两个 N/2点的 DFT 变换组合成一个 N 点的 DFT 变换。这样变换以后,总的运算次数就变成N+2(N/2)2=N+N2/2 。继续上面的例子,N=1024 时,总的运算次数就变成了525312 次,节省了大约 50%的运算量。而如果我们将这种 “一分为二”的思想不断进行下去,直到分成两两一组的 DFT 运算单元,那么 N 点的 DFT 变换就只需要 Nlog(2)(N)次的运算,N 在 1024 点时,运算量仅有 10240 次,是先前的直接算法的 1%,点数越多,运算量的节约就越大,这就是 FFT 的优越性。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报