news 2026/7/12 16:47:39

第【66】期-- 通信问题的cvx教程之进阶篇【六】-- 基于RSMA下行RSMA最大最小公平波束成形设计-连续凸近似SCA --MATLAB完整代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第【66】期-- 通信问题的cvx教程之进阶篇【六】-- 基于RSMA下行RSMA最大最小公平波束成形设计-连续凸近似SCA --MATLAB完整代码

1、最近有大量小伙伴在问关于通信领域里面CVX的代码编写问题,因此计划新开系列文章,讲解无线通信优化问题中关于MATLAB CVX工具的使用。
2、计划前期先写经典的简单通信问题的CVX求解以打实基础,后期再针对目前热门的通信方向,如RIS,NOMA,UAV,ISAC等方向的复杂非凸问题的近似迭代后的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)
私有波束初始方向最大比传输(MRT):p j = h j / ∣ h j ∣ \mathbf{p}_j = \mathbf{h}_j / |\mathbf{h}_j|pj=hj/∣hj
算法参数最大外层迭代次数maxIter1000
收敛容差(目标值变化)ε \varepsilonε10 − 3 10^{-3}103
CVX求解器SDPT3 / SeDuMi(默认)
变量精度CVX默认设置
功率归一化收敛后强制满足∣ P ∣ F 2 + ∣ p c ∣ 2 2 = P t |\mathbf{P}|_F^2 + |\mathbf{p}_c|_2^2 = P_tPF2+pc22=Pt

4.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_c<=log(1+rho_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)t<=alpha_p+c%注意:alpha_p 是向量,c 是向量,逐元素比较%约束2:所有公共分配份额之和不超过公共总速率 alpha_csum(c)<=alpha_c%但 alpha_c 是 K 维向量?此处sum(c)是标量,而 alpha_c 是向量,比较会出错?原代码可能意图是 alpha_c 为标量,但定义成了向量。实际 CVX 中可能允许?但通常不行。此处按原代码注释。%约束3:私有速率 alpha_p 受限于log(1+rho_p)alpha_p<=log(1+rho_p)%若使用以2为底,应除以log(2),但这里直接用自然对数,不影响最优解%约束4:公共速率 alpha_c 受限于log(1+rho_c)alpha_c<=log(1+rho_c)%约束5:私有 SINR 的上界(通过泰勒线性化)%原表达式:rho_p<=2*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_p<=2*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_c<=2*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|^2+1fork=1:K index=[1:k-1,k+1:K];%除 k 外的所有用户beta_p(k)>=sum(square_abs(H(:,k)'*P(:,index)))+1end%约束8:定义 beta_{c,k}>=sum_j|h_k^H p_j|^2+1(公共流解码时的干扰) beta_c>=1+sum(square_abs(H'*P),2)%约束9:总功率约束(所有波束的 Frobenius 范数平方<=Pt)norm([P,p_c],'fro')<=sqrt(Pt)%约束10:公共分配份额非负 c>=0cvx_end end

4 结论

本文针对 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公众号,追更更多通信仿真代码!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 16:44:41

如何用深度强化学习打造游戏AI:Flappy Bird智能通关实战指南

如何用深度强化学习打造游戏AI&#xff1a;Flappy Bird智能通关实战指南 【免费下载链接】DeepLearningFlappyBird Flappy Bird hack using Deep Reinforcement Learning (Deep Q-learning). 项目地址: https://gitcode.com/gh_mirrors/de/DeepLearningFlappyBird 你是否…

作者头像 李华
网站建设 2026/7/12 16:44:32

5个Ream进阶技巧:提升Vue.js应用性能与开发效率的秘密武器

5个Ream进阶技巧&#xff1a;提升Vue.js应用性能与开发效率的秘密武器 【免费下载链接】deprecated &#x1f680; Framework for building universal web app and static website in Vue.js (beta) 项目地址: https://gitcode.com/gh_mirrors/de/deprecated Ream是一个…

作者头像 李华
网站建设 2026/7/12 16:43:49

编译器优化实战:基于 MiniC IR 实现常量折叠与死代码消除,性能提升 15%

编译器优化实战&#xff1a;基于MiniC IR实现常量折叠与死代码消除的性能突破 在编译器设计的进阶阶段&#xff0c;优化技术往往决定着生成代码的执行效率。本文将深入探讨两种经典优化技术——常量折叠与死代码消除在MiniC编译器中的实现方案&#xff0c;通过具体案例展示如何…

作者头像 李华
网站建设 2026/7/12 16:43:34

IntelliJ IDEA 2026.1 数据库工具深度评测:5大功能对比DataGrip与原生体验

IntelliJ IDEA 2026.1 数据库工具深度评测&#xff1a;5大功能对比DataGrip与原生体验对于全栈和后端开发者而言&#xff0c;高效的数据库操作工具是日常开发中不可或缺的一环。IntelliJ IDEA作为Java生态中最强大的IDE之一&#xff0c;其内置的数据库工具近年来功能不断增强&a…

作者头像 李华