예제 #1
0
 public List<StatSimuCarrierResult> Statistic(int beginStaTime, int endStaTime, List<ISimulationCarrier> simulationCarrierList, OtherSubSysInterface subSysInterface)
 {
     List<StatSimuCarrierResult> list = new List<StatSimuCarrierResult>();
     StaSimulationUser statisticProcessor = new StaSimulationUser();
     foreach (SimulationCarrier carrier in simulationCarrierList)
     {
         int num = (endStaTime - beginStaTime) + 1;
         StatSimuCarrierResult staSimulationCarrierResult = new StatSimuCarrierResult();
         staSimulationCarrierResult.TxPower = SimulationTools.ConvertLineTodB(this.CalculateAvgTxPower(beginStaTime, endStaTime, carrier));
         staSimulationCarrierResult.UlScheduleUserNum = ((float) carrier.UlWarmupTotalScheduleUserNum) / ((float) ((endStaTime - beginStaTime) + 1));
         staSimulationCarrierResult.UlAvgVMIMOUsedRbRate = (((float) carrier.UlWarmupTotalVMIMOUsedRB) / ((float) num)) / ((float) carrier.PuschRbNum);
         staSimulationCarrierResult.UlIoT = carrier.UlIoT;
         staSimulationCarrierResult.UlAvgUsedRbNum = this.CalculateUlAvgUsedRbNum(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.DlAvgUsedRbNum = this.CalculateDlAvgUsedRbNum(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.UlAvgLoad = this.CalculateUlAvgLoad(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.DlAvgLoad = this.CalculateDlAvgLoad(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.UlAvgThroughput = this.CalculateUlCarrierAvgThroughput(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.DlAvgThroughput = this.CalculateDlCarrierThroughput(beginStaTime, endStaTime, carrier);
         staSimulationCarrierResult.UlAppAvgThroughput = carrier.WarmupTotalTh.UlAppThroughput / ((float) num);
         staSimulationCarrierResult.DlAppAvgThroughput = carrier.WarmupTotalTh.DlAppThroughput / ((float) num);
         staSimulationCarrierResult.DlPeakThroughput = carrier.CarrierPeakThr.DlMacThroughput;
         staSimulationCarrierResult.UlPeakThroughput = carrier.CarrierPeakThr.UlMacThroughput;
         staSimulationCarrierResult.DlPeakAplThroughput = carrier.CarrierPeakThr.DlAppThroughput;
         staSimulationCarrierResult.UlPeakAplThroughput = carrier.CarrierPeakThr.UlAppThroughput;
         staSimulationCarrierResult.ServicePeakThDic = carrier.ServicePeakThDic;
         staSimulationCarrierResult.ServiceAvgThDic.Clear();
         foreach (string str in carrier.ServiceWarmUpTotalThDic.Keys)
         {
             float ulmac = carrier.ServiceWarmUpTotalThDic[str].UlMacThroughput / ((float) num);
             float dlmac = carrier.ServiceWarmUpTotalThDic[str].DlMacThroughput / ((float) num);
             float ulapl = carrier.ServiceWarmUpTotalThDic[str].UlAppThroughput / ((float) num);
             float dlapl = carrier.ServiceWarmUpTotalThDic[str].DlAppThroughput / ((float) num);
             ThroughputGroup group = new ThroughputGroup(ulmac, dlmac, ulapl, dlapl);
             staSimulationCarrierResult.ServiceAvgThDic.Add(str, group);
         }
         staSimulationCarrierResult.UlScheduleTh = (carrier.UlScheduleTh * 1000f) / ((float) ((endStaTime - beginStaTime) + 1));
         staSimulationCarrierResult.CarrierID = carrier.Carrier.ID;
         staSimulationCarrierResult.CellName = SimulationTools.GetTransName(carrier);
         staSimulationCarrierResult.CarrierName = carrier.Carrier.Name;
         List<StatSimuUserResult> userResult = new List<StatSimuUserResult>();
         this.UpdateUserFailReason(carrier.DlUserList);
         this.UpdateUserFailReason(carrier.UlUserList);
         this.StatisticUsers(carrier.DlUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface);
         this.StatisticUsers(carrier.UlUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface);
         this.StatisticUsers(carrier.FailUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface);
         this.StatisticUsers(carrier.UlRsSinrFailUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface);
         staSimulationCarrierResult.StatSimuUserResultList = userResult;
         this.StatisticStateUserNum(userResult, staSimulationCarrierResult);
         carrier.count = count;
         list.Add(staSimulationCarrierResult);
     }
     return list;
 }
예제 #2
0
 private void CalcServiceThroughput(StatSimuCarrierResult carrierResult, Dictionary<string, ServiceThroughput> ServiceThroughputDic)
 {
     foreach (StatSimuUserResult result in carrierResult.StatSimuUserResultList)
     {
         float ulAvgThroughput;
         float ulAppAvgThroughput;
         float dlAvgThroughput;
         float dlAppAvgThroughput;
         ServiceThroughput throughput;
         if (result.LTEUser.LinkType == LinkType.Uplink)
         {
             ulAvgThroughput = result.UlAvgThroughput;
             ulAppAvgThroughput = result.UlAppAvgThroughput;
             dlAvgThroughput = 0f;
             dlAppAvgThroughput = 0f;
         }
         else
         {
             ulAvgThroughput = 0f;
             ulAppAvgThroughput = 0f;
             dlAvgThroughput = result.DlAvgThroughput;
             dlAppAvgThroughput = result.DlAppAvgThroughput;
         }
         if (!ServiceThroughputDic.TryGetValue(result.LTEUser.Service.Name, out throughput))
         {
             throughput = new ServiceThroughput(ulAvgThroughput, ulAppAvgThroughput, dlAvgThroughput, dlAppAvgThroughput);
             ServiceThroughputDic.Add(result.LTEUser.Service.Name, throughput);
         }
         else
         {
             throughput.UlThroughput += ulAvgThroughput;
             throughput.UlAppThroughput += ulAppAvgThroughput;
             throughput.DlThroughput += dlAvgThroughput;
             throughput.DlAppThroughput += dlAppAvgThroughput;
         }
     }
 }
예제 #3
0
 private void StatisticStateUserNum(List<StatSimuUserResult> users, StatSimuCarrierResult staSimulationCarrierResult)
 {
     foreach (StatSimuUserResult result in users)
     {
         this.StatisticStateUserNum(result, staSimulationCarrierResult);
     }
 }
예제 #4
0
 private void StatisticStateUserNum(StatSimuUserResult user, StatSimuCarrierResult staSimulationCarrierResult)
 {
     FailReason failReason = user.FailReason;
     if (failReason == FailReason.Satisfied)
     {
         staSimulationCarrierResult.SatisfiedUserNum++;
     }
     else if (failReason == FailReason.DlRsSinrFail)
     {
         staSimulationCarrierResult.DlRsSinrFailUserNum++;
     }
     else
     {
         staSimulationCarrierResult.OfflineUserNum++;
     }
 }
예제 #5
0
 private void StatisticStateUserNum(StatSimuUserResult user, StatSimuCarrierResult staSimulationCarrierResult)
 {
     FailReason failReason = user.FailReason;
     if (failReason == FailReason.Satisfied && !(user.UlAvgThroughput<user.ulMacMinThroughputdemand))
     {
         staSimulationCarrierResult.SatisfiedUserNum++;
     }
     else if (failReason == FailReason.DlRsSinrFail)
     {
         staSimulationCarrierResult.DlRsSinrFailUserNum++;
     }
     else if (failReason == FailReason.UlRsSinrFail)
     {
         staSimulationCarrierResult.UlRsSinrFailUserNum++;
     }
     else
     {
         staSimulationCarrierResult.OfflineUserNum++;
     }
 }
예제 #6
0
 private void getUserResult(User user, SnapShotStatData snapData, out StatSimuUserResult userResult, out StatSimuCarrierResult carrier)
 {
     userResult = null;
     carrier = null;
     if (user.Tag != null)
     {
         string tag = (string) user.Tag;
         carrier = this.GetStatSimuCarrierResultByName(snapData, tag);
         if (carrier == null)
         {
             throw new Exception(SimulationResource.SIMULATION_FIND_BESTSERVER_FAILED);
         }
         foreach (StatSimuUserResult result in carrier.StatSimuUserResultList)
         {
             if (user.Id == result.LTEUser.Id)
             {
                 userResult = result;
                 break;
             }
         }
     }
     else
     {
         userResult = new StatSimuUserResult(user);
     }
 }