
做雷达波形设计的朋友应该都有这种体会OFDM 在通信里用得风生水起但搬到雷达场景总让人纠结多普勒敏感性、峰均比偏高Chirp 波形简单皮实频谱效率和波形灵活性又差一些。把两者结合成 OFDM-Chirp 波形是这几年低截获概率雷达、水声探测方向经常遇到的选题。这篇文章就把我在 MATLAB 里做 8 个 OFDM-Chirp 波形的时频域分析、模糊函数计算的完整过程梳理一遍8 组参数怎么定代码怎么写图表怎么看以及调试过程中踩过哪些坑。适合正在做雷达波形设计、通信信号处理的硕博生或者刚接触波形仿真、想找个能直接落地的 MATLAB 实操模板的工程师。1. 波形设计逻辑为什么 OFDM 和 Chirp 非要“焊”在一起1.1 OFDM 在雷达里的两面性OFDM 的本质是多个正交子载波并行传输时间上叠加频谱利用率高。通信系统里大家熟悉的 IFFT 调制放在雷达里也可以用来构造具有高距离分辨率的脉冲子载波还能独立编码回波分离和抗多径都方便。但雷达场景和通信场景有个本质差别通信里多普勒频移通常可以容忍雷达里却直接关系到目标测速。只要多普勒频移不是子载波间隔的整数倍子载波正交性就会被破坏产生载波间干扰。再加上 OFDM 的时域包络是多个正弦分量叠加峰均比很高对发射机线性度要求苛刻这些老问题每个做过 OFDM 雷达的人都躲不开。1.2 Chirp 为什么是雷达界的常青树Chirp 信号的频率随时间线性增加或减小瞬时带宽大匹配滤波之后能压缩成一根很窄的峰值压缩增益等于时宽带宽积 BT。想要更细的距离分辨率把带宽做大就行工程上实现也简单压控振荡器就能产生所以在雷达里用了将近一个世纪。它的代价藏在模糊函数里。Chirp 的模糊函数是一道“斜刀刃”距离维和多普勒维之间存在强耦合目标速度变了测距结果会跟着偏。不过换个角度看耦合也给了线索只要把斜率标定清楚就能从单个脉冲里同时估计距离和速度的初步值。这也是后面看模糊函数图时要特别关注的方向。1.3 合体之后的数学模型OFDM-Chirp 的复基带信号可以写成s(t) Σ a_k · exp(j2πkΔf t) · exp(jπμt²)0 ≤ t ≤ T其中 a_k 是第 k 个子载波的复振幅Δf 是子载波间隔μ 是 Chirp 调频率。每个子载波都被同一个线性调频项调制瞬时频率为 kΔf μt。在时频平面上看原本 OFDM 的“梳齿”被整体压歪变成一组互相平行的斜线。这种组合的价值在于OFDM 的多子载波并行让带宽利用率上去Chirp 的扫频让单个脉冲的时宽带宽积做大两者叠加获得的脉冲压缩增益比单一体制更可观。后面要做的 8 组波形本质上就是在这个模型下改变子载波数 N、脉冲宽度 T、调制带宽 B 和调频率 μ观察不同参数配置对性能的影响。1.4 什么场景值得用这种波形如果系统关注低截获概率、抗干扰又希望保留高距离分辨率OFDM-Chirp 比单一 OFDM 或单一 Chirp 更适合。代价是发射机设计复杂、接收匹配滤波成本高、PAPR 控制更难。但在波形筛选阶段先用 MATLAB 把模糊函数算一遍、把参数趋势摸清楚是最划算的做法。2. 8 组波形怎么定出来参数矩阵与约束条件2.1 先定框架再填参数做波形对比最忌讳东一榔头西一棒子。我希望 8 组参数能覆盖三个维度子载波数 N、脉冲宽度 T、调制带宽 B。N 决定频谱结构的疏密B 决定距离分辨率T 决定多普勒分辨率而 μ B/T 决定距离-多普勒耦合坡度。我筛出的 8 组参数如下序号子载波数 N调制带宽 B脉冲宽度 T子载波间隔 Δf调频率 μ时宽带宽积 BTΔf·T11680 MHz20 μs5 MHz4 MHz/μs1600100232160 MHz20 μs5 MHz8 MHz/μs3200100364160 MHz40 μs2.5 MHz4 MHz/μs640010043240 MHz40 μs1.25 MHz1 MHz/μs160050564320 MHz20 μs5 MHz16 MHz/μs64001006128320 MHz40 μs2.5 MHz8 MHz/μs1280010071620 MHz20 μs1.25 MHz1 MHz/μs400258128640 MHz10 μs5 MHz64 MHz/μs640050这里 B、T、Δf 在代码里要用国际单位 Hz 和 s 计算表格里写成 MHz、μs 只是为了方便阅读。μ 的单位可以直观理解为“每秒扫多少 MHz”所以 4 MHz/μs 等于 4×10¹² Hz/s。2.2 正交性约束不能忘OFDM 的核心优势来自子载波正交普通 OFDM 要求 Δf·T 为整数。加了 Chirp 之后只要所有子载波共用一个调频率 μ任意两个子载波的瞬时频率差仍然是 (k₁-k₂)Δf与时间无关所以正交条件不变。表里所有组我都刻意让 Δf·T 取整数就是为了保证子载波正交排除正交性破坏对模糊函数对比的干扰。这个细节是很多人忽略的。有些论文为了其他指标把 T 取成小数结果模糊函数图上出现规律性旁瓣还以为是算法写错了其实是子载波根本没有正交。2.3 带宽与采样率的边界复基带仿真里一个容易翻车的点OFDM-Chirp 的最高瞬时频率并不等于调制带宽 B而是出现在第 N-1 个子载波、t T 的时刻f_max (N-1)·Δf μT (N-1)·Δf B也就是说Chirp 扫频在符号结束时把整个频谱又往外推了 B。采样率不能按普通 OFDM 的 fs ≥ B 取我建议至少 fs ≥ 2·f_max再乘一个过采样系数。表格第 8 组 f_max 达到 1275 MHz如果采样率不敢给足高频部分会直接混叠进有效带宽时频图和模糊图上会出现和真实结果几乎一模一样的假图案非常难排查。3. 时频域分析实操从代码到图表读出什么3.1 生成波形的 MATLAB 核心代码生成 OFDM-Chirp 波形我习惯写成一个独立函数方便 8 组参数循环调用function [s, t, fs] gen_ofdm_chirp(N, Bw, T, Df, osf) % 输入N 子载波数Bw 调制带宽T 脉冲宽度Df 子载波间隔osf 过采样系数 mu Bw / T; f_max (N - 1) * Df Bw; fs osf * 2 * f_max; Ns round(T * fs); t (0:Ns-1). / fs; s zeros(Ns, 1); for k 0:N-1 phase 2*pi*k*Df*t 2*pi*0.5*mu*t.^2; s s exp(1j * phase); end s s / norm(s); % 能量归一化方便后续比较 end代码里最核心的就是相位那行第一项是子载波频率的线性相位第二项是 Chirp 的二次相位对时间求导就得到瞬时频率 kΔf μt。这里不要用离散频率先积分再累加后面坑里细说。3.2 时域波形观察什么以第 1 组 N16、B80 MHz、T20 μs 为例生成后先画出前几千个采样点的实部和包络。包络的形状直接反映 PAPR。用下面这行算峰值平均功率比papr 20 * log10(max(abs(s)) / rms(s));8 组跑下来PAPR 差异很明显N16 时大约 8~9 dBN128 时能到 12 dB 以上。PAPR 高意味着发射机必须留更大的功率回退否则波形削顶后旁瓣水平会急剧恶化。这个指标在你后面选型时经常起到一票否决的作用。3.3 频域分析与频谱泄漏对信号做 FFT 并转到 dB 显示S fftshift(fft(s)); f_axis (-Ns/2:Ns/2-1) / Ns * fs; plot(f_axis / 1e6, 20*log10(abs(S)/max(abs(S))));Chirp 的能谱本身接近矩形OFDM-Chirp 的整体频谱会呈现“矩形包络 波纹结构”。这里有个实用结论由于 Chirp 让瞬时频率在时宽内扫过整个带宽频谱包络比普通 OFDM 更接近理想低通带外泄漏更集中。不加窗双音谐波旁瓣大约 -13 dB加 Hamming 窗能压到 -40 dB 以下但主瓣会宽出约 1.5 倍。工程上别轻易加窗。旁瓣超标时优先考虑把 BT 做大也就是增加时宽带宽积而不是牺牲距离分辨率去换旁瓣。窗是一把双刃剑。3.4 spectrogram 怎么设参数MATLAB 里画时频图最方便的是 spectrogramspectrogram(s, hann(256), 128, 512, fs, yaxis);窗口长度、重叠点数、FFT 点数这三个参数是互锁的。窗口越长频率分辨率越好但时间分辨率会变差。对 Chirp 来说如果窗口内瞬时频率扫过了多个频率时频图就会变成一条糊开的宽带窗口太短则频率轴模糊相邻子载波直接粘在一起。我实测下来窗口长度取 T/80 附近、重叠 75% 是比较折中的方案。以 20 μs、fs 约 5 GHz 的信号为例窗口长度 256 点、重叠 128 点比较合适。频率分辨率约等于 1/窗口时长校验标准是它必须小于 Δf否则子载波会在图上重叠。3.5 从时频图判断波形是否正常一份正确的 OFDM-Chirp 时频图应该是若干条等斜率平行线起点按 Δf 等间距排开持续时间为 T终点整体抬高 B。每次生成新波形我会按顺序检查四件事斜率是否等于 μ。目测或用图像上的两点坐标算一下即可。相邻线间距是否等于 Δf。有没有出现折返曲线。一旦最大瞬时频率超过 fs/2就会看到从图右侧“弹回”的假线这是混叠不是波形本身的问题。相位连续的地方没有竖条。竖条通常意味着相位在某个采样点跳变后面排查章节会讲。4. 模糊函数分析雷达性能到底谁说了算4.1 模糊函数是什么一张图看懂模糊函数定义式χ(τ, η) ∫ s(t) · s*(tτ) · e^{j2πηt} dt可以理解成匹配滤波器在所有时延-多普勒失配组合下的输出。时延 τ 对应目标距离多普勒频移 η 对应目标速度峰值出现在目标和滤波器完全匹配的位置周围区域则是失配残影。打个生活化的比方模糊函数就是波形的“指纹”或者“拍立得对焦测试图”。对焦准确只有一处对焦不准四周全是残影。雷达波形设计的目标就是让这张图尽量接近“图钉”——中间一根尖峰四周快速掉光。如果模糊图拖成一条斜线说明距离和多普勒互相污染测距测速会打架。4.2 数值计算别用双重循环用 FFT 加速初学者最容易写一个二重循环把所有时延和多普勒组合全部互相关一遍。采样点一多这代码根本跑不动。我推荐一个标准加速写法固定时延 τ令 d(t) s(t) · conj(s(tτ))然后对 d(t) 做 FFT。FFT 的频率轴本身就是多普勒轴因为不同多普勒频移恰好对应 d(t) 中不同的指数调制分量。这样外层循环只遍历时延内层一次性算完所有多普勒点效率高出几个数量级。function [AF, tau_axis, fd_axis] calc_amb(s, fs, max_tau) L length(s); AF zeros(max_tau 1, L); for tau 0:max_tau if tau 0 seg s .* conj(s); else seg s(tau1:end) .* conj(s(1:end-tau)); seg [seg; zeros(tau, 1)]; end AF(tau1, :) fft(seg, L); end AF fftshift(AF, 2); tau_axis (0:max_tau) / fs; fd_axis (-L/2 : L/2-1) / L * fs; end注意 seg 末尾补零是为了恢复长度 L因为每次时延移动后序列变短了。负时延部分可以通过共轭对称关系补全对大多数分析来说只看正时延半平面就够。4.3 8 组波形的模糊图对比我用上述函数跑完 8 组参数把关键观察整理成表序号距离主瓣宽度零多普勒旁瓣多普勒主瓣模糊图形态主要特点1约 1/B窄约 -13 dB较宽略有倾斜通用检测PAPR 最低2更窄约 -13 dB中等倾斜增强距离分辨提升PAPR 升高3中等约 -13 dB较窄较对称多普勒分辨好结构密集4中等约 -13 dB较宽刀刃倾斜明显多普勒容限好耦合较强5最窄约 -10 dB中等旁瓣抬升高距离分辨旁瓣劣势6最窄之一约 -13 dB窄接近图钉综合性能好PAPR 高7最宽约 -14 dB宽刀刃倾斜重结构简单适合低速大目标8最窄约 -10 dB很宽快速扫频距离分辨率极高多普勒弱这里的旁瓣水平是我在仿真中归一化后目测的数值实际会随加窗和截断范围变化重点看相对趋势BT 越大距离主瓣越窄但旁瓣不一定更好μ 越大刀刃倾斜越明显N 越大模糊图越接近图钉但 PAPR 也越差。4.4 用切面图判断距离分辨率和多普勒容限模糊图三维图只是第一层真正做定量分析要看切面。零多普勒切面η0相当于目标静止时的匹配滤波输出。主瓣宽度约等于 1/B第一旁瓣高度约 -13 dB。检查项目有两个主瓣宽度是否符合 1/B 预期旁瓣是否出现周期性尖峰。周期性尖峰优先检查 Δf·T 是否是整数以及信号边缘有没有截断造成的不连续。零时延切面τ0反映的是多普勒响应宽度约等于 1/T。这个切面往往不对称因为 Chirp 的距离多普勒耦合会把峰位推向一边。对于第 4、第 7 组这类低 μ 低 BT 波形多普勒容限很宽但主瓣旁边就是很深的旁瓣区适合检测目标是否存在第 6 组这类高 BT 波形多普勒主瓣收窄分辨多目标更好但对测速误差更敏感。验证参数有没有设错还有一个很管用的技巧从模糊图里提取峰值处的时延和频移坐标做一次线性拟合拟合斜率应该约等于 μ。如果拟合值和设定值差很远波形生成或者模糊函数计算肯定有一个地方出错了。4.5 8 组波形到底怎么选从应用角度把选择逻辑总结成三条经验多目标高分辨场景优先选大 N、大 B、大 BT 的组比如第 6、第 8 组距离维干净。低速目标稳健检测场景选中低 μ、适中 BT 的组比如第 1、第 3 组旁瓣可控且多普勒容限够用。低截获概率场景希望敌方不容易识别波形结构可以减小 N选第 1、第 7 组结构更接近普通 Chirp隐蔽性更好。高速目标且要求不模糊测距时尽量避开大斜率 μ因为耦合会让距离误差随速度线性增长。这道选择题没有标准答案只有最匹配当前约束的答案。5. 真实调试中踩过的坑与排查技巧5.1 相位积分与初相跳变的坑我最早写 Chirp 生成时习惯先把瞬时频率数组 f(t) 算出来再用 cumsum 积分相位。结果每次生成的波形在两个相邻块之间都会出现相位跳变时频图上有竖线模糊图整体旁瓣抬高排查了很久才发现是初相没对齐。正确做法是直接用连续时间 t 构造二次相位也就是 2π·0.5·μt²。如果要走积分路线相位增量为 2π·f(t)·Δt且 t 数组必须从 0 开始否则初相偏一位波形边界就有毛刺。5.2 模糊函数矩阵太大内存不够如果 max_tau 取到 Ns-1AF 矩阵就是 Ns×Ns 的复数矩阵。Ns 稍微上到几万点内存就要十几 GB普通电脑直接卡死。我的做法是只计算实际关心的时延范围。雷达波形仿真里目标回波时延通常远小于脉冲宽度所以 max_tau 取几百到几千点就够了。如果确实想要全图可以分多普勒段计算只保存幅度边算边往磁盘写避免一次性撑爆内存。5.3 模糊图动态范围太大什么也看不见直接 imagesc(abs(AF)) 出来的图通常中间一个尖峰四周全黑因为旁瓣比峰值低几十分贝。正确显示方式是归一化后转 dB并限制颜色映射范围AF_dB 20*log10(abs(AF) / max(abs(AF(:)))); imagesc(fd_axis/1e6, tau_axis/1e-6, AF_dB); clim([-40, 0]);这行代码的效果是只看 40 dB 动态范围内的旁瓣结构否则所有低于 -40 dB 的细节都会被压成黑色你什么都学不到。5.4 spectrogram 窗口长度选错斜率变成“台阶”如果窗太长窗口内 Chirp 频率变化大时频图上本应该平滑的斜线会变成阶梯状如果窗太短频率分辨率差相邻子载波会糊成一团。我的经验值是窗口长度取在 T/50 到 T/100 之间重叠 75% 起步。判断窗口是否合适有一条硬性标准频率分辨率 1/win_len 必须小于子载波间隔 Δf。否则你在时频图上根本分不清子载波后面所有关于斜线、间距的分析都无从谈起。5.5 用理论自相关函数做“体检”这是我最推荐的验证手段。每次生成完波形先对零多普勒切面做一次理论自相关对比用 xcorr(s) 算一遍再和模糊函数里 η0 那一条做差观察偏差特征。如果出现周期峰优先怀疑 Δf·T 不是整数如果主瓣明显展宽优先怀疑采样率不够或者加窗过度如果左右不对称多半是时延方向写反了。这套体检流程 5 分钟就能跑完却能滤掉 80% 的波形生成低级错误强烈建议固化到你的日常分析脚本里。5.6 存储和导出的小习惯模糊函数矩阵通常很大重新算一遍成本高。我会把 AF 矩阵连同参数一起存成 .mat 文件文件名直接写成 ofdm_chirp_N32_B160_T20.mat几周后回看也不会搞混。出图建议用 exportgraphics 而不是截图exportgraphics(gcf, af_N32_B160_T20.png, Resolution, 300);这样导出 300 dpi 的图放到论文和报告里都足够清晰。模糊函数这种细节密集型图形截图损失的信息量远比想象中大。6. 做完 8 组的一点个人体会做完这 8 组波形之后我最大的体会是波形设计不能只看一张模糊图必须把时频图、距离切面、多普勒切面放在一起交叉验证。模糊图是“结果”时频图是“原因”时频图里的斜率、间距、混叠几乎都能在模糊图对应位置找到痕迹。比如相位不连续在时频图上是竖线在模糊图里变成整体抬高的一排旁瓣频谱泄漏严重时距离切面的旁瓣也会整体鼓包。养成“先看时频再看模糊”的习惯后很多问题能提前发现不用等到最后算完模糊函数才回头改波形。后面我还试过把模糊函数旁瓣水平作为适应度函数写了一个简单的参数搜索脚本让 MATLAB 自动从候选波形集合里筛出适合多目标场景的那一组效果比人肉调参稳定得多。波形设计的乐趣就在这种反复验证和细微调整里希望这篇记录能帮你少走几条我走过的弯路。