无人机辅助NOMA蜂窝卸载的建模与仿真研究 做无人机中继仿真的时候我第一次意识到一个很尴尬的事实无论无人机飞到哪里、信道调得多好只要接入链路还在用传统的正交多址OMA频谱利用率的上限就卡在那里。一个时隙只能服务一个用户边缘用户排队等资源无人机悬停得再稳也解决不了容量问题。后来我尝试把非正交多址NOMA加进接入链路让两个用户共享同一个时频资源块再用SIC在无人机侧做干扰消除整条链路的卸载吞吐量才真正拉开差距。这个课题——无人机辅助非正交多址蜂窝卸载我在Matlab里做了两轮完整仿真。第一轮只做无人机中继的OMA流量卸载用来做对比基线第二轮加入NOMA并做了无人机位置、用户配对和功率分配的联合优化。今天把整个流程拆开来讲包括系统建模、Matlab实现思路、性能分析指标怎么定义、仿真结果怎么解读以及我在调代码过程中踩过的一些坑。这个课题很适合通信方向的毕设选题、论文复现或者想快速上手无人机通信仿真的同学。1. 项目背景与整体设计思路1.1 为什么要做无人机非正交多址的蜂窝卸载先交代一下这个组合要解决的真实问题。蜂窝网络的边缘用户在上行方向上经常很吃亏离基站远发射功率又受限直连链路的信噪比低得可怜。传统做法是加小基站或者做D2D中继但小基站需要选址和回传成本高D2D依赖用户终端转发链路稳定性和用户参与意愿都不好保证。无人机在这个场景里能提供一个可移动、快速部署的空中接入点。它可以绕开地面障碍物大概率建立视距链路把边缘用户的数据先收上来再通过回传链路转给宏基站。这个过程就是蜂窝卸载——用户不再顶着弱链路直连基站而是把流量卸载到无人机这条更优的路径上。但光引入无人机还不够。接入链路如果继续用OMA一个时频资源块只能服务一个用户。用户一多排队延迟就上来了无人机的覆盖优势会被频谱效率拉低。NOMA的加入正好补上这块两个用户在同一个资源块上叠加传输接收端靠功率差和SIC解码来分离信号。无人机侧用NOMA做接入等于同时干了两件事——把覆盖范围撑大把频谱资源用密。这就是这个项目最核心的设计逻辑。1.2 几个关键概念先理清在展开建模之前把三个贯穿全文的核心词捋一遍后面就不会绕。蜂窝卸载本质上就是把宏基站承载的业务压力转移到别的接入节点或路径上。本项目里卸载动作发生在边缘用户和无人机之间用户不再直连基站而是把数据发到无人机再由无人机回传给基站。这个两跳结构是后续所有建模的基础。非正交多址NOMA这里的重点是非正交。LTE那种OMA把资源在频域或时域上切分成互不重叠的块用户之间互相不干扰NOMA则允许用户在同一个时频块上叠加依靠功率域的差异来区分不同用户。接收端通过串行干扰消除SIC逐个解出叠加信号。无人机在系统里承担的角色是空中中继但不是简单转发。它既是边缘用户的接入点又是基站的回传节点它的三维位置直接决定接入链路和回传链路的信道质量。所以后面无人机位置优化是这个课题里必然要做的一环。1.3 方案选型对比做方案设计时我在几种常见卸载方式之间做了一张对比表方便看清楚UAV-NOMA的位置方案频谱效率部署成本覆盖灵活性主要短板小型基站中高低选址难回传成本高D2D中继中低中终端移动导致链路跳变Wi-Fi分流低中低干扰不可控覆盖太小UAV-OMA中继中低高正交资源拖累频谱效率UAV-NOMA中继高低高要设计SIC和功率分配选UAV-NOMA不是因为它每个指标都最好而是它同时兼顾了部署灵活性和频谱效率。小基站虽然性能稳定但架设周期长应急场景根本来不及Wi-Fi分流适合室内到了室外空旷环境性能就拉胯。无人机配合NOMA能快速部署还能在用户信道差异较大的场景里通过功率域叠加获得明显增益。当然它也有自己的软肋如果同一组里的两个用户信道条件接近SIC解码的优势就体现不出来NOMA增益会大幅缩水。所以用户配对和功率分配这两个环节基本决定了整套方案的上限这也是后面Matlab实现里我花时间最多的部分。2. 系统模型与核心数学原理2.1 场景定义与参数设定仿真场景我设计成一个典型的单小区上行卸载场景宏基站位于坐标原点覆盖半径500m一架无人机在小区内悬停高度可以在80到200m之间调整K个用户随机散布在小区里。基站和无人机之间的回传链路假设为视距链路用户到无人机的接入链路采用上行NOMA。参数数值说明载波频率2GHz典型无人机通信频段系统带宽10MHz单个资源块带宽用户最大发射功率23dBm常规终端能力无人机发射功率30dBm回传链路发射功率无人机高度80~200m可优化参数小区半径500m单小区覆盖用户数6~20进行敏感性扫描这里要说一个容易忽视的点参数设置不是越真实越好关键是数量级关系要合理。比如无人机高度设为500m以上路径损耗会急剧增大这时NOMA再强也补不回信道变差带来的损失仿真结果会很难看。合理的参数范围是仿真结果有意义的先决条件。2.2 NOMA上行传输模型与SIC解码上行NOMA的数学基础比下行稍微绕一点我先把模型写出来。假设两个用户u1和u2配成一组在同一个资源块上同时向无人机发送信号无人机接收到的叠加信号可以写成y sqrt(P1)·h1·s1 sqrt(P2)·h2·s2 n其中P1、P2是两个用户的发射功率h1、h2是各自到无人机的信道系数n是高斯白噪声。关键在SIC解码顺序。上行场景中解码顺序通常按信道增益从强到弱排列先解码信道条件好的用户把这个信号从接收信号中减去再解码信道差的用户。两个用户在SIC解码后的可达速率可以这样表示R_strong B·log2(1 P_strong·|h_strong|² / N0)R_weak B·log2(1 P_weak·|h_weak|² / (P_strong·|h_strong|² N0))注意看弱用户速率里的干扰项——只要强用户的信号还没被完全消除它就一直是弱用户解码时的干扰源。这是NOMA的核心代价也是它和OMA最大的不同。SIC的顺序一旦写错后面所有速率计算都会乱套这个问题我放在第5节详细讲。2.3 无人机通信的视距信道模型无人机到地面用户的信道跟传统地面信道区别很大核心绕不开视距概率。无人机高度越高对地仰角越大视距概率越高但高度越高传播距离也越远路径损耗跟着涨。这两个趋势是反着的也是无人机高度优化为什么有效的数学根源。我用经典的概率视距模型来生成信道P_LoS 1 / (1 a·exp(-b·(θ - a)))其中θ是用户到无人机的仰角a、b是环境相关参数通常根据城市、郊区、乡村环境来取值。路径损耗分为两种情况PL_LoS 20·log10(4π·f·d/c) η_LoSPL_NLoS 20·log10(4π·f·d/c) η_NLoSη_LoS和η_NLoS是环境附加损耗一般取1dB和20dB量级。Matlab实现时我先根据用户位置和无人机位置算出仰角再按概率判断这条链路是视距还是非视距最后生成对应的信道增益。这样做的结果是无人机位置对信道质量的影响被直接量化你在仿真里能看到高度过高或者过低性能都会变差的现象而不是一个单调的曲线。2.4 回传链路约束与卸载效用建模蜂窝卸载不能只看接入链路回传链路同样关键。用户在接入链路把数据发到无人机之后无人机还要把这些数据全部转发给基站。如果回传链路的容量小于所有卸载流量的总和那多出来的数据就会积压在无人机上导致端到端时延上升。所以我给回传链路单独建立约束条件无人机回传到基站的速率必须大于等于所有卸载用户需求速率之和。在这个约束下卸载成功的条件有两层——接入链路要满足用户的需求速率回传链路要能扛得住总流量。两层都要算清楚。仿真里的效用函数我定义为卸载成功的流量之和优化目标是最大化这个值。这个目标函数既包含了物理层的信道信息又包含系统层的负载分担逻辑比单纯追求最大速率更贴近蜂窝卸载的实际意义。做参数敏感性分析时你还会发现一个有意思的现象随着用户数增加回传链路的约束会逐渐成为瓶颈无人机吞吐量曲线从线性增长变成趋于饱和这就是系统容量受限的典型特征。3. MATLAB仿真架构与关键实现3.1 代码模块划分与数据流设计Matlab代码我按六个模块来组织这样的结构改参数、加算法、替换优化方法都方便参数初始化模块用户场景生成模块信道计算模块用户关联与配对模块速率计算与SIC模块优化与统计模块模块之间尽量用函数接口传递数据不要在脚本里把所有逻辑堆在一块。比如信道计算我封装成独立函数输入用户坐标、无人机坐标和载波频率输出信道增益矩阵。这样不管后面做蒙特卡洛仿真、位置优化还是敏感性分析都可以直接调用同一个函数避免重复代码。3.2 参数初始化与用户场景生成参数初始化的代码我会这样写% 系统参数 fc 2e9; % 载波频率 2GHz c 3e8; B 10e6; % 系统带宽 10MHz N0_dBm -174 10*log10(B); % 噪声功率 dBm N0 10^((N0_dBm - 30)/10); % 噪声功率 W % 无人机与小区参数 R_cell 500; % 小区半径 m h_uav 120; % 无人机初始高度 m P_uav 30; % 无人机发射功率 dBm P_user 23; % 用户发射功率 dBm % 用户数量与位置生成 K 8; theta_user 2*pi*rand(1, K); r_user R_cell * sqrt(rand(1, K)); user_pos [r_user .* cos(theta_user); r_user .* sin(theta_user)];用户位置生成这里有个小细节半径要乘以sqrt(rand)不能直接用rand。二维平面的面积和半径平方成正比如果均匀随机取半径用户会集中在圆心附近信道统计分布就会失真。这可能让仿真结果偏向乐观因为所有用户都离基站太近了。初始阶段我先固定无人机位置比如(120, 80, 120)即x偏120m、y偏80m、高度120m先跑通性能分析流程后面再做位置优化时再把它放开。3.3 信道生成与SIC速率计算信道计算的核心是一个循环对每个用户计算到无人机的信道增益。伪代码思路如下for k 1:K d_k norm(user_pos(k,:) - uav_pos(1:2)); theta atand(h_uav / d_k); % 仰角 % 视距概率 p_los 1 / (1 0.3 * exp(-11 * (theta - 0.3))); if rand() p_los PL 20*log10(4*pi*fc*sqrt(d_k^2h_uav^2)/c) eta_los; else PL 20*log10(4*pi*fc*sqrt(d_k^2h_uav^2)/c) eta_nlos; end H(k) 10^(-PL/20); end这里特别提醒一个数值问题当d_k非常小比如用户恰好出现在无人机正下方时仰角接近90度视距概率趋近1这符合物理直观但距离不能取到0否则路径损耗计算会除以0产生Inf或者NaN。我通常给d_k设一个下限比如1m既不影响结果又能避免数值异常。SIC速率计算建议单独封装一个函数输入是配对组内两个用户的信道增益和功率分配结果输出是两个用户的可达速率。函数内部先对信道增益排序再按顺序执行SIC最后返回速率。这样逻辑清晰也方便在后面优化循环里反复调用。3.4 用户配对与功率分配算法用户配对策略我采用的是典型的强弱配对把信道增益最高的用户和最低的用户配对次高和次低配对以此类推。这样做的原因在于NOMA的SIC增益依赖组内用户的信道差异差异越大强用户越好解码弱用户也能在功率分配上得到照顾整个组的总速率通常更高。功率分配这里我用分数阶功率控制FTPC公式如下P_k P_max·(g_k^(-β)) / Σ_j(g_j^(-β))其中g_k是用户信道增益β是功率控制因子取值范围0到1。β0时所有用户等功率分配β1时信道反转最彻底强用户功率被大幅压缩弱用户得到更多补偿。不同β下系统总速率会呈现一个先升后降的曲线最优值通常在0.4附近。在代码里我会对β做一次扫描比如从0到1步长0.05画出系统总速率随β变化的曲线。这个扫描结果既是性能分析的一部分也能帮你确认自己参数设置下的最优工作点比拍脑袋定一个β值要靠谱得多。3.5 无人机位置与功率联合优化项目标题里有优化研究四个字所以优化部分不能只停留在配对和功率分配。无人机位置优化我推荐两步走先网格搜索再用粒子群优化PSO细搜。网格搜索的思路很简单让无人机在x∈[-R_cell, R_cell]、y∈[-R_cell, R_cell]、h∈[80, 200]的范围内按一定步长遍历对每个位置计算系统总速率取最大值对应的位置。步长我一般先用50m做粗搜锁定一个热点区域再在这个区域里用10m步长细化。如果一上来就用10m步长全区域搜索三层循环的计算量会非常大在普通笔记本上可能要跑几个小时而精度提升又很有限。PSO的初始化则把粒子放在网格搜索得到的最优位置附近每个粒子的状态是(x_u, y_u, h_u)适应度函数就是系统总速率。优化目标同样是最大化总速率但需要满足回传链路容量的约束。PSO的参数我常用粒子数30、最大迭代50次惯性权重从0.9线性降到0.4这样收敛性比较稳定粒子不容易在边界来回震荡。功率分配和无人机位置是耦合的位置变了信道增益变了最优功率分配系数也跟着变。所以严格的联合优化应该做交替迭代即固定位置优化功率再固定功率优化位置反复循环。我在仿真里做了两层循环外层是位置优化内层是功率分配扫描两层收敛后整体结果基本就稳定了。4. 性能评估指标与仿真结果解读4.1 五个核心性能指标性能分析阶段我重点看五个指标每个都有明确的数学定义和仿真统计方式系统总速率所有用户可达速率之和衡量频谱效率和系统容量。中断概率用户速率低于需求阈值λ的概率反映系统可靠性。卸载成功率成功卸载流量的用户占所有卸载需求用户的比例反映蜂窝卸载的实际效果。能量效率系统总速率除以无人机总功耗通信功耗加悬停功耗单位是bit/J。用户公平性Jain公平性指数评估系统是否只照顾了少数强用户。这五个指标互相关联但又各有侧重。系统总速率高不代表用户体验好如果强用户抢占太多资源公平性指标就会很低卸载成功率高也不代表频谱效率高可能只是用户量少。所以我在仿真结果分析时从来不只是看单一指标而是把总速率和公平性放在一起看中断概率和卸载成功率放在一起看这样整体结论更稳健。4.2 对比方案与典型结果我设计的对比方案有四组覆盖了从什么优化都不做到完整UAV-NOMA优化的递进方案描述直接OMA用户直连基站资源正交分配直接NOMA用户直连基站功率域NOMAUAV-OMA卸载通过无人机中继接入链路用OMAUAV-NOMA卸载通过无人机中继接入链路用NOMA在典型配置下仿真结果会呈现出几个规律。第一UAV-NOMA的系统总速率明显高于直接OMA原因有两层无人机改善边缘用户的信道质量NOMA提升同一资源块上的同时服务用户数。第二UAV-OMA虽然也提升了覆盖但在频谱效率上没有优势总速率提升幅度明显小于NOMA方案。第三随着用户数增加UAV-NOMA和直接NOMA的差距会进一步拉大因为多的用户给了配对更多组合空间NOMA的多用户增益更有发挥余地。中断概率的对比会更加极端。直接OMA在边缘用户信道很差时中断概率可能高达0.4以上而UAV-NOMA能把中断概率压到0.1以下。这个对比图在论文或者技术报告里非常直观基本是这个课题最有说服力的一张图。4.3 参数敏感性分析参数敏感性分析是性能分析里绝对不能跳过的一步。导师或者审稿人通常都会问你选的参数如果变了结论还成立吗所以我会做三类扫描。第一类是无人机高度从80m到200m扫描。系统总速率会呈现先增后降的趋势原因在2.3节已经讲过——视距概率和路径损耗两个因素互相拉扯。最优高度一般在120m附近具体跟环境参数有关。这个结果说明无人机高度不能随便设必须放到整个系统里做优化。第二类是功率控制因子β从0到1扫描。β过小时弱用户没有功率补偿配对组性能被弱用户拖垮β过大时强用户功率被压缩得太狠整体频谱效率下降。中间最优值通常在0.4附近我会在最终结果里标注出这个最优工作点。第三类是用户数从4个增加到20个。系统总速率会上升但增速放缓中断概率先降后升原因是用户过多之后资源和干扰的平衡被打破。这个现象可以结合回传链路容量瓶颈来解释——无人机回传能力有限用户数超过一定阈值后卸载的边际增益会显著下降。5. 常见问题与排查技巧实录5.1 SIC解码顺序写反导致速率异常这是我在NOMA仿真里踩过的最深的坑。最初写速率计算函数时我按用户编号顺序做SIC解码结果跑出来的速率曲线乱七八糟强用户速率奇低弱用户速率反而很高完全不符合物理规律。排查之后才发现SIC必须先解码信道增益最高的用户把它的信号从叠加信号中减去再解码弱用户。顺序一旦错了干扰消除过程就完全失效了。排查方式其实很简单。在速率计算函数里加一行调试输出把每个用户的信道增益、排序后的索引和解码顺序打出来一眼就能看到顺序有没有问题。建议所有做NOMA仿真的人都先做这个检查不要等结果出来再去猜。5.2 网格搜索过密导致仿真跑不动无人机位置网格搜索如果步长设得太小计算量会爆炸。1000m×1000m×120m的搜索范围步长10m就是120万个点每个点还要算K个用户的信道和SIC速率叠加蒙特卡洛快照的话普通笔记本根本跑不完。我的做法是先50m粗搜锁定热点区域再在这个区域里用10m步长细化。粗搜只需几千个点细搜在热点区域里也只有几百个点整个优化过程计算量能下降一个数量级精度损失基本可以忽略。另一个实用技巧是蒙特卡洛大循环可以用parfor并行化。我有次在4核机器上把用户数从8提高到20总仿真时长本来要翻倍用了parfor之后反而只多了30%的时间。注意parfor里的迭代不能有依赖上一步结果的变量否则结果不对。5.3 蒙特卡洛收敛性与随机数种子问题中断概率是个统计量样本数不够时曲线会抖得厉害。我做测试时发现500次快照下中断概率在0.08到0.13之间跳来跳去完全看不出规律加到5000次之后曲线才稳定下来。所以建议在正式跑结果之前先做一次收敛性测试固定一组参数画中断概率随快照