文章主要思路采用了符号级预编码以及智能反射面来减少发射能量
其中优化方法分为了两个子问题,采用的是交替方向进行优化
对预编码信号优化,由于问题是凸问题所以采用的是CVX工具包,以及作者给予的一个共轭梯度算法
对RIS反射角的优化问题,通过化简后采用黎曼共轭梯度法进行优化,后续有介绍到如何选取初始RIS角度以及QoS平衡问题
这次阅读是第一次精度文章,所以关注点主要在如何进行建模以及对于问题(6)的分解以及部分FIG.4代码出现的阅读,对于黎曼几何算法,笔者不在研究范围内,既没有细看
一、系统建模
文章采用的是一个经典RIS辅助的MISO系统,其中假设CSI已知,并且将信道衰弱分为大衰弱(既距离衰弱)和小衰弱(既小规模莱斯衰弱模型),假设每个用户需求的QoS相同,假设调制为
要传输的信号为其中如果为k个用户,那么所有可能的
为
种,其中K为用户的个数
依照此,我们可以写出如传送第m个信号,第k个用户收到的信息如下
文章种对采用符号级预编码,使得信号落在相干区域,来完成满足QoS的条件,这里如果有读者不懂,可以参考其另外一篇文章
Symbol-Level Precoding Design for IRS-assisted MU-MISO Systems
有详细说明符号级编码如何落在相干区域以来满足QoS的条件
接着优化数学模型就建立出来了
其中(6a)为目标函数,既最小化发射功率,(6b)为满足接收信号落在相干区域的条件,(6c)为接受信号的样式,(6d)为RIS反射角度矩阵。
二、优化问题(6)的解决
原文中采用的是交替极小化的方式来求解的到最小发射功率,一个是固定Theta求X,一个是固定X求Theta,两者如下:
首先是固定Theta求X,其约束就变成如下形式,可以看到目标函数是一个凸函数,约束(7b)的范围是相干区域,既原文中绿色的地方
这是一个凸集,所以这个子问题(7)可以利用CVX工具包即可解决
子问题8相对来说会繁琐一点,如下
由于问题7的凸问题求解大概率会落在约束边界,所以得出来的值Xm仅勉强满足约束条件(既Qos的条件)
因此我们在下一次迭代中可以采用更加严格的约束来提升QoS,所以设置了一个辅助变量am,k
通过将其化简得到问题10
其中这里是一个的形式,可以采用经典的log-sum-exp化简此问题,对于这个简化后的问题可以采用黎曼几何流行共轭梯度法进行求解
具体求解步骤因笔者没有接触过黎曼几何就不再展示了
三、原文产出FIG.4的代码精读
原作者给出的代码中,注释部分较少,读起来还是要花点时间的,并且有一些公式作者没有在论文上展示,这里笔者把FIG4的部分代码进行了注释便于大家理解,而且笔者在进行阅读代码的时候,不知道是本人能力有限,还是作者代码确实出现了错误,修改了基站BS到用户USER之间距离的范围
我们可以看到,作者在写BS,RIS,USER这三者的时候,采用的模型如下
作者让user在RIS分布的一个距离内随意取值,笔者这里认为BS到USER之间距离在matlab上应为
d_au = (d_ar-d_ru) + 2*d_ru*rand(1,K);
其中d_au为基站到用户,d_ru为RIS到用户,d_ar为基站到RIS,K为用户数
(d_ar-d_ru)是求出基站到用户可能的最短距离, 如果加上一个2*d_ru即为最长距离,让其乘一个(0,1)的随机数,即可选择在这个圆范围内的任意地点
详细的FIG4产出代码如下
% This Matlab script can be used to generate Fig. 4 in the paper:
% R. Liu, M. Li, Q. Liu, and A. L. Swindlehurst, 鈥淛oint symbol-level precoding and reflecting designs for IRS-enhanced MU-MISO systems,鈥?IEEE Trans. Wireless Commun., vol. 20, no. 2, pp. 798-811, Feb. 2021.
% Download this paper at: https://ieeexplore.ieee.org/document/9219206
% Last edited by Rang Liu (rangl2@uci.edu) in 2024-02-02
clear;
clc;
M = 6; %%天线数
N = 64; %%IRS 反射阵列
K = 3; %%用户数
SNR = 10; %%QoS requirement
B1 = 1; %%IRS 反射相位为1bit
B2 = 2;
B3 = 3;
global sigma2;
sigma2 = 1e-11;
omega = 4; %%%% QPSK
N_sim = 5; %%模拟次数
iter_range = (1:1:14); %%迭代参数范围
power_my = zeros(1,length(iter_range));%%连续相位的能量
power_my_1 = zeros(1,length(iter_range));
power_my_2 = zeros(1,length(iter_range));
power_my_3 = zeros(1,length(iter_range));
d_ar = 50; %%天线RIS间的距离
d_ru = 3; %%RIS用户间的距离
belta1 = sqrt(10^(0.3)/(1+10^(0.3))); %%小规模莱斯衰落信道模型Glos前的参数1
belta2 = sqrt(1/(1+10^(0.3))); %%小规模莱斯衰落信道模型Gnlos前参数2
Nmax = 14;%%最大迭代次数
res_th = -1;
for sim = 1:N_sim
d_au = (d_ar-d_ru) + 2*d_ru*rand(1,K);
H_au = zeros(K,M);
for uk = 1:K
%%sqrt(10^(-3)*d_au(uk)^(-3.5))为距离衰弱 ,
%%(belta1*h_LOS+belta2*(randn(1,M)+1i*randn(1,M))/sqrt(2))为相对应的莱斯衰弱
%%两个rand包含信道来去角
h_LOS = exp(1i*pi*sin(pi*rand-pi/2))*exp(1i*pi*(0:1:M-1)'*sin(pi*rand-pi/2))';
H_au(uk,:) = sqrt(10^(-3)*d_au(uk)^(-3.5))*(belta1*h_LOS+belta2*(randn(1,M)+1i*randn(1,M))/sqrt(2));
end
%%莱斯衰弱和距离衰弱.构成信道H_ar,H_ru,H_au
H_LOS = exp(1i*pi*(0:1:N-1)'*sin(pi*rand-pi/2))*exp(1i*pi*(0:1:M-1)'*sin(pi*rand-pi/2))';
H_ar = sqrt(10^(-3)*d_ar^(-2.8))*(belta1*H_LOS+belta2*(randn(N,M)+1i*randn(N,M))/sqrt(2));
H_LOS = exp(1i*pi*(0:1:K-1)'*sin(pi*rand-pi/2))*exp(1i*pi*(0:1:N-1)'*sin(pi*rand-pi/2))';
H_ru = sqrt(10^(-3)*d_ru^(-2.5))*(belta1*H_LOS+belta2*(randn(K,N)+1i*randn(K,N))/sqrt(2));
[~,~,p_my] = getX_my_PM(H_au,H_ar,H_ru,SNR,Nmax,res_th,omega);
power_my = power_my + 10*log10(1000.*p_my./omega^K);
[~,~,p_my_1] = getX_my_PM_b(H_au,H_ar,H_ru,SNR,B1,Nmax,res_th,omega);
power_my_1 = power_my_1 + 10*log10(1000.*p_my_1./omega^K);
[~,~,p_my_2] = getX_my_PM_b(H_au,H_ar,H_ru,SNR,B2,Nmax,res_th,omega);
power_my_2 = power_my_2 + 10*log10(1000.*p_my_2./omega^K);
[~,~,p_my_3] = getX_my_PM_b(H_au,H_ar,H_ru,SNR,B3,Nmax,res_th,omega);
power_my_3 = power_my_3 + 10*log10(1000.*p_my_3./omega^K);
end
power_my = power_my/sim;
power_my_1 = power_my_1/sim;
power_my_2 = power_my_2/sim;
power_my_3 = power_my_3/sim;
figure
plot(iter_range,power_my,'-o','color',[0.85,0.1,0.1],'LineWidth',1.5)
hold on
plot(iter_range,power_my_1,'-d','color',[0.1,0.1,0.1],'LineWidth',1.5)
plot(iter_range,power_my_2,'-s','color',[0.54,0.3,0.35],'LineWidth',1.5)
plot(iter_range,power_my_3,'-^','color',[0,0.5,0],'LineWidth',1.5)
hold off
xlabel('Number of iterations');
ylabel('Average transmit power (dBm)');
grid on
legend('Proposed, B = \infty','Proposed, B = 1','Proposed, B = 2', ...
'Proposed, B = 3');
其中,作者采用的莱斯信道衰弱模型可以阅读这篇文章即可很好的知道各个参数如何由来的
因于水平有限,笔者可能在此文章有不正确的地方,还希望读者补充,具体如果有哪里不太了解,欢迎各位评论