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

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

3天内不再提示

简述FPGA的快速傅立叶变换

新机器视觉 来源:国外电子元器件 作者:连冰,宫丰奎,张 2021-05-27 11:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

摘要:在对FFT(快速傅立叶变换)算法进行研究的基础上,描述了用FPGA实现FFT的方法,并对其中的整体结构、蝶形单元及性能等进行了分析。 傅立叶变换是数字信号处理中的基本操作,广泛应用于表述及分析离散时域信号领域。但由于其运算量与变换点数N的平方成正比关系,因此,在N较大时,直接应用DFT算法进行谱变换是不切合实际的。然而,快速傅立叶变换技术的出现使情况发生了根本性的变化。本文主要描述了采用FPGA来实现2k/4k/8k点FFT的设计方法。

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模块,控制模块可用于产生控制时序及地址信号,以控制中间运算过程及最后输出结果。

pIYBAGCvEQWAayI_AAA3NBdajKY531.png

2蝶形运算器的实现

基4和基2的信号流如图2所示。

pIYBAGCvER6AUpFKAACTgGi-k4w094.png

图中,若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)技术并只用一个复数乘法器就可完成这三个复数乘法,大大节省了硬件资源。

3FFT的地址

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以上,完全可以满足一般工程的实际应用要求。

作者:连冰,宫丰奎,张力,李兵兵

编辑:jq

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

    关注

    8

    文章

    1398

    浏览量

    119826
  • 数字信号处理

    关注

    16

    文章

    570

    浏览量

    47501
  • FDT
    FDT
    +关注

    关注

    0

    文章

    5

    浏览量

    9359

原文标题:基于FPGA的快速傅立叶变换

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FPGA开发板TSP的串口通信设计

    本文详细介绍基于Terasic FPGA开发板TSP(又名C5P和OSK)和其板载CP2102N USB-UART桥接芯片的串口通信系统设计与实现。系统采用Verilog HDL编写UART收发控制器,通过CP2102N实现FPGA与PC间的
    的头像 发表于 10-15 11:05 4145次阅读
    基于<b class='flag-5'>FPGA</b>开发板TSP的串口通信设计

    舵机原理简述!

    舵机原理简述 舵机是一种高精度的位置伺服执行机构,广泛应用于机器人关节、无人机舵面控制、航模操控等场景,其核心功能是通过接收控制信号,精确驱动输出轴旋转到指定角度并保持稳定。以下从结构组成、控制
    的头像 发表于 08-22 10:57 1104次阅读

    FFT快速傅里叶变换——方波及其谐波验证

    FFT傅里叶变换是测试中很常用的一个功能,今天给大家分享一下先给示波器一个方波信号,看下它的参数,加一下频率和幅度值,是一个1MHz、5V的方波信号演示过程我们看一下它的FFT信号是什么样的点击
    的头像 发表于 08-13 17:34 882次阅读
    FFT<b class='flag-5'>快速</b>傅里叶<b class='flag-5'>变换</b>——方波及其谐波验证

    如何实现高效双向电能变换

    随着电动汽车、家庭和工商业储能产品快速普及,双向电能变换系统的热度也在不断攀升。作为电网与电池的功率桥梁,双向电能变换系统基于一套硬件电路就能控制电池充放电,实现能量双向流动,相比传统单向变换
    的头像 发表于 07-23 11:40 1267次阅读

    FPGA通信设计常见问答

    FFT(快速傅里叶变换)是离散傅里叶变换(DFT)的高效实现算法,它的核心作用是快速将信号从时域转换到频域,从而简化信号分析和处理的过程。
    的头像 发表于 07-21 16:05 2377次阅读

    WP4000变频功率分析仪能不能测量间谐波?

    时,称为谐波(harmonics);当正弦波分量的频率是原交流信号的频率的非整数倍时,称为分数谐波,也称分数次谐波或间谐波(inter-harmonics)。 通常的谐波测量仪器使用傅立叶变换的方法进行谐波分析,而傅立叶
    的头像 发表于 07-21 11:04 385次阅读
    WP4000变频功率分析仪能不能测量间谐波?

    傅里叶变换的原理及应用

    01什么是傅里叶变换?一句话概括:“把复杂信号拆成多个简单正弦波的叠加。”就像把一道混合光分解成彩虹(七色光),傅里叶变换能把任何波动信号(声音、图像、电磁波等)拆解成不同频率的“正弦波”组合。02
    的头像 发表于 06-30 09:54 4471次阅读
    傅里叶<b class='flag-5'>变换</b>的原理及应用

    FPGA使用Cordic算法求解角度正余弦值

    在进行坐标变换的时候,需要计算角度的正余弦值,而在FPGA中是不能直接进行求解的,需要采用其它的方式进行求解。
    的头像 发表于 06-19 09:54 1149次阅读
    <b class='flag-5'>FPGA</b>使用Cordic算法求解角度正余弦值

    智多晶FPGA设计工具HqFpga接入DeepSeek大模型

    在 AI 赋能工程设计的时代浪潮中,智多晶率先迈出关键一步——智多晶正式宣布旗下 FPGA 设计工具 HqFpga 接入 DeepSeek 大模型,并推出 FPGA 设计专属 AI 助手——晶小助!这是
    的头像 发表于 06-06 17:06 1128次阅读

    进群免费领FPGA学习资料!数字信号处理、傅里叶变换FPGA开发等

    进群免费领FPGA学习资料啦!小编整理了数字信号处理、傅里叶变换FPGA开发等FPGA必看资料,需要的小伙伴可以加小助手(微信:elecfans123)或进 QQ 群:9135011
    发表于 04-07 16:41

    VirtualLab Fusion应用:用于X射线成像的单光栅干涉仪

    –电磁场探测器[用例] •正确设置傅立叶变换傅立叶变换设置–实例讨论[用例] VirtualLab Fusion技术
    发表于 03-21 09:12

    VirtuaLab Fusion:从光线光学到物理光学的无缝转换

    系统建模是由数学上表示为求解器的操作符来表示的。我们用这种方法连接求解器,并且我们称之为场追迹连接求解器。求解器可以在x域和k域工作。傅立叶变换连接了这些域。可以看出,被傅里叶变换的光场显示出低衍射效应
    发表于 03-14 08:54

    无桥PFC变换器综述

    器;Sepic 变换器;Cuk 变换器 0 引言 随着电力电子技术的快速发展和各行各业中的广泛应用,接入电网的电力电子开关电源设备是向电网注入谐波的主要来源,使得电力系统的谐波问题日益严重。谐波的抑制
    发表于 03-13 13:50

    【国产FPGA入学必备】国产FPGA权威设计指南+配套FPGA图像视频教程

    反映紫光同创深耕FPGA技术的创新,帮助读者迅速掌握国产FPGA开发的精髓。 04 适用人群广泛 本书对工程师有良好的指导作用,帮助加快FPGA应用的开发速度,实现工程项目的快速收敛和
    发表于 02-20 15:08

    电力电子中的坐标变换详解

    电力电子中的坐标变换详解 clark变换&park变换
    发表于 02-17 15:28 1次下载