示例#1
0
 public void CalcBackhaulLos(PathLossCalcParam param, ref SectorPathLossData losData, ref bool isStopCalculator)
 {
     throw new NotImplementedException();
 }
示例#2
0
        /// <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);
            }
        }
示例#3
0
 public void CalcSectorLos(PathLossCalcParam param, ref SectorPathLossData losData, List<byte> sectionIndexs, ref bool isStopCalc)
 {
     throw new NotImplementedException();
 }
示例#4
0
 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]);
     }
 }
示例#5
0
        /// <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]);
            }
        }
示例#6
0
        /// <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
        }
示例#7
0
 public DataDealVisitor(SectorPathLossData sectorPathLossData)
 {
     this.m_SelectorLossData = sectorPathLossData;
 }
示例#8
0
 /// <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);
     }
 }
示例#9
0
 //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);
     }
 }
示例#10
0
 /// <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);
     }
 }