做无线通信仿真这几年我接过不少挺有挑战的项目但“用MIMO蜂窝基站去反制无人机”这个方向最能体现通信系统跨界解决问题的价值。所谓通信干扰一体化就是让现有蜂窝网络在正常通信的同时腾出部分空域和频域资源对低空飞行目标无人机的遥控、图传链路实施精准干扰。听起来有点像专用对抗装备但在低空经济快速推进的背景下这已经变成一个非常实际的民用安防需求。上周帮一个安防项目组做方案评估对方一上来就问能不能不新增专用干扰设备而是用城市里已经密布的基站来完成低空无人机管控我当时给的答复是可行但有前提最关键的一条是基站天线要具备MIMO波束成形能力。这篇笔记就把这套“基于MIMO蜂窝系统的通信干扰一体化”方案的设计思路、关键原理、Matlab仿真实现以及我在调试过程中踩过的坑一次性梳理清楚。内容适合通信工程、电子信息方向的研究生也适合想做低空安防仿真验证的工程师参考。1. 为什么选择蜂窝系统来做无人机反制1.1 低空经济给安防带来的新压力与影响范围低空经济现在并不是概念了物流配送、农情监测、电力巡检、应急救援到处都是无人机身影。但与此同时黑飞、误入禁飞区、干扰民航起降的事件也在增多。单靠被动防御已经很难应付重点区域的低空管控开始从“看得到”转向“管得住”。“管得住”的核心之一就是能在不破坏周边电磁环境的前提下让目标无人机的遥控链路和数传链路失效逼迫它返航或降落。传统做法是部署专用干扰枪或全向大功率干扰器但这些设备多是一次性拦截点覆盖范围有限而且容易误伤周边的正常通信。于是业内开始考虑利用现网基站做分布式干扰节点。从影响范围看这套方案直接辐射的典型场景包括机场净空区防护、重点活动现场安保、电力设施巡检通道、以及未来城市无人机配送走廊的秩序维护。只要基站覆盖到的地方理论上就能织起一张“软干扰网”把低空威胁限制在可控范围内。1.2 蜂窝基站是一张现成的“多功能天线网”城市里的基站密度高、供电稳定、有光纤回传、有同步时钟而且多数已经支持大规模MIMO。这意味着它们天然具备波束赋形能力可以把发射能量集中到一个很小的角度区间。相比专用干扰设备基站方案有三个明显优势第一覆盖广可以把干扰节点联网协同形成区域级覆盖第二干扰波束可以动态控制能指向特定空域而不是全向扫射第三能复用现有铁塔、机房、供电和传输资源部署成本远低于新建一套独立的低空防御系统。当然这套方案也有前提基站必须能对低空目标进行空域感知和指向追踪否则波束再窄打偏了也没用。这也是为什么我在仿真里把“干扰波束设计和性能评估”放在比“制造干扰信号”更重的位置。1.3 “通信干扰一体化”到底指什么“一体化”不是让基站同时做两件不相干的事而是让通信和干扰在同一个发射架构下共享天线、射频和波形资源。基站仍为用户提供下行数据业务同时按调度周期在部分时频资源上注入干扰信号。从信号处理角度看这就是一个多波束发射问题一个或多个波束负责给地面用户传输数据另一个波束指向空中目标实施干扰。两道波束在空间上正交或部分正交并通过功率分配因子控制两者之间的比例。整个过程中最关键的不是如何产生大功率噪声而是如何让干扰波束打得准、漏给用户的干扰少、且系统总功率不超过硬件限制。我自己的体会是这个题目放在Matlab里做最大的价值不是把干扰信号造出来而是把“波束怎么打、功率怎么分、效果怎么评估”这条链路完整跑通。仿真做得越细后面对接实测设备时越有底。2. 系统模型与干扰方案设计2.1 仿真场景设定我按一个比较典型的城区场景来建模基站位于原点天线架设在楼顶或者铁塔上高度取50米合法用户在地面位置在水平方位角30度、俯仰角0度附近目标无人机在水平方位角-40度、距离约500米、高度120米的位置。天线配置采用均匀线阵ULA或者均匀面阵UPA。做初步验证时用8元ULA就足够了因为参数少、跑得快方便先把逻辑调通。到了要出论文图或者做高精度波束验证时再换成16×16的UPA也不迟。载频我习惯用2.4GHz这样波长是12.5厘米阵元间距取半波长6.25厘米8元线阵的阵列孔径约0.5米物理上比较好理解。工作带宽可以设成20MHz和主流蜂窝系统的一个载波差不多。2.2 上行感知与下行信道的数学描述这套方案里基站要先估计无人机来向。因为无人机和基站的相对位置是动态的所以需要利用基站的接收通道进行测向。接收信号可以写成r(t) a(θ_UAV) s(t) n(t)其中 a(θ) 是阵列导向矢量。对于ULA如果阵元间距为 d则第 m 个阵元相对参考阵元的相位延迟为 e^{-j2π(m-1)d/λ sinθ}所以a(θ) [1, e^{-j2π d/λ sinθ}, ..., e^{-j2π (N-1)d/λ sinθ}]^T通过MUSIC或者ESPRIT可以从接收信号协方差矩阵中提取 θ_UAV。这个角度估计值会直接决定下行干扰波束的指向所以测向精度很重要。下行信道则体现为路径损耗加阵列响应。比如基站到用户的下行信道向量可以记为h_c √β_c · a(θ_c)基站到无人机的下行信道为h_u √β_u · a(θ_u)β 是包含天线增益、距离损耗、阴影衰落的尺度因子。在Matlab仿真中如果只关心相对波束增益β可以先归一化处理重点考察波束增益带来的信干噪比变化到了工程阶段再把每条链路的距离损耗代入也不迟。2.3 干扰策略指向性噪声与波束零陷干扰信号没有固定模板但常用的是“指向性噪声”生成一个与目标通信信号同带宽的高斯类波形经波束成形后持续发射。目标无人机接收端的遥控信号接收机会发现底噪被抬高信噪比急剧下降从而无法正常解调遥控指令。为了防止干扰波束影响到地面用户干扰波束的权重向量需要经过零陷设计。通信波束用最大比发射MRT即w_c h_c / ||h_c||干扰波束则在保证指向无人机方向的同时在用户方向形成零陷。常用做法是把朝向无人机的导向矢量投影到用户导向矢量的正交子空间w_j a(θ_u) − a(θ_c) · (a(θ_c)^H a(θ_u)) / (a(θ_c)^H a(θ_c))然后归一化。这个公式看起来简单但在用户和无人机角度接近的时候会让权值幅度变得很大所以软件里要加对角加载后面代码部分我会给一个稳妥版本。2.4 功率分配策略基站总发射功率受限通信和干扰要按比例分配。用一个功率分配因子 α 表示通信功率占比干扰功率占比就是 1−α。发射信号模型为x √(α P) w_c s_c √((1−α) P) w_j s_j其中 s_c 是用户数据s_j 是干扰波形P 是基站总功率。此时用户接收到的SINR可以写成γ_c (α P · |w_c^H h_c|²) / ((1−α) P · |w_j^H h_c|² σ²)无人机端接收到的干信比JSR为JSR ((1−α) P · |w_j^H h_u|²) / (α P · |w_c^H h_u|² σ²)从这两个式子能看出来α并不是越小越好。α太小会让通信链路质量崩溃α太大又可能让干扰效果不足。工程上一般给用户一个最低SINR要求在这个约束下最大化干扰功率。这个优化问题在Matlab里可以直接用网格搜索求解也可以用fmincon稍后在代码部分我会给一个简单实现。3. 核心技术点解析波束、零陷与感知对准3.1 MIMO波束成形为什么能“指哪打哪”一句话解释波束成形通过给每一根天线上的信号叠加不同的相位使它们在某个方向同相叠加在其他方向相位抵消。这就好比一排人同时喊话如果大家声音到达目标点的时间一致那目标点听到的声音就特别大如果相位错开能量就被发散到别处。在MIMO系统里这个相位关系可以由阵列导向矢量精确描述所以只要方向估计得准波束就能对准目标。8元线阵的理论波束宽度大约在十几度16×16面阵锐利得多角度分辨能力也更强。这也是大规模MIMO基站天然适合做低空干扰的原因之一。从仿真角度说你不需要真的去模拟空气中电磁波怎么传播只需要用导向矢量算清楚每个角度上的增益就能判断波束是不是打在目标上了。这个“方向图视角”贯穿整个项目非常重要。3.2 零陷生成和正则化处理只做干扰波束还不够一体化要求不能把用户通信打没了。当干扰波束与通信波束在角度上离得比较远时用前面那个投影公式效果还不错但如果用户在无人机方向附近或者阵元数较少投影后的零陷深度有限甚至出现权值爆炸。我常用的手法是给投影结果加对角加载R_c a(θ_c) a(θ_c)^H δ Iw_j R_c^{-1} a(θ_u)再归一化δ 是加载量一般取信道协方差对角线平均值的1/10到1/100。这个方式的本质是在“对用户形成零陷”和“保持干扰方向增益稳定”之间做权衡工程上非常实用。在仿真里这个对角加载量千万别设成零。设成零时用户方向和无人机方向一旦靠得比较近矩阵求逆很容易出病态结果出来的波束可能完全没有工程意义。3.3 低空目标感知从方位角到俯仰角真实场景中无人机不是只在水平面内活动还有高度变化所以测向应该包含方位角和俯仰角两个维度。这时候阵列最好用UPA或者双极化面阵导向矢量的维度也从N×1变成Nx×Ny×1。我在第一版仿真里只用了方位角后来发现无人机高度一旦变化波束在俯仰维上的偏差会直接导致干扰增益下降。所以至少要把两维角度都估计出来。MIMO虚拟阵列在这里也有用——通过不同收发通道之间的相位差可以扩展有效孔径提高低空小目标的测向精度。简单说虚拟阵列能让你用更少的天线得到更窄的波束这在算法验证阶段特别合适。不过这也会让计算量明显上升。仿真时要根据项目精度要求选合适的阵列模型不要一开始就上64×64面阵否则光跑方向图就很痛苦。4. Matlab仿真实现与核心步骤4.1 工具箱选择与整体框架Matlab做这个方向主要依赖两个工具箱Phased Array System Toolbox负责阵列响应、波束成形、测向和 Communications Toolbox负责信道、信号调制、SINR统计。如果没有工具箱自己写导向矢量和信道发生器也不难我下面的示例代码全部用基础矩阵运算实现方便没有工具箱的读者直接跑。整体仿真流程分五步初始化参数天线数量、阵元间距、载频、目标角度、功率参数生成信道和导向矢量设计通信波束与干扰波束叠加发射、计算接收端SINR/JSR扫描角度或功率分配因子绘制性能曲线。这个流程看起来简单但每一步都有细节。最容易被忽略的是“功率分配扫描”只看一组参数看不出门道建议把α从0.05扫到0.95观察用户SINR和无人机JSR的博弈曲线。4.2 参数集配置以下这组参数能快速验证算法参数取值说明fc2.4 GHz载频Nt8发射天线数ULAd0.5λ阵元间距总功率 P46 dBm约40W用户方向 θ_c30°水平方位角无人机方向 θ_u-40°水平方位角功率分配因子 α0.7通信功率占比用户噪声功率-100 dBm折算带宽与噪声系数无人机噪声功率-95 dBm视接收环境而定为了便于初学理解本例暂不考虑大尺度衰落重点考察波束增益带来的信干噪比变化实际工程中需要在每条链路上乘对应路径损耗值。4.3 核心代码模块波束成形与性能评估下面是核心的阵列响应和波束成形代码。我刻意把代码写得简单直接方便逐行理解。导向矢量是否归一化不影响波束方向只会整体缩放增益值因此我这里不额外归一化。% ---- 参数初始化 ---- Nt 8; % 发射天线数 fc 2.4e9; % 载波频率 lambda 3e8 / fc; % 波长 d lambda / 2; % 阵元间距 theta_ue 30; % 用户方向度 theta_uav -40; % 无人机方向度 P_dbm 46; % 基站总功率 dBm P 10^(P_dbm/10) / 1000; % 转换为 W alpha 0.7; % 通信功率占比 % ---- 导向矢量 ---- steering_vec (theta) exp(1j*2*pi*d/lambda*(0:Nt-1)*sind(theta)); a_ue steering_vec(theta_ue); a_uav steering_vec(theta_uav); % ---- 通信波束MRT ---- w_c conj(a_ue) / norm(a_ue); % ---- 干扰波束用户方向加零陷 ---- R_ue (a_ue * a_ue) 0.01 * eye(Nt); % 对角加载 w_j R_ue \ conj(a_uav); % 在用户方向抑制指向无人机 w_j w_j / norm(w_j); % ---- 性能评估 ---- G_c_ue abs(w_c * a_ue)^2; % 用户在通信波束上的增益 G_j_ue abs(w_j * a_ue)^2; % 干扰波束在用户处的泄漏增益 G_c_uav abs(w_c * a_uav)^2; % 通信波束在无人机处的增益 G_j_uav abs(w_j * a_uav)^2; % 干扰波束在无人机处的增益 % ---- 用户SINR与无人机JSR ---- sigma2_ue 10^(-100/10); SINR_ue alpha*P*G_c_ue / ((1-alpha)*P*G_j_ue sigma2_ue); sigma2_uav 10^(-95/10); JSR_uav (1-alpha)*P*G_j_uav / (alpha*P*G_c_uav sigma2_uav); fprintf(用户SINR %.2f dB\n, 10*log10(SINR_ue)); fprintf(无人机JSR %.2f dB\n, 10*log10(JSR_uav));这段代码跑完后通常能看到用户SINR在10dB以上无人机JSR在20dB以上。对于遥控链路来说JSR超过10dB基本就能让接收机失锁所以20dB算是比较理想的结果。如果你想手动把G_j_ue压到接近0可以把对角加载项改得更小比如0.0001*eye(Nt)。但从实战角度我更推荐保留加载量因为真实环境里角度估计一定存在误差过度追求零陷会让系统非常脆弱稍有点偏差就全盘失效。再做一步功率分配扫描就能看到α如何影响两个指标alpha_grid 0.05:0.01:0.95; SINR_log zeros(size(alpha_grid)); JSR_log zeros(size(alpha_grid)); for k 1:length(alpha_grid) alpha_k alpha_grid(k); SINR_log(k) 10*log10((alpha_k*P*G_c_ue) / ((1-alpha_k)*P*G_j_ue sigma2_ue)); JSR_log(k) 10*log10(((1-alpha_k)*P*G_j_uav) / (alpha_k*P*G_c_uav sigma2_uav)); end % 找满足用户SINR10dB的最大干扰 valid SINR_log 10; [~, idx] max(JSR_log(valid)); alpha_opt alpha_grid(valid); alpha_opt alpha_opt(idx); fprintf(最优alpha %.2f\n, alpha_opt);这段扫描的逻辑和工程思路一致先保证合法用户通信不崩在这个前提下最大化对无人机的干扰。4.4 绘制波束方向图波束方向图能直观看到通信波束和干扰波束的覆盖情况。方向图扫描代码如下theta_scan -90:0.5:90; G_c_scan zeros(size(theta_scan)); G_j_scan zeros(size(theta_scan)); for idx 1:length(theta_scan) a_scan steering_vec(theta_scan(idx)); G_c_scan(idx) abs(w_c * a_scan)^2; G_j_scan(idx) abs(w_j * a_scan)^2; end plot(theta_scan, 10*log10(G_c_scan/max(G_c_scan)), LineWidth, 1.5); hold on; plot(theta_scan, 10*log10(G_j_scan/max(G_j_scan)), LineWidth, 1.5); xlabel(方位角/度); ylabel(归一化增益/dB); legend(通信波束,干扰波束); grid on; title(MIMO双波束方向图);画出来之后你应该能清楚看到通信波束在30度附近有尖峰干扰波束在-40度附近有尖峰同时在30度方向有明显凹陷。这个“凹陷”就是零陷它保证了干扰信号不会把用户通信彻底闷死。另一个常用图是“用户SINR与无人机JSR随α变化”双纵轴曲线。这种图放在项目汇报里非常亮眼能让别人一眼看懂功率分配的意义。4.5 结果怎么解读仿真结果不能只看绝对数字要看趋势。常见的情况有三种用户SINR很高而JSR不够高说明α太大干扰功率不足需要降低αJSR很高但用户SINR已经低于门限说明α太小通信用户已经不可用需要提高α或者加强零陷深度两者都达标但总功率很大可能触发基站硬件PA回退这时需要引入时域调度让干扰和通信分时隙工作。我自己的判断标准是优先保住通信用户再追求干扰增益。因为通信用户是有服务契约的无人机安防只是增值任务不能拿合法用户的体验去换。除非是专门部署的安防基站那才可以把α调得很低。5. 常见问题与调试经验5.1 方向图里干扰波束“跑偏”了很多初学者在画方向图时会发现干扰波束的峰值没有对准设定角度而是出现在附近几度或十几度的位置。原因通常是天线孔径太小波束主瓣太宽加上零陷约束把主瓣拉扯了。解决办法很直接增加阵元数比如从8元换成16元或者把阵列从线阵升级成面阵在俯仰和方位两个维度同时约束。如果不想改硬件配置也可以放宽对用户方向零陷深度的要求给零陷约束加一个可容忍范围比如只抑制用户方向±3°以内的区间。5.2 用户SINR被干扰波束拉爆有时干扰波束在用户方向上的泄漏明明很小但用户SINR还是剧烈下降。这时候要查路径损耗是否一致。如果通信链路和干扰链路到用户的路径损耗差异很大即使波束泄漏增益小干扰总功率也可能很大。建议在仿真里明确区分两条链路的路径损耗不要用归一化信道代替实际信道。我在最初跑代码时就犯过这个错所有信道都归一化结果把问题掩盖了拿到真实距离参数后才发现用户方向有明显干扰。5.3 复数矩阵求逆报错和病态问题用户方向和无人机方向太近比如相差不到5度R_ue会接近奇异算出来的权值可能出现巨大的负数或者NaN。这是零陷投影的经典病态问题。我的处理办法是先做矩阵条件数检查如果条件数大于1e10就把加载量加大或者改用广义零陷扩展把零陷宽度做成一个区间而不是一个点。实际测试下来加载量取1e-2到1e-3效果比较稳。5.4 不同版本Matlab的兼容性这个方向涉及的工具箱函数在不同版本之间接口差别挺大。如果你的Matlab版本比较老最好用我这种纯矩阵方式实现不依赖工具箱。我给的这段代码在R2018a到R2024b都能跑因为只用到了基础矩阵运算和fprintf这类基础函数。另外仿真脚本里要把随机种子固定下来比如rng(2024)否则每次跑出来的信道和噪声都不一样前后对比很容易得到不稳定的结论。5.5 仿真速度太慢怎么办如果你要扫很多角度、很多次信道实现双重for循环会非常慢。优化方向有这几个第一把导向矢量计算向量化构造一个Nt×NumAngles的矩阵一次性算出所有角度的阵列响应第二用并行parfor代替for第三减少仿真快照数先用100次蒙特卡洛确定趋势最后再加大快照数出精确结果。6. 仿真之后的现实问题与项目扩展6.1 从仿真到外场测试差在哪里仿真可以验证算法逻辑但外场会给你上很多“生动的课”。第一天线阵列的阵元互耦和制造公差会让实际导向矢量偏离理想模型第二无人机旋翼会对无线电信号产生多普勒和闪烁效应这在静默仿真里是看不到的第三基站发射信号到无人机接收机之间可能存在遮挡和多径导致干扰效果不如仿真。所以我的建议是项目立项阶段用仿真确定可行性和核心参数外场阶段一定要留出整机校准和波束校正的时间。千万不要指望仿真参数直接搬到设备上就能用。6.2 低空安防项目的三维扩展现在的方案更多是单基站对单无人机的链路级仿真。实际低空安防往往是一个基站覆盖多个扇区、多架无人机同时出现。这时候要解决的问题就从“单波束干扰”变成“多波束调度”包括多个干扰波束之间的空间隔离、同一时频资源上的多目标功率分配以及多基站之间的协同切换。这套思路可以继续扩展的方向还包括用感知结果做轨迹预测后提前切换干扰波束、部署专用感知辅助信号、把干扰和欺骗策略做成可配置的波形库等等。每一步在Matlab里都能找到对应的算法模块来做验证。6.3 项目代码的组织建议虽然这是个仿真项目但也建议用函数把模块拆开参数配置、信道生成、波束设计、性能评估、绘图各放一个函数文件。这样后期换参数、换场景都不需要大改主脚本。我自己的习惯是把所有仿真结果保存为结构体方便批量出图和做对比实验。最后再分享一个小技巧仿真脚本里要把随机种子固定下来比如rng(2024)否则每次跑出来的信道和噪声都不一样前后对比很容易得出不稳定的结论。测试时固定随机种子出正式图之前再多跑几次验证稳定性这是我在这个项目里最常用也最省事的经验。
