5G5G通信网络中资源分配和负载均衡算法的matlab仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5G5G通信网络中资源分配和负载均衡算法的matlab仿真相关的知识,希望对你有一定的参考价值。
1.软件版本
matlab2017b
2.算法描述
首先,5G模型的基本结构如下所示:
超密集网络是5G通信系统中的重要技术,是现在通信界的研究热点。系统中的每个小小区都是正交频分多址系统,共有TV个小小区,每个小小区使用个OFDMA子载波,信道增益为G。根据其结构图可知,当然超密集网络由大量小小区部署,小小区是低功率无线接入节点,工作在授权的频谱,而宏基站的覆盖范围可达数公里。
由于5G超秘籍网络中,由于存在较多的基站,因此存在多个基站对某个用户的进行共同资源分配的情况,这种情况处理如下所示:
在改进前的算法中,如果多个基站对某个用户进行资源分配,其遵循的原则如下所示:
以2个基站和1个用户为例子,当2个基站同时对一个用户资源配置,基站采用平均方式给用户自己分配,即多个基站分配出相同的资源给用户进行使用。
在改进后的算法中,改进后的算法,我定义了一个网络效益函数,然后多于多基站分配的问题,在分配过程中,以网络效益最大值为目标进行分配,通过优化算法进行不断的迭代更新,使得网络效益函数最大,此时对应的分配结果即为最优分配结果。建立一个4个基站,256个用户,基于OFDM+OQAM调制方式的5G密集网络系统。
首先定义系统的总吞吐量为优化目标(注意,在条件相同的情况下,总的吞吐量大,那么意味着用户接入速率,用户平均速率,SINR,等性能指标也较好,因此以该指标为优化目标)
1.优化目标函数:
对于资源分配部分,目标函数为:
表示Nbs个基站,Nuser个用户总的吞吐量。该优化目标的含义是当进行最优的资源分配的时候,系统的整体吞吐量将达到最大。以此函数为优化目标函数。
表示Nbs个基站,Nuser个用户总的吞吐量。该优化目标的含义是当进行最优的资源分配的时候,系统的整体吞吐量将达到最大。以此函数为优化目标函数。可以定义如下的优化目标:
两个权值均设置为0.5即可。
通过这个多目标的优化函数,进行遗传优化,我们的优化算法实现过程如下所示:
遗传优化算法:
3.部分源码
function [E,Sub_bit] = func_obj1(Sub_bit0,adj,Rt,gain_subc,Pnoise,Nuser,Pt,Hest,Bw,MaxRate,Nbs);
Sub_bit = round(Sub_bit0 + adj);
ind1 = find(Sub_bit<=1);
ind2 = find(Sub_bit>=2);
Sub_bit(ind1) = 1;
Sub_bit(ind2) = 2;
zs_bits = Sub_bit;
%bits alteration
epss = 1;
LVLs = 0;
%功率分配结果
All_pw = zeros(1,Nuser);
%比特分配
car_bits = zeros(1,Nuser);
error = zeros(1,Nuser);
chowbits = sum(Sub_bit);
while(chowbits>Rt)
use_ind = find(zs_bits>0);
diff_use = error(use_ind);
id = find(diff_use==min(diff_use),1);
ind_alter = use_ind(id);
zs_bits(ind_alter) = zs_bits(ind_alter)-epss;
error(ind_alter) = error(ind_alter)+1;
chowbits = sum(zs_bits);
end
while(chowbits<Rt)
use_ind = find(zs_bits~=0);
diff_use = error(use_ind);
id = find(diff_use==max(diff_use),1);
ind_alter = use_ind(id);
zs_bits(ind_alter) = zs_bits(ind_alter)+epss;
error(ind_alter) = error(ind_alter)-1;
chowbits = sum(zs_bits);
end
% zs_bits
Sub_bit = (zs_bits);
SNR = subSNR(gain_subc,Pnoise/1e5,5);
All_pw = (2.^Sub_bit-1)./SNR;
Sub_pw = All_pw./sum(All_pw).*Pt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Sub_bit,Sub_pw]= func_maxsinr_loadbalance(Sub_bit,Sub_pw,MaxRate);
%计算每个用户对应的SINR
for nn = 1:Nuser
%SEL表示基站开关
A = sum(Sub_pw(nn)*abs(Hest));
B = Pnoise*Bw;
SINR(nn) = Sub_pw(nn)*(abs(Hest(nn))+10)/(A+B);
end
%Rate,每个用户的速率
for nn = 1:Nuser
Rate(nn) = Bw*log2(1+SINR(nn));
end
Tp = sum(Rate);
fobj1 = Tp/100;
fobj2 = (sum(Sub_pw))^2/(Nuser*Nbs*sum(Sub_pw.^2));
E = 1/(0.5*fobj1+0.5*fobj2);
end
function snr_sub=subSNR(gain_subc,Noise_var,gap)
snr_sub = gain_subc.^2./(Noise_var.*gap);
end
clc;
clear;
close all;
warning off;
addpath 'func\\'
addpath 'func\\GA_toolbox\\'
%模拟两个基站的情况
Nbs = 100;
%用户个数Nbs个小小区,每个小小区使用K个OFDMA子载波
Nuser = 64;%设置64,128,256等幂次方,或者较大的数据,否则报错或者结果不符合实际情况
%仿真信噪比
SNRs =[2:2:20];
%以下是5G系统,使用的OFDM+OQAM调制方式发送和接收数据的相关参数
%信号发送功率
Pow = 1;
%噪声功率
Pnoise = Pow./10.^(SNRs./10);
%总的功率
Pt = Pow*Nuser.*(1+rand(1,Nbs)); %模拟不同基站之间的差异
%数据发送速率
Rb = 10e6;
%采样率
Nsamp = 8;
%每个OFDM符号对应的bit数
Rt = 256;
%信号带宽
Bw = 5e6;
%每个子载波带宽
Bw_sub = Bw/Nuser;
%OFDM保护带长度
Lgi = 8;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%5G信道相关参数
%多径时延
Mdelay = 2;
%最大多径时延
Mdelay2 = 16;
%多径个数
Nmulti = 4;
%误码率;main1.m-------------------------------------------------
%不同用户数量对应的系统吞吐量;main2.m
%资源分配指数对比:CDF-SINR;main3.m
%负载均衡指数对比:LBI;main4.m
Error1 = zeros(length(SNRs),Nbs);
%误码率统计长度
Nums = 200;
SEL = ones(1,Nbs);
for ii=1:length(SNRs)
%信道估计
%负载均衡初始状态计算
for ij = 1:Nbs
%不同基站,其和用户之间的信号会有差异
[path_delay,path_amp] = func_Multipath(Mdelay,Mdelay2,Nmulti,ij);
%信道估计
[Hest,Channel_p] = func_Channel_est(path_delay,path_amp,Nuser);
%计算每个用户对应的SINR
for nn = 1:Nuser
%SEL表示基站开关
A = sum(Pt(ij)*abs(Hest));
B = Pnoise(ii)*Bw;
SINR(nn) = Pt(ij)*abs(Hest(nn))/(A+B);
end
%Rate,每个用户的速率
for nn = 1:Nuser
Rate(nn) = Bw*log2(1+SINR(nn));
end
Max_sinr(ij) = max(SINR);
Max_Rate(ij) = max(Rate);
end
Max_Rate=Max_Rate/max(Max_Rate);
%产生5G密集网络的多径信道
for ij = 1:Nbs
%不同基站,其和用户之间的信号会有差异
[path_delay,path_amp] = func_Multipath(Mdelay,Mdelay2,Nmulti,ij);
%信道估计
[Hest,Channel_p] = func_Channel_est(path_delay,path_amp,Nuser);
gain_subc = abs(Hest);
Err = 0;
for jj=1:Nums
rng(ii*jj)
jj
ii
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下为一个完整的5G信号由基站发送给用户的通信流程
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%产生随机数据信息
Tsignal = randint(1,Rt);
%首先进行资源分配
[Sub_bit0,Sub_pw0]= func_chow(Nuser,gain_subc,Rt,Pnoise(ii),Pt(ij));
%将负载高的基站业务,部分转移到负载低的基站上
[Sub_bit1,Sub_pw1] = func_maxsinr_loadbalance(Sub_bit0,Sub_pw0,Max_Rate(ij));
%优化处理
[Sub_bit,Sub_pw] = func_GA_Resource_allocation1(Sub_bit1,Rt,gain_subc,Pnoise(ii),Nuser,Pt(ij),Hest,Bw,Max_Rate(ij),Nbs);
%串并处理
Tsignal_S2P = func_S2P(Tsignal,Sub_bit,Nsamp);
%基于OFDM+OQAM的5G密集网络调制处理过程
Tsignal_QAM = func_OQAM_mod(Tsignal_S2P,Sub_pw,Sub_bit);
Tsignal_IFFT = sqrt(Nuser).*ifft(Tsignal_QAM);
Tsignal_GI = func_GI_insert(Tsignal_IFFT,Lgi);
%通过信道
Tsignal_multi = func_add_multipath(Tsignal_GI,Channel_p);
Tsignal_AWGN = awgn(Tsignal_multi,SNRs(ii),'measured');
%开始接收信号
%OFDM+OQAM解调
Rsignal_noGI = Tsignal_AWGN(Lgi+1:length(Tsignal_AWGN));
Rsignal_FFT = 1/sqrt(Nuser).*fft(Rsignal_noGI);
Rsignal_est = func_Rest(Rsignal_FFT,Hest);
Rsignal_QAM = func_OQAM_demod(Rsignal_est,Sub_bit,Sub_pw,Nsamp);
%并串处理
Rsignal_P2S = func_P2S(Rsignal_QAM,Sub_bit,Rt);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%统计当前发送的误码率
[Ber_rate,Ber_num]=func_ber(Tsignal,Rsignal_P2S);
Err=Err+Ber_rate;
end
Error1(ii,ij)=Err/Nums;
end
end
figure;
semilogy(SNRs,mean(Error1,2),'b-s');
grid on;
xlabel('SNR');
ylabel('ber');
save new_error.mat SNRs Error1
4.仿真结论
A01-141
以上是关于5G5G通信网络中资源分配和负载均衡算法的matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章