基于FPGA的FFT设计.docx

上传人:b****8 文档编号:10858774 上传时间:2023-02-23 格式:DOCX 页数:43 大小:1.16MB
下载 相关 举报
基于FPGA的FFT设计.docx_第1页
第1页 / 共43页
基于FPGA的FFT设计.docx_第2页
第2页 / 共43页
基于FPGA的FFT设计.docx_第3页
第3页 / 共43页
基于FPGA的FFT设计.docx_第4页
第4页 / 共43页
基于FPGA的FFT设计.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

基于FPGA的FFT设计.docx

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

基于FPGA的FFT设计.docx

基于FPGA的FFT设计

诚信承诺书

本人承诺:

所呈交的论文是本人在导师指导下进行的研究成果。

除了文中特别加以标注和致谢的地方外,论文中不包含其他人已发表或撰写过的研究成果。

参与同一工作的其他同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。

 

签名:

日期:

 

本论文使用授权说明

本人完全了解南通大学有关保留、使用学位论文的规定,即:

学校有权保留论文及送交论文复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容。

(保密的论文在解密后应遵守此规定)

学生签名:

指导教师签名:

日期:

 

摘要

快速傅里叶变换(FFT)是一种为了改进和提高离散傅里叶变换(DFT)运算速度而提出的算法。

它是根据已有的DFT的运算特性发展起来的DFT快速算法。

快速傅里叶变换的理论在信号处理、数字通信、语音处理和计算机等诸多领域有着广泛的运用。

在不同的运用场合,对FFT电路的性能有着不同的要求,但是在很多领域都要求FFT处理器能够具有高速度、高精度和实时性的工作状态。

现场可编程门阵列(FPGA)是由许多独立的可编程逻辑模块组成一种新型可编程器件。

FFT运算结构相对比较简单和固定,适合使用FPGA进行硬件实现,并且能兼顾速度及灵活性。

本文介绍了一种基于FPGA上实现32点FFT变换的设计方案。

整个FFT模块采用基-2时域抽取,顺序输入,逆序输出的方法实现。

将采集到的数据通过编写串口程序输入,再运用复数乘法器为核心设计了FFT算法中的基-2蝶形运算单元、溢出控制单元和地址与逻辑控制模块等其它模块,并以这些模块和FPGA内部的双口RAM为基础组成了基-2FFT算法模块,将经过处理的数据由串口程序输出,并且对运算结果使用MATLAB软件对比验证。

关键词:

快速傅里叶变换,FPGA,旋转因子,基-2

ABSTRACT

FastFourierTransform(FFT)isaalgorithminordertoimproveandenhancethecomputingspeedoftheDiscreteFourierTransform(DFT).ItisaDFTfastalgorithmaccordingtothedevelopmentoftheoperationalcharacteristicsoftheexistingDFT.ThetheoryofFFTiswidelyusedinmanyfieldssuchassignalprocessing,digitalcommunications,voiceprocessing,andcomputer.Indifferentapplications,theperformancesoftheFFTcircuithavedifferentrequirements,butinmanyareasFFTprocessorisrequiredwithhighspeed,highaccuracyandreal-timeworkstatus.

FieldProgrammableGateArray(FPGA)isanewtypeprogrammabledevicewhichiscomposedbyanumberofindependentprogrammablelogicmodule.ThestructureofFFTcomputationisrelativelysimpleandfixed,suitablefortheuseofFPGAhardwareimplementation,andalsocantakethespeedandflexibilityintoaccount.Thisarticleintroducesa32-pointFFTtransformdesignwhichisbasedonFPGA.TheentiremoduleusesRadix-2time-domainextraction,theorderofinput,outputreversemethod.InputdatausingtheserialinterfaceprogramandusingacomplexmultiplierasthecoredesignofFFTalgorithmintheRadix-2butterflyunit,overflowcontrolunitandaddressandlogicalcontrolmoduleandothermodules,andwithinthesemodulesandFPGA-baseddual-portRAMformedtheRadix-2FFTalgorithmmodule,outputtheprocesseddatafromtheserialinterfaceprogram,andusingMATLABsoftwareforcomparisonandvalidationofcalculationresults.

Keywords:

FFT,FPGA,Rotationfactor,Radix-2

 

第一章绪论

1.1数字信号处理概论

随着现代计算机与信息技术的不断飞速发展,对数字信号处理系统的运行处理速度要求也越来越高。

数字信号处理系统的研究人员一直在寻找各种优化的算法来解决信号处理中遇到的棘手问题。

其实质就是通过相应的软件与硬件的结合,将模拟信号或者其他的一些信号转换为数字信号并加以相应的处理。

在数字信号处理领域中部分数据可以在完成所有采集之后再进行处理,这些数据对系统的实时性处理要求较低,利用通用的计算机系统既可以完成处理。

这一类数字信号处理在计算机上编写程序,修改和运行,并对结果进行分析就能满足要求。

还有一类数字信号处理必须在规定的时间内完成,比如手机通话和雷达系统等。

有的数字信号处理对时间的要求十分严格,甚至使用高速的通用微处理器芯片也无法满足性能需要,因此在这种情况下就必须为这样的运算设计专用的硬线逻辑电路,通过FPGA器件上实现或者制成高速专用集成电路。

因此,对数字信号的实时处理一方面也是建立在高速大规模集成电路不断发展的基础上的。

另一方面,对数字信号处理实时性的要求不断提高,也推动了高速大规模集成电路制造技术的进步[1]。

经过几十年的发展,数字信号处理(DSP)作为一项成熟的技术,已经在诸多领域取得了广泛的运用,并且一些方面有逐步取代传统的模拟信号处理系统的趋势。

DSP系统具有以下几项优点:

如数字元器件对温度变化老化及元件容差不敏感。

相比较模拟信号,数字信号在精度、灵活性、线性相位、多维处理等方面具有明显优势。

有两个事件加速了DSP技术的发展,其一是Cooley和Tuckey(1956年)揭示了一种计算离散傅里叶变换(DiscreteFourierTransform,DFT)的有效算法。

而另一个重大转折就是在20世纪70年代后期可编程数字信号处理器(ProgrammableDigitalSignalProcessor,PDSP)引入。

1.2数字信号处理的发展趋势

数字信号处理在很多领域运用广泛,比如信号处理、数字通信、语音识别、雷达系统等。

传统的使用软件处理来实现这些算法,缺点明显:

速度慢、效率低,已经无法满足现代通信中对于信号处理的实时性越来越高的要求。

数字信号处理发展的一个明显趋势就是:

高速和实时。

在一些情况下,即使通用信号处理器(DSP)也无法满足系统的性能要求。

近年来,现场可编程门阵列(FPGA)凭借着其更高的集成度、更强的逻辑实现能力和更好的设计灵活性,逐渐在数字信号处理领域获得越来越广泛的应用。

它作为专用集成电路(ASIC)中的一种半定制电路,相对于DSP有着成本、性能和灵活性等方面的优点。

FPGA是一种直接由硬件实现的器件,它由逻辑功能块排成阵列组成,内部含有很多相同的运算单元,所以当使用FPGA在作数字信号处理时,速度会远远高于通用的DSP芯片。

在实现实时处理方案时往往需要使用多个DSP芯片,从而提高了产品的价格、功耗和开发周期。

特别是伴随近年来FPGA的集成规模、运算速度不断提高,系统设计和调试方法更加丰富,其在数字信号处理方面应用会更加广泛。

1.3所做的主要工作

随着FPGA技术的不断成熟和FFT算法在诸多领域的广泛应用,所以利用FPGA芯片进行FFT系统设计的方案越来越多。

因为FPGA芯片的重复可编程特点和具有丰富的逻辑单元,所以非常适合于算法比较固定、运算数据量大的实时数字信号处理。

研究是在国内外专家学者的研究基础之上进行的,本论文主要FFT算法的FPGA实现,重点是运用QuartusII软件模拟仿真。

全文共分为五章,各章节的主要内容安排如下:

第一章为绪论,简要介绍了数字信号处理技术的研究背景、意义和发展趋势。

第二章对FPGA的基础知识进行了简单的介绍,以及使用FPGA进行开发的优点。

然后对本次研究需要使用的QuartusII软件和VerilogHDL的使用予以介绍。

第三章对FFT算法的原理进行介绍。

了解快速傅里叶变换的主要内容后,论文着重介绍了FFT算法原理和特点。

其中包括理论知识、算法实现和主要特点。

第四章介绍FFT的FPGA的实现,首先描述整体的设计思路,再对使用硬件描述语言实现的各个模块进行介绍和分析。

第五章为通过使用QuartusII软件对FFT系统进行编译、仿真和测试,对输入的数据进行处理后再输出,并且和理论值进行比较验证设计的正确性。

第二章FPGA的基础知识

2.1FPGA的简介

FPGA(FieldProgrammableGateArray,现场可编程门阵列)是在可编程逻辑阵列(PAL)、通用逻辑阵列(GAL)、复杂可编程逻辑器件(CPLD)等可编程器件的基础上进一步发展的产物,相对于其他的可编程器件,FPGA在系统集成度、逻辑实现和设计能力等诸多方面有着明显的优势。

它能够根据用户的编程实现某种逻辑功能,而不需要前期的大量硬件开发投入。

这使得FPGA在满足专用的、个性化的设计要求方面无疑将拥有更大的灵活性和竞争力[2]。

近年来,随着FPGA的性能不断快速发展,它的广泛使用不仅简化了电路的设计复杂程度,降低了设计成本,提高了系统的可靠性,而且给整个数字电路系统的设计和实现带来了革命性的变化,使更低成本、更短周期的复杂数字系统开发成为可能。

正是由于FPGA上述的优点,使得其在在数字信号处理、工业控制、数据处理等诸多领域的运用越来越广泛。

而随着微电子制造技术的发展和市场的需要,各种大容量、高性能、低功耗的FPGA不断推出,新一代的FPGA不仅包含可编程逻辑模块,更集成了微处理器芯片(CPU)和其他各种外接端口,方便与外部设备的连接使用,从而能够实现软硬件的协同工作,为数字系统设计提供更为强大的硬件支持。

所以FPGA的发展前景必将十分的广阔。

2.2FPGA较其他器件优点

经过二十多年的不断发展,现在工程中使用的可编程逻辑器件主要包括两大类:

CPLD和FPGA。

虽然FPGA和CPLD都是可编程的ASIC器件,它们之间有着很多的共同点,但是由于FPGA和CPLD在结构上的差异,使得它们都具有各自的特点。

通常CPLD的特点有:

(1)CPLD不需要另外配置加载芯片。

(2)CPLD的运算速度比FPGA快,并且具有较大的时间上的可预测性。

(3)在编程存储方式上,CPLD使用E2PROM或Flash作为编程存储器,即使系统断电后存储器内容不会丢失。

FPGA则是使用SRAM的存储,系统断电时存储器中的编程信息丢失。

(4)CPLD的保密性比FPGA好。

(5)通常情况下,CPLD的功耗比FPGA大,而且随着集成度的提高而增大。

FPGA中包含数量丰富的可编程逻辑模块,但是CPLD通常情况下却只能做到512个逻辑单元。

除此之外,FPGA的平均逻辑单元成本也大大低于CPLD。

所以,FPGA和CPLD相比较而言,具有一下的优点:

(1)I/O数量多。

同CPLD一样,FPGA同样具有众多的用户可定义的I/O资源,支持多种I/O标准,且数据传输的速率非常高。

(2)时序更容易满足要求。

与CPLD相比FPGA的内部布线资源更加丰富,更容易实现用户的时序设计要求。

(3)细粒FPGA结构的优点。

FPGA是细粒结构,这就意味着每个单元间存在细粒延迟。

如果将少量的逻辑紧密排列在一起,FPGA的速度会相当的快。

(4)内部资源丰富。

与CPLD相比,FPGA除了具有丰富的布线资源外,其内部逻辑资源也要丰富的多。

(5)容量大、功能强。

一般来说,FPGA器件的容量比CPLD器件更容易做大,其内部资源更加的丰富,甚至可以把整个系统放在一块FPGA芯片上实现。

(6)可任意次数的编程。

FPGA器件的编程数据是存放在片外的RAM上,当系统上电时才将数据导入FPGA芯片的内部存储单元中,理论上的编程次数是无限的,而CPLD的稳定可编程次数一般不超过1万次。

正是因为FPGA具有的以上特点,利用FPGA设计的FFT系统相对于传统软件或者DSP实现FFT具有以下优点:

(1)FPGA芯片运行速度快能够很好的满足实时处理的要求,而单纯靠软件或者DSP进行处理速度通常比较慢。

(2)FPGA的可编程特性使得其灵活性很强,可以根据需要再次修改程序算法,而且降低了开发成本和设计周期,这是DSP无法比拟的。

2.3开发软件简介

2.3.1QuartusII软件介绍

QuartusII软件是Altera公司主推的FPGA设计软件,其前身是大家熟悉的MaxPlusII软件,QuartusII软件集设计输入、编译、综合、仿真、布线布局和下载等功能于一体,是一款功能非常强大的EDA设计软件,对于不是很大的系统设计,完全可以在这个平台上完成所有的设计任务。

但是,由于Altera公司毕竟是一家以FPGA芯片为主营业务的公司,且QuartusII软件功能过于庞杂,所以合理的利用FPGA设计第三方软件及其他数据处理软件(如MATLAB软件),将大大提高FPGA的设计效率。

2.3.2QuartusII软件设计流程

基于QuartusII进行的EDA设计开发流程如图2.1所示,包括以下步骤:

(1)设计输入:

包括原理图式设计输入、硬件描述语言文本输入、内存编辑输入及第三方工具输入等几种方式。

(2)编译:

QuartusII可选的编译方式有综合并输出网表和完全的编译。

第二种编译包括,网表输出、综合、器件配置等,并且编译软件根据器件配置设定延时时间。

(3)仿真:

QuartusII软件支持多种输入的仿真,如.vwf波形文件,.vec向量文件,.tbl列表文件。

通过仿真验证设计的逻辑功能和时间延时是否满足要求。

(4)下载与检验:

当设计经过编译和仿真测试后,如果满足设计要求便可以下载到电路开发板上的FPGA芯片中进行在线测试。

在设计过程中,如果出现错误,则需要重新回到设计输入阶段,改正错误或调整电路后重复上述过程[3]。

 

图2.1QuartusII设计流程

2.4VerilogHDL的简介

硬件描述语言(HDL,hardwaredescriptionlanguage)是一种用形式化方法来描述数字电路和系统的语言。

通过硬件描述语言,建立系统行为级的仿真模型,然后利用EDA软件对由硬件描述语言建立的的复杂数字逻辑电路模型进行仿真,然后再进行综合编译,以生成符合要求且在电路结构上可以实现的数字电路逻辑网表(Netlist)。

再根据具体器件生成该器件工艺条件下的电路延时配置,经测试验证后,写入FPGA或CPLD的存储器中。

在20世纪80年代后期,硬件描述语言的发展趋势就是逐渐实现标准化,经过世界范围内的广泛验证,VerilogHDL和VHDL语言符合了这种趋势的要求,得到越来越多的EDA公司和设计人员的使用和认可。

本文采用的是VerilogHDL语言来设计逻辑电路[4]。

VerilogHDL是硬件描述语言的一种,用于数字电子系统的设计。

该语言允许设计者进行各种级别的逻辑功能设计和数字逻辑系统的仿真验证,更重要的是进行时序分析和综合测试。

在美国、欧洲和我国台湾地区都有大量的设计工程师在使用VerilogHDL进行数字电路设计。

一般把功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的VerilogHDL模型称之为“软核”(softcore),而把由软核构成的器件称之为虚拟器件[5]。

VerilogHDL很适合系统级(system)、算法级(algorithem)、寄存器传输级(RTL)、逻辑级(logic)、门级(gate)、电路开关级(switch)设计,而systemverilog是verilog语言的延伸和扩展,更适合于可重复使用的可综合的IP核和可重用的验证用IP设计,以及特大型(千万门级以上)基于IP的系统级设计和验证。

概括的说,VerilogHDL语言具有以下的一些特点:

(1)既用于可综合的电路设计,也可以用于电路与系统的仿真。

(2)能在不同的层次上对所要设计的系统进行描述,从开关级、门级、寄存器传输级行为级等。

(3)电路结构描述方式灵活,不但可以使用行为级描述或者结构级描述,还可以二者混合描述。

(4)内置各种逻辑门,如and、or和nand等,可以方便的进行门级结构描述;内置各种开关级器件,如pmos、nmos和cmos等,可以进行开关级的建模。

(5)用户自定义原语(UDP)的灵活性[6]。

2.5本章小结

本章主要对FPGA的相关知识进行了介绍,包括含义、组成和相对于其他可编程器件的优点,最重要的特点是大容量,可重复编程,实时处理能力强。

然后对本文研究需要使用的QuartusII软件进行了简单的介绍,着重介绍了其设计流程。

最后对所使用的硬件描述语言语言VerilogHDL予以介绍,包括其在世界范围内的发展情况和主要特点。

 

第三章FFT算法原理

3.1快速傅里叶变换

快速傅里叶变换(FFT)是Cooley和Tukey于1956年提出的一种离散傅里叶变换的快速计算方法,它在理论上并不是一种新的变换,而是一种快速有效地计算DFT的方法。

DFT可以为连续信号频谱分析,实现快速线性卷积,计算相关函数等。

但是由于DFT的计算量很大,所以其并没有得到真正的运用。

直到FFT算法的提出,这种情况才得到根本的改变。

FFT算法使得DFT计算量大大降低,运算时间比传统的DFT算法缩短了一到两个数量级,从而有力地推动了数字信号处理技术的运用和发展[7]。

3.2基-2FFT算法

3.2.1基-2FFT算法原理

基-2FFT算法是最经典而且也是运用最广泛的FFT算法。

该算法分按时间抽取(DIT)和按频率抽取(DIF)两种类型,它们两者在原理上是基本相同的。

本课题采用的是DIT,下面着重介绍这一算法。

已知长度为N的有限长序列x(n)的DFT表达式为:

(3-1)

当x(n)为复数序列的一般情况时,k为0到N-1的某个整数,根据(3-1)式计算X(k)的DFT值分别需要N次复数乘法和(N-1)次复数加法。

那么直接计算DFT需要N2次复数乘法及N(N-1)次复数加法。

因为1次复数乘法中包含4次实数乘法和2次实数加法,1次复数加法中有2次实数加法,所以做1次离散傅里叶变换需要4N2次实数乘法和N(4N-2)次实数加法。

当序列的长度N不断增大时,所需要的运算次数也会随着急剧的增加,所以直接用DFT算法进行谱分析和信号的实时处理是不切实际的[8]。

通过以上分析,N点DFT需要的复数乘法次数为N2次。

如果把整个序列分解成几个有规律的短序列,再分别计算其各个短序列的DFT值,就可以使整个运算的乘法次数减少很多;利用旋转因子

的周期性、对称性进行合并和归类处理,从而减少DFT的运算量。

其对称性为:

 

(3-2)

周期性为:

(3-3)

式中,m为非零整数。

对于基-2FFT,由于N=2M,因此可以通过M次的分解最后完全转换成2点的DFT,最终减少DFT的运算量。

根据n的值为奇、偶数将序列x(n)分解为x1(n)、x2(n)两组子序列;用2个N/2点的DFT来实现一个N点DFT的运算。

设一个序列x(n)的长度为N,如下式所示

(3-4)

(3-5)

所以

(3-6)

 

其中k的取值范围为0,1,…,N-1。

因为

(3-7)

所以

这样就将N点DFT分解为两个N/2点的DFT。

由于X1(k)和X2(k)均以N/2为周期,而且

(3-8)

所以又可以将X(k)表示为如下所示的表达式

(3-9)

(3-10)

对上式的运算用图3.1所示的流图符号来表示

 

假设对于一个N=8点的DFT运算可以根据式(3-9)、(3-10)和图3-1,表示成图3.2的计算方式。

其中式(3-9)和(3-10)分别给出了X(0)-X(3)和X(4)-X(7)的计算方法。

图3.2N=8点DFT一次时域分解图

由图3.1和3.2知,在经过一次时域分解后,计算一个N=2M点的FFT的流程图共有M级蝶形运算,每级由N/2个蝶形运算组成,每个蝶形运算需要1次复数乘法和2次复数加法。

所以计算N=2M点FFT的共需要2(N/2)2+N/2=N(N+1)/2≈N2/2(N>>1)次复数乘法,N(N/2)+2N/2=N2次复数加法运算。

与原DFT运算比较而言,复数乘法的运算量减少了一半,这充分说明FFT算法的有效性[9]。

第二次分解:

将x1(r)按r取奇、偶可分解成2个长度为N/4的子序列

l=0,1,…,N/4-1(3-11)

x3(l)=x1(2l)

x4(l)=x1(2l+1)

根据上面推导可得:

k=0,1,…,N/2-1(3-12)

同理将x2(r)按r取奇、偶可分解成2个长N/4的子序列

l=0,1,…,N/4-1(3-13)

x5(l)=x2(2l)

x6(l)=x2(2l+1)

推导可得:

k=0,1,…,N/2-1(3-14)

经过两次分解,可以将一个N/2点的DFT再被拆分成为了两个N/4点的DFT。

依次拆分下去,由此可知,对于N=2M点需要经过M-1次分解得到N/2个2点DFT,如图3.3所示。

图3.3N=8点DFT二次时域分解图

DIT―FFT算法与直接计算DFT运算量的比较:

整个运算流图中有M级蝶形,每一级运算中包含N/2个蝶形,每个蝶形需一次复数乘和两次复数加运算。

所以,

直接DFT作N点运算:

复数乘次数:

N·N=N2

复数加次数:

N·(N-1)(3-15)

用DIT-FFT作N点运算:

复数乘次数:

M·N/2=N/2·log2N

复加次数:

2·N/2·M=N·log2N(3-16)

假设有N=210=1024点数据,按照上面的分析可知直接DFT运算和DIT-FFT运算所需要的乘法次数的比值是

(3-17)

很明显运算效率提高了204倍,而且随着数据量越多,FFT算法的优

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

当前位置:首页 > 人文社科 > 哲学历史

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

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