WarSatFreq.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. namespace Ips.Library.Entity
  7. {
  8. public class WarSatFreq
  9. {
  10. public WarSatFreq() { }
  11. public WarSatFreq(long upFreq, long downFreq)
  12. {
  13. this.UpFreqHz = upFreq;
  14. this.DownFreqHz = downFreq;
  15. }
  16. public long UpFreqHz { get; set; }
  17. public long DownFreqHz { get; set; }
  18. public double UpFreq { get; set; }
  19. public double DownFreq { get; set; }
  20. static Dictionary<long, long> _freqCache = new Dictionary<long, long>();
  21. static Dictionary<double, double> _UpDownCache = new Dictionary<double, double>();
  22. static Dictionary<double, double> _DownUpCahce = new Dictionary<double, double>();
  23. public static long GetDownFreq(long upFreq)
  24. {
  25. if (upFreq == 0) return 0;
  26. if (!_freqCache.ContainsKey(upFreq))
  27. {
  28. var freqItem = WarSatFreqData.FreqList
  29. .Select(m => new { AbsValue = Math.Abs(m.UpFreqHz - upFreq), m.UpFreqHz, m.DownFreqHz })
  30. .OrderBy(m => m.AbsValue)
  31. .FirstOrDefault();
  32. if (freqItem == null) return 0;
  33. var result = upFreq - (freqItem.UpFreqHz - freqItem.DownFreqHz);
  34. _freqCache.Add(upFreq, result);
  35. }
  36. return _freqCache[upFreq];
  37. }
  38. public static double GetFreqDown(double freqUp)
  39. {
  40. if (freqUp == 0) return 0;
  41. double freqDown = 0;
  42. if (_UpDownCache.ContainsKey(freqUp))
  43. {
  44. freqDown = _UpDownCache[freqUp];
  45. }
  46. else
  47. {
  48. var freqItem = WarSatFreqData.FreqList
  49. .Select(m => new { AbsValue = Math.Abs(m.UpFreq - freqUp), m.UpFreq, m.DownFreq })
  50. .OrderBy(m => m.AbsValue)
  51. .FirstOrDefault();
  52. if (freqItem != null)
  53. {
  54. freqDown = Math.Round(freqUp - (freqItem.UpFreq - freqItem.DownFreq), 6);
  55. _UpDownCache[freqUp] = freqDown;
  56. }
  57. }
  58. return freqDown;
  59. }
  60. public static double GetFreqUp(double freqDown)
  61. {
  62. if (freqDown == 0) return 0;
  63. double freqUp = 0;
  64. if (_DownUpCahce.ContainsKey(freqDown))
  65. {
  66. freqUp = _DownUpCahce[freqDown];
  67. }
  68. else
  69. {
  70. var freqItem = WarSatFreqData.FreqList.Select(m => new { AbsValue = Math.Abs(m.DownFreq - freqDown), m.UpFreq, m.DownFreq })
  71. .OrderBy(m => m.AbsValue)
  72. .FirstOrDefault();
  73. if (freqItem != null)
  74. {
  75. freqUp = Math.Round(freqDown + (freqItem.UpFreq - freqItem.DownFreq), 6);
  76. _DownUpCahce[freqDown] = freqUp;
  77. }
  78. }
  79. return freqDown;
  80. }
  81. }
  82. public static class WarSatFreqData
  83. {
  84. public const string FreqSrcList = @"310.75,269.75
  85. 292.85,251.85
  86. 302.865,249.265
  87. 302.875,249.275
  88. 302.885,249.285
  89. 302.895,249.295
  90. 302.9,249.3
  91. 302.905,249.305
  92. 302.915,249.315
  93. 302.925,249.325
  94. 302.935,249.335
  95. 302.945,249.345
  96. 302.95,249.35
  97. 302.855,249.255
  98. 302.955,249.355
  99. 311.15,257.55
  100. 316.955,243.855
  101. 316.96,243.86
  102. 316.975,243.875
  103. 317,243.9
  104. 317.01,243.91
  105. 317.015,243.915
  106. 317.025,243.925
  107. 317.035,243.935
  108. 317.045,243.945
  109. 317.055,243.955
  110. 307.75,254.15
  111. 302.85,249.25
  112. 302.845,249.245
  113. 302.835,249.235
  114. 302.625,249.025
  115. 302.635,249.035
  116. 302.645,249.045
  117. 302.65,249.05
  118. 302.655,249.055
  119. 302.665,249.065
  120. 302.675,249.075
  121. 302.685,249.085
  122. 302.695,249.095
  123. 302.7,249.1
  124. 302.705,249.105
  125. 302.715,249.115
  126. 302.725,249.125
  127. 302.735,249.135
  128. 302.745,249.145
  129. 302.75,249.15
  130. 302.755,249.155
  131. 302.765,249.165
  132. 302.775,249.175
  133. 302.785,249.185
  134. 302.795,249.195
  135. 302.8,249.2
  136. 302.805,249.205
  137. 302.815,249.215
  138. 302.825,249.225
  139. 317.065,243.965
  140. 317.075,243.975
  141. 317.085,243.985
  142. 317.09,243.99
  143. 317.31,244.21
  144. 317.315,244.215
  145. 317.325,244.225
  146. 296.35,255.35
  147. 296.45,255.45
  148. 296.55,255.55
  149. 297.85,256.85
  150. 297.95,256.95
  151. 298.05,257.05
  152. 298.15,257.15
  153. 299.35,258.35
  154. 299.45,258.45
  155. 299.55,258.55
  156. 299.65,258.65
  157. 306.25,265.25
  158. 306.35,265.35
  159. 306.45,265.45
  160. 306.55,265.55
  161. 307.75,266.75
  162. 307.85,266.85
  163. 307.95,266.95
  164. 308.05,267.05
  165. 309.15,268.15
  166. 309.25,268.25
  167. 309.35,268.35
  168. 317.305,244.205
  169. 302.615,249.015
  170. 317.3,244.2
  171. 317.29,244.19
  172. 317.095,243.995
  173. 317.1,244
  174. 317.105,244.005
  175. 317.11,244.01
  176. 317.115,244.015
  177. 317.125,244.025
  178. 317.135,244.035
  179. 317.145,244.045
  180. 317.155,244.055
  181. 317.165,244.065
  182. 317.175,244.075
  183. 317.185,244.085
  184. 317.19,244.09
  185. 317.195,244.095
  186. 317.2,244.1
  187. 317.205,244.105
  188. 317.21,244.11
  189. 317.215,244.115
  190. 317.225,244.125
  191. 317.235,244.135
  192. 317.245,244.145
  193. 317.255,244.155
  194. 317.265,244.165
  195. 317.275,244.175
  196. 317.285,244.185
  197. 317.295,244.195
  198. 302.605,249.005
  199. 302.6,249
  200. 302.595,248.995
  201. 294.425,260.825
  202. 294.45,260.85
  203. 295.05,261.45
  204. 295.075,261.475
  205. 295.1,261.5
  206. 295.125,261.525
  207. 295.15,261.55
  208. 295.175,261.575
  209. 295.2,261.6
  210. 295.225,261.625
  211. 295.25,261.65
  212. 295.275,261.675
  213. 295.3,261.7
  214. 295.325,261.725
  215. 295.35,261.75
  216. 295.375,261.775
  217. 295.4,261.8
  218. 295.425,261.825
  219. 295.45,261.85
  220. 295.475,261.875
  221. 295.5,261.9
  222. 295.525,261.925
  223. 295.55,261.95
  224. 295.65,262.05
  225. 295.675,262.075
  226. 294.4,260.8
  227. 295.7,262.1
  228. 294.375,260.775
  229. 294.325,260.725
  230. 292.95,251.95
  231. 293.05,252.05
  232. 293.15,252.15
  233. 294.55,253.55
  234. 294.65,253.65
  235. 294.75,253.75
  236. 294.85,253.85
  237. 296.25,255.25
  238. 310.85,269.85
  239. 310.95,269.95
  240. 293.95,260.35
  241. 293.975,260.375
  242. 294,260.4
  243. 294.025,260.425
  244. 294.05,260.45
  245. 294.075,260.475
  246. 294.1,260.5
  247. 294.125,260.525
  248. 294.15,260.55
  249. 294.175,260.575
  250. 294.2,260.6
  251. 294.225,260.625
  252. 294.25,260.65
  253. 294.275,260.675
  254. 294.3,260.7
  255. 294.35,260.75
  256. 309.45,268.45
  257. 295.725,262.125
  258. 295.775,262.175
  259. 297.5,263.9
  260. 297.525,263.925
  261. 297.55,263.95
  262. 297.575,263.975
  263. 297.6,264
  264. 297.625,264.025
  265. 297.65,264.05
  266. 302.445,248.845
  267. 302.45,248.85
  268. 302.455,248.855
  269. 302.465,248.865
  270. 302.475,248.875
  271. 302.485,248.885
  272. 302.495,248.895
  273. 302.5,248.9
  274. 302.505,248.905
  275. 302.515,248.915
  276. 302.525,248.925
  277. 302.535,248.935
  278. 302.545,248.945
  279. 302.55,248.95
  280. 302.555,248.955
  281. 302.565,248.965
  282. 302.575,248.975
  283. 302.585,248.985
  284. 297.475,263.875
  285. 295.75,262.15
  286. 297.45,263.85
  287. 297.4,263.8
  288. 295.8,262.2
  289. 295.825,262.225
  290. 295.85,262.25
  291. 295.875,262.275
  292. 295.9,262.3
  293. 295.925,262.325
  294. 295.95,262.35
  295. 295.975,262.375
  296. 296,262.4
  297. 296.025,262.425
  298. 296.05,262.45
  299. 296.075,262.475
  300. 296.1,262.5
  301. 296.125,262.525
  302. 296.15,262.55
  303. 297.15,263.55
  304. 297.175,263.575
  305. 297.2,263.6
  306. 297.225,263.625
  307. 297.25,263.65
  308. 297.275,263.675
  309. 297.3,263.7
  310. 297.325,263.725
  311. 297.35,263.75
  312. 297.375,263.775
  313. 297.425,263.825
  314. 310.65,269.65";
  315. private static List<WarSatFreq> _freqList;
  316. public static List<WarSatFreq> FreqList
  317. {
  318. get
  319. {
  320. if (_freqList == null)
  321. {
  322. _freqList = new List<WarSatFreq>();
  323. using (var reader = new StringReader(FreqSrcList))
  324. {
  325. string line;
  326. while ((line = reader.ReadLine()) != null)
  327. {
  328. var upDownFreqArr = line.Split(',');
  329. if (upDownFreqArr.Length > 1)
  330. {
  331. var upfreq = decimal.Parse(upDownFreqArr[0]) * 1e6m;
  332. var downfreq = decimal.Parse(upDownFreqArr[1]) * 1e6m;
  333. var freqBssic = new WarSatFreq((long)upfreq, (long)downfreq);
  334. freqBssic.UpFreq = double.Parse(upDownFreqArr[0]);
  335. freqBssic.DownFreq = double.Parse(upDownFreqArr[1]);
  336. _freqList.Add(freqBssic);
  337. }
  338. }
  339. }
  340. }
  341. return _freqList;
  342. }
  343. }
  344. }
  345. }