public void MyTestInitialize() { User lteuser = new User(); m_User = new SimulationUser(); m_Carrier = new SimulationCarrier(); m_Carrier.AdmissionCarrierTag = new AdmissionCellTag(); m_DlAdmission = new DlAdmissionControl(); m_ISimulationCarrierList = new List<ISimulationCarrier>(); SimulationCarrier carrier1 = new SimulationCarrier(); m_ISimulationCarrierList.Add(carrier1); carrier1.DlUserList.Add(m_User); carrier1.DLHandOverDataUserList.Add(m_User); carrier1.DLHandOverVoiceUserList.Add(m_User); m_User.LTEUser = lteuser; m_GBRUserList = new List<ISimulationUser>(); m_NonGBRUserList = new List<ISimulationUser>(); SimulationUser user1 = new SimulationUser(); m_GBRUserList.Add(user1); m_NonGBRUserList.Add(user1); //m_Carrier.DlVoiceWaitUserList.Add(m_User); }
//构造使用PS业务的用户 public static User CreateUser_PS() { Mobility mobility = new Mobility("mobility", 30); int Priority = 1; #region 业务参数 UnionPsService unionPsService = new UnionPsService(); Dictionary<NetWorkType, Service> PSServiceDic = new Dictionary<NetWorkType, Service>(); UMTSPsService umtsPsService = new UMTSPsService(); umtsPsService.UmtsR99Bearer = new UMTSR99Bearer(); PSServiceDic.Add(NetWorkType.UMTS, umtsPsService); unionPsService.PSServiceDic = PSServiceDic; #endregion #region 终端参数 Terminal terminal = new Terminal(); List<NetworkTerminal> NetterminalList = new List<NetworkTerminal>(); UMTSTerminal tempTerminal = new UMTSTerminal(); tempTerminal.NoiseFigure = 2; tempTerminal.NetType = NetWorkType.UMTS; NetterminalList.Add(tempTerminal); terminal.NetTerminalList = NetterminalList; User user = new User(mobility, unionPsService, terminal, LinkType.Uplink, Priority); return user; #endregion }
public void Init() { ProjectSingleton.CurrentProject = MockProject.Instance; ProjectSingleton.CurrentProject.AppContext.RegisterService(new MockPLCalcDataVstr()); ProjectSingleton.CurrentProject.AppContext.RegisterService(new MockGeoProvider()); List<User> m_UserList = new List<User>(); List<IACell> m_CellList = new List<IACell>(); Service Ser1 = new UnionPsService(); Terminal Ter1 = new Terminal(); User user1 = new User(); user1.Id = 1; user1.X = 100; user1.Y = 100; user1.Service = Ser1; user1.Terminal = Ter1; User user2 = new User(); user2.Id = 2; user2.X = 100; user2.Y = 100; user2.Service = Ser1; user2.Terminal = Ter1; m_UserList.Add(user1); m_UserList.Add(user2); IACell cell1; IACell cell2; InitCell(out cell1, out cell2); m_CellList.Add(cell1); m_CellList.Add(cell2); ICalcGain calcGain = new MockCalcGain(); m_LinkLossGet = new LinkLossGet(m_UserList, m_CellList, calcGain, ProjectSingleton.CurrentProject.AppContext,75); }
private List<User> CreateBlankUser(int userNumber, List<GeoXYRect> rects, CellServiceContext ctx) { List<User> list = new List<User>(); while (true) { double num; double num2; if (userNumber <= 0) { return list; } User user = new User(); ClutterInfo info = new ClutterInfo(-1); int num3 = this.m_Random.Next(0, rects.Count); this.GenUserXY(user, out num, out num2, rects[num3]); GeoXYPoint geoXYPoint = new GeoXYPoint(num, num2); if (this.m_CellRectHelper.IsPoiontIsPolyRegion(geoXYPoint)) { user.Clutter = info; user.Service = ctx.Service; user.LinkType = ctx.LinkType; user.Priority = 1; list.Add(user); if (userNumber == list.Count) { return list; } } } }
private double CalcAntennaGain(LTECell carrier, User user) { double num = 0.0; num = ((user.X - carrier.Parent.X) == 0.0) ? 90.0 : ((Math.Atan2(user.X - carrier.Parent.X, user.Y - carrier.Parent.Y) / 3.1415926535897931) * 180.0); num = ((num - carrier.Parent.AntConfiguration[0].Azimuth) + 360.0) % 360.0; num = (num > 180.0) ? (num - 360.0) : num; return (18.0 - Math.Min((double) ((12.0 * (num / 70.0)) * (num / 70.0)), (double) 20.0)); }
public double CalcAntGain(LTECell carrier, User user) { if (!SimulationConstant.USE_PlatFormAntenna) { return this.CalcAntennaGain(carrier, user); } return this.CalcAntGain3D(carrier, user); }
public float TryUserAssignLoadStatus(User user) { UMTSTerminal terminal= (UMTSTerminal)user.Terminal.GetNetWorkTerminal(NetWorkType.UMTS); JudgeUserType(user.Service,terminal); FindPreAccessCells(m_PreAccessCellList, user); CalcVirtualLoad(user, m_CelltobeAssignedList); m_RateLoad = FindBestPreAccessCell(m_CelltobeAssignedList); return m_RateLoad; }
/// <summary> /// 构建TD用户 /// </summary> /// <param name="index"></param> /// <param name="tfMatrix"></param> /// <param name="pg"></param> /// <returns></returns> public User ConstructUser(int index, TrueFalseMatrix tfMatrix) { User user = new User(); user.X = tfMatrix.GetXYPoint(index).X; user.Y = tfMatrix.GetXYPoint(index).Y; user.Terminal = m_Terminal; user.Service = m_Service; return user; }
public static List<NetWorkType> JudgeUserSupportNetwork(User usr) { NetWorkType serviceSupNets = GetServiceSupportNets(usr.Service); NetWorkType terminalSupNets = GetTerminalSupportNets(usr.Terminal); NetWorkType sameSupNets = serviceSupNets & terminalSupNets; List<NetWorkType> nets = new List<NetWorkType>(); //nets.Add(sameSupNets); nets = getNets(sameSupNets); return nets; }
private float CalculateDlEquipmentLoss(LTECell carrier, User user) { double num = 0.0; float lineValue = 0f; foreach (AntConfig config in carrier.Parent.AntConfiguration) { lineValue += (config.Tma != null) ? (config.TxPowerRatio * SimulationTools.ConvertdBToLine(((config.DlJumpLossTmaToBs + config.DlJumpLossTmaToAnt) + config.DlTotalLoss) + config.Tma.DlLoss)) : (config.TxPowerRatio * SimulationTools.ConvertdBToLine((config.DlJumpLossTmaToBs + config.DlJumpLossTmaToAnt) + config.DlTotalLoss)); } num = (((SimulationTools.ConvertLineTodB(lineValue) - this.CalcAntGain(carrier, user)) + SimulationTools.GetLTEServiceBodyLoss(user.Service)) + user.Terminal.NetTerminalList[0].Loss) - user.Terminal.Gain; return (float) num; }
public void TestServiceException() { User user = new User(); Service service = new MockService(); user.Service = service; Terminal terminal = new Terminal(); terminal.Technology = NetWorkType.UMTS; user.Terminal = terminal; List<NetWorkType> res = UserAssist.JudgeUserSupportNetwork(user); }
public void TestPolyMode() { User user = new User(); Service service = new MockService(); service.Technology = (NetWorkType.GSM | NetWorkType.UMTS); Terminal terminal = new Terminal(); terminal.Technology = (NetWorkType.GSM | NetWorkType.UMTS); user.Service = service; user.Terminal = terminal; List<NetWorkType> res = UserAssist.JudgeUserSupportNetwork(user); Assert.AreEqual(2, res.Count); }
private float CalculateDlTotalLoss(IACell carrier, User user, LinkLossStruct ulLinkLossStruct, bool isLTECell) { if (isLTECell) { LTECell lteCarrier = carrier as LTECell; return CalculateDlTotalLoss(lteCarrier, user, ulLinkLossStruct); } else { RelayCell relayCarrier = carrier as RelayCell; return CalculateDlTotalLoss(relayCarrier, user, ulLinkLossStruct); } }
private double CalcAntGain3D(LTECell carrier, User user) { Transceiver parent = carrier.Parent; StructAntennaParam calAntennaParam = new StructAntennaParam(); calAntennaParam.AntConfigSetUp = parent.AntConfiguration[0]; calAntennaParam.CellX = parent.X; calAntennaParam.CellY = parent.Y; calAntennaParam.IsSimple = false; calAntennaParam.MsX = user.X; calAntennaParam.MsY = user.Y; calAntennaParam.AntHeight = 0; calAntennaParam.MsHeight = 0; return (double) this.m_CalculateGain.CalculateAntennaGain(calAntennaParam); }
private void GenUserXY(User user) { while (true) { double x = this.RandomGen(this.m_Rect.Left, this.m_Rect.Right); double y = this.RandomGen(this.m_Rect.Bottom, this.m_Rect.Top); GeoXYPoint geoXYPoint = new GeoXYPoint(x, y); if (this.m_Poly.IsPointInRegion(geoXYPoint)) { user.X = x; user.Y = y; return; } } }
public void Excute(List<TDSimCell> bestCellsInCalcRadius,ref TDSimCell bestCell,User user) { float rscp = 0; TDSimCell tempCell = null; foreach (TDSimCell cell in bestCellsInCalcRadius) { float linkLoss = m_Param.CalcLinkLoss.GetLinkLoss(NetWorkType.TDSCDMA, cell.Cell.ID, user.Id, LinkType.Downlink); float bchAntGain = m_SmartAntGainCalc.CalcSingleAntGain(cell, user); if (rscp >= (cell.PccpchPower - linkLoss + bchAntGain) && rscp > m_Param.TdUIParam.RSCPThreshold) { tempCell = cell; } } bestCell = tempCell; }
private void CreateUserCollection(EnvUserContext uc, float indoorRate) { List<GeoXYPoint> clutterUserPts = uc.ClutterUserPts; int index = 0; int threshold = (int) ((clutterUserPts.Count * indoorRate) / 100f); foreach (GeoXYPoint point in clutterUserPts) { User user = new User(uc.UsrMobBind.Mobility, uc.SvcUsg.Service, uc.SvcUsg.Terminal, uc.LinkType, uc.UsrMobBind.UserProfile.Priority) { X = point.X, Y = point.Y, UserProfile = uc.UsrMobBind.UserProfile.Name, Clutter = uc.ClutterInfo }; this.setUserIndoorProperty(index, threshold, user); index++; this.m_UserCollection.Add(user); } }
public static GSMSimUser MockGsmPsSimUser() { User trafficUser = new User(); trafficUser.Service = new MockService(); trafficUser.Service.CommonType = CommonServiceType.PSService; GSMSimUser user = new GSMSimUser(trafficUser); GSMSimTRX trx1 = MockGsmSimTrx(); user.BestServer = trx1; user.BestServer.NeTRX.TRXType = TRXType.BCCH; user.BestServer.CellUsers = new List<GSMSimUser>(); GSMPsService gsmPsService = new GSMPsService(); UnionPsService psService = new UnionPsService(); psService.PSServiceDic.Add(NetWorkType.GSM, gsmPsService); user.TrafficUser.Service = psService; GSMTerminal gsmTerminal = new GSMTerminal(); gsmTerminal.NetType = NetWorkType.GSM; Terminal terminal = new Terminal(); terminal.Technology = NetWorkType.GSM; terminal.NetTerminalList.Add(gsmTerminal); user.TrafficUser.Terminal = terminal; Site site = MockSite(); Transceiver tran = new Transceiver(); user.BestServer.Parent = tran; user.BestServer.Parent.Parent = site; //Dictionary<GSMTimeSlot, float> dlInterf = new Dictionary<GSMTimeSlot, float>(); //Dictionary<GSMTimeSlot, float> dlcirs = new Dictionary<GSMTimeSlot, float>(); ////Dictionary<GSMTimeSlot, float> preUlTxPower = new Dictionary<GSMTimeSlot, float>(); //for (int i = 0; i < 8; i++) //{ // dlcirs.Add(TSes[i], 15 + i * 2); //} //user.DlCirs = dlcirs; //user.PreULTxPower = preUlTxPower; return user; }
public void MyTestInitialize() { m_SimUser1=MockTDSimUser.CreatTDSimUser_CSDL(); m_SimUser2 = MockTDSimUser.CreatTDSimUser_CSUL(); m_IntefUser = MockTDSimUser.CreatTDSimUser_PSDL(); m_Param = new TDCalcCommonParam(); m_Param.SmartAntGain = new MockSmartAntCalcGain(); m_Cell = MockTDSimCell.CreatTDSimCell(); m_User = MockTDSimUser.CreatUser_CSDL(); m_SmartAntGain = new SmartAntGain(m_Param.SmartAntGain); //LinkLossAssist.Init(); //m_TDCalcCommonParam = new TDCalcCommonParam(); //m_TDCalcCommonParam.SmartAntGain = new MockSmartAntCalcGain(); //m_TDSimUser = MockTDSimUser.CreatTDSimUser_CS(); //m_IntefUser = MockTDSimUser.CreatTDSimUser_PS(); //m_TDSimCell = MockTDSimCell.CreatTDSimCell(); //m_SmartAntGain = new SmartAntGain(m_TDCalcCommonParam.SmartAntGain); }
//构造使用PS业务的用户 public static User CreatUser_PS() { Mobility mobility = new Mobility("mobility", 30); //构造业务参数 UnionPsService unionPsService = new UnionPsService(); Dictionary<NetWorkType, Service> PSServiceDic = new Dictionary<NetWorkType, Service>(); TDPsService tdPsService = new TDPsService(); tdPsService.TDR99Bearer = new TDR99Bearer(); PSServiceDic.Add(NetWorkType.TDSCDMA, tdPsService); unionPsService.PSServiceDic = PSServiceDic; //构造终端参数 Terminal terminal = new Terminal(); List<NetworkTerminal> terminalList = new List<NetworkTerminal>(); TDTerminal tempTerminal = new TDTerminal(); tempTerminal.NoiseFigure = 2; tempTerminal.NetType = NetWorkType.TDSCDMA; tempTerminal.MinTxPower = 24; tempTerminal.MaxTxPower = 36; terminalList.Add(tempTerminal); terminal.NetTerminalList = terminalList; User user = new User(mobility, unionPsService, terminal, LinkType.Uplink, 1); user.Id = 1; return user; }
private ILoadStatus Load(List<NetWorkType> nets, User user, out NetWorkType choiceNet) { ILoadStatus loadQuery = null; //ILoadStatus temploadQuery = null; choiceNet = 0; float afterUseAddLoad = float.MaxValue; float tempLoad = float.MinValue; //从下面的判断挪出来的 ExcludeLTE(nets); foreach (NetWorkType net in nets) { //if (net == NetWorkType.LTE) //{ // continue; //} ILoadStatus temploadQuery = m_Load[net]; tempLoad = temploadQuery.TryUserAssignLoadStatus(user); //load的定义:用请求速率除以频带宽度 FindMinLoad(ref choiceNet, ref loadQuery, ref afterUseAddLoad, tempLoad, net, temploadQuery); //SaveFile(0, tempLoad, net); } //SaveFile(1, afterUseAddLoad, choiceNet); return loadQuery; }
private void AddUser(NetWorkType net, User user) { m_Load[net].TryUserAssignLoadStatus(user); m_PreAccessUserDic[net].Add(user); m_Load[net].Update(); }
private void AddDownLinkUser(User user) { if ((user.Service as UnionPsService).DlAveThroughputDemand < m_WideBandDemand) { AddUser(m_NarrowBandNet, user); } else { AddUser(m_WideBandNet, user); } }
private void AssignPSUsers(User user) { if (user.LinkType == LinkType.Downlink) { AddDownLinkUser(user); } else { AddUpLinkUser(user); } }
private void AssignCsPsUsers(User user) { if (user.Service.CommonType == CommonServiceType.CSService) { m_Load[m_VoiceNet].TryUserAssignLoadStatus(user); m_PreAccessUserDic[m_VoiceNet].Add(user); m_Load[m_VoiceNet].Update(); } else { AssignPSUsers(user); } }
private void AddUserToPreDic(User user, List<NetWorkType> supportNets) { if (m_PreAccessUserDic.ContainsKey(supportNets[0])) { m_PreAccessUserDic[supportNets[0]].Add(user); } }
private List<NetWorkType> AssignUsers(List<NetWorkType> netTypes, User user) { netTypes = UserAssist.JudgeUserSupportNetwork(user); //找出多模用户 if (netTypes.Count > 1) { m_PolyModeUsers.Add(user); } else if (netTypes.Count == 1)//找出单模用户 { m_SingleModeUsers.Add(user); } return netTypes; }
///// <summary> ///// backhaul链路上下行损耗 未完成 ///// </summary> ///// <param name="cell"></param> ///// <param name="user"></param> ///// <returns></returns> //private LinkLossStruct[] GetBackhaulUlAndDlLinkLoss(Transceiver cell, User relayUser) //{ // LinkLossStruct[] structArray = new LinkLossStruct[2]; // this.m_StructAntennaParam.MsX = relayUser.X; // this.m_StructAntennaParam.MsY = relayUser.Y; // this.m_StructAntennaParam.MsHeight = this.m_GeoInfo.GetValueByGeoXYPoint(relayUser.X, relayUser.Y, DemDataType.Height); // float[][] numArray = this.m_iplCalDataVstr.GetPointBackhaulPathLoss(cell, relayUser.X, relayUser.Y); // float penetrationLoss = 0f; // if ((user.Clutter != null) && user.IsIndoor) // { // short buildHeight = 0; // buildHeight = this.m_GeoInfo.GetValueByGeoXYPoint(user.X, user.Y, DemDataType.Building); // penetrationLoss = (float)this.GetPenetrationLoss(user.Clutter.Id, buildHeight); // } // //int key = tranceiver.ID; // //float loss = 0f; // //if (!m_TranceiverClutterloss.TryGetValue(key, out loss)) // //{ // // ClutterParamsResult clutterParam = ConfingClutter(tranceiver); // // loss += GetShadowloss(clutterParam.ShadowStd, isShadow, coverageProb); // // loss += GetIndoorloss(isIndoorCov, clutterParam); // // m_TranceiverClutterloss.Add(key, loss); // //} // //return loss; // ////relay一侧设备损耗 // //relayUser.Terminal.Reception; // //BtsEquipment btsEquipment = relayCell.ParentRN.Equipment; // //List<AntConfig> antConfigs = new List<AntConfig>(); // //antConfigs.Add(relayCell.CellToUEAnt); // double noiseFigureOfBts = 0;// Transceiver.CalculateNoiseFigureOfBts(antConfigs, (double)btsEquipment.NoiseFigure); // float num7 = (float)noiseFigureOfBts + penetrationLoss; // structArray[0].pathLoss = numArray[0][0]; // structArray[0].otherTotalLoss = num7; // structArray[1].pathLoss = numArray[0][1]; // structArray[1].otherTotalLoss = num7 + this.m_StructAntennaParam.AntConfigSetUp.DlTotalLoss; // return structArray; //} /// <summary> /// access链路上下行损耗 /// </summary> /// <param name="cell"></param> /// <param name="user"></param> /// <returns></returns> private LinkLossStruct[] GetAccessUlAndDlLinkLoss(RelayCell cell, User user) { LinkLossStruct[] structArray = new LinkLossStruct[2]; this.m_StructAntennaParam.MsX = user.X; this.m_StructAntennaParam.MsY = user.Y; this.m_StructAntennaParam.MsHeight = this.m_GeoInfo.GetValueByGeoXYPoint(user.X, user.Y, DemDataType.Height); float[][] numArray = m_iGetRelayUEPathLoss.GetRelayUEPointPathLoss(cell, user.X, user.Y); float penetrationLoss = 0f; if ((user.Clutter != null) && user.IsIndoor) { short buildHeight = 0; buildHeight = this.m_GeoInfo.GetValueByGeoXYPoint(user.X, user.Y, DemDataType.Building); penetrationLoss = (float)this.GetPenetrationLoss(user.Clutter.Id, buildHeight); } float bodyLoss = (user.Service as UnionPsService).BodyLoss; float loss = user.Terminal.NetTerminalList[0].Loss; float attenuation = user.Terminal.Attenuation; float gain = user.Terminal.Gain; float num7 = (((bodyLoss + loss) + attenuation) - user.Terminal.Gain) + penetrationLoss; structArray[0].pathLoss = numArray[0][0]; structArray[0].otherTotalLoss = num7; structArray[1].pathLoss = numArray[0][1]; structArray[1].otherTotalLoss = num7 + this.m_StructAntennaParam.AntConfigSetUp.DlTotalLoss; return structArray; }
private LinkLossStruct[] GetMultUlAndDlLinkLoss(Transceiver cell, User user) { LinkLossStruct[] structArray = new LinkLossStruct[2]; LinkLossStruct[] structArray2 = new LinkLossStruct[2]; LinkLossStruct[] structArray3 = new LinkLossStruct[2]; this.m_StructAntennaParam.MsX = user.X; this.m_StructAntennaParam.MsY = user.Y; this.m_StructAntennaParam.MsHeight = this.m_GeoInfo.GetValueByGeoXYPoint(user.X, user.Y, DemDataType.Height); float penetrationLoss = 0f; if ((user.Clutter != null) && user.IsIndoor) { short buildHeight = 0; buildHeight = this.m_GeoInfo.GetValueByGeoXYPoint(user.X, user.Y, DemDataType.Building); penetrationLoss = (float) this.GetPenetrationLoss(user.Clutter.Id, buildHeight); } for (int i = 0; i < cell.AntConfiguration.Count; i++) { AntConfig config = cell.AntConfiguration[i]; float[][] numArray = this.m_iplCalDataVstr.GetPointPathLoss(cell, config.AntennaID, user.X, user.Y); this.m_StructAntennaParam.AntConfigSetUp = config; float bodyLoss = (user.Service as UnionPsService).BodyLoss; float loss = user.Terminal.NetTerminalList[0].Loss; float attenuation = user.Terminal.Attenuation; float gain = user.Terminal.Gain; float num8 = (((bodyLoss + loss) + attenuation) - user.Terminal.Gain) + penetrationLoss; structArray[0].pathLoss = numArray[0][0]; structArray[0].otherTotalLoss = num8; structArray[1].pathLoss = numArray[0][1]; structArray[1].otherTotalLoss = num8 + this.m_StructAntennaParam.AntConfigSetUp.DlTotalLoss; structArray2[0].pathLoss += 1f / ((float) UnitTrans.dBto((double) (structArray[0].pathLoss + structArray[0].otherTotalLoss))); structArray2[1].pathLoss += cell.AntConfiguration[i].TxPowerRatio / ((float) UnitTrans.dBto((double) (structArray[1].pathLoss + structArray[1].otherTotalLoss))); } structArray3[0].pathLoss = -1f * ((float) UnitTrans.todB((double) structArray2[0].pathLoss)); structArray3[0].otherTotalLoss = 0f; structArray3[1].pathLoss = -1f * ((float) UnitTrans.todB((double) structArray2[1].pathLoss)); structArray3[1].otherTotalLoss = 0f; return structArray3; }
public bool IsUp(User user) { return (user.LinkType == LinkType.Uplink); }