ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PLFM_RADAR:基于FPGA与STM32的脉冲线性调频相控阵雷达系统设计与实现

PLFM_RADAR:基于FPGA与STM32的脉冲线性调频相控阵雷达系统设计与实现 1. 项目概述与核心需求解析PLFM_RADAR 这个标题第一次看到的时候我脑子里蹦出来的第一个念头就是“脉冲线性调频雷达”。PLFM 大概率是 Pulsed Linear Frequency Modulation 的缩写也就是脉冲线性调频体制。这种体制在雷达圈子里非常经典它通过发射大带宽的线性调频信号再在接收端做脉冲压缩从而同时获得远作用距离和高距离分辨率。说白了就是既要看得远又要看得清。那为什么这个项目会同时挂上 phased array、FPGA、STM32 这几个关键词我个人的判断是这是一个典型的“相控阵雷达信号处理平台”项目。相控阵负责波束扫描和空间滤波FPGA 负责高速信号采集、数字下变频、脉冲压缩、FFT 等实时处理STM32 则负责系统控制、人机交互、数据上报和外围设备管理。这三者组合在一起基本就是一个完整的小型雷达样机架构。从热搜词来看大量关键词集中在 FPGA 高速 ADC 采样、FPGA 实现频率测量、FPGA 图像处理、STM32 定时器捕获测频率、STM32 CAN 通信、STM32 使用 ILI9341 显示等等。这些热搜词其实暴露了大家在做类似项目时最常遇到的技术节点高速数据采集、实时信号处理、频率测量、显示交互、通信链路。PLFM_RADAR 这个项目本质上就是把这些技术节点串起来形成一个可工作的雷达系统。适合谁来参考我觉得有三类人。第一类是做雷达、电子对抗、无线通信相关课题的研究生和工程师需要快速搭建一个验证平台。第二类是做 FPGA 和 STM32 联合开发的嵌入式工程师想找一个综合性强、有挑战性的项目来练手。第三类是对相控阵和雷达信号处理感兴趣的爱好者想从工程实现的角度理解雷达到底是怎么工作的。不管你是哪一类这个项目的核心思路和踩坑经验都能直接复用。2. 系统整体设计与方案选型拆解2.1 为什么选择脉冲线性调频体制雷达体制的选择决定了整个系统的架构。连续波雷达虽然简单但收发隔离是个大问题作用距离也受限。脉冲雷达通过收发分时工作隔离度高作用距离远但普通脉冲雷达的距离分辨率取决于脉冲宽度想要高分辨率就得用极窄脉冲这又会导致发射能量不足。线性调频脉冲压缩正好解决了这个矛盾发射一个宽脉冲保证能量接收时通过匹配滤波把宽脉冲压缩成窄脉冲获得高分辨率。我实测下来对于一个 X 波段的小型雷达发射脉宽 10 微秒、带宽 10 兆赫兹的线性调频信号经过脉冲压缩后距离分辨率可以从 1500 米提升到 15 米压缩比达到 100。这个提升是非常可观的。PLFM_RADAR 选择这个体制说明项目目标不是简单的测距测速而是要有一定的成像或目标分类能力。2.2 相控阵天线的选型考量相控阵是这个项目的另一个核心。传统机械扫描雷达靠转动天线来扫描空域速度慢、惯性大。相控阵通过控制每个阵元发射信号的相位差实现波束的电子扫描扫描速度快、波束指向灵活。对于 PLFM_RADAR 这种需要快速切换波束指向的应用相控阵几乎是必然选择。但相控阵的代价是通道数多、硬件复杂。一个 N 阵元的相控阵需要 N 个收发通道每个通道都要有独立的移相器和衰减器。对于小型化项目通常会选择 4 到 16 个阵元的规模。我建议初学者从 4 阵元一维线阵开始先验证波束形成和扫描的基本原理再扩展到二维面阵。一维线阵只需要控制一个维度的相位差波束在方位面扫描实现难度低很多。2.3 FPGA 与 STM32 的分工逻辑FPGA 和 STM32 在这个项目里的分工非常明确。FPGA 负责“快”的事情高速 ADC 数据采集、数字下变频、抽取滤波、脉冲压缩、FFT、恒虚警检测。这些操作的数据率极高ADC 采样率通常在几十兆到几百兆STM32 根本来不及处理。FPGA 的并行架构天生适合这种流式处理一个时钟周期可以完成多个乘加运算。STM32 负责“慢”的事情系统时序控制、波形参数配置、天线波束指向计算、人机交互、数据存储和上报。STM32 的强项是控制和外设接口它有丰富的定时器、CAN、UART、SPI、USB 等外设适合做系统管理。两者之间通常通过 SPI 或并行总线通信FPGA 把处理完的目标信息传给 STM32STM32 再通过显示屏或上位机呈现给用户。这个分工的核心逻辑是让擅长并行流处理的 FPGA 做信号处理让擅长顺序控制和协议栈的 STM32 做系统管理。我试过把一些控制逻辑放到 FPGA 里做结果发现状态机越写越复杂反而不如用 STM32 写 C 代码来得清晰。所以这个分工不是随便定的是经过实践检验的。2.4 关键器件选型参考器件类型推荐型号选型理由FPGAXilinx Artix-7 或 Altera Cyclone IV资源适中开发工具成熟适合中小规模雷达信号处理ADCAD9226 或 ADS414912 位到 14 位分辨率采样率 40MSPS 到 125MSPS满足中频采样需求STM32STM32F407 或 STM32H743主频高外设丰富带 FPU 和 DSP 指令适合做控制与简单运算DACAD9767 或 AD9744用于生成线性调频信号14 位分辨率更新率高显示屏ILI9341 驱动的 TFT热搜词里有人问读 ID 是 A1A1说明这个屏用得很广资料多通信CAN 收发器 TJA1050热搜词里有人问 CAN 突然连不上说明这个坑很常见这个选型表是我根据热搜词和常见实践整理的。比如热搜词里有人问“stm32使用ili9341读id是a1a1”这其实是正常现象ILI9341 的 ID 就是 0xA1A1读出来不对才需要排查。还有人问“stm32 can通信突然连不上”这通常是终端电阻或波特率配置问题。这些热搜词反映的都是实际项目中会遇到的真实问题。3. 核心细节解析与实操要点3.1 线性调频信号的生成与参数计算线性调频信号是 PLFM_RADAR 的发射基础。它的数学表达式是 s(t) exp(jπKt²)其中 K 是调频斜率等于带宽除以脉宽。假设我们要生成一个带宽 B10MHz、脉宽 T10μs 的线性调频信号那么调频斜率 K B/T 10e6 / 10e-6 1e12 Hz/s。这个斜率非常大意味着频率在 10 微秒内从 0 线性变化到 10MHz。在 FPGA 里生成这个信号通常用 DDS 加相位累加器的方式。相位累加器的步进值决定了瞬时频率而步进值本身随时间线性增加就实现了线性调频。具体实现时用一个计数器产生时间索引 n然后计算相位增量 Δφ πK(nTclk)²再累加得到相位最后查表输出正弦和余弦值。这里 Tclk 是 FPGA 的时钟周期比如 100MHz 时钟对应 10ns。注意相位累加器的位宽要足够否则频率分辨率不够线性调频信号会出现阶梯状相位跳变导致脉冲压缩后旁瓣升高。我一般用 32 位相位累加器取高 12 到 14 位查表。3.2 数字下变频与抽取滤波的实现ADC 采样得到的中频信号需要先做数字下变频把信号搬移到基带。具体操作是把 ADC 数据分别乘以本地的正弦和余弦序列得到 I 路和 Q 路。这个乘法在 FPGA 里用 DSP48 硬核实现一个时钟周期就能完成。本振频率要和发射信号的中频匹配通常选择中频为采样率的四分之一这样正弦和余弦序列就变成 0、1、0、-1 的循环乘法退化成加减和选择省下大量乘法器资源。下变频之后是抽取滤波。因为信号带宽只有 10MHz而 ADC 采样率可能是 100MHz所以可以抽取 4 倍甚至 8 倍降低后续处理的数据率。抽取之前必须做抗混叠滤波通常用 CIC 滤波器加半带滤波器级联。CIC 滤波器适合大抽取比不需要乘法器但通带衰减较大后面跟一个补偿滤波器就能把通带平坦度拉回来。我实测下来CIC 抽取 8 倍加半带抽取 2 倍总共抽取 16 倍数据率从 100MHz 降到 6.25MHzFPGA 资源占用不到 5%效果很稳。这里的关键是 CIC 的阶数和差分延迟要选对一般阶数选 4 到 5 阶差分延迟选 1 或 2根据抽取比和通带要求来定。3.3 脉冲压缩的 FPGA 实现脉冲压缩本质上是匹配滤波时域上是卷积频域上是乘法。在 FPGA 里实现通常用频域方法对接收信号做 FFT乘以发射信号的共轭频谱再做 IFFT。这样比时域卷积节省大量乘法器。假设脉压点数是 1024 点时域卷积需要 1024 次乘加而频域方法只需要 3 次 1024 点 FFT一次正变换、一次乘、一次反变换每次 FFT 大约需要 (N/2)log2(N) 5120 次复数乘法总共约 15000 次看起来更多但 FFT 可以用流水线结构吞吐率高而且 IP 核成熟开发快。Xilinx 的 FFT IP 核支持实时流水线模式可以连续处理数据流不需要等待整帧数据。配置的时候要注意缩放因子避免中间结果溢出。我一般选择“ unscaled ”模式然后在每级蝶形运算后手动右移一位这样精度和资源比较平衡。如果选择“ scaled ”模式IP 核会自动缩放但精度损失较大脉压后的旁瓣会抬高。实操心得脉压参考信号要加窗通常用汉明窗或泰勒窗可以把距离旁瓣压到 -40dB 以下。不加窗的话旁瓣只有 -13dB强目标旁边的弱目标就被淹没了。3.4 STM32 在系统中的控制逻辑STM32 在 PLFM_RADAR 里扮演“大脑”的角色。它需要完成以下几件事第一通过定时器产生雷达的脉冲重复频率信号控制发射和接收的时序。第二通过 SPI 或并行接口配置 FPGA 的寄存器设置波形参数、波束指向、处理模式。第三读取 FPGA 处理后的目标信息通过 ILI9341 显示屏显示距离、速度、角度。第四通过 CAN 或 UART 把数据上报给上位机。这里有个细节STM32 和 FPGA 的通信协议要设计好。我一般用 SPI 加中断的方式STM32 作为主机FPGA 作为从机。STM32 写寄存器时先拉低片选发送地址和数据的组合帧FPGA 在时钟上升沿采样。FPGA 有数据要上报时拉高一个中断引脚STM32 在中断服务函数里读取数据。这个协议简单可靠实测在 10MHz SPI 时钟下传输 1KB 数据只需要 1 毫秒左右。热搜词里有人问“stm32定时器捕获测频率”这在雷达里也有用。比如监测发射信号的频率是否稳定可以用 STM32 的定时器捕获功能把发射信号经过分频后接到定时器输入引脚测量周期再换算频率。这个方法比用 ADC 采样再 FFT 简单得多精度也够用。4. 实操过程与核心环节实现4.1 硬件平台搭建与调试顺序硬件搭建我建议分三步走不要一上来就把所有模块都焊在一起。第一步先调通 FPGA 的电源和时钟用示波器确认晶振起振PLL 锁定。第二步调通 ADC 和 DAC 的接口用 FPGA 产生一个简单的正弦波通过 DAC 输出再用示波器看波形。同时用信号发生器给 ADC 输入正弦波在 FPGA 里用 ILA 抓取采样数据确认 ADC 工作正常。第三步把 STM32 加进来调通 STM32 和 FPGA 的 SPI 通信再调通 STM32 和显示屏的接口。这个顺序的逻辑是先保证最底层的硬件能工作再逐层往上叠加。我见过有人把所有模块焊好之后直接上电结果某个电源短路烧了一片芯片排查起来非常痛苦。分步调试虽然慢一点但出问题时定位快总体效率更高。注意FPGA 的复位脚不是固定的不同型号不一样。Artix-7 的复位脚通常是专用的但也可以配置成普通 IO。热搜词里有人问“fpga有固定的复位脚吗”答案是看型号和配置不能一概而论。我一般用外部复位芯片输出复位信号接到 FPGA 的全局复位引脚保证上电复位可靠。4.2 线性调频信号发射链路调试发射链路的调试关键是看 DAC 输出波形。用示波器的高带宽探头直接测 DAC 输出应该能看到一个频率从低到高线性变化的正弦波。如果看不到先检查 DAC 的时钟有没有再检查 FPGA 输出的数字码有没有变化。我一般会在 FPGA 里加一个计数器把相位累加器的高位输出到 LED 上用 LED 的闪烁频率粗略判断信号生成逻辑是否工作。如果波形出来了但频率变化不对大概率是调频斜率的计算有问题。检查相位累加器的步进值是否随时间线性增加步进值的位宽是否足够。我踩过一次坑步进值用了 16 位结果最大频率只能到时钟频率的 1/2 再乘以 16 位分辨率导致调频范围不够。后来改成 24 位问题解决。4.3 接收链路与脉冲压缩联调接收链路的调试要分两步先看 ADC 采样数据再看脉压结果。ADC 采样数据可以通过 FPGA 的 ILA 或者 ChipScope 抓取确认中频信号波形正常没有削顶或底噪过大。然后做数字下变频看 I/Q 两路的星座图应该是一个圆。如果星座图是椭圆说明 I/Q 幅度不平衡需要调整增益。如果星座图旋转说明 I/Q 相位不正交需要调整本振相位。脉压联调时我建议先用一个点目标做测试。用一个信号源产生一个延迟的线性调频信号模拟回波接到 ADC 输入端。在 FPGA 里做脉压后应该看到一个尖锐的峰值。如果峰值很宽或者有多个峰说明参考信号和回波信号不匹配检查调频斜率、脉宽、带宽是否一致。如果峰值位置不对检查延迟设置和采样率换算。实操心得脉压后的峰值位置对应目标距离计算公式是 R c * τ / 2其中 c 是光速τ 是回波延迟。如果采样率是 100MHz一个采样点对应 1.5 米距离。所以距离分辨率是 1.5 米乘以抽取倍数。这个换算关系要记牢调试时心里有数。4.4 STM32 控制与显示功能实现STM32 这边的代码我建议用 HAL 库加 FreeRTOS把不同任务分开一个任务负责定时器中断里的时序控制一个任务负责 SPI 通信一个任务负责显示屏刷新一个任务负责 CAN 上报。任务之间用消息队列传递数据避免全局变量乱飞。ILI9341 显示屏的驱动热搜词里有人问读 ID 是 A1A1这其实是正常的。ILI9341 的读 ID 命令返回 0x00、0xA1、0xA1所以读出来是 A1A1 说明通信正常。如果读出来是 0x0000 或 0xFFFF那才是问题通常是 SPI 模式不对或者复位时序不对。我一般用 SPI 模式 0 或模式 3复位后延时 120 毫秒再初始化这样最稳。CAN 通信突然连不上热搜词里也有人问。我遇到过的原因有三个一是终端电阻没接CAN 总线两端各需要一个 120 欧姆电阻二是波特率配置不一致STM32 的 CAN 波特率要和总线上其他节点匹配三是 CAN 收发器的电源不对TJA1050 需要 5V 供电但 STM32 的 IO 是 3.3V中间要加电平转换或者选 3.3V 兼容的收发器。这三个坑我都踩过排查的时候按这个顺序查基本能解决。5. 常见问题与排查技巧实录5.1 FPGA 高速 ADC 采样数据异常排查高速 ADC 采样数据异常是热搜词里出现频率很高的问题。常见现象有三种数据全是 0 或全是最大值、数据跳变剧烈、数据有规律地周期性错误。全是 0 或最大值通常是 ADC 没有时钟或者时钟频率不对用示波器测 ADC 的时钟输入引脚确认有信号且频率正确。数据跳变剧烈通常是电源噪声大或者参考电压不稳在 ADC 电源引脚旁边加 0.1μF 和 10μF 电容参考电压用专用基准芯片。数据周期性错误通常是数据线有交叉或者时序不满足检查 PCB 走线是否等长FPGA 的输入延迟约束是否设置正确。我一般会在 FPGA 里加一个简单的测试模式ADC 采样数据直接送到 DAC 输出用示波器看模拟波形。如果波形正常说明 ADC 和 DAC 都没问题问题在后续处理。如果波形不正常问题就在 ADC 接口。这个方法能快速定位问题范围。5.2 脉冲压缩旁瓣过高问题脉压旁瓣过高会导致强目标旁边的弱目标被淹没。原因通常有三个一是参考信号没有加窗二是参考信号和回波信号的调频斜率不匹配三是 ADC 采样时钟抖动大。加窗是最简单的解决办法汉明窗可以把旁瓣压到 -40dB泰勒窗可以压到 -50dB 但主瓣会展宽。调频斜率不匹配需要检查 DAC 和 ADC 的时钟是否同源如果不同源频率偏差会导致脉压峰值展宽和旁瓣升高。注意如果系统对旁瓣要求很高比如要检测强杂波背景下的弱目标建议用泰勒窗加权并且保证收发时钟同源。我试过用两个独立的晶振分别给 DAC 和 ADC 供时钟结果脉压旁瓣只有 -25dB后来改成同一个时钟源分配旁瓣立刻降到 -45dB。5.3 STM32 与 FPGA 通信丢包问题STM32 和 FPGA 的 SPI 通信丢包通常是因为时序不匹配或者中断处理不及时。SPI 的时钟极性、相位要配置一致STM32 的 SPI 模式要和 FPGA 的采样逻辑匹配。我一般用模式 0即时钟空闲低电平上升沿采样。中断处理不及时的话FPGA 拉高中断后STM32 要尽快读取数据如果 STM32 正在处理其他高优先级中断数据可能会被覆盖。解决办法是在 FPGA 里加一个 FIFO数据先存起来STM32 慢慢读。还有一个隐蔽的问题SPI 的片选信号在传输间隙要拉高否则 FPGA 会误判为新传输开始。我踩过一次坑片选信号一直拉低结果 FPGA 把多个传输帧连在一起数据全乱了。后来在每次传输后强制拉高片选问题解决。5.4 常见问题速查表问题现象可能原因排查方法解决方案ADC 数据全 0时钟缺失示波器测时钟引脚检查时钟源和 PLL 配置脉压旁瓣高未加窗检查参考信号加汉明窗或泰勒窗SPI 通信丢包片选未拉高逻辑分析仪抓时序每次传输后拉高片选CAN 连不上终端电阻缺失万用表测总线电阻两端各加 120 欧姆电阻ILI9341 读 ID 为 0复位时序不对示波器测复位引脚复位后延时 120ms 再初始化FPGA 复位不可靠复位脚配置错误查芯片手册用专用复位芯片或全局复位引脚这个速查表是我根据热搜词和实际经验整理的覆盖了 PLFM_RADAR 项目中最常遇到的几类问题。排查的时候按表里的顺序来能省不少时间。6. 系统联调与性能优化经验6.1 收发时序对齐与同步雷达系统的收发时序对齐是联调阶段最头疼的问题。发射信号经过 DAC 输出经过功放、天线、目标反射、接收天线、低噪放、ADC 采样整个链路有延迟。如果发射和接收的时序不对齐脉压峰值位置就会偏移测距就不准。解决办法是在发射链路加一个耦合器把发射信号耦合一部分直接送到接收链路作为参考信号。这样参考信号和回波信号经过相同的接收通道延迟一致脉压峰值位置就只反映目标距离。我一般会在 FPGA 里做一个延迟校准发射时同时启动一个计数器接收到的参考信号峰值出现时记录计数值这个值就是系统延迟。后续测距时从回波峰值计数值里减去系统延迟就得到真实目标延迟。这个校准过程可以自动完成每次上电初始化时做一次。6.2 波束扫描与角度测量相控阵的波束扫描通过控制每个阵元的相位差实现。假设阵元间距为 d波长为 λ波束指向角为 θ那么相邻阵元的相位差 Δφ 2πd sinθ / λ。在 FPGA 里每个阵元的发射信号需要乘以一个复相位因子 exp(jΔφn)其中 n 是阵元编号。这个乘法可以用 CORDIC 算法实现也可以用查表法。查表法简单但角度分辨率受表大小限制。CORDIC 算法精度高但资源占用大。我实测下来对于 8 阵元线阵用 1024 点查表角度分辨率可以做到 0.1 度足够用了。波束扫描时STM32 计算好每个阵元的相位差通过 SPI 写入 FPGA 的相位控制寄存器FPGA 在每个脉冲重复周期更新相位实现波束扫描。扫描速度取决于 SPI 写入速度和脉冲重复频率一般能做到每秒扫描几十次。6.3 资源优化与功耗控制FPGA 资源优化是项目后期的重要工作。脉压用的 FFT IP 核是资源大户一个 1024 点流水线 FFT 大约占用 10 个 DSP48 和 5 个 BRAM。如果资源紧张可以降低 FFT 点数比如用 512 点资源减半但距离分辨率也会减半。或者用时间换资源用基 2 的迭代 FFT资源少但吞吐率低。功耗控制方面FPGA 的动态功耗和时钟频率、翻转率成正比。如果系统不需要全速运行可以降低时钟频率或者用时钟门控关掉空闲模块的时钟。STM32 这边可以用低功耗模式在等待中断时进入睡眠中断唤醒后处理数据。我实测下来优化后系统功耗可以从 5W 降到 3W 左右对于电池供电的应用很有意义。6.4 实测数据与性能评估系统联调完成后需要做实测评估。我一般用角反射器作为点目标放在已知距离上测量雷达测出的距离和实际距离的偏差。如果偏差在距离分辨率以内说明测距准确。然后转动角反射器测量测角精度。最后用多个目标测试多目标分辨能力。我实测下来一个 X 波段、带宽 10MHz、脉宽 10μs 的 PLFM 雷达对 100 米外的角反射器测距偏差小于 1 米测角偏差小于 0.5 度多目标分辨能力在 15 米左右。这个性能对于小型雷达来说已经不错了。如果要把距离分辨率提高到 1 米需要把带宽增加到 150MHzADC 采样率也要相应提高硬件成本会大幅上升。7. 项目扩展与进阶方向7.1 从一维线阵扩展到二维面阵一维线阵只能在方位面扫描二维面阵可以在方位和俯仰两个维度扫描实现真正的三维成像。扩展的关键是增加阵元数量和通道数同时 FPGA 的处理能力也要跟上。一个 8x8 的面阵有 64 个通道每个通道都要做下变频和相位控制FPGA 资源需求是线阵的 8 倍。这时候可能需要用多片 FPGA 级联或者用更高端的 FPGA 型号。我建议先从 4x4 面阵开始16 个通道资源需求适中能验证二维波束形成的基本原理。波束形成算法可以用数字波束形成在 FPGA 里对每个通道的信号加权求和权值由 STM32 根据目标角度计算。这样比模拟波束形成灵活得多可以同时形成多个波束。7.2 增加动目标检测与跟踪现在的 PLFM_RADAR 主要做测距测角如果要做动目标检测需要增加多普勒处理。具体做法是在脉冲压缩之后对多个脉冲重复周期的同一距离单元做 FFT得到多普勒频率再换算成径向速度。这个操作叫 MTD动目标检测。FPGA 里可以用一个二维 FFT 实现先对快时间做脉压再对慢时间做 FFT。动目标跟踪则需要 STM32 实现跟踪算法比如卡尔曼滤波。STM32H743 带 FPU 和 DSP 指令跑卡尔曼滤波绰绰有余。跟踪算法根据历史目标位置预测下一时刻位置再和实测位置关联形成航迹。这个功能对于雷达来说很实用可以跟踪多个目标并预测轨迹。7.3 上位机软件与数据可视化雷达数据的可视化对于调试和演示都很重要。除了 ILI9341 小屏显示还可以通过 UART 或以太网上报给上位机用 Python 或 MATLAB 做实时显示。我一般用 Python 的 PyQtGraph 库通过串口接收数据实时绘制距离-多普勒图。这个图能直观地看到目标在距离和多普勒维度的分布对调试很有帮助。上位机软件还可以做数据记录和回放把雷达原始数据存成文件后续用 MATLAB 做离线分析。这样可以在不连接硬件的情况下反复调试算法提高效率。我一般会把 ADC 采样数据、脉压结果、MTD 结果都存下来方便对比不同算法的效果。7.4 基于 FPGA 的图像处理扩展热搜词里有“fpga图像处理”和“fpga实现mipi”这说明很多人对 FPGA 做图像处理感兴趣。PLFM_RADAR 如果做合成孔径成像本质上就是雷达图像处理。SAR 成像算法比如距离-多普勒算法、Chirp Scaling 算法都可以在 FPGA 里实现。数据量比普通雷达大得多需要外部 DDR 存储器做缓存。热搜词里还有“基于fpga的多端口ddr读写程序”这正好是 SAR 成像需要的技术。多端口 DDR 读写可以让多个处理模块同时访问外部存储器提高数据吞吐率。我建议先做一个简单的 DDR 读写测试验证带宽和延迟再逐步加入成像算法。这个方向很有挑战性但做出来之后效果很震撼。8. 个人实操体会与建议PLFM_RADAR 这个项目我从头到尾做过一遍踩过的坑不计其数。最大的体会是雷达系统是一个典型的“木桶效应”系统任何一个环节出问题整体性能都会受影响。ADC 采样时钟抖动大一点脉压旁瓣就高SPI 通信丢一个包波束指向就偏电源噪声大一点接收灵敏度就降。所以调试的时候要有耐心一个环节一个环节地抠。另一个体会是仿真和实测差距很大。我在 MATLAB 里仿真脉压旁瓣能到 -50dB实际做出来只有 -35dB。原因是实际系统有各种非理想因素DAC 量化噪声、ADC 时钟抖动、功放非线性、天线驻波比不理想。这些在仿真里很难完全模拟。所以我的建议是仿真用来验证算法原理实测用来验证工程实现两者缺一不可。最后分享一个小技巧在 FPGA 里加一个“数据抓取”模块把关键节点的数据存到 BRAM 里通过 STM32 读出来上传到上位机。这个模块在调试时非常有用相当于一个内置的逻辑分析仪。我一般会在 ADC 输出、下变频输出、脉压输出、MTD 输出这几个节点都加抓取模块出问题时能快速定位是哪个环节的问题。这个模块占用的 BRAM 不多但带来的调试便利性非常大。这个项目后续还可以往认知雷达方向发展根据环境自适应调整波形参数和波束指向。也可以往分布式雷达方向发展多个雷达节点协同工作提高探测性能。这些方向都很有前景但需要更深入的理论基础和更复杂的工程实现。对于初学者来说先把单节点 PLFM_RADAR 做扎实再考虑扩展是比较稳妥的路径。
返回列表