using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Collections;
using System.Collections.Generic;
using XdCxRhDW.Dto;
using System.Security.Policy;
using XdCxRhDW.Entity;
namespace XdCxRhDW.Api
{
public class XcorrUtils
{
///
/// 参估画图
///
///
public async Task> DrawImage(Dto.CpuCgDto xs)
{
var cafp = new Process();
List list = new List();
await Task.Run(() =>
{
FileInfo file1 = new FileInfo(xs.file1);
FileInfo file2 = new FileInfo(xs.file2);
long totalsamp = file1.Length < file2.Length ? file1.Length / 4 : file2.Length / 4;
//样点数为0时计算所有样本
if (xs.smpCount == 0)
{
xs.smpCount = (int)totalsamp - xs.smpStart;
}
else if (xs.smpCount > 0 && xs.smpCount < 1)
{
xs.smpCount = (int)(totalsamp * xs.smpCount);
}
string outFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CgImag.txt");
int flag = 1;
if (xs.smpStart == 0)
{
flag = 3;//文件画图,避免滑动时溢出
cafp.StartInfo.Arguments = $"{flag} \"{xs.file1}\" \"{xs.file2}\" {(long)xs.samplingRate} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpCount} {xs.snrThreshold} {outFile}";
}
else
{
var minStart = xs.dtRange / 2 / 1e6 * xs.samplingRate;
if (xs.smpStart < minStart)//滑动计算起时值必须要大于等于此数
{
xs.smpStart = (long)minStart;
}
cafp.StartInfo.Arguments = $"{flag} \"{xs.file1}\" \"{xs.file2}\" {(long)(xs.samplingRate)} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpStart} {xs.smpCount} {xs.snrThreshold} {outFile}";
}
cafp.StartInfo.FileName = Path.Combine(cafp.StartInfo.WorkingDirectory, "AddIns\\检测Cpu参估\\XcorrCpu.exe");
//cafp.StartInfo.Arguments = $"1 \"{xs.file1}\" \"{xs.file2}\" {(long)(xs.samplingRate)} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpStart} {xs.smpCount} {xs.snrThreshold} {outFile}";
cafp.StartInfo.CreateNoWindow = true;
cafp.StartInfo.RedirectStandardError = true;
cafp.StartInfo.RedirectStandardOutput = true;
cafp.StartInfo.UseShellExecute = false;
cafp.Start();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
cafp.WaitForExit();
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
var str = cafp.StandardOutput.ReadToEnd();
if (str.StartsWith("1:") && File.Exists(outFile))
{
var lines = File.ReadAllLines(outFile);
if (lines.Length > 1)
{
var lineFirstArr = lines[0].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
int fsHz = Convert.ToInt32(lineFirstArr[0]);
int xFlag = Convert.ToInt32(lineFirstArr[1]);
int xMax = Convert.ToInt32(lineFirstArr[2]);
float yMax = Convert.ToSingle(lineFirstArr[3]);
for (int i = 1; i < lines.Length; i++)
{
var lineArr = lines[i].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
ImageResult ir = new ImageResult()
{
FsHz = fsHz,
XFlag = xFlag,
XMax = xMax,
YMax = yMax,
XValue = Convert.ToInt32(lineArr[0]),
YValue = Convert.ToSingle(lineArr[1]),
Snr = Convert.ToSingle(lineArr[2]),
};
list.Add(ir);
}
}
File.Delete(outFile);
}
});
return list;
}
}
}