mTD-SCDMA与TD-LTE双网络垂直切换matlab仿真

157 阅读4分钟

1.算法描述

TD-SCDMA与TD-LTE共覆盖的范围内覆盖半径1000m;

 

TD-SCDMA中心坐标(0,0),覆盖半径1000m;

 

两个TD-LTE基站的中心坐标为(150,0)(-150,0)覆盖半径为170m;

 

       用户在这个范围内一以0-15m/s 的速度随机游走,行走路线可固定(必须要经过两个LTE基站重叠区域)也可随机无方向(这里,为了验证一般性验证,采用匀速运动和指定方向进行移动,但是用户始终在小区覆盖范围之内)

 

移动终端初始在场景中接入的网络为TD-SCDMA网络,相关的网络参数。

 

定义终端移动速度

 

定义3个网络的移入和移出门限功率门限

 

定义不同的类型的业务权重

 

       切换判决模块:切换判决模块主要是测量3个网络的接收信号迁都,判断是否满足硬性接入条件,在满足硬性接入条件后再调度其他判决参数。这里的判决策略采用二维收益加权法其他的判决参数包括:接收功率、切换时延、最大传输速率、价格。

 

       ·得到语音业务、数据业务在判决策略时的网络收益,以及在时间段该接入哪个网络,结果分析出来合理

 

       ·得到语音业务、数据业务在RSS判决的条件下和在加入了切换判决策略的条件下切换次数的对比图,结果分析出来合理

 

       在RSS两个网络的都满足的情况下,再根据切换判决网络参数(用接收功率、最大的传输速率、时延、费用价格),以及结合切换判决的网络参数的相对权重(相对权重的分析我想采用层次分析法出来不是固定不变的某个参数。最后根据不同的业务类型(语音业务/数据业务/视频业务)依据二维代价(或收益)函数加权法来判决接入哪一个网络最合适。

 

2.仿真效果预览

1.png

2.png

3.png

4.png

3.MATLAB部分代码预览 `%移动设备必须经过的关键点

VP_ms  = [-600,300;   %A

          -290,105;   %B

           -20, 40;   %C

             0, 40;   %D

            20, 40;   %E

           250,120;   %F

           600,500]  ;%G

 

type   = 1;%业务类型:1:语音业务,2:数据业务,3:视频模型

 

%各个网络的接入,断开功率门限值

Rss_tds_in   = -55;%dbm

Rss_tds_out  = -70;%dbm

 

Rss_tdl1_in  = -50;%dbm

Rss_tdl1_out = -65;%dbm

 

Rss_tdl2_in  = -50;%dbm

Rss_tdl2_out = -65;%dbm

 

%定义用户运动的距离

Xp           = 0;

Yp           = 0;

%定义仿真时间参数

delta        = 0.01;

Time         = 300;

t            = 0;

%数组计数器

Ind          = 0;

Ind2         = 0;

 

 

%接收功率、最大的传输速率、时延、费用价格

%其中接收功率为实测

POW_tds  = 0;

Rb_tds   = 1.28;

DLY_tds  = 20;

MNY_tds  = 0.3;

 

POW_tdl1 = 0;

Rb_tdl1  = 8;

DLY_tdl1 = 40;

MNY_tdl1 = 0.2;

 

POW_tdl2 = 0;

Rb_tdl2  = 8;

DLY_tdl2 = 45;

MNY_tdl2 = 0.1;

%接收功率、最大的传输速率、时延、费用价格

% w1       = 0.2;

% w2       = 0.3;

% w3       = 0.3;

% w4       = 0.2;

 

ViewS    = 20;%减小消耗内存,采样显示结果

 

%定义分层矩阵

C        = zeros(4,4);

 

 

%%

%场景的初始化

%X,Y为MB移动的路径,随着时间的变化而X,Y的变化值,用于循环仿真使用

[X,Y] = func_Simu_Scene(P_tds,P_tdl1,P_tdl2,VP_ms,R_tds,R_tdl);

save My_Result\Simu_Scene.mat

 

%%

%主循环

%定义变量

Len       = min(Time/delta,floor((length(X)-Sp_ms)/Sp_ms));

%定义网络ID变量

ClK                       = zeros(Len,1);

IDs                       = zeros(Len,3);

RSS_tdss                  = zeros(Len,1);

RSS_tdl1s                 = zeros(Len,1);

RSS_tdl2s                 = zeros(Len,1);

Networkcontribution_tdss  = zeros(Len,1);

Networkcontribution_tdl1s = zeros(Len,1);

Networkcontribution_tdl2s = zeros(Len,1);

IDs2                      = zeros(Len,1);

while (t < Time & Ind < length(X)-Sp_ms)

   %计算时间

   t

   t    = t    + delta;

   Ind  = Ind  + Sp_ms;

   Ind2 = Ind2 + 1;

   

   %根据坐标位置,得到MB的当前区域

   Xp  = X(Ind);

   Yp  = Y(Ind);

   %根据不同的区域,确定有几个网络

   ID = func_NET_ID(Xp,Yp,P_tds,P_tdl1,P_tdl2,R_tds,R_tdl);

   

   %计算RSS值

   RSS_tds  = func_Rss_cal(Xp,Yp,Sp_ms,P_tds ,F_tds,t,Pow_tds,ISFAST);

   RSS_tdl1 = func_Rss_cal(Xp,Yp,Sp_ms,P_tdl1,F_tdl,t,Pow_tdl,ISFAST);

   RSS_tdl2 = func_Rss_cal(Xp,Yp,Sp_ms,P_tdl2,F_tdl,t,Pow_tdl,ISFAST);

   

   

   %判断每一时刻的备选网络

   %进行分层计算,这个根据业务模型的不同,而不同

   %接收功率、最大的传输速率、时延、费用价格

   %正常情况下,我们假设接收功率时变,而其他三个参数固定,从而进行实时计算网络贡献值

   %这里,分层法的解W,我参考了另外一篇的做法,比较方便

   if type == 1%语音业务,我们认为时延最重要

       %接收功率、最大的传输速率、时延、费用价格

       C=[1      5       1/7   3;

          1/5    1       1/3   1/2;

          7      3       1     2;

          1/3    2       1/2   1];

   end

   %计算权值W

   for i = 1:4

       w2(i) = (C(i,1)C(i,2) C(i,3)* C(i,4))^0.25;  

   end

   for i = 1:4

       w(i)  = w2(i)/sum(w2);  

   end   

   w1 = w(1);

   w2 = w(2);

   w3 = w(3);

   w4 = w(4);

   

   %注意,这里矩阵C的建立,具有一定的主观性,所以我就不设置了,你改下,就可以换别的业务模型进行仿真了  

   %注意,这里矩阵C的建立,具有一定的主观性,所以我就不设置了,你改下,就可以换别的业务模型进行仿真了      

 

    %计算网络贡献权值由上面的分层法计算得到

    %接收功率、最大的传输速率、时延、费用价格

    %将功率dbm转换为标准功率w

    PP_tds  = 10^(RSS_tds/20);

    PP_tdl1 = 10^(RSS_tdl1/20);

    PP_tdl2 = 10^(RSS_tdl2/20);

    

    %构成矩阵,并规划化

    Rs = [PP_tds ,Rb_tds ,DLY_tds ,MNY_tds;

          PP_tdl1,Rb_tdl1,DLY_tdl1,MNY_tdl1;

          PP_tdl2,Rb_tdl2,DLY_tdl2,MNY_tdl2];

    

    [r,c] = size(Rs);

    for j = 1:c

        Mins = min(Rs(:,j));   

        Maxs = max(Rs(:,j));

        for i = 1:r

            R(i,j) = (Rs(i,j)-Mins)/(Maxs);

        end

    end

 

    %表示一个网络

    if ID(2) == 0 & ID(3) == 0

       Networkcontribution_tds  = w1R(1,1) +w2R(1,2) +w3R(1,3) +w4R(1,4);

       Networkcontribution_tdl1 = 0;

       Networkcontribution_tdl2 = 0;

    end

    

    %表示2个网络

    if ID(2) == 0 & ID(3) > 0

       Networkcontribution_tds  = w1R(1,1) +w2R(1,2) +w3R(1,3) +w4R(1,4);

       Networkcontribution_tdl1 = 0;

       Networkcontribution_tdl2 = w1R(3,1) +w2R(3,2) +w3R(3,3) +w4R(3,4);

    end    

    if ID(3) == 0 & ID(2) > 0

       Networkcontribution_tds  = w1R(1,1) +w2R(1,2) +w3R(1,3) +w4R(1,4);

       Networkcontribution_tdl1 = w1R(2,1) +w2R(2,2) +w3R(2,3) +w4R(2,4);

       Networkcontribution_tdl2 = 0;

    end      

    

    %备选集为三个网络

    if ID(1) > 0 & ID(2) > 0 & ID(3) > 0

       Networkcontribution_tds  = w1R(1,1) +w2R(1,2) +w3R(1,3) +w4R(1,4);

       Networkcontribution_tdl1 = w1R(2,1) +w2R(2,2) +w3R(2,3) +w4R(2,4);

       Networkcontribution_tdl2 = w1R(3,1) +w2R(3,2) +w3R(3,3) +w4R(3,4);

    end        

 

    %根据网络贡献值,来选择网络

    [V,I] = max([Networkcontribution_tds,Networkcontribution_tdl1,Networkcontribution_tdl2]);

 

   %将每次循环的结果进行保存

   ClK(Ind2)       = t-delta;

   IDs(Ind2,1)     = ID(1);

   IDs(Ind2,2)     = ID(2);

   IDs(Ind2,3)     = ID(3);

   RSS_tdss(Ind2)  = RSS_tds;

   RSS_tdl1s(Ind2) = RSS_tdl1;

   RSS_tdl2s(Ind2) = RSS_tdl2;

   Networkcontribution_tdss(Ind2)  = Networkcontribution_tds;

   Networkcontribution_tdl1s(Ind2) = Networkcontribution_tdl1;

   Networkcontribution_tdl2s(Ind2) = Networkcontribution_tdl2;

   IDs2(Ind2)                      = I;

end

01_059_m`