简介针对雷达抗干扰中的频率捷变与多目标干扰抑制问题这份MATLAB代码提供了完整可运行的仿真方案尤其适合电子信息工程、计算机、数学等专业学生完成课程设计、期末大作业或毕业设计。程序采用参数化编程关键参数可随时调整注释明细并且附带了可直接替换使用的案例数据新手也能快速理解并上手。压缩包共15个文件以9个.m主程序为核心辅以3个.asv自动保存备份、2个.mat数据文件和1张结果图整体仅276KB轻量且便于本地运行。通过学习本套代码可以系统掌握雷达波形调频捷变的基本原理、多目标干扰抑制的信号处理流程以及如何在MATLAB中搭建参数化仿真实验从而为后续算法改进提供参考。目前已有151人学习下载适用性和实用性得到了初步验证。1. 频率捷变把干扰甩在带宽之外的硬道理搞雷达对抗的工程师只要碰上“多目标干扰”这个词十有八九会先想到频率捷变。简单说频率捷变就是让雷达每个脉冲的发射载频在一个预设带宽内随机跳动干扰机即使截获到上一个脉冲的频率并立刻转发假目标等它的干扰信号到雷达接收机时雷达已经跳到另一个频点上干扰和当前脉冲的匹配滤波器对不上能量被削掉一大截。这个方法不追求把干扰滤干净而是让干扰在脉压之后“散焦”真目标和假目标在距离像上自然分开。对做信号级仿真、验证波形设计、或者准备雷达抗干扰方向毕业设计的人来说用 matlab 把这条链路跑通是最快的验证路径。2. 频率捷变抗干扰的第一性原理一个脉冲的时间差干扰就失配2.1 频率捷变的工作机制脉冲载频如何“随机跳”频率捷变的“变”不是无规律乱跳而是在一个确定的跳频集里按既定次序或随机逻辑选择。每个脉冲的载频可以写成f_n f_0 d_f(n)其中 f_0 是中心频率d_f(n) 是第 n 个脉冲相对中心频率的偏移量。实际雷达里d_f(n) 通常从一组离散频点中选取比如将捷变带宽 B_agile 分成若干等间隔频点间隔就是频率步进 \Delta f然后在 -\frac{B_agile}{2} 到 \frac{B_agile}{2} 之间随机抽取。比如 X 波段雷达中心频率 10 GHz捷变带宽 40 MHz步进 2 MHz那么可用的频点数是 21 个每个脉冲的载频就在这 21 个点里随机选。关键点在于“随机”这两个字如果跳频图案有规律干扰机可以学习如果每个脉冲之间没有相关性干扰机只能靠截获当前脉冲频率再转发这就引入了至少一个脉冲周期的时间延迟也就是抗干扰效果的来源。从信号处理角度看频率捷变改变的不仅是载频还有回波在匹配滤波后的相位。同一目标在不同脉冲上因为频率不同回波相位里多了一项 2\pi d_f(n) \tau其中 \tau 是目标延时。这个随机相位如果不管相参积累会散焦所以后面必须有相位补偿这一块在第 4 章单独展开。2.2 干扰机跟不上的那一步截获、转发与失配的数学表达多目标干扰的典型实现方式是数字射频存储DRFM干扰机。干扰机截获雷达脉冲测出载频然后在后续脉冲周期里用这个频率把一串假目标回波转发出去。假设干扰机在第 n 个脉冲周期转发的是第 n-1 个脉冲截获的频率那么干扰信号的载频偏移量是 d_f(n-1)而雷达当前脉冲的匹配滤波参考频率是 d_f(n)。在基带等效模型里干扰信号经过混频后是一个频率为 d_f(n-1) 的矩形脉冲匹配滤波器的参考信号频率为 d_f(n)。两者频率差为\Delta d_f(n-1) - d_f(n)当 \Delta 0也就是雷达频率不变时干扰可以正常脉压得到完整的脉压增益当 \Delta \neq 0 时失配后的脉压输出峰值幅度大约按 \left| \text{sinc}(\Delta T_p) \right| 衰减T_p 是发射脉宽。举个例子脉宽 2 us频率步进 2 MHz哪怕只差一个步进\Delta T_p 4sinc(4) 的幅度约 0.04相当于衰减 28 dB。这个衰减足以让假目标从“和真目标一样强”变成“淹没在噪声基底附近”。这就是频率捷变对抗多目标干扰最朴素、也最有效的数学机理。2.3 频率捷变 vs. 频率分集 / 重频抖动别把概念用混了做方案汇报时常有人把三个概念搅在一起频率捷变、频率分集、重频抖动。频率捷变说的是载频在脉冲间随机跳变目标是抗瞄准式干扰和欺骗干扰频率分集是同时或分时用多个频率发射主要解决目标闪烁和多径衰落重频抖动则是改变脉冲重复间隔用来对抗距离欺骗和速度欺骗对压制干扰基本无效。这三种手段解决的不是同一类问题。频率捷变解决的是“干扰机锁定你当前频率”的问题频率分集解决的是“某个频点上有强干扰或强衰落”的问题重频抖动解决的是“假目标在距离维/速度维上伪造成真实目标”的问题。在 matlab 仿真里频率分集通常建模为多个载频并行发射重频抖动建模为 PRI 序列随机化而频率捷变是每脉冲单频、频率随机。搞清楚边界才能避免仿真模型里把三种手段混在一起最后分析不出到底是谁起的作用。3. 用 matlab 搭一个频率捷变抗干扰仿真参数表与可复现代码3.1 仿真模型的关键假设从射频搬到基带的等效做雷达信号仿真第一步不是上全射频模型而是想清楚用什么等效方式。全射频模型要采样到几十 GHz数据量大到没法在普通电脑上跑 128 个脉冲的相参处理。常见做法是用基带等效发射信号写成复包络频率捷变建模为基带信号的频率偏移量 d_f(n)接收端用中心频率 f_0 做相参本振混频剩下的处理全在基带完成。基带模型下第 n 个脉冲的目标回波表达式为y_n(t) A \cdot \text{rect}\left(\frac{t - \tau_0}{T_p}\right) \cdot \exp\left(j 2\pi d_f(n) (t - \tau_0)\right)其中 \tau_0 是目标延时。这里有个限制d_f(n) 是带通频率采样率必须满足奈奎斯特条件否则频率偏移量会混叠。我一般取 fs \geq 2 \times \frac{B_agile}{2}也就是 fs \geq B_agile工程上再留 1.5 倍余量。40 MHz 捷变带宽用 100 MHz 采样率足够安全。干扰机的建模更简单。假设干扰机在第 n 个脉冲周期用第 n-1 个脉冲的频率转发假目标那干扰信号基带就是频率为 d_f(n-1) 的一组矩形脉冲放置在不同的延时位置模拟多个假目标。固定频率雷达里d_f(n) 恒为 0干扰频率也为 0完全匹配捷变频雷达里\Delta 随机变化干扰失配。3.2 雷达与干扰的关键参数表一组可直接复现的值下面这组参数是我调试过很多次后比较稳的组合适合在普通笔记本电脑上跑既能体现频率捷变效果又不会让内存爆掉。参数取值说明中心频率 f_010 GHzX 波段典型值基带仿真中不直接出现频率步进 \Delta f2 MHz决定频点间隔也决定失配衰减程度捷变带宽 B_agile40 MHz频点总数 21 个发射脉宽 T_p2 us距离分辨力约 75 m矩形包络采样率 fs100 MHz覆盖捷变带宽并留余量距离窗长 T_window50 us对应最大不模糊距离约 7.5 km脉冲重复周期 PRI100 us对应 10 kHz PRF积累脉冲数 N128慢时间 FFT 后多普勒分辨力约 78 Hz目标距离2000 m延时约 13.33 us假目标数量9 个目标前后 400 m 范围内均匀分布目标距离 2000 m延时 13.33 us在 50 us 距离窗内。假目标距离从 1600 m 到 2400 m每 100 m 一个保证假目标之间的间隔大于半个脉宽对应的距离避免旁瓣相互干扰这个点在避坑章节会细说。3.3 生成频率捷变序列与回波矩阵先写基础函数把“单脉冲回波”和“干扰回波”封装成两个函数方便后续换参数。function y gen_target_echo(f_dev, tau0, t_fast, T_p) % 生成单个目标的基带回波 % f_dev : 当前脉冲的频率偏移量 (Hz) % tau0 : 目标延时 (s) % t_fast: 快时间轴 (s) % T_p : 发射脉宽 (s) y zeros(size(t_fast)); idx (t_fast tau0) (t_fast tau0 T_p); y(idx) exp(1j * 2 * pi * f_dev * (t_fast(idx) - tau0)); end function y gen_jamming_echo(f_j, tau_j, t_fast, T_p, amp) % 生成 DRFM 转发干扰的基带回波 % f_j : 干扰使用的频率偏移量取上一脉冲的频率 % tau_j : 假目标延时向量 % amp : 干扰幅度相对真实目标的倍数 y zeros(size(t_fast)); for k 1:numel(tau_j) idx (t_fast tau_j(k)) (t_fast tau_j(k) T_p); y(idx) y(idx) amp * exp(1j * 2 * pi * f_j * (t_fast(idx) - tau_j(k))); end end这两个函数看起来简单但有几个细节值得说明。第一个函数里回波相位必须用f_dev * (t - tau0)而不是f_dev * t因为延时本身会带来相位偏移丢掉这一项目标距离会算错。第二个函数里干扰回波频率用的是上一脉冲的f_j这模拟的是干扰机截获-转发延迟也是整个抗干扰仿真中最关键的假设。然后是主程序的回波生成和频率序列生成。% 参数定义 c0 3e8; f0 10e9; f_step 2e6; B_agile 40e6; K round(B_agile / (2 * f_step)); % 频率跳变格数这里 K10 N_pulse 128; T_p 2e-6; fs 100e6; T_window 50e-6; T_r 100e-6; t_fast (0 : round(T_window * fs) - 1) / fs; N_fast numel(t_fast); % 目标与假目标的位置 R0 2000; tau0 2 * R0 / c0; R_j 1600 : 100 : 2400; % 9 个假目标 tau_j 2 * R_j / c0; amp_jam 0.8; % 固定频率雷达载频偏移恒为 0 rx_fixed zeros(N_pulse, N_fast); % 捷变频雷达载频偏移序列 rx_agile zeros(N_pulse, N_fast); f_dev_seq zeros(N_pulse, 1); rng(2024); % 固定随机种子保证结果可复现 for n 1:N_pulse % 干扰机使用上一脉冲的频率 if n 1 f_prev 0; else f_prev f_dev_seq(n - 1); end % 固定频率模式 rx_fixed(n, :) gen_target_echo(0, tau0, t_fast, T_p) ... gen_jamming_echo(f_prev, tau_j, t_fast, T_p, amp_jam); % 捷变频模式当前脉冲随机跳频 f_cur f_step * randi([-K, K]); f_dev_seq(n) f_cur; rx_agile(n, :) gen_target_echo(f_cur, tau0, t_fast, T_p) ... gen_jamming_echo(f_prev, tau_j, t_fast, T_p, amp_jam); end这里randi([-K, K])给出了从 -10 到 10 共 21 个频点对应 ±20 MHz 的捷变范围。rng(2024)这一行不能省否则不同机器甚至同机器不同次运行跳频图案不同统计结果会有几个 dB 的浮动导致你没法判断算法好坏。固定频率组就是对照组干扰机频率恒为 0与雷达频率完全一致假目标全数通过。3.4 匹配滤波与固定/捷变对比输出回波生成后要做匹配滤波。固定频率模式用 0 频参考捷变频模式用每个脉冲实际频率做参考。function pc matched_filter_pulse(y, f_dev, fs, T_p) % 对单个脉冲做匹配滤波 % y : 基带回波 % f_dev : 当前脉冲的频率偏移量 nt round(T_p * fs); t_ref (0 : nt - 1) / fs; h conj(fliplr(exp(1j * 2 * pi * f_dev * t_ref))); pc conv(y, h, same); end % 脉压处理 pcm_fixed zeros(N_pulse, N_fast); pcm_agile zeros(N_pulse, N_fast); for n 1:N_pulse pcm_fixed(n, :) matched_filter_pulse(rx_fixed(n, :), 0, fs, T_p); pcm_agile(n, :) matched_filter_pulse(rx_agile(n, :), f_dev_seq(n), fs, T_p); end % 非相参平均距离像 d_fixed mean(abs(pcm_fixed), 1); d_agile mean(abs(pcm_agile), 1); % 输出关键指标真目标位置的峰值 idx_r0 round(tau0 * fs); pk_true_fixed d_fixed(idx_r0); pk_true_agile d_agile(idx_r0); % 假目标区域的最大峰值排除真目标附近 idx_jam_region round((tau0 - 1e-6) * fs) : round((tau0 1e-6) * fs); d_fixed_no_true d_fixed; d_fixed_no_true(idx_jam_region) 0; d_agile_no_true d_agile; d_agile_no_true(idx_jam_region) 0; pk_jam_fixed max(d_fixed_no_true); pk_jam_agile max(d_agile_no_true); fprintf(固定频率: 真目标 %.2f dB, 假目标峰值 %.2f dB, 信干比 %.2f dB\n, ... 20*log10(pk_true_fixed eps), 20*log10(pk_jam_fixed eps), ... 20*log10(pk_true_fixed / (pk_jam_fixed eps))); fprintf(捷变频: 真目标 %.2f dB, 假目标峰值 %.2f dB, 信干比 %.2f dB\n, ... 20*log10(pk_true_agile eps), 20*log10(pk_jam_agile eps), ... 20*log10(pk_true_agile / (pk_jam_agile eps)));匹配滤波的conv(y, h, same)用的是时域卷积数据量小不需要 FFT。h的构造是发射脉冲的共轭时间反演这里发射脉冲就是单频矩形包络所以h是一个复数指数序列的反折。这段代码跑完后固定频率模式通常假目标峰值和真目标差不多信干比接近 0 dB捷变频模式假目标峰值会掉 10 到 20 dB视具体频率步进和脉宽而定。4. 捷变频相参积累相位补偿的 matlab 实现与残余误差4.1 为什么固定频率积累能出峰、捷变频直接 FFT 会散焦第 3 章用的是非相参积累把每个脉冲的脉压幅度取平均看不出相参积累下的问题。实际雷达做检测时通常要做慢时间维的 FFT把多普勒维拉开同时获得积累增益。问题在于目标回波的相位在脉冲间的变化不仅来自多普勒还来自频率捷变。在脉压峰值点第 n 个脉冲的输出相位大约是\varphi_n -2\pi \left( f_0 d_f(n) \right) \tau_0其中 \tau_0 是目标延时。固定频率时 d_f(n)0相位变化只由目标多普勒决定FFT 后对应一个干净的多普勒峰。捷变频时 d_f(n) 随机\varphi_n 多了一个随机项直接做 FFT目标能量会摊到整个多普勒维上看起来就是“找不到目标”。这不是频率捷变本身的锅而是处理流程里缺了一步相位补偿。把随机项去掉捷变频依然可以做相参积累。4.2 相位补偿公式与 matlab 实现补偿思路很直接。既然多出的相位是 -2\pi d_f(n) \tau_0那就把每个脉冲的快时间脉压输出乘上 e^{j 2\pi d_f(n) \tau_0}把这个随机相位抵消掉。\tau_0 通常用目标所在距离单元的位置来估计。% 取真实目标所在距离单元的快时间脉压序列 x_fixed pcm_fixed(:, idx_r0).; x_agile pcm_agile(:, idx_r0).; % 未做补偿的捷变频多普勒谱 win hamming(N_pulse); fdop_agile fft(x_agile .* win, 1024); % 相位补偿乘以 exp(j * 2 * pi * f_dev * tau0) tau_est idx_r0 / fs; % 估计的目标延时 phi_comp exp(1j * 2 * pi * f_dev_seq(:) * tau_est); x_agile_comp x_agile .* phi_comp; % 补偿后的多普勒谱 fdop_agile_comp fft(x_agile_comp .* win, 1024); % 固定频率参考 fdop_fixed fft(x_fixed .* win, 1024);补偿时用的tau_est是目标距离单元对应的延时也就是idx_r0 / fs。这里有个精度问题如果距离单元恰好落在真实延时上补偿是精确的但如果目标不落在整数采样点tau_est与真实tau0之间就会有一个误差称之为残余相位误差。4.3 残余相位误差对多普勒测量的影响残余误差 \delta\tau \tau_0 - \tau_est 会导致补偿不彻底慢时间序列里还剩一个相位项 2\pi d_f(n) \delta\tau。d_f(n) 的随机性把这个残差变成多普勒维上的相位噪声表现为目标峰的旁瓣抬高、谱峰展宽。\delta\tau 越大展宽越明显。解决办法有两种。第一种是在快时间域做插值让目标回波精确落在整数采样点上% 用频域插值把目标延时搬到整数采样点 % 频域相位旋转等价于时域分数延时本质是 sinc 插值 tau_delta tau0 - tau_est; % 分数延时量 % 对脉压前回波做频移或者直接对脉压后距离像做相位修正 correction exp(-1j * 2 * pi * f_dev_seq(:) * tau_delta); x_agile_comp2 pcm_agile(:, idx_r0). .* correction .* phi_comp;第二种是先用非相参积累找到目标距离单元的粗略位置再在这个距离单元附近做插值估计出更精确的延时然后用精确延时做补偿。工程上常用后一种计算量小精度足够。做仿真时如果你发现捷变频相参积累后的目标峰比固定频率宽或者旁瓣明显抬高先别怀疑频率捷变方案先检查补偿用的延时是不是精确到了分数采样精度。5. 频率捷变仿真的避坑指南五个常见翻车和对应参数调整5.1 采样率取低了频谱混叠把捷变带宽顶掉现象捷变频模式下假目标峰值不但没降反而出现很多额外的小峰目标距离像看起来像毛刺。把频差一算理论衰减 28 dB实际只降了 3 到 5 dB。原因基带模型里回波是带通信号频率偏移量 d_f(n) 最大可达 20 MHz。采样率如果只取 40 MHz刚好踩在奈奎斯特边界上20 MHz 附近的频点会混叠到低频段导致匹配滤波器的参考频率和混叠后的干扰频率“意外匹配”。解决采样率至少取捷变带宽的 2 倍稳妥一点取 2.5 倍。把 fs 从 40 MHz 提到 100 MHz混叠马上消失。判断混叠的一个简单方法固定随机种子只改采样率看假目标峰值是否显著下降。5.2 延时取整导致距离像“假搬家”现象目标真实距离 2000 m但距离像峰值出现在 1986 m 或 2014 m而且不同脉冲之间峰值位置小幅摆动。相位补偿用了错误的目标单元相参积累后峰变宽。原因idx_r0 round(tau0 * fs)把 13.3333 us 的延时量化到采样网格上。100 MHz 采样率下单个采样点代表 1.5 m取整误差可以把目标挪动一格虽然幅度几乎不变但相位补偿时tau_est与真实tau0差了最多 0.75 m 对应的延时。解决所有延时都用浮点数计算只有在取距离单元索引时才取整。相位补偿必须用插值后的精确延时或者用 4.3 节里的分数延时修正。别再直接用round(tau0*fs)这种粗网格去算相位补偿这是最容易翻车的点。5.3 相参与非相参积累处理选错导致误判“捷变没效果”现象用 3.4 节的非相参距离像看捷变频效果明显但换到慢时间 FFT 看多普勒谱目标完全找不到于是得出结论“频率捷变没法用”。原因慢时间 FFT 没做相位补偿。频率捷变本身是多目标干扰的有效对抗手段但它破坏了脉冲间的相参性必须额外补偿。第 4 章补上phi_comp之后目标峰就恢复了。仿真时一定要把两层处理分开距离维看干扰抑制多普勒维看相参积累两层不能混为一谈。解决处理流程固定为“脉压 → 相位补偿 → 慢时间 FFT”。如果只看干扰抑制效果用非相参距离像如果看目标检测和测速精度必须走相参链路。两条链路的结果都保留做设计报告时一起展示。5.4 随机种子不固定仿真结果不可复现现象同一套代码跑两次得到的假目标峰值差 6 dB甚至有时候固定频率组和捷变频组的大小关系都会反转。原因randi([-K, K])每次运行时产生不同的跳频图案。跳频图案不同干扰失配的程度就不同单次仿真的统计起伏远大于抗干扰效果本身。解决在主程序开头写rng(2024)这类固定种子语句。更进一步做参数分析时跑 50 或 100 次蒙特卡洛每次用不同的种子把假目标峰值的分布画出来用中位数或均值做结论。给别人复现代码时一定要把随机种子的位置写到注释里否则对方跑来跑去看不到一致结果容易以为你的算法有问题。5.5 假目标离真目标太近失配后的旁瓣盖过真目标现象真目标和最近的假目标距离间隔只有 50 m捷变频模式下假目标虽然衰减了但残余旁瓣落在真目标峰上信干比改善量比理论值低很多。原因矩形脉冲的匹配滤波输出是 sinc 形状第一旁瓣只比主瓣低 13.2 dB。干扰失配后虽然主瓣衰减了 20 dB 以上但旁瓣可能还有一定幅度如果假目标离真目标太近旁瓣直接叠加到真目标上。解决把假目标的最小距离间隔拉大到大于两倍距离分辨力也就是 2 \times \frac{c}{2B}这里的 B 是脉宽对应的带宽。脉宽 2 us 对应距离分辨力 75 m所以假目标间隔至少 150 m。另一个办法是在匹配滤波后加上 Hamming 窗或 Taylor 窗把距离旁瓣压到 -40 dB 级别但这会略展宽主瓣。做抗干扰评估时先不带窗看机理最后带窗看工程可达效果两者分开评估。6. 从仿真到工程落地频率捷变波形的验证顺序与调参技巧仿真能跑通只是第一步真正要把频率捷变方案落到雷达系统里我习惯按下面的顺序验证。先验证波形参数是否自洽把捷变带宽、频率步进、脉宽代入采样率和处理增益公式确认距离分辨力、无模糊距离、多普勒分辨力满足指标。再用单目标回波走通全链路不加干扰确认自检通道的目标峰值出现在正确距离和正确多普勒单元这一步卡住说明相位补偿有 bug。第三步才加干扰先加单假目标再加多假目标逐步观察假目标峰值的衰减趋势判断是频率捷变的效果还是运气。调参也有一个顺序原则优先调频率步进因为它是控制失配衰减量的直接参数然后调脉宽因为失配衰减是 \Delta 与 T_p 的乘积脉宽越大同样的频率差带来的失配衰减越强最后才调捷变带宽因为它决定可用频点数和复杂度对单次失配的贡献不如前两个参数明显。如果仿真里发现假目标抑制量不够先加大 T_p再看 \Delta 是否足够别一上来就买更大的带宽。最后说一个我自己的经验。做捷变频相参积累时最常遇到的问题是补偿延时精度不够。我早期做过一个版本补偿用的延时是从非相参距离像的峰值取的觉得已经够准结果多普勒谱总比固定频率宽不少。后来把延时估计改成频域插值之后谱宽立刻恢复正常。从那以后我所有相位补偿相关代码里都会写一行注释先用插值求精确延时再做补偿。这个教训让我少走了好几周弯路希望你不用再踩一遍。频率捷变不是万能的它对付的是“截获-转发”型干扰机对宽带压制干扰效果有限对灵巧干扰也需要结合其他措施才能压住。但作为雷达抗干扰的基石波形之一用 matlab 把这套链路吃透后面再做自适应波形设计、机器学习干扰识别都会觉得根基扎实。希望帮到你。本文还有配套的精品资源点击获取