多路并行FFT算法的FPGA实现技术

2015-10-22 16:39占席春蔡费杨王伟
现代电子技术 2015年19期
关键词:测频

占席春 蔡费杨 王伟

摘 要: 以雷达侦察接收机为应用背景,利用FPGA芯片并行工作的特性,设计一种并行加流水线处理模式的FFT处理器结构,实现宽带数字测频。在2.4 GSPS采样率下,选取基?2频域抽取(DIF)算法,采用每通道512点流水结构FFT、8通道并行处理的设计思路,以达到单通道4 096点FFT的处理效果。在保证分辨率的同时,采样数据能够被实时处理。仿真结果显示,在300 MHz时钟下,FPGA完成4 096个数据的缓存和FFT运算只需要2.1 μs,满足雷达侦察接收机对数据处理速度的要求。

关键词: FFT; 测频; 流水结构; 并行处理模式; FPGA

中图分类号: TN957.51?34 文献标识码: A 文章编号: 1004?373X(2015)19?0033?04

Abstract: Based on the application background of radar reconnaissance receiver and the parallel operation behavior of FPGA chip, an FFT processor structure combining the parallel processing mode with pipeline processing mode was designed to realize the digital frequency measurement of broadband. At the sampling rate of 2.4 GSPS, the radix?2?based decimation in frequency (DIF) algorithm is selected, the design thought of 512?point pipeline structure FFT for each channel and 8?channel parallel processing is adopted to achieve the processing effect of 4 096?point FFT in single channel. The sampling data can be processed in real time while the resolution is ensured. The simulation results show that it only takes 2.1 μs for FPGA to finish the 4 096 data caching and FFT operation at 300 MHz, which can meet the requirements of radar reconnaissance receiver to data processing speed.

Keywords: FFT; frequency measurement; pipeline structure; parallel processing mode; FPGA

0 引 言

传统的数字测频方法有直接测频法,相位推算法、过零检测法、FFT频域算法等。直接测频法精度较低,不适合在硬件上大规模实现,相位推算和过零检测方法对信噪比要求比较高,而FFT频域算法信噪比要求低,适合高密度信号及雷达脉内有频率调制的情况[1],相对于测相,它是一种比较精确的测频方法[2]。与传统DSP测频相比,FPGA数字测频具有易于实现并行算法、精度高、开发周期短、处理速度快等优点[3]。因此本文研究在FPGA上实现FFT频域算法。

1 设计方案

测频系统主要由采集和处理两部分组成,其工作过程如图1所示。系统每缓冲半帧数据开始运算,而且在处理该帧数据的同时,也在缓存下一帧数据。这样,FPGA能够实时处理A/D采集的全部数据,避免信号的漏检,实现对信号的连续处理。图2给出系统的功能框图,图中ADC10D1500是一款具有高性能、低功耗、10 b精度等特性的芯片。在本文的研究中,配置A/D分I和Q两个通道输出数据,采样速率为2.4 GSPS。由于FPGA工作时钟与A/D采样频率不匹配,本文采用8通道并行处理方法,实现高性能FFT处理器。

FPGA完成信号时域到频域的转换如图2所示,包括接收模块,控制模块,时钟模块,512点流水结构FFT模块,乘法模块,8通道输出融合模块,频域输出模块。

接收模块用于接收和传递A/D采集的数据,控制模块负责其他模块的复位和使能,时钟模块输出其他模块的时钟信号。512点流水结构FFT模块用于数据的运算处理,8通道输出融合模块实现最终结果的综合处理,频域输出模块获取信号的功率谱。

FPGA运算的中间结果不经过存储直接流向下一模块,在提高处理速度的同时,节省了存储资源。

2 多路并行FFT分解算法

FPGA工作时钟为300 MHz,分8通道接收A/D采集的数据,每通道的输入以8倍抽取,即[xn1(n)=x(8n+n1),][n1=0,1,2,…,7,][xn1(n)]表示第[n1]通道的第[n]个输入,[x(n)]是A/D采集的第[n]个数据。为保证频率分辨力,并且减少运算量,本文选择对8通道的并行输入进行4 096点FFT处理。

由式(2)的推导可知:在设计4 096点FFT时,需要对每通道数据进行512点FFT处理,然后将每通道输出乘以复数因子[Wk2n14 096]([k2]是第[n1]通道的输出系数),最后进行8通道输出融合,即8点FFT处理。

3 系统设计

3.1 单通道流水结构

该设计采用基?2频域抽取方法,不需要对输入数据倒序处理,简化了地址的控制。图3是单通道512点FFT的流水结构,总共分为9级,每一级主要包括蝶形运算单元、选通模块、基于RAM的移位寄存器、计数器、存储旋转因子的ROM以及使能信号延时模块。endprint

蝶形运算模块是FFT的基本单元,移位寄存器作为每级输入和输出的缓冲器,选通模块控制数据的流向。为了方便,图3中第[n]级的输入①记为[I1n,]输入②记为[I2n,]输入端的寄存器记为[IRn,]输出端的寄存器记为[ORn,]输出①记为[O1n,]输出②记为[O2n]。

第一级开始工作时,[I11]接收数据并将其缓存至深度为256的[IR1]中,[I21]断开。当[IR1]被填满时,即[x(255)]进入[IR1,][I11]断开,[I21]接收数据。这样[IR1]输出的[x(0)]和[I21]接收到的[x(256)]同时进入蝶形单元,经过运算后,蝶形单元上节点的输出流经[O11]进入深度为128的[IR2]中,下节点的输出则放入深度为128的[OR1]中。当[IR2]被填充满时,[OR1]也被填充满,此时流经[O11]的前128个数据全部输出,第二级选通模块发生跳转。

此后通过[O11]的后128个数据将依次到达[I22],与[IR2]的输出一同进入蝶形单元。 同时[OR1]的输出将会流经[O21]到达[I12,]并填充[IR2]的空白位置。当流经[O21]的前128个数据全部输出,[IR2]被新的数据填充满,第二级选通模块再次发生跳转,经过[O21]的后128个数据将依次到达[I22],与[IR2]的输出一起进入蝶形单元。而第一级选通模块在[IR1]为空时就发生跳转,继续缓存下一帧的数据。经过128个周期,该帧数据在第一级中的处理结束,后几级的运算流程与之类似。

选通模块对数据流向的控制较为关键,其状态转移图如图4所示。

(1) 初始状态[S0,]使能信号[enablen]为低,[I1n]断开,[I2n]断开。

(2) 使能信号变高,进入状态[S1,][I1n]连通[O1n-1,][I2n]连通[O2n-1]。

(3) 标志位[flagn]变高,进入状态[S2],[I1n]连通[O2n-1,][I2n]连通[O1n-1]。

(4) 标志位[flagn]变低,进入状态[S1]。

(5) 重复过程(3)。

计数器输出的最高位(MSB)作为选通模块跳转的标志位[flagn]。第一帧数据到达各级的时间不同,因此每级计数器的使能时刻也不同。使能信号[enable1]变高时,数据[x(n)]开始进入第一级。经过256个周期,进入蝶形单元,之后进入下一级。因此延迟单元1需延迟256个周期加上蝶形单元消耗的时间,依次类推,单元[n]需延迟[2562n]个周期加上蝶形单元消耗的周期。

旋转因子按照[W0512]~[W511512]顺序存入ROM中。分析每级旋转因子出现的规律,得到其在ROM中的地址表达式(rom_addr)为[2n-1?c(w-2 ∶ 0),]其中[n]表示级数,[c]是第[n]级计数器的输出,[w]是计数器的位宽。

第九级的两路输出分别按地址递增顺序存入两个深度为256的RAM中,然后轮流读取两个RAM,得到倒序的FFT结果,其对应的系数由倒序计数模块产生。图5给出 FFT的倒序输出,图中xk_index是倒序输出的系数。

由于只有一路数据[x(n),][IR1]在缓冲前半帧数据时,第一级和第二级之间没有数据传递。因此在输出模块中,对两个RAM进行256个周期的写操作之后,会有256个周期的等待,然后继续下一帧数据的写操作,而读操作是连续的。

3.2 八通道输出融合处理

每通道的输出需要乘以复数因子[Wk2n1N,]其中[k2=0,1,2,…,511,]是FFT输出对应的系数;[n1]表示通道数;[N=4 096;][k2?n1]是复数因子在ROM中的地址。模块选取xilinx提供的复数乘法ipcore。

为达到4 096点FFT的效果,在乘以复数因子后,需对8个通道的输出进行融合。图6是融合处理的结构图,其本质是8点全并行结构的FFT。该结构分为3级,包括12个蝶形单元和4个排序单元,节省了存储资源。图7是蝶形单元的RTL图,包括4个加(减)法器,1个复数乘法器,3个触发器。

工作时,12个蝶形单元同时运算,每个时钟周期都会有8路输入和8路倒序输出,每级的8路输出在经过一次排序后送入下一级,避免数据的反复读写。排序过程会消耗一个时钟周期,由于点数较小,在设计排序模块时,可以直接确定上级输出和下级输出的对应关系。一帧数据经过融合模块后就完成了4 096点FFT变换。

3.3 频域输出

为了得到信号的功率谱,方便后续的频率检测,频域输出模块按倒序方式将融合后的8路输出同时写入RAM,然后按照自然顺序从RAM中读出,再经过平方律检波,即取实部和虚部的平方和并依次输出。

4 仿真结果

设定采样频率[fs=2.4]GHz,借助Matlab工具产生中心频率[f0=235]MHz,时长[t=1.707]μs,带宽[B=20]MHz的线性调频信号。

图8是将调频信号作为输入激励的仿真图。DataPar是8通道并行输入,为了更直观,图8中将时域采样信号DataSer以串行方式输出并以模拟格式显示。start是系统的使能信号,rfd信号为高时数据缓存有效。busy信号是FFT运算的状态标志位,其为下降沿时一帧数据的运算结束。

在300 MHz工作时钟下,完成每一帧数据的FFT处理需要638个周期,即2.1 μs,处理速度较快。信号op是输出处理的状态标志,处理结束后op变低,done信号会维持一个周期的高电平,dout是最终的频域输出,freq_k是dout对应的频率系数,图中的波形是线性调频信号的功率谱。

将FPGA内8路融合后的数据导入Matlab,并与Matlab的仿真结果进行对比。在图9中,频率信息主要集中在[k=300][∶]500范围内,图9(a)是LFM信号在Matlab中进行FFT处理后取模的结果,图9(b)是LFM信号经过FPGA处理后取模的结果,两条曲线十分接近。

由于采用定点算法[5]设计,仿真的输入和旋转因子都是转换成整数后参与运算的,存在量化误差。在多级的运算过程中,会因为数据的截尾而产生误差,影响运算的精度。但由于该误差较小,不影响后续频谱的分析和处理。

5 结 语

本文利用FPGA实现多路并行结构的FFT处理器,每通道结构类似,容易扩展,增加级数就能实现更大点数的FFT,缩短了开发周期。由于其运算速度快,能实时处理高速A/D采集的中频数据,适用于宽带信号的实时频谱分析。

参考文献

[1] 童庆为.基于FPGA的数字接收机高精度测频技术[D].西安:西安电子科技大学,2010.

[2] 田京京.基于FPGA的雷达信号测频系统研究[D].武汉:华中科技大学,2011.

[3] 霍志.一种基于FPGA的雷达数字信号处理机设计[D].长沙:国防科技大学,2011.

[4] 江志红.深入浅出数字信号处理[M].北京:北京航空航天大学出版社,2012.

[5] MEYER?BAESE U.数字信号处理的FPGA实现[M].北京:清华大学出版社,2011.

[6] 董晖,毕大平,王冰.宽带数字接收机高速信号处理技术[J].现代防御技术,2005,33(5):50?54.

[7] 王琦.基于FPGA雷达信号数字接收机的实现[D].南京:南京航空航天大学,2008.endprint

猜你喜欢
测频
STM32频率测量误差分析与比较
对某设备低温下测频超差问题的分析和研究
谐振式传感器高精度频率测量技术研究*
瞬时测频接收机自动测试系统的设计与实现
电子侦察测频系统的建模与仿真
瀑布沟水电站调速器齿盘测频的技术改造