123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using Ips.Library.Basic;
- using Ips.LocAlgorithm;
- using Ips.Sim.Interops;
- using Ips.Sim.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Ips.Sim
- {
- public static class SimUtil
- {
- 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)
- {
- if (mainSat == null) throw new ArgumentNullException(nameof(mainSat));
- if (adjaSats.IsNullOrEmpty()) throw new ArgumentNullException(nameof(adjaSats));
- DirectoryUtil.CreateIfNotExists(folder);
- string mainFile = Path.Combine(folder, mainSat.FileName);
- var timeLenMs = Convert.ToInt32(timeLen * 1e3);
- var srcPos = new double[] { pos[0], pos[1], 0 };
- double[] dts = new double[4];
- int errDt = 0;
- if (errRange > 1e-6)
- {
- var rd = new Random();
- var rdVal = (errRange / 111).E6();
- var errLon = rd.Next(-rdVal, rdVal).E6m();
- var errLat = rd.Next(-rdVal, rdVal).E6m();
- pos[0] += errLon / 3;
- pos[1] += errLat;
- }
- if (!hasRef)
- {
- if (adjaSats.Count == 1)
- {
- var adjaSat = adjaSats[0];
- string adjaFile = Path.Combine(folder, adjaSat.FileName);
- SignalEmulationApi.genSatSignal(mainSat.SatEph, adjaSat.SatEph, mainSat.RecGeod, adjaSat.RecGeod, pos, fs, timeLenMs, mainFile, adjaFile, dts);
- }
- else
- {
- var adja1Sat = adjaSats[0];
- var adja2Sat = adjaSats[1];
- string adja1File = Path.Combine(folder, adja1Sat.FileName);
- string adja2File = Path.Combine(folder, adja2Sat.FileName);
- double[] mainEph = mainSat.SatEph, adja1Eph = adja1Sat.SatEph, adja2Eph = adja2Sat.SatEph;
- double[] mainRec = mainSat.RecGeod, adja1Rec = adja1Sat.RecGeod, adja2Rec = adja2Sat.RecGeod;
- //double[] dfs = new[] { tarDf1, tarDf2 };
- SignalEmulationApi.genSatSignals(mainEph, adja1Eph, adja2Eph, mainRec, adja1Rec, adja2Rec, pos, fs, timeLenMs, errDt, dfs, mainFile, adja1File, adja2File, dts);
- //var dtll1 = GeoUtil.CalcDtoCenter(pos, mainEph, adja1Eph, mainRec, adja1Rec);
- //var dtll2 = GeoUtil.CalcDtoCenter(pos, mainEph, adja2Eph, mainRec, adja2Rec);
- //var dttar1 = -dts[0] * 1e6;
- //var dttar2 = -dts[1] * 1e6;
- //var dtll = GeoUtil.CalcDtoCenter(pos, mainSat.SatEph, adja1Sat.SatEph, mainSat.RecGeod, adja1Sat.RecGeod);
- //var dttar1 = dts[0];
- //var dttar2 = dts[1];
- //var dttar1 = 4378;
- //var dttar2 = 4126;
- //var posResult1 = Task.Run(() => LocUtil.X3(dttar1, dttar2, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
- //var posResult2 = Task.Run(() => LocUtil.X3(dttar2, dttar1, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
- //var posResult1 = Task.Run(() => LocUtil.X3(dtll1, dtll2, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
- }
- }
- else
- {
- var adja1Sat = adjaSats[0];
- var adja2Sat = adjaSats[1];
- string adja1File = Path.Combine(folder, adja1Sat.FileName);
- string adja2File = Path.Combine(folder, adja2Sat.FileName);
- string refMainFile = Path.Combine(folder, mainSat.RefFileName);
- string refAdja1File = Path.Combine(folder, adja1Sat.RefFileName);
- string refAdja2File = Path.Combine(folder, adja2Sat.RefFileName);
- double[] mainEph = mainSat.SatEph, adja1Eph = adja1Sat.SatEph, adja2Eph = adja2Sat.SatEph;
- double[] mainRec = mainSat.RecGeod, adja1Rec = adja1Sat.RecGeod, adja2Rec = adja2Sat.RecGeod;
- //double[] dfs = new[] { tarDf1, tarDf2, refDf1, refDf2 };
- SignalEmulationApi.genSatSignalsWithRef(mainEph, adja1Eph, adja2Eph, mainRec, adja1Rec, adja2Rec, pos, refLla, fs, refFs, timeLenMs, errDt, dfs, mainFile, adja1File, adja2File, refMainFile, refAdja1File, refAdja2File, dts);
- //var dttar1 = -dts[0] * 1e6;
- //var dttar2 = -dts[1] * 1e6;
- //var dtref1 = -dts[2] * 1e6;
- //var dtref2 = -dts[3] * 1e6;
- //var dttar3 = dtref1 - dttar1;
- //var dtref3 = dtref2 - dttar2;
- //var dt1 = Task.Run(() => Loc32Util.CalcDt(pos, mainEph, adja1Eph, mainRec, adja1Rec, refLla).Result).Result;
- //var dt2 = Task.Run(() => Loc32Util.CalcDt(pos, mainEph, adja2Eph, mainRec, adja2Rec, refLla).Result).Result;
- //var posResult = Task.Run(() => LocUtil.X3Ref(dttar1, dttar2, dtref1, dtref2, refLla, refLla, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
- //var posResult1 = Task.Run(() => Loc32Util.X3Ref(dttar1, dttar2, dtref1, dtref2, refLla, refLla, mainRec, adja1Rec, mainRec, adja2Rec, mainEph, adja1Eph, mainEph, adja2Eph)).Result.Result;
- //var dis1 = GeoUtil.DistinceLla(pos, posResult.Result1.ToArray());
- //var dis2 = GeoUtil.DistinceLla(pos, posResult1.Result2.ToArray());
- }
- return dts.Select(m => -m).ToArray();
- }
- 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)
- {
- return "";
- }
- }
- }
|