基于FPGA的FFT算法.docx

上传人:b****8 文档编号:10121856 上传时间:2023-02-08 格式:DOCX 页数:10 大小:311.01KB
下载 相关 举报
基于FPGA的FFT算法.docx_第1页
第1页 / 共10页
基于FPGA的FFT算法.docx_第2页
第2页 / 共10页
基于FPGA的FFT算法.docx_第3页
第3页 / 共10页
基于FPGA的FFT算法.docx_第4页
第4页 / 共10页
基于FPGA的FFT算法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于FPGA的FFT算法.docx

《基于FPGA的FFT算法.docx》由会员分享,可在线阅读,更多相关《基于FPGA的FFT算法.docx(10页珍藏版)》请在冰豆网上搜索。

基于FPGA的FFT算法.docx

基于FPGA的FFT算法

基于FPGA的可扩展高速FFT处理器的设计与实现

来源:

电讯技术 作者:

刘晓明 时间:

2007-07-12 发布人:

卢春妙

  本文提出了基于FPGA实现傅里叶变换点数可灵活扩展的流水线FFT处理器的结构设计以及各功能模块的算法实现,包括高组合数FFT算法的流水线实现结构、级间混序读/写RAM地址规律、短点数FFT阵列处理结构以及补码实现CORDIC算法的流水线结构等。

利用FPGA实现的各功能模块组装了64点FFT处理器。

从其计算性能可知,在输入数据速率为20MHz时,利用此结构实现的FFT处理器计算1024点FFT的运算时间约为52μs。

  

一、引言 

  DFT(离散傅里叶变换)作为将信号从时域转换到频域的基本运算,在各种数字信号处理中起着核心作用,其快速算法FFT(快速傅里叶变换)在无线通信、语音识别、图像处理和频谱分析等领域有着广泛的应用。

用大规模集成电路FPGA(现场可编程门阵列)来实现FFT算法时,需要重点考虑的不再是算法运算量,而是算法的复杂性、规整性和模块化,因为算法的简单性和规整性将更适合大规模集成,更方便于版图设计,而算法的模块化更有利于FFT处理器的灵活扩展。

  组合数FFT算法和CORDIC(坐标旋转数字计算机)算法结合起来,在计算长点数、可扩展FFT时具有较大的优越性[1,2]。

而面向高速、大容量数据流的FFT的实时处理,可以通过VLSI(超大规模集成电路)器件的并行处理或多级流水线处理等来达到。

特别是多级流水线处理的FFT结构使得基于FPGA器件的FFT处理器完成不同点数的FFT计算时可以通过增减模块级数很容易地实现。

二、组合数N=r1r2点混合基FFT原理

  

  计算N点DFT:

  式中k=0,1,…,N-1。

  若N=r1r2的组合数,可将n(n<N)表示为 

  式

(2)的意义在于,计算组合数N=r1r2点DFT,等价于先求出r2组r1点的DFT,其结果经过对应旋转因子

的相位旋转后,再计算r1组r2点的DFT。

实际应用中,DFT往往用它的快速算法FFT实现,因而式

(2)中的r1点DFT和r2点DFT都用r1点FFT和r2点FFT实现。

三、可扩展FFT处理器实现结构 

  根据式

(2)的FFT算法原理设计FFT处理器的可扩展结构如图1所示。

 

  采用流水线模块化级联结构,把FFT处理器划分成短点数FFT、级间混序RAM和相位旋转等功能模块,设计的各功能模块可以重复利用,通过复用或增减各功能模块可以灵活改变FFT处理器的计算规模,而且不增加设计量。

在图1结构中,当Li=1时,就演变成了基2FFT;当Li=2时,就演变成了基4FFT;同理,当Li≠Lj时,就演变成了高组合数的混合基FFT。

1.短点数FFT阵列结构 

  -Tukey算法结构实现时,有大量的复数乘法实际上转化为加减运算,所以用阵列结构实现不但具有速度快的优点,而且所用器件资源也减少很多,通过对阵列结构短点数FFT进行时分复用,可以提高运算单元的使用效率。

2.相位旋转运算单元

  

  实现短点数FFT级间相位旋转,采用ROM存储旋转因子与数据复乘的传统方法,不仅涉及乘法运算,而且会消耗大量存储器资源。

  

  利用CORDIC算法实现组合数FFT级间数据的相位旋转,把乘法转化成加减法运算,适合FPGA的大规模集成。

可以设计出统一结构的CORDIC处理器模块,重复利用于不同级间实现相位旋转,而且其控制逻辑非常简单。

  

  

(1)CORDIC算法原理

  

  复数P=x+jy旋转角度θ得到Q的表达式:

 

  如果旋转角度θ可以分解成n个小角度φi之和,即:

 

  公式:

  

(2)CORDIC处理器结构设计

  

  本文提出了一种流水线CORDIC处理器结构的解决方案。

实现式子(4)的迭代运算时采用补码移位和补码加减运算,可以减少大量求补运算,其迭代结构如图2所示。

  前者在于左移补零的位数的不同,这样,只需要改变n0k0的放大倍数(改变左移低位补零的位数),就可以把同一方向向量功能模块级联到图1FFT处理器的不同级间来计算CORDIC处理器的MSBi,这就大大地减小了重复设计,其迭代结构如图3所示。

3.RAM结构及其级间数据混序用流水线读/写RAM地址发生器的设计

  

  设计的RAM,每个存储单元为32bit,高16位为复数的实部,低16位为复数的虚部。

输入输出数据接口用RAM设计为乒乓结构,用两块相同的RAM交替读出或交替写入数据,这样就放宽了对I/O操作速度的要求,使得外围电路可以不必工作于FPGA系统时钟。

  级与级之间数据混序用RAM设计为读/写RAM,对RAM同一存储单元用两个时钟完成一次读/写操作,即用流水线读/写同一块RAM来实现级与级之间的数据混序。

此结构取代了用两块RAM完成数据混序的乒乓结构的传统方法,不涉及存储器之间的读写切换,控制逻辑非常简单,而且消耗的存储器资源节省一半,这是实现结构可灵活扩展的高速FFT处理器的关键和难点。

可以通过理论推导,求得第i级FFT与第i-1级FFT级间混序用RAM的奇次读/写地址为

  的基础上向左循环移位,位长为Li-Li-1位;同时,后者又表示在前者的基础上向左循环移位,位长为Li-Li-1位,从而形成地址的循环移位规律。

把Li-1=Li和Li-1

利用此地址发生规律,可以设计基于图1结构的基2、基4等任意基xFFT以及混合基FFT级间数据混序用流水线读/写RAM地址发生器。

4.8×4×2点组合数FFT处理器的实验结果及其分析

  

  我们利用FPGA实现的各功能模块按图1实现结构组装了8×4×2点组合数FFT处理器,通过仿真验证了其设计的正确性后,又在FPGA实验板上对它进行了硬件验证,其实验验证平台如图4所示。

  硬件验证时采取的实验方法是,用相同的抽样频率fs等间隔地抽取不同频率单频正弦信号相同点数64点,即固定FFT的频率分辨率fr,利用设计的64点FFT处理器计算其幅度谱,观察其幅度谱中直流分量谱线和谐波分量谱线间隔大小的变化,把实验结果和理论分析结果进行对照,以确认FFT处理器工作的正常与否。

  

  系统时钟工作在40.861MHz时,抽样频率为40.861/2=20.4305MHz,抽样周期为1/20.4305MHz=48.9ns,抽取64个点的时间是48.9×64=3.13μs。

因为每个采样数据间隔时间是48.9μs,所以用设计的流水线方式工作的64点FFT处理器计算其幅度谱的谱线间隔也为48.9ns。

当输入单频正弦信号的频率约为638.454kHz时,其周期为1/638.454kHz=1.567μs。

  用20.4305MHz频率抽样,3.13μs时间内刚好在正弦信号的2个周期内抽取64点,输入单频正弦信号的频率是频率分辨率319.227kHz的2倍,直流分量为幅度谱的第1根谱线,一次谐波分量为幅度谱的第3根谱线,其理论计算结果波形如图5所示,实验测试结果波形及其的局部放大波形如图6和图7所示。

  从示波器上可以看出,横坐标单元格间隔为1μs,FFT变换周期间隔约为3格,即约为3μs,抽取了信号波形的2个周期,64点FFT计算时间也约为3μs。

  

  输入单频正弦信号的频率是频率分辨率319.227kHz的2倍,直流分量为幅度谱的第1根谱线,一次谐波分量为幅度谱的第2根谱线。

由于幅度谱的谱线间隔为48.9ns,也就是说,直流分量和一次谐波分量间隔约为100ns。

从示波器上可以看出,横坐标单元格间隔为100ns,直流分量和一次谐波分量间隔约为100ns,和理论分析结果一致。

四、结论

  

  本文以高组合数混合基DFT算法为基础,设计并用FPGA实现了变换点数可灵活扩展的流水线FFT处理器。

输入/输出数据速率为20MHz时,读/写RAM工作在40MHz时钟,计算出1024点FFT的运算时间约为52μs。

本设计采用模块化设计结构,便于系统调试和实现,而且各设计模块可以重复利用,避免重复相同的设计,从而缩短芯片设计开发时间,更易于FFT处理器的结构扩展。

整个FFT设计结构新颖,实现容易,具有一定实用价值。

用FPGA实现FFT算法

作者:

  时间:

2008-01-11  来源:

  电子产品世界  浏览评论

引言

  DFT(DiscreteFourierTransformation)是数字信号分析与处理如图形、语音及图像等领域的重要变换工具,直接计算DFT的计算量与变换区间长度N的平方成正比。

当N较大时,因计算量太大,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。

快速傅立叶变换(FastFourierTransformation,简称FFT)使DFT运算效率提高1~2个数量级。

其原因是当N较大时,对DFT进行了基4和基2分解运算。

FFT算法除了必需的数据存储器ram和旋转因子rom外,仍需较复杂的运算和控制电路单元,即使现在,实现长点数的FFT仍然是很困难。

本文提出的FFT实现算法是基于FPGA之上的,算法完成对一个序列的FFT计算,完全由脉冲触发,外部只输入一脉冲头和输入数据,便可以得到该脉冲头作为起始标志的N点FFT输出结果。

由于使用了双ram,该算法是流型(Pipelined)的,可以连续计算N点复数输入FFT,即输入可以是分段N点连续复数数据流。

采用DIF(DecimationInFrequency)-FFT和DIT(DecimationInTime)-FFT对于算法本身来说是无关紧要的,因为两种情况下只是存储器的读写地址有所变动而已,不影响算法的结构和流程,也不会对算法复杂度有何影响。

算法实现的可以是基2/4混合基FFT,也可以是纯基4FFT和纯基2FFT运算。

傅立叶变换和逆变换

对于变换长度为N的序列x(n)其傅立叶变换可以表示如下:

 

    式(1)

其中,W="exp"(-2π/N)。

当点数N较大时,必须对式

(1)进行基4/基2分解,以短点数实现长点数的变换。

而IDFT的实现在DFT的基础上就显得较为简单了:

                   式(2)

由式

(2)可以看出,在FFT运算模块的基础上,只需将输入序列进行取共轭后再进行FFT运算,输出结果再取一次共轭便实现了对输入序列的IDFT运算,因子1/N对于不同的数据表示格式具体实现时的处理方式是不一样的。

IDFT在FFT的基础上输入和输出均有一次共轭操作,但它们共用一个内核,仍然是十分方便的。

基4和基2

基4和基2运算流图及信号之间的运算关系如图1所示:

(a)基4蝶形算法(b)基2蝶形算法

  以基4为例,令A="r0"+j

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1