/// <summary> /// relay /// </summary> /// <param name="relayCellEx"></param> /// <returns></returns> public static int GetFrequencyShift(RelayCellEx relayCellEx) { if (relayCellEx.RelayCell.ParentRN.TxNumber == 1) { return (relayCellEx.RelayCell.PhyID % 6); } return (relayCellEx.RelayCell.PhyID % 3); }
//add by huna 未完成,获取Relay的access链路损耗 public static double[] GetCombinedRelayLinkLoss(ILTELinkLossCalculator linkLoss, LTETransceiverEX tranInfo, CellCasePara casePara, RelayCellEx cellEx) { for (int i = 0; i < cellEx.AntConfigExList.Count; i++) { double[] linkLossArr = linkLoss.GetAccessLinkLoss(cellEx.AntConfigExList[i].AntConfig, cellEx.RelayCell, casePara.X, casePara.Y, casePara.ClutterID, casePara.BuildHeight, true, (float)casePara.Resolution); tranInfo.AntLinkLoss[i][0] = linkLossArr[0]; tranInfo.AntLinkLoss[i][1] = linkLossArr[1]; } return linkLoss.GetCombinedLinkLoss(tranInfo.RatioArr, tranInfo.AntLinkLoss); //double[] array = new double[2]; //return array; }
/// <summary> /// relayTrans¹¹Ô캯Êý /// </summary> /// <param name="rn"></param> /// <param name="antCofigExList"></param> public LTETransceiverEX(RelayNode rn, List<AntConfigEx> antCofigExList, Transceiver tran) { //Transceiver tran = new Transceiver(); //tran.ID = id; this.m_Transceiver = tran; foreach (RelayCell cell in rn.RCList) { RelayCellEx item = new RelayCellEx(cell, antCofigExList); this.m_RelayCellExList.Add(item); IACell iaCell = cell; this.m_Transceiver.Cells.Add(iaCell); } this.InitLTETransExBound(antCofigExList); int count = antCofigExList.Count; this.m_AntLinkLoss=new double[count][]; this.m_RatioArr = new double[count]; for (int i = 0; i < count; i++) { this.m_RatioArr[i] = antCofigExList[i].AntConfig.TxPowerRatio; this.m_AntLinkLoss[i] = new double[2]; } }
private static double GetTypeBDataREPower(RelayCellEx relayCellEx, double dateRePower) { return (UnitTrans.dBto((double)relayCellEx.RelayCell.RSPower) * GetRoAandRoB(relayCellEx, dateRePower).RoB); }
private static double GetNomRSREPower(RelayCellEx relayCellEx) { return Convert.ToDouble((double)(UnitTrans.dBto((double)relayCellEx.RelayCell.MaxPower) / ((double)(relayCellEx.RelayFreqBandEx.LteFrequencyBand.RBNum * 12)))); }
public static double GetTypeBDataReNumSimplify(RelayCellEx relayCellEx) { int txNumber = relayCellEx.RelayCell.ParentRN.TxNumber; double rBNum = relayCellEx.RelayFreqBandEx.LteFrequencyBand.RBNum; double reNumOfRB = 12.0; switch (txNumber) { case 1: return (30.0 - (((576.0 - (reNumOfRB * txNumber)) * 1.0) / ((10.0 * rBNum) * 8.0))); case 2: return (24.0 - (((576.0 - (reNumOfRB * txNumber)) * 1.0) / ((10.0 * rBNum) * 8.0))); } return (32.0 - (((576.0 - (reNumOfRB * txNumber)) * 2.0) / ((10.0 * rBNum) * 8.0))); }
public static double GetTypeBDataReNumComplicated(RelayCellEx relayCellEx) { int txNumber = relayCellEx.RelayCell.ParentRN.TxNumber; double dlPdcchSymbols = relayCellEx.RelayCell.RelayAlgParameter.DlPdcchSymbols; double rBNum = relayCellEx.RelayFreqBandEx.LteFrequencyBand.RBNum; switch (txNumber) { case 1: return (30.0 - ((576.0 - (12.0 * txNumber)) / ((10.0 * rBNum) * 8.0))); case 2: return (24.0 - ((576.0 - (12.0 * txNumber)) / ((10.0 * rBNum) * 8.0))); } if (dlPdcchSymbols == 1.0) { return (40.0 - (((576.0 - (12.0 * txNumber)) * 2.0) / ((10.0 * rBNum) * 8.0))); } return (32.0 - (((576.0 - (12.0 * txNumber)) * 2.0) / ((10.0 * rBNum) * 8.0))); }
public static double GetTypeADataReNumSimplify(RelayCellEx relayCellEx) { int txNumber = relayCellEx.RelayCell.ParentRN.TxNumber; double rBNum = relayCellEx.RelayFreqBandEx.LteFrequencyBand.RBNum; //一个RB的带宽=12*15k=180K double reNumOfRB = 12.0;//yige RB资源块包含的载波数目,12个,每个载波15K switch (txNumber) { case 1: case 2: return ((8.0 * reNumOfRB) - (((576.0 - (reNumOfRB * txNumber)) * 7.0) / ((10.0 * rBNum) * 8.0))); } return ((7.0 * reNumOfRB) - (((576.0 - (reNumOfRB * txNumber)) * 6.0) / ((10.0 * rBNum) * 8.0))); }
private void SetPTotal(RelayCellEx relayCellEx) { double rsPowerOftotal = 0.0; double pcfichPower = 0.0; double PhichPower = 0.0; double PDCCHPower = 0.0; float rSPower = relayCellEx.RelayCell.RSPower; int rBNum = relayCellEx.RelayCell.FreqBand.RBNum; float bandWidth = relayCellEx.RelayCell.FreqBand.BandWidth; rsPowerOftotal = AdvancedSettingTable.GetRSREInPDCCH(rBNum) * UnitTrans.dBto((double)rSPower); pcfichPower = AdvancedSettingTable.GetPCFICH() * UnitTrans.dBto((double)(rSPower + relayCellEx.RelayCell.PCFICHPoffset)); PhichPower = AdvancedSettingTable.GetPhichRENumByBandWidth(bandWidth) * UnitTrans.dBto((double)(rSPower + relayCellEx.RelayCell.PHICHPoffset)); PDCCHPower = AdvancedSettingTable.GetPDCCHReNum(relayCellEx.RelayCell.ParentRN.TxNumber, relayCellEx.RelayCell.RelayAlgParameter.DlPdcchSymbols, rBNum, bandWidth) * UnitTrans.dBto((double)(rSPower + relayCellEx.RelayCell.PDCCHPoffset)); relayCellEx.PTotalForPDCCH = ((rsPowerOftotal + pcfichPower) + PhichPower) + PDCCHPower; PDCCHPower = AdvancedSettingTable.GetPDCCHReNum(relayCellEx.RelayCell.ParentRN.TxNumber, 1, rBNum, bandWidth) * UnitTrans.dBto((double)(rSPower + relayCellEx.RelayCell.PDCCHPoffset)); relayCellEx.PTotalForPCFICH = ((rsPowerOftotal + pcfichPower) + PhichPower) + PDCCHPower; double num8 = relayCellEx.RSRENumOfPDSCH * relayCellEx.DlRsREPower; double num9 = relayCellEx.PDSCHTotalPower * relayCellEx.RelayCell.ActualDlLoad; relayCellEx.PTotalForPDSCH = num8 + num9; }
public static double GetPDSCHTotalPower(RelayCellEx relayCellEx, double numTypeADataRE, double numTypeBDataRE) { double nomRSREPower = GetNomRSREPower(relayCellEx); double typeBDataREPower = GetTypeBDataREPower(relayCellEx, nomRSREPower); return ((nomRSREPower * numTypeADataRE) + (typeBDataREPower * numTypeBDataRE)); }
private void GetTDDSubFrameMatrix(RelayCellEx cellEx) { this.m_TDDSubFrameMatrix = cellEx.RelayCell.ParentRN.SubFrameMatrix; int a = 0; int b = 0; for (int subFrameIndex = 0; subFrameIndex < 10; subFrameIndex++) { if (m_TDDSubFrameMatrix[m_RelaySubFrameCongig, subFrameIndex] == 0 || m_TDDSubFrameMatrix[m_RelaySubFrameCongig, subFrameIndex] == 2) { a++; } if (m_TDDSubFrameMatrix[m_LteSubFrameCongig, subFrameIndex] == 3) { b++; } } m_a = (double)(a - b) / (double)a; m_b = (double)b / (double)a; }
private void GetRelayULMimo(RelayCellEx relayCellEx) { RelayCell relayCell = relayCellEx.RelayCell; LTETerminal terminal = this.m_Group.TrafficTerminal.NetTerminalList[0] as LTETerminal; //Transceiver parent = relayCell.Parent; MIMO mimo = this.m_ITrafficMCS.GetMIMO(terminal.TxAntNumber, relayCell.ParentRN.RxNumber, terminal.UlSmSupported); if (mimo == null) { if (this.m_Group.IsContinue) { this.m_Group.IsContinue = false; this.m_Group.NotContinueReason = this.m_Group.NotContinueReason + "check MIMO(UL) config in cell:\r\n"; } this.m_Group.NotContinueReason = this.m_Group.NotContinueReason + relayCell.ParentRN.Name + ","; } relayCellEx.ULMIMO = mimo; }
private void GetRelayULDemodulationTable(RelayCellEx relayCellEx, float uLBLER) { relayCellEx.ULDemodulationTable = this.m_ITrafficMCS.GetDemodulation(relayCellEx.RelayCell.Reception, this.m_Group.TrafficMobility, relayCellEx.ULMIMO, uLBLER); }
private void GetRelayDLDemodulationTable(RelayCellEx relayCellEx, float dLBLER) { relayCellEx.DLDemodulationTable = this.m_ITrafficMCS.GetDemodulation(this.m_Group.TrafficTerminal.Reception, this.m_Group.TrafficMobility, relayCellEx.DLMIMO, dLBLER); }
public static double GetPbchRePower(RelayCellEx relayCellEx) { return UnitTrans.dBto((double)(relayCellEx.RelayCell.RSPower + relayCellEx.RelayCell.BCHPoffset)); }
private static RoAandRoB GetRoAandRoB(RelayCellEx relayCellEx, double dataRePower) { int txNumber = relayCellEx.RelayCell.ParentRN.TxNumber; int pB = relayCellEx.RelayCell.PB; RoAandRoB ob = new RoAandRoB(); double roA = dataRePower / UnitTrans.dBto((double)relayCellEx.RelayCell.RSPower); switch (pB) { case 0: return GetRoAandRoBbyIndex0(txNumber, roA); case 1: return GetRoAandRoBbyIndex1(txNumber, roA); case 2: return GetRoAandRoBbyIndex2(txNumber, roA); case 3: return GetRoAandRoBbyIndex3(txNumber, roA); } return ob; }
public bool IsBuildOneBinOk(int index) { m_BestCarrierID = m_BestServerCarrierID[index]; if (m_BestCarrierID != m_InvalidateValue) { m_BestCellEx = m_DataManager.GetCellExByID(m_BestCarrierID); //m_LteCellEx = (LteCellEx)m_BestCellEx; //m_RelayCellEx = (RelayCellEx)m_RelayCellEx; if (m_RsShifting) { m_SCHLevel = ((float)m_OneBinValueTemp.DL_SCH_RP) / 100f; m_SCHLevel += m_OneBinValueTemp.m_ModelShadowMargin; m_Interference = (double) m_ShiftingInterfOfDLSCHSinr[index]; if ( m_Interference != -2147483648.0) { m_Interference *= LteConst.TIMES_TO_FLOAT; m_Interference += m_OneBinValueTemp.m_ModelShadowMargin; m_Interference = UnitTrans.todB((double)(UnitTrans.dBto( m_Interference) + ( m_BestCellEx.TerminalNoisePower / ((double) m_BestCellEx.RENumOfBandWidth)))); } else { m_Interference = UnitTrans.todB((double)(m_BestCellEx.TerminalNoisePower / ((double) m_BestCellEx.RENumOfBandWidth))); } m_OneBinValueTemp.SCH_SINR = Convert.ToInt16((double)((( m_SCHLevel - m_Interference) - m_OneBinValueTemp.m_C_i_nShadowMargin) * 100.0)); } else if (m_BestCellEx is LteCellEx) { m_LteCellEx = (LteCellEx)m_BestCellEx; m_OneBinValueTemp.SCH_SINR = Convert.ToInt16((float)(((((float)m_OneBinValueTemp.DLRSSINR) / 100f) + m_LteCellEx.LteCell.SCHPoffset) * 100f)); } else { if (m_BestCellEx is RelayCellEx) { m_RelayCellEx = (RelayCellEx)m_BestCellEx; m_OneBinValueTemp.SCH_SINR = Convert.ToInt16((float)(((((float)m_OneBinValueTemp.DLRSSINR) / 100f) + m_RelayCellEx.RelayCell.SCHPoffset) * 100f)); } } } #region 原代码 //this.m_BestCarrierID = this.m_BestServerCarrierID[index]; //if (this.m_BestCarrierID != this.m_InvalidateValue) //{ // this.m_BestCellEx = this.m_DataManager.GetLTECellExByID(this.m_BestCarrierID); // if (this.m_RsShifting) // { // this.m_SCHLevel = ((float) this.m_OneBinValueTemp.DL_SCH_RP) / 100f; // this.m_SCHLevel += this.m_OneBinValueTemp.m_ModelShadowMargin; // this.m_Interference = (double) this.m_ShiftingInterfOfDLSCHSinr[index]; // if (this.m_Interference != -2147483648.0) // { // this.m_Interference *= LteConst.TIMES_TO_FLOAT; // this.m_Interference += this.m_OneBinValueTemp.m_ModelShadowMargin; // this.m_Interference = UnitTrans.todB((double) (UnitTrans.dBto(this.m_Interference) + (this.m_BestCellEx.TerminalNoisePower / ((double) this.m_BestCellEx.RENumOfBandWidth)))); // } // else // { // this.m_Interference = UnitTrans.todB((double) (this.m_BestCellEx.TerminalNoisePower / ((double) this.m_BestCellEx.RENumOfBandWidth))); // } // this.m_OneBinValueTemp.SCH_SINR = Convert.ToInt16((double) (((this.m_SCHLevel - this.m_Interference) - this.m_OneBinValueTemp.m_C_i_nShadowMargin) * 100.0)); // } // else // { // this.m_OneBinValueTemp.SCH_SINR = Convert.ToInt16((float) (((((float) this.m_OneBinValueTemp.DLRSSINR) / 100f) + this.m_BestCellEx.LteCell.SCHPoffset) * 100f)); // } //} #endregion return true; }