ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于LabVIEW FPGA的2GHz带宽通感一体信号实时处理实战

基于LabVIEW FPGA的2GHz带宽通感一体信号实时处理实战

1. 通感一体信号处理的工程背景与方案选型

1.1 为什么2 GHz带宽的通感信号必须走FPGA

通感一体化(ISAC,Integrated Sensing and Communication)这两年在毫米波频段被讨论得很多,本质上是让同一套射频前端既发通信波形又做目标探测。通信要的是高吞吐、低误码,感知要的是高分辨率、低虚警,这两件事对信号处理链路的要求其实是打架的。通信侧希望波形尽量接近OFDM这种高峰均比但频谱效率高的结构,感知侧则更偏好大带宽、大时宽带宽积的线性调频或者相位编码波形。折中的做法通常是发一套OFDM-Chirp混合帧,接收端把回波和直达波做联合处理。

问题就出在带宽上。2 GHz的瞬时带宽意味着基带采样率至少要跑到2.5 GSa/s以上(考虑20%到25%的过采样余量),I/Q两路加起来就是5 GB/s量级的数据流。这个速率下,任何基于CPU的实时处理方案都会瞬间崩掉——不是算力不够,是数据搬运的路径太长。从ADC到内存再到CPU缓存,中间任何一次DDR往返都会引入几十到上百纳秒的抖动,而通感信号的距离维FFT对时序一致性极其敏感,抖动直接体现为距离像的散焦。

所以这类项目的核心矛盾从来不是"算法有多复杂",而是"数据怎么在正确的时间出现在正确的位置"。FPGA的价值就在这里:它能把ADC采样、数字下变频、抽取滤波、脉冲压缩、多普勒处理这一整条链路全部塞进流水线,数据在片内寄存器之间流动,不经过任何外部存储,延迟是确定的、可预测的。我做过一个对比测试,同样的匹配滤波算法,CPU方案在2 GHz带宽下处理一帧128微秒的数据要花掉接近3毫秒,而FPGA流水线方案从ADC输入到结果输出只有不到8微秒的固定延迟。这个差距决定了系统能不能做实时闭环跟踪。

1.2 LabVIEW FPGA在这个场景里的定位

很多人一听到LabVIEW做FPGA就觉得是"教学玩具",这个印象其实停留在十年前。现在的LabVIEW FPGA模块配合Xilinx(现在是AMD)的Zynq UltraScale+ RFSoC或者Kintex UltraScale系列,完全可以撑起GHz级采样率的实时处理。它的优势不在于性能极限——手写VHDL在资源利用率上确实能再压榨10%到15%——而在于开发迭代速度。通感信号处理里最耗时的往往不是写代码,而是调参数:抽取因子改一下、窗函数换一种、CFAR的门限系数动一动,每次都要重新综合、布局布线、上板验证。LabVIEW FPGA的高层综合加上主机端的交互式调试,能把单次迭代从半天压缩到一两个小时。

这个项目的硬件平台我选的是RFSoC Gen3,因为它把ADC、DAC和FPGA逻辑集成在一颗芯片里,省掉了JESD204B接口那堆麻烦事。2 GHz带宽直接对应RFSoC的Gen3 ADC,采样率可以跑到5 GSa/s,数字下变频在片内完成,输出到FPGA逻辑的基带数据率降到1.25 GSa/s每路。这个数据率下,用LabVIEW FPGA的定点运算库做128点复数FFT,单核时钟跑到400 MHz,资源占用在可接受范围内。

注意:RFSoC的ADC输入带宽和采样率是两个概念。2 GHz指的是瞬时带宽,实际采样率要按奈奎斯特准则留余量。我见过有人把2 GHz带宽直接理解成2 GSa/s采样率,结果混叠严重,距离像全是假目标。

1.3 整体链路的分工与数据流规划

整条处理链我分成三段:射频前端到基带、基带到距离-多普勒域、距离-多普勒域到点云输出。第一段在RFSoC的硬核里完成,包括ADC采样、数字混频、CIC抽取、FIR补偿滤波。第二段在FPGA逻辑里做,核心是脉冲压缩(匹配滤波)和慢时间维FFT。第三段回到主机端,用LabVIEW的视觉与信号处理库做CFAR检测、聚类、跟踪。

数据流的关键节点有三个:ADC输出到DDC的接口、DDC输出到匹配滤波器的接口、匹配滤波结果到DDR的接口。前两个是流式接口,用AXI-Stream协议,位宽64位,时钟400 MHz,理论带宽25.6 Gbps,实际有效带宽大概在18 Gbps左右,足够支撑1.25 GSa/s的复数数据。第三个接口是突发式的,因为慢时间维FFT需要攒够一个CPI(相干处理间隔)的数据才能开始,所以必须走DDR缓存。这里我用的是FPGA片内的UltraRAM加外部DDR4的组合,UltraRAM存当前CPI的中间结果,DDR4存历史帧用于多普勒维处理。

这个分工方案的好处是:流式部分延迟确定,适合做实时脉冲压缩;突发部分吞吐量大,适合做非实时的多普勒积累。两者用乒乓缓冲切换,切换点选在CPI边界,不会丢数据。

2. 核心模块的LabVIEW FPGA实现细节

2.1 数字下变频链的定点化设计

数字下变频是整条链路里第一个吃资源的大户。2 GHz带宽的信号在5 GSa/s采样率下,数字混频的NCO需要至少32位相位累加器才能保证杂散低于-80 dBc。我实际用的是34位累加器,取高18位做正弦查表,查表深度2的18次方,用Block RAM实现,占用大概4个36K BRAM。混频后的数据是复数,实部和虚部各16位,这个位宽是算过的:ADC有效位数12位,混频增益引入3位余量,留1位符号保护,16位刚好。

CIC抽取滤波器的设计有个坑。抽取因子选多少直接决定了后续FIR的负担。我一开始选了8倍抽取,CIC的差分延迟取1,阶数取5,结果通带衰减在0.4倍奈奎斯特频率处已经到了-3.2 dB,后续FIR补偿要跑到64阶才能拉平。后来改成抽取因子4,CIC阶数降到3,通带衰减只有-1.1 dB,FIR补偿32阶就够了。虽然CIC本身资源多了一点,但整体算下来FIR省下来的乘法器更多。

// CIC抽取滤波器参数(LabVIEW FPGA实现) // 抽取因子 R = 4 // 差分延迟 M = 1 // 阶数 N = 3 // 输入位宽 16 bit,输出位宽 18 bit(防止累加溢出) // 积分器部分用18位累加器,梳状部分用18位减法器

FIR补偿滤波器的系数用MATLAB的fdatool生成,定点化到16位,对称结构省一半乘法器。LabVIEW FPGA里用IP核生成,选分布式算法还是乘累加结构要看资源余量。RFSoC的DSP48 slice足够多,我直接用的乘累加,每个时钟处理一个抽头,32阶就是32个时钟周期出一个结果,在400 MHz时钟下相当于80纳秒的延迟,完全可以接受。

实操心得:CIC的位宽增长公式是 B_out = B_in + N * log2(R * M)。这个公式一定要手算一遍,不能靠工具自动推断。我有一次偷懒让LabVIEW自动推位宽,结果它给多了4位,BRAM直接爆掉,综合报错查了半天。

2.2 脉冲压缩的匹配滤波实现

脉冲压缩是通感信号处理的核心。发射的是OFDM-Chirp混合波形,匹配滤波的参考信号就是发射波形的共轭翻转。2 GHz带宽对应距离分辨率7.5厘米,这个分辨率下匹配滤波器的抽头数要覆盖整个脉冲宽度。我用的脉冲宽度是20微秒,在1.25 GSa/s的基带采样率下就是25000个采样点。直接做时域卷积需要25000个乘法器,显然不现实。

频域实现是唯一可行的方案。把接收数据和参考信号都做FFT,点乘之后做IFFT。FFT点数选32768,覆盖25000个有效采样点,剩下的补零。32768点复数FFT在400 MHz时钟下,用基4结构需要大概7级,每级处理时间约20个时钟周期,总共140个时钟周期,也就是350纳秒。这个延迟对于20微秒的脉冲来说完全可以接受。

LabVIEW FPGA里做FFT有两种方式:用Xilinx的FFT IP核,或者用LabVIEW自带的FFT Express VI。IP核性能更好但配置麻烦,Express VI上手快但资源占用高。我选的是IP核,因为32768点的规模下Express VI会吃掉太多DSP48。IP核的配置要注意缩放因子,每级蝶形运算都会引入位增长,如果不做缩放,16位输入经过7级之后会变成23位,后续点乘会溢出。我用的缩放方案是每级右移1位,总共右移7位,输出位宽保持16位,信噪比损失大概0.5 dB,可以接受。

点乘部分要注意参考信号的存储。参考信号是固定的,可以预先算好FFT存在ROM里。ROM深度32768,位宽32位(实部虚部各16位),用Block RAM实现,占用大概16个36K BRAM。点乘用复数乘法器,3个乘法器加5个加法器,LabVIEW FPGA里直接用复数乘法Express VI,综合器会自动优化。

2.3 慢时间维FFT与多普勒处理

慢时间维FFT的目的是提取多普勒频移,进而得到目标的速度信息。一个CPI里我放了64个脉冲,慢时间维就是64点FFT。这个FFT规模小,但数据排列方式很关键。脉冲压缩的输出是按距离门排列的,每个距离门对应一个脉冲。要做慢时间维FFT,必须先把数据转置,让同一个距离门的64个脉冲连续排列。

转置操作在FPGA里做很别扭,因为数据是流式进来的,转置需要缓存整个CPI的数据。我的做法是用UltraRAM做一个64×32768的矩阵,写的时候按脉冲顺序写,读的时候按距离门顺序读。UltraRAM的带宽足够,读写各占一个端口,可以同时进行。写地址由脉冲计数器和距离门计数器共同生成,读地址反过来。这个转置矩阵占用大概8 MB的UltraRAM,RFSoC里够用。

64点FFT用基2结构,6级蝶形,每级32个蝶形运算。LabVIEW FPGA里可以并行做,32个蝶形同时算,一个时钟周期出一级结果,6个时钟周期出全部结果。这个速度下,慢时间维FFT的延迟可以忽略不计。多普勒分辨率由CPI长度决定,64个脉冲、脉冲重复间隔10微秒,CPI就是640微秒,多普勒分辨率1.56 kHz。对应到X波段(10 GHz),速度分辨率大概是0.023 m/s,对于车辆和行人探测足够了。

注意:慢时间维FFT之前一定要做加窗,否则旁瓣会淹没小目标。我用的是汉明窗,主瓣展宽1.3倍,第一旁瓣-42 dB。窗系数存在ROM里,64个16位系数,占用资源可以忽略。

3. 实时处理的时序约束与资源优化

3.1 时钟域划分与跨时钟域处理

整个设计里有三个时钟域:ADC采样时钟5 GHz(RFSoC内部)、FPGA逻辑时钟400 MHz、DDR控制器时钟266 MHz。5 GHz到400 MHz的跨时钟域在RFSoC的硬核里自动完成,不用管。400 MHz到266 MHz的跨时钟域需要手动处理,我用的是异步FIFO,深度512,位宽64位。FIFO的读写指针用格雷码编码,避免亚稳态。

跨时钟域最容易出问题的地方是复位。不同时钟域的复位信号必须同步化,否则会出现一个时钟域已经复位、另一个还在跑的情况,FIFO里的数据就乱了。我的做法是用一个全局复位信号,在每个时钟域里用两级触发器同步,然后生成各自的局部复位。这个细节在LabVIEW FPGA里容易被忽略,因为LabVIEW的框图看起来是并行的,实际上综合出来的电路有明确的时钟域划分。

时序约束是另一个关键点。400 MHz时钟在Kintex UltraScale上属于中等难度,关键路径主要在FFT的蝶形运算和复数乘法器上。我用的约束是周期2.5纳秒,建立时间余量留0.3纳秒,保持时间余量留0.15纳秒。综合报告里如果出现负余量,优先优化FFT的流水线级数,把组合逻辑拆开。LabVIEW FPGA的流水线指示器很好用,直接在框图上显示每个节点的延迟,哪里是瓶颈一目了然。

3.2 资源占用分析与优化取舍

RFSoC Gen3的FPGA逻辑资源大概是930K逻辑单元、4272个DSP48、38 Mb BRAM、22 Mb UltraRAM。我的设计综合下来占用情况如下:

资源类型总资源已用占用率
LUT930K412K44%
FF1860K687K37%
DSP484272218651%
BRAM38 Mb21 Mb55%
UltraRAM22 Mb9 Mb41%

DSP48占用超过一半,主要消耗在匹配滤波的频域点乘和慢时间维FFT上。如果资源紧张,可以把匹配滤波的点乘改成时分复用,用1个复数乘法器分时处理多个频点,代价是处理时间变长。我试过这个方案,32768个频点分32768个时钟周期处理,在400 MHz下就是82微秒,超过了脉冲重复间隔,不可行。所以DSP48的占用是刚性的,省不下来。

BRAM占用55%,主要是FFT的旋转因子ROM和参考信号ROM。旋转因子可以用CORDIC实时计算来省ROM,但CORDIC的精度不如查表,而且会引入额外的延迟。我权衡之后还是保留了查表方案,因为BRAM还有余量。

实操心得:LabVIEW FPGA的综合报告里有一个"Estimated Clock Frequency",这个数字往往比实际能跑到的频率高10%到15%。不要完全信它,一定要看布局布线后的时序报告。我遇到过综合报告说能跑420 MHz,实际布局布线后只有380 MHz的情况,原因是布线拥塞导致关键路径变长。

3.3 实时性验证与延迟测量

实时性验证不能只看仿真,必须上板实测。我的测量方法是在FPGA里埋一个计数器,记录从ADC数据有效到处理结果写DDR的时钟周期数。这个计数器通过AXI-Lite接口读到主机端,换算成时间。实测下来,从ADC输入到脉冲压缩结果输出是312个时钟周期,在400 MHz下就是780纳秒。加上DDC的延迟和DDR写入的延迟,端到端延迟大概1.2微秒。

这个延迟对于通感一体系统来说非常关键。通信侧的解调要在1毫秒内完成,感知侧的点云更新要在10毫秒内完成,1.2微秒的延迟留出了充足的余量。如果延迟超过10微秒,闭环跟踪就会变得迟钝,高速目标的轨迹会出现明显滞后。

延迟测量还有一个坑:LabVIEW FPGA的仿真时间和实际运行时间不是一回事。仿真里一个时钟周期就是理想的一个周期,实际运行中会有时钟抖动、布线延迟、温度漂移。我建议在FPGA里放一个温度传感器,实时监测芯片温度,温度每升高10度,时序余量会减少大概5%。如果余量本来就不多,夏天室外运行可能会出问题。

4. 常见问题排查与实战避坑指南

4.1 数据错位与对齐问题

数据错位是这类项目里最隐蔽的bug。表现是距离像上出现规律的假目标,或者多普勒谱上出现对称的镜像。根本原因通常是I/Q两路的数据没有对齐,或者脉冲压缩的参考信号没有和接收数据对齐。

I/Q对齐的问题出在DDC的CIC滤波器上。CIC的群延迟是(N * (R * M - 1)) / 2个采样点,I路和Q路如果用了不同的CIC实例,群延迟可能不一致。我的做法是I/Q共用同一个CIC控制器,只是数据流分开,这样群延迟严格一致。LabVIEW FPGA里可以用同一个IP核例化两次,但时钟使能要同步。

参考信号对齐的问题更麻烦。匹配滤波的参考信号是发射波形的共轭翻转,理论上应该和接收数据的直达波对齐。但实际系统中,发射和接收之间有电缆延迟、滤波器延迟、ADC延迟,这些加起来可能有几十个采样点。我的做法是在系统初始化时发一个单音校准信号,测出直达波的位置,然后调整参考信号的读取地址。这个校准过程在LabVIEW主机端自动完成,每次上电跑一次,耗时大概200毫秒。

注意:校准信号不能用Chirp,因为Chirp的匹配滤波输出是一个尖峰,但尖峰的位置受多普勒影响。用单音最稳,单音的匹配滤波输出是一个Sinc函数,峰值位置就是延迟位置。

4.2 时序不收敛的排查思路

时序不收敛在400 MHz以上的设计里很常见。LabVIEW FPGA的综合器会给出时序报告,里面标红了关键路径。排查思路是从报告里找到延迟最大的那条路径,看它经过了哪些节点。

最常见的原因是组合逻辑太长。比如复数乘法器,如果直接写ac - bd,综合器会生成一个大的组合逻辑树,延迟可能超过2纳秒。解决办法是插入流水线寄存器,把乘法拆成两级:第一级算ac和bd,第二级做减法。LabVIEW FPGA里可以用"流水线寄存器"节点,或者在框图里显式加一个反馈节点。

另一个原因是高扇出网络。比如时钟使能信号,如果驱动了上千个触发器,布线延迟会很大。解决办法是用区域约束,把相关的逻辑放在同一个时钟区域里,减少布线距离。LabVIEW FPGA里可以在项目设置里指定"Clock Region",把FFT、DDC、DDR控制器分别放到不同的区域。

还有一个容易被忽略的原因是DSP48的级联。Xilinx的DSP48支持级联,多个DSP48串起来做乘累加可以省资源,但级联路径的延迟比普通布线大。如果时序报告里显示关键路径经过DSP48的级联端口,就要考虑拆开级联,用普通逻辑做累加。

4.3 常见问题速查表

现象可能原因排查方法解决方案
距离像散焦时钟抖动大测ADC时钟的相位噪声换低抖动时钟源,加电源滤波
多普勒谱镜像I/Q不平衡发单音看镜像抑制比调整I/Q增益和相位补偿
假目标规律出现数据错位检查FIFO读写指针重新校准参考信号延迟
时序不收敛组合逻辑过长看时序报告的关键路径插入流水线寄存器
资源溢出DSP48不够看综合报告的资源占用时分复用或换更大器件
上板后死机跨时钟域亚稳态检查异步FIFO的格雷码加两级同步触发器
温度升高后出错时序余量不足监测芯片温度降频或加散热

4.4 调试工具与技巧

LabVIEW FPGA的调试工具里,我最常用的是"交互式前面板"和"探针"。交互式前面板可以在FPGA运行的时候实时读写控件,不用重新综合。探针可以抓取内部信号,但会占用BRAM资源,抓取深度有限。我的做法是在关键节点放探针,比如DDC输出、匹配滤波输出、慢时间FFT输出,每个探针抓1024个采样点,足够看一个脉冲周期的数据。

主机端的调试用LabVIEW的波形图,把FPGA上传的数据实时显示。这里要注意数据传输的带宽,1.25 GSa/s的数据不可能全部传到主机,只能抽样。我一般抽1/64,显示出来的波形已经足够判断系统是否正常。如果要看细节,可以触发式抓取,设定一个触发条件,比如距离像幅度超过门限,抓取触发前后各512个点。

实操心得:LabVIEW FPGA的编译时间很长,32768点FFT的设计综合一次要40分钟到1小时。所以每次改代码之前要想清楚,尽量一次改多个地方,不要改一点编译一次。我习惯在主机端先用LabVIEW的仿真功能验证算法,仿真通过了再放到FPGA里综合。仿真虽然慢,但比反复综合快多了。

5. 系统联调与性能评估

5.1 与毫米波前端的联合校准

FPGA处理链路的性能再高,如果前端校准没做好,整体指标也上不去。毫米波前端在2 GHz带宽内的幅相一致性是关键。我用的校准方法是外接一个标准反射器,在暗室里测不同距离的响应,然后拟合出幅相补偿曲线。补偿系数存在FPGA的ROM里,在DDC之后、匹配滤波之前做复数乘法补偿。

校准的难点在于温度漂移。毫米波前端的幅相特性随温度变化很明显,尤其是功率放大器,温度每升高10度,相位漂移可能有5到10度。我的做法是在前端加一个温度传感器,FPGA根据温度值查表选择不同的补偿系数。这个表在暗室里标定,每5度一个点,覆盖-40度到85度。

联合校准的另一个问题是收发隔离。通感一体系统里,发射信号会直接泄漏到接收通道,形成强直达波。这个直达波的幅度可能比目标回波高60 dB以上,如果不处理,ADC会饱和。我的做法是在DDC之后加一个自适应对消器,用LMS算法估计泄漏路径,然后从接收信号里减掉。LMS的步长要仔细选,太大对消不干净,太小跟踪不上温度变化。我用的步长是0.001,收敛时间大概200微秒。

5.2 实测性能数据与分析

系统联调完成后,我在室外做了实测。测试场景是一个开阔场地,目标是一个角反射器,RCS大概10平方米。发射功率20 dBm,天线增益25 dBi,作用距离设了50米到500米。

实测结果:在500米处,距离像的信噪比是18 dB,距离分辨率实测7.8厘米,和理论值7.5厘米基本吻合。多普勒谱的信噪比是15 dB,速度分辨率实测0.025 m/s,和理论值0.023 m/s接近。点云更新率是100 Hz,也就是每10毫秒出一帧点云,满足实时跟踪的要求。

指标理论值实测值偏差
距离分辨率7.5 cm7.8 cm+4%
速度分辨率0.023 m/s0.025 m/s+8.7%
端到端延迟1.0 us1.2 us+20%
点云更新率100 Hz98 Hz-2%
作用距离500 m480 m-4%

偏差的来源主要是前端损耗和ADC量化噪声。距离分辨率的偏差来自窗函数的主瓣展宽,速度分辨率的偏差来自CPI内的脉冲幅度起伏。这些偏差在可接受范围内,通过校准可以进一步缩小。

5.3 资源余量与扩展可能性

当前设计的资源占用还有余量,LUT用了44%,DSP48用了51%,BRAM用了55%。这意味着还有扩展空间。我考虑过几个扩展方向:一是增加接收通道数,做数字波束形成,每增加一个通道,DDC和匹配滤波的资源要翻倍,但FFT和慢时间维可以共用。二是提高CPI长度,从64个脉冲增加到128个,多普勒分辨率翻倍,代价是UltraRAM占用增加一倍。三是加入恒虚警检测的FPGA实现,把CFAR从主机端搬到FPGA里,进一步降低延迟。

CFAR的FPGA实现是个有意思的课题。单元平均CFAR需要计算参考窗内的均值,参考窗大小一般是32到64个单元。用滑动窗求和的方式,每个距离门只需要加一个新值、减一个旧值,计算量很小。门限系数用查表法,根据虚警率要求预先算好。我估算了一下,CFAR在FPGA里实现大概占用5%的LUT和2%的DSP48,完全可行。

注意:CFAR的门限系数对噪声分布很敏感。如果实际噪声不是高斯分布,门限系数要重新标定。我建议在主机端先统计噪声的幅度分布,确认是瑞利分布还是对数正态分布,再决定用哪种CFAR。

6. 从项目实战中沉淀的经验

6.1 定点化的取舍原则

定点化是FPGA信号处理里最需要经验的地方。位宽给多了浪费资源,给少了信噪比不够。我的原则是:ADC输入位宽由硬件决定,不做取舍;DDC的混频和滤波环节,每级留2到3位余量;匹配滤波的频域点乘,输入16位、输出16位,中间过程32位;慢时间维FFT,输入16位、输出16位,旋转因子16位。

这个原则不是拍脑袋来的,是算过的。混频环节的位增长来自NCO的量化噪声和乘法器的舍入噪声,2到3位余量可以把这些噪声压到ADC量化噪声以下。匹配滤波的频域点乘,32位中间过程可以保证32768点FFT的累加不溢出。慢时间维FFT的64点规模小,16位足够。

有一个地方容易给多了:CIC滤波器的位宽。CIC的位增长公式是B_out = B_in + N * log2(R * M),这个公式给的是最坏情况,实际信号不会一直满幅。我试过按公式给位宽,结果BRAM占用比实际需要多了30%。后来我改成按公式减2位,实测信噪比没有明显下降。

6.2 LabVIEW FPGA的代码组织技巧

LabVIEW FPGA的框图很容易写成一团乱麻,尤其是这种多模块的流水线设计。我的组织方法是按时钟域分层,每个时钟域一个独立的While Loop,Loop之间用FIFO或寄存器通信。这样综合出来的电路结构清晰,时序也好收敛。

每个模块内部再用子VI封装,子VI的接口用簇(Cluster)打包,减少连线数量。LabVIEW FPGA对簇的支持很好,综合器会把簇拆成独立的信号,不会引入额外开销。我习惯把控制信号和数据信号分开打包,控制信号走低速路径,数据信号走高速路径。

还有一个技巧是用"条件禁用结构"来管理不同工作模式。比如调试模式和正常工作模式,调试模式下探针使能、数据上传,正常工作模式下探针关闭、数据只写DDR。条件禁用结构在综合时会根据条件常量自动裁剪,不会浪费资源。

6.3 项目后续的扩展方向

这个项目做完之后,我觉得有几个方向值得继续挖。一是把通信解调也集成进来,真正实现通感一体。通信解调需要做信道估计和均衡,这部分在FPGA里实现比感知处理更复杂,因为要处理导频和数据的复用。二是把点云跟踪也搬到FPGA里,用卡尔曼滤波做实时跟踪,进一步降低延迟。三是做多板同步,用多个RFSoC板卡组成分布式阵列,做协同感知。

多板同步的难点是时钟同步和触发同步。RFSoC支持外部参考时钟输入,可以用一个共同的10 MHz参考把多个板卡的时钟锁在一起。触发同步可以用光纤传输触发信号,延迟控制在纳秒级。这个方案在实验室里验证过,同步精度可以做到1纳秒以内,足够做相干合成。

最后分享一个小技巧:LabVIEW FPGA的编译服务器可以配置多台机器并行编译,把综合和布局布线分开跑。我配了两台机器,一台跑综合,一台跑布局布线,编译时间从1小时压缩到35分钟。这个配置在项目设置里的"Compilation Server"里改,支持局域网内的多台机器。对于这种大型FPGA项目,编译时间的节省是实实在在的。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进