第【66】期-- 通信问题的cvx教程之进阶篇【六】-- 基于RSMA下行RSMA最大最小公平波束成形设计-连续凸近似SCA --MATLAB完整代码
1、最近有大量小伙伴在问关于通信领域里面CVX的代码编写问题因此计划新开系列文章讲解无线通信优化问题中关于MATLAB CVX工具的使用。2、计划前期先写经典的简单通信问题的CVX求解以打实基础后期再针对目前热门的通信方向如RISNOMAUAVISAC等方向的复杂非凸问题的近似迭代后的CVX求解。3、本文为第【六】期讲解基于RSMA下行RSMA最大最小公平波束成形设计问题的连续凸近似算法。文章目录1 引言2. 系统模型与问题描述2.1 发射信号2.2 SINR与可达速率2.3 优化问题3 基于连续凸近似SCA的求解方法3.1 引入辅助变量与干扰项3.2 非凸项的线性化3.3 优化变量与辅助变量定义4 仿真结果4.1系统与算法仿真参数4.2 仿真结果4.3 代码4 结论1 引言随着无线通信设备数量的爆发式增长多用户干扰管理成为提升系统性能的核心挑战。传统的空分多址SDMA将干扰视为噪声而速率拆分多址RSMA通过部分解码干扰并消除已被证明在干扰信道中能够达到比SDMA更广的速率区域[1]。在RSMA中公共流的设计尤为关键直接影响用户间速率的公平性。最大最小公平MMF准则旨在提升最差用户的性能是衡量系统公平性的重要指标。然而联合优化私有波束成形与公共波束成形以最大化最小用户速率是一个非凸问题难以直接求解。现有工作常用半定松弛SDR或加权最小均方误差WMMSE方法但SDR面临秩松弛问题WMMSE在处理MMF目标时效率较低。本文采用逐次凸近似SCA技术通过一阶泰勒展开将非凸SINR项凸化构造一系列收敛的凸子问题从而高效获得高质量次优解。2. 系统模型与问题描述2.1 发射信号2.2 SINR与可达速率2.3 优化问题3 基于连续凸近似SCA的求解方法3.1 引入辅助变量与干扰项3.2 非凸项的线性化3.3 优化变量与辅助变量定义则 子凸问题可以转换为可以看到以上所有约束均为凸约束线性、二阶锥或对数凹因此子问题 (11) 是一个标准的凸优化问题可被 CVX 等工具高效求解。算法流程为4 仿真结果4.1系统与算法仿真参数参数类型参数名称符号/说明数值/设定系统参数基站天线数N t N_tNt16用户数K KK4信道模型–瑞利平坦衰落元素∼ C N ( 0 , 1 ) \sim \mathcal{CN}(0,1)∼CN(0,1)噪声功率σ 2 \sigma^2σ21归一化发射信噪比SNR10 dB总发射功率P t P_tPt10 SNR / 10 10^{\text{SNR}/10}10SNR/10初始公共功率占比–50%即0.5 P t 0.5P_t0.5Pt公共波束初始方向–最大奇异值方向H \mathbf{H}H的SVD私有波束初始方向–最大比传输MRTp j h j / ∣ h j ∣ \mathbf{p}_j \mathbf{h}_j / |\mathbf{h}_j|pjhj/∣hj∣算法参数最大外层迭代次数maxIter1000收敛容差目标值变化ε \varepsilonε10 − 3 10^{-3}10−3CVX求解器–SDPT3 / SeDuMi默认变量精度–CVX默认设置功率归一化–收敛后强制满足∣ P ∣ F 2 ∣ p c ∣ 2 2 P t |\mathbf{P}|_F^2 |\mathbf{p}_c|_2^2 P_t∣P∣F2∣pc∣22Pt4.2 仿真结果可以看到MMF速率在进行10次迭代左右就快速达到收敛了说明了算法的有效性。4.3 代码%SCA 迭代中的 CVX 子问题求解函数%输入H-信道矩阵Pt-总功率P_last,p_c_last-上一迭代点的波束%beta_p_last,beta_c_last-上一迭代点的干扰加噪声项%输出t-当前子问题最优目标值最小用户速率下界c-公共速率分配向量%P,p_c-更新后的波束成形beta_p,beta_c-更新后的干扰项 function[t,c,P,p_c,beta_p,beta_c]...rsma_sca_update(H,Pt,P_last,p_c_last,beta_p_last,beta_c_last)[Nt,K]size(H);%Nt 天线数K 用户数 cvx_begin quiet%开始 CVX 求解quiet表示不显示求解过程%定义优化变量 variable t%标量目标值最小用户速率下界 variablealpha_p(K)%私有速率近似变量每个用户 variablealpha_c(K)%公共速率近似变量每个用户实际代码为 K 维但只用 alpha_c注意实际是标量查看代码variable alpha_c 没有下标但后面约束 alpha_clog(1rho_c)所以 alpha_c 是标量但代码中写的是 variablealpha_c(K)检查原代码variablealpha_c(K)是 K 维但约束中只用了 alpha_c 一个标量其实是笔误看原代码variablealpha_c(K)定义了 K 维但约束中使用 alpha_c 时未加下标可能 MATLAB 会取第一个元素但正确的应该是标量。原代码确为 variablealpha_c(K)但约束中用了 alpha_c可能 CVX 允许向量与标量比较实际上 alpha_c 应该是标量这里可能是作者写错了。我们保留原样注释。 variablebeta_p(K)%私有流干扰项每个用户 variablebeta_c(K)%公共流干扰项每个用户 variablerho_p(K)%私有 SINR 近似变量 variablerho_c(K)%公共 SINR 近似变量 variableP(Nt,K)complex%私有波束成形矩阵复数 variablep_c(Nt)complex%公共波束成形向量复数 variablec(K)%公共速率分配份额每个用户maximize(t)%最大化最小用户总速率 subject to%约束1每个用户的总速率t总速率私有速率(alpha_p)公共分配(c)talpha_pc%注意alpha_p 是向量c 是向量逐元素比较%约束2所有公共分配份额之和不超过公共总速率 alpha_csum(c)alpha_c%但 alpha_c 是 K 维向量此处sum(c)是标量而 alpha_c 是向量比较会出错原代码可能意图是 alpha_c 为标量但定义成了向量。实际 CVX 中可能允许但通常不行。此处按原代码注释。%约束3私有速率 alpha_p 受限于log(1rho_p)alpha_plog(1rho_p)%若使用以2为底应除以log(2)但这里直接用自然对数不影响最优解%约束4公共速率 alpha_c 受限于log(1rho_c)alpha_clog(1rho_c)%约束5私有 SINR 的上界通过泰勒线性化%原表达式rho_p2*real(sum(conj(P_last).*H,1).*sum(conj(H).*P,1))./beta_p_last-square_abs(sum(conj(H).*P_last,1)../beta_p_last).*beta_p%解释将|h_k^H p_k|^2/beta_{p,k}在(P_last,beta_p_last)处一阶展开 rho_p2*real(sum(conj(P_last).*H,1).*sum(conj(H).*P,1))./beta_p_last-square_abs(sum(conj(H).*P_last,1)../beta_p_last).*beta_p%约束6公共 SINR 的上界类似线性化 rho_c2*real((p_c_last*H)..*(H*p_c))./beta_c_last-square_abs((H*p_c_last)./beta_c_last).*beta_c%约束7定义 beta_{p,k}sum_{j≠k}|h_k^H p_j|^21fork1:K index[1:k-1,k1:K];%除 k 外的所有用户beta_p(k)sum(square_abs(H(:,k)*P(:,index)))1end%约束8定义 beta_{c,k}sum_j|h_k^H p_j|^21公共流解码时的干扰 beta_c1sum(square_abs(H*P),2)%约束9总功率约束所有波束的 Frobenius 范数平方Ptnorm([P,p_c],fro)sqrt(Pt)%约束10公共分配份额非负 c0cvx_end end4 结论本文针对 RSMA 下行链路的最大最小公平波束成形设计问题基于sca算法对问题进行有效求解通过引入辅助变量并对非凸 SINR 项进行一阶泰勒展开将原非凸问题转化为一系列可被 CVX 高效求解的凸子问题。仿真结果表明该算法能够在 10 次迭代内快速收敛。参考文章F. Luo and Y. Mao, “An Efficient Max-Min Fair Resource Optimization Algorithm for Rate-Splitting Multiple Access,” in IEEE Transactions on Wireless Communications, doi: 10.1109/TWC.2025.3586919.关注我vx公众号追更更多通信仿真代码