CorResult.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace XdCxRhDw.CpuCgTools
  5. {
  6. public class CorResult
  7. {
  8. /// <summary>
  9. /// 起始样点
  10. /// </summary>
  11. public int Start { get; set; }
  12. /// <summary>
  13. /// 样点长度
  14. /// </summary>
  15. public int Length { get; set; }
  16. /// <summary>
  17. /// 相关时差,单位:us
  18. /// </summary>
  19. public double Dto { get; set; }
  20. /// <summary>
  21. /// 相关频差:单位:Hz
  22. /// </summary>
  23. public double Dfo { get; set; }
  24. /// <summary>
  25. /// 相关信噪比,单位:db
  26. /// </summary>
  27. public double Snr { get; set; }
  28. /// <summary>
  29. /// 计算耗时,毫秒
  30. /// </summary>
  31. public double UseTime { get; set; }
  32. /// <summary>
  33. /// 是否有效
  34. /// </summary>
  35. public bool IsValid { get; set; }
  36. /// <summary>
  37. /// 相关峰列表
  38. /// </summary>
  39. public List<XgfItem> XgfList { get; set; } = new List<XgfItem>();
  40. public string Message { get; set; } = string.Empty;
  41. /// <summary>
  42. /// 参估结果
  43. /// </summary>
  44. public CorResult() { }
  45. public static CorResult FromLine(string line, double snr)
  46. {
  47. if (string.IsNullOrWhiteSpace(line)) throw new ArgumentNullException(nameof(line));
  48. CorResult corResult = new CorResult();
  49. var cafItems = line.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  50. corResult.Message = line;
  51. if (cafItems.Length == 0) return corResult;
  52. int i = 0;
  53. var cafitem = cafItems[i];
  54. var resitems = cafitem.Split(',');
  55. if (resitems.Length != 6) return corResult;
  56. corResult.Start = int.Parse(resitems[0]);
  57. corResult.Length = int.Parse(resitems[1]);
  58. corResult.Dto = double.Parse(resitems[2]);
  59. corResult.Dfo = double.Parse(resitems[3]);
  60. corResult.Snr = double.Parse(resitems[4]);
  61. corResult.UseTime = double.Parse(resitems[5]);
  62. corResult.IsValid = corResult.Snr > snr;
  63. if (cafItems.Length > 1)
  64. {
  65. for (i = 1; i < cafItems.Length; i++)
  66. {
  67. resitems = cafItems[i].Split(',');
  68. XgfItem xgfItem = new XgfItem()
  69. {
  70. Dto = double.Parse(resitems[0]),
  71. Dfo = double.Parse(resitems[1]),
  72. Snr = double.Parse(resitems[2])
  73. };
  74. corResult.XgfList.Add(xgfItem);
  75. }
  76. }
  77. return corResult;
  78. }
  79. public static CorResult[] FromLines(string result, double snr)
  80. {
  81. if (string.IsNullOrWhiteSpace(result))
  82. return new CorResult[0];
  83. var lines = result.Split(new string[] {"\r","\n"}, StringSplitOptions.RemoveEmptyEntries);
  84. CorResult[] results = new CorResult[lines.Length];
  85. for (int i = 0; i < lines.Length; i++)
  86. {
  87. results[i] = FromLine(lines[i], snr);
  88. }
  89. return results;
  90. }
  91. }
  92. public class XgfItem
  93. {
  94. public XgfItem()
  95. {
  96. }
  97. public XgfItem(double dto, double dfo, double snr)
  98. {
  99. Dto = dto;
  100. Dfo = dfo;
  101. Snr = snr;
  102. }
  103. /// <summary>
  104. /// 时差(us)
  105. /// </summary>
  106. public double Dto { get; set; }
  107. /// <summary>
  108. /// 频差(Hz)
  109. /// </summary>
  110. public double Dfo { get; set; }
  111. /// <summary>
  112. /// 信噪比(dB)
  113. /// </summary>
  114. public double Snr { get; set; }
  115. }
  116. }