|
@@ -24,9 +24,6 @@ namespace X2LeoTaskServer54.Service
|
|
|
int Adja1SatCode;
|
|
|
double[] MainXYZ, Adja1XYZ;
|
|
|
int PosDtoFactor;
|
|
|
-
|
|
|
- double RefFreqDownMHz;
|
|
|
-
|
|
|
double DtoErrus;
|
|
|
double DfoErrHz;
|
|
|
double EphPosErrM;
|
|
@@ -48,10 +45,6 @@ namespace X2LeoTaskServer54.Service
|
|
|
int.TryParse(PosDtoFactorstr, out PosDtoFactor);
|
|
|
if (PosDtoFactor == 0) PosDtoFactor = 1;
|
|
|
|
|
|
- var RefFreqDownstr = ConfigurationManager.AppSettings["RefFreqDown"].Trim();
|
|
|
- double.TryParse(RefFreqDownstr, out RefFreqDownMHz);
|
|
|
-
|
|
|
-
|
|
|
var DtoErrusstr = ConfigurationManager.AppSettings["DtoErrus"].Trim();
|
|
|
double.TryParse(DtoErrusstr, out DtoErrus);
|
|
|
var DfoErrusstr = ConfigurationManager.AppSettings["DfoErr"].Trim();
|
|
@@ -106,62 +99,41 @@ namespace X2LeoTaskServer54.Service
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
- #region 第2步,扫描检测结果目录
|
|
|
- //同一个AD文件得到的不同频点的检测文件FlagNo相同
|
|
|
+ #region 第2步,扫描采集文件
|
|
|
var groupFiles = Directory.EnumerateFiles(CapDir, "*.dat", SearchOption.TopDirectoryOnly).Select(p => StringToAdFile(p))
|
|
|
- .GroupBy(m => m.XDNo).OrderBy(m => m.Key);
|
|
|
+ .GroupBy(m => m.AdTime).OrderBy(m => m.Key);
|
|
|
|
|
|
if (!groupFiles.Any())
|
|
|
{
|
|
|
await LogHelper.Info($"【任务{dto.ID}】等待扫描文件...");
|
|
|
await Task.Delay(10000, cts.Token);
|
|
|
}
|
|
|
-
|
|
|
- foreach (var groupFile in groupFiles)//每一组文件代表同一组可定位的三个不同时刻的采集文件
|
|
|
+ foreach (var groupFile in groupFiles)//每一组文件代表同一组可定位的2*(N+1)个采集文件,N个目标1和1个参考
|
|
|
{
|
|
|
if (cts.IsCancellationRequested) break;
|
|
|
-
|
|
|
- var first = groupFile.First();
|
|
|
- await LogHelper.Info($"【任务{dto.ID}】正在执行第{first.XDNo}组的采集文件");
|
|
|
- var group = groupFile.OrderBy(g => g.AdTime).ToArray();
|
|
|
- var freqItems = group.GroupBy(p => p.FreqDownMHz);
|
|
|
- var listTask = new List<Task>();
|
|
|
- foreach (var item in freqItems)
|
|
|
+ var adTime = groupFile.First().AdTime;
|
|
|
+ var tarItems = groupFile.GroupBy(p => p.FreqDownMHz);
|
|
|
+ List<Task> listTask = new List<Task>();
|
|
|
+ foreach (var tarItem in tarItems)
|
|
|
{
|
|
|
- if (item.Count() != 4)
|
|
|
+ var freq = tarItem.First().FreqDownMHz;
|
|
|
+ if (tarItem.Count() != 2)
|
|
|
{
|
|
|
- await LogHelper.Warning($"【任务{dto.ID}】第{first.XDNo}组{first.AdTime:yyyyMMddHHmmss}时刻-信号{item.First().FreqDownMHz}MHz-未找到双星目标及参考的信号文件,跳过此组数据");
|
|
|
+ await LogHelper.Warning($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-AD文件个数不为2,跳过此组数据");
|
|
|
return;
|
|
|
}
|
|
|
- //group:同一组不同时刻的文件
|
|
|
var task = Task.Run(async () =>
|
|
|
{
|
|
|
- DateTime adTime = first.AdTime;
|
|
|
- int No = first.XDNo;
|
|
|
- var tarInfo = group.Where(m => m.FreqDownMHz == TarFreqDownMHz);
|
|
|
- var refInfo = group.Where(m => m.FreqDownMHz == RefFreqDownMHz);
|
|
|
- var tarFileInfo1 = tarInfo.FirstOrDefault(t => t.Ch == 1);
|
|
|
- var tarFileInfo2 = tarInfo.FirstOrDefault(t => t.Ch == 2);
|
|
|
- var refFileInfo1 = refInfo.FirstOrDefault(t => t.Ch == 1);
|
|
|
- var refFileInfo2 = refInfo.FirstOrDefault(t => t.Ch == 2);
|
|
|
+ var tarFileInfo1 = tarItem.FirstOrDefault(t => t.Ch == 1);
|
|
|
+ var tarFileInfo2 = tarItem.FirstOrDefault(t => t.Ch == 2);
|
|
|
if (tarFileInfo1 == null)
|
|
|
{
|
|
|
- await LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{TarFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
|
|
|
+ await LogHelper.Warning($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到主星信号文件,跳过此组数据");
|
|
|
return;
|
|
|
}
|
|
|
if (tarFileInfo2 == null)
|
|
|
{
|
|
|
- await LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{TarFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (refFileInfo1 == null)
|
|
|
- {
|
|
|
- await LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{RefFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (refFileInfo2 == null)
|
|
|
- {
|
|
|
- await LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{RefFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
|
|
|
+ await LogHelper.Warning($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到邻星信号文件,跳过此组数据");
|
|
|
return;
|
|
|
}
|
|
|
if (cts.IsCancellationRequested) return;
|
|
@@ -171,9 +143,6 @@ namespace X2LeoTaskServer54.Service
|
|
|
sw.Start();
|
|
|
string tarFile1 = await HttpHelper.UploadFileAsync(tarFileInfo1.File, baseUrl, token: cts.Token);//目标主星文件
|
|
|
string tarFile2 = await HttpHelper.UploadFileAsync(tarFileInfo2.File, baseUrl, token: cts.Token);//目标邻1星文件
|
|
|
- string refFile1 = await HttpHelper.UploadFileAsync(refFileInfo1.File, baseUrl, token: cts.Token);//参考主星文件
|
|
|
- string refFile2 = await HttpHelper.UploadFileAsync(refFileInfo2.File, baseUrl, token: cts.Token);//参考邻1星文件
|
|
|
-
|
|
|
DetectDto detectDto = new DetectDto()
|
|
|
{
|
|
|
file1 = tarFile1,
|
|
@@ -186,12 +155,12 @@ namespace X2LeoTaskServer54.Service
|
|
|
var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
|
|
|
if (deteResp.code != 200)
|
|
|
{
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz信号检测出错.{deteResp.msg}");
|
|
|
+ await LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz信号检测出错.{deteResp.msg}");
|
|
|
return;
|
|
|
}
|
|
|
var smps = deteResp.data.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
|
|
|
|
|
|
- await LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估开始,共{smps.Count}个突发...");
|
|
|
+ await LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估开始,共{smps.Count}个突发...");
|
|
|
var cgDto = new CpuCgMultiDto()
|
|
|
{
|
|
|
dtCenter = 0,
|
|
@@ -205,33 +174,14 @@ namespace X2LeoTaskServer54.Service
|
|
|
var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
if (result1.code != 200)
|
|
|
{
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-目标主星邻1星CPU参估出错.{result1.msg}");
|
|
|
- return;
|
|
|
- }
|
|
|
- var cpuCgDto = new CpuCgDto()
|
|
|
- {
|
|
|
- dtCenter = 0,
|
|
|
- dtRange = 2000,
|
|
|
- file1 = refFile1,
|
|
|
- file2 = refFile2,
|
|
|
- samplingRate = tarFileInfo1.Fs,
|
|
|
- smpStart = 0,
|
|
|
- smpCount = 0,
|
|
|
- snrThreshold = 15,
|
|
|
- };
|
|
|
- var result2 = await HttpHelper.PostRequestAsync<CpuCgResDto>(baseUrl + "DetectCg/CpuCgCalc", cpuCgDto, token: cts.Token);
|
|
|
- sw.Stop();
|
|
|
- if (result2.code != 200)
|
|
|
- {
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参考主星邻2星CPU参估出错.{result2.msg}");
|
|
|
+ await LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-目标主星邻1星CPU参估出错.{result1.msg}");
|
|
|
return;
|
|
|
}
|
|
|
- await LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
+ await LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
var data1 = result1.data;
|
|
|
- var data2 = result2.data;
|
|
|
if (data1.Count != cgDto.smpPositions.Count)
|
|
|
{
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参估结果个数和检测结果个数不匹配");
|
|
|
+ await LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参估结果个数和检测结果个数不匹配");
|
|
|
return;
|
|
|
}
|
|
|
sw.Start();
|
|
@@ -243,7 +193,7 @@ namespace X2LeoTaskServer54.Service
|
|
|
LeoX2ParPosDto leoX2 = new LeoX2ParPosDto()
|
|
|
{
|
|
|
TaskID = dto.ID,
|
|
|
- SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
+ SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)tarFileInfo1.Fs),
|
|
|
MainCode = MainSatCode,
|
|
|
AdjaCode = Adja1SatCode,
|
|
|
MainX = MainXYZ[0],
|
|
@@ -261,16 +211,18 @@ namespace X2LeoTaskServer54.Service
|
|
|
Dto = PosDtoFactor * data1[i].Dt,
|
|
|
Dfo = data1[i].Df,
|
|
|
Snr = data1[i].Snr,
|
|
|
- YbMainDto = 260000,
|
|
|
- YbAdjaDto = 260000 + PosDtoFactor * data2.Dt,
|
|
|
- YbMainDfo = 100,
|
|
|
- YbAdjaDfo = 100 + data2.Df,
|
|
|
- TarFreqUp = (tarFileInfo1.FreqDownMHz + 44) * 1e6,
|
|
|
- RefFreqUp = (refFileInfo1.FreqDownMHz + 44) * 1e6,
|
|
|
+ YbMainDto = 260000 + PosDtoFactor * (0.00282418 * 1e6),
|
|
|
+ YbAdjaDto = 260000,
|
|
|
+ YbMainDfo = 100 + 11320.0568,
|
|
|
+ YbAdjaDfo = 100,
|
|
|
+ TarFreqUp = 310.85 * 1e6,
|
|
|
+ RefFreqUp = 295 * 1e6,
|
|
|
SatTxLon = dto.CapLon,
|
|
|
SatTxLat = dto.CapLat,
|
|
|
TarFreqDown = tarFileInfo1.FreqDownMHz * 1e6,
|
|
|
- RefFreqDown = refFileInfo1.FreqDownMHz * 1e6,
|
|
|
+ RefFreqDown = 255 * 1e6,
|
|
|
+ RefLon = dto.RefLon,
|
|
|
+ RefLat = dto.RefLat,
|
|
|
CheckRes = new CheckResDto()
|
|
|
{
|
|
|
FileName = Path.GetFileName(tarFileInfo1.File),
|
|
@@ -282,7 +234,7 @@ namespace X2LeoTaskServer54.Service
|
|
|
var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosLeX2ParAsync", leoX2);
|
|
|
if (result.code != 200)
|
|
|
{
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组-{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz 第{i + 1}个突发定位异常.{result.msg}");
|
|
|
+ await LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz 第{i + 1}个突发定位异常.{result.msg}");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -319,8 +271,8 @@ namespace X2LeoTaskServer54.Service
|
|
|
sb.Append($"{leoX2.SigTime:ss}\t");
|
|
|
sb.Append($"{leoX2.SigTime:fff}\t");
|
|
|
sb.Append($"{leoX2.CheckRes.SmpCount * 1000 / tarFileInfo1.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($"{Convert.ToInt64(freq * 1e6):D12}\t");//下行频点
|
|
|
+ sb.Append($"{Convert.ToInt64(310.85 * 1e6):D12}\t");//上行频点
|
|
|
sb.Append($"{GetSignalType(deteResp.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
|
|
|
sb.Append($"{0:D4}\t");//目标序号
|
|
|
sb.Append($"res\t");
|
|
@@ -332,7 +284,7 @@ namespace X2LeoTaskServer54.Service
|
|
|
sb.Append($"{Convert.ToInt64(leoX2.Snr * 1e2):D6}\t");
|
|
|
sb.Append($"{Convert.ToInt64((leoX2.YbMainDto - leoX2.YbAdjaDto) * 1e2):D10}\t");
|
|
|
sb.Append($"{Convert.ToInt64((leoX2.YbMainDfo - leoX2.YbAdjaDfo) * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(data2.Snr * 1e2):D6}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(32 * 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");
|
|
@@ -354,11 +306,11 @@ namespace X2LeoTaskServer54.Service
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- await LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
|
|
|
+ await LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
|
|
|
}
|
|
|
}
|
|
|
sw.Stop();
|
|
|
- await LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
+ await LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
|
|
|
}, cts.Token);
|
|
|
listTask.Add(task);
|
|
|
}
|