转载B417科研笔记de Matlab代码实现智能反射面的信道仿真

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

在这里插入图片描述
主要存在三个信道:

  • 基站到UE 的直达经: BS-UE信道
  • 基站到IRS 的直达经:BS_IRS信道
  • IRS到用户的信道: IRS-UE信道

与传统 MIMO 系统不一样的是,BS-IRS与IRS-UE信道,这两个均可以看作是传统的MIMO信道。
考虑毫米波信道,毫米波信具有稀疏性,径数有限。
IRS是一个平面,所以其天线响应向量(array response vector)应该是一个UPA (uniform planar array)
因此其响应应该写作:
在这里插入图片描述
其中, ϕ \phi ϕ θ \theta θ 分别表示信号入射的方位角(azimuth angle)以及仰角(elevation angle),_N_表示天线数,而在IRS中表示其元素个数。

同样的,现在主流的基站的发送天线一般也以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的话可以自行修改。
所以仿真**BS-IRS **信道,即 定义AoA 以及AoD,路径数,以及不同路径上的增益:

function H =generate_channel(Nt,Nr,L)

AoD = pi*rand(L,2) - pi/2 ; % -pi/2 ~ 2/pi
AoA = pi*rand(L,2) - pi/2 ; % -pi/2 ~ 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: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

这里需要指出, 实际中方位角和仰角的变化范围应该不同,仰角的变化范围会偏小, 因此更合理的仿真应该进一步限制其生成范围。矩阵的生成都是基于发送角和到达角分别生成ar和at然后相乘并乘上衰落因子的 。
关于BS-UE的信道, 有几种不同的建模:

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

智能反射面代码复现学习:PARAFAC-Based Channel Estimation for Intelligent Reflective Surface Assisted MIMO System

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. addpath
    用addpath把文件加入它的工作路径后,就不会弹出提示。
  2. global
    global用来顶一个一个全局变量,对global的使用要慎重,首先需要先声明再使用;其次注意不要重名,可以用大写变量来区分;然后在子函数里面你又用到了n这个全局变量,你需要在子函数里面再次声明:最后是程序结束后要使用clear global来清除。
    在这里插入图片描述
  • 图中存在两个信道,即BS-IRS,以及IRS-UT,Z = XH^T
 G = generate_channel_LOS(NI, Nr, P);
 H = generate_channel_LOS(Nt, NI, P);
 Z =H';
  • 发送导频以及IRS的元素采用DFT生成
S= gen.DFTmatrix();
  • 生成tensor 张量
    Y = gen_tensor(G,H,Z)

  • 估计信道

		[G_est, H_est, diff, e] = BLAS(S, eye(Nt), Y);
        Hc = G * H;
        Hc_est = G_est * H_est;
        mseG(n) = (norm(G - G_est, 'fro') / norm(G, 'fro'))^2;
        mseH(n) = (norm(H - H_est, 'fro') / norm(H, 'fro'))^2;
        mse(n) = (norm(Hc - Hc_est, 'fro') / norm(Hc, 'fro'))^2;
  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值