コード例 #1
0
 public override float[] CalculateRayPathLoss(RayMethodParam rayParam, IPropagationModel model, ref bool isStopCalculator)
 {
     RelayUEPropagationModel propModel = model as RelayUEPropagationModel;
     float[] rayLossArray = new float[rayParam.EndIndex - rayParam.StartIndex + 1];
     if (propModel == null||isStopCalculator)
         return rayLossArray;
     for (int i = 0; i < rayLossArray.Length; i++)
     {
         if (rayParam.TxEffHeight[i] == -32768 || rayParam.RxEffHeight[i] == -32768f)
         {
             rayLossArray[i] = float.MinValue;
         }
         else
         {
             float distance = GetDotDistance(rayParam.StartIndex,rayParam.CalcResolution, i);
             float prob = CalcProbability(propModel, distance);
             rayLossArray[i] = GetPathLoss(propModel, distance, prob);
         }
         if (base.m_Log4net.IsDebugEnabled)
         {
             string message = string.Concat(new object[] { 
                     DateTime.Now.ToString("G"), ",", rayParam.CellName, ",", rayParam.X, ",", rayParam.Y, ",", rayParam.TxEffHeight[0], ",", rayParam.RxEffHeight[i], ",",propModel.PropModelName, ",", base.m_RayIndex, ",", 
                     i, ",", rayParam.CalcResolution, ",,,,", rayLossArray[i], ",", rayLossArray[i]
                  });
             base.m_Log4net.Debug(message);
         }
     }
     return rayLossArray;
 }
コード例 #2
0
 public override float[] CalculateRayPathLoss(RayMethodParam rayParam, IPropagationModel model, ref bool isStopCalculator)
 {
     ITURPPropagationModel iTURPModel = model as ITURPPropagationModel;
     int startIndex = rayParam.StartIndex;
     float[] numArray = new float[(rayParam.EndIndex - startIndex) + 1];
     if (iTURPModel != null)
     {
         StructAntennaParam antennaGainParam = rayParam.AntennaGainParam;
         float calcResolution = rayParam.CalcResolution;
         float num5 = (float) Math.Log10((double) rayParam.Frequency);
         for (int i = 0; i < numArray.Length; i++)
         {
             if (isStopCalculator)
             {
                 return numArray;
             }
             if (rayParam.RxEffHeight[i] != -32768f)
             {
                 float num6;
                 if ((i + startIndex) == 0)
                 {
                     num6 = 0f;
                 }
                 else
                 {
                     num6 = (float) Math.Log10((double) ((i + startIndex) * rayParam.CalcResolution));
                 }
                 float num3 = (i + startIndex) * calcResolution;
                 numArray[i] = ((iTURPModel.K2 + (iTURPModel.K1 * num5)) + (iTURPModel.N * num6)) + this.GetLf(iTURPModel);
                 string message = string.Concat(new object[] { 
                     DateTime.Now.ToString("G"), ",", rayParam.CellName, ",", rayParam.X, ",", rayParam.Y, ",", rayParam.TxEffHeight[0], ",", rayParam.RxEffHeight[i], ",", iTURPModel.PropModelName, ",", base.m_RayIndex, ",", 
                     i, ",", rayParam.CalcResolution, ",,,,", numArray[i], ",", numArray[i]
                  });
                 if (base.m_Log4net.IsDebugEnabled)
                 {
                     base.m_Log4net.Debug(message);
                 }
             }
             else
             {
                 numArray[i] = float.MinValue;
             }
         }
     }
     return numArray;
 }
コード例 #3
0
ファイル: PathLossCalculator.cs プロジェクト: xiaoyj/Space
 /// <summary>
 /// 计算某一条射线上的路径损耗(未实现)
 /// </summary>
 /// <param name="rayParam"></param>
 /// <param name="model"></param>
 /// <param name="isStopCalculator"></param>
 /// <returns></returns>
 public virtual float[] CalculateRayPathLoss(RayMethodParam rayParam, IPropagationModel model, ref bool isStopCalculator)
 {
     throw new Exception("The method or operation is not implemented.");
 }
コード例 #4
0
ファイル: PathLossCalculator.cs プロジェクト: xiaoyj/Space
 /// <summary>
 /// 获取按射线计算的参数
 /// </summary>
 /// <param name="sectionParam"></param>
 /// <param name="rayIndex"></param>
 /// <param name="gisData"></param>
 /// <returns></returns>
 public virtual RayMethodParam BuildCalcParam(SectionPathLossCalcParam sectionParam, int rayIndex, Dictionary<DemDataType, GisPreLoadData> gisData)
 {
     int startIndex = sectionParam.GetStartPointIndex();
     int endIndex = sectionParam.GetEndPointIndex();
     RayMethodParam param = new RayMethodParam(startIndex, endIndex);
     param.CalcResolution = sectionParam.CalcResolution;
     param.Angle = rayIndex * sectionParam.GetAngleResolution();
     param.SectionIndex = sectionParam.SectionIndex;
     param.AntennaGainParam = sectionParam.AntennaGainParam;
     param.Frequency = sectionParam.Frequency;
     param.CellName = sectionParam.TransmitterName;
     param.AntHeight = sectionParam.TxAntennaHeight;
     param.X = sectionParam.X;
     param.Y = sectionParam.Y;
     return param;
 }
コード例 #5
0
        //public override float[] CalculateRayPathLoss(RayMethodParam param, IPropagationModel model, ref bool isStopCalculator)
        //{
        //    OkumuHataPropagationModel okumuHataPropagationModel = model as OkumuHataPropagationModel;
        //    float f = param.Frequency;
        //    int startIndex = param.StartIndex;
        //    int endIndex = param.EndIndex;
        //    float calcResolution = param.CalcResolution;
        //    float[] txEffHeight = param.TxEffHeight;
        //    float[] rxEffHeight = param.RxEffHeight;
        //    float[] numArray3 = new float[(endIndex - startIndex) + 1];
        //    if (okumuHataPropagationModel != null)
        //    {
        //        float num8 = this.CellSelect(f, okumuHataPropagationModel);
        //        float num7 = (float) Math.Log10((double) f);
        //        float num6 = (float) Math.Log10((double) txEffHeight[0]);
        //        StructAntennaParam antennaGainParam = param.AntennaGainParam;
        //        for (int i = 0; i < numArray3.Length; i++)
        //        {
        //            if (isStopCalculator)
        //            {
        //                return numArray3;
        //            }
        //            if ((param.TxEffHeight[i] != -32768f) && (param.RxEffHeight[i] != -32768f))
        //            {
        //                float num5 = this.GetDistance(startIndex, i, calcResolution);
        //                float num11 = this.AhrCalculate(f, rxEffHeight, i, okumuHataPropagationModel);
        //                float num9 = (i + startIndex) * calcResolution;
        //                float num12 = base.CalcDiffLoss(i * calcResolution, i);
        //                float num13 = ((((okumuHataPropagationModel.K1 + (okumuHataPropagationModel.K2 * num7)) - (okumuHataPropagationModel.K3 * num6)) + ((okumuHataPropagationModel.K4 - (okumuHataPropagationModel.K5 * num6)) * num5)) + num11) + num8;
        //                numArray3[i] = num13 + (num12 * okumuHataPropagationModel.KDiffraction);
        //                string message = string.Concat(new object[] { 
        //                    DateTime.Now.ToString("G"), ",", param.CellName, ",", param.X, ",", param.Y, ",", txEffHeight[0], ",", param.RxEffHeight[i], ",", okumuHataPropagationModel.PropModelName, ",", base.m_RayIndex, ",", 
        //                    i, ",", calcResolution, ",,,", num12, ",", num13, ",", numArray3[i]
        //                 });
        //                if (base.m_Log4net.IsDebugEnabled)
        //                {
        //                    base.m_Log4net.Debug(message);
        //                }
        //            }
        //            else
        //            {
        //                numArray3[i] = float.MinValue;
        //            }
        //        }
        //    }
        //    return numArray3;
        //}

        #endregion

        #region modified 2012.9.24

        public override float[] CalculateRayPathLoss(RayMethodParam param, IPropagationModel model, ref bool isStopCalculator)
        {
            OkumuHataPropagationModel okumuHataPropagationModel = model as OkumuHataPropagationModel;
            float f = param.Frequency;
            int startIndex = param.StartIndex;
            int endIndex = param.EndIndex;
            float calcResolution = param.CalcResolution;
            float[] txEffHeight = param.TxEffHeight;
            float[] rxEffHeight = param.RxEffHeight;
            float[] numArray3 = new float[(endIndex - startIndex) + 1];


            param.PeakHeightMatrix = new short[(endIndex - startIndex) + 1];
            param.PeakDotMatrix = new int[(endIndex - startIndex) + 1];
            PeakTempValue peakTempValue = new PeakTempValue();


            if (okumuHataPropagationModel != null)
            {
                float num8 = this.CellSelect(f, okumuHataPropagationModel);
                float num7 = (float)Math.Log10((double)f);
                float num6 = (float)Math.Log10((double)txEffHeight[0]);
                StructAntennaParam antennaGainParam = param.AntennaGainParam;
                for (int i = 0; i < numArray3.Length; i++)
                {
                    if (isStopCalculator)
                    {
                        return numArray3;
                    }
                    if ((param.TxEffHeight[i] != -32768f) && (param.RxEffHeight[i] != -32768f))
                    {
                        float num5 = this.GetDistance(startIndex, i, calcResolution);
                        float num11 = this.AhrCalculate(f, rxEffHeight, i, okumuHataPropagationModel);
                        float num9 = (i + startIndex) * calcResolution;


                        float num12 = base.CalcDiffLoss(i * calcResolution, i, peakTempValue);
                        param.PeakDotMatrix[i] = (int)peakTempValue.PeakDot;
                        param.PeakHeightMatrix[i] = peakTempValue.PeakHeight;


                        float num13 = ((((okumuHataPropagationModel.K1 + (okumuHataPropagationModel.K2 * num7)) - (okumuHataPropagationModel.K3 * num6)) + ((okumuHataPropagationModel.K4 - (okumuHataPropagationModel.K5 * num6)) * num5)) + num11) + num8;
                        numArray3[i] = num13 + (num12 * okumuHataPropagationModel.KDiffraction);
                        string message = string.Concat(new object[] { 
                            DateTime.Now.ToString("G"), ",", param.CellName, ",", param.X, ",", param.Y, ",", txEffHeight[0], ",", param.RxEffHeight[i], ",", okumuHataPropagationModel.PropModelName, ",", base.m_RayIndex, ",", 
                            i, ",", calcResolution, ",,,", num12, ",", num13, ",", numArray3[i]
                         });
                        if (base.m_Log4net.IsDebugEnabled)
                        {
                            base.m_Log4net.Debug(message);
                        }
                    }
                    else
                    {
                        numArray3[i] = float.MinValue;
                    }
                }
            }
            return numArray3;
        }
コード例 #6
0
        /// <summary>
        /// 计算射线上的点的路径损耗
        /// </summary>
        /// <param name="param"></param>
        /// <param name="model"></param>
        /// <param name="isStopCalculator"></param>
        /// <returns></returns>
        public override float[] CalculateRayPathLoss(RayMethodParam param, IPropagationModel model, ref bool isStopCalculator)
        {
            Dictionary<GeoXYPoint, float> results = new Dictionary<GeoXYPoint, float>();
            ITUR230PropagationModel ITUR230PropModel = model as ITUR230PropagationModel;
            float frequency = param.Frequency;//频率
            float height = param.AntHeight;//基站高度
            // float height = 0;
            int startIndex = param.StartIndex;
            param.PeakHeightMatrix = new short[(param.EndIndex - startIndex) + 1];
            param.PeakDotMatrix = new int[(param.EndIndex - startIndex) + 1];
            PeakTempValue peakTempValue = new PeakTempValue();
            GeoXYPoint sitePoint = new GeoXYPoint(param.X, param.Y);
            float[] pointsPathLossOnRay = new float[(param.EndIndex - startIndex) + 1];
            if (ITUR230PropModel != null)
            {

                float calcResolution = param.CalcResolution;
                for (int i = 0; i < pointsPathLossOnRay.Length; i++)
                {
                    if (isStopCalculator) return pointsPathLossOnRay;

                    if ((param.TxEffHeight[i] != -32768f) && (param.RxEffHeight[i] != -32768f))
                    {



                        GeoXYPoint calPoint = new GeoXYPoint(param.X + (i + startIndex) * param.CalcResolution * Math.Sin(param.Angle),
                                                             param.Y + (i + startIndex) * param.CalcResolution * Math.Cos(param.Angle));
                        double distance = GetDistance(calPoint, sitePoint);//每个点到基站的距离
                        param.PeakHeightMatrix[i] = peakTempValue.PeakHeight;
                        param.PeakDotMatrix[i] = (int)peakTempValue.PeakDot;
                        //pointsPathLossOnRay[i] = CalculatePointPathLossOnRayByITUR230(height, frequency, distance, ref isStopCalculator);//每个点到基站的路损计算
                        pointsPathLossOnRay[i] = (float)getLoss(230, distance / 1000, height, 10, 10) - k1;//getLoss(Double frequence, Double distance, Double height, Double G, Double Heff)
                        //frequence:频率,distance:距离,height:天线高度,G:天线增益,单位dB ,Heff:附近环境的平均高度,通过Gis获得?(典型场景:中心城市30m,郊区20m,农村10m?)
                        results.Add(calPoint, pointsPathLossOnRay[i]);

                    }

                }
            }
            return pointsPathLossOnRay;

        }