using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web.Http; using XdCxRhDW.Dto; using XdCxRhDW.WebApi; namespace CpuCgServer.Controllers { /// /// Cpu参估接口 /// public class GpuCgController : BaseController { /// /// CPU参估计算(需要先上传文件) /// /// CPU参估参数 /// [HttpPost] public async Task> Calc(CpuCgDto dto) { dto.file1 = GetLocalFile(dto.file1); dto.file2 = GetLocalFile(dto.file2); XcorrStruct xItem = new XcorrStruct(); xItem.file1 = dto.file1; xItem.file2 = dto.file2; xItem.samplingRate = dto.samplingRate; xItem.dtCenter = dto.dtCenter; xItem.dtRange = dto.dtRange; xItem.dfRange = dto.dfRange; FileInfo file1 = new FileInfo(dto.file1); FileInfo file2 = new FileInfo(dto.file2); long totalsamp = file1.Length < file2.Length ? file1.Length / 4 : file2.Length / 4; //样点数为0时计算所有样本 if (dto.smpCount == 0) { xItem.smpCount = (int)totalsamp - dto.smpStart; } else if (dto.smpCount > 0 && dto.smpCount < 1) { xItem.smpCount = (int)(totalsamp * dto.smpCount); } else { xItem.smpCount = dto.smpCount; } xItem.smpStart = dto.smpStart; xItem.snrThreshold = dto.snrThreshold; CpuCgResDto resDto = new CpuCgResDto(); try { XcorrUtils xcorr = new XcorrUtils(); var result = await xcorr.Calc(xItem); //开始计算 if (result.flag == -2) { Serilog.Log.Error("参估计算内部错误!"); return Error("参估计算内部错误!"); } else if (result.flag == -1) { Serilog.Log.Error("参估计算所需数据超出文件范围!"); return Error("参估计算所需数据超出文件范围!"); } resDto.TimeMs = result.tm; resDto.Smpstart = result.smpstart; resDto.Smplen = result.smplen; if (result.flag == 1) { resDto.Dt = result.dt.Value; resDto.Df = result.df.Value; resDto.Snr = result.snr.Value; } } catch (Exception ex) { Serilog.Log.Error(ex, "执行CPU参估异常"); return Error($"执行CPU参估异常"); } return Success(resDto); } /// /// CPU参估多个时隙的参估计算(需要先上传文件) /// /// CPU多时隙参估参数模型 /// 返回结果个数始终和传入的时隙个数相同 [HttpPost] public async Task>> MultiCalc(CpuCgMultiDto dto) { dto.file1 = GetLocalFile(dto.file1); dto.file2 = GetLocalFile(dto.file2); XcorrStruct xItem = new XcorrStruct(); xItem.file1 = dto.file1; xItem.file2 = dto.file2; xItem.samplingRate = dto.samplingRate; xItem.dtCenter = dto.dtCenter; xItem.dtRange = dto.dtRange; xItem.dfRange = dto.dfRange; xItem.snrThreshold = dto.snrThreshold; List resDtos = new List(); foreach (var smpItem in dto.smpPositions) { XcorrUtils xcorr = new XcorrUtils(); xItem.smpStart = smpItem.smpStart; xItem.smpCount = smpItem.smpCount; CpuCgResDto resDto = new CpuCgResDto(); resDto.Smpstart = xItem.smpStart; resDto.Smplen = (long)xItem.smpCount; try { var result = await xcorr.Calc(xItem); //开始计算 if (result.flag == -2) { resDto.Dt = 0; resDto.Df = 0; resDto.Snr = 0; resDtos.Add(resDto); Serilog.Log.Error("参估计算内部错误!"); } else if (result.flag == -1) { resDto.Dt = 0; resDto.Df = 0; resDto.Snr = 0; resDtos.Add(resDto); Serilog.Log.Error("参估计算所需数据超出文件范围!"); } else { resDto.TimeMs = result.tm; if (result.flag == 1) { resDto.Dt = result.dt.Value; resDto.Df = result.df.Value; resDto.Snr = result.snr.Value; resDtos.Add(resDto); } else { resDto.Dt = 0; resDto.Df = 0; resDto.Snr = 0; resDtos.Add(resDto); } } } catch (Exception ex) { resDto.Dt = 0; resDto.Df = 0; resDto.Snr = 0; resDtos.Add(resDto); Serilog.Log.Error(ex, "执行CPU参估异常"); } } return Success(resDtos); } } }