📄 sdma_blocking.asv
字号:
text_num=100000;%%%%the text num。
channelnum1=5; %%%the num of channel
block_num=0;%%%用the num which is blocking
p1=0; %%%to catch the probability of the blocking instance
ps=0.6; %%%the probability of successful spatial allocation
%%%%%%%%%%%%%%%%Fd Blocking probability%%%%%%%%%%%%%%%
for A=1:9; %%%%%%%%%%%这里我们做个近似,因为MATLAB不识别以p(0)这样的数,所以这里我们从1开始取
lambda1=40;
lambda2=A/ lambda1; %%%%%%%%%A是话务量, lambda1是一个用户服务时间,lambda2是单位时间接入次数
ichnum=1; %%%%%%%%%主信道附1,次信道为0,这也符合事实。
qchnum=0;
block_num=0; %%%%%%记录发生阻塞的次数
n=0;
for i=2:text_num; %%%%%%循环text_num次
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ichnum<=channelnum1; %%%%%%%%%%如果主信道未满,继续判断!!
comeint(i)=exprnd(1/lambda2);
sevint(i)=exprnd(lambda1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
%%%%%%%%%%程序的核心算法:在一个用户到来的时间间隔内,判断系统中的用户是否有服务完离开的情况,即用下面的循环实现。
%%%%%%%%5%比较系统系统中每个用户的服务时间和下一个用户到来的时间,系统中所以用户的服务时间均超过下个用户到来间隔
%%%%%%%%%%则系统人数加1,但是要加给主信道还是副信道还要通过Ps的值来判决。如果有任一用户服务时间小于时间间隔。则
%%%%%%%%%%系统人数减1;
for j=i:(-1):(i-ichnum-qchnum);%%%%%%%%%%这个循环即用来实现判断系统增减人数的情况。
ltime(j)=sevint(j)-comeint(i);
sevint(j)=ltime(j);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ltime(j)<=0; %%%%%%%%%%%这种情况即有任一用户服务时间小于时间间隔
if ichnum>qchnum %%%%%%%%%%如主信道人数多,则主信道减一,因为系统中副信道人数大于主信道的情况不存在
ichnum=ichnum-1;
else if ichnum==qchnum
qchnum=qchnum-1;
end
end
end
if qchnum<0; %%%%%%%%%%%%主副信道人数恒正
qchnum=0;
if ichnum<0;
ichnum=0;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if all(ltime(j))>0; %%%%%%%%%%%%统中所以用户的服务时间均超过下个用户到来间隔
%%%%%%%%%%则系统人数加1
temp=rand;
if ichnum>qchnum && temp<ps
qchnum=qchnum+1;
else ichnum=ichnum+1;
end
end
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if(ichnum==channelnum1 && qchnum==channelnum1)%%%%%%%%%如果主副信道人数都达到系统容量,就
block_num=block_num+1;
ichnum=1;
qchnum=0;
else if ichnum>channelnum1;
block_num=block_num+1;
ichnum=1;
qchnum=0;
end
end
end
p1(A)=block_num/text_num
end
%%%%%%%%%%%%%%%%DL Blocking probability%%%%%%%%%%%%%%%
for A=1:9;
channelnum2=10; %%%the num of channel
lambda2=A/ lambda1;
ichnum=1;
qchnum=0;
block_num=0;
n=0;
for i=2:text_num;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ichnum<=channelnum2;
comeint(i)=exprnd(1/lambda2);
sevint(i)=exprnd(lambda1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
for j=i:(-1):(i-ichnum-qchnum);
ltime(j)=sevint(j)-comeint(i);
sevint(j)=ltime(j);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ltime(j)<=0;
ichnum=ichnum-1;
if ichnum<0;
ichnum=0;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if all(ltime(j))>0;
ichnum=ichnum+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555555
if ichnum>channelnum2;
block_num=block_num+1;
ichnum=1;
qchnum=0;
end
end
p2(A)=block_num/text_num
end
%%%%%%%%%%%%理论值计算
for A=1:9;
a1=0;
s1=5;
for n=0:s1
a1=a1+(A)^n/factorial(n);
end
c1=1/a1;
p=c1*((A)^s1)/factorial(s1);
d1(A)=p
end
for A=1:9;
a2=0;
s2=10;
for n=0:s2
a2=a2+(A)^n/factorial(n);
end
c2=1/a2;
p=c2*((A)^s2)/factorial(s2);
d2(A)=p
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55555
SNRindB=0:8;
semilogy(SNRindB,p2,'o');
hold
semilogy(SNRindB,p1,'*');
semilogy(SNRindB,d1,'-');
semilogy(SNRindB,d2,'b');
xlabel('traffic');
ylabel('blocking probability');
title('blocking probability of FD ,DL and the Theoretical(ps=0.6,n=1000000)');
legend( 'Fd','DL','Erlang-B(5ch)','Erlang-B(10ch)');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -