SimUtil.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using Ips.Library.Basic;
  2. using Ips.LocAlgorithm;
  3. using Ips.Sim.Interops;
  4. using Ips.Sim.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Ips.Sim
  11. {
  12. public static class SimUtil
  13. {
  14. public static double[] GenSignalFile(string folder, long fs, double timeLen, double[] pos, double[] dfs, SimSatInfo mainSat, List<SimSatInfo> adjaSats, double errRange = 0, bool hasRef = false, double[] refLla = null, long refFs = 0)
  15. {
  16. if (mainSat == null) throw new ArgumentNullException(nameof(mainSat));
  17. if (adjaSats.IsNullOrEmpty()) throw new ArgumentNullException(nameof(adjaSats));
  18. DirectoryUtil.CreateIfNotExists(folder);
  19. string mainFile = Path.Combine(folder, mainSat.FileName);
  20. var timeLenMs = Convert.ToInt32(timeLen * 1e3);
  21. var srcPos = new double[] { pos[0], pos[1], 0 };
  22. double[] dts = new double[4];
  23. int errDt = 0;
  24. if (errRange > 1e-6)
  25. {
  26. var rd = new Random();
  27. var rdVal = (errRange / 111).E6();
  28. var errLon = rd.Next(-rdVal, rdVal).E6m();
  29. var errLat = rd.Next(-rdVal, rdVal).E6m();
  30. pos[0] += errLon / 3;
  31. pos[1] += errLat;
  32. }
  33. if (!hasRef)
  34. {
  35. if (adjaSats.Count == 1)
  36. {
  37. var adjaSat = adjaSats[0];
  38. string adjaFile = Path.Combine(folder, adjaSat.FileName);
  39. SignalEmulationApi.genSatSignal(mainSat.SatEph, adjaSat.SatEph, mainSat.RecGeod, adjaSat.RecGeod, pos, fs, timeLenMs, mainFile, adjaFile, dts);
  40. }
  41. else
  42. {
  43. var adja1Sat = adjaSats[0];
  44. var adja2Sat = adjaSats[1];
  45. string adja1File = Path.Combine(folder, adja1Sat.FileName);
  46. string adja2File = Path.Combine(folder, adja2Sat.FileName);
  47. double[] mainEph = mainSat.SatEph, adja1Eph = adja1Sat.SatEph, adja2Eph = adja2Sat.SatEph;
  48. double[] mainRec = mainSat.RecGeod, adja1Rec = adja1Sat.RecGeod, adja2Rec = adja2Sat.RecGeod;
  49. //double[] dfs = new[] { tarDf1, tarDf2 };
  50. SignalEmulationApi.genSatSignals(mainEph, adja1Eph, adja2Eph, mainRec, adja1Rec, adja2Rec, pos, fs, timeLenMs, errDt, dfs, mainFile, adja1File, adja2File, dts);
  51. //var dtll1 = GeoUtil.CalcDtoCenter(pos, mainEph, adja1Eph, mainRec, adja1Rec);
  52. //var dtll2 = GeoUtil.CalcDtoCenter(pos, mainEph, adja2Eph, mainRec, adja2Rec);
  53. //var dttar1 = -dts[0] * 1e6;
  54. //var dttar2 = -dts[1] * 1e6;
  55. //var dtll = GeoUtil.CalcDtoCenter(pos, mainSat.SatEph, adja1Sat.SatEph, mainSat.RecGeod, adja1Sat.RecGeod);
  56. //var dttar1 = dts[0];
  57. //var dttar2 = dts[1];
  58. //var dttar1 = 4378;
  59. //var dttar2 = 4126;
  60. //var posResult1 = Task.Run(() => LocUtil.X3(dttar1, dttar2, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
  61. //var posResult2 = Task.Run(() => LocUtil.X3(dttar2, dttar1, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
  62. //var posResult1 = Task.Run(() => LocUtil.X3(dtll1, dtll2, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
  63. }
  64. }
  65. else
  66. {
  67. var adja1Sat = adjaSats[0];
  68. var adja2Sat = adjaSats[1];
  69. string adja1File = Path.Combine(folder, adja1Sat.FileName);
  70. string adja2File = Path.Combine(folder, adja2Sat.FileName);
  71. string refMainFile = Path.Combine(folder, mainSat.RefFileName);
  72. string refAdja1File = Path.Combine(folder, adja1Sat.RefFileName);
  73. string refAdja2File = Path.Combine(folder, adja2Sat.RefFileName);
  74. double[] mainEph = mainSat.SatEph, adja1Eph = adja1Sat.SatEph, adja2Eph = adja2Sat.SatEph;
  75. double[] mainRec = mainSat.RecGeod, adja1Rec = adja1Sat.RecGeod, adja2Rec = adja2Sat.RecGeod;
  76. //double[] dfs = new[] { tarDf1, tarDf2, refDf1, refDf2 };
  77. SignalEmulationApi.genSatSignalsWithRef(mainEph, adja1Eph, adja2Eph, mainRec, adja1Rec, adja2Rec, pos, refLla, fs, refFs, timeLenMs, errDt, dfs, mainFile, adja1File, adja2File, refMainFile, refAdja1File, refAdja2File, dts);
  78. //var dttar1 = -dts[0] * 1e6;
  79. //var dttar2 = -dts[1] * 1e6;
  80. //var dtref1 = -dts[2] * 1e6;
  81. //var dtref2 = -dts[3] * 1e6;
  82. //var dttar3 = dtref1 - dttar1;
  83. //var dtref3 = dtref2 - dttar2;
  84. //var dt1 = Task.Run(() => Loc32Util.CalcDt(pos, mainEph, adja1Eph, mainRec, adja1Rec, refLla).Result).Result;
  85. //var dt2 = Task.Run(() => Loc32Util.CalcDt(pos, mainEph, adja2Eph, mainRec, adja2Rec, refLla).Result).Result;
  86. //var posResult = Task.Run(() => LocUtil.X3Ref(dttar1, dttar2, dtref1, dtref2, refLla, refLla, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
  87. //var posResult1 = Task.Run(() => Loc32Util.X3Ref(dttar1, dttar2, dtref1, dtref2, refLla, refLla, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
  88. //var dis1 = GeoUtil.DistinceLla(pos, posResult.Result1.ToArray());
  89. //var dis2 = GeoUtil.DistinceLla(pos, posResult1.Result2.ToArray());
  90. }
  91. return dts.Select(m => -m).ToArray();
  92. }
  93. private static string GetSatSignalsWithRefArg(double[] majorSat, double[] minorSat1, double[] minorSat2, double[] majorRecv, double[] minorRecv1, double[] minorRecv2, double[] tarPos, double[] refPos, long fsample, int tlenms, int dtErrRange, string fmajor, string fminor1, string fminor2, string frmajor, string frminor1, string frminor2, double[] res)
  94. {
  95. return "";
  96. }
  97. }
  98. }