Matlab代码实现智能反射面的信道仿真

前言

之前写了许多最新的智能反射面文章的读后感, 现在这一领域的文章也是井喷式爆发。 但是网上公布的代码非常少, 这篇博客就分享下如何用matlab建模仿真智能反射面信道

模型

在这里插入图片描述
主流的智能反射面系统大同小异,这里就随便截取了一篇文章中的系统框图来示意。 简单来说,智能反射面系统可以分为三个信道:

  • 基站直接到达用户的信道: BS-UE 信道
  • 基站到智能反射面的信道: BS-IRS 信道
  • 智能反射面到用户的信道:IRS-UE 信道

英文缩写中,

  • BS: Base Station 基站
  • UE: User Equipment 用户设备
  • IRS: Intelligent Reflecting Surface 智能反射面

首先是考虑经过智能反射面的信道, 即BS-IRS 和 IRS-UE信道。 这两个信道都可以看做是传统的MIMO信道, 我们考虑现在最热的毫米波信道, 即具有稀疏性, 径数有限。 **另外需要指出的是, 由于IRS是一个平面,因此其天线响应向量(array response vector),应当按照 UPA (uniform planar array) 来算, 而不能按ULA (uniform linear array)。 因此, 其响应可以写为:

在这里插入图片描述
其中, ϕ\phiθ\theta 分别代表了信号入射的方位角 (azimuth angle) 和 仰角 (elevation angle)。 NN代表的是天线总数(智能反射面反射因子数)。 λ\lambda是波长,dd是天线间隔, 由于一般都设置有d=0.5λd=0.5\lambda, 上式可以进一步化简。

同样的,现在主流的基站的发送天线一般也以UPA形式为主。 因此, BS-IRS信道实际上就是两个UPA之间的MIMO信道仿真。 首先先写一个函数, 来实现单侧UPA的天线响应向量的仿真:

function y = array_response(phi,theta, N)
for m= 0:sqrt(N)-1
    for n= 0:sqrt(N)-1
        y(m*(sqrt(N))+n+1) = exp( 1i* pi* ( m*sin(phi)*sin(theta) + n*cos(theta) ) );
    end
end
y = y.'/sqrt(N);
end

这里假设了UPA是正方形UPA,即横向和纵向的阵子数相等。 如果想考虑长方形UPA的话可以自行修改, 但如果只是想简单地仿真一个智能反射面信道的话完全可以用上述代码实现。 具体就不过多展开了,就是将上面的响应公式翻译成了matlab代码而已。

有了这个函数, 就能很快地仿真BS-IRS信道了:

function H = generate_channel(Nt, Nr, L)

AoD = pi*rand(L, 2) - pi/2;  %-2/pi~2/pi
AOA = pi*rand(L, 2) - pi/2;  %-2/pi~2/pi
alpha(1) = 1; % gain of the LoS
alpha(2:L) = 10^(-0.5)*(randn(1,L-1)+1i*randn(1,L-1))/sqrt(2);
H = zeros(Nr, Nt);
for l=1:1:L
    ar = array_response(AOA(L,1),AOA(L,2), Nr);
    at = array_response(AOD(L,1),AOD(L,2), Nt);
    H = H + sqrt(Nr * Nt)*alpha(l)*ar*at';
end

其中, Nt 代表发送天线数, Nr代表接收天线数, L代表路径总数 (1条LOS直射径+(L-1)条NLOS径)。
每条径需要包含四个变量: 发送的方位角和仰角; 接收的方位角和仰角。 我们生成AOD, 代表发送的方位角和仰角。

AOD = pi*rand(L, 2) - pi/2;

这里相当于生成了 L×2L \times 20.5π-0.5\pi~0.5π0.5\pi的角度,其中每条路径各有发送方位角和仰角一个。 AOA同理。

这里需要指出, 实际中方位角和仰角的变化范围应该不同,仰角的变化范围会偏小, 因此更合理的仿真应该进一步限制其生成范围。 但就像上面所说,如果只是为了随机生成智能反射面信道用于仿真,不用纠结的那么细。

α\alpha代表的是信道的衰落系数, 为了区别LOS径和NLOS径,我们默认第一径是LOS径,给了归一化的能量为1。 而NLOS径的能量则是高斯变量, 并且为了体现出与LOS径的能量差, 给了一个衰减系数。

在这里插入图片描述
因为疫情在家,没有mathpix,实在懒得自己手打latex,就截了下MIMO的公式。 和我们的模型有一点点区别, 但是每一径的生成是一样的,就是根据发送角和到达角分别生成ar和at然后相乘并乘上衰落因子。 懂的自然懂,不懂的可以根据我的代码反推一下。

这样的话就可以仿真BS-IRS信道了, 而 IRS - UE的信道也同理,同样可以建模为上面这个信道模型。

关于BS-UE的信道, 有几种不同的建模:

  • 直接假设BS-UE间被阻隔, 即不存在这个信道。 这样的话也就不用仿真了。 这个场景也是合理的,许多论文中都是这样假设的。
  • 假设被阻隔, 即不存在LOS径, 但是有NLOS径。 那么就可以用上面的代码去仿真,只需要把LOS径去掉就行了。
  • 假设为瑞利衰落信道。 这个是最容易仿真的, 也有许多论文采用这个建模。 瑞利的仿真代码非常容易, 网上也有很多,不再赘述了。
发布了47 篇原创文章 · 获赞 116 · 访问量 73万+

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览