首页 » 通讯 » 用FPGA实现FFT的方法基于FPGA的快速傅立叶变换_傅立叶_暗记

用FPGA实现FFT的方法基于FPGA的快速傅立叶变换_傅立叶_暗记

落叶飘零 2024-11-12 00:24:51 0

扫一扫用手机浏览

文章目录 [+]

择要:在对FFT(快速傅立叶变换)算法进行研究的根本上,描述了用FPGA实现FFT的方法,并对个中的整体构造、蝶形单元及性能等进行了剖析。

傅立叶变换是数字旗子暗记处理中的基本操作,广泛运用于表述及剖析离散时域旗子暗记领域。
但由于其运算量与变换点数N的平方成正比关系,因此,在N较大时,直接应用DFT算法进行谱变换是不相符实际的。
然而,快速傅立叶变换技能的涌现使情形发生了根本性的变革。
本文紧张描述了采取FPGA来实现2k/4k/8k点FFT的设计方法。

用FPGA实现FFT的方法基于FPGA的快速傅立叶变换_傅立叶_暗记 通讯

1、整体构造

一样平常情形下,N点的傅立叶变换对为:

个中,WN=exp(-2 pi/N)。
X(k)和x(n)都为复数。
与之相对的快速傅立叶变换有很多种,如DIT(时域抽取法)、DIF(频域抽取法)、Cooley-Tukey和Winograd等。
对付2n傅立叶变换,Cooley-Tukey算法可导出DIT和DIF算法。
本文利用的基本思想是Cooley-Tukey算法,即将高点数的傅立叶变换通过多重低点数傅立叶变换来实现。
虽然DIT与DIF有差别,但由于它们在实质上都是一种基于标号分解的算法,故在运算量和算法繁芜性等方面完备一样,而没有性能上的利害之分,以是可以根据须要任取个中一种,本文紧张以DIT方法为工具来谈论。

N=8192点DFT的运算表达式为:

式中,m=(4n1+n2)(2048k1+k2)(n=4n1+n2,k=2048k1+k2)个中n1和k2可取0,1,...,2047,k1和n2可取0,1,2,3。

由式(3)可知,8k傅立叶变换可由4×2k的傅立叶变换构成。
同理,4k傅立叶变换可由2×2k的傅立叶变换构成。
而2k傅立叶变换可由128×16的傅立叶变换构成。
128的傅立叶变换可进一步由16×8的傅立叶变换构成,归根结底,全体傅立叶变换可由基2、基4的傅立叶变换构成。
2k的FFT可以通过5个基4和1个基2变换来实现;4k的FFT变换可通过6个基4变换来实现;8k的FFT可以通过6个基4和1个基2变换来实现。
也便是说:FFT的基本构造可由基2/4模块、复数乘法器、存储单元和存储器掌握模块构成,其整体构造如图1所示。

图1中,RAM用来存储输入数据、运算过程中的中间结果以及运算完成后的数据,ROM用来存储旋转因子表。
蝶形运算单元即为基2/4模块,掌握模块可用于产生掌握时序及地址旗子暗记,以掌握中间运算过程及末了输出结果。

2、形运算器的实现

基4和基2的旗子暗记流如图2所示。
图中,若A=r0+j*i0,B=r1+j*i1,C=r2+j*i2,D=r3+j*i3是要进行变换的旗子暗记,Wk0=c0+j*s0=1,Wk1=c1+j*s1,Wk2=c2+j*s2,Wk3=c3+j*s3为旋转因子,将其分别代入图2中的基4蝶形运算单元,则有:

A′=[r0+(r1×c1-i1×s1)+(r2×c2-i2×s2)+(r3×c3-i3×s3)]+j[i0+(i1×c1+r1×s1)+(i2×c2+r2×s2)+(i3×c3+r3×s3)]?? (4)

B′=[r0+(i1×c1+r1×s1)-(r2×c2-i2×s2)-(i3×c3+r3×s3)]+j[i0-(r1×c1-i1×s1)-(i2×c2+r2×s2)+(r3×c3-i3×s3)] (5)

C′=[r0-(r1×c1-i1×s1)+(r2×c2-i2×s2)-(r3×c3-i3×s3)]+j[i0-(i1×c1+r1×s1)+(i2×c2+r2×s2)-(i3×c3+r3×s3)](6)

D′=[r0-(i1×c1+r1×s1)-(r2×c2-i2×s2)+(i3×c3+r3×s3)]+j[i0+(r1×c1-i1×s1)-(i2×c2+r2×s2)-(r3×c3-i3×s3)]??(7)而在基2蝶形中,Wk0和Wk2的值均为1,这样,将A,B,C和D的表达式代入图2中的基2运算的四个等式中,则有:

A′=r0+(r1×c1-i1×s1)+j[i0+(i1×c1+r1×s1)]?? (8)

B′=r0- (r1×c1-i1×s1)+j[i0-(i1×c1+r1×s1)]  (9)

C′=r2+(r3×c3-i3×s3)+j[i0+(i3×c3+r3×s3)]?? (10)

D′=r2-(r3×c3-i3×s3)+j[i0-(i3×c3+r3×s3)]?? (11)

在上述式(4)~(11)中有很多类同项,如i1×c1+r1×s1和r1×c1-i1×s1等,它们仅仅是加减号的不同,其构造和运算均类似,这就为简化电路供应了可能。
同时,在蝶形运算中,复数乘法可以由实数乘法以一定的格式来表示,这也为设计复数乘法器供应了一种实现的路子。

以基4为例,在其运算单元中,实际上只需做三个复数乘法运算,即只须打算BWk1、CWk2和DWk3的值即可,这样在一个基4蝶形单元里面,最多只须要3个复数乘法器就可以了。
在实际过程中,在不提高时钟频率下,只要将时序掌握好?煴憧衫?用流水线(Pipeline)技能并只用一个复数乘法器就可完成这三个复数乘法,大大节省了硬件资源。

3、FFT的地址

FFT变换后输出的结果常日为一特定的倒序,因此,几级变换后对地址的掌握必须准确无误。

倒序的规律是和分解的办法密切干系的,以基8为例,其基本倒序规则如下:

基8可以用2×2×2基2变换来表示,则其输入顺序则可用二进制序列(n1 n2 n3)来表示,变换结束后,其顺序将变为(n3 n2 n1),如:X?煟埃保保?→ x?煟保保埃牐?即输入顺序为3,输出时顺序变为6。

更进一步,对付基16的变换,可由2×2×2×2,4×4,4×2×2等形式来构成,相对付不同的分解形式,每每会有不同的倒序办法。
以4×4为例,其输入顺序可以用二进制序列(n1 n2 n3 n4)来表示变换结束后,其顺序可变为((n3 n4)(n1 n2)),如:X?煟埃保保保?→ x?煟保保埃保牎<词淙胨承蛭?7,输出时顺序变为13。

在2k/4k/8k的傅立叶变换中,由于要经由多次的基4和基2运算,因此,从每次运算完成后到进入下一次运算前,应对运算的结果进行倒序,以担保运算的精确性。

4、旋转因子

N点傅立叶变换的旋转因子有着明显的周期性和对称性。
其周期性表现为:FFT之以是可使运算效率得到提高,便是利用FFT之以是可使运算效率得到提高,便是利用了对称性和周期性把长序列的DFT逐级分解成几个序列的DFT,并终极以短点数变换来实现长点数变换。

根据旋转因子的对称性和周期性,在利用ROM存储旋转因子时,可以只存储旋转因子表的一部分,而在读出时增加读出地址及符号的掌握,这样可以精确实现FFT。
因此,充分利用旋转因子的性子,可节省70%以上存储单元。

实际上,由于旋转因子可分解为正、余弦函数的组合,故ROM中存的值为正、余弦函数值的组合。
对2k/4k/8k的傅立叶变换来说,只是对一个周期进行不同的分割。
由于8k变换的旋转因子包括了2k/4k的所有因子,因此,实现时只要对读ROM的地址进行掌握,即可实现2k/4k/8k变换的通用。

5、存储器的掌握

因FFT是为时序电路而设计的,因此,掌握旗子暗记要包括时序的掌握旗子暗记及存储器的读写地址,并产生各种赞助的指示旗子暗记。
同时在打算模块的内部,为担保高速,所有的乘法器都须始终保持较高的利用率。
这意味着在每一个时钟来临时都要向这些单元输入新的操作数,而这统统都须要掌握旗子暗记的紧密合营。

为了实现FFT的流形运算,在运算的同时,存储器也要吸收数据。
这可以采取乒乓RAM的方法来完成。
这种办法决定了实现FFT运算的最大韶光。
对付4k操作,其吸收韶光为4096个数据周期,这样?煟疲疲缘淖畲笤怂闶奔渚褪牵矗埃梗陡鍪?据周期。
其余,由于输入数据因此一定的时钟为周期依次输入的,故在进行内部运算时,可以用较高的内部时钟进走运算,然后再存入RAM依次输出。

为节省资源,可对存储数据RAM采取原址读出原址写入的方法,即在进行下一级变换的同时,首先应将结果回写到读出数据的RAM存贮器中;而对付ROM,则应采取与运算的数据相对应的方法来读出存储器中旋转因子的值。
在2k/4k/8k傅立叶变换中,要实现通用性,掌握器是最紧张的模块。
2k、4k、8k变换具有不同的内部运算韶光和存储器地址,在设计中,针对不同的点数应设计不同的存储器存取地址,同时,在完成变换后,还要对开始输出有用旗子暗记的时候进行指示。

6、硬件的选择

本设计的硬件实现选用的是现场可编程门阵列(FPGA)来知足较高速率的须要。
本系统在设计时选用的是ALTERA公司的STRATIX芯片,该芯片中包含有DSP单元,可以完成较为耗费资源的乘法器单元。
同时,该器件也包含有大量存储单元,从而可担保旋转因子的精度。
除了一些专用引脚外,FPGA上险些所有的引脚均可供用户利用,这使得FPGA旗子暗记处理方案具有非常好的I/O带宽。
大量的I/O引脚和多块存储器可使设计得到优胜的并行处理性能。
其独立的存储块可作为输入/事情存储区和结果的缓存区,这使得I/O可与FFT打算同时进行。

在实现的韶光方面,该设计能在4096个时钟周期内完成一个4096点的FFT。
若采取10MHz的输入时钟,其变换韶光在200μs旁边。
而由于最新的FPGA利用了MultiTrack互连技能,故可在250MHz以下频率稳定地事情,同时,FFT的实现韶光也可以大大缩小。

FFT运算结果的精度与输入数据的位数及运算过程中的位数有关,同时和数据的表示形式也有很大关系。
一样平常来说,浮点办法比定点办法精度高。
而在定点打算中,存储器数据的位数越大,运算精度越高,利用的存储单元和逻辑单元也越多。
在实际运用中,应根据实际情形折衷选择精度和资源。
本设计通过MATLAB进行仿真证明:实在现的变换结果与MATLAB工具箱中的FFT函数比较,信噪比可以达到65db以上,完备可以知足一样平常工程的实际运用哀求。

算法设计实现基于FPGA来讲是一个很主要的设计方向,FPGA的上风侧重于数据的并行打算和运行,可反复进行芯片的设计和察处;目前,行业内对FPGA+DSP设计方向及FPGA+ARM方向的工程师给予高新聘请招聘;这也解释一个问题,基于软件和硬件协同来开拓一个整体的项目已经是一个趋势。

相关文章

免费造网站,开启您的在线事业之旅

随着互联网的飞速发展,越来越多的企业、个人开始重视在线平台的搭建。在这个信息化时代,拥有一家属于自己的网站,已经成为展示企业形象、...

通讯 2025-01-08 阅读0 评论0

入户门代码,解码家居安全与舒适的艺术

入户门,作为家庭的第一道防线,承载着守护家园、彰显身份的双重使命。在我国,入户门代码已成为衡量家居安全与舒适的重要标准。本文将从入...

通讯 2025-01-08 阅读0 评论0