资讯动态

无人机RIS辅助SWIPT通信中最小速率最大化优化与SCA实现

发布时间:2026/10/22 13:21:16 来源:尧图企业网站定制
简介该资源面向无线通信、无人机系统设计与6G技术研究人员聚焦基于可重构智能表面RIS的无人机空地SWIPT系统优化问题通过交替优化与逐次凸近似方法联合优化UAV轨迹、预编码矩阵和RIS相位矩阵以最大化信息接收器的最小速率。压缩包内为1个docx文档约58KB包含系统参数设置、复合信道建模、优化算法实现及仿真验证的完整代码与逐段解释并涉及Dinkelbach方法、实时电磁调控与分布式RIS协同控制等细节。已有141人学习。读者可从中获取可复现的算法框架、凸优化求解思路与动态环境适配方案并借助仿真结果理解RIS相比传统方案在速率、能效与边缘用户性能上的显著提升为应急通信、军事侦察等场景的工程实现提供参考。1. 当无人机遇上RIS一个让速率“地板”抬起来的优化问题无人机空地通信里最让人头疼的不是平均速率上不去而是边缘用户被“平均”掉了。一架旋翼无人机悬停在百米高空波束打下来近点用户信号满格远点或遮挡角上的用户却常年贴着噪声底噪跑。如果只优化系统和速率优化器会毫不犹豫地把功率全砸给信道好的那个用户边缘用户直接饿死。这就是最小速率最大化Max-Min Rate要解决的问题把最差那个用户的速率当作优化目标逼着系统去照顾短板。把可重构智能表面RIS挂到建筑物外墙上再让无人机做空中基站这套组合的价值在于RIS能通过相位调控把原本散射掉的能量重新聚焦到弱用户方向而无人机能移动等于给这个聚焦过程加了一个空间自由度。再叠加SWIPT无线携能通信用户一边收信息一边收能量对物联网传感器这类没有市电的场景尤其合适。这篇笔记拆的是怎么把最小速率最大化写成可解的优化问题怎么在动态环境里让RIS相位和无人机轨迹跟着变以及代码落地时哪些参数一碰就翻车。2. 系统模型与优化问题把“公平”写成数学2.1 空地信道与SWIPT接收机的建模选择先定几何。设无人机在时隙 (n) 的水平位置为 (\mathbf{q}[n](x[n],y[n]))高度固定为 (H)。地面用户 (k) 的位置为 (\mathbf{w}k)。空地信道我一般用概率视距模型视距概率 (P{\text{LoS}}\frac{1}{1a\exp(-b(\theta-c))})其中 (\theta) 是仰角。这个模型比纯自由空间损耗更贴近实测因为低仰角时建筑物遮挡会让路径损耗指数从2跳到3以上。RIS挂在某栋建筑立面位置固定为 (\mathbf{r})。无人机到RIS、RIS到用户两段信道都按莱斯信道建视距分量由几何位置决定散射分量用瑞利随机。SWIPT接收机采用功率分割PS架构接收信号按比例 (\rho_k) 分给能量收集剩下的 (1-\rho_k) 做信息解码。这里有个容易忽略的点——能量收集电路存在非线性饱和输入功率超过约-10dBm后转换效率急剧下降。很多论文假设线性模型仿真里速率很好看一上实测就发现能量根本没攒够。2.2 最小速率最大化问题的标准形式优化变量有四组无人机轨迹 (\mathbf{Q}{\mathbf{q}[n]})、RIS相移矩阵 (\boldsymbol{\Theta}{\text{diag}(e^{j\theta_1[n]},\dots,e^{j\theta_M[n]})})、发射功率分配 (\mathbf{P}{p_k[n]})、功率分割比 (\boldsymbol{\rho}{\rho_k[n]})。目标函数是最大化所有用户在所有时隙中的最小可达速率[ \max_{\mathbf{Q},\boldsymbol{\Theta},\mathbf{P},\boldsymbol{\rho}} \min_{k,n} R_k[n] ]约束包括无人机最大飞行速度 (v_{\max}) 限制轨迹相邻点距离发射总功率不超过 (P_{\max})RIS反射单元相位在 ([0,2\pi))功率分割比在 ([0,1])每个用户的能量收集量不低于门限 (E_{\min})。这个问题的难点在于目标函数里的 (\min) 本身不可导速率表达式对 (\mathbf{Q}) 和 (\boldsymbol{\Theta}) 是非凸的而且 (\mathbf{Q}) 和 (\boldsymbol{\Theta}) 通过级联信道耦合在一起。直接扔进CVX会报DCP错误必须做松弛和分解。2.3 用块坐标下降拆成三个子问题我一般用块坐标下降BCD把问题拆开固定RIS相位和功率分割优化轨迹和功率固定轨迹和功率优化RIS相位固定前两者优化功率分割比。每个子问题再用连续凸近似SCA转成凸问题。轨迹子问题里速率对 (|\mathbf{q}[n]-\mathbf{w}_k|) 是凸的但我们要最大化它所以用一阶泰勒展开在局部点取凹下界。展开点选上一轮迭代的解迭代个十几次基本收敛。RIS相位子问题用半定松弛SDR把秩一约束先扔掉解完再看秩是否为一如果秩不为一用高斯随机化找近似解。功率分割比子问题最简单目标对 (\rho_k) 是凹的直接求导令零就能得到闭式解。注意SCA的收敛性依赖初始点。如果初始轨迹是一条直线前几轮迭代可能把无人机往用户正上方拉导致速度约束频繁触发。我习惯用“先飞到几何中心再悬停”作为初始轨迹收敛更稳。3. 代码落地从信道生成到SCA迭代3.1 仿真场景参数与信道生成先搭一个最小可复现的仿真环境。参数不用多但每个都要有物理意义。下面这段代码生成无人机轨迹初始点、用户位置和两段信道。import numpy as np # 场景参数 N 20 # 时隙数 H 100.0 # 无人机高度 (m) v_max 20.0 # 最大速度 (m/s) T 60.0 # 总飞行时间 (s) dt T / N # 时隙长度 M 32 # RIS单元数 K 4 # 用户数 P_max 1.0 # 发射功率 (W) fc 2.4e9 # 载频 (Hz) B 1e6 # 带宽 (Hz) noise_dBm -90 # 噪声功率 (dBm) # 用户位置 (随机撒点固定种子保证可复现) np.random.seed(42) users np.array([[50, 80], [120, 30], [200, 150], [80, 200]], dtypefloat) # 初始轨迹从起点直线飞到终点 q_init np.zeros((N, 2)) q_init[:, 0] np.linspace(0, 250, N) q_init[:, 1] np.linspace(0, 250, N) # 无人机到RIS的信道 (莱斯) def channel_uav_ris(q, ris_pos, M, fc): d np.linalg.norm(q - ris_pos) pl 20 * np.log10(4 * np.pi * fc * d / 3e8) # 自由空间路径损耗 los np.exp(1j * 2 * np.pi * fc * d / 3e8) # 视距相位 nlos (np.random.randn(M) 1j * np.random.randn(M)) / np.sqrt(2) return (np.sqrt(10**(-pl/10)) * (np.sqrt(0.7) * los np.sqrt(0.3) * nlos))这段代码里channel_uav_ris返回的是 (M\times 1) 的向量对应RIS每个单元的入射信道。路径损耗用自由空间公式莱斯因子取0.7/0.3实际场景里这个比例要看遮挡程度调。q_init是直线轨迹后面SCA会在此基础上迭代。3.2 速率计算与SCA迭代主循环速率计算要同时考虑信息解码和能量收集。下面这个函数返回每个用户在每个时隙的可达速率以及能量收集量。def compute_rate(q, Theta, p, rho, users, ris_pos, M, K, N, B, noise_dBm): noise 10**(noise_dBm/10) * 1e-3 rates np.zeros((K, N)) energy np.zeros((K, N)) for n in range(N): h_ur channel_uav_ris(q[n], ris_pos, M, 2.4e9) # 无人机到RIS for k in range(K): h_ru channel_ris_user(ris_pos, users[k], M, 2.4e9) # RIS到用户 h_cascade h_ru.conj() Theta[n] h_ur # 级联信道 snr (1 - rho[k, n]) * p[k, n] * np.abs(h_cascade)**2 / noise rates[k, n] B * np.log2(1 snr) energy[k, n] rho[k, n] * p[k, n] * np.abs(h_cascade)**2 * dt return rates, energy # SCA主循环 def sca_optimize(q_init, users, ris_pos, M, K, N, max_iter15): q q_init.copy() Theta np.ones((N, M), dtypecomplex) # 初始相位全零 p np.ones((K, N)) * P_max / K rho np.ones((K, N)) * 0.5 for it in range(max_iter): # 步骤1固定Theta和rho用SCA优化q和p q, p optimize_trajectory_power(q, Theta, rho, users, ris_pos, M, K, N) # 步骤2固定q和p用SDR优化Theta Theta optimize_ris_phase(q, p, rho, users, ris_pos, M, K, N) # 步骤3固定q和Theta闭式解更新rho rho optimize_power_split(q, Theta, p, users, ris_pos, M, K, N) rates, _ compute_rate(q, Theta, p, rho, users, ris_pos, M, K, N, B, noise_dBm) min_rate np.min(rates) print(fIter {it}: min rate {min_rate/1e6:.3f} Mbps) return q, Theta, p, rho主循环里三个子问题依次更新。optimize_trajectory_power内部用CVXPY或scipy的SLSQP做SCA每次迭代解一个凸问题。optimize_ris_phase用SDR解完检查秩。optimize_power_split直接求导。这里打印的min_rate是收敛判据一般15次迭代内能稳定。3.3 动态环境适配滑动窗口与在线更新静态优化假设用户位置和信道统计不变但实际场景里用户会移动、遮挡会变化。我一般用滑动窗口每 (N_w) 个时隙重新解一次优化问题窗口内用当前信道估计窗口外用上一轮的解做预测。下面是一个简化的在线更新框架。def online_adaptation(q, Theta, p, rho, users, ris_pos, M, K, N, window5): for start in range(0, N - window, window): end start window # 用当前窗口的信道估计重新优化 q_win, Theta_win, p_win, rho_win sca_optimize( q[start:end], users, ris_pos, M, K, window, max_iter5 ) # 更新全局解 q[start:end] q_win Theta[start:end] Theta_win p[:, start:end] p_win rho[:, start:end] rho_win return q, Theta, p, rho窗口大小window是个权衡太小则优化问题维度低、解得快但频繁重解导致轨迹抖动太大则跟踪不上环境变化。我实测下来window5在用户移动速度1m/s以内比较稳。如果用户移动快要么缩小窗口要么在SCA里加一个轨迹平滑正则项。4. 避坑与排查那些让最小速率不升反降的细节4.1 坑一RIS相位初始化全零导致SCA卡在坏点现象第一次迭代后最小速率几乎没变后面十几轮也涨不上去。原因RIS相位全零时级联信道是各单元信道的直接相加可能正好相消。SCA在坏点附近线性化梯度方向不对。解决初始化时用用户到RIS的几何相位做对齐即 (\theta_m \frac{2\pi f_c}{c}(d_{\text{uav-ris}} d_{\text{ris-user}}))让每个单元大致同相到达目标用户。4.2 坑二功率分割比闭式解越界现象迭代几轮后rho出现负值或大于1速率计算报NaN。原因闭式解推导时假设无约束但实际 (\rho_k \in [0,1])。解决求导后加投影rho np.clip(rho, 0.01, 0.99)。下界取0.01而不是0是因为完全不分功率给信息解码时速率恒为零SCA会退化。4.3 坑三SDR解秩不为一现象RIS相位子问题用SDR解完特征值分解发现最大特征值对应的秩大于1。原因松弛掉了秩一约束解可能落在高维空间。解决用高斯随机化生成多个候选解选目标函数最好的那个。候选数一般取50~100再多收益递减。4.4 坑四能量收集约束让问题不可行现象CVXPY报infeasible或者SCA迭代中能量约束始终紧。原因(E_{\min}) 设得过高或者功率分割比初始值太小导致能量收集不够。解决先跑一次无能量约束的优化看能量收集量能到多少再把 (E_{\min}) 设为其80%左右。如果必须设高就得放宽发射功率上限或增加RIS单元数。4.5 坑五轨迹优化后无人机“贴地飞行”现象优化出的轨迹高度虽然固定但水平位置紧贴用户导致速度约束频繁触发实际飞行不可行。原因SCA线性化时对距离的凹下界在近距离处误差大优化器倾向于把无人机往用户跟前推。解决在轨迹子问题里加一个最小距离约束 (|\mathbf{q}[n]-\mathbf{w}k| \geq d{\min})一般取20~30米避免近场效应和碰撞风险。5. 进阶技巧用交替方向乘子法加速与验证SCA的收敛速度在变量维度大时明显变慢。我后来改用ADMM做分布式求解把轨迹、RIS相位、功率分割拆成三个变量块每块单独更新用对偶变量耦合。好处是每步都有闭式解或小规模凸问题单次迭代快很多。代价是收敛需要的迭代次数增加但总时间通常比SCA短。验证方面我习惯用两个指标一是最小速率的收敛曲线看是否单调上升并趋于平稳二是能量收集量的分布确认没有用户被“公平”牺牲掉能量。如果某个用户的能量收集量始终贴着门限说明功率分割比被压得太低需要回头检查 (E_{\min}) 是否合理。最后一个技巧把优化结果回代到高精度信道模型比如射线追踪里跑一遍。SCA用的简化信道和射线追踪的差距就是这套方案在实际部署时的性能损失。我踩过的最大坑就是仿真里最小速率2Mbps射线追踪里只有0.8Mbps原因是RIS单元间互耦没建模。后来在信道里加了一个耦合矩阵差距缩小到15%以内。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑