
关注我追更更多通信仿真代码1、最近有大量小伙伴在问关于通信领域里面CVX的代码编写问题因此计划新开系列文章讲解无线通信优化问题中关于MATLAB CVX工具的使用。2、计划前期先写经典的简单通信问题的CVX求解以打实基础后期再针对目前热门的通信方向如RISNOMAUAVISAC等方向的复杂非凸问题的近似迭代后的CVX求解。3、本文为第【八】期讲解基于RSMA辅助的ISAC波束成形优化–SDR连续凸近似SCA。文章目录摘要第一章 引言1.1 研究背景1.2 本文工作2 系统模型2.1 通信模型2.2 感知模型3 优化问题与求解算法3.1 Max-Min 优化3.2 基于SCA的求解算法3.3 初始点选择3 代码解析与仿真结果3.1 收敛分析3.2 基于sca迭代的关键cvx代码3.3 rel_entr函数的用法4 总结摘要通信感知一体化Integrated Sensing and Communication, ISAC被视为第六代移动通信6G及未来星地融合网络的关键使能技术其核心挑战在于如何在共享频谱与硬件资源的前提下协调通信速率与感知精度之间的性能折衷。多址接入方式直接影响ISAC系统的干扰管理与资源利用效率。与传统的空分多址SDMA和非正交多址NOMA相比速率分拆多址Rate-Splitting Multiple Access, RSMA通过将用户消息拆分为公共流与私有流利用公共流的全局解码特性将部分干扰转化为有用信息在干扰受限场景下展现出显著的性能优势。然而RSMA在MU-MISO ISAC系统中的波束成形设计涉及非凸优化问题难以直接求解。本文研究基于RSMA的联合波束成形优化问题。在满足总发射功率约束与雷达角度估计克拉美-罗界CRB精度约束的前提下以最大化用户最小速率Max-Min fairness为目标建立优化问题。针对该问题的非凸性采用SCA方法通过对速率函数中凸部分进行一阶泰勒展开构造凹下界将原问题转化为一系列可高效求解的半定规划SDP凸子问题。第一章 引言1.1 研究背景随着第五代移动通信5G的大规模商用学术界与产业界已开始将目光投向第六代移动通信6G网络。6G被期望在传输速率、连接密度、时延和可靠性等传统通信指标上实现量级跃升的同时还将原生地支持感知、计算、智能等新维度能力。在这一愿景下通信感知一体化Integrated Sensing and Communication, ISAC 应运而生成为6G候选关键技术之一 。近年来速率分拆多址Rate-Splitting Multiple Access, RSMA 作为一种广义的多址接入框架受到广泛关注。RSMA的核心思想是将每个用户的消息拆分为公共部分和私有部分所有用户的公共部分合并为一个公共流由所有用户共同解码私有部分则各自独立解码。这一机制的巧妙之处在于公共流被所有用户解码后可从接收信号中剔除从而将传统意义上“有害的干扰”转化为“有用的信息”。大量研究表明RSMA在干扰受限场景下能够显著优于SDMA和NOMA且在信道状态信息CSIT不理想时具有更强的鲁棒性。1.2 本文工作将RSMA应用于ISAC系统建立MU-MISO ISAC下行系统的RSMA信号模型以最大化用户最小速率Max-Min fairness为目标构建含总功率约束与CRB约束的波束成形优化问题并通过CVX工具包实现所提算法。2 系统模型2.1 通信模型则用户 k 的接收信号为2.2 感知模型利用Schur补引理可以将其等价转化为如下线性矩阵不等式LMI该LMI约束是凸的可以直接嵌入后续的半定规划SDP中。可以看到ISAC系统设计核心需要在通信和感知两种功能之间进行最优的功率分配与波束方向协调。3 优化问题与求解算法3.1 Max-Min 优化考虑公平性最大化最小用户的速率该准则保证了用户间的公平性避免了强用户占用过多资源导致弱用户服务质量严重下降。数学形式如下包括半正定约束CRB约束RSMA约束以及功率约束。可以看到变量高度耦合需要设计求解算法。3.2 基于SCA的求解算法主要处理速率表达式相关约束是一个典型的CCCP问题形式该方案我往期文章有讲过。这里不再赘述。基于此对私有速率与公共速率进行SCA近似有可以得到第n次迭代的凸子问题分析如下因此转换后的问题可以直接用cvx进行求解。在给定初始点后算法可以不断迭代至局部最优。3.3 初始点选择该策略保证所有协方差矩阵在初始时刻满足功率约束且各向同性发射不偏向任何空间方向。3 代码解析与仿真结果3.1 收敛分析可以看到sca大约6次以内就能收敛到一个稳定点说明了算法的可行性。3.2 基于sca迭代的关键cvx代码function[final_rate,Rq_out,conv_history]sca_cvx(Nt,K,H,Hk_cov,A_mat,A_dot_mat,A_cross,Pt,noise_var,CRB_th)%%SCA-CVX 求解器MU-MISO ISAC 系统 RSMA 波束成形优化%%输入参数%Nt-发射天线数%K-单天线用户数%H-瞬时信道矩阵(Nt x K)%Hk_cov-用户信道协方差矩阵Hk_cov(:,:,k)h_k*h_k^H%A_mat-导向矢量外积 a*a^H%A_dot_mat-导向矢量导数外积 a_dot*a_dot^H%A_cross-导向矢量与导数外积 a_dot*a^H%Pt-总发射功率预算%noise_var-噪声功率(sigma^2)%CRB_th-CRB 阈值(gamma_th)%MAX_ITER25;%最大 SCA 迭代次数 tolerance1e-5;%收敛容忍度 rate_record-inf;%上一轮目标值记录 Rq_outzeros(Nt,Nt);conv_historynan(MAX_ITER,1);%预分配收敛历史%----------初始化----------%总功率在(K2)个流之间等分1个公共流K个私有流1个雷达流%每个流的功率再均匀分配到 Nt 根天线上 Pc_prev(Pt/(K2))*eye(Nt)/Nt;%公共流协方差初值 Pr_prev(Pt/(K2))*eye(Nt)/Nt;%雷达协方差初值 Pk_prevzeros(Nt,Nt,K);fork1:KPk_prev(:,:,k)(Pt/(K2))*eye(Nt)/Nt;%各私有流协方差初值 end%----------SCA 主迭代循环----------foriter1:MAX_ITER%---步骤1计算展开点上一轮迭代的各用户干扰项---%私有流解码时的干扰展开点Ik_prev(k)%公共流解码时的干扰展开点Ick_prev(k)Ik_prevzeros(K,1);Ick_prevzeros(K,1);fork1:K%用户 k 的私有流干扰雷达其他用户的私有流Ik_prev(k)real(trace(Hk_cov(:,:,k)*Pr_prev))noise_var;forj1:Kifj~kIk_prev(k)Ik_prev(k)real(trace(Hk_cov(:,:,k)*Pk_prev(:,:,j)));end end%用户 k 的公共流干扰雷达所有私有流包括自身Ick_prev(k)real(trace(Hk_cov(:,:,k)*Pr_prev))noise_var;forj1:KIck_prev(k)Ick_prev(k)real(trace(Hk_cov(:,:,k)*Pk_prev(:,:,j)));end end%---步骤2CVX 求解凸子问题---cvx_begin sdp quiet%2.1变量声明 variablePc(Nt,Nt)hermitian semidefinite%公共流协方差 R_c variablePr(Nt,Nt)hermitian semidefinite%雷达协方差 R_r variablePk(Nt,Nt,K)hermitian semidefinite%私有流协方差 R_k variablec_rate(K)nonnegative%公共速率分配 C_k variable t%最大最小速率阈值 maximize t subject to%2.2总功率约束Tr(R_r)Tr(R_c)sum_kTr(R_k)P_t total_powertrace(Pc)trace(Pr);fork1:K total_powertotal_powertrace(Pk(:,:,k));end total_powerPt;%2.3用户速率与公共速率约束fork1:K%----私有速率 SCA 凹下界----%当前私有流干扰项 I_{p,k}Ik_cvxreal(trace(Hk_cov(:,:,k)*Pr))noise_var;forj1:Kifj~k Ik_cvxIk_cvxreal(trace(Hk_cov(:,:,k)*Pk(:,:,j)));end end%term1log2(I_prevTr(H_k*R_k))%使用-rel_entr(1,y)构造凹的log2(y)term1_k-rel_entr(1,Ik_cvxreal(trace(Hk_cov(:,:,k)*Pk(:,:,k))))/log(2);%term2log2(I_prev)(I-I_prev)/(I_prev*ln2)%即log2(I)在 I_prev 处的一阶泰勒展开仿射函数 term2_klog2(Ik_prev(k))(Ik_cvx-Ik_prev(k))/(Ik_prev(k)*log(2));%私有速率的 SCA 凹下界 Rk_SCAterm1_k-term2_k;%用户总速率公共速率份额私有速率tc_rate(k)Rk_SCAt;%----公共速率 SCA 凹下界----%当前公共流干扰项 I_{c,k}Ick_cvxreal(trace(Hk_cov(:,:,k)*Pr))noise_var;forj1:K Ick_cvxIck_cvxreal(trace(Hk_cov(:,:,k)*Pk(:,:,j)));end%term1_cklog2(I_prevTr(H_k*R_c))term1_ck-rel_entr(1,Ick_cvxreal(trace(Hk_cov(:,:,k)*Pc)))/log(2);%term2_cklog2(I_prev)(I-I_prev)/(I_prev*ln2)term2_cklog2(Ick_prev(k))(Ick_cvx-Ick_prev(k))/(Ick_prev(k)*log(2));%公共速率的 SCA 凹下界 Rck_SCAterm1_ck-term2_ck;%公共速率分配总和不超过各用户的公共流解码能力sum(c_rate)Rck_SCA;end%2.4雷达感知 CRB 约束LMI%RqR_rR_csum_k R_k RqPcPr;fork1:K RqRqPk(:,:,k);end%构造2x2 半正定矩阵%M(1,1)Tr(a_dot*a_dot^H*Rq)-1/gamma_th M_11real(trace(A_dot_mat*Rq))-(1/CRB_th);%M(1,2)Tr(a_dot*a^H*Rq)M_12real(trace(A_cross*Rq));%M(2,2)Tr(a*a^H*Rq)M_22real(trace(A_mat*Rq));%LMI 约束M0[M_11,M_12;M_12,M_22]0;cvx_end%---步骤3求解结果处理与迭代更新---%3.1判断 CVX 求解状态ifstrcmp(cvx_status,Solved)||strcmp(cvx_status,Inaccurate/Solved)%记录本次迭代的目标值conv_history(iter)t;%计算并对称化总发射协方差矩阵 Rq_current(PcPr);fork1:K Rq_currentRq_currentPk(:,:,k);end Rq_out(Rq_currentRq_current)/2;%3.2收敛判断目标值相对变化toleranceifiter1t0abs(t-rate_record)/(abs(rate_record)1e-10)tolerance conv_historyconv_history(1:iter);final_ratet;return;end%3.3更新迭代点Hermitian 对称化处理 rate_recordt;Pc_prev(PcPc)/2;Pr_prev(PrPr)/2;fork1:KPk_prev(:,:,k)(Pk(:,:,k)Pk(:,:,k))/2;endelse%求解失败返回历史最优值 conv_historyconv_history(1:max(iter-1,1));final_ratemax(rate_record,0);return;end end%---达到最大迭代次数返回结果---conv_historyconv_history(~isnan(conv_history));final_ratemax(rate_record,0);end3.3 rel_entr函数的用法其中值得注意的点是CVX 要求所有表达式遵循规范凸编程直接书写 log2(I S) 不被 CVX 认可为凹函数因为 CVX 不会自动推断log与仿射函数复合后的凹凸性。因此引入了CVX 标准原子库中与 log 2(y) 等价的凹函数构造方式相对熵。该函数在其定义域上是凸函数。CVX 的标准原子库提供 rel_entr(x, y) 实现这一函数。令 x1则有其他的就根据理论公式推导情况进行代码编写得到的。4 总结本文研究了基于速率分拆多址RSMA的通信感知一体化ISAC下行系统波束成形优化问题。以最大化用户最小速率为目标在总功率和感知精度CRB约束下建立了非凸优化模型。通过连续凸近似SCA方法将原问题转化为一系列可高效求解的半定规划SDP凸子问题并利用CVX工具包实现了算法。仿真结果表明所提SCA算法能在数次迭代内快速收敛。完整仿真代码可见往期文章文末VX公众号包含往期博客所有代码所见即所得