当前位置:首页 > 芯闻号 > 技术解析
[导读]最近很多朋友问小编关于fft原理,所以为增加大家对fft的认识,本文将对fft原理加以讲解。如果你对fft原理具有兴趣抑或正在接触fft原理,都可以参阅本文哦。

最近很多朋友问小编关于fft原理,所以为增加大家对fft的认识,本文将对fft原理加以讲解。如果你对fft原理具有兴趣抑或正在接触fft原理,都可以参阅本文哦。此外,本文还将对基于FPGA的fft算法的硬件实现予以讲解,和小编一起来了解下吧。

一、简介

快速傅里叶变换(FFT)作为计算和分析工具,在众多学科领域(如信号处理、图像处理、生物信息学、计算物理、应用数学等)有着广泛的应用。在高速数字信号处理领域,如雷达信号处理,FFT的处理速度往往是整个系统设计性能的关键所在。

针对高速实时信号处理的要求,软件实现方法显然满足不了其需要。近年来现场可编程门阵列(FPGA)以其高性能、高灵活性、友好的开发环境、在线可编程等特点,使得基于FPGA的设计可以满足实时数字信号处理的要求,在市场竞争中具有很大的优势。

在FFT算法中,数据的宽度通常都是固定的宽度。然而,在FFT的运算过程中,特别是乘法运算中,运算的结果将不可避免地带来误差。因此,为了保证结果的准确性,采用定点分析是非常必要的。

二、FFT算法原理

FFT算法的基本思想就是利用权函数的周期性、对称性、特殊性及周期N的可互换性,将较长序列的DFT运算逐次分解为较短序列的DFT运算。针对N=2的整数次幂,FFT算法有基-2算法、基-4算法、实因子算法和分裂基算法等。这里,从处理速度和占用资源的角度考虑,选用基-4按时间抽取FFT算法 (DIT)。对于N=4γ,基-4 DIT具有log4N=γ次迭代运算,每次迭代包含N/4个蝶形单元。蝶形单元的运算表达式为:

其信号流如图1。式中:A,B,C,D和A′,B′,C′,D′均为复数据;W=e-j2π/N。进行1次蝶形运算共需3次复乘和8次复加运算。N=64 点的基-4DIT信号流其输入数据序列是按自然顺序排列的,输出结果需经过整序。64点数据只需进行3次迭代运算,每次迭代运算含有N/4=16个蝶形单元。

三、FFT算法的硬件实现

3.1 流水线方式FFT算法的实现

为了提高FFT工作频率和节省FPGA资源,采用3级流水线结构实现64点的FFT运算。流水线处理器的结构如图2所示。

每级均由延时单元、转接器(SW)、蝶形运算和旋转因子乘法4个模块组成,延时节拍由方框中的数字表示。各级转接器和延时单元起到对序列进行码位抽取并将数据拉齐的作用。每级延时在FPGA内部用FIFO实现,不需要对序列进行寻址即可实现延时功能。数据串行输入,经过3级流水处理后,串行输出。

转接器有一定的工作规律。例如,当第0级变换做完进入转接器SW1前,先对后三路数据进行一定节拍的延时,延迟节拍分别为4,8,12。为了说明规律,把输入转接器的四路数据按照前后次序进行分组,每4个时钟节拍为1组,共16组,如图3(左)所示。在数据流串行经过转接器SW1时,第0组中的数据保持不变,第1组中的数据与第4组中的数据交换;5不变,2和8交换,3和12交换,6和9交换;10不变,7和13交换,11和14交换,15不变。交换完毕后,前三路数据经过延迟节拍分别为12,8,4的FIFO存储器输出,位置关系如图3所示。

上述转换规律对于SW2也是适用的,只是转接器前后的延时节拍和分组的大小有所不同。

3.2 存储单元

为了实现算法的流水线设计,存储器RAM设计为64×16 b的双端口RAM,即在时钟信号和写控制信号同时为低电平时,从输入总线写入RAM;在时钟信号和读控制信号同时为高电平时,从RAM输出数据。

ROM为17×16 b的ROM,储存经过量化后的旋转因子,旋转因子为正弦函数和余弦函数的组合。根据旋转因子的对称性和周期性,在利用ROM存储旋转因子时,可以只存储旋转因子的一部分。

3.3 运算结构

Radix-4蝶形运算单元是整个FFT处理器中的核心部件。在用Radix-4运算器计算时需要并行输入数据,如果能以并发数据输入的话,则同步性和控制度较好,但实际上常要进行串并之间的转换。存储RAM按单节拍输出16 b位宽数据,选择器不停旋转送入到确定的位置,每4点全部到位后R-4使能有效;然后4个时钟节拍得到有效结果数据,再通过选择器旋转送入到对应存储 RAM中。

复数运算中,对应复数的实部和虚部RAM用同一个地址发生器。地址发生器在进行RAM地址发生时采用两套地址,第一套是计数器按时钟节拍顺序产生的,用于输入数据的存储;第二套是由数据宽度为16 b的ROM产生的,ROM中存放的数据为下级运算所需倒序的序列地址,发生地址给RAM,然后RAM按倒序地址输出下级需要进行运算的数据。

3.4 块浮点结构

数字信号处理系统可分为定点制、浮点制和块浮点制,它们在实现时对系统资源的要求不同,工作速度也不同,有着不同的适用范围。定点制算法简单,速度快,但动态范围有限,需要用合适的溢出控制规则(如定比例法)适当压缩输入信号的动态范围。浮点表示法动态范围大,可避免溢出,但系统实现复杂,硬件需求量大,速度慢。

为了提高精度,并减少复杂度和存储量,采用块浮点结构。块浮点算法是以上两种表示法的结合。这种表示方法是,一组数共用同一个阶码,这个阶码是这组数中最大数的阶码。块浮点算法无需进行额外的指数运算,仅对尾数进行运算即可,其与定点运算一样方便,但需要在每级运算结束后进行本级运算溢出最大位数判断,以对数据块进行块指数调整。在调整时仅保留一位符号位,因而能够充分利用有限位长。这样处理比定点方法扩大了动态范围,并且提高了精度,比浮点运算在速度上有了提高。块浮点结构如图4所示。

以上便是此次小编带来的“fft原理”相关内容,通过本文,希望大家对FFT算法原理和硬件实现具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭