☰
PLFM_RADAR:软硬件一体化雷达实验平台的搭建与信号处理实践
2026/11/2 6:05:37 网站建设 项目流程

1. 为什么叫 PLFM_RADAR:这个项目解决的问题

先说结论:PLFM_RADAR 是一套面向无线电监测与目标探测场景的软硬件一体化雷达实验平台,PLFM 取自 Platform,RADAR 就是雷达本尊。说白了,它解决的是很多做射频、做信号处理的人都会遇到的一个尴尬局面——想验证一个算法思路,结果一半时间耗在搭硬件和调采集链路上;想复现一篇论文里的目标检测方法,光是把 IQ 数据喂进代码就能折腾一下午。

我最初立项这个代号,就是想做一个能反复复用、参数可调、从天线到显示界面全链路打通的雷达实验系统。它既可以当作教学演示平台,也能作为算法验证的硬件底座。项目的核心目标有三个:

  1. 把射频前端、中频采集、信号处理、目标显示四个环节做成一整套可插拔的模块化系统,换一个频段或换一种波形时不需要推翻重来。
  2. 在低成本的 SDR 硬件基础上,实现接近工业级雷达的信号处理流程:脉冲压缩、MTI/MTD、CFAR 检测,而不是只停留在"看频谱"的层面。
  3. 提供一套完整的、可复现的数据采集与算法评估流程,让后续做算法的人能直接站在这个平台上跑自己的实验。

这篇文章会把整个平台的硬件拓扑、每个环节的选型理由、信号处理链路的实现细节、以及我在实测中踩过的坑完整记录下来。如果你正准备搭一套类似的系统,或者手里有一块 SDR 板子想做雷达方向但不知道从哪下手,这份记录应该能帮你省掉不少弯路。

2. 整体架构与硬件拓扑:为什么把系统拆成四段

熟悉雷达系统的人都知道,任何雷达设备都可以抽象成"发射-传播-接收-处理"这条链。PLFM_RADAR 在设计之初就坚持了一条原则:不在硬件上做任何不可拆分的定制,所有模块之间都用标准接口连接。这在后期调试时帮了大忙,因为任何一环出了问题,都可以单独替换和验证。

整个平台分成四个物理单元:

  • 射频前端单元:负责信号发射和回波接收,包括天线、功放、低噪声放大器和收发开关。
  • 中频采集单元:基于软件无线电架构完成混频、滤波、ADC 采样,输出 IQ 数据。
  • 信号处理单元:一台高性能计算机或嵌入式板卡,运行脉冲压缩、多普勒滤波、CFAR 检测等算法。
  • 显示与控制单元:负责波形配置、参数设置、实时显示距离-多普勒图和点迹输出。

这四个单元的连接方式如下:射频前端通过同轴电缆与天线相连,中频采集单元通过 SMA 口与前端的 IF 输出相连,再通过 USB 3.0 或千兆网口把 IQ 数据交给处理单元,处理单元通过以太网把目标点迹送给显示端。

这个拓扑看起来平平无奇,但关键在于每一段的内部设计都有讲究。先说发射链路。因为系统定位是实验平台而非工程样机,发射功率不需要做太大,但要求波形参数灵活可控。我最终采用了"PC 端波形生成 → DAC 直接输出 → 上变频 → 功放"的方案,而不是传统的"晶振+锁相环+PLL 调制"方案。

后者的缺点是波形一旦写好就固定了,想换个调频斜率或者试试相位编码波形,得重新烧程序甚至换硬件。而直接波形生成的方式,只需要在软件里改数组,发射出去的就是另一套信号,灵活度完全不在一个量级。

接收链路是这个平台里对性能影响最大的一环,也是最容易翻车的地方。很多人搭接收链路时会想当然地把 LNA 增益调到最大,结果底噪和杂散一起被放大,动态范围反而变差。PLFM_RADAR 的接收链路做的是"前级低增益、中频高增益"的分布式设计:LNA 只提供约 15dB 增益,把信号从噪声底拉起来就行了;真正的增益放大放在混频之后、ADC 之前的中频放大级。

ADC 采样率的选择也是一个需要想清楚的决策点。平台支持的最大中频带宽是 40MHz,根据奈奎斯特采样定理,理论最低采样率是 80MSPS。但实际我留了 1.25 倍的过采样余量,把 ADC 设置为 100MSPS。过采样带来的好处有两个,一个是放宽了抗混叠滤波器的过渡带要求,同样阶数的滤波器能做到更平坦的通带;另一个是在数字域做抽取滤波后,等效噪声带宽会变窄,信噪比能获得大约 1dB 的提升。

下面这张表是我最终确定的硬件配置清单,所有器件都是市面常见型号,采购很容易:

模块器件选型关键参数选型考虑
天线2.4GHz 微带阵列天线增益 12dBi,波束宽度 30°频段开放,组件成熟,便于户外实测
功放2.4GHz 线性功放模块输出功率 30dBm,P1dB 33dBm保证发射功率不影响接收前端
收发开关PIN 二极管开关模块切换时间 <100ns满足脉冲雷达收发切换要求
LNA低噪声放大器模块噪声系数 0.8dB,增益 15dB前级低增益设计,避免压缩动态范围
混频器无源双平衡混频器变频损耗 6.5dB无源器件不用额外供电,互调产物少
ADCAD9652 评估板16bit / 100MSPS高位数保证微弱回波信号不丢失
信号处理高性能工控机16核 / 32GB 内存同时跑实时处理和离线回放

这套配置有一个值得注意的细节是收发隔离。单天线雷达天生存在收发互斥的问题,脉冲体制下靠收发开关来隔离,但开关的隔离度是有限的。如果发射功率过高,泄露信号会在接收机前端产生阻塞。为了解决这个问题,我把发射功率控制在 30dBm,同时收发开关选了高隔离的 PIN 管方案,实测隔离度在 55dB 以上,这样接收通道即使在发射脉冲期间也能正常工作,不会饱和。

3. 波形设计与发射链路:从线性调频到相位编码的切换逻辑

PLFM_RADAR 默认工作方式是脉冲多普勒体制,也就是发射一串窄脉冲,脉冲内部进行调制。这样做的好处是可以同时获得距离分辨率和多普勒分辨率。如果只发单频连续波,虽然能测速但测不了距离;如果只发大带宽线性调频脉冲,测距精度很好但动目标检测又不够用。脉冲多普勒体制把两者结合起来,代价是对信号处理链路的要求更高。

波形参数是整个系统设计的上游约束,我先列一下当前平台的默认波形参数,再逐个解释为什么选这些值:

  • 载频:2.4GHz(ISM 频段,开放使用)
  • 脉冲宽度:20μs
  • 脉冲带宽:5MHz
  • 脉冲重复周期 PRT:400μs
  • 相干处理间隔 CPI:64 个脉冲
  • 采样率:100MSPS
  • 中频中心频率:20MHz

脉冲宽度 20μs 对应的距离分辨能力取决于脉冲内部的调制方式。如果是简单脉冲,距离分辨率是 3km(光速乘脉冲宽度的一半),基本只能把目标分辨到公里量级。如果加了 5MHz 带宽的线性调频,理论分辨率提升到 30m,因为 5MHz 带宽对应的距离分辨率是 150MHz 分之一乘以光速除以二。这个分辨率对车辆、无人机这类目标已经够用了。

脉冲重复周期 PRT 决定了最大不模糊距离和最大不模糊多普勒频率。PRT = 400μs 时,最大不模糊距离是 60km(光速乘 PRT 除以 2)。实际平台的作用距离远达不到 60km,所以距离不模糊不是问题。但多普勒维度的约束需要仔细算:PRT 对应的脉冲重复频率 PRF 是 2.5kHz,根据奈奎斯特准则,可测的多普勒频率范围是 ±1.25kHz。在 2.4GHz 载频下,这对应 ±156m/s 的径向速度。这个范围对大多数地面目标和低速无人机都覆盖住了,但如果目标以超声速运动,就需要提高 PRF 或者改用其他解模糊方法。

相干处理间隔 CPI 取 64 个脉冲,意味着做多普勒处理时的 FFT 点数是 64。对应的多普勒分辨率是 PRF 除以 64,约为 39Hz,换算成速度分辨率约 4.9m/s。这个分辨率不高,两个速度差小于 5m/s 的目标在距离-多普勒图上会混在一起。如果你对速度分辨率有更高要求,把 CPI 提高到 128 或 256 即可,因为系统架构里这个参数是运行时可以改的。

发射波形的生成流程是这样的:在上位机中先产生基带 IQ 波形数据,然后通过 USB 传输到中频采集单元内部的波形存储区,由 FPGA 按 PRT 定时送出 DAC。DAC 输出的是中频信号,中心频率 20MHz,带宽 5MHz。这个信号经过上变频到 2.4GHz,再经过带通滤波器滤除镜像频率和本振泄露,送入功放放大到 30dBm,最后通过收发开关送到天线。

在切换波形类型时,PLFM_RADAR 支持三种模式:线性调频(LFM)、巴克码相位编码、以及步进频。相位编码波形的好处是距离旁瓣可以压得很低,对弱目标检测更友好;步进频可以通过合成获得远大于瞬时带宽的等效带宽,获得更高的距离分辨率。但这些模式的切换只需要在波形生成模块中选择不同的基带数据,硬件链路完全不动。这就是软件定义架构最直接的价值。

发射链路的实测数据上,我用频谱仪测过发射信号质量。在 2.4GHz 载频附近,带外杂散抑制在 50dB 以上,带内平坦度在 5MHz 带宽上波动小于 0.5dB,线性调频信号的相参性满足后续脉压处理的要求。这个指标是通过在功放之前加了一级声表面波滤波器实现的,代价是插损约 4dB,但换来的频谱纯净度非常值得。

4. 接收链路与数据采集:最容易翻车的环节

接收链路的设计目标是在不丢失弱回波的前提下,尽可能把回波信号转换成分辨率足够高的数字 IQ 数据。这个环节在整个平台里踩坑最多,而且很多问题到了信号处理阶段才能暴露出来,排查起来特别费劲。我把整个链路的信号流程和调试经验完整写出来。

回波信号从天线进入后,先通过收发开关进入限幅保护电路。限幅器的作用是防止发射泄露或近程强反射损坏后面的 LNA。这里有个容易被忽略的细节:限幅器的插损会直接抬高接收噪声系数,所以要选插损尽量低、限幅门限尽量高的器件。我选的那款限幅器插损约 0.3dB,门限 10dBm,对正常回波没有影响,但能把超过 10dBm 的强信号截到安全电平。

接着是 LNA。前面提过它只提供 15dB 增益。这个增益值是根据预算算出来的,接收链路的各级增益分配遵循"噪声系数分摊"原则。第一级 LNA 的增益如果太低,后级混频器和中频放大器的噪声系数会直接叠加到系统总噪声系数上。但增益也不能太高,否则强反射或近距离目标回波会把混频器推到饱和区,产生非线性失真。15dB 是一个经过实际测试的折中值,系统总噪声系数实测约 1.6dB,动态范围约 70dB。

混频器我选的是无源双平衡结构,本振功率 +10dBm,变频损耗 6.5dB。无源混频器相比有源混频器的好处是没有额外的噪声贡献,而且对本振功率的敏感度低,互调产物少。代价是变频损耗较大,需要中频放大器来弥补。这个中频放大器才是真正的增益大户,提供约 40dBg 增益,配合前面的 15dB,总增益在 55dB 左右。

中频信号经过抗混叠滤波器后送入 ADC。滤波器的作用非常关键,它需要抑制掉 20MHz 中频以外的带外噪声和镜像信号,防止 ADC 采样时发生混叠。我用了五阶椭圆滤波器,通带 15-25MHz,阻带抑制 60dB。这个滤波器的群延迟波动在通带内较大,但对雷达信号处理没什么影响,因为后续脉压处理用的是匹配滤波,群延迟的绝对值会被抵消,只要在带内稳定即可。

ADC 采样得到的原始数据是实采样的中频数字信号,不能直接用于后续处理,需要先经过数字下变频(DDC)转成基带 IQ 数据。DDC 的流程是:数字混频到零频 → 低通滤波 → 抽取。这些操作全部在 FPGA 上完成,输出的是 16bit 的 I/Q 数据流,通过千兆网口送到上位机。

这块在网上调试时最常遇到的问题就是 IQ 不平衡。理论上 DDC 输出的 I/Q 幅度和相位应该是精确正交的,但实际因为模拟前端和 ADC 的微小失配,会存在幅度误差和正交相位误差。IQ 不平衡在脉压前影响不大,但一旦做多普勒处理,会在零多普勒附近产生一个虚假的固定分量,看起来就像有一个静止目标。解决办法是在系统初始化时做一次二阶校正:注入一个单频信号,测量 I/Q 通道在幅度和相位上的偏差,然后在补偿器里做复数乘加修正。校准之后镜像分量抑制能从 35dB 提升到 55dB 左右。

数据采集环节还有一个容易忽略的瓶颈是数据吞吐。100MSPS 采样、16bit、双通道 I/Q,原始数据率是 400MB/s。这个速率对存储系统是个不小的负担。PLFM_RADAR 的处理方案是:在 FPGA 里先做脉冲压缩前的预处理,即数字下变频和 8 倍抽取,把数据率降到 50MB/s 后再上传。这样既保留了目标检测所需的带宽信息,又避免了大文件存储的麻烦。

5. 信号处理链路:从 IQ 数据流到目标点迹

信号处理是整个平台的软件核心,也是算法实验者最关心的部分。PLFM_RADAR 的信号处理链由七个级联模块组成,按顺序分别是:脉冲压缩、MTI 对消、多普勒滤波、CFAR 检测、距离-多普勒图生成、目标凝聚、点迹上报。每一步都有独立的可配置参数,整个链路用流程图来理解会非常直观。

第一级是脉冲压缩。脉冲压缩的本质是匹配滤波,目的是把发射的宽脉冲调制信号在接收端压缩成窄脉冲,获得高距离分辨率的同时保持大的发射能量。对线性调频信号,匹配滤波的输出是信号的模糊函数,理论上峰值旁瓣比是 -13.2dB。这个旁瓣水平在单目标情况下问题不大,但如果你要检测一个强目标旁边的弱目标,这个 -13.2dB 的旁瓣就会掩盖弱目标。

解决方法是加窗。我在匹配滤波的频域做了汉明窗加权,代价是主瓣展宽约 1.5 倍,距离分辨率从 30m 退化到约 45m,但峰值旁瓣比改善到 -42dB 左右。这个取舍在目标检测场景中通常是值得的——你在两个目标之间多分辨开 15m 的间距,远不如同时保住一个弱小目标来得重要。

第二级是 MTI 对消。因为脉冲多普勒雷达接收到的回波里包含静止地物杂波,这类杂波的频谱集中在零多普勒附近,幅度往往比目标回波强几个数量级。MTI 对消用一个简单的 FIR 滤波器把零频附近的频谱分量压掉。三脉冲对消器的频率响应在零频处有很深的凹口,同时会对低速目标有一定衰减。实测下来,三脉冲对消对零频杂波的抑制在 40dB 以上,但对 10m/s 以下低速目标的响应也会被压到约 -3dB。如果在你的使用场景里低速目标很重要,可以考虑把对消器旁路掉。

第三级是多普勒滤波,也就是对同一距离单元上 64 个连续脉冲的回波序列做 FFT。这一步把每个距离单元的速度维信息解算出来,形成距离-多普勒图。FFT 之前需要加上 K aiser 窗来压低多普勒副瓣,否则强目标会在多普勒维上形成明显的裙边,影响邻近弱目标检测。FFT 点数 64,加上窗后会略微损失多普勒分辨率,但换来了更干净的多普勒谱。

第四级是 CFAR 检测。CFAR 是在距离-多普勒图上做自适应门限检测,思路是对每个待检测单元,用周围单元统计噪声能量,估计出一个本地门限,超过门限就判为目标。我采用的是单元平均 CFAR(CA-CFAR),参考单元在距离维取 16 个、多普勒维取 8 个,保护单元距离维 4 个、多普勒维 2 个。CFAR 里有个平衡需要掌握:参考单元数太多会导致门限估计滞后,目标被自身能量抬高的门限盖掉;太少则门限估计抖动大,虚警率高。这个参数组合是我测下来比较稳的起步值。

第五级要解决的是 CFAR 检测输出的相邻多个过门限点其实是同一个目标的问题。目标凝聚模块把这些相邻检测点合并成一个目标点,取能量最强的点作为该目标的位置估计。这个步骤看起来简单但在实际数据里相当重要,因为线性调频信号在脉压后主瓣宽度是 3 个距离单元,一个点目标在距离维上常常检出 2-3 个连通的过门限单元,如果不做凝聚,输出的目标数量会虚高好几倍。

第六级生成距离-多普勒图并做极坐标转换,方便在显示界面中画出距离-方位图。如果后续接了机械转台或相控阵天线,这一步可以扩展成三维数据块,但当前单天线模式下,只用距离-多普勒图加角度测量信息即可定位目标。

整个信号处理链路的实现有一些值得单独说的性能问题。首先是实时性问题。64 个脉冲的 CPI 时长是 25.6ms(400μs × 64),也就是说每隔 25.6ms 就要完成一个 CPI 的全链路处理,才能保证不丢帧。PC 上用 C++ 实现整个流程,单 CPI 处理耗时约 8ms,占实时预算的三分之一,余量充足。如果要实时回放,可以把耗时压进预算里;如果要离线跑论文算法,直接把 IQ 数据落盘回放就行。

其次是浮点和定点的问题。PC 端的处理全程用单精度浮点,精度足够,但在 FPGA 上做实时处理时就得考虑定点化,否则资源占用会翻倍。我的建议是:先在上位机验证算法的浮点正确性,再针对性地做定点仿真对比,确认脉压后 SNR 损失小于 0.5dB 后再移植到 FPGA。

6. 实测数据与性能评估:跑出来的结果说话

平台搭建完,我做了三轮实测来验证整条链路。测试场地选在户外停车场附近的开阔地带,目标是测试距离 50m 到 500m 的一辆慢速行驶的 SUV。测试时 SUV 以约 20km/h 的速度直线行驶,为多普勒检测提供明显的径向速度分量。

第一轮测试验证的是距离测量精度。对单个静止目标在 100m 处用三脚架架起的角反射器,脉冲压缩后测得峰值位置在 99.4m 处,误差 0.6m。这个误差来源主要是采样率量化,100MSPS 采样率下距离量化单元是 1.5m,插值处理后精度可以进一步改善。第二轮的动目标检测中,距离-多普勒图上清晰出现了目标峰体,测得径向速度约 5.2m/s,与车载 GPS 测量的行驶速度换算后的径向分量基本一致。

第三轮是 CFAR 检测的综合评估。我记录了在信噪比约 13dB 的目标回波条件下,CFAR 的检测概率和虚警情况。连续运行 20 分钟,共处理约 47000 个 CPI,对预定目标的检测概率稳定在 96% 以上,未出现超过目标数量的虚警点。

在实际测试中,我特别注意了一个很多人容易忽略的指标:最小可检测信噪比。它决定了你能探测到多远的弱小目标。我在链路入口端注入已知衰减的模拟信号,逐步减小信号功率直到 CFAR 检测稳定失效,得出平台的实测最小可检测信噪比约为 11dB。这个值比理论值高了约 3dB,主要不是硬件性能问题,而是目标凝聚、CFAR 参考窗等环节的积累损失。知道了这个实测门限,你在规划平台探测距离时就能留出合理余量,而不是按理想公式算一条永远达不到的探测曲线。

还有一个值得留意的现象是近距离盲区。脉冲体制雷达在发射脉冲期间接收机关闭,导致存在一段探测盲区。盲区距离等于脉冲宽度对应的距离,20μs 脉宽对应 3km。这个盲区太大了,因为这个距离以内的目标回波会在脉压时与发射脉冲的强能量重叠。实际使用时可以通过"脉内收发"的方式来缩短盲区——在脉宽内分时切换收发开关,让近距离回波在发射脉冲结束后立刻进入接收通道,代价是有效接收带宽会下降。我在平台里把这种方式作为可选模式保留,实测盲区缩短到 200m 左右,但这只适合近距离特殊场景,常规测量还是用标准脉冲模式。

从实测结果看,整套平台的测量精度和检测能力达到了预期设计指标。更重要的是,整个过程暴露出来的问题——IQ 不平衡、接收增益分配、杂波强度——远比看看原理框图要有价值。这也是我坚持要写这篇记录的原因:雷达系统的真实性能,永远是在调试和实测中逼出来的。

7. 踩坑记录与调试方法论

搭建 PLFM_RADAR 的过程里,有四个问题让我印象最深,每个都花了大半天到一周时间才定位到根因。写出来给大家做个参考,避免走同样的弯路。

第一个坑是接收通道的噪声基底异常抬高。现象是系统开通后,距离-多普勒图的底噪比预期高了 6-7dB,弱目标信号淹没在噪声里。排查过程从天线开始逐级测量:先用频谱仪测天线口,噪声正常;再测 LNA 输出,噪声正常;测混频器输出,正常;测中频放大器输出,异常偏高。最后确认是中频放大器自激振荡了。原因是中频放大模块的电源去耦不充分,高频纹波反馈到了增益级形成正反馈振荡。解决方式是更换低噪声线性稳压电源,并在供电线上加了磁珠和两级π型滤波。这个案例的排查链路可以复用:任何噪声异常,都从信号链的最前级开始逐级向后用频谱仪观测,一次性定位到具体模块,不要上来就怀疑算法。

第二个坑是 CFAR 检测在近距离出现了大量虚警。现象是 50m 以内的距离单元经常连续过门限,无论怎么调 CFAR 参数都没用。后来在时域上直接看原始回波,发现是发射脉冲泄露的残余:收发开关切换后,开关隔离不是无穷大,微弱泄露信号在接收机里被放大,形成了近程强杂波。这个杂波能量远高于热噪声底,CFAR 无法用周围单元正确估计。解决方案是在脉冲压缩之前加了一级近程杂波抑制:对前 20 个距离单元采用更大的参考窗,允许门限被杂波抬高。这本质上是"承认存在近程杂波并愿意牺牲近距离检测概率"的工程妥协。

第三个坑是在多普勒处理时发现静止目标残留。现象是天线上明明没有目标,距离-多普勒图的零多普勒处却始终有一条微弱亮线。这条线来自 IQ 不平衡的镜像分量。前面提到的二阶校准能压掉大部分,但温度变化会导致模拟器件的特性漂移,校准值会慢慢失效。如果你的平台长时间开机后出现零多普勒杂波抬升,优先重新做一次 IQ 校准,不要急着调算法参数。

第四个坑和软件相关。信号处理链路从 Python 原型搬到 C++ 实时处理时,检测效果出现明显退化。仔细对比后原来是 C++ 版本的 FFT 用的是单精度,而 Python 原型是双精度。脉压的匹配滤波对这种数值精度变化很敏感,最终我把脉压部分改为双精度计算,后续的多普勒 FFT 保持单精度,性能和检测效果都恢复了。这里也强烈建议你们在跨语言迁移时先做一个精度对比测试,不要想当然地认为编译器优化后行为一致。

回看这四个坑,有一个共同特征:它们都不是链路中某一块单独的问题,而是模块组合后的交互效应。雷达系统调试最难的地方恰恰在这里——单独测每个模块都是好的,连在一起就出问题。因此我的调试方法论很简单但很有效:从天线开始逐模块用信号发生器注入已知信号,观测每个节点的输出是否符合理论值,一旦偏差明显,问题就锁定在两个模块的连接处。这条方法帮我省下的时间,远超在算法代码里反复试错的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询