| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;namespace Ips.Library.Entity{    public class WarSatFreq    {        public WarSatFreq() { }        public WarSatFreq(long upFreq, long downFreq)        {            this.UpFreqHz = upFreq;            this.DownFreqHz = downFreq;        }        public long UpFreqHz { get; set; }        public long DownFreqHz { get; set; }        public double UpFreq { get; set; }        public double DownFreq { get; set; }        static Dictionary<long, long> _freqCache = new Dictionary<long, long>();        static Dictionary<double, double> _UpDownCache = new Dictionary<double, double>();        static Dictionary<double, double> _DownUpCahce = new Dictionary<double, double>();        public static long GetDownFreq(long upFreq)        {            if (upFreq == 0) return 0;            if (!_freqCache.ContainsKey(upFreq))            {                var freqItem = WarSatFreqData.FreqList                    .Select(m => new { AbsValue = Math.Abs(m.UpFreqHz - upFreq), m.UpFreqHz, m.DownFreqHz })                    .OrderBy(m => m.AbsValue)                    .FirstOrDefault();                if (freqItem == null) return 0;                var result = upFreq - (freqItem.UpFreqHz - freqItem.DownFreqHz);                _freqCache.Add(upFreq, result);            }            return _freqCache[upFreq];        }        public static double GetFreqDown(double freqUp)        {            if (freqUp == 0) return 0;            double freqDown = 0;            if (_UpDownCache.ContainsKey(freqUp))            {                freqDown = _UpDownCache[freqUp];            }            else            {                var freqItem = WarSatFreqData.FreqList                    .Select(m => new { AbsValue = Math.Abs(m.UpFreq - freqUp), m.UpFreq, m.DownFreq })                    .OrderBy(m => m.AbsValue)                    .FirstOrDefault();                if (freqItem != null)                {                    freqDown = Math.Round(freqUp - (freqItem.UpFreq - freqItem.DownFreq), 6);                    _UpDownCache[freqUp] = freqDown;                }            }            return freqDown;        }        public static double GetFreqUp(double freqDown)        {            if (freqDown == 0) return 0;            double freqUp = 0;            if (_DownUpCahce.ContainsKey(freqDown))            {                freqUp = _DownUpCahce[freqDown];            }            else            {                var freqItem = WarSatFreqData.FreqList.Select(m => new { AbsValue = Math.Abs(m.DownFreq - freqDown), m.UpFreq, m.DownFreq })                                .OrderBy(m => m.AbsValue)                                .FirstOrDefault();                if (freqItem != null)                {                    freqUp = Math.Round(freqDown + (freqItem.UpFreq - freqItem.DownFreq), 6);                    _DownUpCahce[freqDown] = freqUp;                }            }            return freqDown;        }    }    public static class WarSatFreqData    {        public const string FreqSrcList = @"310.75,269.75292.85,251.85302.865,249.265302.875,249.275302.885,249.285302.895,249.295302.9,249.3302.905,249.305302.915,249.315302.925,249.325302.935,249.335302.945,249.345302.95,249.35302.855,249.255302.955,249.355311.15,257.55316.955,243.855316.96,243.86316.975,243.875317,243.9317.01,243.91317.015,243.915317.025,243.925317.035,243.935317.045,243.945317.055,243.955307.75,254.15302.85,249.25302.845,249.245302.835,249.235302.625,249.025302.635,249.035302.645,249.045302.65,249.05302.655,249.055302.665,249.065302.675,249.075302.685,249.085302.695,249.095302.7,249.1302.705,249.105302.715,249.115302.725,249.125302.735,249.135302.745,249.145302.75,249.15302.755,249.155302.765,249.165302.775,249.175302.785,249.185302.795,249.195302.8,249.2302.805,249.205302.815,249.215302.825,249.225317.065,243.965317.075,243.975317.085,243.985317.09,243.99317.31,244.21317.315,244.215317.325,244.225296.35,255.35296.45,255.45296.55,255.55297.85,256.85297.95,256.95298.05,257.05298.15,257.15299.35,258.35299.45,258.45299.55,258.55299.65,258.65306.25,265.25306.35,265.35306.45,265.45306.55,265.55307.75,266.75307.85,266.85307.95,266.95308.05,267.05309.15,268.15309.25,268.25309.35,268.35317.305,244.205302.615,249.015317.3,244.2317.29,244.19317.095,243.995317.1,244317.105,244.005317.11,244.01317.115,244.015317.125,244.025317.135,244.035317.145,244.045317.155,244.055317.165,244.065317.175,244.075317.185,244.085317.19,244.09317.195,244.095317.2,244.1317.205,244.105317.21,244.11317.215,244.115317.225,244.125317.235,244.135317.245,244.145317.255,244.155317.265,244.165317.275,244.175317.285,244.185317.295,244.195302.605,249.005302.6,249302.595,248.995294.425,260.825294.45,260.85295.05,261.45295.075,261.475295.1,261.5295.125,261.525295.15,261.55295.175,261.575295.2,261.6295.225,261.625295.25,261.65295.275,261.675295.3,261.7295.325,261.725295.35,261.75295.375,261.775295.4,261.8295.425,261.825295.45,261.85295.475,261.875295.5,261.9295.525,261.925295.55,261.95295.65,262.05295.675,262.075294.4,260.8295.7,262.1294.375,260.775294.325,260.725292.95,251.95293.05,252.05293.15,252.15294.55,253.55294.65,253.65294.75,253.75294.85,253.85296.25,255.25310.85,269.85310.95,269.95293.95,260.35293.975,260.375294,260.4294.025,260.425294.05,260.45294.075,260.475294.1,260.5294.125,260.525294.15,260.55294.175,260.575294.2,260.6294.225,260.625294.25,260.65294.275,260.675294.3,260.7294.35,260.75309.45,268.45295.725,262.125295.775,262.175297.5,263.9297.525,263.925297.55,263.95297.575,263.975297.6,264297.625,264.025297.65,264.05302.445,248.845302.45,248.85302.455,248.855302.465,248.865302.475,248.875302.485,248.885302.495,248.895302.5,248.9302.505,248.905302.515,248.915302.525,248.925302.535,248.935302.545,248.945302.55,248.95302.555,248.955302.565,248.965302.575,248.975302.585,248.985297.475,263.875295.75,262.15297.45,263.85297.4,263.8295.8,262.2295.825,262.225295.85,262.25295.875,262.275295.9,262.3295.925,262.325295.95,262.35295.975,262.375296,262.4296.025,262.425296.05,262.45296.075,262.475296.1,262.5296.125,262.525296.15,262.55297.15,263.55297.175,263.575297.2,263.6297.225,263.625297.25,263.65297.275,263.675297.3,263.7297.325,263.725297.35,263.75297.375,263.775297.425,263.825310.65,269.65";        private static List<WarSatFreq> _freqList;        public static List<WarSatFreq> FreqList        {            get            {                if (_freqList == null)                {                    _freqList = new List<WarSatFreq>();                    using (var reader = new StringReader(FreqSrcList))                    {                        string line;                        while ((line = reader.ReadLine()) != null)                        {                            var upDownFreqArr = line.Split(',');                            if (upDownFreqArr.Length > 1)                            {                                var upfreq = decimal.Parse(upDownFreqArr[0]) * 1e6m;                                var downfreq = decimal.Parse(upDownFreqArr[1]) * 1e6m;                                var freqBssic = new WarSatFreq((long)upfreq, (long)downfreq);                                freqBssic.UpFreq = double.Parse(upDownFreqArr[0]);                                freqBssic.DownFreq = double.Parse(upDownFreqArr[1]);                                _freqList.Add(freqBssic);                            }                        }                    }                }                return _freqList;            }        }    }}
 |