问题:小区速率比paper中给出的仿真速率高很多。所以我们来讨论一下小区速率的计算方法。
之前小区速率计算的逻辑,是循环一万次计算出一个用户的速率,然后乘用户数。现在想的修改思路是直接每次将小区速率求出来,然后取循环一万次后的平均值。后者我觉得在一定程度上可以减小速率的随机性。因为仿真的结果表明,仿真速率的差距就在同小区的大尺度衰落上面,随机产生的大尺度衰落差距会很大。但是如果我们考虑整个小区所有用户的速率然后加和的话,大的速率固然比较大,但是小的速率比较小,这样子的随机性比之前只算一个用户速率然后取平均应该小很多。
接下来进行试验,看代码的结果会怎么样。
首先,附上之前方法的结果:
这是修改完后的速率仿真结果
结果不算好,不过因为是初版,晚上因为要读paper今天的速率仿真就到这里了。接下来会给出小区速率到底用什么方式来计算比较合适
备份一下代码。
%更改小区速率的计算方式
clear;
SNR=0;
result=zeros(1,10);
for i=1:10000
result1=zeros(1,10);
x=1;
pu=10;
%pr=10db
pr=10;
r=-3.8;
K=15;
z=0.01;
d_in=rand(1,K/3)*0.99+0.01;
theta_in=rand(1,K/3)*(-pi/3);
d_out=rand(2,K)*0.99+0.01;
theta_out=rand(2,K)*(2*pi);
for j=1:K/3
x=1;
result2=zeros(1,10);
for M=50:50:500
%产生alpha
beta_of_alpha=zeros(1,3);%总共三个区域
beta_of_alpha(1)=z*d_in(j)^r;
d1=sqrt(2^2+d_out(1,j)^2-2*2*d_out(1,j)*cos(5*pi/6-theta_out(1,j)));
beta_of_alpha(2)=z*d1^r;
d2=sqrt(2^2+d_out(2,j)^2-2*2*d_out(2,j)*cos(5*pi/6-theta_out(2,j)));
beta_of_alpha(3)=z*d2^r;
alpha_jk=sum(pr*beta_of_alpha*K)+1;
%产生first项
beta_target_user=z*d_in(j)^r;
first=pu*pr*beta_target_user^2*K*(M-1)/alpha_jk;
%产生的second项
second=pu*beta_target_user*(1-pr*beta_target_user*K/alpha_jk);
%产生third项
third=pu*beta_of_alpha(2)*(1+pr*beta_of_alpha(2)*K*(M-2)/alpha_jk)+pu*beta_of_alpha(3)*(1+pr*beta_of_alpha(3)*K*(M-2)/alpha_jk);
%产生forth项,forth项共分为小区内的干扰和小区间的干扰
forth_1=sum(pu*z*d_in.^r)-pu*z*d_in(j);
forth_2=sum(pu*z*d_out(1,:).^r)-pu*z*d_out(1,j)^r;
forth_3=sum(pu*z*d_out(2,:).^r)-pu*z*d_out(2,j)^r;
forth=forth_1+forth_2+forth_3;
result2(x)=first/(second+third+forth+1);
x=x+1;
end
result1=result1+result2;
end
result=result+result1;
end
result=result/10000;
result=6/15*log2(1+result)*3;
M=[50:50:500];
plot(M,result,'x-');
xlabel('Numbers of antennas at BS');
ylabel('Sum rate(bits/symbol)');
hold on;