NR LTE UMTS GSM CDMA TDS频点频率换算工具

V1.2 2018-07-10:

1,增加UMTS GSM CDMA TDS部分计算功能。

2,暂时CDMA 只支持BC0,WCDMA不支持additional 频点

3,下方代码在新的代码中已经完全修改,留着只是参考。

链接: https://pan.baidu.com/s/1Qlboo38--EEGGU4-hQu9tg 密码: 3xyg

V1.1 2018-6-12:

1,增加了NR部分频点频率计算。

2,增加输入band计算频点频率上下限功能。 

2018-5-13:代码稍微做了些修改,已经release出来分享在百度网盘,欢迎使用。

using System;
using System.Collections;
using System.Collections.Generic;

namespace Helloworld
{
    class Earfcn
    {
        #region 频点频率对应关系
        /// <summary>
        /// 下行频率频点对应关系,36141-e10
        /// </summary>
        private static double[,] lstFdlNdl =
        {
        {0,0,0},                    //Band0
        {2110,0,599},
        {1930,600,1199},
        {1805,1200,1949},
        {2110,1950,2399},
        {869,2400,2649},            //Band5
        {875,2650,2749},
        {2620,2750,3449},
        {925,3450,3799},
        {1844.9,3800,4149},
        {2110,4150,4749},           //Band10
        {1475.9,4750,4949},
        {729,5010,5179},
        {746,5180,5279},
        {758,5280,5379},
        {0,0,0},
        {0,0,0},
        {734,5730,5849},            //Band17
        {860,5850,5999},
        {875,6000,6149},
        {791,6150,6449},            //Band20
        {1495.9,6450,6599},
        {3510,6600,7399},
        {2180,7500,7699},
        {1525,7700,8039},
        {1930,8040,8689},           //Band25
        {859,8690,9039},
        {852,9040,9209},
        {758,9210,9659},
        {717,9660,9769},
        {2350,9770,9869},           //Band30
        {462.5,9870,9919},
        {1452,9920,10359},
        {1900,36000,36199},
        {2010,36200,36349},
        {1850,36350,36949},         //Band35
        {1930,36950,37549},
        {1910,37550,37749},
        {2570,37750,38249},
        {1880,38250,38649},
        {2300,38650,39649},         //Band40
        {2496,39650,41589},
        {3400,41590,43589},
        {3600,43590,45589},
        {703,45590,46589},
        {1447,46590,46789},         //Band45
        {5150,46790,54539},
        {5855,54540,55239},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {2110,65536,66435},         //Band65
        {2110,66436,67335},
        {738,67336,67535},
        {753,67536,67835},
        {2570,67836,68335},
        {1995,68336,68485}          //Band70
        };

        /// <summary>
        /// 上行频率频点对应关系,36141-e10
        /// </summary>
        static double[,] lstFulNul =
        {
        {0,0,0},                    //Band0
        {1920,18000,18599},
        {1850,18600,19199},
        {1710,19200,19949},
        {1710,19950,20399},
        {824,20400,20649},          //Band5
        {830,20650,20749},
        {2500,20750,21449},
        {880,21450,21799},
        {1749.9,21800,22149},
        {1710,22150,22749},         //Band10
        {1427.9,22750,22949},
        {699,23010,23179},
        {777,23180,23279},
        {788,23280,23379},
        {0,0,0},
        {0,0,0},
        {704,23730,23849},          //Band17
        {815,23850,23999},
        {830,24000,24149},
        {832,24150,24449},          //Band20
        {1447.9,24450,24599},
        {3410,24600,25399},
        {2000,25500,25699},
        {1626.5,25700,26039},
        {1850,26040,26689},         //Band25
        {814,26690,27039},
        {807,27040,27209},
        {703,27210,27659},
        {0,0,0},
        {2305,27660,27759},         //Band30
        {452.5,27760,27809},
        {0,0,0},
        {1900,36000,36199},
        {2010,36200,36349},
        {1850,36350,36949},         //Band35
        {1930,36950,37549},
        {1910,37550,37749},
        {2570,37750,38249},
        {1880,38250,38649},
        {2300,38650,39649},         //Band40
        {2496,39650,41589},
        {3400,41590,43589},
        {3600,43590,45589},
        {703,45590,46589},
        {1447,46590,46789},         //Band45
        {5150,46790,54539},
        {5855,54540,55239},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,0},
        {1920,131072,131971},       //Band65
        {1710,131972,132671},
        {0,0,0},
        {698,132672,132971},
        {0,0,0},
        {1695,132972,133221},       //Band70
        };
        #endregion 频点频率对应关系
        #region 通过频率获取其他信息
        /// <summary>
        /// 一次返回下行band 频率初始值 频点初始值,使用时需要注意返回值为ArrayList
        /// </summary>
        /// <param name="strearfcn">下行频率</param>
        /// <returns></returns>
        private static ArrayList dlfrequencyToBandFlowNlow(double _frequency)
        {
            ArrayList list = new ArrayList();
            for (int i = 0; i < lstFdlNdl.GetLongLength(0); i++)
            {
                if (_frequency > lstFdlNdl[i, 0] && _frequency < (lstFdlNdl[i, 0] + (lstFdlNdl[i, 2] - lstFdlNdl[i, 1]) / 10))
                {
                    list.Add(i);
                    list.Add(lstFdlNdl[i, 0]);
                    list.Add(lstFdlNdl[i, 1]);
                }
            }
            return list;
        }

        /// <summary>
        /// 一次性返回上行band 频率初始值 频点初始值,使用时需要注意返回值为ArrayList
        /// </summary>
        /// <param name="strearfcn">上行频点</param>
        /// <returns></returns>
        private static ArrayList ulfrequencyToBandFlowNlow(double _frequency)
        {
            ArrayList list = new ArrayList();
            for (int i = 0; i < lstFulNul.GetLongLength(0); i++)
            {
                if (_frequency > lstFulNul[i, 0] && _frequency < (lstFulNul[i, 0] + (lstFulNul[i, 2] - lstFulNul[i, 1]) / 10))
                {
                    list.Add(i);
                    list.Add(lstFulNul[i, 0]);
                    list.Add(lstFulNul[i, 1]);
                }
            }
            return list;
        }

        /// <summary>
        /// 根据下行频率计算下行频点
        /// </summary>
        /// <param name="_frequency">下行频率</param>
        /// <returns></returns>
        public static int[] GetearfcnDl(double _frequency)
        {
            ArrayList list = dlfrequencyToBandFlowNlow(_frequency);
            List<Int32> earfcns = new List<int>();
            for (int i = 1; i < list.Count; i += 3)
            {
                earfcns.Add(Convert.ToInt32(list[i + 1]) + (int)((_frequency - (double)list[i]) * 10));
            }
            return earfcns.ToArray();
        }

        /// <summary>
        /// 根据上行频率计算上行频点
        /// </summary>
        /// <param name="_frequency">上行频率</param>
        /// <returns></returns>
        public static int[] GetearfcnUl(double _frequency)
        {
            ArrayList list = ulfrequencyToBandFlowNlow(_frequency);
            List<Int32> earfcns = new List<int>();
            for (int i = 1; i < list.Count; i += 3)
            {
                earfcns.Add(Convert.ToInt32(list[i + 1]) + (int)((_frequency - (double)list[i]) * 10));
            }
            return earfcns.ToArray();
        }

        /// <summary>
        /// 根据下行频率计算Band
        /// </summary>
        /// <param name="_frequency"></param>
        /// <returns></returns>
        public static int[] GetBandByDlFre(double _frequency)
        {
            ArrayList list = dlfrequencyToBandFlowNlow(_frequency);
            ArrayList Bands = new ArrayList();
            for (int i = 0; i < list.Count; i += 3)
            {
                Bands.Add((int)list[i]);
            }
            return (int[])Bands.ToArray(typeof(Int32));
        }

        /// <summary>
        /// 根据上行频率计算Band
        /// </summary>
        /// <param name="_frequency"></param>
        /// <returns></returns>
        public static int[] GetBandByUlFre(double _frequency)
        {
            ArrayList list = ulfrequencyToBandFlowNlow(_frequency);
            ArrayList Bands = new ArrayList();
            for (int i = 0; i < list.Count; i += 3)
            {
                Bands.Add((int)list[i]);
            }
            return (int[])Bands.ToArray(typeof(Int32));
        }

        #endregion 通过频率获取其他信息
        #region 通过频点获取其他信息

        /// <summary>
        /// 一次返回下行band 频率初始值 频点初始值,使用时需要注意返回值为数组[band,起始频率,起始频点]
        /// </summary>
        /// <param name="strearfcn">下行频点</param>
        /// <returns></returns>
        private static double[] dlearfcnToBandFlowNlow(int _earfcn)
        {
            double[] list = new double[3];
            for (int i = 0; i < lstFulNul.GetLongLength(0); i++)
            {
                if (_earfcn > lstFdlNdl[i, 1] && _earfcn < lstFdlNdl[i, 2])
                {
                    list[0] = (double)i;
                    list[1] = lstFdlNdl[i, 0];
                    list[2] = lstFdlNdl[i, 1];
                }
            }
            return list;
        }

        /// <summary>
        /// 一次性返回上行band 频率初始值 频点初始值,使用时需要注意返回值为数组[band,起始频率,起始频点]
        /// </summary>
        /// <param name="strearfcn">上行频点</param>
        /// <returns></returns>
        private static double[] ulearfcnToBandFlowNlow(int _earfcn)
        {
            double[] list = new double[3];
            for (int i = 0; i < lstFulNul.GetLongLength(0); i++)
            {
                if (_earfcn > lstFulNul[i, 1] && _earfcn < lstFulNul[i, 2])
                {
                    list[0] = i;
                    list[1] = lstFulNul[i, 0];
                    list[2] = lstFulNul[i, 1];
                }
            }
            return list;
        }

        /// <summary>
        /// 根据下行频点获取物理频率
        /// </summary>
        /// <param name="_earfcn">LTE下行频点</param>
        /// <returns></returns>
        public static double GetFreDl(int _earfcn)
        {
            double[] list = dlearfcnToBandFlowNlow(_earfcn);
            double frequency = list[1] + (_earfcn - list[2]) / 10;
            return frequency;
        }

        /// <summary>
        /// 根据上行频点获取物理频率
        /// </summary>
        /// <param name="_earfcn">LTE上行频点</param>
        /// <returns></returns>
        public static double GetFreUl(int _earfcn)
        {
            double[] list = ulearfcnToBandFlowNlow(_earfcn);
            double frequency = list[1] + (_earfcn - list[2]) / 10;
            return frequency;
        }

        /// <summary>
        /// 根据下行频点获取Band
        /// </summary>
        /// <param name="_earfcn">LTE下行频点</param>
        /// <returns></returns>
        public static int GetBandByDlearfcn(int _earfcn)
        {
            double[] list = dlearfcnToBandFlowNlow(_earfcn);
            return (int)list[0];
        }

        /// <summary>
        /// 根据上行频点获取Band
        /// </summary>
        /// <param name="_earfcn">LTE上行频点</param>
        /// <returns></returns>
        public static int GetBandByUlearfcn(int _earfcn)
        {
            double[] list = ulearfcnToBandFlowNlow(_earfcn);
            return (int)list[0];
        }
        #endregion 通过频点获取其他信息
        #region 中移动相关
        /// <summary>
        /// 根据下行频点获取中移动规范子频段
        /// </summary>
        /// <param name="_earfcn">LTE下行中心频点</param>
        /// <returns></returns>
        public static string GetCmccBandByErcfcn(int _earfcn)
        {
            double frequency = GetFreDl(_earfcn);
            return GetCmccBandByFreDl(frequency);
        }

        /// <summary>
        /// 根据中移动频段划分,获取具体子频段
        /// 这里需要注意连续子频段之间有重叠,实际重叠部分不应该规划为中心频点
        /// </summary>
        /// <param name="_frequency">物理频率</param>
        /// <returns>子频段</returns>
        public static string GetCmccBandByFreDl(double _frequency)
        {
            string result = "other";
            if (_frequency > 2575 && _frequency < 2595)
                result = "D1";
            else if (_frequency > 2594.8 && _frequency < 2614.8)
                result = "D2";
            else if (_frequency > 2614.6 && _frequency < 2634.6)
                result = "D3";
            else if (_frequency > 2320 && _frequency < 2340)
                result = "E1";
            else if (_frequency > 2339.8 && _frequency < 2359.8)
                result = "E2";
            else if (_frequency > 2359.2 && _frequency < 2369.2)
                result = "E3";
            else if (_frequency > 1885 && _frequency < 1905)
                result = "F1";
            else if (_frequency > 1904.4 && _frequency < 1914.4)
                result = "F2";
            return result;
        }
        #endregion 中移动相关
    }
}
posted @ 2017-08-24 15:09  熙笑影  阅读(4198)  评论(6编辑  收藏  举报