我把这套仿真做完之后,最大的感受是:波束成形从来不是只为了让信号打得远,更关键的是知道往哪儿不打。5G毫米波大规模MIMO和车载/防空雷达在频谱上挤在一起,光靠频段规划已经兜不住了,空间维度才是真正能腾挪的地方。这篇文章就围绕我跑通的“5G波束成形与雷达共存”仿真项目(Matlab源码版),把从问题根源、原理拆解到建模仿真、结果分析的完整链路展开,适合正在做通信感知共存、通感一体化或者波束成形算法验证的朋友参考。
1. 频谱拥挤的必然性:5G毫米波与雷达的“撞脸”问题
1.1 为什么5G和雷达会撞在一起
先明确一个事实:毫米波频段的通信和雷达,本质上是同一类电磁频谱的两种用法。5G NR的n257(26.5-29.5GHz)、n258(24.25-27.5GHz)覆盖的区间,和24GHz短距雷达、乃至一些气象/航空雷达的工作频段存在邻频甚至同频重叠。而77GHz车载雷达虽然不是5G主频段,但5G基站和终端的高次谐波、带外杂散发射,一样可以落入雷达接收机的通带内。
这就导致了一个很现实的场景:城市路口一辆智能化汽车开启了77GHz毫米波雷达,旁边5G基站正在用波束扫描为用户提供服务。雷达想看到的是一个微弱的目标反射回波——这个回波的功率随距离四次方衰减,可能只有皮瓦量级。而5G基站发射信号的功率在几瓦到几十瓦,车载雷达接收机前端哪怕只是收到一点点泄漏进来的通信信号,也可能直接把雷达的目标检测链路干到饱和。
反过来,雷达发射的线性调频大功率脉冲,对于正开着波束接收数据的5G终端来说,同样是一个宽带干扰源。高频段本来就存在传播损耗大、覆盖半径小的问题,这时候再叠加雷达脉冲的干扰,误码率会显著上升。
1.2 真正要处理的干扰链路有哪些
做共存仿真之前,我先把干扰链路梳理清楚了。不能用“互相干扰”这种模糊说法,建模的时候每一对收发关系都要明确。
| 干扰链路 | 发射源 | 被干扰对象 | 干扰特征 |
|---|---|---|---|
| 链路A | 5G基站下行信号 | 雷达接收机 | 连续波/OFDM突发,宽带,可能造成虚假目标 |
| 链路B | 5G终端上行信号 | 雷达接收机 | 功率较低,但距离可能很近 |
| 链路C | 雷达大功率脉冲 | 5G基站接收机 | 高脉冲功率,宽带线性调频,造成阻塞 |
| 链路D | 雷达大功率脉冲 | 5G终端接收机 | 强脉冲,导致AGC饱和、符号错误 |
其中链路A和链路C是仿真里最核心的两条:基站对雷达的干扰会直接影响雷达的目标检测概率,而雷达脉冲对基站的干扰则直接影响5G链路的吞吐。
我刚开始做这个项目的时候,经常把注意力全放在“基站怎么在雷达方向打零陷”上,后来发现链路C才是更隐蔽的问题——雷达对通信接收机的干扰如果不在时域/频域上想办法,单单靠波束零陷是压不掉的,因为干扰源是雷达,你没法控制雷达把波束往哪里指。
1.3 为什么老办法不够用
传统上频谱共存靠三种手段:静态频段划分、频谱感知避让、功率控制。但放在5G毫米波+雷达场景里,各有短板。
静态划分的问题在于毫米波频谱实在太稀缺了,划分给通信和雷达的频段相邻太近,实际滤波器做不到陡峭的邻频抑制;频谱感知避让(类似WiFi里的Listen Before Talk)的问题是雷达要求“随时发射、安全第一”,不可能每次都等你感知完再发;而功率控制虽然能压制干扰,但会牺牲通信覆盖和雷达探测距离,一刀切把功率压下来,两个系统的性能都会受损。
所以最后的共识是:要到空间维度去要共存增益——这正是波束成形出场的地方。
2. 波束成形为什么是共存的关键钥匙
2.1 从“手电筒”到“聚光灯”
理解波束成形,最简单的类比就是手电筒和聚光灯的差别。全向天线相当于裸灯泡,光均匀散开;定向天线像手电筒,有个固定的方向;而阵列波束成形像舞台聚光灯,不仅能把光束打得更集中,还能通过调节相位让光束在零点几毫秒内指向任何地方。
在5G毫米波里,天线阵列通常有几十上百个阵元,因为波长只有10毫米左右,在巴掌大的面板上就能排开8×8甚至16×16的均匀平面阵(UPA)。每个阵元发射信号的相位可以独立控制,电磁波在空间中相干叠加,在某些方向增强,在某些方向抵消。
这个过程用公式表达就是:假设第 n 个阵元的加权系数是 wn(复权重),远场某方向 θ 处的叠加电场就是各阵元信号按导向矢量加权求和的结果。我们想增强的方向,就让所有阵元到达那里的信号同相叠加;想抑制的方向,就让它们的相位错开、彼此抵消。
2.2 数字波束成形与模拟波束成形:精度和成本的权衡
仿真里要区分两种波束架构。
数字波束成形是每个阵元都有独立的ADC/DAC和射频链路,权重可以在基带任意调节,灵活度和精度最高。但毫米波频段阵元数量大,数字架构的功耗和硬件成本让大多数商用设备吃不消,所以实际5G毫米波基站更多用混合波束成形:把阵元先分成若干子阵,子阵内部用模拟移相器做粗指向,子阵之间再用数字域精调。
在Matlab的Phased Array Toolbox里,这两者都支持,但要注意:模拟移相器一般只能控制相位、不能控制幅度,如果你用LCMV这种需要幅度和相位同时调整的算法,就要把“每根移相器的量化精度”和“是否可控幅度”两个参数建模进去。我在仿真初期图省事忽略了移相器量化,结果零陷深度从理想的-40dB变成了实际只有-28dB,后面才补上。
2.3 在干扰方向压制:零陷波束成形的原理
波束成形的经典目标是“期望方向增益最大”,但共存场景的目标更硬核:期望方向保持增益的前提下,在雷达接收机所在方向挖一个尽可能深的“零陷”。
这就要用到约束优化类算法,常见的是LCMV(线性约束最小方差)。它的思路是:在满足若干方向性约束(比如期望方向的响应为1,干扰方向的响应为0)的条件下,最小化本阵列输出功率。数学上写成优化问题,解出来的一组权重w,就是既能保留有用信号、又能压制特定方向干扰的“最优加权”。
LCMV的约束方程里,我们通常构造一个约束矩阵C,每一列是某个方向上的导向矢量,对应的约束响应向量g里,期望方向写1,干扰方向写0。解算的核心是把接收信号的协方差矩阵Rxx求出来,然后套公式计算权重。如果阵元数多、快照数少,Rxx可能接近奇异,所以必须加对角加载。
实现出来的辐射方向图会在雷达方向形成一个深的凹陷,凹陷深度取决于阵元数量、阵列孔径、以及信噪比。阵元数越多,零点越深越窄;孔径越大,主瓣越窄,空间分辨能力越强。
3. Matlab仿真场景搭建:从系统参数到共存模型
3.1 仿真工具链怎么选
仿真主体用的是Phased Array System Toolbox,辅以5G Toolbox和Communications Toolbox。Phased Array负责天线阵列、导向矢量、波束成形权重、雷达波形和目标回波;5G Toolbox主要用于OFDM调制、信道编码以及误码率统计;Communications Toolbox在需要加AWGN、信道衰落的时候用到。
如果没有5G Toolbox,也可以用Communications Toolbox里的通用OFDM模块替代,数据调制、循环前缀、加窗这些功能都有,不影响共存结论的验证。我在最初版本就是用通用OFDM搭出来的5G发射机,效果和后来换了5G Toolbox基本一致——共存仿真里空间干扰关系占主导,物理层细节反而在次要位置。
3.2 仿真参数设计
参数设计是整个项目里最需要花心思的地方,因为通信和雷达的系统参数必须互相“对得上”:频率要落在同一个管控场景里,天线阵列的物理尺寸要合理,时域波形要能区分。
我用的核心参数如下:
| 参数项 | 数值 | 说明 |
|---|---|---|
| 载频 fc | 28 GHz | 5G毫米波频段,雷达与通信共存重点研究频段 |
| 通信带宽 | 100 MHz | 5G典型载波带宽 |
| 通信调制方式 | 16QAM / 64QAM | 对比不同调制阶数下的抗干扰能力 |
| 通信基站天线阵列 | 8×8 UPA | 模拟5G大规模MIMO,阵元间距半波长 |
| 雷达天线阵列 | 4×4 UPA | 小型化雷达阵列 |
| 雷达发射波形 | LFM线性调频脉冲 | 带宽500MHz、脉宽1μs、PRF 5kHz |
| 雷达探测目标距离 | 30m | 典型路口近距目标 |
| 基站与雷达距离 | 50m | 基站到雷达接收机的横向距离 |
| 干扰方向角度 | 20° | 相对基站法线方向 |
频率选28GHz而不是77GHz,主要因为28GHz是5G部署最活跃的毫米波频段,同时这个频段附近的雷达兼容性问题在学术圈讨论最多。如果换成24GHz场景,LFM带宽就要相应调整,结论大体一致。
3.3 通信发射机和雷达发射机的信源模型
信号层面,通信发射机产生OFDM帧结构:子载波间隔60kHz,一个时隙0.25ms,每个时隙包含14个OFDM符号,循环前缀按常规模式设置。数据经过QAM符号映射、IFFT、添加CP之后,再乘以波束成形权重矩阵wh。
雷达发射机产生LFM脉冲:瞬时频率从 fc-250MHz 扫到 fc+250MHz,脉宽1μs。这个波形被反射回来的时候经过目标延迟和多普勒调制,雷达接收端做匹配滤波,可以把回波脉冲压缩出来。目标回波的功率用雷达方程计算,但这个方程必须计入通信基站到雷达接收机的干扰功率,否则就漏掉了共存的本质。
3.4 仿真主流程骨架
整个仿真的主流程可以拆成五个模块:初始化参数→构建阵列与信道→生成通信和雷达发射信号→执行波束成形共存策略→采集接收信号并评估指标。
下面是主流程代码的核心结构,我在关键节点做了注释:
%% 系统初始化 fc = 28e9; c = physconst('LightSpeed'); lambda = c / fc; Nsamp = 1024; % 仿真快照数 %% 构建通信基站阵列 bsArray = phased.UPA('Size', [8 8], 'ElementSpacing', [lambda/2 lambda/2]); %% 构建雷达阵列 radarArray = phased.UPA('Size', [4 4], 'ElementSpacing', [lambda/2 lambda/2]); %% 方向参数 bs_pos = [0; 0; 10]; % 基站位置 radar_pos = [50; 0; 0]; % 雷达位置 target_pos = [35; 20; 0]; % 目标位置 [~, ang_desired] = rangeangle(radar_pos, bs_pos); % 通信期望方向 [~, ang_interf] = rangeangle(target_pos, bs_pos); % 雷达接收机相对BS的方向 %% 波束成形权重(LCMV零陷) steervec = phased.SteeringVector('SensorArray', bsArray, ... 'PropagationSpeed', c); ad = steervec(fc, ang_desired); % 期望方向导向矢量 ai = steervec(fc, ang_interf); % 干扰方向导向矢量 A = [ad ai]; g = [1; 1e-6]; % 期望响应,干扰方向压到接近0 % 接收协方差矩阵(含对角加载防止奇异) Rxx = commSignal * commSignal' / Nsamp + 1e-6 * eye(64); w_lcmv = (Rxx \ A) / (A' * (Rxx \ A)) * g; w_lcmv = w_lcmv / norm(w_lcmv); %% 模拟雷达接收信号 radarRx = collectPlaneWave(radarArray, targetEcho, [ang_target; 0]) + ... collectPlaneWave(radarArray, bsInterf, [ang_bs; -10]); %% 评估指标 sinr_comm = computeSINR(w_lcmv, commSignal, radarInterf); pd_radar = computeDetectionProb(radarRx);这套流程跑通之后,改变任何一边的参数,另一边的性能指标都会跟着变化,非常适合做参数扫描实验。
4. 共存算法的实现思路:从零陷波束到动态协作
4.1 方案一:通信基站波束在雷达方向打零陷
这是最直接的空间共存思路:通信基站正常给用户终端发数据,但是把用户终端所在方向设为波束主瓣方向,把雷达接收机所在方向设为约束零陷。这样雷达接收机收到的通信干扰功率被直接压低20-40dB,雷达的目标检测不再被淹没。
实现上,LCMV已经给出了权重。但要注意一个细节:零陷是有“角度宽度”的。雷达如果位置不确定,比如它是移动的汽车雷达,就必须在雷达可能出现的整个角度范围内布置多个零陷约束,或者加宽零陷(derivative constraint)。我在实验里设置了一个移动雷达场景,雷达从相对的-30°移动到+30°,固定单点零陷只能保证一小段时间有效,换用“加宽零陷+周期性重算权重”之后,整个移动过程中的雷达探测概率才稳定下来。
这个方案的代价是:零陷约束会占用波束成形的部分自由度,导致通信方向的最大增益下降。我的仿真数据里,8×8阵列打一个-40dB零陷,通信主瓣增益大概掉了1.0-1.5dB,造成SNR小幅下降,但误码率仍然在可接受范围。这个代价换来的雷达性能提升,在绝大多数场景下是划算的。
4.2 方案二:雷达脉冲间间歇与通信时隙对齐
空间方案解决不了雷达强脉冲直接打坏通信接收机的问题。因为这是雷达的发射行为,通信基站只能被动接收,没有“给雷达打零陷”的可能性。这时候就要引入时分维度:雷达在每个脉冲重复间隔(PRI)里,只在很短的时段发射脉冲,其余时间保持静默。通信接收机如果能知道雷达脉冲发射的时间窗口,就可以在窗口内暂停接收或切除受干扰的符号。
在仿真中,我让通信系统按时隙调度,雷达PRF和通信时隙之间有个小的同步偏差,然后在接收端做了一个简单的干扰规避模块:当检测到雷达脉冲到达时,把这个OFDM符号段标记为erasures,利用信道编码的纠删能力恢复数据。最终64QAM下的误码率从无法工作恢复到接近正常水平。
这里的核心问题是精确的时域同步:雷达和通信系统通常完全异步,互不知晓对方的时钟。我的做法是在通信接收端加了一个能量检测器,雷达脉冲功率高,检测到瞬时能量突增就触发符号置零。仿真里检测门限设为噪声功率的40倍,误检率和漏检率都在可控范围。
4.3 方案三:空间-时域联合优化
把前两个方案联合起来,就是“在空间上让通信信号别干扰雷达,在时间上让雷达脉冲别打坏通信”,这个联合策略能同时把链路A和链路C压下去。
联合优化的仿真里,我设计了一个简单的联合调度器:开始时基站先探测雷达的角度方位(雷达可以广播自己的位置,或者基站通过接收雷达旁瓣信号进行测向),然后计算LCMV零陷权重;与此同时,雷达在自己的PRI帧结构里预留一个保护间隔,通信在这个间隔里可以无干扰传输控制信令。两个系统在仿真中各自维护一个状态机,通过一个共用的控制信道同步参数。
这套方案的效果最显著,但实现复杂度也最高。它更接近学术论文里的“通感一体化”雏形——两个系统从完全对抗变成协作,频谱效率大幅提升。当然我也得提醒:目前这种联合调度在工程上要求两个系统有深度集成和统一协议,短期内未必能落地,但它代表了共存研究的方向。
4.4 单靠一种方案其实压不住所有场景
三个方案都跑通之后,我做了一个对比实验:固定所有条件,只让干扰角度从0°变到60°。结果发现:
- 纯零陷方案在干扰角度落在主瓣附近时效果急剧恶化,因为零陷约束和主瓣增益严重冲突;
- 纯时分方案在雷达PRF很高、占空比很大的场景下,通信静默时间太长,吞吐量雪崩;
- 联合方案在绝大多数角度区间都保持稳定,但前提是同步误差不超过微秒级。
这说明共存问题没有万能解,需要根据场景动态选择策略。比如雷达占空比高的时候,优先保证空间隔离;雷达角度和目标角度很近的时候,优先保证时间隔离。我在实际仿真里做了一个简单的策略切换逻辑:实时计算当前空间隔离增益,低于阈值就自动增加时域静默比例,这样整体性能是最稳的。
5. 仿真结果解读与性能指标
5.1 结果评估不能只看一个指标
做共存仿真最忌讳的事情就是只盯着一方的性能。通信系统关注的是SINR、误码率和吞吐量,雷达系统关注的是探测概率、虚警概率和测距精度。我在整个实验里同时记录两边的指标,最后用一张总表来权衡。
为此我定义了归一化综合评分:CoexScore = w1 * (1 - BLER) + w2 * Pd,其中w1和w2分别为通信和雷达的权重系数。在联合优化方案中,把两个权重都设为0.5,评分比无共存策略时高出很多。
5.2 三种策略的性能对比
下表是同一个场景下(基站距离雷达50m,雷达目标距离30m,16QAM调制)三种共存策略的实测仿真结果:
| 策略 | 通信SINR | 通信BLER | 雷达接收干扰功率 | 雷达探测概率Pd |
|---|---|---|---|---|
| 无共存处理 | 8.2 dB | 0.185 | -52 dBm | 0.56 |
| 仅波束零陷 | 15.6 dB | 0.021 | -85 dBm | 0.93 |
| 仅时域静默 | 12.4 dB | 0.067 | -53 dBm | 0.76 |
| 联合优化 | 18.1 dB | 0.006 | -86 dBm | 0.96 |
可以看到,波束零陷最主要的贡献是把雷达接收机处的干扰功率压低了约33dB,雷达探测概率从0.56提升到0.93——这直接决定了雷达能不能在路口安全识别目标。联合优化在通信侧再进一步,BLER降到0.006,基本可以认为通信质量无感于雷达存在。
5.3 零陷深度的代价曲线
我还专门扫了一遍零陷深度从-10dB到-45dB的连续变化,记录了通信SINR和雷达探测概率的同时变化。规律非常明显:
- 零陷深度在-20dB以上时,雷达性能提升很快,但通信SINR还几乎不损失;
- 越过-30dB之后,雷达Pd增幅放缓,通信SINR开始加速下降;
- 达到-45dB时,虽然雷达Pd接近0.99,但通信SINR已经掉了3dB以上。
这指导我在实际参数选择上,不会盲目追求最深的零陷,而是根据两个系统各自的需求设置一个合理的零陷目标,比如-35dB就是一个兼顾双方的甜点值。
5.4 边界情况:目标方向和干扰方向重合时怎么办
仿真里我最怕遇到一个情况:雷达的探测目标和基站通信的主瓣方向恰好重合。这时候LCMV的约束矩阵里两列导向矢量高度相关,数学上矩阵趋于奇异,解出来的权重要么数值爆炸,要么直接失效。
我在实验里扫描了目标方向与干扰方向夹角从0°到20°的变化,发现夹角小于单个波束主瓣宽度的时候,LCMV会失效。解决办法有两个:
- 改用“方向图综合法”,预先设计一个主瓣响应形状,用加权最小二乘逼近,而不是硬约束零点;
- 接受空间维度失效,直接切换到时分共存策略,让雷达在这个时段独占信道。
这个发现让我意识到,波束成形的空间维度和时域调度是配合而非替代的关系,共存方案必须是一个可切换的组合策略,而不是单点算法。
6. 我把源码跑通之后的踩坑日记
6.1 协方差矩阵奇异:相干信号的天坑
我最初计算LCMV权重时,直接用接收信号快照做Rxx估计。但问题是:仿真里的通信信号和雷达信号在频率上部分重叠,某些快照内二者相位关系稳定,导致Rxx近似奇异,解出来的权重出现几十万倍的增益,接收机直接饱和。
后来查资料发现这是相干源问题的典型表现,解决办法是空间平滑:把8×8阵列分成若干重叠子阵,分别计算子阵的协方差矩阵再取平均。加上空间平滑和对角加载之后,权重稳定了,方向图的零陷也恢复到设计深度。
6.2 阵列流形失配:仿真里的“理想”坑
Phased Array Toolbox里的UPA默认是理想各向同性阵元,但如果我要模拟实际贴片天线,就必须挂上天线方向图。我用phased.IsotropicAntennaElement和phased.CosineAntennaElement做过对比,结果发现理想各向同性阵列算出来的LCMV权重在真实阵列上会出现0.5dB到1dB的增益损失,零陷位置也偏移几度。
所以建议在实际项目里,从一开始就给阵列接上真实天线方向图,不要让仿真“太理想”。这样从仿真到硬件实测的迁移成本会低很多。
6.3 仿真速度优化:大阵列多快照的卡顿问题
一个8×8阵列、1024个快照、再加上LFM脉冲和OFDM符号生成,初始串行版本跑一次参数扫描要两个小时。我后来做了三个优化:
- 将多个快照的波束成形接收过程向量化,用矩阵乘法整体处理,而不是循环逐快照;
- LCMV权重的协方差矩阵求逆改用chol分解,避免直接inv;
- 用parfor做参数扫描,把不同干扰角度的仿真并行跑。
优化之后,同一个参数扫描任务压缩到二十分钟左右。对于做研究的读者来说,这个时间成本直接影响你能跑多少组对照实验,值得专门花时间优化。
6.4 参数表的“单位换算”陷阱
这个坑虽然低级,但真栽过:雷达方程里的距离和功率单位、LFM脉冲带宽和采样率的关系、阵元间距和波长的换算,任何一个不一致都会产生完全错误的结论。
特别提醒一点:5G的OFDM子载波间隔是kHz量级,而雷达LFM的扫频宽度是MHz量级,两者在Matlab的采样时间轴里很难共用一个采样率。我最终的方案是仿真中统一使用告采样率(比如1GHz),通信信号在数字域先上变频到对应的中频位置,雷达波形也在这个采样率下重新采样,这样两种信号才能在一个坐标系里叠加。这个处理细节如果不注意,出来的“干扰波形”其实根本不像真实的射频干扰。
最后说点个人体会:波束成形与雷达共存这个课题,真正难的并不是波束成形算法本身,而是你要同时理解两套系统的工作方式和指标诉求,并把它们装进同一个仿真框架里。我做完这版Matlab仿真之后,最大的收获是终于把空间、时间两个维度的共存手段给统一到了一个框架里,可以很直观地观察不同参数下两个系统性能的此消彼长。
如果你后续想继续往下扩展,有两个方向值得尝试:一是把静态的LCMV换成自适应递归算法,比如RLS或最小均方(LMS),让波束零陷能实时跟踪移动雷达;二是往上走一步,做完整的通感一体化ISAC波形设计,让同一套发射波形既承载通信数据又执行雷达探测,那才是5G-Advanced到6G时代真正会落地的形态。源码里的参数、算法模块我都留了扩展接口,改起来并不困难,祝你跑得顺手。