|
@@ -78,6 +78,7 @@ namespace X2D1NoRefTaskServer54.Service
|
|
|
}
|
|
|
Directory.CreateDirectory("DdcDir");
|
|
|
Directory.CreateDirectory(PosResDir);
|
|
|
+ Directory.CreateDirectory(StateDir);
|
|
|
|
|
|
try
|
|
|
{
|
|
@@ -203,436 +204,200 @@ namespace X2D1NoRefTaskServer54.Service
|
|
|
var sig = sigs.FirstOrDefault(p => p.FreqDownHz == (int)(group.Key * 1e6));
|
|
|
|
|
|
if (cts.IsCancellationRequested) return;
|
|
|
- if (useGpuCg)
|
|
|
- {
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估开始,共{sig.Slots.Slots.Count}个突发...");
|
|
|
- sw.Start();
|
|
|
- List<GpuCgResponseDto> data1 = new List<GpuCgResponseDto>();
|
|
|
- List<GpuCgResponseDto> data2 = new List<GpuCgResponseDto>();
|
|
|
- foreach (var item in sig.Slots.Slots)
|
|
|
- {
|
|
|
- string f1 = $"tmp\\{Path.GetFileNameWithoutExtension(ch0File.File)}_{item.StartPoint}_{item.Len}.dat";
|
|
|
- string f2 = $"tmp\\{Path.GetFileNameWithoutExtension(ch1File.File)}_{item.StartPoint}_{item.Len}.dat";
|
|
|
- string f3 = $"tmp\\{Path.GetFileNameWithoutExtension(ch2File.File)}_{item.StartPoint}_{item.Len}.dat";
|
|
|
- using (FileStream fs = new FileStream(ch0File.File, FileMode.Open))
|
|
|
- {
|
|
|
- byte[] data = new byte[item.Len * 4];
|
|
|
- fs.Position = item.StartPoint * 4;
|
|
|
- fs.Read(data, 0, data.Length);
|
|
|
- File.WriteAllBytes(f1, data);
|
|
|
- }
|
|
|
- using (FileStream fs = new FileStream(ch1File.File, FileMode.Open))
|
|
|
- {
|
|
|
- byte[] data = new byte[item.Len * 4];
|
|
|
- fs.Position = item.StartPoint * 4;
|
|
|
- fs.Read(data, 0, data.Length);
|
|
|
- File.WriteAllBytes(f2, data);
|
|
|
- }
|
|
|
- using (FileStream fs = new FileStream(ch2File.File, FileMode.Open))
|
|
|
- {
|
|
|
- byte[] data = new byte[item.Len * 4];
|
|
|
- fs.Position = item.StartPoint * 4;
|
|
|
- fs.Read(data, 0, data.Length);
|
|
|
- File.WriteAllBytes(f3, data);
|
|
|
- }
|
|
|
- string mainSlotFile = await HttpHelper.UploadFileAsync(f1, baseUrl, token: cts.Token);//主星文件
|
|
|
- string adja1SlotFile = await HttpHelper.UploadFileAsync(f2, baseUrl, token: cts.Token);//邻1星文件
|
|
|
- string adja2SlotFile = await HttpHelper.UploadFileAsync(f3, baseUrl, token: cts.Token);//邻2星文件
|
|
|
- File.Delete(f1);
|
|
|
- File.Delete(f2);
|
|
|
- File.Delete(f3);
|
|
|
- var gpudto = new GpuCgRequestDto()
|
|
|
- {
|
|
|
- dtCenter = 0,
|
|
|
- dtRange = 40000,
|
|
|
- file1 = mainSlotFile,
|
|
|
- file2 = adja1SlotFile,
|
|
|
- samplingRate = ch0File.Fs,
|
|
|
- smpCount = 0,
|
|
|
- snrThreshold = 15
|
|
|
- };
|
|
|
- var result1 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
|
|
|
- if (result1.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星GPU参估出错.{result1.msg}.突发位置{item.StartPoint}-{item.Len}");
|
|
|
- continue;
|
|
|
- }
|
|
|
- var data1First = result1.data.First();
|
|
|
- data1First.TimeSeconds = item.TimeSeconds;
|
|
|
- data1.Add(data1First);
|
|
|
- gpudto = new GpuCgRequestDto()
|
|
|
- {
|
|
|
- dtCenter = 0,
|
|
|
- dtRange = 40000,
|
|
|
- file1 = mainSlotFile,
|
|
|
- file2 = adja2SlotFile,
|
|
|
- samplingRate = ch0File.Fs,
|
|
|
- smpCount = 0,
|
|
|
- snrThreshold = 15
|
|
|
- };
|
|
|
- var result2 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
|
|
|
- if (result2.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星GPU参估出错.{result2.msg}.突发位置{item.StartPoint}-{item.Len}");
|
|
|
- continue;
|
|
|
- }
|
|
|
- var data2First = result2.data.First();
|
|
|
- data2First.TimeSeconds = item.TimeSeconds;
|
|
|
- data2.Add(data2First);
|
|
|
- }
|
|
|
- sw.Stop();
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
|
|
|
- string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
|
|
|
- var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
|
|
|
- var signaldto = new SignalProcDto()
|
|
|
- {
|
|
|
- File = mainFile,
|
|
|
- Fs = ch0File.Fs,
|
|
|
- Smps = smpPositions,
|
|
|
- };
|
|
|
- var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
|
|
|
- if (signalResult.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
|
|
|
- return;
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
|
|
|
+ sw.Start();
|
|
|
+ string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
|
|
|
+ string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
|
|
|
+ string cdbFile = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//地面信号文件
|
|
|
+ var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
|
|
|
+ var cgDto = new CpuCgMultiDto()
|
|
|
+ {
|
|
|
+ dtCenter = 0,
|
|
|
+ dtRange = 40000,
|
|
|
+ file1 = mainFile,
|
|
|
+ file2 = adja1File,
|
|
|
+ samplingRate = ch0File.Fs,
|
|
|
+ smpPositions = smpPositions,
|
|
|
+ snrThreshold = 15,
|
|
|
+ };
|
|
|
+ var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
+ if (result1.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result1.msg}");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ cgDto = new CpuCgMultiDto()
|
|
|
+ {
|
|
|
+ dtCenter = 260000,
|
|
|
+ dtRange = 50000,
|
|
|
+ file1 = mainFile,
|
|
|
+ file2 = cdbFile,
|
|
|
+ samplingRate = ch0File.Fs,
|
|
|
+ smpPositions = smpPositions,
|
|
|
+ snrThreshold = 15,
|
|
|
+ };
|
|
|
+ var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
+ if (result2.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估出错.{result2.msg}");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sw.Stop();
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
+ var signaldto = new SignalProcDto()
|
|
|
+ {
|
|
|
+ File = mainFile,
|
|
|
+ Fs = ch0File.Fs,
|
|
|
+ Smps = smpPositions,
|
|
|
+ };
|
|
|
+ var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
|
|
|
+ if (signalResult.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
|
|
|
+ return;
|
|
|
|
|
|
- }
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
- if (data1.Count != data2.Count || data1.Count != sig.Slots.Slots.Count)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
|
|
|
- return;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if (data1.Count != data2.Count || data1.Count != signalResult.data.Count)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
|
|
|
- return;
|
|
|
- }
|
|
|
- sw.Start();
|
|
|
- for (int i = 0; i < data1.Count; i++)
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估完成");
|
|
|
+ var data1 = result1.data;
|
|
|
+ var data2 = result2.data;
|
|
|
+ if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (data1.Count != signalResult.data.Count)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sw.Start();
|
|
|
+ for (int i = 0; i < data1.Count; i++)
|
|
|
+ {
|
|
|
+ try
|
|
|
{
|
|
|
- try
|
|
|
+ if (cts.IsCancellationRequested) break;
|
|
|
+ X2D1NoParPosDto x21d = new X2D1NoParPosDto()
|
|
|
{
|
|
|
- if (cts.IsCancellationRequested) break;
|
|
|
- X2D1NoParPosDto x21d = new X2D1NoParPosDto()
|
|
|
- {
|
|
|
- TaskID = dto.ID,
|
|
|
- //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
|
|
|
- SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
- MainCode = MainSatCode,
|
|
|
- AdjaCode = Adja1SatCode,
|
|
|
- MainX = MainSatXYZ[0],
|
|
|
- MainY = MainSatXYZ[1],
|
|
|
- MainZ = MainSatXYZ[2],
|
|
|
- AdjaX = Adja1SatXYZ[0],
|
|
|
- AdjaY = Adja1SatXYZ[1],
|
|
|
- AdjaZ = Adja1SatXYZ[2],
|
|
|
- SxDto = PosDtoFactor * data1[i].Dt,
|
|
|
- SxDfo = data1[i].Df,
|
|
|
- SxSnr = data1[i].Snr,
|
|
|
- XdDto = PosDtoFactor * data2[i].Dt,
|
|
|
- XdDfo = data2[i].Df,
|
|
|
- XdSnr = data2[i].Snr,
|
|
|
- SatTxLon = dto.CapLon,
|
|
|
- SatTxLat = dto.CapLat,
|
|
|
- CdbTxLon = dto.CdbLon,
|
|
|
- CdbTxLat = dto.CdbLat,
|
|
|
- FreqDown = ch0File.FreqDownMHz * 1e6,
|
|
|
- FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
|
|
|
- CheckRes = new CheckResDto()
|
|
|
- {
|
|
|
- FileName = Path.GetFileName(ch0File.File),
|
|
|
- SmpStart = sig.Slots.Slots[i].StartPoint,
|
|
|
- SmpCount = sig.Slots.Slots[i].Len,
|
|
|
- PosCheckType = EnumPosCheckTypeDto.DAMA,
|
|
|
- }
|
|
|
- };
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
|
|
|
- if (result.code != 200)
|
|
|
+ TaskID = dto.ID,
|
|
|
+ //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
|
|
|
+ SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
+ MainCode = MainSatCode,
|
|
|
+ AdjaCode = Adja1SatCode,
|
|
|
+ MainX = MainSatXYZ[0],
|
|
|
+ MainY = MainSatXYZ[1],
|
|
|
+ MainZ = MainSatXYZ[2],
|
|
|
+ AdjaX = Adja1SatXYZ[0],
|
|
|
+ AdjaY = Adja1SatXYZ[1],
|
|
|
+ AdjaZ = Adja1SatXYZ[2],
|
|
|
+ SxDto = PosDtoFactor * data1[i].Dt,
|
|
|
+ SxDfo = data1[i].Df,
|
|
|
+ SxSnr = data1[i].Snr,
|
|
|
+ XdDto = PosDtoFactor * data2[i].Dt,
|
|
|
+ XdDfo = data2[i].Df,
|
|
|
+ XdSnr = data2[i].Snr,
|
|
|
+ SatTxLon = dto.CapLon,
|
|
|
+ SatTxLat = dto.CapLat,
|
|
|
+ CdbTxLon = dto.CdbLon,
|
|
|
+ CdbTxLat = dto.CdbLat,
|
|
|
+ FreqDown = ch0File.FreqDownMHz * 1e6,
|
|
|
+ FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
|
|
|
+ CheckRes = new CheckResDto()
|
|
|
{
|
|
|
- LogHelper.Error($"【任务{dto.ID}】-信号{group.Key}MHz-{adTime:yyyyMMddHHmmss}时刻第{i + 1}个突发定位异常.{result.msg}");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var posRes = result.data;
|
|
|
- double posLon = posRes.PosLon;
|
|
|
- double posLat = posRes.PosLat;
|
|
|
- if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
|
|
|
- {
|
|
|
- posLon = 0;
|
|
|
- posLat = 0;
|
|
|
- }
|
|
|
- ErrEllipseResDto errRes = new ErrEllipseResDto();
|
|
|
- if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
|
|
|
- {
|
|
|
-#warning 误差椭圆没有提供无参算法 暂时使用有参
|
|
|
- var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
|
|
|
- {
|
|
|
- MainX = MainSatXYZ[0],
|
|
|
- MainY = MainSatXYZ[1],
|
|
|
- MainZ = MainSatXYZ[2],
|
|
|
- AdjaX = Adja1SatXYZ[0],
|
|
|
- AdjaY = Adja1SatXYZ[1],
|
|
|
- AdjaZ = Adja1SatXYZ[2],
|
|
|
- CdbLon = dto.CdbLon,
|
|
|
- CdbLat = dto.CdbLat,
|
|
|
- RefLon = 0,
|
|
|
- RefLat = 0,
|
|
|
- PosLon = posLon,
|
|
|
- PosLat = posLat,
|
|
|
- OutputErrPoint = false,
|
|
|
- DtoErrus = DtoErrus,
|
|
|
- EphErr = EphErrm,
|
|
|
- };
|
|
|
- //ErrorEllipse2X1DNoRef
|
|
|
- var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
|
|
|
- errRes = errResRsp.data;
|
|
|
- }
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.Append($"{x21d.SigTime:yyyy}\t");
|
|
|
- sb.Append($"{x21d.SigTime:MM}\t");
|
|
|
- sb.Append($"{x21d.SigTime:dd}\t");
|
|
|
- sb.Append($"{x21d.SigTime:HH}\t");
|
|
|
- sb.Append($"{x21d.SigTime:mm}\t");
|
|
|
- sb.Append($"{x21d.SigTime:ss}\t");
|
|
|
- sb.Append($"{x21d.SigTime:fff}\t");
|
|
|
- sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
|
|
|
- sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
|
|
|
- sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
|
|
|
- sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
|
|
|
- sb.Append($"{0:D4}\t");//目标序号
|
|
|
- sb.Append($"res\t");
|
|
|
- sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdSnr * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
|
|
|
- sb.Append($"{(long)errRes.LongRadius:D8}\t");//长轴m
|
|
|
- sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
|
|
|
- sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
|
|
|
- sb.Append($"{data1.Count:D2}\t");//时隙属性
|
|
|
- sb.Append($"{1}\t");//所属卫星
|
|
|
- sb.Append($"{950:D3}\t");//置信度
|
|
|
- sb.Append($"{3}\t");//定位体制(星地=3)
|
|
|
- sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
|
|
|
- sb.Append("\r\n");
|
|
|
- string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
|
|
|
- File.AppendAllText(resFile, sb.ToString());
|
|
|
+ FileName = Path.GetFileName(ch0File.File),
|
|
|
+ SmpStart = sig.Slots.Slots[i].StartPoint,
|
|
|
+ SmpCount = sig.Slots.Slots[i].Len,
|
|
|
+ PosCheckType = EnumPosCheckTypeDto.DAMA,
|
|
|
}
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
+ };
|
|
|
+ var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
|
|
|
+ if (result.code != 200)
|
|
|
{
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-第{i + 1}个突发定位异常", ex);
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
|
|
|
}
|
|
|
- }
|
|
|
- sw.Stop();
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
|
|
|
- sw.Start();
|
|
|
- string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
|
|
|
- string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
|
|
|
- string cdbFile = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//地面信号文件
|
|
|
- var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
|
|
|
- var cgDto = new CpuCgMultiDto()
|
|
|
- {
|
|
|
- dtCenter = 0,
|
|
|
- dtRange = 40000,
|
|
|
- file1 = mainFile,
|
|
|
- file2 = adja1File,
|
|
|
- samplingRate = ch0File.Fs,
|
|
|
- smpPositions = smpPositions,
|
|
|
- snrThreshold = 15,
|
|
|
- };
|
|
|
- var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
- if (result1.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result1.msg}");
|
|
|
- return;
|
|
|
- }
|
|
|
- cgDto = new CpuCgMultiDto()
|
|
|
- {
|
|
|
- dtCenter = 260000,
|
|
|
- dtRange = 50000,
|
|
|
- file1 = mainFile,
|
|
|
- file2 = cdbFile,
|
|
|
- samplingRate = ch0File.Fs,
|
|
|
- smpPositions = smpPositions,
|
|
|
- snrThreshold = 15,
|
|
|
- };
|
|
|
- var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
- if (result2.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估出错.{result2.msg}");
|
|
|
- return;
|
|
|
- }
|
|
|
- sw.Stop();
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
- var signaldto = new SignalProcDto()
|
|
|
- {
|
|
|
- File = mainFile,
|
|
|
- Fs = ch0File.Fs,
|
|
|
- Smps = smpPositions,
|
|
|
- };
|
|
|
- var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
|
|
|
- if (signalResult.code != 200)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
|
|
|
- return;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估完成");
|
|
|
- var data1 = result1.data;
|
|
|
- var data2 = result2.data;
|
|
|
- if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (data1.Count != signalResult.data.Count)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
|
|
|
- return;
|
|
|
- }
|
|
|
- sw.Start();
|
|
|
- for (int i = 0; i < data1.Count; i++)
|
|
|
- {
|
|
|
- try
|
|
|
+ else
|
|
|
{
|
|
|
- if (cts.IsCancellationRequested) break;
|
|
|
- X2D1NoParPosDto x21d = new X2D1NoParPosDto()
|
|
|
- {
|
|
|
- TaskID = dto.ID,
|
|
|
- //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
|
|
|
- SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
- MainCode = MainSatCode,
|
|
|
- AdjaCode = Adja1SatCode,
|
|
|
- MainX = MainSatXYZ[0],
|
|
|
- MainY = MainSatXYZ[1],
|
|
|
- MainZ = MainSatXYZ[2],
|
|
|
- AdjaX = Adja1SatXYZ[0],
|
|
|
- AdjaY = Adja1SatXYZ[1],
|
|
|
- AdjaZ = Adja1SatXYZ[2],
|
|
|
- SxDto = PosDtoFactor * data1[i].Dt,
|
|
|
- SxDfo = data1[i].Df,
|
|
|
- SxSnr = data1[i].Snr,
|
|
|
- XdDto = PosDtoFactor * data2[i].Dt,
|
|
|
- XdDfo = data2[i].Df,
|
|
|
- XdSnr = data2[i].Snr,
|
|
|
- SatTxLon = dto.CapLon,
|
|
|
- SatTxLat = dto.CapLat,
|
|
|
- CdbTxLon = dto.CdbLon,
|
|
|
- CdbTxLat = dto.CdbLat,
|
|
|
- FreqDown = ch0File.FreqDownMHz * 1e6,
|
|
|
- FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
|
|
|
- CheckRes = new CheckResDto()
|
|
|
- {
|
|
|
- FileName = Path.GetFileName(ch0File.File),
|
|
|
- SmpStart = sig.Slots.Slots[i].StartPoint,
|
|
|
- SmpCount = sig.Slots.Slots[i].Len,
|
|
|
- PosCheckType = EnumPosCheckTypeDto.DAMA,
|
|
|
- }
|
|
|
- };
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
|
|
|
- if (result.code != 200)
|
|
|
+ var posRes = result.data;
|
|
|
+ double posLon = posRes.PosLon;
|
|
|
+ double posLat = posRes.PosLat;
|
|
|
+ if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
|
|
|
{
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
|
|
|
+ posLon = 0;
|
|
|
+ posLat = 0;
|
|
|
}
|
|
|
- else
|
|
|
+ ErrEllipseResDto errRes = new ErrEllipseResDto();
|
|
|
+ if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
|
|
|
{
|
|
|
- var posRes = result.data;
|
|
|
- double posLon = posRes.PosLon;
|
|
|
- double posLat = posRes.PosLat;
|
|
|
- if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
|
|
|
- {
|
|
|
- posLon = 0;
|
|
|
- posLat = 0;
|
|
|
- }
|
|
|
- ErrEllipseResDto errRes = new ErrEllipseResDto();
|
|
|
- if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
|
|
|
- {
|
|
|
#warning 误差椭圆没有提供无参算法 暂时使用有参
|
|
|
- var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
|
|
|
- {
|
|
|
- MainX = MainSatXYZ[0],
|
|
|
- MainY = MainSatXYZ[1],
|
|
|
- MainZ = MainSatXYZ[2],
|
|
|
- AdjaX = Adja1SatXYZ[0],
|
|
|
- AdjaY = Adja1SatXYZ[1],
|
|
|
- AdjaZ = Adja1SatXYZ[2],
|
|
|
- CdbLon = dto.CdbLon,
|
|
|
- CdbLat = dto.CdbLat,
|
|
|
- RefLon = 0,
|
|
|
- RefLat = 0,
|
|
|
- PosLon = posLon,
|
|
|
- PosLat = posLat,
|
|
|
- OutputErrPoint = false,
|
|
|
- DtoErrus = DtoErrus,
|
|
|
- EphErr = EphErrm,
|
|
|
- };
|
|
|
- //ErrorEllipse2X1DNoRef
|
|
|
- var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
|
|
|
- errRes = errResRsp.data;
|
|
|
- }
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.Append($"{x21d.SigTime:yyyy}\t");
|
|
|
- sb.Append($"{x21d.SigTime:MM}\t");
|
|
|
- sb.Append($"{x21d.SigTime:dd}\t");
|
|
|
- sb.Append($"{x21d.SigTime:HH}\t");
|
|
|
- sb.Append($"{x21d.SigTime:mm}\t");
|
|
|
- sb.Append($"{x21d.SigTime:ss}\t");
|
|
|
- sb.Append($"{x21d.SigTime:fff}\t");
|
|
|
- sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
|
|
|
- sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
|
|
|
- sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
|
|
|
- sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
|
|
|
- sb.Append($"{0:D4}\t");//目标序号
|
|
|
- sb.Append($"res\t");
|
|
|
- sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x21d.XdSnr * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
|
|
|
- sb.Append($"{(long)errRes.LongRadius:D8}\t");//长轴m
|
|
|
- sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
|
|
|
- sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
|
|
|
- sb.Append($"{data1.Count:D2}\t");//时隙属性
|
|
|
- sb.Append($"{1}\t");//所属卫星
|
|
|
- sb.Append($"{950:D3}\t");//置信度
|
|
|
- sb.Append($"{3}\t");//定位体制(星地=3)
|
|
|
- sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
|
|
|
- sb.Append("\r\n");
|
|
|
- string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
|
|
|
- File.AppendAllText(resFile, sb.ToString());
|
|
|
+ var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
|
|
|
+ {
|
|
|
+ MainX = MainSatXYZ[0],
|
|
|
+ MainY = MainSatXYZ[1],
|
|
|
+ MainZ = MainSatXYZ[2],
|
|
|
+ AdjaX = Adja1SatXYZ[0],
|
|
|
+ AdjaY = Adja1SatXYZ[1],
|
|
|
+ AdjaZ = Adja1SatXYZ[2],
|
|
|
+ CdbLon = dto.CdbLon,
|
|
|
+ CdbLat = dto.CdbLat,
|
|
|
+ RefLon = 0,
|
|
|
+ RefLat = 0,
|
|
|
+ PosLon = posLon,
|
|
|
+ PosLat = posLat,
|
|
|
+ OutputErrPoint = false,
|
|
|
+ DtoErrus = DtoErrus,
|
|
|
+ EphErr = EphErrm,
|
|
|
+ };
|
|
|
+ //ErrorEllipse2X1DNoRef
|
|
|
+ var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
|
|
|
+ errRes = errResRsp.data;
|
|
|
}
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.Append($"{x21d.SigTime:yyyy}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:MM}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:dd}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:HH}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:mm}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:ss}\t");
|
|
|
+ sb.Append($"{x21d.SigTime:fff}\t");
|
|
|
+ sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
|
|
|
+ sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
|
|
|
+ sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
|
|
|
+ sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
|
|
|
+ sb.Append($"{0:D4}\t");//目标序号
|
|
|
+ sb.Append($"res\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(x21d.XdSnr * 1e2):D6}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
|
|
|
+ sb.Append($"{(long)errRes.LongRadius:D8}\t");//长轴m
|
|
|
+ sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
|
|
|
+ sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
|
|
|
+ sb.Append($"{data1.Count:D2}\t");//时隙属性
|
|
|
+ sb.Append($"{1}\t");//所属卫星
|
|
|
+ sb.Append($"{950:D3}\t");//置信度
|
|
|
+ sb.Append($"{3}\t");//定位体制(星地=3)
|
|
|
+ sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
|
|
|
+ sb.Append("\r\n");
|
|
|
+ string resFile = Path.Combine(PosResDir, $"两星一地定位结果_{posRes.SigTime:yyyyMMdd}.txt");
|
|
|
+ File.AppendAllText(resFile, sb.ToString());
|
|
|
}
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
|
|
|
- }
|
|
|
}
|
|
|
- sw.Stop();
|
|
|
- LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
|
|
|
+ }
|
|
|
}
|
|
|
+ sw.Stop();
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
//删除DDC文件
|
|
|
File.Delete(ch0File.File);
|
|
|
File.Delete(ch1File.File);
|