Exemplo n.º 1
0
 public void UpdateInfo(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, IAdmissionUser user, int carrierIndex)
 {
     iSourceCarrier.IsDLLoadBalance = true;
     iTargetCarrier.IsDLLoadBalance = true;
     SimulationUser user2 = user as SimulationUser;
     SimulationCarrier carrier = iTargetCarrier as SimulationCarrier;
     AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
     AdmissionCellTag tag2 = iTargetCarrier.AdmissionCarrierTag as AdmissionCellTag;
     base.ExchangeServiceCarrier(iSourceCarrier, iTargetCarrier, user, carrierIndex);
     if (iTargetCarrier.Carrier.ID == user2.BestServiceCellBeforeHandOver.Carrier.Carrier.ID)
     {
         user2.IsEdgeUser = user2.IsEdgeUserBeforeHandOver;
     }
     else
     {
         user2.IsEdgeUser = true;
     }
     if (user.ServiceCount == 0)
     {
         admissionCarrierTag.DLHasOutThroughput += user.DlMacMinThroughputDemand;
         tag2.DLAcceptHOThroughput += user.DlMacMinThroughputDemand;
     }
     else
     {
         admissionCarrierTag.DLHasOutThroughput += user2.ActualAvgBr;
         tag2.DLAcceptHOThroughput += user2.ActualAvgBr;
     }
     tag2.DLAvailableHOThroughput = tag2.DLTotalHOThroughput - tag2.DLAcceptHOThroughput;
     base.UpdateHOUserInfo(user2, base.m_CurrentTTI);
 }
Exemplo n.º 2
0
 /// <summary>
 /// 完成用户的切换
 /// </summary>
 /// <param name="iSourceCarrier"></param>
 /// <param name="ngbCarrier"></param>
 /// <param name="lbUserList"></param>
 public void CircleUser(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier ngbCarrier, List<ISimulationUser> lbUserList)
 {
     List<ISimulationUser> list = new List<ISimulationUser>();
     list.AddRange(lbUserList);
     foreach (ISimulationUser user in list)
     {
         IAdmissionUser adUser = user as IAdmissionUser;
         AdmissionCellTag admissionSourceCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
         if (admissionSourceCarrierTag.ULHasOutThroughput >= admissionSourceCarrierTag.ULSourceOutThroughput)
         {
             break;
         }
         AdmissionCellTag ngbCarrierAdTag = ngbCarrier.AdmissionCarrierTag as AdmissionCellTag;
         //  if (ngbCarrierAdTag.ULAcceptHOThroughput > ngbCarrierAdTag.ULTotalHOThroughput)
         //有0>0的情况
         if (ngbCarrierAdTag.ULAcceptHOThroughput >= ngbCarrierAdTag.ULTotalHOThroughput)
         {
             break;
         }
         //该目标小区在该用户的邻小区列表中的编号
         int carrierIndex = 0;
         if (base.IsRSRPSatisfy(user, ngbCarrier, out carrierIndex) && this.IsNgbAcceptUser(adUser, ngbCarrier))
         {
             this.UpdateInfo(iSourceCarrier, ngbCarrier, adUser, carrierIndex);
             this.UpdateList(iSourceCarrier, ngbCarrier, user);
             lbUserList.Remove(user);
         }
     }
 }
Exemplo n.º 3
0
 public override void CalculateSourceOutThroughput(IAdmissionCarrier iAdmissionCarrier)
 {
     SimulationCarrier carrier = iAdmissionCarrier as SimulationCarrier;
     float num = carrier.Carrier.UlTargetLoad * base.m_LBThresholdParam.MlbRationTh;
     double num2 = carrier.UlActualTh * (1f - (num / carrier.UlActualLoad));
     AdmissionCellTag admissionCarrierTag = iAdmissionCarrier.AdmissionCarrierTag as AdmissionCellTag;
     admissionCarrierTag.ULSourceOutThroughput = 0.5 * num2;
 }
Exemplo n.º 4
0
 public override bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier)
 {
     AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag;
     bool flag = false;
     double num = admissionCarrierTag.DLAcceptHOThroughput + user.DlMacMinThroughputDemand;
     if (num <= admissionCarrierTag.DLTotalHOThroughput)
     {
         flag = this.IsNgbSatisAcceptUser(user, carrier);
     }
     return flag;
 }
Exemplo n.º 5
0
        /// <summary>
        /// 负载均衡
        /// </summary>
        /// <param name="iSimulationCarrierList"></param>
        /// <param name="currentTTI"></param>
        /// <param name="iAdmissionCarrier"></param>
        private void LoadBanlance(List<ISimulationCarrier> iSimulationCarrierList, int currentTTI, IAdmissionCarrier iAdmissionCarrier)
        {
            bool a = SimulationConstant.IS_LOAD_BANLANCE_ON;
            bool b = iAdmissionCarrier.UlActualLoad > (iAdmissionCarrier.Carrier.UlTargetLoad * SimulationConstant.MLBRatioTh);
            bool c = currentTTI >= this.m_LBThresholdParam.FirstLbTime;
            bool d = ((currentTTI - this.m_LBThresholdParam.FirstLbTime) % this.m_LBThresholdParam.LbPeriod) == 0;

            if ((a && b) && (c && d))
            {
                new UlLoadBalancingService(currentTTI, this.m_LBThresholdParam).LoadBalanceingProcess(iAdmissionCarrier, iSimulationCarrierList);
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// 执行切换(由负载均衡调用)
 /// </summary>
 /// <param name="iSourceCarrier"></param>
 /// <param name="ngbCarrierList">目标小区已排序</param>
 /// <param name="lbUserList">负载均衡用户已排序</param>
 public void HandOverProcess(IAdmissionCarrier iSourceCarrier, List<ISimulationCarrier> ngbCarrierList, List<ISimulationUser> lbUserList)
 {
     foreach (IAdmissionCarrier carrier in ngbCarrierList)
     {
         AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
         if (admissionCarrierTag.ULHasOutThroughput >= admissionCarrierTag.ULSourceOutThroughput)
         {
             break;
         }
         this.CircleUser(iSourceCarrier, carrier, lbUserList);
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// 判断目标邻小区是否可以接受预切换过来的用户
 /// </summary>
 /// <param name="user"></param>
 /// <param name="carrier"></param>
 /// <returns></returns>
 public override bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier)
 {
     AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag;
     bool flag = false;
     UnionPsService unionPsService = SimulationTools.GetUnionPsService(user.LTEUser.Service);
     double num = admissionCarrierTag.ULAcceptHOThroughput + unionPsService.UlMinThroughputDemand;
     if (num <= admissionCarrierTag.ULTotalHOThroughput)
     {
         flag = this.IsNgbSatisAcceptUser(carrier);
     }
     return flag;
 }
Exemplo n.º 8
0
 /// <summary>
 /// 计算边缘负载
 /// </summary>
 /// <param name="iAdmissionCarrier"></param>
 /// <returns></returns>
 public override float CalculateEdgeLoad(IAdmissionCarrier iAdmissionCarrier)
 {
     int num2 = 0;
     foreach (IAdmissionUser user in iAdmissionCarrier.UlUserList)
     {
         if (user.IsEdgeUser)
         {
             num2 += user.RbList.Count;
         }
     }
     return (((float) num2) / (iAdmissionCarrier.BandWidthRbNum * iAdmissionCarrier.Carrier.UlTargetLoad));
 }
Exemplo n.º 9
0
 /// <summary>
 /// 若该小区拥有邻小区,则获得邻小区列表
 /// </summary>
 /// <param name="iLoadBalanceCarrier"></param>
 /// <param name="allSimulationCarrierlist"></param>
 /// <returns></returns>
 private List<ISimulationCarrier> GetNgbFromPlan(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist)
 {
     List<ISimulationCarrier> list = new List<ISimulationCarrier>();
     foreach (IANeighbours neighbours in iLoadBalanceCarrier.Carrier.InterNeighbours)
     {
         list.Add(this.FindCarrierInList(neighbours, allSimulationCarrierlist));
     }
     foreach (IANeighbours neighbours in iLoadBalanceCarrier.Carrier.IntraNeighbours)
     {
         list.Add(this.FindCarrierInList(neighbours, allSimulationCarrierlist));
     }
     return list;
 }
Exemplo n.º 10
0
 /// <summary>
 /// 计算邻小区可接受的最大的切换过来的吞吐量
 /// </summary>
 /// <param name="iAdmissionCarrier"></param>
 /// <param name="currentTTI"></param>
 public override void CalculateNgbMaxAcceptThroughput(IAdmissionCarrier iAdmissionCarrier, int currentTTI)
 {
     AdmissionCellTag admissionCarrierTag = iAdmissionCarrier.AdmissionCarrierTag as AdmissionCellTag;
     SimulationCarrier carrier = iAdmissionCarrier as SimulationCarrier;
     float num = (carrier.UlActualTh * iAdmissionCarrier.Carrier.UlTargetLoad) / carrier.UlActualLoad;
     //下面为什么还要乘以0.1f
     float num2 = 0.1f * (num - carrier.UlActualTh);
     admissionCarrierTag.ULTotalHOThroughput = num2;
     if (carrier.UlActualLoad <= 0.100001)
     {
         admissionCarrierTag.ULTotalHOThroughput = double.MaxValue;
     }
 }
Exemplo n.º 11
0
 /// <summary>
 /// 执行负载均衡 
 /// </summary>
 /// <param name="iLoadBalanceCarrier"></param>
 /// <param name="allSimulationCarrierlist"></param>
 public void DoLoadBalance(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist)
 {
     //邻小区列表
     this.m_NgbList = this.GetNgbList(iLoadBalanceCarrier, allSimulationCarrierlist);
     this.GetTargetNgb(iLoadBalanceCarrier, this.m_NgbList);
     if (this.m_NgbList.Count != 0)
     {
         this.GetLBUser(iLoadBalanceCarrier, this.m_LBUserList);
         if (this.m_LBUserList.Count != 0)
         {
             this.CalculateSourceOutThroughput(iLoadBalanceCarrier);
             this.DoHandOver(iLoadBalanceCarrier, this.m_NgbList, this.m_LBUserList);
         }
     }
 }
Exemplo n.º 12
0
 public override void LoadControlProcess(IAdmissionCarrier iLoadControlCarrier)
 {
     bool flag2 = true;
     bool flag3 = true;
     new SatisficationCalculate(base.m_CurrentTTI, base.m_SatisficationThParam).GetUsers(iLoadControlCarrier.DlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist);
     AdmissionCellTag admissionCarrierTag = iLoadControlCarrier.AdmissionCarrierTag as AdmissionCellTag;
     if (admissionCarrierTag.DLGBRSatisfication < base.m_LCThresholdParam.LcGBRSatisfyTh)
     {
         this.ProcessWhenGBRNotSatisfy(this.m_GBRUserlist, iLoadControlCarrier);
     }
     flag2 = admissionCarrierTag.DLVoiceSatisfication >= base.m_LCThresholdParam.LcVoiceSatisfyTh;
     flag3 = admissionCarrierTag.DLNonGBRSatisfication >= base.m_LCThresholdParam.LcNonGBRSatisfyTh;
     if (!(flag2 && flag3))
     {
         this.ProcessWhenGBRSatisfy(this.m_GBRUserlist, iLoadControlCarrier);
     }
 }
Exemplo n.º 13
0
 public void CalculateServiceSatisfy(IAdmissionCarrier carrier, int currentTTI)
 {
     this.m_GBRUserlist = new List<ISimulationUser>();
     this.m_NonGBRUserlist = new List<ISimulationUser>();
     SatisficationCalculate calculate = new SatisficationCalculate(currentTTI, this.m_SatisficationThParam);
     AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag;
     calculate.GetUsers(carrier.DlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist);
     admissionCarrierTag.DLGBRSatisfication = calculate.DLSatisCalGBR(this.m_GBRUserlist, SimulationConstant.MinNumOfGBR);
     admissionCarrierTag.DLNonGBRSatisfication = calculate.DLSatisCalGBR(this.m_NonGBRUserlist, SimulationConstant.MinNumOfNonGBR);
     if (SimulationConstant.IS_CACULATE_SQS_SCORE)
     {
         admissionCarrierTag.DLVoiceSatisfication = calculate.VoiceSatisCalculateSQS(carrier.DlVoiceWaitUserList);
     }
     else
     {
         admissionCarrierTag.DLVoiceSatisfication = calculate.DLSatisCalGBR(carrier.DlVoiceWaitUserList, SimulationConstant.MinNumOfVoice);
     }
 }
Exemplo n.º 14
0
 /// <summary>
 /// 交换服务小区
 /// </summary>
 /// <param name="iSourceCarrier"></param>
 /// <param name="iTargetCarrier"></param>
 /// <param name="user"></param>
 /// <param name="targetCarrierIndex"></param>
 public void ExchangeServiceCarrier(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, 
     IAdmissionUser user, int targetCarrierIndex)
 {
     SimulationUser simulationUser = user as SimulationUser;
     if (iSourceCarrier.Carrier.ID.Equals(simulationUser.BestServiceCarrier.Carrier.ID))
     {
         simulationUser.CarrierListInComputeArea[0] = simulationUser.CarrierListInComputeArea[targetCarrierIndex];
         simulationUser.CarrierListInComputeArea[1] = simulationUser.BestServiceCellBeforeHandOver;
         if (targetCarrierIndex != 1)
         {
             simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.StroNbrBeforeHandOver;
         }
     }
     else if (iSourceCarrier.Carrier.ID.Equals(simulationUser.StroNbrBeforeHandOver.Carrier.Carrier.ID))
     { 
         simulationUser.CarrierListInComputeArea[0] = simulationUser.CarrierListInComputeArea[targetCarrierIndex];
         simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.StroNbrBeforeHandOver;
     }
     else if (iTargetCarrier.Carrier.ID.Equals(simulationUser.BestServiceCarrier.Carrier.ID))
     {
         int carrierIndex = 0;
         short iD = simulationUser.StroNbrBeforeHandOver.Carrier.Carrier.ID;
         this.IsCarrierInUserNgbList(simulationUser, iD, out carrierIndex);
         simulationUser.CarrierListInComputeArea[carrierIndex] = simulationUser.CarrierListInComputeArea[0];
         simulationUser.CarrierListInComputeArea[0] = simulationUser.BestServiceCellBeforeHandOver;
         simulationUser.CarrierListInComputeArea[1] = simulationUser.StroNbrBeforeHandOver;
     }
     else
     {
         CarrierTotalLoss loss = simulationUser.CarrierListInComputeArea[targetCarrierIndex];
         simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.CarrierListInComputeArea[0];
         simulationUser.CarrierListInComputeArea[0] = loss;
     }
     simulationUser.DlRsrp = simulationUser.CarrierListInComputeArea[0].Carrier.RSPower - 
         SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[0].DlTotalLoss);
     simulationUser.UlRsLevel = 
         ((simulationUser.LTEUser.Terminal.NetTerminalList[0] as LTETerminal).MaxTxPower - SimulationTools.ConvertLineTodB(12f)) 
         - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[0].UlTotalLoss);
     simulationUser.SfSbStroRsrp = simulationUser.CarrierListInComputeArea[1].Carrier.RSPower
         - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[1].DlTotalLoss);
 }
Exemplo n.º 15
0
 public void CircleUser(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier ngbCarrier, List<ISimulationUser> lbUserList)
 {
     List<ISimulationUser> list = new List<ISimulationUser>();
     list.AddRange(lbUserList);
     foreach (ISimulationUser user in list)
     {
         IAdmissionUser user2 = user as IAdmissionUser;
         AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
         if (admissionCarrierTag.DLHasOutThroughput >= admissionCarrierTag.DLSourceOutThroughput)
         {
             break;
         }
         AdmissionCellTag tag2 = ngbCarrier.AdmissionCarrierTag as AdmissionCellTag;
         int carrierIndex = 0;
         if (base.IsRSRPSatisfy(user, ngbCarrier, out carrierIndex) && this.IsNgbAcceptUser(user2, ngbCarrier))
         {
             this.UpdateInfo(iSourceCarrier, ngbCarrier, user2, carrierIndex);
             this.UpdateList(iSourceCarrier, ngbCarrier, user);
             lbUserList.Remove(user);
         }
     }
 }
Exemplo n.º 16
0
 public override void ProcessWhenGBRNotSatisfy(List<ISimulationUser> gbrUserList, IAdmissionCarrier iAdmissionCarrier)
 {
     if (SimulationConstant.IS_SLOW_DOWN_ON)
     {
         this.DoSlowDownRate((SimulationCarrier) iAdmissionCarrier);
     }
     if (SimulationConstant.IS_REALEASE_USER_ON)
     {
         int num = iAdmissionCarrier.DlVoiceWaitUserList.Count + iAdmissionCarrier.DlDataWaitUserList.Count;
         if (num > iAdmissionCarrier.AlgParameter.DlMaxSchUser)
         {
             if (((iAdmissionCarrier as SimulationCarrier).DlGBRRBRatio > base.m_LCThresholdParam.LcGBRRbTh) && SimulationConstant.IS_LIMIT_GBRUSER_RATIO_ON)
             {
                 base.ReleaseGBRUser(iAdmissionCarrier.DlDataWaitUserList, gbrUserList, iAdmissionCarrier.OffLineUserList);
             }
             else
             {
                 base.ReleaseUser(iAdmissionCarrier.DlVoiceWaitUserList, iAdmissionCarrier.DlDataWaitUserList, iAdmissionCarrier.OffLineUserList);
             }
         }
     }
 }
Exemplo n.º 17
0
        /// <summary>
        /// 计算每个小区的上行服务的满意度
        /// </summary>
        /// <param name="carrier"></param>
        /// <param name="currentTTI"></param>
        public void CalculateServiceSatisfy(IAdmissionCarrier carrier, int currentTTI)
        {
            this.m_GBRUserlist = new List<ISimulationUser>();
            this.m_NonGBRUserlist = new List<ISimulationUser>();
            SatisficationCalculate calculate = new SatisficationCalculate(currentTTI, this.m_SatisficationThParam);
            AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag;
            calculate.GetUsers(carrier.UlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist);
            //计算小区的上行数据用户的整体满意度
            admissionCarrierTag.ULGBRSatisfication = calculate.ULSatisCalGBR(this.m_GBRUserlist, SimulationConstant.MinNumOfGBR);
            admissionCarrierTag.ULNonGBRSatisfication = calculate.ULSatisCalGBR(this.m_NonGBRUserlist, SimulationConstant.MinNumOfNonGBR);

            //SQS_SCORE这是一个什么score,SimulationConstant.IS_CACULATE_SQS_SCORE这个参数从哪读的,暂时设为true
            //计算小区的上行voice用户的整体满意度
            if (true)//SimulationConstant.IS_CACULATE_SQS_SCORE)
            {
                admissionCarrierTag.ULVoiceSatisfication = calculate.VoiceSatisCalculateSQS(carrier.UlVoiceWaitUserList);
            }
            else
            {
                admissionCarrierTag.ULVoiceSatisfication = calculate.ULSatisCalGBR(carrier.UlVoiceWaitUserList, SimulationConstant.MinNumOfVoice);
            }
        }
Exemplo n.º 18
0
 /// <summary>
 /// 负载控制
 /// </summary>
 /// <param name="currentTTI"></param>
 /// <param name="iAdmissionCarrier"></param>
 private void LoadControl(int currentTTI, IAdmissionCarrier iAdmissionCarrier)
 {
     bool a=(iAdmissionCarrier.DlActualLoad > (iAdmissionCarrier.Carrier.UlTargetLoad * SimulationConstant.LCRatioTh));
     bool b=(((currentTTI - this.m_LCTHresholdParam.FirstLCTime) % this.m_LCTHresholdParam.LcPeriod) == 0);
     bool c=SimulationConstant.IS_LOAD_CONTROL_ON;
     if ((true && a) && ((currentTTI >= this.m_LCTHresholdParam.FirstLCTime) &&b ))
     {
         new UlLoadControlService(currentTTI, this.m_LCTHresholdParam, this.m_SatisficationThParam).LoadControlProcess(iAdmissionCarrier);
     }
 }
Exemplo n.º 19
0
 public bool IsNgbSatisAcceptUser(IAdmissionCarrier carrier)
 {
     AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag;
     return (((admissionCarrierTag.ULVoiceSatisfication > SimulationConstant.LBVoiceSatisfyTh)
         && (admissionCarrierTag.ULGBRSatisfication > SimulationConstant.LBGBRSatisfyTh))
         && (admissionCarrierTag.ULNonGBRSatisfication > SimulationConstant.LBNonGBRSatisfyTh));
 }
Exemplo n.º 20
0
 //获得载波的邻区列表,若没有IntraNeighbours和InterNeighbours则为计算区域内的载波,否者为IntraNeighbours和InterNeighbours中所有LTE载波
 public List<ISimulationCarrier> GetNgbList(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist)
 {
     List<ISimulationCarrier> list = new List<ISimulationCarrier>();
     //如果小区的邻小区列表为空,则把该小区的计算区域内的小区算作他的邻小区(邻小区就是从CarrierListInComputeArea挑出来的)
     if ((iLoadBalanceCarrier.Carrier.IntraNeighbours.Count == 0) && (iLoadBalanceCarrier.Carrier.InterNeighbours.Count == 0))
     {
         SimulationCarrier carrier = iLoadBalanceCarrier as SimulationCarrier;
         list.AddRange(carrier.CarrierListInComputeArea);
         return list;
     }
     list.AddRange(this.GetNgbFromPlan(iLoadBalanceCarrier, allSimulationCarrierlist));
     return list;
 }
Exemplo n.º 21
0
 public abstract bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier);
Exemplo n.º 22
0
 /// <summary>
 /// 更新原小区和目标小区的list,完成用户的切换
 /// </summary>
 /// <param name="iSourceCarrier"></param>
 /// <param name="iTargetCarrier"></param>
 /// <param name="user"></param>
 public void UpdateList(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, ISimulationUser user)
 {
     if ((user.LTEUser.Service as UnionPsService).Type == ServiceType.Voice)
     {
         iTargetCarrier.UlUserList.Add(user);
         iTargetCarrier.ULHandOverVoiceUserList.Add(user);
         iSourceCarrier.UlUserList.Remove(user);
         iSourceCarrier.UlVoiceWaitUserList.Remove(user);
     }
     else
     {
         iTargetCarrier.UlUserList.Add(user);
         iTargetCarrier.ULHandOverDataUserList.Add(user);
         iSourceCarrier.UlUserList.Remove(user);
         iSourceCarrier.UlDataWaitUserList.Remove(user);
     }
 }
Exemplo n.º 23
0
        /// <summary>
        /// 更新信息
        /// </summary>
        /// <param name="iSourceCarrier"></param>
        /// <param name="iTargetCarrier"></param>
        /// <param name="user"></param>
        /// <param name="carrierIndex"></param>
        public void UpdateInfo(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, IAdmissionUser user, int carrierIndex)
        {
            iSourceCarrier.IsULLoadBalance = true;
            iTargetCarrier.IsULLoadBalance = true;
            SimulationUser simUser = user as SimulationUser;
            SimulationCarrier targetCarrier = iTargetCarrier as SimulationCarrier;
            CarrierTotalLoss loss = simUser.CarrierListInComputeArea[0];

            base.ExchangeServiceCarrier(iSourceCarrier, iTargetCarrier, user, carrierIndex);

            if (iTargetCarrier.Carrier.ID == simUser.BestServiceCarrier.Carrier.ID)
            {
                simUser.IsEdgeUser = simUser.IsEdgeUserBeforeHandOver;
            }
            else
            {
                simUser.IsEdgeUser = true;
            }
            AdmissionCellTag admissionSourceCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
            AdmissionCellTag targetCarrierTag = iTargetCarrier.AdmissionCarrierTag as AdmissionCellTag;
            if (user.ServiceCount == 0)
            {
                admissionSourceCarrierTag.ULHasOutThroughput += user.UlMacMinThroughputDemand;
                targetCarrierTag.ULAcceptHOThroughput += user.UlMacMinThroughputDemand;
            }
            else
            {
                admissionSourceCarrierTag.ULHasOutThroughput += simUser.ActualAvgBr;
                targetCarrierTag.ULAcceptHOThroughput += simUser.ActualAvgBr;
            }
            targetCarrierTag.ULAvailableHOThroughput = targetCarrierTag.ULTotalHOThroughput - targetCarrierTag.ULAcceptHOThroughput;
            base.UpdateHOUserInfo(simUser, base.m_CurrentTTI);
        }
Exemplo n.º 24
0
 /// <summary>
 /// 判断该用户对该小区的参考信号的接收功率是否满意
 /// </summary>
 /// <param name="user"></param>
 /// <param name="carrier"></param>
 /// <param name="carrierIndex"></param>
 /// <returns></returns>
 public bool IsRSRPSatisfy(ISimulationUser user, IAdmissionCarrier carrier, out int carrierIndex)
 {
     carrierIndex = 0;
     SimulationUser simulationUser = user as SimulationUser;
     if (this.IsCarrierInUserNgbList(simulationUser, carrier.Carrier.ID, out carrierIndex))
     {
         float dlRSRP = carrier.RSPower - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[carrierIndex].DlTotalLoss);
         float uLRSRP = ((simulationUser.LTEUser.Terminal.NetTerminalList[0] as LTETerminal).MaxTxPower - SimulationTools.ConvertLineTodB(12f)) - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[carrierIndex].UlTotalLoss);
         bool isDlRSRPOK = dlRSRP >= SimulationConstant.DLRSRP_ACCESS_THRESHOLD;
         bool isUlRSRPOK = uLRSRP >= SimulationConstant.ULRSRP_ACCESS_THRESHOLD;
         return (isDlRSRPOK && isUlRSRPOK);
     }
     return false;
 }
Exemplo n.º 25
0
        public void MyTestInitialize()
        {
            m_DlHOService = new DlHandOverService(m_CurretTti,m_Sfth );
            m_ISourceCarrier = new SimulationCarrier();
            m_ITargetCarrier = new SimulationCarrier();
            m_NgbCaiirer = new SimulationCarrier();
            m_Carrier = new SimulationCarrier();
            m_User = new SimulationUser();
            m_User.LTEUser = new User();
            Service serv = new UnionPsService();
            m_User.LTEUser.Service = serv;
            m_NgbCarrierList = new List<ISimulationCarrier>();

            m_ISourceCarrier.AdmissionCarrierTag = new AdmissionCellTag();
            AdmissionCellTag adCellTag = m_ISourceCarrier.AdmissionCarrierTag as AdmissionCellTag;
            adCellTag.ULSourceOutThroughput = 100;
            m_Carrier.AdmissionCarrierTag = new AdmissionCellTag();


            m_NgbCaiirer.AdmissionCarrierTag = new AdmissionCellTag();
            AdmissionCellTag ngbCellTag = m_NgbCaiirer.AdmissionCarrierTag as AdmissionCellTag;
            ngbCellTag.ULTotalHOThroughput = 50;
            SimulationCarrier temp = m_NgbCaiirer as SimulationCarrier;
            temp.Carrier = new LTECell();

            m_LbUserList = new List<ISimulationUser>();
            SimulationUser user1 = new SimulationUser();
            SimulationUser user2 = new SimulationUser();

            m_LbUserList.Add(user1);
            m_LbUserList.Add(user2);
            m_NgbCarrierList.Add(m_NgbCaiirer);

            m_DlHOVoiceUserList = new List<ISimulationUser>();
            SimulationUser VUser1 = new SimulationUser();
            SimulationUser VUser2 = new SimulationUser();
            m_DlHOVoiceUserList.Add(VUser1);
            m_DlHOVoiceUserList.Add(VUser2);

            CarrierTotalLoss a=new CarrierTotalLoss ();
            
            SimulationCarrier carrier = new SimulationCarrier();
            carrier.IsLTECell = true;
            LTECell lteCell = new LTECell();
            lteCell.RSPower = 15f;
            carrier.Carrier = lteCell;
            CarrierTotalLoss b = new CarrierTotalLoss(carrier, 100f, 100f);
            //SimulationCarrier carrier1 = new SimulationCarrier();
            //b.Carrier = carrier1;
            List<CarrierTotalLoss> listCarrier = new List<CarrierTotalLoss>();
            listCarrier.Add(a);
            listCarrier.Add(b);
            a.Carrier = new SimulationCarrier();
            carrier.IsLTECell = false;
            RelayCell relayCell1 = new RelayCell();
            relayCell1.RSPower = 16f;
            a.Carrier.Carrier = relayCell1;
            b.Carrier = new SimulationCarrier();
            carrier.IsLTECell = false;
            RelayCell relayCell2 = new RelayCell();
            relayCell1.RSPower = 17f;
            b.Carrier.Carrier = relayCell2;
            m_User.BestServiceCellBeforeHandOver = a;
            m_User.StroNbrBeforeHandOver = b;
            user1.BestServiceCellBeforeHandOver = a;
            user1.StroNbrBeforeHandOver = b;
            user2.BestServiceCellBeforeHandOver = a;
            user2.StroNbrBeforeHandOver = b;

            

            user1.CarrierListInComputeArea = listCarrier.ToArray();
            user2.CarrierListInComputeArea = listCarrier.ToArray();
            m_User.CarrierListInComputeArea = listCarrier.ToArray();

            


            List<ISimulationUser> list = new List<ISimulationUser>();
            list.AddRange(m_LbUserList);

            RelayCell relaycarrier = new RelayCell();

            ((SimulationCarrier)m_NgbCaiirer).Carrier = relaycarrier;          
            ((SimulationCarrier)m_ISourceCarrier).Carrier = relaycarrier;
            ((SimulationCarrier)m_ITargetCarrier).Carrier = relaycarrier;
            
            user1.CarrierListInComputeArea[0].Carrier = carrier;
            user1.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier;
            user2.CarrierListInComputeArea[0].Carrier = carrier;
            user2.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier;
            m_User.CarrierListInComputeArea[0].Carrier = carrier;
            m_User.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier;
            user1.CarrierListInComputeArea[1].Carrier = carrier;
            user1.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier;
            user2.CarrierListInComputeArea[1].Carrier = carrier;
            user2.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier;
            m_User.CarrierListInComputeArea[1].Carrier = carrier;
            m_User.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier;
            //m_User.StroNbrBeforeHandOver.Carrier = carrier;
            relaycarrier.RSPower = 100;



            //m_User.StroNbrBeforeHandOver.Carrier = carrier;
            //m_User.BestServiceCellBeforeHandOver.Carrier = carrier;




            Huawei.UNet.Traffic.Map.Interface.User lteuser = new Huawei.UNet.Traffic.Map.Interface.User();
            user1.LTEUser = lteuser;
            user1.ID = 1;

            Huawei.UNet.Traffic.Interface.Terminal terminal = new Huawei.UNet.Traffic.Interface.Terminal();
            user1.LTEUser.Terminal = terminal;

            List<Huawei.UNet.Traffic.Interface.NetworkTerminal> netterminallist = new List<NetworkTerminal>();
            NetworkTerminal networkTerminal = new NetworkTerminal();
            LTETerminal lteterminal = new LTETerminal();
            netterminallist.Add(lteterminal);
            user1.LTEUser.Terminal.NetTerminalList = netterminallist;


            user1.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(user1.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(user1.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService());


            user2.LTEUser = lteuser;
            user2.LTEUser.Terminal = terminal;
            user2.ID = 2;
            netterminallist.Add(lteterminal);
            user2.LTEUser.Terminal.NetTerminalList = netterminallist;
            user2.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(user2.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(user2.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService());

            m_User.LTEUser = lteuser;
            m_User.ID = 0;
            m_User.LTEUser.Terminal = terminal;
            netterminallist.Add(lteterminal);
            m_User.LTEUser.Terminal.NetTerminalList = netterminallist;
            m_User.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(m_User.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>();
            ((Huawei.UNet.Traffic.Interface.UnionPsService)(m_User.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService());

            //Service service = new Service();
            //UnionPsService psservice = SimulationTools.GetUnionPsService(service);

            //psservice.DlOffset = 0;
            //psservice.DlTxEff = 1;
            //psservice.DlMinThroughputDemand = 0;
            //user1.LTEUser.Service = psservice;

        }
Exemplo n.º 26
0
 private void LoadBanlance(List<ISimulationCarrier> iSimulationCarrierList, int currentTTI, IAdmissionCarrier iAdmissionCarrier)
 {
     if (SimulationConstant.IS_LOAD_BANLANCE_ON && ((currentTTI >= this.m_LBThresholdParam.FirstLbTime) && (((currentTTI - this.m_LBThresholdParam.FirstLbTime) % this.m_LBThresholdParam.LbPeriod) == 0)))
     {
         new DlLoadBalancingService(currentTTI, this.m_LBThresholdParam).LoadBalanceingProcess(iAdmissionCarrier, iSimulationCarrierList);
     }
 }
Exemplo n.º 27
0
 public abstract void ProcessWhenGBRSatisfy(List<ISimulationUser> gbrUserList, IAdmissionCarrier iAdmissionCarrier);
Exemplo n.º 28
0
 private void LoadControl(int currentTTI, IAdmissionCarrier iAdmissionCarrier)
 {
     if (SimulationConstant.IS_LOAD_CONTROL_ON && ((currentTTI >= this.m_LCTHresholdParam.FirstLCTime) && (((currentTTI - this.m_LCTHresholdParam.FirstLCTime) % this.m_LCTHresholdParam.LcPeriod) == 0)))
     {
         new DlLoadControlService(currentTTI, this.m_LCTHresholdParam, this.m_SatisficationThParam).LoadControlProcess(iAdmissionCarrier);
     }
 }
Exemplo n.º 29
0
 private int CalculateUlUserNum(IAdmissionCarrier iAdmissionCarrier)
 {
     return (iAdmissionCarrier.UlDataWaitUserList.Count + iAdmissionCarrier.UlVoiceWaitUserList.Count);
 }
Exemplo n.º 30
0
 public abstract void LoadControlProcess(IAdmissionCarrier iLoadControlCarrier);