public void CalcBackhaulLos(PathLossCalcParam param, ref SectorPathLossData losData, ref bool isStopCalculator) { throw new NotImplementedException(); }
/// <summary> /// 计算backhaul链路的路径损耗 /// </summary> /// <param name="losData"></param> /// <param name="sectionParam"></param> /// <param name="isStopCalculator"></param> public void CalculateBackhaulPathLoss(ref SectorPathLossData losData, SectionPathLossCalcParam sectionParam, ref bool isStopCalculator) { GisPreLoadData clutterData; GisPreLoadData heightData; GisPreLoadData buildingHeightData; m_SectionPathLossCalcParam = sectionParam; DiffCalcPreProcess(sectionParam); Dictionary<DemDataType, GisPreLoadData> gisData = new Dictionary<DemDataType, GisPreLoadData>(); PreLoadGisData(out clutterData, out heightData, out buildingHeightData, sectionParam); gisData.Add(DemDataType.Clutter, clutterData); gisData.Add(DemDataType.Height, heightData); gisData.Add(DemDataType.Building, buildingHeightData); if (!(AntConfig.IS_ANTENNA_HEIGHT_INCLUDE_BUILDING || !GeoDataProvider.IGeoProvider.IsBuildingLoaded)) { GeoXYPoint pnt = new GeoXYPoint((double)sectionParam.X, (double)sectionParam.Y); sectionParam.TxAntennaHeight += GeoDataProvider.GisInfo.GetValueByGeoXYPoint(pnt, DemDataType.Building, false); } short rayNumber = sectionParam.GetMacroUERayNumber(); for (int i = 0; i < rayNumber; i++) { m_RayIndex = i; RayMethodParam rayParam = BuildCalcParam(sectionParam, i, gisData); float[] rayLos = CalculateRayPathLoss(rayParam, sectionParam.MacroToRelayPropModel, ref isStopCalculator); WriteSectionLos(ref losData, i, rayLos, sectionParam.SectionIndex); } }
public void CalcSectorLos(PathLossCalcParam param, ref SectorPathLossData losData, List<byte> sectionIndexs, ref bool isStopCalc) { throw new NotImplementedException(); }
protected void WriteSectionLos(ref SectorPathLossData losData, int rayIndex, float[] rayLos, byte sectionIndex) { for (int i = 0; i < rayLos.Length; i++) { losData.SetValue(sectionIndex, rayIndex, i, rayLos[i]); } }
/// <summary> /// 保存路损值 山峰高度和位置 /// </summary> /// <param name="losData"></param> /// <param name="rayIndex"></param> /// <param name="peakinfo"></param> /// <param name="sectionIndex"></param> protected void WriteSectionLos(ref SectorPathLossData losData, int rayIndex, PeakInfoTemp peakinfo, byte sectionIndex) { for (int i = 0; i < peakinfo.RayLosMatrix.Length; i++) { losData.SetValue(sectionIndex, rayIndex, i, peakinfo.RayLosMatrix[i]); losData.SetHeightValue(sectionIndex, rayIndex, i, peakinfo.PeakHeightMatrix[i]); losData.SetDotValue(sectionIndex, rayIndex, i, peakinfo.PeakDotMatrix[i]); } }
/// <summary> /// 计算扇形区域的路径损耗 /// </summary> /// <param name="losData"></param> /// <param name="sectionParam"></param> /// <param name="isStopCalculator"></param> public void CalculateSectionPathLoss(ref SectorPathLossData losData, SectionPathLossCalcParam sectionParam, ref bool isStopCalculator) { GisPreLoadData clutterData; GisPreLoadData heightData; GisPreLoadData buildingHeightData; m_SectionPathLossCalcParam = sectionParam; DiffCalcPreProcess(sectionParam); Dictionary<DemDataType, GisPreLoadData> gisData = new Dictionary<DemDataType, GisPreLoadData>(); PreLoadGisData(out clutterData, out heightData, out buildingHeightData, sectionParam); gisData.Add(DemDataType.Clutter, clutterData); gisData.Add(DemDataType.Height, heightData); gisData.Add(DemDataType.Building, buildingHeightData); if (!(AntConfig.IS_ANTENNA_HEIGHT_INCLUDE_BUILDING || !GeoDataProvider.IGeoProvider.IsBuildingLoaded)) { GeoXYPoint pnt = new GeoXYPoint((double) sectionParam.X, (double) sectionParam.Y); sectionParam.TxAntennaHeight += GeoDataProvider.GisInfo.GetValueByGeoXYPoint(pnt, DemDataType.Building, false); } short rayNumber = sectionParam.GetRayNumber(); #region oldCode 2012.9.24 //for (int i = 0; i < rayNumber; i++) //{ // m_RayIndex = i; // RayMethodParam rayParam = BuildCalcParam(sectionParam, i, gisData); // float[] rayLos = CalculateRayPathLoss(rayParam, sectionParam.PropagModel, ref isStopCalculator); // WriteSectionLos(ref losData, i, rayLos, sectionParam.SectionIndex); //} #endregion #region modified 2012.9.24 PeakInfoTemp peakInfo = new PeakInfoTemp(); for (int i = 0; i < rayNumber; i++)//开始遍历每条射线 每条射线取80个采样点 一共80*502个采样点 分别算出路损 { m_RayIndex = i; RayMethodParam rayParam = BuildCalcParam(sectionParam, i, gisData); float[] rayLos = CalculateRayPathLoss(rayParam, sectionParam.PropagModel, ref isStopCalculator); peakInfo.RayLosMatrix = rayLos; peakInfo.PeakDotMatrix = rayParam.PeakDotMatrix; peakInfo.PeakHeightMatrix = rayParam.PeakHeightMatrix; WriteSectionLos(ref losData, i, peakInfo, sectionParam.SectionIndex); } #endregion }
public DataDealVisitor(SectorPathLossData sectorPathLossData) { this.m_SelectorLossData = sectorPathLossData; }
/// <summary> /// 计算一个载波的一根天线的一个传播模型上的路损 /// </summary> /// <param name="param"></param> /// <param name="sectionIndex">传播模型的index</param> /// <param name="losData"></param> /// <param name="isStopCalculator"></param> private void CalcSectionLoss(PathLossCalcParam param, byte sectionIndex, ref SectorPathLossData losData, ref bool isStopCalculator) { SectionPathLossCalcParam param2 = param.SectionParamArray[sectionIndex]; IPathLossCalculator calcMethod = this.GetCalcMethod(param2); if (calcMethod != null) { calcMethod.CalculateSectionPathLoss(ref losData, param2, ref isStopCalculator); } }
//add by xujuan public void CalcBackhaulLos(PathLossCalcParam param, ref SectorPathLossData losData, ref bool isStopCalculator) { SectionPathLossCalcParam param2 = param.SectionParamArray[0]; Type type = param2.MacroToRelayPropModel.GetType(); IPathLossCalculator macroUECalcMethod = m_PLCalcCollection[type]; if (macroUECalcMethod != null) { macroUECalcMethod.CalculateBackhaulPathLoss(ref losData, param2, ref isStopCalculator); } }
/// <summary> /// 计算一个载波的一根天线上的路损 /// </summary> /// <param name="param"></param> /// <param name="losData"></param> /// <param name="sectionIndexs">传模的indexs</param> /// <param name="isStopCalculator"></param> public void CalcSectorLos(PathLossCalcParam param, ref SectorPathLossData losData, List<byte> sectionIndexs, ref bool isStopCalculator) { for (int i = 0; i < sectionIndexs.Count; i++) { this.CalcSectionLoss(param, sectionIndexs[i], ref losData, ref isStopCalculator); } }