XcorrUtils.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Threading.Tasks;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using XdCxRhDW.Dto;
  10. using System.Security.Policy;
  11. using XdCxRhDW.Entity;
  12. namespace XdCxRhDW.Api
  13. {
  14. public class XcorrUtils
  15. {
  16. /// <summary>
  17. /// 参估画图
  18. /// </summary>
  19. /// <returns></returns>
  20. public async Task<List<ImageResult>> DrawImage(Dto.CpuCgDto xs)
  21. {
  22. var cafp = new Process();
  23. List<ImageResult> list = new List<ImageResult>();
  24. await Task.Run(() =>
  25. {
  26. FileInfo file1 = new FileInfo(xs.file1);
  27. FileInfo file2 = new FileInfo(xs.file2);
  28. long totalsamp = file1.Length < file2.Length ? file1.Length / 4 : file2.Length / 4;
  29. //样点数为0时计算所有样本
  30. if (xs.smpCount == 0)
  31. {
  32. xs.smpCount = (int)totalsamp - xs.smpStart;
  33. }
  34. else if (xs.smpCount > 0 && xs.smpCount < 1)
  35. {
  36. xs.smpCount = (int)(totalsamp * xs.smpCount);
  37. }
  38. string outFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CgImag.txt");
  39. int flag = 1;
  40. if (xs.smpStart == 0)
  41. {
  42. flag = 3;//文件画图,避免滑动时溢出
  43. cafp.StartInfo.Arguments = $"{flag} \"{xs.file1}\" \"{xs.file2}\" {(long)xs.samplingRate} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpCount} {xs.snrThreshold} {outFile}";
  44. }
  45. else
  46. {
  47. var minStart = xs.dtRange / 2 / 1e6 * xs.samplingRate;
  48. if (xs.smpStart < minStart)//滑动计算起时值必须要大于等于此数
  49. {
  50. xs.smpStart = (long)minStart;
  51. }
  52. cafp.StartInfo.Arguments = $"{flag} \"{xs.file1}\" \"{xs.file2}\" {(long)(xs.samplingRate)} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpStart} {xs.smpCount} {xs.snrThreshold} {outFile}";
  53. }
  54. cafp.StartInfo.FileName = Path.Combine(cafp.StartInfo.WorkingDirectory, "AddIns\\检测Cpu参估\\XcorrCpu.exe");
  55. //cafp.StartInfo.Arguments = $"1 \"{xs.file1}\" \"{xs.file2}\" {(long)(xs.samplingRate)} {xs.dtCenter} {xs.dtRange} {xs.dfRange} {xs.smpStart} {xs.smpCount} {xs.snrThreshold} {outFile}";
  56. cafp.StartInfo.CreateNoWindow = true;
  57. cafp.StartInfo.RedirectStandardError = true;
  58. cafp.StartInfo.RedirectStandardOutput = true;
  59. cafp.StartInfo.UseShellExecute = false;
  60. cafp.Start();
  61. Stopwatch stopWatch = new Stopwatch();
  62. stopWatch.Start();
  63. cafp.WaitForExit();
  64. stopWatch.Stop();
  65. TimeSpan ts = stopWatch.Elapsed;
  66. var str = cafp.StandardOutput.ReadToEnd();
  67. if (str.StartsWith("1:") && File.Exists(outFile))
  68. {
  69. var lines = File.ReadAllLines(outFile);
  70. if (lines.Length > 1)
  71. {
  72. var lineFirstArr = lines[0].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  73. int fsHz = Convert.ToInt32(lineFirstArr[0]);
  74. int xFlag = Convert.ToInt32(lineFirstArr[1]);
  75. int xMax = Convert.ToInt32(lineFirstArr[2]);
  76. float yMax = Convert.ToSingle(lineFirstArr[3]);
  77. for (int i = 1; i < lines.Length; i++)
  78. {
  79. var lineArr = lines[i].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  80. ImageResult ir = new ImageResult()
  81. {
  82. FsHz = fsHz,
  83. XFlag = xFlag,
  84. XMax = xMax,
  85. YMax = yMax,
  86. XValue = Convert.ToInt32(lineArr[0]),
  87. YValue = Convert.ToSingle(lineArr[1]),
  88. Snr = Convert.ToSingle(lineArr[2]),
  89. };
  90. list.Add(ir);
  91. }
  92. }
  93. File.Delete(outFile);
  94. }
  95. });
  96. return list;
  97. }
  98. }
  99. }