1、最近有大量小伙伴在问关于通信领域里面CVX的代码编写问题因此计划新开系列文章讲解无线通信优化问题中关于MATLAB CVX工具的使用。2、计划前期先写经典的简单通信问题的CVX求解以打实基础后期再针对目前热门的通信方向如RISNOMAUAVISAC等方向的复杂非凸问题的近似迭代后的CVX求解。3、本文为第【五】期讲解基于速率分拆多址接入RSMA的可见光通信下行功率分配问题的SDR连续凸近似算法。1 引言在通信信号处理与无线网络资源调度领域大量核心设计问题最终都可归结为特定形式的多变量优化模型。然而一个被广泛认知且长期困扰研究者的困境在于这些模型中的目标函数或约束条件往往呈现非凸特性而传统的凸优化工具又无法直接适用。构成了工程优化中一道棘手的理论鸿沟。针对此类问题学界与工程界逐渐形成了一种兼顾理论严密性与计算可行性的共识性策略——逐次凸近似Successive Convex Approximation, SCA。该方法的核心理念并不依赖对原问题的全局改造而是采用一种局部化的迂回路径在每一次迭代中以当前可行解为基准对原问题中的非凸项构造一个结构简单、性质良好的凸近似模型并在此基础上求解一个易于处理的凸子问题。所得解再作为下一次迭代的初始点如此反复直至满足预设的收敛准则。这一框架的优势在于它既保留了原问题的物理意义又充分利用了凸优化领域成熟高效的数值求解工具从而在求解质量与计算负担之间取得良好折中。从更广阔的视角来看SCA的适用性已远超单一的理论构想几乎渗透到现代无线通信系统优化的各个前沿方向。无论是多天线系统中的协作波束赋形与干扰协调还是智能反射面辅助通信中离散相位与连续功率的联合调配抑或是高动态低轨卫星星座中的跳波束资源分配这些看似迥异的工程问题在其数学本质层面均可纳入SCA的统一处理框架。这种通用性使得SCA成为连接优化理论与实际系统设计的一条重要纽带。2 系统建模和优化问题其中第k个用户到基站的第n个LED的信道服从朗博模型基于RSMA原则和一种VLC信道容量模型公共和私有信噪比为优化问题建模为其中变量c是为了满足rsma公共速率被全部译码的要求可以看到原始问题非凸是因为目标函数约束里面的log函数分子分母都存在功率分配向量导致的。3 基于SCA的非凸转凸算法3.1 等价转换先定义辅助变量将问题转换为比较容易求解下形式通过3.2 SDR泰勒近似的迭代最后给定初始解迭代求解即可3.3 代码实现close all;clc;clear;global N K sigma N4;K2;sigmareal(10^(-98.28/10)/1000);h_led4.5;LED[3,3,h_led;3,5,h_led;5,3,h_led;5,5,h_led];%M4x[4.25:1:4.25];ii1;%%迭代次数fori_x2.8:1:2.8;%%%%改变灯间距 i_x PD[2.7,4,1.7;4.2,4,1.7];%确保 h1h2,很重要fori1:K pdPD(:,i);forj1:N eta_l0.54;eta_c1;m1;%朗伯系数 A_PD1e-4;%PD几何尺寸 ledLED(:,j);d_pdnorm(led-pd);%LED距pd的距离 phi_cos_pd((pd-led)*[0;0;-1])/d_pd;%LED与pd之间的发射角cosh1(j,i)real((eta_l*eta_c*(m1)*A_PD*phi_cos_pd^(m1)/(2*pi*(d_pd^2))));%PD信道增益 end end hnum2cell(h1,1);%%%rs预编码初始化 P11e0;P_com1P1*0.6;P_private_k1(P1-P_com1)/K;fori1:K w_l_0{i1}h{i}/norm(h{i})*sqrt(P_private_k1);%%初始化私有预编码 end GL_com[h{1}];forj2:K GL_com[GL_com,h{j}];end[U,S,V]svd(GL_com);w_l_0{1}sqrt(P_com1)*U(:,1);w_l_hatw_l_0{1};fori1:K w_l_hat[w_l_hat;w_l_0{i1}];%合并公共与私有 end W_ini_rsw_l_hat*w_l_hat;SNR0:5:30;P_wate10.^(SNR/10);fori_P_wate1:length(P_wate)i_P_wate P_barP_wate(i_P_wate);%%%%%%%%%%%%%%%%%%%%%%rs_cccp[W_rs,sumrate_ini_rs,sumrate_new_rs,R_1_new_rs,R_2_new_rs]rs_cvx(W_ini_rs,h,P_bar);i_count_rs1;while(abs(sumrate_new_rs-sumrate_ini_rs)0.00001)%%精度会影响最终细微的计算结果 W_ini_rsW_rs;[W_rs,sumrate_ini_rs,sumrate_new_rs,R_1_new_rs,R_2_new_rs]rs_cvx(W_ini_rs,h,P_bar);i_count_rsi_count_rs1;if(i_count_rs100)break;end endSumrate_RS(i_P_wate)sumrate_new_rs;Sumrate_RS(ii)sumrate_new_rsR_1_rs(ii)R_1_new_rs;R_2_rs(ii)R_2_new_rs;iiii1;end end grid onplot(SNR,Sumrate_RS,r-*)%axis([01026]);set(get(gca,Children),linewidth,2)set(gca,FontSize,20,FontName,Times New Roman)set(get(gca,Children),MarkerSize,8)set(gca,XTick,[0:5:55])set(legend,fontSize,20,FontName,Times New Roman,interpreter,latex);xlabel(${\rm{SNR}}$(dB),interpreter,latex,FontSize,20,FontName,Times New Roman);ylabel(${\rm{Sum\;rate}}$(bits/sec/HZ),interpreter,latex,FontSize,20,FontName,Times New Roman);legend(RSMA)function[W,sumrate_ini,sumrate_new,R_1_new,R_2_new]rs_cvx(W_ini,h,P_bar);global N K%%ABG参数:Alpha0.08;Beta1;Gamma0.26;%%%%信道参数:B11;global sigma%%%%发射机参数 A2;Beta1;one_vectorones(N,1);d1Beta*ones(K1,1);ddkron(d1,one_vector);Ddd*dd;eneye(N,N);b1A*ones(K1,1);bkron(b1,en);IP_bar;%DC bias vector//根据功率修改%%Hcell(K,1);w_0cell(K1,1);W_0zeros(N*(K1),N*(K1));%%为简化重新定义 G_bar(~eye(K));%单位阵换个方向 H_ccell(K1,1);H_c_hatcell(K1,1);H_c_bacell(K1,1);H_p_hatcell(K1,1);indexexp(12*(AlphaGamma*Beta));fori1:K H{i}h{i}*h{i};H_c{i}kron(diag(index*ones(K1,1)),H{i});H_c_ba{i}2*pi*kron(diag([0;Beta*ones(K,1)]),H{i});H_c_hat{i}kron(diag([0;index*ones(K,1)]),H{i});H_p_hat{i}2*pi*kron(diag([0;Beta*G_bar(:,i)]),H{i});end R_C_1_ini0.5*log2(real(trace(W_ini*H_c{1}))2*pi*sigma)-0.5*log2(real(trace(W_ini*H_c_ba{1}))2*pi*sigma);R_C_2_ini0.5*log2(real(trace(W_ini*H_c{2}))2*pi*sigma)-0.5*log2(real(trace(W_ini*H_c_ba{2}))2*pi*sigma);R_P_1_ini0.5*(log2(real(trace(W_ini*H_c_hat{1}))2*pi*sigma))-0.5*(log2(real(trace(W_ini*H_p_hat{1}))2*pi*sigma));R_P_2_ini0.5*(log2(real(trace(W_ini*H_c_hat{2}))2*pi*sigma))-0.5*(log2(real(trace(W_ini*H_p_hat{2}))2*pi*sigma));R_C_inimin(R_C_1_ini,R_C_2_ini);sumrate_iniR_C_iniR_P_1_iniR_P_2_ini;cvx_begin quiet cvx_solver sedumi cvx_precision best%cvx_solver sdpt3%cvx_begin variableW(N*(K1),N*(K1))semidefinite variable c_1 variable c_2 variable t1 variable t2fork1:KR_C_K(k)0.5*B1*log(real(trace(W*H_c{k}))/(2*pi*B1*sigma)1)/log(2)-0.5*B1*log(real(trace(W_ini*H_c_ba{k}))/(2*pi*B1*sigma)1)/log(2)...-0.5*1.4427*B1*(real(trace(W*H_c_ba{k})-trace(W_ini*H_c_ba{k}))/(2*pi*B1*sigma))/(real(trace(W_ini*H_c_ba{k}))/(2*pi*B1*sigma)1);endfork1:KR_P_K(k)0.5*B1*log(real(trace(W*H_c_hat{k}))/(2*pi*B1*sigma)1)/log(2)-0.5*B1*log(real(trace(W_ini*H_p_hat{k}))/(2*pi*B1*sigma)1)/log(2)...-0.5*1.4427*B1*(real(trace(W*H_p_hat{k})-trace(W_ini*H_p_hat{k}))/(2*pi*B1*sigma))/(real(trace(W_ini*H_p_hat{k}))/(2*pi*B1*sigma)1);end maximize t1t2 subjectto(real(trace(W.*D)))P_bar;R_C_K(1)c_1c_2;R_C_K(2)c_1c_2;c_10;c_20;c_1R_P_K(1)t1;c_2R_P_K(2)t2;t10;t20;fori1:Ntrace(W*b(:,i)*b(:,i))I^2;end cvx_end R_P_1_new0.5*(log2(real(trace(W*H_c_hat{1}))2*pi*sigma))-0.5*(log2(real(trace(W*H_p_hat{1}))2*pi*sigma));R_P_2_new0.5*(log2(real(trace(W*H_c_hat{2}))2*pi*sigma))-0.5*(log2(real(trace(W*H_p_hat{2}))2*pi*sigma));R_C_1_new0.5*log2(real(trace(W*H_c{1}))2*pi*sigma)-0.5*log2(real(trace(W*H_c_ba{1}))2*pi*sigma);R_C_2_new0.5*log2(real(trace(W*H_c{2}))2*pi*sigma)-0.5*log2(real(trace(W*H_c_ba{2}))2*pi*sigma);R_C_newmin(R_C_1_new,R_C_2_new);sumrate_newR_C_newR_P_1_newR_P_2_new;R_1_newc_1R_P_1_new;R_2_newc_2R_P_2_new;end代码基本完全按照理论推导进行编写其中用到了两个小技巧包括噪声归一化保证信道数据不能太低和初始点用mrt进行构造。3.4 仿真结果可以看到速率变化趋势符合通信系统的一般要求。固定某个snr后可以看到cvx求解结果也是逐渐上升的。4 总结本文系统介绍了基于速率分拆多址接入RSMA的可见光通信下行功率分配问题并详细阐述了如何利用逐次凸近似SCA框架将其非凸优化问题转化为可求解的凸子问题序列。核心工作包括问题建模基于RSMA原则和VLC信道容量模型建立了以系统和速率为目标的非凸优化问题其非凸性源于对数函数中分子分母均包含功率分配向量。算法设计通过引入辅助变量进行等价转换并采用半正定松弛SDR结合一阶泰勒展开连续凸近似的迭代策略将原问题逐次近似为凸优化问题从而可利用CVX等凸优化工具高效求解。代码实现提供了完整的MATLAB仿真代码实现了从信道生成、预编码初始化到SCA迭代求解的全流程并分享了噪声归一化、MRT构造初始点等工程实用技巧。仿真验证仿真结果表明所提算法能有效提升系统和速率且速率随信噪比SNR增加而单调上升符合通信系统一般规律。本研究展示了SCA在处理无线通信中复杂非凸问题上的有效性与通用性为相关领域的研究者与工程师提供了从理论推导到代码实现的完整参考。参考文献Robust Beamforming Design for Rate Splitting Multiple Access-Aided MISO Visible Light Communications浅谈MM优化算法以及CCP算法–路明非的sakura csdn关注我追更更多通信仿真代码