✅作者简介热爱科研的Matlab仿真开发者擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。完整代码获取 定制创新 论文复现私信个人信条做科研博学之、审问之、慎思之、明辨之、笃行之是为博学慎思明辨笃行。 内容介绍这段代码主要围绕无人机UAV与地面用户以及基站BS之间的通信链路进行了一系列分析与计算涵盖距离、角度、信道衰落、功率分配、可实现速率、误码率BER等多个方面还涉及到粒子群优化PSO算法用于轨迹优化。下面为你详细解读1. 初始设置与基本参数计算距离与角度计算定义了无人机与地面用户的水平距离g_d1、g_d2、g_d3以及无人机高度height_UAV进而计算出无人机与各地面用户的视距LoS距离LoS_Dis_UAV_User1、LoS_Dis_UAV_User2、LoS_Dis_UAV_User3以及相应的角度angle_UAV_User1、angle_UAV_User2、angle_UAV_User3。同样定义了基站高度h_BS1、h_BS2、h_BS3计算出无人机与各基站的视距距离LoS_Dis_UAV_BS1、LoS_Dis_UAV_BS2、LoS_Dis_UAV_BS3以及角度angle_UAV_BS1、angle_UAV_BS2、angle_UAV_BS3。莱斯因子计算根据角度相关公式计算出无人机与用户、无人机与基站之间的莱斯因子K_UAV_User1、K_UAV_User2、K_UAV_User3以及K_UAV_BS1、K_UAV_BS2、K_UAV_BS3。2. 信道相关计算信道衰落模拟通过生成高斯随机变量g结合莱斯因子模拟了无人机与用户之间的莱斯衰落信道系数g_UAV_User1、g_UAV_User2、g_UAV_User3。类似地针对无人机与基站通过生成不同的衰落分量hLOS和hNLOS模拟了信道系数g_UAV_BS1、g_UAV_BS2、g_UAV_BS3。平均信道功率增益假设路径损耗分量eta 4和参考距离处的平均信道功率增益b0计算出无人机与用户、无人机与基站之间的平均信道功率增益chPow_UAV_User1、chPow_UAV_User2、chPow_UAV_User3以及chPow_UAV_BS1、chPow_UAV_BS2、chPow_UAV_BS3。信道系数确定将平均信道功率增益与衰落系数相乘得到最终的信道系数h_UAV_Users1、h_UAV_Users2、h_UAV_Users3以及h_UAV_BS1、h_UAV_BS2、h_UAV_BS3。3. 功率系数与可实现速率计算功率系数计算根据信道增益的均值计算功率系数以确定不同用户的功率分配比例。如powerCoef1、powerCoef2、powerCoef3。可实现速率计算考虑不同的功率分配方案包括基于信道增益的功率系数分配、固定功率分配以及可变固定功率分配计算不同发射功率Pt下各用户的可实现速率并绘制可实现速率与发射功率的关系图。4. 误码率BER计算调制解调设置采用 QPSK 调制解调器对象QPSKmod和QPSKdemod对随机生成的二进制数据x1、x2、x3进行调制得到xmod1、xmod2、xmod3。信号传输与解调在不同发射功率pt下模拟信号在信道中的传输加入噪声后进行解调并计算误码率ber1、ber2、ber3最后绘制误码率与功率收集分数sigma的关系图。5. 轨迹优化相关函数evaluateTrajectory_JointBS_SWIPT_clean函数该函数用于评估给定轨迹由粒子vars表示的适应度。它解码粒子中的轨迹、功率分配和基站位置信息检查各种约束条件如 UAV 位置、移动步长、基站位置等计算信道增益、功率分配、可实现速率、能量收集等并最终计算适应度值。optimizeTrajectory_PSO_SWIPT_clean函数实现了粒子群优化算法来优化 UAV 的轨迹。初始化粒子位置和速度通过迭代更新粒子位置调用evaluateTrajectory_SWIPT_clean函数评估适应度更新个体最优和全局最优解。repairPositionParticle函数对粒子位置进行修复确保 UAV 的位置和移动步长满足设定的约束条件。getOptField函数从结构体opts中获取指定字段的值如果字段不存在则返回默认值。⛳️ 运行结果 部分代码function [fitness, result] evaluateTrajectory_JointBS_SWIPT_clean(vars, sim)​% Particle:% vars [xInternal, zInternal, rawPowerAllSteps, xBS_var, yBS_var]% xInternal : 1 x (T-2)% zInternal : 1 x (T-2)% rawPowerAllSteps : 1 x (T*noUsers)% xBS_var : 1 x noBS% yBS_var : 1 x noBS​T sim.numSteps;nInternal T - 2;noUsers sim.noUsers;noBS sim.noBS;​D_pos 2 * nInternal;D_pow T * noUsers;D_bs 2 * noBS;​expectedDim D_pos D_pow D_bs;​if numel(vars) ~ expectedDimerror(evaluateTrajectory_JointBS_SWIPT_clean: vars sai kich thuoc.);end​%% Decode trajectoryxInternal real(vars(1:nInternal));zInternal real(vars(nInternal1:2*nInternal));​xTraj [sim.xStart, xInternal, sim.xEnd];yTraj sim.stepsVec(:).;zTraj [sim.zStart, zInternal, sim.zEnd];​%% Decode raw alpharawP_start D_pos 1;rawP_end D_pos D_pow;​rawP_vec real(vars(rawP_start:rawP_end));rawP reshape(rawP_vec, noUsers, T).; % [T x noUsers]​%% Decode BS positionsbs_start D_pos D_pow 1;​xBS_var real(vars(bs_start : bs_start noBS - 1));yBS_var real(vars(bs_start noBS : bs_start 2*noBS - 1));​zBS_var sim.zBS;​%% Kiem tra rang buocpenalty 0;bigPenalty sim.bigPenalty;​% UAV x,z boundsif any(xTraj sim.x_min) || any(xTraj sim.x_max)penalty penalty bigPenalty;end​if any(zTraj sim.z_min) || any(zTraj sim.z_max)penalty penalty bigPenalty;end​% UAV step constraintif any(abs(diff(xTraj)) sim.dxMax)penalty penalty bigPenalty;end​​if any(abs(diff(zTraj)) sim.dzMax)penalty penalty bigPenalty;end​% BS boundsif isfield(sim, xBS_min) isfield(sim, xBS_max)if any(xBS_var sim.xBS_min) || any(xBS_var sim.xBS_max)penalty penalty bigPenalty;endend​if isfield(sim, yBS_min) isfield(sim, yBS_max)if any(yBS_var sim.yBS_min) || any(yBS_var sim.yBS_max)penalty penalty bigPenalty;endend​%% Thong so alphaif isfield(sim, pMin)pMin sim.pMin;elsepMin 1e-3;end​if isfield(sim, jointAlphaRepair)jointAlphaRepair sim.jointAlphaRepair;elsejointAlphaRepair noma;end​%% Pre-allocateachRate zeros(T, noUsers);​alphaTrace zeros(T, noUsers);alphaOrdTrace zeros(T, noUsers);idxWeak2StrongTrace zeros(T, noUsers);​EH zeros(T, 1);ptVec zeros(T, 1);​h2UserTrace zeros(T, noUsers);h2BSTrace zeros(T, noBS);​distUserTrace zeros(T, noUsers);distBSTrace zeros(T, noBS);​%% Tinh kenh, alpha, rate tung stepfor t 1:TxU xTraj(t);yU yTraj(t);zU zTraj(t);​%% Kenh BS - UAV voi bien BSh_UAV_BS zeros(1, noBS);​for bm 1:noBSgroundDisBS sqrt((xU - xBS_var(bm))^2 (yU - yBS_var(bm))^2);DisBS sqrt(groundDisBS^2 (zBS_var(bm) - zU)^2);​angleBS atan2(abs(zBS_var(bm) - zU), max(groundDisBS, eps)) * (180/pi);​powLoSBS sim.b0 * (DisBS^(-sim.etaPath));​K_BS sim.A1 * exp(sim.A2 * angleBS * (pi/180));​g_BS sqrt(K_BS/(1K_BS)) * sim.gLoS sqrt(1/(1K_BS)) * sim.gNLoSBS(bm);​h_UAV_BS(bm) sqrt(powLoSBS) * g_BS;​h2BSTrace(t, bm) abs(h_UAV_BS(bm))^2;distBSTrace(t, bm) DisBS;end​%% Kenh UAV - Usersh_UAV_Users zeros(1, noUsers);​for m 1:noUsersgroundDisUs sqrt((xU - sim.xUser(m))^2 (yU - sim.yUser(m))^2);DisUs sqrt(groundDisUs^2 zU^2);​angleUs atan2(zU, max(groundDisUs, eps)) * (180/pi);​powLoSUs sim.b0 * (DisUs^(-sim.etaPath));​K_Us sim.A1 * exp(sim.A2 * angleUs * (pi/180));​g_Us sqrt(K_Us/(1K_Us)) * sim.gLoS sqrt(1/(1K_Us)) * sim.gNLoSUsers(m);​h_UAV_Users(m) sqrt(powLoSUs) * g_Us;​h2UserTrace(t, m) abs(h_UAV_Users(m))^2;distUserTrace(t, m) DisUs;end​%% Lay alpha tu particleraw_alpha rawP(t, :);raw_alpha max(raw_alpha, pMin);raw_alpha raw_alpha / sum(raw_alpha);​%% Repair alpha theo NOMA orderh2 abs(h_UAV_Users).^2;[~, idxWeak2Strong_pre] sort(h2, ascend);​if strcmpi(jointAlphaRepair, noma)alpha_desc sort(raw_alpha, descend);​alpha_user zeros(1, noUsers);alpha_user(idxWeak2Strong_pre) alpha_desc;elsealpha_user raw_alpha;end​%% Tinh achievable rate Joint[rate_t, alpha_ord, idxWeak2Strong, pt_t] findAchievableRate_SWIPT_Joint(h_UAV_Users, h_UAV_BS, alpha_user); 参考文献更多免费数学建模和仿真教程关注领取