简介:针对雷达通信一体化波形设计中的模糊函数对比需求,这份MATLAB代码包给出了OFDM与OCDM两种调制方式的仿真对比实现。资源面向从事一体化波形设计、信号处理方向研究的高校学生与科研人员,尤其适合需要快速评估不同波形距离-多普勒二维特性的使用者。包体共含3个m文件,整个压缩包仅3KB,均为轻量级MATLAB脚本,不依赖额外数据文件,可直接运行或嵌入自身模型。主绘图脚本负责生成OFDM与OCDM的模糊函数对比图,两个辅助函数分别计算均值模糊函数与单符号模糊函数,能够从统计平均和单码元两个层面分析分辨力、旁瓣电平及干扰抑制效果。当前已有822人学习下载,配套脚本保留了清晰的注释与函数边界,便于在此基础上调整子载波数、符号参数或扩展其他调制方式,可辅助论文仿真、课程实验或工程预研。
1. 模糊函数是波形设计的检票口,OFDM与OCDM各走各的门
雷达通信一体化波形设计里,模糊函数不是锦上添花的分析工具,而是决定探测策略的第一道闸门。OFDM作为成熟基线,模糊函数在多普勒维的周期性副本和时延旁瓣结构已经被反复研究;真正有争议的是OCDM,它用chirp基替换了正弦基,模糊函数从“图钉”变成带斜脊的“山脊”。有人据此认为OCDM全面优于OFDM,有人则在时延多普勒图上把脊线误读成伪峰。这篇笔记用MATLAB把两种波形的模糊函数算出来,量化对比时延分辨率、多普勒容限与旁瓣结构,并给出能直接改参数跑的脚本,适合正在做一体化波形选型或正在入门雷达信号处理的工程师对照复现。
2. 信号模型与模糊函数推导:从OFDM到OCDM的数学起点
2.1 模糊函数定义:时延多普勒平面上比什么
模糊函数反映发射波形在时延τ和多普勒ν下的自相关响应,定义为
χ(τ,ν) = ∫ s(t) · s*(t-τ) · e^{−j2πνt} dt
物理含义是:假设目标回波相对发射波形存在时延τ和多普勒ν,用发射波形与该回波做匹配滤波,输出能量随(τ,ν)的分布。主峰越尖锐,时延和多普勒的联合分辨能力越好;旁瓣越低,弱目标越不容易被强目标旁瓣淹没。雷达里说的距离分辨率和速度分辨率,分别对应τ轴和ν轴的主瓣宽度。
离散化时,对基带信号s[n]按采样周期Ts采样,模糊函数变成二维序列
χ[m,p] = Σ_n s[n] · s*[n-m] · e^{−j2πpn/N}
其中m对应时延采样点数,p对应多普勒频点索引。这个离散形式是第3章MATLAB代码的直接依据。需要提醒的是,不同文献对模糊函数有共轭位置和指数正负号的约定差异,MATLAB实现内部保持一致即可,比较两种波形时约定不同只会整体平移,不改变旁瓣结构和主峰宽度的相对结论。
2.2 OFDM的基带模型与多普勒敏感点
OFDM基带信号在单个符号内可以写成
s(t) = Σ_{k=0}^{N-1} d[k] · e^{j2πkΔf t}, 0 ≤ t < T_sym
其中N是子载波数,Δf = 1/T_sym是子载波间隔,d[k]是第k个子载波上的调制符号。理想情况下子载波严格正交,接收端做FFT就能分离数据。在模糊函数层面,矩形脉冲OFDM的时延响应主瓣宽度约为1/B,B=NΔf为总带宽;多普勒相关性由一个与符号时长T_sym相关的sinc类因子控制,主瓣宽度约为1/T_sym量级。
这里有个容易被忽略的点:OFDM的多普勒响应并不是单调衰减的。符号持续时间内子载波相位按kΔf t旋转,多普勒ν带来的相位旋转e^{−j2πνt}在部分ν值处与子载波间隔对齐,相关性回升,形成多普勒域间隔为Δf的周期结构。这个效应在OFDM雷达里表现为测速模糊的隐患,也是OFDM同步设计中安排参考信号和导频时要考虑的背景。另一层是单个符号内的随机数据会把确定性旁瓣打散,时延维旁瓣呈现随数据起伏的形态,这在对比时需要多次取随机种子做平均。
2.3 OCDM:用正交chirp基替换正弦基
OCDM(Orthogonal Chirp Division Multiplexing)的核心是发射一组在带宽内扫频且相互正交的chirp信号。标准做法通过离散仿射傅里叶变换(DAFT)构造,数据经DAFT变换到时域,接收端用逆变换还原。为了让模糊函数对比能直观映射到时频结构,这里采用一个数学上等价的简化模型
s[n] = (1/√N) Σ_{k=0}^{N-1} d[k] · e^{j2πkn/N} · e^{jπn²/N}
前半部分就是OFDM的IFFT,后半部分是二次相位,等价于对每个时域采样点附加线性调频因子。由于二次相位是公共项,基函数之间维持正交性,因此它仍然是N路正交波形,但每一路不再是固定频率谱线,而是一条瞬时频率随时间线性变化的chirp。
时频图上的差别直接决定了模糊函数形态:OFDM的能量分布在矩形时频格点上,沿频率轴均匀铺开;OCDM的每个基函数在符号时间内扫过整个带宽,能量沿对角线方向倾斜。于是多普勒ν在匹配滤波中产生的相位旋转,被chirp斜率映射成时延方向的偏移,模糊函数呈现斜脊而不是尖峰。雷达通信一体化里,OCDM的脊线结构让多普勒估计摆脱OFDM符号级模糊的限制,但也意味着目标回波必须在时延多普勒平面上做二维联合解算,只切一维剖面做估计会得到偏置的距离。
3. MATLAB实现:把模糊函数算出来的最小代码
3.1 信号生成:OFDM与OCDM的MATLAB写法
先用同一份随机QPSK数据生成两种波形,保证对比公平。参数取N=256个子载波(OCDM里对应码片数),带宽B=100MHz,符号时长T_sym=2.56μs。
% 公共参数 N = 256; % OFDM子载波数 / OCDM码片数 B = 100e6; % 占用带宽 (Hz) Ts = 1/B; % 采样周期 (s) T_sym = N * Ts; % 单符号时长 (s) rng(1); % 固定随机种子,保证结果可复现 d = exp(1j * randi(4, N, 1) * pi / 2); % 随机QPSK符号 % OFDM 基带信号:IFFT 调制 s_ofdm = ifft(d); % OCDM 基带信号:IFFT 后乘 chirp 二次相位(教学简化模型) n_axis = (0:N-1).'; s_ocdm = ifft(d) .* exp(1j * pi * n_axis.^2 / N);代码说明:randi(4,N,1)*pi/2生成0、π/2、π、3π/2四个相位,作为QPSK星座点;ifft(d)完成OFDM调制,把频域符号变成时域采样点。OCDM的简化写在时域采样点上乘exp(1j*pi*n_axis.^2/N),等效于给每个采样点增加递增调频斜率。严格做DAFT域调制需要先对数据做WHT或对应酉变换,但就模糊函数对比这个目标而言,关键是保持相同的能量谱和正交基结构,因此这样简化即可。如果想在Simulink里搭OFDM调制解调模块验证链路,可以先在这个脚本里把波形输出存成.mat文件,再从Simulink的From Workspace模块导入,能省掉重复生成信号的环节。
3.2 二维模糊函数计算函数
function chi = af_2d(s, tau_max, fd_vec, Ts) % af_2d 计算基带信号s的二维模糊函数 % s : 复基带信号 (Ns x 1) % tau_max : 最大时延,单位采样点数 % fd_vec : 多普勒频率列表 (1 x Nf),单位Hz % Ts : 采样周期 (s) Ns = length(s); Nf = length(fd_vec); chi = zeros(tau_max + 1, Nf); n = (0:Ns-1).'; for tau = 0:tau_max if tau == 0 s_delayed = s; else % s(t - tau):右移tau个采样点,前面补零 s_delayed = [zeros(tau, 1); s(1:end-tau)]; end % 对每个多普勒频点求相关能量 % exp(-1j*2*pi*fd_vec.*n*Ts) 产生 (Ns x Nf) 多普勒旋转矩阵 p = sum(conj(s_delayed) .* s .* ... exp(-1j * 2 * pi * (fd_vec .* n) * Ts), 1); chi(tau+1, :) = abs(p).^2; end % 归一化到最大峰值 chi = chi / max(chi(:)); end逻辑说明:外层循环遍历时延tau,每行对应一个时延剖面的全部多普勒响应。s_delayed是在时间轴上右移的信号,conj(s_delayed).*s完成共轭相关,对应2.1节离散公式中s[n]·s*[n-m]的实现。多普勒维用一次隐式扩展完成:fd_vec是1×Nf向量,n是Ns×1列向量,MATLAB从R2016b起自动广播成Ns×Nf矩阵,第k列就是第k个多普勒频点的旋转因子,这样把内层多普勒循环向量化,比三重循环快一个数量级。输出取abs(p).^2得到能量而不是幅度,雷达指标里主瓣旁瓣对比通常看能量。tau_max不建议超过Ns/4,否则边缘补零过多,会让旁瓣水平被人为抬高,破坏对比口径。
3.3 运行与可视化
tau_max = 40; % 最大观察时延 40 个采样点 fd_max = 0.8 / T_sym; % 观察范围 ±0.8倍子载波间隔 fd_vec = linspace(-fd_max, fd_max, 201); chi_ofdm = af_2d(s_ofdm, tau_max, fd_vec, Ts); chi_ocdm = af_2d(s_ocdm, tau_max, fd_vec, Ts); figure('Color', 'w', 'Position', [100 100 1100 420]); subplot(1,2,1); imagesc(fd_vec*1e-6, (0:tau_max)*Ts*1e9, chi_ofdm); axis xy; colorbar; xlabel('多普勒频移 (MHz)'); ylabel('时延 (ns)'); title('OFDM 模糊函数'); subplot(1,2,2); imagesc(fd_vec*1e-6, (0:tau_max)*Ts*1e9, chi_ocdm); axis xy; colorbar; xlabel('多普勒频移 (MHz)'); ylabel('时延 (ns)'); title('OCDM 模糊函数');运行后两幅图最直观的差别是:OFDM主峰两侧多普勒方向有周期性副峰,OCDM则呈现一条沿对角线移动的脊线。纵轴单位用(0:tau_max)*Ts*1e9把采样点换算成纳秒,横轴用MHz读图。注意OFDM周期性副峰横坐标落在±Δf=±1/T_sym附近;OCDM的脊线斜率与chirp的调频斜率成反比,带宽越大脊越平缓。如果fd_vec分辨率不够,峰值位置会跳变,加密到401点会更平滑;内存吃紧时优先减小tau_max而不是压缩多普勒采样点数。
4. 仿真对比与参数敏感性:子载波数、带宽和多普勒范围怎么改
4.1 基线参数与对比口径
| 参数 | OFDM | OCDM | 说明 |
|---|---|---|---|
| 子载波/码片数 N | 256 | 256 | 保持数据速率相同 |
| 带宽 B | 100 MHz | 100 MHz | 时延分辨率一致 |
| 采样周期 Ts | 10 ns | 10 ns | 由带宽决定 |
| 符号时长 T_sym | 2.56 μs | 2.56 μs | 相同帧开销 |
| 调制方式 | QPSK | QPSK | 相同星座与功率 |
| 观察多普勒范围 | ±0.8·Δf | ±0.8·Δf | Δf = 1/T_sym |
这种等带宽、等符号时长的对比口径很关键。如果只固定采样率而不固定符号时长,OFDM和OCDM的峰脊会落在完全不同的坐标尺度上,后续结论全部需要重写。另一个要提前确认的是循环前缀(CP)的取舍。这里没有加CP,真实OFDM雷达符号通常带CP,CP会把时延小于零区域的相关抬高,并在τ=CP处形成额外台阶;OCDM的chirp跨符号特性决定了它偏向无CP或短CP设计。做工程选型时建议把CP长度设0、短、长三种逐一跑一遍,再决定基带帧结构。
4.2 读图:峰值、脊线与旁瓣
OFDM的主峰在(τ=0, ν=0)处,沿时延轴第一旁瓣能量约−13dB量级,这个旁瓣是矩形脉冲时域窗的sinc结构,换窗函数可以压低。多普勒方向在ν=±Δf处出现明显的能量回升,在4.1表格对应的窗口内直接表现为与主峰接近的凸起。实际测速时如果目标多普勒落在Δf整数倍附近,会出现速度模糊,这是OFDM雷达通信一体化里常被诟病的一点,也是做OFDM同步和速度解模糊算法时绕不开的背景。
OCDM的模糊函数没有这种周期性凸起,代价是主峰能量沿脊线方向泄漏。脊线存在使得时延轴第一旁瓣峰值位置相对OFDM发生偏移,单看一维剖面会觉得OCDM旁瓣更高。正确做法是以二维检测门限为口径,把脊线区域当作已知先验参与检测,而不是直接对比某个一维剖面。这里也建议对同一组参数跑10次随机数据取平均,消除QPSK随机性带来的旁瓣起伏,获得统计意义上稳定的模糊函数。
4.3 参数怎么改,结论才不变
先看带宽。B从100MHz改成40MHz而保持N=256不变,符号时长从2.56μs变到6.4μs,时延分辨率从10ns劣化到25ns,OFDM多普勒副峰间距从390.625kHz缩小到156.25kHz。同时OCDM脊线斜率变陡,时延多普勒耦合在窄带下更严重。改带宽时务必同步调整fd_max = 0.8/T_sym的取值,否则观察窗口与子载波间隔的比值改变,两幅图不可比。
再看子载波数。把N降为64时符号时长缩短,时延分辨率不变但OFDM多普勒主瓣变宽,周期副峰间距增大;OCDM码片数不足时,脊线不再是平滑连续带,而是出现离散栅瓣,这是因为基函数个数太少、时频覆盖出现空洞。把OCDM的N降到32以下再对比,能看到模糊函数的周期性结构开始显现,此时OCDM相对OFDM的优势基本消失。这个临界点可作为选型边界记录,具体数值随chirp的调频斜率变化。
多普勒观察范围也直接影响结论。fd_vec宽度超过±Δf之后,OFDM在±Δf处出现与主峰等高的副本,OCDM的脊则折回观察窗另一侧。这不是仿真错误,而是数字模糊函数的周期延拓属性。遇到这类现象先把范围收窄到±0.5Δf,确认主峰位置后再扩窗,避免把周期副本误判成真实目标。配合MATLAB的findpeaks函数对峰值做二次插值,旁瓣比可以精确到0.1dB量级,比肉眼读colorbar可靠得多。
5. 用模糊函数验证一体化波形的两个具体技巧
5.1 用量化指标替代肉眼读图:计算PSLR与ISLR
模糊函数图看得再多也不如两个数字可靠。PSLR(峰值旁瓣比)衡量第二高旁瓣相对主瓣的抑制程度,ISLR(积分旁瓣比)衡量旁瓣总能量占比。对af_2d的输出直接计算:
function [pslr_dB, islr_dB] = sidelobe_metric(chi, guard) % sidelobe_metric 计算模糊函数主瓣外的旁瓣指标 % chi : af_2d 输出,已归一化 % guard : 主瓣保护窗口半径(采样点) [~, idx] = max(chi(:)); [r0, c0] = ind2sub(size(chi), idx); mask = true(size(chi)); mask(max(1,r0-guard):min(end,r0+guard), ... max(1,c0-guard):min(end,c0+guard)) = false; sidelobe_peak = max(chi(mask)); mainlobe_energy = sum(chi(~mask), 'all'); total_energy = sum(chi, 'all'); pslr_dB = 10*log10(sidelobe_peak / chi(r0, c0)); islr_dB = 10*log10((total_energy - mainlobe_energy) / mainlobe_energy); endguard取3到5个采样点:太小会把主瓣能量算进旁瓣,ISLR虚高;太大则漏掉紧贴主瓣的旁瓣,PSLR偏乐观。套到第4章的仿真结果上,OFDM的PSLR通常更好,因为旁瓣集中在可识别方向;OCDM的ISLR偏大,因为脊线携带可观能量。这两个数字可以直接进入波形方案评审,后续做旁瓣抑制优化时,它们就是现成的目标函数,配合MATLAB优化工具箱对窗函数系数或chirp参数做搜索,能省掉大量试错。
5.2 把OCDM的脊线当成先验,做两步搜索
OCDM模糊函数的脊线既然由chirp斜率决定,回波在给定多普勒ν下的时延估计就存在一个与ν成比例的系统性偏移。工程上不必直接解二维网格最大值,而是先粗检测脊线位置,再沿脊线法向细化。
第一步用af_2d在64×64粗网格上定位峰值,得到候选时延τ_c和候选多普勒ν_c;第二步以该候选点为中心,重新生成几组不同调频斜率的chirp信号做匹配滤波,取相关能量最大的一组作为精确估计。这样既避开了OCDM二维搜索的计算量,又不会把脊线误读成多目标。对OFDM则沿用传统的先时延后多普勒分级处理,不需要这个技巧。最终做一体化波形决策时,把这两步搜索的运算量、PSLR/ISLR指标和硬件实现复杂度放进同一张对比表,因为OCDM在多普勒容限上的收益,往往有一部分会被二维解算成本抵消。
本文还有配套的精品资源,点击获取