Esempio n. 1
0
 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]);
     }
 }
Esempio n. 2
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));
   
 }
Esempio n. 3
0
 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);
     }
 }
Esempio n. 4
0
 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++;
     }
 }
Esempio n. 5
0
 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]));
     }
 }
Esempio n. 6
0
 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);
             }
         }
     }
 }