0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用FPGA实现FFT算法示例

jf_78858299 来源:Hack电子 作者:Hack电子 2023-05-11 15:31 次阅读

随着数字技术的快速发展,数字信号处理已深入到各个学科领域。在数字信号处理中,许多算法如相关、滤波、谱估计、卷积等都可通过转化为离散傅立叶变换(DFT)实现,从而为离散信号分析从理论上提供了变换工具。但DFT计算量大,实现困难。快速傅立叶(FFT)的提出,大大减少了计算量,从根本上改变了傅立叶变换的地位,成为数字信号处理中的技术之一,广泛应用于雷达、观测、跟踪、高速图像处理、保密无线通信和数字通信等领域。

目前,硬件实现FFT算法的方案主要有:通用数字信号处理器(DSP)、FFT专用器件和现场可编程门阵列(FPGA)。DSP具有纯软件实现的灵活性,适用于流程复杂的算法,如通信系统中信道的编译码、QAM映射等算法。DSP完成FFT运算需占用大量DSP的运算时间,使整个系统的数据吞吐率降低,同时也无法发挥DSP软件实现的灵活性。采用FFT专用器件,速度虽能够达到要求。但其外围电路复杂,可扩展性差,成本昂贵。随着FPGA发展,其资源丰富,易于组织流水和并行结构,将FFT实时性要求与FPGA器件设计的灵活性相结合,实现并行算法与硬件结构的优化配置,不仅可以提高处理速度,并且具有灵活性高。开发费用低、开发周期短、升级简单的特点。针对某OFDM系统中FFT运算的实际需要,提出了基于FPGA的设计来实现FFT算法,并以16位长数据,64点FFT为例,在QuartusⅡ软件上通过综合和仿真

2 FFT原理及算法结构

FFT是离散傅立叶变换(DFT)的快速算法。对于N点离散的有限长时问序列x(n),其傅里叶变换为:

图片

完成N点的DFT需要N2次复数乘法和N(N-1)次复数加法。点数大时,计算量也大,所以难以实现信号的实时处理。FFT的基本思想是利用旋转因子WN的周期性、对称性、特殊性以及周期N的可互换性,将长度为N点的序列DFT运算逐次分为较短序列的DFT运算,合并相同项,大大减少了计算量。

FFT算法分为两大类:一类是针对N=2的整数次幂的算法,如基2算法、基4算法、实因子算法和分裂算法等:另一类是N≠2的整数次幂算法,以winograd为代表的一类算法。硬件实现时,不仅要考虑算法运算量的大小,而且要考虑算法的复杂性和模块化。控制简单、实现规整的算法在硬件系统中要优于仅降低运算量的算法。现有FFT算法的FPGA设计方案基本上都是针对于类算法,而第二类算法尽管有其重要的理论价值,但硬件不易实现。由于该设计点数不是太多,综合考虑FFT处理器的面积和成本。所以采用按时间抽取的基2快速傅立叶算法(基2DIT-FFT)。

对于长度为N=2m的序列x(n),其中m是整数,将x(n)按奇偶分成两组,即令:n=2r和n=2r+1,而r=0,1,…,N/2-1,于是:

图片

所以A(k)和B(k)可完整表示X(k)。依次类推,可一直向前追溯到2点的FFT,这样整个N点的FFT算法分解成log 2N级运算,每级有N/2个基2碟形运算。图1是N=8的DIT-FFT运算流图。

图片

3 FFT处理器的结构设计

FFT实现的设计方案有顺序处理、级联处理、并行处理和阵列处理。顺序处理每次运算仅用一个蝶形单元,处理方式简单,运算速度较慢。级联处理、并行处理和阵列处理的速度较快,但占用资源较多。考虑到该设计运算点数较少,因此采用改进的顺序处理方案,在原有顺序处理的基础上对FFT处理过程中数据传输进行控制。使得该结构在继承原有顺序处理电路简单、占用资源较少优点同时又兼有级联处理运算速度较快的优点。采用自顶向下的方法对处理器模块化,其结构框图如图2所示。

图片

4 模块设计与综合仿真

整个FFT处理器是由存储器、蝶形运算单元、旋转因子单元、控制单元和数据控制单元组成,各个单元通过控制单元产生的控制和使能信号进行工作。

4.1 蝶形运算单元

蝶形运算单元是整个FFT处理单元的重要部分,直接影响整个FFT单元性能。基2时间抽取的蝶形信号流程图如图3所示,p和q为数据序号,xm(p))和xm(q)是第m级蝶形运算的输入,xm+1(p)和xm+1(q)是该蝶形运算的输出,WrN为相应的旋转因子。

图片

采用FPGA实现FFT算法

由上式看出,一个基2蝶形运算要进行1次复乘、2次复加。为了提高运算速度采用并行运算,采用4个实数乘法器、3个实数加法器和3个实数减法器组成。设输入数据:x1=x1_r+jx1_im,x2=2_r+jx2_im,旋转因子为WrN=c-jd,则输出y1=y1_r+jy1_im和y2=y2_r+jy2_im。实现蝶型运算单元如图4所示。

图片

数据格式选择定点16位二进制补码。设计时必须考虑乘法器速度,将会直接影响整个FFT处理单元的运算速度,该设计的乘法器利用QuartusⅡ开发软件中所提供的宏单元生成。乘法器的两输入均为16位,输出32位。因为乘法器中带有旋转因子项.所以乘法运算后不应改变输入的幅值即乘法器的输出仍为16位,因此要对输出数据进行截取,截取其中16位作为加(减)法器的输入。

4.2 存储单元

在FFT处理单元中存储器是必不可少的单元,蝶形运算数据的输入输出和中间结果的存储都要经过存储器,因此它们的频繁读写操作对整个FFT处理速度影响较大。图2中存储器A和存储器B由RAM和状态机组成,各自分别具有数据总线、地址总线和触发时钟。存储器A接收外部输入数据,存储器B是中间结果单元,除级蝶形运算外每级数据的输入输出均经过该存储器。在两块存储器和蝶形运算模块之间加入两个数据控制器配合工作,可以在写入上一组中间结果的同时读取下一组蝶形运算数据,从而提高FFT的处理速度。

4.3 旋转因子单元

旋转因子单元是用于存储FFT运算所需的旋转因子WrN=exp(-j2πr/N)。在Matlab中旋转因子分为实部和虚部产生,由于它们是小于1的小数,故在设计中需将其定点化。其过程是将旋转因子扩大214倍。取整数部分转化为16位定点数,以.hex文件格式保存,利用QuartusⅡ软件的Megawizard工具设计。ROM,并将.hex文件同化在其中。根据旋转因子的对称性和周期性,在利用ROM存储旋转因子时,可以只存储旋转因子表的一部分,通过地址的改变查询出每级蝶形运算所需的旋转因子。

4.4 控制单元

控制单元用于协调驱动各模块,在FFT运算中具有关键作用。存储器A、旋转因子单元及数据控制器的读信号,存储器B的读写信号都是由控制单元产生。控制单元通过一个有限状态机(FSM)实现,使用两个内部计数器控制状态机的翻转。控制单元具有单独的输入时钟,可产生相应的控制信号。

4.5 综合仿真

选用Altera公司的QuartusⅡ软件作为开发平台,以Stratix系列中的EP1S25型FPGA为器件,采用白顶向下的设计思路和VHDL语言,实现对各个模块单元的设计、综合和仿真。为了简化设计,只在数据输入时钟下输入了一组64个复数,其余输入设为0,并且实部和虚部都限定在±l,±2,±3,±4,e5之内。为防止溢出先将输入数据乘以一定比例因子2-9,再乘以2 15转化为十六进制数。输出的结果如图5所示。需要注意的是:仿真结果乘以2 -6后才是实际结果。将仿真结果与Matlab计算的结果相比较,数据基本一致,说明了设计正确,其误差主要于数据的截取和旋转因子的近似。

图片

5 结束语

FFT算法是数字信号处理中一种重要运算,广泛应用于雷达、观测、跟踪、高速图像处理、保密无线通信和数字通信等领域。这里讨论了一种基于FPGA的64点FFT处理器的设计方案,输入数据的实部和虚部均以16位二进制数表示,采用基2DIT-FFT算法,以Altera公司的QuartusⅡ软件为开发平台对处理器各个的模块进行设计,在StraTIx系列中的EP1S25型FPGA通过了综合和仿真,运算结果正确。采用FPGA实现FFT算法在体积、速度、灵活性等方面都具有优越性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    552

    文章

    7962

    浏览量

    348194
  • FFT
    FFT
    +关注

    关注

    15

    文章

    434

    浏览量

    59296
  • 仿真
    +关注

    关注

    50

    文章

    4036

    浏览量

    133393
  • 数字信号处理器

    关注

    5

    文章

    456

    浏览量

    27327
收藏 人收藏

    评论

    相关推荐

    基于FPGA的超高速FFT硬件实现

    是处理数字信号如图形、语音及图像等领域的重要变换工具。快速傅里叶变换(FFT)是DFT的快速算法FFT算法的硬件实现一般有3种形式:1)使
    发表于 06-14 00:19

    FFT算法FPGA实现

    在信号处理中,FFT占有很重要的位置,其运算时间影响整个系统的性能。传统的实现方法速度很慢,难以满足信号处理的实时性要求。针对这个问题,本文研究了基于FPGA芯片的FFT
    发表于 05-28 13:38

    基于FPGAFFT算法硬件实现

    本帖最后由 gk320830 于 2015-3-8 21:23 编辑 开始科创,老师给了我们一个题基于FPGAFFT算法硬件实现。但是什么都不会,想找些论文看看,求相关的论文
    发表于 05-24 22:14

    fpga实现FFT算法

    谢谢各位。。各位大神。。用fpga实现FFT算法,最好是verilog hdl的。。或者推荐一些好书。。
    发表于 05-06 00:24

    FFT 算法的一种 FPGA 实现

    FPGA实现FFT 处理器的硬件结构。接收单元采用乒乓RAM 结构, 扩大了数据吞吐量。中间数据缓存单元采用双口RAM , 减少了访问R
    发表于 11-21 15:55

    如何在FPGA实现硬件上的FFT算法

    FFT算法实现为了提高FFT工作频率和节省FPGA资源,采用3级流水线结构
    发表于 06-17 09:01

    如何用FPGA实现FFT算法

    请问一下如何用FPGA实现FFT算法
    发表于 04-08 06:06

    FPGA实现FFT算法

    FPGA实现FFT算法 引言  DFT(Discrete Fourier Transformation)是数字信号分析与处理如图形、语音及图像等领域的重
    发表于 10-30 13:39 1592次阅读
    用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b><b class='flag-5'>FFT</b><b class='flag-5'>算法</b>

    基于FPGAFFT信号处理器的设计与实现

    本文主要研究如何利用FPGA实现FFl’算法,研制具有自主知识产权的FFT 信号处理器
    发表于 03-21 16:22 44次下载

    基于Xilinx_FPGA_IP核的FFT算法的设计与实现

    利用FPGA的IP核设计和实现FFT算法
    发表于 05-24 14:14 37次下载

    基于FPGAFFT实现方案

    两种:软件(软件编程)和硬件(专用ASIC芯片)。DSP软件编程实现速度较慢,不能满足FFT算法高速、实时的场合;专用芯片在速度上能满足要求,但外围电路复杂,可扩展性差,FPGA在当今
    发表于 11-09 10:58 11次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FFT</b><b class='flag-5'>实现</b>方案

    基于Xilinx FPGA 实现FFT算法的电力谐波检测的设计方案详解

    。在进行FFT这类并行运算为主的算法时,采用FPGA的优势不言而喻。用FPGA实现
    发表于 07-16 18:22 3843次阅读
    基于Xilinx <b class='flag-5'>FPGA</b> <b class='flag-5'>实现</b><b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的电力谐波检测的设计方案详解

    LTE物理上行共享信道中FFT算法分析与FPGA实现

    如何利用FPGA实现FFT算法,包括算法选取、算法验证、系统结构设计、
    发表于 01-25 14:27 8次下载
    LTE物理上行共享信道中<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>分析与<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>

    基于新型FPGAFFT设计与实现

    基于新型FPGAFFT设计与实现设计方法。
    发表于 06-17 17:07 48次下载

    FPGA实现FFT算法的方法

    摘要:在对FFT(快速傅立叶变换)算法进行研究的基础上,描述了用FPGA实现FFT的方法,并对其中的整体结构、蝶形单元及性能等进行了分析。
    的头像 发表于 04-12 19:28 5422次阅读