private void DlPowerControlOpenUserOperate(IDlPowerControlCarrier carrier, DlPowerControlCarrierTag carrierTag, ISimulationUser iSimulationUser, DlPowerControlUserTag userTag) { float dlSinrTarget = 2.147484E+09f; List<Demodulation> dlTargetSinrList = null; Dictionary<int, int> dictionary = null; IDlPowerControlUser user = PowerControlTools.ConvertIDlPcUser(iSimulationUser); dlTargetSinrList = this.m_MCSQuery.GetDlSinrListByUe(iSimulationUser); this.m_AvgBR_MCS_RbNum.TryGetValue(user.LTEUser.Service.Name, out dictionary); if (userTag.IsFullBuffer) { dlSinrTarget = PowerControlTools.QueryDlFullbufferUserSinrTarget(carrier, user, dlTargetSinrList, carrierTag.PdschRBNum); } else { dlSinrTarget = PowerControlTools.QueryDlNormalUserSinrTarget(carrier, user, carrierTag.PdschRBNum, dictionary, dlTargetSinrList); } //根据目标sinr和测量得到的sinr计算功控步长 user.PowerOffset = PowerControlTools.GetPowerOffset(dlSinrTarget, userTag.FilterMeasRSSinr); if ((carrier.IsDlIcicOn && !user.IsEdgeUser) && (user.PowerOffset > SimulationConstant.POWEROFFSET_TH)) { user.PowerOffset = SimulationConstant.POWEROFFSET_TH; } user.PowerOffsetTypeA = user.PowerOffset; user.PowerOffsetTypeB = user.PowerOffsetTypeA + (10f * ((float) Math.Log10((double) this.m_TabelPowerOffsetPorportion[carrier.PB]))); userTag.DlSinrTarget = dlSinrTarget; if (((iSimulationUser as SimulationUser).BestServiceCarrier.ID == 0) && ((iSimulationUser as SimulationUser).UserDlTotalThroughput < 30000f)) { this.printString = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}", new object[] { this.m_TTI, user.ID, userTag.IsFullBuffer, !user.IsEdgeUser, user.PowerOffsetTypeA, userTag.FilterMeasRSSinr, userTag.DlSinrTarget, (iSimulationUser as SimulationUser).UsedRbNum }); this.printContent.AppendLine(this.printString); this.fileName = string.Format("FDD2.0算法功控内部参数.txt", new object[0]); } }
private void DLPowerInit(IDlPowerControlCarrier iDlPowerControlCarrier) { DlPowerControlCarrierTag carrierTag = new DlPowerControlCarrierTag(); iDlPowerControlCarrier.DlPowerControlCarrierTag = carrierTag; //包含参考信号(RS)的功率值 用途待确认 iDlPowerControlCarrier.CommonPowerTypeB = new float[] { (((SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.RSPower) * 2f) * iDlPowerControlCarrier.BandWidthRbNum) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.BCHPower)) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.SCHPower), (SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.RSPower) * 2f) * iDlPowerControlCarrier.BandWidthRbNum }; //不包含参考信号(RS)的功率值 iDlPowerControlCarrier.CommonPowerTypeA = new float[] { SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.BCHPower) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.SCHPower), 0f }; //实际可用的RB数 carrierTag.PdschRBNum = (int)Math.Floor((double)((iDlPowerControlCarrier.BandWidthRbNum * iDlPowerControlCarrier.Carrier.DlTargetLoad) + 0.001)); }
private void DLPCOpenNewAccessUserInit(IDlPowerControlCarrier carrier, DlPowerControlCarrierTag carrierTag, float rbWeightFactor) { List<ISimulationUser> list = new List<ISimulationUser>(); list.AddRange(carrier.DlDataNewAccessUserList); list.AddRange(carrier.DlVoiceNewAccessUserList); foreach (ISimulationUser user in list) { IDlPowerControlUser dlPowerControlUser = PowerControlTools.ConvertIDlPcUser(user); DlPowerControlUserTag tag = PowerControlTools.ConvertDlPcUserTag(dlPowerControlUser); tag.FilterMeasRSSinr = dlPowerControlUser.DlRsSinr; tag.DlPCCounter = 0; PowerControlTools.IsFullbufferUser(user, this.m_McsEff, carrierTag.PdschRBNum, rbWeightFactor); } }
public void DlPowerControlOpen(IDlPowerControlCarrier iDlPowerControlCarrier, DlPowerControlCarrierTag carrierTag) { //对新接进来的用户,计算每个用户所需的RB数是否大于PDSCH所能提供的RB数 this.DLPCOpenNewAccessUserInit(iDlPowerControlCarrier, carrierTag, carrierTag.RBWeightFactor); //创建用户集合,包含等待的和新接进来的用户 List<ISimulationUser> list = PowerControlTools.BuildUserList(iDlPowerControlCarrier); foreach (ISimulationUser user in list) { IDlPowerControlUser dlPowerControlUser = PowerControlTools.ConvertIDlPcUser(user); DlPowerControlUserTag userTag = PowerControlTools.ConvertDlPcUserTag(dlPowerControlUser); //不太懂啊。。。 userTag.FilterMeasRSSinr = (SimulationConstant.ALPHA_RsSinr * userTag.FilterMeasRSSinr) + ((1f - SimulationConstant.ALPHA_RsSinr) * dlPowerControlUser.DlRsSinr); //每10个TTI进行一次下行功率控制 if ((userTag.DlPCCounter % SimulationConstant.DL_POWERCONTROL_PERIOD) == 0) { this.DlPowerControlOpenUserOperate(iDlPowerControlCarrier, carrierTag, user, userTag); } userTag.DlPCCounter++; } }
private void DlUserPower(int curTTI, IDlPowerControlCarrier carrier) { DlPowerControlCarrierTag dlPowerControlCarrierTag = carrier.DlPowerControlCarrierTag as DlPowerControlCarrierTag; List<ISimulationUser> list = new List<ISimulationUser>(); list.AddRange(carrier.DlDataNewAccessUserList); list.AddRange(carrier.DlVoiceNewAccessUserList); foreach (IDlPowerControlUser user in list) { if (carrier.IsDlIcicOn) { if (user.IsEdgeUser) { user.PowerOffsetTypeA = SimulationConstant.PA_EDGE_ICICON; } else { user.PowerOffsetTypeA = SimulationConstant.PA_CENTER_ICICON; } } else { user.PowerOffsetTypeA = SimulationConstant.PA_CENTER_ICICOFF; } user.PowerOffsetTypeB = user.PowerOffsetTypeA + ((float)Math.Log10((double)this.m_TabelPowerOffsetPorportion[carrier.PB])); } }
private void DLPowerInit(IDlPowerControlCarrier iDlPowerControlCarrier) { DlPowerControlCarrierTag carrierTag = new DlPowerControlCarrierTag(); iDlPowerControlCarrier.DlPowerControlCarrierTag = carrierTag; iDlPowerControlCarrier.CommonPowerTypeB = new float[] { (((SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.RSPower) * 2f) * iDlPowerControlCarrier.BandWidthRbNum) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.BCHPower)) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.SCHPower), (SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.RSPower) * 2f) * iDlPowerControlCarrier.BandWidthRbNum }; iDlPowerControlCarrier.CommonPowerTypeA = new float[] { SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.BCHPower) + SimulationTools.ConvertdBToLine(iDlPowerControlCarrier.SCHPower), 0f }; carrierTag.PdschRBNum = (int) Math.Floor((double) ((iDlPowerControlCarrier.BandWidthRbNum * iDlPowerControlCarrier.Carrier.DlTargetLoad) + 0.001)); if (iDlPowerControlCarrier.AlgParameter.DlPowerControlOn) { PowerControlTools.InitRBWeightFactor(iDlPowerControlCarrier, carrierTag); foreach (SimulationUser user in iDlPowerControlCarrier.DlUserList) { IDlPowerControlUser user2 = user; user2.DlPowerControlUserTag = new DlPowerControlUserTag(); DlPowerControlUserTag dlPowerControlUserTag = user2.DlPowerControlUserTag as DlPowerControlUserTag; UnionPsService service = user.LTEUser.Service as UnionPsService; //用途待确认 if (!this.m_AvgBR_MCS_RbNum.ContainsKey(user.LTEUser.Service.Name)) { Dictionary<int, int> dictionary = PowerControlTools.InitMcsRbNumDic(this.m_McsEff, user.DlMacAvgThroughputDemand, user.VoicePacketSize, service.Type, user2.MIMOClutterGain); this.m_AvgBR_MCS_RbNum.Add(user.LTEUser.Service.Name, dictionary); } } } }