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 中移動相關
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM