FPGA片内FFT运算


ON-FPGA FFTON-FPGA FFTON-FPGA FFTON-FPGA FFTON-FPGA FFTON-FPGA FFTON-FPGA FFTON-FPGA FFT

背景

AlazarTech已经开发了一种完整的基于FPGA的快速傅里叶变换(FFT)引擎,用于光学相干层析成像(OCT)等应用

目前拥有FPGA片内FFT模块的采集卡有 ATS9373ATS9360ATS9371ATS9350 和 ATS9351

在板载FPGA中执行FFT计算的主要优点是它实际上消除了下游信号处理的瓶颈。用户不再需要使用强大的CPU甚至耗电的GPU来执行FFT运算。

在进行FFT计算之前,用户可以下载一个与时域数据相乘的复数窗口函数。一个复数窗口函数允许用户结合一个窗口函数(通常是一个实函数)和一个复数色散补偿函数为他们特定的光学系统。

FPGA上FFT模块的输出是FFT的幅值或其对数值。输出数据格式可以是单精度浮点数,也可以是32位、16位或8位整数。所有这些都可通过用户调用高级API可编程实现。不需要FPGA设计。

FFT长度也是用户可编程的,ATS9373, ATS9360ATS9371采集卡最长可达4096点,ATS9350ATS9351采集卡可达2048点。用户可以选择较短的长度,只要是2的幂就行,例如1024或512。

包含FFT运算的FPGA模块也可以同时输出FFT数据和时域数据。这对于用户验证AlazarTech的FFT输出是非常有用的,可以与他们自己在时域数据上的计算结果作比较。

ATS-SDK完全支持FPGA片内FFT运算,包括各种编程环境的示例程序,显示如何设置和收集FFT数据。

PRE-FFT模块

Pre-FFT模块包括数据缓冲、零填充(如果必要)和ADC数据与复数窗口函数相乘。

该模块检测提供给每个触发器的数据点的数量是否为2的幂。如果不是,则补充零值数据点,直到数据点数量为2的幂。例如,如果激光只能为每个触发器提供1352个有效数据点, 那么数据将在1353到2048点之间进行零填充,因此可以运行2048点FFT。

在开始数据采集之前,用户会下载一个窗口函数。AlazarTech API支持生成最常用的窗口函数。注意,窗函数长度必须与有效数据点的数量相同,如在上面的例子中为1352。

如果用户想要使用离散补偿函数,他们必须首先创建这个复数函数(基于他们的特定需求),在调用适当的API函数将其下载到主板之前将其与窗口函数相乘。

Pre-FFT模块的输出是一个12位的复向量,输入到FFT模块用于下游计算。

ON-FPGA FFT
PRE-FFT MODULE BLOCK DIAGRAM
CLICK TO ENLARGE IMAGE

FFT模块

FFT模块利用FPGA资源(逻辑、乘法器和内存)实现基于整数的快速傅里叶变换算法。

应该注意的是,即使输入数据是12位宽,FFT输出的位宽也是26位。这种位数增长是FFT计算过程中各种乘法的结果。

以下是FPGA上FFT可以运行的最大速率:

PRODUCT
FFT CALCULATIONS PER SECOND
975,000 x 4096 point FFT
250,000 x 4096 point FFT
200,000 x 4096 point FFT
250,000 x 4096 point FFT
100,000 x 2048 point FFT
100,000 x 2048 point FFT

POST-FFT模块

灵活和完全可编程POST-FFT模块使FPGA内的FFT引擎非常容易使用。

POST-FFT模块最基本的功能是计算振幅。这个步骤需要将两个26位整数相乘,得到的位宽为52位。

然后这个52位整数被转换为单精度浮点格式,叫做线性振幅;接下来,我们计算这个浮点振幅的对数值,叫做对数振幅。

一些客户不希望在他们的系统中使用浮点数据。POST-FFT模块有内置的位切片器,可以将线性或对数振幅转化为U32, U16甚至U8格式。该位切片器是用户可编程的,允许高级程序员有效地将数字增益转化为幅度增益输出。

ON-FPGA FFT
POST-FFT MODULE BLOCK DIAGRAM
CLICK TO ENLARGE IMAGE

NPT模式页脚

On_FPGA FFT为AlazarTech采集卡带来了一个额外的功能。可以添加512位NPT页脚到每条记录。NPT页脚包含大量有用的数据,如时间戳、连续记录值和(对OCT客户来说最重要的)帧计数值。

帧数对于每帧大小不同的用户非常有用,例如,如果成像系统包含一个速度不恒定的伺服电机,每转的线数(触发数)将随每一帧而改变。

如果用户将帧开始信号连接到AUX I/O连接器,On-FPGA FFT将在每帧开始时增加一个计数,从而得到帧计数值。这个帧计数值包含在每个NPT页脚,所以用户软件可以知道哪行数据属于哪一帧。

处理坏K时钟

为了保持最高的FFT计算速率,每个触发都必须被捕获。虽然这听起来很简单,但在两次扫描之间,激光的k时钟太慢可能会带来问题。

如果时钟太慢,AlazarTech采集卡可能无法获取足够的时钟边来进行重整(在ADC采样时钟周期中指定)。如果采集卡没有重整好,它将无法接受下一个触发,导致丢失下一行数据。

在这种情况下,我们建议用户将 OCT防坏时钟技术 与FPGA片内FFT运算技术同时引入。

在OCT设置中防坏时钟(超出规格的时钟),AlazarTech采集卡将能够迅速地重新配备自己,不会错过任何数据。

FPGA片内FFT的ATS-SDK支持

ATS-SDK 包括关于如何使用FPGA片内FFT技术的示例程序。

用户应该使用示例程序NPT_on-FPGA_FFT作为软件开发的起点。