无人机辅助NOMA蜂窝卸载:系统建模与优化实践
2026/9/9 19:34:20 网站建设 项目流程

无人机辅助非正交多址蜂窝卸载,这名字听着挺唬人,但拆开看其实就是一个很经典的无线通信资源分配问题:地面蜂窝网忙不过来了,让无人机飞到天上当临时基站或者中继,帮地面网络分担流量压力;同时为了在有限的频谱资源里塞下更多用户,采用非正交多址(NOMA)技术,让多个用户共享同一个资源块。这两个技术叠在一起,再加上无人机可以动态调整位置,整个系统就变成了一个“通信资源+空中轨迹”的联合优化问题。

我做这个方向做了大概半年,从搭系统模型到写Matlab仿真,再到调优化算法,踩了不少坑,也积累了一些自己的心得。这篇文章就把我整个研究过程中的核心思路、数学推导的关键节点、优化算法的设计逻辑,以及Matlab代码实现时需要注意的细节,完完整整地梳理一遍。不管你是刚接触这个方向的研究生,还是已经在做无人机通信相关课题的工程师,这篇文章应该都能帮你节省不少摸索的时间。

1. 系统模型设计:UAV-NOMA蜂窝卸载的整体架构

1.1 为什么把UAV和NOMA放在一起

先聊一个最底层的问题:无人机辅助通信和NOMA这两个技术,到底解决什么问题。

传统蜂窝网在热点区域(比如体育场、演唱会、灾区)很容易过载,因为基站覆盖范围内的用户请求太多,频谱资源不够分。一种解决办法是增加基站密度,但部署成本高,而且偏远区域或者临时场景根本来不及建设。无人机可以快速部署到指定空域,配备通信载荷作为空中基站或者中继节点,把地面基站的流量分担一部分过来,这就是“蜂窝卸载”的核心思想。

那NOMA又是什么角色?传统的正交多址(OMA)方案,比如LTE里的OFDMA,每个用户占用不同的时频资源块,用户之间互不干扰,但频谱效率有限。NOMA允许在同一个资源块上叠加多个用户的信号,接收端通过连续干扰消除(SIC)来分离出各自的有用信号。在功率域NOMA里,发送端给不同用户分配不同的发射功率,接收端按照信号强度从强到弱依次解码,先解出最强信号并消除掉,再解次强信号。

简单说,UAV解决的是“覆盖和容量从哪里来”的问题,NOMA解决的是“频谱资源怎么用得更高效”的问题。两者叠加,就是让无人机在空中提供更好的信道条件,同时用NOMA把有限的频谱资源塞进更多用户,从而实现系统吞吐量和用户公平性的双重提升。

1.2 系统模型的几个核心要素

从这个项目的实际建模来看,你重点要把下面这些模块搭清楚。

第一是网络拓扑。我的场景是单无人机加多地面用户,无人机从地面基站(或者一个地面网关)获取数据,然后通过下行NOMA链路把数据发给地面用户。用户分成若干组,每组两个或者三个用户共享同一个资源块,组间用正交的频谱分隔。这个设置比较常见,也便于后续推导闭式解。

第二是信道模型。无人机到地面用户之间是空地信道,跟传统地面对地面信道最大的区别在于:高空环境下视距(LoS)链路出现的概率很高,信号衰减规律更接近自由空间传播。常用的做法是用概率性LoS模型,即信道链路以一定概率处于LoS状态或者非视距(NLoS)状态,对应的路径损耗指数不同。LoS概率跟无人机和用户之间的仰角有关,仰角越大,LoS概率越高。这个模型在3GPP的无人机通信场景里也有参考,做仿真验证比较靠谱。

第三是用户配对策略。NOMA需要把信道条件差异比较大的用户配对到同一资源块,这样功率域区分度才高。比如信道质量好的用户和信道质量差的用户配对,好的用户分配较小功率,差的用户分配较大功率,接收端通过SIC实现区分。配对策略直接影响功率分配和系统性能,通常基于用户信道增益排序来做。

第四是优化变量。这个系统里可以优化的东西主要有发射功率、无人机三维位置(或轨迹),以及用户配对关系。功率分配是NOMA的天然优化维度;无人机位置决定了信道大尺度衰落,影响所有用户的信道增益;用户配对则决定了NOMA分组结构。

1.3 我的模型参数选择与理由

参数设置这种事,看起来简单,但实际影响着后面所有仿真结果的合理性和论文审稿人对你的信任度。我给出我常用的一组基准参数,都是参考3GPP技术报告和已发表论文里的常用设置:

参数数值说明
载波频率2 GHzLTE/5G典型频段
带宽10 MHz每个资源块带宽
噪声功率谱密度-174 dBm/Hz标准热噪声
无人机高度100 m典型低空无人机基站高度
无人机最大发射功率30 dBm单资源块上的功率上限
用户数6(配成3组)NOMA每组2用户
路径损耗指数(LoS/NLoS)2.0 / 3.5取决于建模需求
用户分布半径500 m用户均匀分布在无人机投影点周围

这些参数不是说死的。

你在做敏感性分析的时候,可以单独扫描某个参数看系统性能变化趋势。比如扫无人机高度,从50米到200米,你会发现存在一个最优高度:太低,LoS概率下降,遮挡严重;太高,虽然基本都是LoS,但距离变大导致路径损耗增加。这个拐点就是这个系统的一个设计准则。

2. 性能分析的核心推导与关键指标

2.1 NOMA信干噪比与SIC解码顺序

任何NOMA系统的性能分析,第一步都是写清楚SIC解码过程。我以每组两个用户为例,信道增益高的用户记为近端用户(用户1),信道增益低的用户记为远端用户(用户2)。下行NOMA里,基站把用户2的信号和用户1的信号叠加在同一个资源块上发送。

接收端处理:

  • 用户1(信道好,近端):先解码用户2的信号(信号强),解码成功后把用户2的信号从接收信号里减去,剩余信号里只有自己的信号加噪声,所以解码自己信号时没有组内用户间干扰。
  • 用户2(信道差,远端):直接解码自己的信号,因为信号功率分配比例大,此时用户1的信号被视为干扰。

基于这个过程,用户2在解码自己信号时的信干噪比可以写成:

[ \text{SINR}_{2} = \frac{P_2 |h_2|^2}{P_1 |h_2|^2 + \sigma^2} ]

其中 ( P_1, P_2 ) 分别是分配给用户1和用户2的功率,( h_2 ) 是无人机到用户2的信道系数,( \sigma^2 ) 是噪声功率。注意这里干扰项里有 ( P_1|h_2|^2 ),因为用户2的接收信号里包含用户1的叠加信号,而且无法消除。

用户1在成功消除用户2的信号后,解码自己信号的信干噪比为:

[ \text{SINR}_{1} = \frac{P_1 |h_1|^2}{\sigma^2} ]

可以看到,用户1的SINR里已经没有用户2的干扰了,这就是SIC带来的好处。但用户1要能正确解码用户2的信号,需要满足一个前置条件:

[ \frac{P_2 |h_1|^2}{P_1 |h_1|^2 + \sigma^2} \geq \text{解码门限} ]

这个条件在推导中断概率的时候特别重要,很多初学者容易漏掉这一步,直接套SINR公式,导致理论曲线和仿真对不上。

2.2 中断概率推导的数学细节

中断概率是无线通信系统性能分析里最经典的指标,定义为用户SINR低于某个目标门限的概率。对于瑞利衰落信道,信道增益 ( |h|^2 ) 服从指数分布,中断概率往往有比较漂亮的闭式解。

但对NOMA系统来说,麻烦在于同组用户之间的信道增益是相关的,因为用户1和用户2的信道增益都来自同一个无人机位置,只是距离和衰落系数不同。你推导中断概率时不能简单地把两个用户当作独立信道来处理,否则会低估中断概率。

我的做法是:

  • 先把信道增益的联合分布写出来,对于瑞利衰落加路径损耗,信道增益是两个独立指数随机变量乘以各自的路径损耗系数。
  • 利用SIC解码条件,把成功事件表示成两个SINR条件的交集,再对整个事件求概率。
  • 如果闭式解太复杂,直接用数值积分,或者用蒙特卡洛仿真验证近似结果。

实际推导中,还可以对高信噪比区域做渐进分析。把SNR趋于无穷,中断概率的表达式会在对数坐标下变成一条斜率等于分集阶数的直线。分集阶数可以从表达式里直接读出来,这个参数对于理解系统在高信噪比下的行为很有帮助。NOMA系统的分集阶数受配对策略和SIC条件影响,不是简单的一阶或二阶,具体取决于你分析的用户是近端还是远端。

2.3 遍历速率与系统吞吐量

中断概率之外的另一个关键性能指标是遍历速率,也就是香农容量对信道分布的期望。

远端用户的遍历速率:

[ R_2 = \mathbb{E}\left[\log_2\left(1 + \frac{P_2 |h_2|^2}{P_1 |h_2|^2 + \sigma^2}\right)\right] ]

近端用户的遍历速率:

[ R_1 = \mathbb{E}\left[\log_2\left(1 + \frac{P_1 |h_1|^2}{\sigma^2}\right)\right] ]

这里的期望是对信道增益分布取的。对于瑞利衰落,( |h|^2 ) 是指数分布,所以需要计算 ( \log_2(1 + a X / (b X + c)) ) 形式的期望,其中 ( X ) 是随机变量。这类期望通常没有初等闭式表达,常见解法是利用部分分式分解,把对数项拆成两个独立对数项的差,然后每一项变成形如 ( \mathbb{E}[\log_2(1 + aX)] ) 的形式,而 ( \mathbb{E}[\log_2(1 + aX)] ) 对指数分布X有一个标准闭式解,里面涉及指数积分函数。

注意:指数积分函数在Matlab里用expint实现,但expint的定义和通信论文里常用的Ei函数差一个符号,用的时候要小心核对,不然结果会出负数。我在初版代码里就因为这个吃了亏。

2.4 无人机高度对性能的影响

把前面的信道模型和中断概率公式结合起来,就能分析无人机高度对系统性能的影响。这是UAV通信系统对比纯地面通信系统最有意思的一个维度。

高度升高,带来的效果是双向的:

  • LoS概率增大,信道衰减系数变小,用户能分到更好的链路质量。
  • 但同时无人机到用户的水平距离不变时,斜距变大,路径损耗增加。

把这两个效果放进同一个表达式里,你会发现系统性能不是单调变化的。某些高度下系统吞吐量达到峰值,这个峰值对应的就是“LoS增益”和“距离损耗”的权衡点。这个最优高度的存在性,是UAV辅助通信系统设计的核心洞察之一。

你在做系统设计时,这个最优高度很重要。如果无人机飞得太低,城市峡谷效应会把很多用户置于NLoS状态,卸载效率还不如地面基站;飞得太高,所有用户都是LoS,但信号太弱,也没意义。最优高度取决于小区半径、建筑密度、载频这些因素,不是一个通用常数。

3. 优化问题建模与高效算法设计

3.1 优化目标与约束条件

性能分析解决的是“这个系统能有多好”的问题,优化解决的是“怎么让系统达到这个最好”的问题。实际场景中,目标函数可以设计成最大化系统总吞吐量,也可以设计成最大化最差用户的可达速率(最大化最小公平性),或者最小化系统总发射功率。

我这次做的主要是加权和速率最大化。目标函数可以写成:

[ \max_{P, Q} \sum_{k \in \mathcal{K}} w_k R_k(P, Q) ]

其中 ( \mathcal{K} ) 是用户集合,( w_k ) 是用户权重,( P ) 是功率分配向量,( Q ) 是无人机位置坐标。约束条件包括:每个用户的功率非负且总功率不超过最大发射功率;每个用户的可达速率不低于一个最小门限(服务质量约束);无人机位置在可行空域范围内(比如最低高度和最大水平半径限制)。

这个优化问题本身是非凸的。难点有两个:一是速率表达式里跟功率相关的部分是分式形式,非凸;二是无人机位置通过信道增益影响所有用户,信道增益对位置变量是指数和对数混合的,也不是凸的。直接拿凸优化工具解不了,必须把问题拆解。

3.2 资源分配子问题:固定无人机位置的功率优化

一个比较经典的解决思路是:先固定无人机位置,把原问题变成关于功率分配的子问题。这个子问题依然非凸,但可以通过一个变量替换把它转化成凸问题。

具体做法是令 ( \tilde{P}_k = \log(P_k) ),把功率变量换到对数域。这个变换的好处是NOMA的速率表达式可以写成两个对数函数的差,在对数域下,这个差的形式可以展开成多个指数函数之和。对指数函数求和再取对数,是一个凸函数(对数和指数函数的复合是凸的),所以目标函数在对数域下变成凹函数,可以最大化。

这个技巧在无线通信资源分配里特别常用,叫“对数变换”或者“变量替换法”。实际操作中,可以用标准凸优化求解器比如CVX来求解。在Matlab里实现起来非常流畅,前提是你能把表达式正确写出来。

3.3 无人机轨迹优化:连续凸近似

另一个子问题是固定功率分配方案,优化无人机位置。这里信道增益与距离强相关,而距离又是无人机位置的函数,导致目标函数对位置变量高度非凸。

我的做法是用连续凸近似(SCA)来处理。核心思想是在每次迭代中,把原来非凸的目标函数换成一个在当前位置附近对原函数的一个凸下界,然后最大化这个下界得到一个更好的位置,迭代更新直到收敛。

对于 ( \log_2(1 + 1/d^a) ) 这类函数,可以在当前无人机位置处用一阶泰勒展开构造一个凹下界。具体到实现:

  • 把SINR分母里的干扰项和噪声项合并成一个关于无人机位置的函数。
  • 对这个函数在当前无人机位置处做泰勒展开,因为原函数是凸的(关于距离的函数实际上是凸的),所以一阶泰勒展开就是它的全局下界。
  • 用这个下界替换原目标函数,得到一个新的凸问题,求解得到新的无人机位置。
  • 更新位置并继续迭代。

这个SCA流程在无人机通信论文里几乎成了标配,但很多初学者在实现时会遇到收敛速度慢、振荡不收敛的问题。我的经验是:迭代步长要限制,每次位置更新不能太远,否则泰勒展开的近似误差就太大了。

3.4 用户配对与多组NOMA的联合优化

如果系统的用户不只一组,就需要考虑用户配对问题。用户配对本质上是组合优化,用户数为 N 的时候,把用户分成 N/2 组的方案数量是很大的,暴力搜索不现实。常见替代方案是用基于信道增益排序的启发式配对:把用户按信道增益从高到低排序,最强的和最弱的配对,次强的和次弱的配对,以此类推。

这种配对策略的依据是:NOMA系统在信道差异大的用户对上增益最明显。信道差异大,功率分配才有区分度,SIC带来的增益才大。实际仿真也验证了这一点,信道差异大的用户对,比随机配对的系统总吞吐量高不少。

完整的算法流程是交替迭代的:固定无人机位置和配对做功率优化,然后固定功率和配对做位置优化,最后固定位置和功率做配对优化,循环直到收敛。每个子问题都不难,难点在于控制整体的迭代框架,保证收敛性和复杂度可接受。

4. Matlab代码实现架构与核心函数解析

4.1 仿真框架搭建与模块划分

这个项目的Matlab代码实现,我按照“参数配置-信道生成-性能计算-优化求解-可视化”五个模块来组织。这种结构的好处是模块之间解耦,实验时只需要改参数配置或者替换一个模块,不需要动其他部分。

目录结构大概是:

UAV_NOMA_project/ main_simulation.m config_params.m channel_model/ generate_channel.m path_loss_model.m performance/ compute_sinr.m compute_rate.m compute_outage.m optimization/ optimize_power.m optimize_position.m user_pairing.m visualization/ plot_rates.m plot_trajectory.m plot_outage.m

主脚本main_simulation.m只负责流程编排,不允许在里面堆业务代码。每个函数只做一件事,输入输出通过结构体传递,这样后期修改某个模块时就不用在整个脚本里找依赖关系。

4.2 信道生成与SIC模拟的核心代码

信道生成这块,我封装了一个函数,输入是无人机坐标、用户坐标和系统参数,输出是对应的信道增益矩阵。核心代码如下:

function h = generate_channel(uav_pos, user_pos, params) % 计算距离 d = sqrt(sum((uav_pos - user_pos).^2, 2)); % 计算仰角 (用于LoS概率) elevation_angle = atan2(uav_pos(3), sqrt(sum((uav_pos(1:2) - user_pos(:,1:2)).^2, 2))); % LoS概率 (3GPP模型) p_los = 1 ./ (1 + params.a * exp(-params.b * (elevation_angle - params.a))); % 判断LoS/NLoS状态 is_los = rand(size(p_los)) < p_los; % 路径损耗 PL = zeros(size(d)); PL(is_los) = params.pl_los_constant + 20 * log10(4 * pi * params.fc * d(is_los) / params.c); PL(~is_los) = params.pl_nlos_constant + 20 * log10(4 * pi * params.fc * d(~is_los) / params.c); % 小尺度衰落 (瑞利) small_scale_fading = (randn(size(d)) + 1i * randn(size(d))) / sqrt(2); % 信道增益 h = small_scale_fading .* sqrt(10.^(-PL / 10)); end

这里有个细节值得注意:我在判断LoS状态时用了一个随机数rand,这意味着每次调用这个函数的结果都不同。做蒙特卡洛仿真时,你要在外部固定随机种子,否则每次仿真的信道都不一样,统计结果没法复现。

SIC模拟的核心部分,我按照信道增益绝对值排序来决定解码顺序:

% 对用户分组内信道增益排序 [~, order] = sort(abs(h_group).^2, 'descend'); % order(1)是近端用户 h1 = h_group(order(1)); h2 = h_group(order(2)); % 用户2解码自己信号时把用户1信号视作干扰 sinr2 = (p2 * abs(h2)^2) / (p1 * abs(h2)^2 + sigma2); % 用户1要先解码用户2信号,门限检查 sinr_user2_at_user1 = (p2 * abs(h1)^2) / (p1 * abs(h1)^2 + sigma2); if sinr_user2_at_user1 >= params.sic_threshold % SIC成功,用户1无组内干扰 sinr1 = (p1 * abs(h1)^2) / sigma2; else % SIC失败,用户1也会受用户2干扰 sinr1 = (p1 * abs(h1)^2) / (p2 * abs(h1)^2 + sigma2); end

这段代码虽然短,但它体现的是NOMA系统性能分析里最容易出错的逻辑:SIC不是默认成功的。我见过不少代码,直接默认SIC成功、近端用户总是无干扰,这在低信噪比区间会和实际系统的差距非常大。

4.3 优化算法的代码实现框架

功率分配的CVX实现,用对数变换处理非凸性时,核心代码大概是这样的:

cvx_begin quiet variable p_log(2) maximize( w1 * log(1 + exp(p_log(1)) * abs(h1)^2 / sigma2) ... + w2 * log(1 + exp(p_log(2)) * abs(h2)^2 / (exp(p_log(1)) * abs(h2)^2 + sigma2)) ) subject to exp(p_log(1)) + exp(p_log(2)) <= pmax exp(p_log(1)) >= 0 exp(p_log(2)) >= 0 cvx_end p1 = exp(p_log(1)); p2 = exp(p_log(2));

这里log(1 + exp(...))在CVX里是凹函数,可以直接最大化。但注意我在第二个速率表达式里,分母里的干扰项和分子里的功率项都用了exp形式,这样才能保证整体是凹函数。

SCA轨迹优化部分的核心迭代框架:

for iter = 1:max_iter % 基于当前无人机位置计算信道 h = generate_channel(uav_pos, user_pos, params); % 构造目标函数的凸下界(当前点泰勒展开) cvx_begin quiet variable q(3) % 目标函数:用当前点的梯度构造线性下界 obj = sum(log(1 + interference_free_rate(uav_pos, q, params))); maximize(obj) subject to % 约束:无人机在可行空域内 norm(q(1:2) - center) <= radius q(3) >= min_height q(3) <= max_height cvx_end % 更新无人机位置 uav_pos = q; % 检查收敛 if norm(uav_pos - prev_pos) < tol break; end end

SCA迭代的关键在于泰勒展开点的选取。我建议初始点选在用户区域的中心上方,高度取一个中间值,这样收敛比较稳定。如果初始点离最优解太远,前几步迭代可能会很慢甚至振荡。

4.4 蒙特卡洛仿真与结果可视化

蒙特卡洛仿真的流程很简单:

  • 固定随机种子。
  • 循环多次,每次生成一组用户位置和信道实现。
  • 运行性能计算或优化算法,记录结果。
  • 所有循环结束后求平均。

一个常见问题是仿真次数太少导致曲线抖动严重。我测试过,中断概率在10^-3量级的时候,至少需要10^5次快照才能得到平滑的曲线。遍历速率一般10^4次就够。

可视化部分,我比较喜欢用两步走:先画所有单次仿真的散点图,帮自己判断数据的分布情况;再叠加平均值曲线,展示趋势。这样既能捕捉到异常样本,又能看清整体性能。

5. 仿真实验与关键结果分析

5.1 系统参数对性能的敏感性分析

仿真实验部分,我先做了参数敏感性分析。核心问题是:哪些参数对系统性能影响最大?

我扫描了三个关键参数,分别是无人机高度、最大发射功率和用户数。扫描每个参数时,其他参数保持基准值不变。

无人机高度的结果前面提过:存在一个最优高度让系统总速率最大,这个高度下LoS带来的增益刚好弥补距离增加的损失,在我的仿真参数下局部最优出现在100米左右。

最大发射功率的影响很直接:功率增加,总速率单调增加,但增速逐渐放缓,最终收敛到干扰受限的平坦区。这说明NOMA系统在功率很大时主要受组内干扰限制,单纯加功率解决不了问题,必须配合优化的功率分配策略。

用户数增加时,系统总吞吐量上升,但每个用户的平均速率下降。这是因为总功率和总带宽有限,用户数翻倍后每个用户分到的平均资源变少。如果目标函数不加入公平性约束,用户数增加会显著拉低最差用户的速率,这是一个需要在实际系统设计中关注的问题。

5.2 UAV-NOMA与OMA方案对比

为了验证NOMA在蜂窝卸载场景中的实际收益,我实现了一个正交多址(OMA)方案作为对比基准。OMA方案里,每个用户独占一半的带宽,功率平均分配,没有SIC过程。两种方案使用同样的信道模型、无人机位置和用户分布。

结果是:在低信噪比区间,NOMA和OMA的总速率差距不大;但高信噪比下,NOMA的系统总吞吐量明显更高,收益主要来自频谱复用增益。NOMA让两个用户共享同一个资源块,而OMA需要把资源块一分为二,每个用户只能得到一半的频谱资源。虽然NOMA有SIC带来的干扰代价,但在信道差异明显的用户对上,这个代价远小于频谱分割的损失。

具体到数据,当目标速率门限是1 bps/Hz时,NOMA的中断概率比OMA低大约一个数量级。在高信噪比区间,NOMA的总速率比OMA提升了约40%,这个数字对论文的贡献部分来说是一个很有说服力的结果。

5.3 联合优化算法的收敛性分析

最后是优化算法的收敛性验证。我记录了每次迭代后的系统总速率,画收敛曲线。初始位置随便选一个,算法在前10次迭代内总速率上升很快,之后逐步趋缓,大约30次迭代后达到收敛,位置不再有可见变化。

值得留意的是,SCA算法对初始点的依赖比较明显。我从三组不同的初始位置出发,一组在用户中心上方,一组在覆盖区边缘上方,一组在随机位置,前两组收敛到几乎相同的结果,第三组收敛到一个略差的局部最优。这说明目标函数非凸,存在多个局部最优解,实际工程中建议做多初始点启动,选择性能最好的结果。

6. 常见问题与调参经验实录

6.1 Matlab实现中的经典报错

这个项目从零开始写,到最终能跑通完整流程,我整理了遇到最多的几个问题:

问题原因解决方案
矩阵维度不匹配用户坐标和无人机坐标维度不一致统一用N×3矩阵存储坐标,谨慎用size检查维度
CVX求解失败表达式不是规范的凸/凹形式检查log(1+exp(x))是否写成了log(1+exp(x))而不是log(1+exp(x))这种不规范的写法,必要时把目标函数拆开逐项检查凸性
仿真结果和理论曲线对不上随机种子未固定、SIC条件被忽略固定随机种子,检查SIC前置门限是否加入
expint计算结果异常Matlab的expint定义与通信论文中的Ei相差一个负号核对定义,必要时用expint(-x)替换并取负
优化结果振荡不收敛SCA迭代步长过大在位置更新时乘以一个衰减因子,或者加一个步长限制

第一条矩阵维度问题是入门者最容易踩的,我建议所有坐标存储都用统一的格式:用户矩阵是 N×3(N个用户,每行是x, y, z坐标),无人机位置用 1×3 向量。所有函数都接受这两个格式,能减少很多维度相关的bug。

6.2 理论推导与仿真验证的差异处理思路

做理论推导的时候,经常遇到理论曲线和仿真曲线不一致的情况。这个差异不一定是你算错了,也可能是推导时做了一些简化假设:

  • 理论推导假设信道状态信息完美,仿真的信道估计可能不完美。
  • 理论推导把小尺度衰落近似成独立同分布,而仿真中用户位置相关导致信道不独立。
  • 理论推导忽略了SIC误差传播,仿真中则显式建模了SIC门限。

我的排查思路是:先检查最基础的参数是否对齐;然后逐步简化理论模型,比如去掉干扰项看是否匹配;最后检查仿真代码里SIC模拟的逻辑是否跟推导一致。很多时候问题就出在SIC条件上,推导时简化了,代码里却加了门限检查,导致两者的模型不相同。

6.3 仿真时间控制与参数调优建议

蒙特卡洛仿真的计算代价随着仿真次数、用户数、迭代次数线性增长。我在控制仿真时间上积累了几个技巧:

  • 能向量化就向量化,避免用for循环逐用户计算信道。
  • 优化算法内不跑蒙特卡洛,蒙特卡洛统计放在外层。内层跑确定性优化,外层重复多次取平均。
  • SCA的迭代次数上限设小一点(比如50次),收敛阈值放宽到1e-3,误差不大但速度翻倍。
  • 如果仿真时间实在扛不住,用归并降采样:先跑少量次数看趋势,趋势对了再拉满次数做正式仿真。

调参方面,我建议按这个顺序来:

  • 先跑基准参数,记录结果。
  • 每次只改一个参数,做敏感性分析。
  • 用表格记录所有实验结果,方便横向对比。

这样整个过程会非常高效,而且出图的时候也能一眼看出哪个参数的贡献最大。

7. 从代码到论文:经验和教训

整个项目做下来,我最深的体会是:UAV-NOMA蜂窝卸载这个方向,真正的难点不在于某一个技术点有多复杂,而在于需要把通信理论、优化算法和仿真验证三个维度串起来。很多论文把重点放在算法创新上,但如果没有扎实的性能分析和可信的仿真复现,算法再漂亮也很难服众。

如果你准备在这个方向上继续深入,我的建议是逐步增加系统的复杂度。第一步把单无人机、单用户组的场景完全吃透,掌握NOMA的SIC推导和功率分配;第二步扩展到多用户组,加入用户配对问题;第三步再切换到多无人机协同场景,这时候系统不仅包含NOMA资源分配,还包含无人机之间的干扰管理和轨迹协同。每一步在上一版代码基础上增量开发,进度会快很多,也不容易出现改一处崩全局的问题。

最后再送一个小技巧:做实验记录的时候,每次改了什么参数、改之前的结果是多少、改之后的结果是多少,用表格记下来。这个习惯在写论文做图表的时候能省下大量时间,因为你不需要回过头去重新跑仿真来确认某个结果是在什么条件下得到的。

这个项目的代码框架和仿真逻辑我们已经完整搭建起来了,后面我会继续把多无人机协同场景和中继辅助的异构卸载模型放进来,到时候再更新一篇实战记录。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询