仿真当中假设所有相关信道的CSI已知。
正在上传…重新上传取消
对象:IRS辅助的多用户多输入单输出的下行通信系统,考虑到了实际的IRS情况,无源元件只能将入射信号偏移到离散的相位水平
方式:通过联合优化基站的有源波束形成和IRS的无源波束形成
目标:最大化所有用户的加权和速率
目前研究:
通过联合波束形成最小化发射功率
最大化总速率和能效
最大化用户的最小信噪比
最大用户加权和速率
对于目标函数的处理:
通过拉格朗日对偶变换解耦合问题
交替优化主被动波束形成
基于分式规划方法优化基站的主动波束形成
提出三种基于封闭表达式的被动波束形成算法
理想反射系数假设
连续相移假设
离散实际相移假设
设计统一的无源波束形成子问题算法:适用于连续和离散相移假设,即将反射系数约束放宽到理想凸集,三种相移的可行集F:
理想RC:只限制RC的峰值功率
F1={θn|θn|2≤1}
连续相移器:假设反射元件的反射信号强度最大,反射元件仅能调节入射信号相位
F2={θn|θn=ejϕn, ϕn∈[0,2π)}.
离散相移:θn仅在θn=ejϕn上取等距的τ个离散值
F3={θn|θn=ejϕn, ϕn∈ {0,2π/τ ,...,2π(τ−1)/τ}}
发射功率约束,联合设计波束形成,最大化所有用户的WSR:
正在上传…重新上传取消
思路:由香农公式得到最大化加权和速率,目标函数和约束均是非凸的,接下来通过拉格朗日对偶函数解耦,再通过二次分式规划转化得到最优解。
通过引入一个人工辅助变量, α = [ α1 ,..., αk , ... , αK ] T,(P1)目标函数可以转化为:
正在上传…重新上传取消
转换的意义:当固定后续α进行交替优化迭代时,对 W , Θ 的优化的目标函数就等效为:
正在上传…重新上传取消
拉格朗日对偶转化:(在Fractional Programming for Communication Systems—Part II: Uplink Scheduling via Matching 一文中给出的定理)
正在上传…重新上传取消
二次转换:
正在上传…重新上传取消
这样转换的优势在于, 转换后的问题已经不再有逆矩阵的棘手形式, 从而简化了求解。
利用这一定理, f 2 (W) 即可重写为: 正在上传…重新上传取消
对 f 2 (W) 的优化也是使用了交替优化。 而当固定其他变量时, f 2 (W) 对于 β 和 w 都是凹函数, 因此,可以直接用求导为0,求出两者的闭式解。
固定了其他变量之后, 我们提取出原目标函数中和 IRS 系数矩阵相关的项, 即:
正在上传…重新上传取消
利用:正在上传…重新上传取消
简化:
正在上传…重新上传取消
利用分式规划二次转换:
正在上传…重新上传取消
固定θ时, ε 的最优解就可以通过求导为0来推出。最后目标函数改写:
正在上传…重新上传取消
其中,正在上传…重新上传取消
三种子问题算法:
最近点投影(NPP)
这里 U 是半正定已知矩阵,v 是已知向量。显然可知, f4a 是一个关于 θ的凹函数。那么如果当 F 为凸集时,则可以通过 SDR 方法, 直接进行求解。 然而 SDR 方法有个较大的问题在于,复杂度过高, 且存在一定的性能损失。因此作者旨在提出更先进的算法。由于∣θn∣2 ∈F1是凸集, 而 ∣θn∣2 ∈ F2和∣θn∣2∈ F3 并不是, 因此作者的思想是,先以∣θn∣2∈F1求解问题,然后将该解投影到 F2 和 F3上来取得一个次优解。因此,这个算法也被命名为最近点投影。
元素迭代
由于限制条件都是针对 θ的单一元素的(和其他元素并不耦合), 因此一个直接的想法就是可以固定向量中的其余元素,单独优化一个元素, 并循环往复进行迭代.
ADMM(交替方向乘子法)
正在上传…重新上传取消
g 此处是 F的示性函数。 那么其对应的拉格朗日增广函数为:
正在上传…重新上传取消
我们开始以 G 为目标进行求解这一对偶问题如下:
正在上传…重新上传取消
如果 F =F1那么原问题和对偶问题的最优解是一致的, 即没有 duality gap. 否则, 是存在一定最优性损失的。 这个可以参考博客【凸优化关于 KKT 条件 及其最优性。 接下来, 通过 ADMM 算法求解该对偶问题,为:
正在上传…重新上传取消
第二步是关于q的凸函数,很容易得到闭式解:
正在上传…重新上传取消
看第一步, 把 G 中 与 θ 相关的项取出, 问题可写为: 正在上传…重新上传取消
加入无关的常数项,问题改写:
正在上传…重新上传取消
想要最大化上式,结果为:
正在上传…重新上传取消
仿真场景:
正在上传…重新上传取消
产生随机信道分为三部分:
“generate_location.m":用户位置的随机
%% generate new location for the K users close all clear all K=4; %% Pt=zeros(K,2); %% Lroom=200; Wroom=30; k1=[1,0]; k2=[0,1]; R=10; %% for k0=1:K r=rand(1,1)*R; %产生一个一行一列的随机数乘以半径 theta=rand(1,1)*2*pi; %数值 px=r*cos(theta);%数值 py=r*sin(theta);%数值 pt=[Lroom,Wroom]+px*k1+py*k2; %产生一行两列一组的随机用户位置 Pt(k0,:)=pt; %产生四组随机位置 end %% save('user_location.mat','K','Pt','Lroom','Wroom','R'); figure plot(Pt(:,1),Pt(:,2),'ro'); xlim([Lroom-R,Lroom+R]);ylim([Wroom-R,Wroom+R]); hold on theta=linspace(0,1,100).*2.*pi; %1*100 hold on plot(Lroom+R*cos(theta),Wroom+R*sin(theta),'r.')
结果图
正在上传…重新上传取消
”generate_pathloss.m":根据用户位置计算路径损失
%% compute the pathloss according to the users' locations close all clear all load('user_location.mat','K','Pt','Lroom','Wroom','R'); %% AP=[0,0];%基站的位置 %% IRS=[200,0];%IRS位置 d_g=sqrt(sum(abs(AP-IRS).^2));%相当于AP到RIS路径空间距离 L_g=path_LOS( d_g ); %AP到RIS路损 %% IRS-assist link Lu=zeros(1,K); for k0=1:K pt=Pt(k0,:)-IRS; du=sqrt(sum(abs(pt).^2)); %irs到第k个用户空间上的距离 Lu(k0)=path_LOS( du ); %RIS到每个用户路径损耗 end Lu=Lu+L_g; %级联G和hr,k路径的损耗 %% direct link Ld=zeros(1,K); for k0=1:K pt=Pt(k0,:)-AP; dk=sqrt(sum(abs(pt).^2)); Ld(k0)=path_NLOS( dk ); % Ld_test(k0)=path_LOS( dk ); end Lu-Ld %% save('user_pathloss.mat','K','Lu','Ld');
“generate_channel.m":产生理想随机信道
%% Generate the channel coefficients close all clear all %% load('user_pathloss.mat','K','Lu','Ld'); %% noise=-170+10*log10(180*1e3); path_d=10.^((-noise-Ld)/10);%ris path_i=10.^((-noise-Lu)/10);%BS-User %% ite=1e2; %% N=100; M=4; %% pd=sqrt(path_d);%ris pd=repmat(pd.',1,M); ps=sqrt(path_i);%BS-User ps=repmat(ps.',1,N); %% theta_init, channel Hd Hd_w=zeros(K,M,ite); theta_init=zeros(N,1,ite); for j0=1:ite Hd=sqrt(1/2).*(randn(K,M)+1j.*randn(K,M)); theta=exp(1j.*rand(N,1).*2.*pi); %% Hd_w(:,:,j0)=Hd; %产生的100个快照 theta_init(:,:,j0)=theta; end %% eb=10; eb2=1/(1+eb); eb1=1-eb2; eb1=sqrt(eb1); eb2=sqrt(eb2); %% channel G AP_angle=rand(1,1); IRS_angle=rand(1,1); G_sig=zeros(N,M,ite); for i0=1:ite G_sig(:,:,i0)=sqrt(1/2).*(randn(N,M)+1j.*randn(N,M)); end %% channel Hr_w User_angle=rand(1,K); Hr_sig=zeros(K,N,ite); for i0=1:ite Hr_sig(:,:,i0)=sqrt(1/2).*(randn(K,N)+1j.*randn(K,N)); end %% save('user_channel.mat','K','N','M','ite','pd','ps','Hd_w','theta_init','AP_angle','IRS_angle',... 'G_sig','User_angle','Hr_sig','eb1','eb2','path_d','path_i');
算法主代码:
无RIS
随机相位RIS
完美CSI设置下算法
仿真结果图