草庐IT

智能反射面RIS经典论文复现,主被动式波束赋形

伽蓝雨不停 2023-04-11 原文

引言

本文主要复现IRS经典论文《Intelligent Reflecting Surface Enhanced Wireless Network via Joint Active and Passive Beamforming》中的单用户部分,给出相应的matlab代码,通过该论文可以了解IRS优化中的一个经典的优化方法,即半正定松弛(SDR)算法,并了解响应的对比算法,如IRS相位随机优化,无IRS以及AP-user最大比发送(MRT),AP-IRS MRT等等。对于多用户部分后续进行补充。具体解释部分可参考博文基于SDR的智能反射面波束成形设计

该论文引用到1000多次,但是没有在网上找到相应的源码,因此复现以帮助自己理解,代码除高斯随机化部分参考相关网页,其他都是自己书写,该文主要关注复现,其他算法细节请仔细阅读该论文,文章不再详细描述,发出来希望对大家对做IRS相关的工作有用处。

本文主要内容

该论文主要是联合基站主动式和IRS被动式波束赋形优化,以最小化基站的发射功率,并以用户的QoS为约束,考虑了单用户和多用户的场景,本文首先复现单用户的场景,复现结果和论文的结果除数值有些差距,趋势基本吻合,可能某些参数没有对齐,也没有找到相应的参数,但是不影响对于算法的理解。其仿真场景如下

仿真场景

 场景中AP和IRS在同一水平线上,用户离AP-IRS水平线的距离为 ,AP到用户的水平距离为  ,AP和IRS的距离为 ,其他具体参数可以参考论文的实验部分,在此不在赘述。其优化问题如下

优化问题

为求解该问题,文中将其构造成一个齐次的二次约束二次规划问题(QCQP),然后转化为一个SDR问题,如下

求解优化问题

 有秩1约束,求解过程中先舍去该约束,该问题是一个标准的SDP问题,可以利用CVX求解,然后利用高斯随机化过程恢复,求得次优解,其恢复过程在该论文的GLOBECOM会议的版本中有详细描述,简述如下,首先对SDP得到的 V 进行特征值分解  ,然后令,其中 ,随机产生多个  ,然后选取使得目标函数最大的 ,最后恢复,详细解释可参考经典的SDR算法(下):SDR的具体使用细节与相关代码

信道模型

在通信优化问题的仿真中,信道建模尤其关键,如果信道选择不好会极大地影响优化的性能,可能调试很久都没有出现较为理想的曲线都是因为信道模型选取的问题,主要是小尺度衰落模型的选取。该论文中路径损耗模型如下

其中  为单位距离的路径损耗,设置为-30 dB,  为单位距离1m, 为路径损耗因子,为两个设备之间的距离。

对于小尺度衰落部分,论文中考虑的是莱斯信道模型,AP-IRS之间的信道如下所示:

是莱斯因子,控制LOS分量和NLOS分量的大小关系, 分别是确定性的LoS分量和NLoS分量,其中NLoS分量满足瑞利衰落,对于LoS分量,由于论文中将基站和IRS分别建模为均匀线性阵列(ULA)和均匀面阵(UPA),由于论文中没有详述该部分的内容,在此进行简单的描述,一般ULA配置在x轴上,IRS在xz平面,需要利用UPA的导向矢量(水平和竖直方向导向矢量进行克罗内克积)乘以ULA的导向矢量,即

其中  为路径数,为第n条路径的幅度和相位,分别为发送和接收导向矢量,分别为AoD和AoA的方位角和俯仰角。

对于水平沿着x轴的ULA,为入射波与y轴的方向,其导向矢量为

在3D信道模型中,UPA布置在xoz平面上,,其中为方位角,为俯仰角, ⊗ 为克罗内克积,导向矢量如下所示

其中为阵元之间的距离,通常设置为半波长,为波长。

为简化仿真,该论文中AP和IRS正对着,即实际上AoA和AoD都为0°,论文实验中设置,即AP和IRS之间只有一条LoS路径,没有NLoS部分,信道可简化为全一矩阵乘以路损,即使加上一个相位因素对优化结果没有影响,因此可以舍去信道延迟造成的相位偏转。而IRS和user以及AP和user之间是服从纯瑞利衰落信道。对于信道模型的选取,特别是否含有LoS路径也是通信优化中需要着重考虑的因素,会极大地影响优化的性能和调试过程。

仿真代码

仿真参数设置

clc
clear
epsilon = 1e-4; % 收敛停止条件
d0 = 51; % AP到IRS之间的距离
dv = 2; % 两条竖线之间的距离
% d = 50; % User和AP之间的水平距离
% d1 = sqrt(d^2+dv^2); % AP到User之间的距离
% d2 = sqrt((d0-d)^2+dv^2); % User到IRS之间的距离
C0 = db2pow(-30); % 参考距离时的路损
D0 = 1; % 参考距离
sigmaK2 = db2pow(-80); % 噪声功率
gamma = db2pow(10); % 信干噪比约束10dB

L = @(d, alpha)C0*(d/D0)^(-alpha); % 路损模型

% 路损参数
alpha_AI = 2;
alpha_Iu = 2.8;
alpha_Au = 3.5; 
beta_IU = 0; % IRS到User考虑瑞利衰落信道,AP和IRS之间为纯LoS信道

% 天线数
M = 4; % AP天线数
N = 30; % IRS单元个数 

仿真主循环

需要说明的是在此对信道根据噪声功率进行了归一化操作,使得信道参数数量级不至于太小,如果信道参数的数量级很小,CVX也难以进行优化,最好使得信道参数的数据集在1e-2次方以上,归一化并不影响目标函数的大小,是通信优化中的小技巧,有时候根据信道模型产生的信道参数难以得到较好的优化结果时,可以考虑进行归一化操作。

需要注意的是,根据第三节B部分求解得到的v,求共轭转置的时候,只需要进行转置,不然相位没有进行对齐,这里容易出现错误。

d = 20:5:50; % User和AP之间的水平距离
frame = 500;

P1 = zeros(length(d),1);
P2 = zeros(length(d),1);
P3 = zeros(length(d),1);
P4 = zeros(length(d),1);
P5 = zeros(length(d),1);
P6 = zeros(length(d),1);
P7 = zeros(length(d),1);
for i = 1:length(d)
    i
    d1 = sqrt(d(i)^2+dv^2); % AP到User之间的距离
    d2 = sqrt((d0-d(i))^2+dv^2); % User到IRS之间的距离
    for j = 1:frame
        G = sqrt(L(d0,alpha_AI))*ones(N,M); % LoS信道,除以噪声功率是为了进行噪声功率归一化,因为G和hr是级联的,对一个信道进行归一化即可
        hr = sqrt(L(d2,alpha_Iu)/(2*sigmaK2))*(randn(1,N)+1i*randn(1,N)); % 瑞利信道, IRS-User
        hd = sqrt(L(d1,alpha_Au)/(2*sigmaK2))*(randn(1,M)+1i*randn(1,M)); % 瑞利信道, IRS-User
        
        % SDR优化方法,得到下界
        [v, lower_bound] = SDR_solving(hr, G, hd, N);
        P_opt = gamma/(norm(v'*(diag(hr)*G)+hd)^2);
        P1(i) = P1(i) + P_opt;
        P4(i) = P4(i) + gamma / lower_bound;
        
        % AP-User MRT
        [v_aumrt, w_aumrt] = AUMRT(hd,hr,G);
        P_aumrt = gamma/(norm((v_aumrt.'*(diag(hr)*G)+hd)*w_aumrt)^2); % 注意这里的相位对齐后,对v只需要转置即可,不需要共轭转置
        P2(i) = P2(i) + P_aumrt;

        % AP-IRS MRT
        [v_aimrt, w_aimrt] = AIMRT(hd,hr,G);
        P_aimrt = gamma/(norm((v_aimrt.'*(diag(hr)*G)+hd)*w_aimrt)^2);
        P3(i) = P3(i) + P_aimrt;

        % 交替迭代算法
        P_AO = AO(hd,hr,G,epsilon,gamma);
        P7(i) = P7(i) + P_AO;

        % IRS随机相位算法
        theta = 2*pi*rand(1,N); % 随机初始化IRS的相位
        Theta = diag(exp(1i*theta));
        P_rand = gamma / (norm(hr*Theta*G+hd)^2);
        P5(i) = P5(i) + P_rand;

        % 无IRS的场景
        P6(i) = P6(i) + gamma / (norm(hd)^2);
    end
end
P1 = pow2db(P1 / frame);
P2 = pow2db(P2 / frame);
P3 = pow2db(P3 / frame);
P4 = pow2db(P4 / frame);
P5 = pow2db(P5 / frame);
P6 = pow2db(P6 / frame);
P7 = pow2db(P7 / frame);
plot(d, P1, 'g-','LineWidth',2.5)
hold on
plot(d, P2, 'r^-.','LineWidth',2)
plot(d, P3, 'cv-.','LineWidth',2)
plot(d, P4, 'mo-','LineWidth',1)
plot(d, P5, 'kp:','LineWidth',2)
plot(d, P6, 'ks:','LineWidth',2)
plot(d, P7, 'b:','LineWidth',2)
xlabel('AP-user horizontal distance, d(m)')
ylabel('Transmit power at the AP (dBm)')
grid on
legend('SDR','AP-suer MRT','AP-IRS MRT','Lower bound','Random pahse shift','Without IRS','Alternating optimization','location','best')

SDR优化

function [v, lower_bound] = SDR_solving(hr, G, hd, N)
    L = 1000; % 高斯随机化过程次数
    Phi = diag(hr)*G;
    R = [Phi*Phi' Phi*hd'; hd*Phi' 0];
    cvx_begin sdp quiet
        variable V(N+1,N+1) hermitian
        maximize(real(trace(R*V))+norm(hd)^2);
        subject to
            diag(V) == 1;
            V ==  hermitian_semidefinite(N+1);
    cvx_end
    
    lower_bound = cvx_optval;
    % 高斯随机化过程
    %% method 1
    max_F = 0;
    max_v = 0;
    [U, Sigma] = eig(V);
    for l = 1 : L
        r = sqrt(2) / 2 * (randn(N+1, 1) + 1j * randn(N+1, 1));
        v = U * Sigma^(0.5) * r;
        if v' * R * v > max_F
            max_v = v;
            max_F = v' * R * v;
        end
    end
    
    v = exp(1j * angle(max_v / max_v(end)));
    v = v(1 : N);
end

AP-user MRT以及AP-IRS MRT

该部分算法是给定基站波束的发射方向,按直接链路进行最大比发送,或者按照与IRS信道中一行的信道做MRT,然后利用第三节B部分的相位对齐的算法求解IRS的相位,最后算出基站的发射功率P,其代码如下:

% AP-User MRT
function [v_aumrt, w_aumrt] = AUMRT(hd,hr,G)
    w_aumrt = hd'/norm(hd);
    varphi0 = angle(hd*w_aumrt);
    v_aumrt = exp(1j*(varphi0 - angle(diag(hr)*G*w_aumrt)));
end

% AP-IRS MRT
function [v_aimrt, w_aimrt] = AIMRT(hd,hr,G)
    w_aimrt = G(1,:)'/norm(G(1,:));
    varphi0 = angle(hd*w_aimrt);
    v_aimrt = exp(1j*(varphi0 - angle(diag(hr)*G*w_aimrt)));
end

交替迭代优化

第三节B部分的算法,给定基站波束方向,优化IRS的相位,计算得到发射功率然后更新基站波束方向,并进行得带,直至收敛,其代码如下:

function [P] = AO(hd,hr,G,epsilon,gamma)
    w = hd'/norm(hd); % 论文中说以Ap-user MRT进行初始化
    P_new = 0;
    P = 10;
    while (abs(P-P_new)>epsilon)
        varphi0 = angle(hd*w);
        v = exp(1j*(varphi0 - angle(diag(hr)*G*w)));
        P = P_new;
        P_new = gamma/(norm((v.'*(diag(hr)*G)+hd)*w)^2);
        w = (v.'*diag(hr)*G+hd)'/norm((v.'*diag(hr)*G+hd));
    end
end

实验结果

只对实验中单用户系统随着 d 变化的图进行了仿真,其他图可以简单修改主循环进行仿真,得到的仿真图如下

复现得到的
论文原图

可以看出每个算法的走势基本上相似,数值上有一些差距,一是不太清楚作者是如何产生信道G,二是可能有些参数没有对齐,如IRS单元的个数,不过不影响对于算法的理解。

总结 

本文对经典的RIS文献的单用户场景进行了复现,并给出了一系列对比方法的复现,结果与论文给出的结果基本相近,通过对该论文的复现,增加了对IRS的理解,以及对比算法的选取。

欢迎大家批评指正,有不清楚的地方欢迎留言或私信交流,希望可以尽快复现出多用户场景的部分。

有关智能反射面RIS经典论文复现,主被动式波束赋形的更多相关文章

  1. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  2. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  3. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  4. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  5. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  6. micropython复现经典单片机项目(二)可视化音频 频谱解析(基本搞定) - 2

    本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S

  7. ruby-on-rails - 使用模型属性调用的 Brakeman 不安全反射方法常量化 - 2

    在我的Rails应用程序中,我收到来自brakeman的以下安全警告。使用模型属性调用的不安全反射方法常量化。这是我的代码正在执行的操作。chart_type=Chart.where(id:chart_id,).pluck(:type).firstbeginChartPresenter.new(chart_type.camelize.constantize.find(chart_id))rescueraise"Unabletofindthechartpresenter"end根据我的研究,我还没有找到任何具体的解决方案。我听说你可以创建一个白名单,但我不确定brakeman在寻找什么。

  8. ruby - ruby 的反射? - 2

    我很好奇这是如何工作的。例如,如果我创建一个基于工厂模式的类,您可以在其中“注册”类供以后使用,然后执行类似FactoryClass.register('YourClassName',[param,param,...]);FactoryClass.create('your_class_name').call_method_from_this_object其中'class_name'是映射到值的散列中的键:ClassName有没有类似phpreflection的东西,我可以在哪里创建基于字符串名称的类的实例并传入参数?(在php中,参数将是它们的数组,php然后知道如何处理)所以如果我们

  9. 基于python的短视频智能推荐/django的影视网站/视频推荐系统 - 2

    摘要本论文主要论述了如何使用Python技术开发一个短视频智能推荐,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述短视频智能推荐的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。 短视频智能推荐的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、热门视频管理、用户上传管理、系统管理,用户:首页、个人中心、用户上传管理、我的收藏管理,前台首页;首页、热门视频、用户上传、公告信息、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个短视频智能推荐信

  10. 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32 - 2

    文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室

随机推荐