找回密码
 注册
关于网站域名变更的通知
查看: 237|回复: 1
打印 上一主题 下一主题

基于FPGA的专用信号处理器设计和实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-23 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
摘 要:本文介绍基于FPGA、用VHDL语言编程实现矢量脱靶量测量专用信号处理器的方法。有效利用FPGA片内硬件资源,无需外围电路,高度集成,实现了对复数数据进行去直流、加窗、512点FFT和求模平方运算。4 q1 u7 i. |2 ]  J0 K) _
关键词:512点FFT;FPGA;蝶形运算
4 E) y& W, V: c2 q8 c8 ~

前言
! n8 s; Y4 X! X  V2 W矢量脱靶量测量系统中,信号处理电路模块的主要任务是完成目标检测、数据存储以及给其它单元控制信号。系统所进行的目标检测需要计算信号的功率谱,所以先要对采集到的多通道(8路)数据按512点为一帧,作FFT处理,得到其频谱。为了监测接收机工作状态,需要在频域用恒虚警的方法,判断各路接收通道是否正常。除此之外,还需要对数据进行去直流、加窗的初始化处理,FFT结果再进行求模平方、累加运算,结果以FIFO输出。+ U% v& E0 U* V: |6 W
选择用FPGA完成上述功能有诸多优点。首先,FPGA实现FFT运算是硬件处理,采用多个硬件乘法器、加法器,运算周期短,加上内部集成的大量块RAM可高速访问,所以速度大大提高。其次,FPGA片内逻辑资源丰富,可用的寄存器、锁存器、查找表和多路数据选择器等,能够实现硬件流水结构。这样多种运算可同时流水进行,减少了中间等待时间,整体速度大幅提高。再次,用硬件处理数据时延固定,可准确预测。# X# |1 B1 I  B! V& t5 J4 }
当然,FPGA也有不足。在FPGA内设定的数据长度相对固定,不够灵活,如果为实现高精度而采用浮点运算,则设计复杂,速度会降低,而且硬件开销大。用“块浮点”算法,可以很好地兼顾高速和高精度,并且硬件实现和控制相对简单,弥补了FPGA这一不足。

各运算单元算法和实现8 c2 y/ q4 d6 W8 a
如图1所示,信号处理器共包括4大部分:去直流、加窗的预处理单元,FFT运算单元,模平方累加与检测单元,FIFO输出单元。每个单元都分配有存储器来存储中间结果,它们是由FPGA中的块RAM生成的,不占用逻辑资源,而且访问快速。
- @& X% F9 D! Q! d" O# Q" Z2 M  x+ U预处理单元/ m" m* t5 r4 C0 ~( G1 |/ g4 t
如图2所示,预处理单元首先读入控制单元,在收到启动信号后,产生读信号和读地址,读取外部数据到内部存储器R、I,同时数据送入累加单元求和,移位后得到平均值,也就是直流分量。然后,在读取数据完毕时,读入控制单元启动加窗运算控制单元,读取原始数据和窗函数,这时原始数据减掉直流分量后,与窗函数相乘,就得到去直流和加窗后的结果,为FFT单元作好准备。
. ^' @5 P3 F; P% j2 C1 WFFT运算单元; V# W0 _; Q# H$ z8 J5 B) n/ s
如图3所示,FFT运算单元主要包括蝶形运算、读写控制、块浮点运算、数据存储R、I和旋转因子存储单元。以下分别介绍。
' [/ _- p, X0 ]0 P  a蝶形运算单元/ m# D- a% |/ F; H
时域抽样(DIT)的基-2蝶型运算算法可以表示为:
9 m2 d2 j8 `, j( M2 u: J( |2 S. Y1 p  f% ~& D% C9 j
其中复乘运算可表示为:

% F$ d& Y) y) e* ~/ F2 @. K
由蝶形运算算法公式可以看出一个基-2蝶形运算要进行一个复乘、两个复加。由复乘运算公式可知:若在一个时钟周期内实现复乘,需4个实数乘法器和2个实数加法器。因为这里采用的是Xilinx公司的VirtexII系列FPGA,内部有硬件乘法器,不占用逻辑资源,因此为了简化结构和提高系统的稳定性,采用4乘法器的直接实现结构(见图4)。
/ h: c9 S' Z8 ], L读写控制
( W( @4 O+ w% F: \1 j- D; _FFT读写控制单元负责产生FFT运算过程、各个阶段RAM的读写信号和地址信号,以保证各级运算数据的正确调用和存储。此外,还需要协调各部分的时序关系。因为按时间抽取的FFT是混序,在实际运算中,直接将输入数据按原位运算要求的“乱序”存放是很不方便的。因此总是按自然顺序将输入序列存入存储单元,再通过变址运算将自然顺序变换成按时间抽取的FFT算法要求的顺序。变址过程可以用程序安排加以实现。计数器顺序计数(0~511),将计数器的最低位(第‘0’位)取反后,对应位进行交换,就能产生每一级的数据读取地址。同样的,旋转因子的地址是由计数器地址交换后,特定位置零产生的。由于采用原位运算,每级蝶形运算的写地址和抽取地址完全相同。/ X7 ]$ Q4 {' W6 i3 Q
块浮点. F2 [2 i8 s: f
块浮点由“溢出检测”和“指数累加器”组成。如果输入蝶形单元中的数据的实部和虚部是16比特,那么输出数据实部和虚部最大溢出是2比特。所以,每一级蝶形运算中,“溢出检测”根据输出数据的高三位(最高位是符号位)就可以判断溢出情况,由此决定下一级蝶形运算时,如何选择上一级18位结果数据中的16位进入蝶形单元。溢出的位数由指数累加器累加,最后决定FFT运算结果的指数位。
. C# n2 M- ?( a7 |0 Z$ W数据存储" _) d8 R* J% b! V7 \
FFT运算单元先读取预处理结果的实部、虚部,送入蝶形运算单元。第一级结果也会分成实部、虚部存储在本单元的数据存储器中。此后每一级都进行原位操作,最终的结果也存于这两片RAM中。旋转因子事先单独存储在一片512×16bit的RAM中,由控制单元读取。2 ~, i9 k% U" H
模平方累加和检测单元$ Q' J/ w8 m3 Z/ N1 g0 V
FFT运算结束后,会启动模平方累加和检测单元。这部分主要由模平方累加控制、接收状态检测、累加单元和存储器构成,如图5所示。
/ K. s% w8 ?, V4 |6 c* m控制单元负责协调各部分工作,包括读取FFT结果,送给两个乘法器和一个加法器进行模平方运算,然后把结果送到累加存储器;在参考频点到达时刻启动状态检测单元。在每一路FFT结果出现时,锁存当前的指数位和累加单元的指数位。需要注意的是,FFT的结果是逆序存储,所以读取的时候需要变换地址。
) r0 G+ c3 ~6 D  Z* N+ ?2 o接收状态检测单元的功能是根据模平方结果,在频域用恒虚警的算法来判断各个通道中相位参考信号是否正常接收。因为接收的相位参考信号是实正弦,所以每个通道的512点FFT结果中信号频点是对称分布的。因此恒虚警检测选择用对称频点的模平方均值作为信号功率,信号频点前后各64个噪声点的模平方均值作为噪声功率,信噪比(SNR)门限定为18dB(64倍)。即
" `( Z1 Y  b2 h7 x7 [和 (X(n) +X(512-n))/2比较,其中n=n1,n2,n3,是三个信号频点。如果其中有两个都超过门限,则认为接收机的这一通道正常工作。判断得到的每一通道的状态,都锁存在寄存器中。一方面从I/O输出,另一方面作为模平方累加的使能信号。如果通道正常,则累加这一通道的值,否则不累加。因为一旦通道出现问题,接收噪声会被大幅放大,这将严重影响模平方累加总的检测信噪比性能,会造成整个数据采集的失败。
$ y( G' l6 e) F9 n; b; o完成上述功能,用到四个累加器和一个比较器。累加器分别累加3个频点信号和1个噪声信号,使能端由模平方控制单元给出,保证正确频点的数据被累加。比较器同时比较三个频点的信号和门限,给出最终比较结果。9 K+ y/ S2 Y, X( Q/ N7 i& _3 g! ?; X
模平方累加单元是求多通道的模平方和。由于采用了块浮点,每一通道512点FFT的指数位都可能不相同,所以需要将FFT结果的指数位和累加单元的指数位比较,以大的一个作为基准,右移另一个,对齐后相加,并且保存大的指数位,作为累加结果的指数位。4 h8 ~, k1 e3 A" S" r$ `  c) a  l
FIFO输出单元
) ?2 }) d% ^6 j0 b3 f用异步FIFO作为结果输出,使用简单,而且可以节省地址线,减少PCB板的难度。Xilinx的集成工具ISE中的Corgen IP可以把FPGA内部的块RAM生成异步FIFO。这里采用宽度32位,深度1023的FIFO。当512点模平方累加结果存入FIFO时,FIFO产生半满信号,通知外部读取。需要注意的是,这里的FIFO是用读时钟和输出使能控制,如果外接读信号和片选,那么在第一个读周期,FIFO输出的是缓冲区里的数据,而不是实际第一个数据。之后的一个周期才会输出实际第一个数据。

性能测试
2 T  e$ m( v: V: u- l+ l  C/ G% q用实际采集到的8通道数据做测试。所加的窗函数是汉明窗,“X”号代表的点是在MATLAB中用双精度浮点运算得到的结果,实线描绘的是用处理器运算得到的结果。由图6可以看出,采用块浮点的算法可以保证足够的运算精度。( F3 B: o- i2 D% i4 I# `8 t  V
用ISE综合布线后,系统的最高工作频率可达到70MHz,完成8路512点复数FFT、模平方累加以及结果输入到FIFO的运算执行总时间为732ms。达到了高速处理的要求。

3 _5 n; i' H1 Y8 @8 ]; s6 C

该用户从未签到

2#
发表于 2020-3-23 11:12 | 只看该作者
为了监测接收机工作状态,需要在频域用恒虚警的方法,判断各路接收通道是否正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 18:37 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表