ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:311.01KB ,
资源ID:10121856      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10121856.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的FFT算法.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的FFT算法.docx

1、基于FPGA的FFT算法基于FPGA的可扩展高速FFT处理器的设计与实现来源:电讯技术作者:刘晓明时间:2007-07-12发布人:卢春妙本文提出了基于FPGA实现傅里叶变换点数可灵活扩展的流水线FFT处理器的结构设计以及各功能模块的算法实现,包括高组合数FFT算法的流水线实现结构、级间混序读/写RAM地址规律、短点数FFT阵列处理结构以及补码实现CORDIC算法的流水线结构等。利用FPGA实现的各功能模块组装了64点FFT处理器。从其计算性能可知,在输入数据速率为20 MHz时,利用此结构实现的FFT处理器计算1024点FFT的运算时间约为52s。 一、引言 DFT(离散傅里叶变换)作为将信

2、号从时域转换到频域的基本运算,在各种数字信号处理中起着核心作用,其快速算法FFT(快速傅里叶变换)在无线通信、语音识别、图像处理和频谱分析等领域有着广泛的应用。用大规模集成电路FPGA(现场可编程门阵列)来实现FFT算法时,需要重点考虑的不再是算法运算量,而是算法的复杂性、规整性和模块化,因为算法的简单性和规整性将更适合大规模集成,更方便于版图设计,而算法的模块化更有利于FFT处理器的灵活扩展。 组合数FFT算法和CORDIC(坐标旋转数字计算机)算法结合起来,在计算长点数、可扩展FFT时具有较大的优越性1,2。而面向高速、大容量数据流的FFT的实时处理,可以通过VLSI(超大规模集成电路)器

3、件的并行处理或多级流水线处理等来达到。特别是多级流水线处理的FFT结构使得基于FPGA器件的FFT处理器完成不同点数的FFT计算时可以通过增减模块级数很容易地实现。 二、组合数N=r1r2点混合基FFT原理 计算N点DFT: 式中k=0,1,N-1。 若N=r1r2的组合数,可将n(nN)表示为式(2)的意义在于,计算组合数N=r1r2点DFT,等价于先求出r 2组r 1点的DFT,其结果经过对应旋转因子的相位旋转后,再计算r1组r2点的DFT。实际应用中,DFT往往用它的快速算法FFT实现,因而式(2)中的r1点DFT和r2点DFT都用r1点FFT和r2点FFT实现。 三、可扩展FFT处理器

4、实现结构根据式(2)的FFT算法原理设计FFT处理器的可扩展结构如图1所示。采用流水线模块化级联结构,把FFT处理器划分成短点数FFT、级间混序RAM和相位旋转等功能模块,设计的各功能模块可以重复利用,通过复用或增减各功能模块可以灵活改变FFT处理器的计算规模,而且不增加设计量。在图1结构中,当Li1时,就演变成了基2 FFT;当Li2时,就演变成了基4 FFT;同理,当LiLj时,就演变成了高组合数的混合基FFT。1.短点数FFT阵列结构Tukey算法结构实现时,有大量的复数乘法实际上转化为加减运算,所以用阵列结构实现不但具有速度快的优点,而且所用器件资源也减少很多,通过对阵列结构短点数FF

5、T进行时分复用,可以提高运算单元的使用效率。 2.相位旋转运算单元 实现短点数FFT级间相位旋转,采用ROM存储旋转因子与数据复乘的传统方法,不仅涉及乘法运算,而且会消耗大量存储器资源。 利用CORDIC算法实现组合数FFT级间数据的相位旋转,把乘法转化成加减法运算,适合FPGA的大规模集成。可以设计出统一结构的CORDIC处理器模块,重复利用于不同级间实现相位旋转,而且其控制逻辑非常简单。 (1)CORDIC算法原理 复数P=x+jy旋转角度得到Q的表达式:如果旋转角度可以分解成n个小角度i之和,即:公式:(2)CORDIC处理器结构设计 本文提出了一种流水线CORDIC处理器结构的解决方案

6、。实现式子(4)的迭代运算时采用补码移位和补码加减运算,可以减少大量求补运算,其迭代结构如图2所示。 前者在于左移补零的位数的不同,这样,只需要改变n0k0的放大倍数(改变左移低位补零的位数),就可以把同一方向向量功能模块级联到图1 FFT处理器的不同级间来计算CORDIC处理器的MSBi,这就大大地减小了重复设计,其迭代结构如图3所示。 3.RAM结构及其级间数据混序用流水线读/写RAM地址发生器的设计 设计的RAM,每个存储单元为32 bit,高16位为复数的实部,低16位为复数的虚部。输入输出数据接口用RAM设计为乒乓结构,用两块相同的RAM交替读出或交替写入数据,这样就放宽了对I/O操

7、作速度的要求,使得外围电路可以不必工作于FPGA系统时钟。 级与级之间数据混序用RAM设计为读/写RAM,对RAM同一存储单元用两个时钟完成一次读/写操作,即用流水线读/写同一块RAM来实现级与级之间的数据混序。此结构取代了用两块RAM完成数据混序的乒乓结构的传统方法,不涉及存储器之间的读写切换,控制逻辑非常简单,而且消耗的存储器资源节省一半,这是实现结构可灵活扩展的高速FFT处理器的关键和难点。可以通过理论推导,求得第i级FFT与第i-1级FFT级间混序用RAM的奇次读/写地址为 的基础上向左循环移位,位长为Li-Li-1位;同时,后者又表示在前者的基础上向左循环移位,位长为Li-Li-1位

8、,从而形成地址的循环移位规律。把Li-1=Li和Li-1Li两种情况统一起来,即Li-1=Li时,Li-Li-1=0,不用循环移位,只需要计数器的高Li-1位和低Li-1位进行交替。利用此地址发生规律,可以设计基于图1结构的基2、基4等任意基x FFT以及混合基FFT级间数据混序用流水线读/写RAM地址发生器。 4.842点组合数FFT处理器的实验结果及其分析 我们利用FPGA实现的各功能模块按图1实现结构组装了842点组合数FFT处理器,通过仿真验证了其设计的正确性后,又在FPGA实验板上对它进行了硬件验证,其实验验证平台如图4所示。 硬件验证时采取的实验方法是,用相同的抽样频率fs等间隔地

9、抽取不同频率单频正弦信号相同点数64点,即固定FFT的频率分辨率fr,利用设计的64点FFT处理器计算其幅度谱,观察其幅度谱中直流分量谱线和谐波分量谱线间隔大小的变化,把实验结果和理论分析结果进行对照,以确认FFT处理器工作的正常与否。 系统时钟工作在 40.861 MHz 时,抽样频率为 40.861/2=20.4305 MHz,抽样周期为1/20.4305 MHz=48.9 ns,抽取64个点的时间是48.9643.13s。因为每个采样数据间隔时间是48.9s,所以用设计的流水线方式工作的64点FFT处理器计算其幅度谱的谱线间隔也为48.9 ns。当输入单频正弦信号的频率约为638.454

10、 kHz时,其周期为1/638.454 kHz1.567s。 用20.4305 MHz频率抽样,3.13s时间内刚好在正弦信号的2个周期内抽取64点,输入单频正弦信号的频率是频率分辨率319.227 kHz的2倍,直流分量为幅度谱的第1根谱线,一次谐波分量为幅度谱的第3根谱线,其理论计算结果波形如图5所示,实验测试结果波形及其的局部放大波形如图6和图7所示。 从示波器上可以看出,横坐标单元格间隔为1s,FFT变换周期间隔约为3格,即约为3s,抽取了信号波形的2个周期,64点FFT计算时间也约为3s。 输入单频正弦信号的频率是频率分辨率319.227 kHz的2倍,直流分量为幅度谱的第1根谱线,

11、一次谐波分量为幅度谱的第2根谱线。由于幅度谱的谱线间隔为48.9 ns,也就是说,直流分量和一次谐波分量间隔约为100 ns。从示波器上可以看出,横坐标单元格间隔为100 ns,直流分量和一次谐波分量间隔约为100 ns,和理论分析结果一致。 四、结论 本文以高组合数混合基DFT算法为基础,设计并用FPGA实现了变换点数可灵活扩展的流水线FFT处理器。输入/输出数据速率为20 MHz时,读/写RAM工作在40 MHz时钟,计算出1 024点FFT的运算时间约为52s。本设计采用模块化设计结构,便于系统调试和实现,而且各设计模块可以重复利用,避免重复相同的设计,从而缩短芯片设计开发时间,更易于F

12、FT处理器的结构扩展。整个FFT设计结构新颖,实现容易,具有一定实用价值。用FPGA实现FFT算法作者: 时间:2008-01-11来源:电子产品世界 浏览评论引言DFT(Discrete Fourier Transformation)是数字信号分析与处理如图形、语音及图像等领域的重要变换工具,直接计算DFT的计算量与变换区间长度N的平方成正比。当N较大时,因计算量太大,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。快速傅立叶变换(Fast Fourier Transformation,简称FFT)使DFT运算效率提高12个数量级。其原因是当N较大时,对DFT进行了基4和基2分解运算

13、。FFT算法除了必需的数据存储器ram和旋转因子rom外,仍需较复杂的运算和控制电路单元,即使现在,实现长点数的FFT仍然是很困难。本文提出的FFT实现算法是基于FPGA之上的,算法完成对一个序列的FFT计算,完全由脉冲触发,外部只输入一脉冲头和输入数据,便可以得到该脉冲头作为起始标志的N点FFT输出结果。由于使用了双ram,该算法是流型(Pipelined)的,可以连续计算N点复数输入FFT,即输入可以是分段N点连续复数数据流。采用DIF(Decimation In Frequency)-FFT和DIT(Decimation In Time)-FFT对于算法本身来说是无关紧要的,因为两种情况

14、下只是存储器的读写地址有所变动而已,不影响算法的结构和流程,也不会对算法复杂度有何影响。算法实现的可以是基2/4混合基FFT,也可以是纯基4FFT和纯基2FFT运算。傅立叶变换和逆变换对于变换长度为N的序列x(n)其傅立叶变换可以表示如下:式()其中,W=exp(-2/N)。 当点数N较大时,必须对式(1)进行基4/基2分解,以短点数实现长点数的变换。而IDFT的实现在DFT的基础上就显得较为简单了:式()由式(2)可以看出,在FFT运算模块的基础上,只需将输入序列进行取共轭后再进行FFT运算,输出结果再取一次共轭便实现了对输入序列的IDFT运算,因子1/N对于不同的数据表示格式具体实现时的处理方式是不一样的。IDFT在FFT的基础上输入和输出均有一次共轭操作,但它们共用一个内核,仍然是十分方便的。基4和基2基4和基2运算流图及信号之间的运算关系如图1所示:(a)基蝶形算法 (b)基蝶形算法以基4为例,令A=r0+j

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

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