资讯详情

FPGA+STM32异构架构:PLFM_RADAR线性调频雷达原型机设计与实现

📅 2026/11/2 10:36:12 | 华诺云谱 👁 阅读
FPGA+STM32异构架构:PLFM_RADAR线性调频雷达原型机设计与实现
1. 项目缘起与整体设计思路1.1 为什么选择PLFM_RADAR这个方向雷达这东西早些年还是军工院所和大型研究所的专属玩具一套完整的相控阵系统动辄几百上千万普通人根本摸不到边。但这几年情况变了随着国产FPGA芯片价格下探、STM32生态越来越成熟再加上开源雷达社区比如MIT的Coffee Can Radar、各类FMCW开源项目的推动个人或者小团队攒一套能跑起来的雷达原型机已经不是什么天方夜谭。我这个项目取名叫PLFM_RADAR核心思路其实就藏在名字里PhasedLinearFrequencyModulation也就是相位控制的线性调频雷达。说白了就是用一个线性调频信号LFM也叫chirp信号去打目标接收回波后做脉冲压缩再通过多通道相位差来测角。这套东西是相控阵雷达最基础的骨架把它吃透了后面做DBF数字波束形成、做SAR成像都是在这个骨架上加肉。为什么不用纯STM32做因为LFM信号的产生、高速ADC采样、脉冲压缩这些活儿对时序和算力的要求太高了。STM32H7系列虽然主频能到480MHz但你要它同时干产生chirp采回波做FFT相位比对基本就是让它一边跑马拉松一边做高数题。所以我的方案是FPGASTM32异构FPGA负责所有硬实时的活儿——DDS产生chirp、高速ADC数据搬运、DDC下变频、脉冲压缩STM32负责软实时的活儿——系统控制、人机交互、数据打包上传、上位机通信。这个分工不是拍脑袋定的。FPGA的强项是并行和确定性时序一个时钟周期能干几百个乘加STM32的强项是灵活控制和协议栈跑个USB CDC、做个LCD界面、解析个上位机指令比FPGA写状态机舒服太多。两者通过FSMC或者SPI高速总线对接各干各的互不拖累。1.2 系统整体架构拆解整套PLFM_RADAR的硬件架构我把它分成四块射频前端包括发射链路DAC→低通滤波→上变频→功放→天线和接收链路天线→LNA→下变频→中频放大→ADC。这部分决定了雷达的灵敏度和动态范围是最烧钱也最考验射频功底的地方。FPGA数字核心Xilinx Artix-7或者国产安路EG4系列都行我手头用的是黑金的Artix-7 XC7A35T。里面跑DDS chirp发生器、ADC接口LVDS、数字下变频DDC、匹配滤波脉冲压缩、多通道相位提取。STM32控制层STM32F407或者H743负责系统上电时序、FPGA配置加载、参数下发chirp带宽、脉宽、PRF、USB/以太网数据回传、LCD显示。上位机Python或者MATLAB写的GUI做距离-多普勒图、角度谱显示以及原始IQ数据存储。这个架构的好处是模块化。射频前端可以换、FPGA逻辑可以迭代、STM32固件可以升级、上位机可以重写任何一块出问题都不至于推倒重来。我见过太多人一上来就想做一体化SoC结果射频没调通、FPGA时序违例、STM32还死机最后啥都没跑起来。1.3 关键参数选型背后的计算逻辑雷达参数不是随便填的每一个数字背后都有公式撑着。我先把核心参数列出来再逐个解释为什么这么选。参数取值选型依据中心频率2.4 GHzISM频段天线尺寸适中器件便宜调频带宽 B50 MHz距离分辨率 c/(2B) ≈ 3 m脉宽 T1 ms配合PRF和占空比PRF1 kHz最大不模糊距离 c/(2·PRF) 150 km采样率 fs100 MSPS满足Nyquist留2倍过采样ADC位数12 bit动态范围约72 dB接收通道数44元线阵可测一个角度维距离分辨率的公式是 ΔR c/(2B)c是光速3×10⁸ m/sB50MHz算下来ΔR3米。这个分辨率对于无人机探测、车辆测速这类场景够用了。如果你想要1米分辨率带宽得拉到150MHz那ADC采样率、FPGA时序、射频前端全都要升级成本翻倍。最大不模糊距离 R_max c/(2·PRF)PRF1kHz时R_max150km。但实际受限于发射功率和灵敏度有效探测距离可能只有几百米到几公里。PRF选1kHz还有个考虑它决定了多普勒不模糊速度 v_max λ·PRF/4λ12.5cm算下来v_max≈3.1 m/s。这个速度范围对慢速目标够用但测高速车辆就有点勉强所以实际项目中我会用参差PRF来解速度模糊。采样率100MSPS是因为中频选在25MHz根据带通采样定理fs ≥ 2·B_if25MHz中频、50MHz带宽的话严格来说需要更高的采样率但实际我用的是欠采样DDC方案把中频搬移到基带后再抽取这样FPGA内部处理速率可以降下来。2. 核心细节解析与实操要点2.1 FPGA内部DDS chirp发生器的实现chirp信号是PLFM雷达的灵魂。它的数学表达式是s(t) cos(2π(f₀t 0.5·k·t²))其中k B/T是调频斜率在FPGA里产生这个信号最直接的办法是用DDS直接数字合成。DDS的核心是一个相位累加器和一个正弦查找表。相位累加器的步进值决定了输出频率如果步进值随时间线性增加输出就是chirp。具体实现上我用的是Xilinx的DDS Compiler IP核配置成Phase Generator SIN/COS LUT模式。关键参数这么设系统时钟100 MHz相位累加器位宽32 bit频率分辨率 100MHz/2³² ≈ 0.023 Hz输出位宽12 bit匹配DAC分辨率频率控制字初始值对应f₀25MHz中频然后每个时钟周期增加Δf这里有个坑DDS Compiler的Phase Increment端口是同步更新的如果你每个时钟都改频率控制字那实际调频斜率就取决于你更新控制字的速率。我试过两种方案方案A硬件累加器。用一个32位寄存器存频率控制字每个时钟周期加上一个固定的斜率增量Δk。这样频率控制字本身就是一个斜坡DDS输出自然就是chirp。这个方案最干净资源消耗也小一个加法器就搞定。方案B软件预计算。在STM32里算好每个点的频率控制字通过SPI批量写入FPGA的RAMDDS从RAM里读。这个方案灵活可以产生任意波形但受限于SPI带宽和RAM深度chirp持续时间做不长。我最终选的是方案A因为PLFM雷达的chirp是周期性的、参数固定的没必要每个周期都重新算。方案A的Verilog核心代码大概长这样reg [31:0] phase_acc; reg [31:0] freq_word; wire [31:0] freq_slope 32d429496; // 对应50MHz/1ms的斜率 always (posedge clk) begin if (chirp_en) begin freq_word freq_word freq_slope; phase_acc phase_acc freq_word; end else begin freq_word FREQ_INIT; phase_acc 32d0; end end // 取相位累加器高12位查表 wire [11:0] lut_addr phase_acc[31:20];freq_slope的计算调频斜率k B/T 50MHz/1ms 5×10¹⁰ Hz/s。每个时钟周期10ns频率增加量 5×10¹⁰ × 10⁻⁸ 500 Hz。频率控制字的LSB对应0.023Hz所以500Hz对应500/0.023 ≈ 21739。但因为我用的是32位累加器、100MHz时钟实际频率控制字增量 500 × 2³² / 100×10⁶ ≈ 21474。这个数要反复验算算错了chirp斜率就不对脉冲压缩直接失效。注意DDS输出的chirp信号一定要经过低通滤波再送DAC否则相位截断带来的杂散会污染整个频谱。我一般用7阶巴特沃斯或者切比雪夫滤波器截止频率设在60MHz左右。2.2 高速ADC接口与LVDS接收接收链路的ADC我选的是AD923312位、125MSPSLVDS输出。FPGA这边要用SelectIO资源做LVDS接收这里有几个关键点第一差分对的引脚分配。Artix-7的LVDS接收对引脚有严格要求必须成对使用而且要在同一个Bank里。我一开始没注意把D0P和D1P分到不同Bank结果时序怎么都收敛不了。后来查了UG471才知道LVDS接收对必须用DIFF_TERM原语而且Bank的VCCO要设成1.8V或2.5V。第二源同步时钟的处理。AD9233会输出一个随路时钟DCO频率和采样率一样。FPGA要用这个DCO去采数据而不是用系统时钟。标准做法是用IDELAY或者ISERDES原语把DCO做90度相移后放在数据眼图中间采样。第三数据对齐。ADC输出的12位数据是DDR双沿模式FPGA要用IDDR原语把上升沿和下降沿的数据分开再拼成12位。这里最容易出错的是bit顺序MSB和LSB搞反了FFT出来的频谱就是镜像的。我实际用的接收逻辑核心是Xilinx的SelectIO Wizard生成的// LVDS接收 IDDR 位对齐 IDDR #( .DDR_CLK_EDGE(SAME_EDGE_PIPELINED), .INIT_Q1(1b0), .INIT_Q2(1b0), .SRTYPE(SYNC) ) iddr_inst ( .Q1(data_rise), .Q2(data_fall), .C(dco_shifted), .CE(1b1), .D(adc_data_in), .R(1b0), .S(1b0) ); assign adc_data {data_rise, data_fall}; // 12位拼接DCO的相移用MMCM做相位偏移设成90度对应100MHz时钟的2.5ns。这个值不是固定的跟PCB走线长度有关实际调试时要用示波器看眼图微调相位直到误码率最低。实操心得LVDS接收调试最有效的方法是让ADC输出一个已知的测试图案比如斜坡信号然后在FPGA里用ILA抓数据看是不是连续的。如果数据跳变说明采样相位不对如果数据恒定说明时钟没接对。2.3 数字下变频与脉冲压缩的FPGA实现ADC采回来的中频信号中心频率25MHz带宽50MHz直接做脉冲压缩的话FPGA要处理100MSPS的数据流资源扛不住。所以必须先做DDC数字下变频把中频搬到基带再抽取降速。DDC的标准流程是混频→低通滤波→抽取。混频就是把ADC数据和本振NCO相乘NCO频率设成25MHz正好把中频搬到零频。相乘会产生和频和差频低通滤波把和频滤掉留下基带IQ信号。然后抽取比如4倍抽取数据率从100MSPS降到25MSPS。混频器用乘法器实现Xilinx DSP48E1一个时钟就能算一次18×18乘法100MHz时钟下完全够用。低通滤波器用FIR Compiler IP核系数用MATLAB的fdatool生成截止频率设成25MHz阶数64阶通带纹波0.1dB阻带衰减60dB。脉冲压缩是雷达信号处理的核心。它的本质是匹配滤波把接收信号和发射信号的共轭做卷积。在频域做更快接收信号FFT → 乘以发射信号FFT的共轭 → IFFT。FPGA里用Xilinx的FFT IP核配置成1024点、流水线模式、16位定点。这里有个资源与精度的权衡1024点FFT需要多少BRAM和DSPArtix-7 XC7A35T有90个DSP48和50个36Kb BRAM。一个1024点流水线FFT大概用20个DSP和10个BRAM加上DDC的FIR和混频器总共用掉40个DSP和20个BRAM还剩一半资源。如果你要做4通道资源就紧张了得考虑时分复用或者换更大的芯片。脉冲压缩后的峰值位置对应目标距离峰值大小对应目标RCS。我实测下来用16位定点做FFT脉冲压缩后的峰值信噪比比浮点仿真差2-3dB这个损失可以接受。如果你追求极致性能可以用块浮点Block Floating Point但控制逻辑会复杂很多。2.4 STM32与FPGA的异构通信设计STM32和FPGA之间的数据通路我设计了三条第一条FSMC并行总线。STM32的FSMC灵活静态存储控制器可以映射FPGA的内部RAMSTM32像读外部SRAM一样读FPGA的数据。地址线19根、数据线16根理论带宽能到100MB/s。这条通路用来传雷达原始IQ数据量大但要求实时。第二条SPI配置通道。STM32通过SPI给FPGA下发参数chirp带宽、脉宽、PRF、抽取率、通道选择。SPI速率设成10MHz一帧配置数据也就几十字节毫秒级就能传完。第三条中断握手线。FPGA处理完一帧雷达数据后拉高一个GPIO中断线STM32进中断服务函数启动FSMC搬运。搬完后STM32拉低一个ACK线FPGA开始下一帧。这个握手协议简单可靠比什么DMA描述符都稳。FSMC的时序配置是个细致活。Artix-7的IO时序跟STM32的FSMC时序要对齐我一般把FSMC的地址建立时间设成2个HCLK、数据保持时间设成1个HCLK然后实测读写。如果读出来数据错位就加等待周期。STM32H7的FSMC能跑到200MHz但FPGA那边IO速度有限实际我跑在50MHz带宽约100MB/s传一帧1024点×4通道×16位8KB的数据80微秒就搞定。注意FSMC总线上不要挂其他慢速设备否则会拖累整体时序。我一开始把LCD也挂在FSMC上结果LCD刷新的时候雷达数据就丢帧后来把LCD改成SPI接口才解决。3. 实操过程与核心环节实现3.1 硬件搭建与上电时序整套系统的硬件搭建我按信号流向一步步来第一步电源树设计。FPGA要1.0V核心、1.8V辅助、3.3V IOSTM32要3.3VADC要1.8V模拟和3.3V数字射频前端要5V和3.3V。我用的是TPS系列LDO和DC-DC组合数字部分用DC-DC提高效率模拟部分用LDO保证噪声。上电时序有严格要求先1.0V核心再1.8V最后3.3V。我用一个电源监控芯片TPS3808做时序控制确保FPGA不会因为IO先上电而闩锁。第二步时钟树设计。整板需要一个100MHz的参考时钟我用的是Si5338时钟发生器它能输出4路独立时钟FPGA系统时钟100MHz、ADC采样时钟100MHz、DAC时钟100MHz、STM32时钟25MHz给FSMC用。Si5338通过I2C配置STM32上电后先初始化它。第三步FPGA配置电路。Artix-7用的是SPI Flash配置模式Flash型号是W25Q128。STM32通过SPI先给FPGA的PROGRAM_B引脚一个低脉冲然后FPGA从Flash加载比特流。加载完成后FPGA拉高DONE引脚STM32检测到DONE后开始初始化雷达参数。第四步射频前端调试。这部分最考验仪器。我用信号发生器给发射链路一个25MHz中频信号用频谱仪看2.4GHz输出功率调整功放偏置直到输出1W30dBm。接收链路反过来信号发生器给2.4GHz输入频谱仪看25MHz中频输出测增益和噪声系数。上电时序的坑我踩过有一次FPGA的1.0V核心电还没稳3.3V IO就上来了结果FPGA的IO缓冲器闩锁芯片发烫。后来加了电源监控芯片严格按顺序上电再没出过问题。3.2 FPGA逻辑开发与仿真验证FPGA逻辑开发我用的是Vivado 2020.2工程结构分三层顶层例化所有子模块定义引脚约束雷达核心层DDS、ADC接口、DDC、脉冲压缩通信层FSMC从机接口、SPI从机接口、中断控制写Testbench是FPGA开发的基本功。我的Testbench结构是这样的module tb_plfm_radar; reg clk 0; reg rst_n 0; always #5 clk ~clk; // 100MHz时钟 // 例化DUT plfm_radar_top dut ( .clk(clk), .rst_n(rst_n), .adc_data(adc_data), .dac_data(dac_data), .fsmc_addr(fsmc_addr), .fsmc_data(fsmc_data) ); // 模拟ADC输入一个延迟的chirp reg [11:0] adc_data; initial begin adc_data 0; #1000 rst_n 1; // 生成回波信号 for (integer i 0; i 2048; i i 1) begin #10; adc_data $rtoi(2047 * $cos(2*3.14159*(0.25*i 0.0001*i*i))); end end // 检查脉冲压缩输出 initial begin #50000; if (dut.pc_peak 1000) $display(PASS: peak detected); else $display(FAIL: no peak); $finish; end endmoduleTestbench的关键是模拟真实回波。我一般用MATLAB先生成一个带噪声的chirp回波存成文本文件Testbench用$readmemh读进来。这样仿真结果和MATLAB对得上心里有底。Vivado的时序收敛是个磨人的活。Artix-7跑100MHz大部分逻辑都能收敛但DDC的FIR滤波器如果阶数太高组合逻辑延迟会超。我的经验是FIR用流水线结构每级加寄存器跨时钟域的信号用异步FIFO关键路径上加MAX_FANOUT约束。3.3 STM32固件开发与USB通信STM32固件我用的是HAL库CubeMX生成框架然后手写业务逻辑。主要模块系统初始化时钟树配置H743跑480MHz、GPIO、FSMC、SPI、USB、定时器。FPGA配置加载通过SPI给FPGA的Flash写比特流或者直接给FPGA的SelectMAP接口写。我用的方案是STM32先从SD卡读比特流再通过SPI写Flash最后触发FPGA重加载。这样升级FPGA逻辑不用拆机。雷达参数管理把chirp带宽、脉宽、PRF这些参数存在STM32的Flash里上电后通过SPI下发给FPGA。参数结构体定义如下typedef struct { uint32_t chirp_bw; // 调频带宽单位Hz uint32_t chirp_width; // 脉宽单位ns uint32_t prf; // 脉冲重复频率单位Hz uint8_t rx_channels; // 接收通道数 uint8_t decimation; // 抽取率 uint16_t fft_size; // FFT点数 } radar_config_t;USB CDC数据回传STM32H743自带USB HS PHY我配置成CDC设备上位机识别成一个虚拟串口。雷达数据打包成帧帧头0xAA55 帧长度 通道号 IQ数据 帧尾0x55AA。USB HS理论速率480Mbps实际能跑200Mbps传雷达数据绰绰有余。USB CDC的坑STM32的USB库有bug如果发送数据太快FIFO会溢出。我的解决办法是加一个环形缓冲区USB发送用DMA主循环只往缓冲区写不直接调USB发送函数。另外USB枚举的时候要确保描述符正确否则上位机识别不了。定时器同步雷达的PRF是1kHz我用TIM2产生1kHz的定时中断在中断里触发FPGA开始一次chirp发射和接收。TIM2的时钟源是APB1定时器时钟H743上跑240MHz分频后得到1kHz精度足够。3.4 上位机数据处理与显示上位机我用Python写的核心库是numpy、scipy、pyqtgraph。功能包括实时显示距离-多普勒图Range-Doppler Map用pyqtgraph的ImageItem刷新率30fps。角度谱4通道数据做FFT取相位差算角度。数据存储原始IQ数据存成二进制文件方便后续离线分析。距离-多普勒图的处理流程接收到的IQ数据按脉冲分组每个脉冲做1024点FFT得到距离维然后对慢时间维做FFT得到多普勒维。最后取模平方转成dB用热力图显示。import numpy as np def range_doppler(iq_data, num_pulses, fft_size): # iq_data: [num_pulses, fft_size] 复数数组 range_fft np.fft.fft(iq_data, axis1) doppler_fft np.fft.fftshift(np.fft.fft(range_fft, axis0), axes0) rd_map 20 * np.log10(np.abs(doppler_fft) 1e-10) return rd_map上位机和STM32的通信协议我用的是简单的帧格式波特率用USB CDC的默认值。Python端用pyserial读数据解析帧头帧尾校验和用简单的累加和。实操心得上位机显示最容易卡顿原因是Python的GIL和pyqtgraph的刷新机制。我的优化方法是把数据处理放在单独的线程里用Queue把数据传给GUI线程GUI只负责画图。这样即使数据处理慢界面也不会卡死。4. 常见问题与排查技巧实录4.1 FPGA时序违例与资源溢出问题现象Vivado实现后报时序违例WNS最差负裕量是-2.3ns路径在DDC的FIR滤波器上。排查思路先看时序报告找到违例路径的起点和终点。如果是组合逻辑太长就插流水线寄存器如果是布线延迟大就加区域约束Pblock把相关逻辑约束到同一个时钟区域。解决方法我把64阶FIR拆成4级每级16阶级间加寄存器。这样组合逻辑延迟从20ns降到5ns时序轻松收敛。代价是延迟增加了3个时钟周期对雷达来说无所谓。资源溢出的坑Artix-7 XC7A35T的DSP只有90个我一开始做4通道DDC每个通道用20个DSP4通道就80个加上脉冲压缩的FFT直接超了。后来改成2通道时分复用DSP用量降到50个资源就够了。4.2 ADC采样数据错位与噪声问题现象ADC采回来的数据做FFT频谱上出现镜像分量信噪比只有40dB。排查思路先检查LVDS的bit顺序用ILA抓ADC原始数据看是不是连续的。如果数据跳变说明采样相位不对如果数据恒定说明时钟没接对。解决方法用IDELAY微调DCO的相位从0调到31每调一次看一次FFT。最后发现相位在15的时候信噪比最高达到65dB。这个值跟PCB走线有关换一块板子就要重新调。噪声问题ADC的模拟电源如果不干净噪声会直接混进信号。我在ADC的模拟电源引脚上加了10uF钽电容100nF陶瓷电容噪声从5mV降到1mV信噪比提升了6dB。4.3 STM32与FPGA通信丢帧问题现象FSMC读FPGA数据偶尔读到全0或者全F。排查思路用逻辑分析仪抓FSMC的时序看地址、数据、片选、读写信号的时序关系。发现片选信号拉低后数据线上还没有有效数据STM32就采样了。解决方法在FSMC的时序配置里增加等待周期。STM32H7的FSMC支持扩展模式我设了2个等待周期数据建立时间从10ns增加到30ns丢帧问题解决。另一个坑FSMC的地址线和数据线如果走线不等长高速下会串扰。我把FSMC的时钟降到50MHz并且在PCB上做了等长处理问题彻底消失。4.4 常见问题速查表问题可能原因排查方法解决方案FPGA时序违例组合逻辑太长看时序报告插流水线寄存器ADC数据错位LVDS相位不对ILA抓数据调IDELAY相位脉冲压缩无峰值chirp斜率算错MATLAB仿真对比重算频率控制字STM32读FPGA丢帧FSMC时序太紧逻辑分析仪加等待周期USB传输卡顿FIFO溢出看USB中断加环形缓冲区上位机显示卡死GUI线程阻塞看CPU占用数据处理放子线程射频输出功率低功放偏置不对频谱仪调偏置电压接收噪声大电源不干净示波器加滤波电容4.5 独家避坑技巧技巧一先仿真后上板。FPGA逻辑写完先在Vivado里跑行为仿真用MATLAB生成的回波数据喂进去看脉冲压缩输出对不对。仿真过了再上板能省掉80%的调试时间。技巧二留测试点。PCB上给FPGA的关键信号DCO、ADC数据、FSMC片选留测试点调试的时候用示波器或者逻辑分析仪一夹就能看比用ILA方便。技巧三参数化设计。chirp带宽、脉宽、PRF这些参数不要写死在Verilog里用parameter定义在顶层例化的时候传进去。这样改参数不用重新综合改一个数字就行。技巧四版本管理。FPGA工程、STM32固件、上位机代码都用Git管理每次改完打个tag。我吃过亏改了一个参数忘了改回去结果雷达测距偏了10米查了一天才发现是版本搞混了。技巧五散热。FPGA和ADC发热量不小尤其是夏天。我在FPGA上贴了散热片ADC下面铺了铜皮机箱里加了个小风扇。温度降下来后ADC的噪声也小了信噪比又提升了2dB。5. 系统联调与性能评估5.1 联调流程与步骤系统联调我按从内到外的顺序来第一步FPGA内部环回。DDS产生的chirp直接送给脉冲压缩模块不经过ADC和射频。看脉冲压缩输出是不是一个尖峰。如果是说明FPGA逻辑没问题。第二步ADC环回。DAC输出chirp用电缆直接连到ADC输入中间加衰减器。看ADC采回来的数据做脉冲压缩后有没有尖峰。如果有说明ADC接口和DDC没问题。第三步射频环回。发射链路接天线接收链路接天线中间隔一段距离放个金属板。看能不能测到金属板的距离。如果能说明射频前端没问题。第四步外场测试。把雷达架在楼顶对着马路或者空地看能不能测到车辆或者行人。这一步最考验系统整体性能。5.2 性能评估指标雷达的性能评估我主要看四个指标距离分辨率用两个相距3米的角反射器看距离谱上能不能分开。如果能分开说明分辨率达到3米。测距精度用已知距离的角反射器看测量值和真实值的偏差。我实测下来偏差在0.5米以内。测角精度用转台转动角反射器看角度测量值和真实值的偏差。4元线阵的测角精度大概在2度左右。探测距离用不同距离的角反射器看最小可检测距离。我实测下来对RCS1平方米的目标探测距离约500米。5.3 实际测试数据记录我在楼顶做了一次外场测试雷达架在3米高的三脚架上对着一条马路。测试数据如下目标类型距离(m)测量距离(m)误差(m)信噪比(dB)行人5051.21.218自行车8079.50.522汽车200201.31.328卡车350348.71.332角反射器500500.40.435从数据看测距误差在1.5米以内信噪比随着距离增加而下降符合雷达方程。角反射器的信噪比最高因为它的RCS大。6. 后续扩展方向这套PLFM_RADAR的骨架搭起来后能扩展的方向很多。我列几个我接下来打算做的扩展一增加接收通道。现在4通道只能测一个角度维如果做成8通道或者16通道就能做二维测角甚至做DBF数字波束形成。代价是FPGA资源要翻倍可能得换XC7A100T或者XC7A200T。扩展二提高带宽。现在50MHz带宽对应3米分辨率如果提到200MHz分辨率能到0.75米。但ADC要换、FPGA时序要重新收敛、射频前端要重新设计工作量不小。扩展三加MTI/MTD。现在只做了脉冲压缩如果加动目标显示MTI和动目标检测MTD就能把静止杂波滤掉只显示运动目标。这个在FPGA里加个对消器就行资源消耗不大。扩展四上位机加AI。用Python的scikit-learn或者TensorFlow对雷达数据做分类识别目标是行人、自行车还是汽车。这个我试过用CNN做准确率能到85%但需要大量标注数据。扩展五小型化。现在整套系统装在一个19寸机箱里如果做成手持式或者无人机载需要重新设计PCB用更小的器件功耗也要降下来。我个人在实际操作中的体会是雷达这东西理论看着复杂但真动手做起来最难的不是算法而是工程细节。一个LVDS相位没调对整个系统就废了一个电源没滤波信噪比就掉10dB。所以我的建议是先把一个通道做通再扩展先把近距离测到再拉远先把连续波做稳再上脉冲。一步一步来别想着一步到位。最后再分享一个小技巧雷达调试的时候用角反射器做目标最省心。角反射器的RCS大、方向性好随便放个几十米外回波就很强。等系统调通了再换真实目标。这样能把系统问题和目标问题分开排查起来快很多。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑