用Matlab App Designer设计的脉冲体制雷达系统


app.simulatePulseLFM(Rm, Vmps, RCSdB, BHz, Tp, Ns, Nd, PRI, SNRdB, λ, fs) 函数会为每个目标计算其延迟和多普勒,相应叠加到多脉冲回波矩阵上。并根据所需SNRdB反推噪声功率Pn,使平均信杂比达到设定值。


生成参考 LFM脉冲(同Tp和B)并应用选定的距离窗加权。通过频域相乘实现匹配滤波:FFT计算信号和参考chirp,参考信号共轭频谱点乘回波频谱再IFFT得到压缩结果。sig 即为 Nd×Ns 的匹配滤波输出,每行对应一个脉冲的距离压缩回波。这样,点目标理想情况下在对应延迟的距离单元出现尖峰。



RD = fftshift( fft(sigForRD, Nd, 1), 1),取绝对值平方得到功率谱 RDpow,再转dB RDdB = 10*log10(RDpow + eps)。使用 fftshift 将零频移到中心,使速度轴对称分布。


对 Range-Doppler 平面进行恒虚警率检测,以自动挑出目标峰值:从UI读取 CFAR半径参数 TrR, GdR(距离向训练/保护单元数)和 TrD, GdD(速度向训练/保护单元数),以及目标虚警概率 Pfa。调用 app.cfar2d(RDpow, TrR, GdR, TrD, GdD, Pfa):内部构造一个 (2TrD+2GdD+1) x (2TrR+2GdR+1) 的滑动窗口,在对应RDpow矩阵上做卷积求和得到每点周边窗口总能量,再减去保护单元内能量得到训练单元能量和。


如果存在真实目标 (WorldTargets 非空) 且有检测点,则尝试将检测与实际目标匹配:调用 app.assignAzToDetections(dets, Rm, Vmps, AzDeg, rres, vres, vmax):该函数对每个检测在当前目标列表中寻找“最近”的目标索引。
通过计算检测的距离和速度与各已知目标的差异(分别归一化到距离分辨单元和速度分辨单元尺度),使用加权距离 wRΔr^2 + wVΔv^2 (其中 wR=1.0,wV=0.25 权衡距离更重要)找到最小值对应的目标索引 idx。回每个检测赋予的方位角 az(k) = 对应目标的 Az_deg,以及匹配索引数组 matchIdx。


app.applyScanGate(dets, matchIdx) 对检测结果应用波束限制。


调用 app.updateTracksStrict(dets, matchIdx) 更新目标轨迹:此函数对每个检测,若其 Tag 对应匹配到现有目标 (matchIdx给出有效索引),则将该检测的世界坐标加入对应目标的轨迹点序列。
调用 app.updateAfterglow(dets) 维护余晖缓冲:先将已有的 GlowAge 全部加1,表示经过一帧。然后检查 GlowAge,若超过 GlowMaxFrames(18帧)的点标记为过期,予以删除(对应的 GlowXY 和 GlowAge 条目一起移除)。



调用 app.drawPPI(...) 绘制当前帧的PPI图:传入参数:当前检测点的距离列表 (使用前述 rangeWrapped,确保绘制在第一不模糊距离内)、对应真方位角列表 Az_deg,以及所选参考系模式 (North-Up或Heading-Up)、当前航向角 psi(HeadingEdit值)、当前扫描波束中心角 scanAngleDeg 和波束宽度 bwDeg。

夜雨聆风