123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.ComponentModel.DataAnnotations;
- using System.Data;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Windows.Media;
- using DevExpress.XtraBars.Docking2010.Views.Widget;
- using DevExpress.XtraEditors;
- using ExtensionsDev;
- using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
- namespace XdCxRhDw.CpuCgTools
- {
- public partial class FormCpuCg : DevExpress.XtraEditors.XtraForm
- {
- public class CgParam
- {
- public string F1 { get; set; }
- public string F2 { get; set; }
- public string snr { get; set; }
- public string dfoCenter { get; set; }
- public string dfoRange { get; set; }
- public string dtoXb { get; set; }
- public string dfoXb { get; set; }
- public string thread { get; set; }
- public string addZero { get; set; }
- public string start { get; set; }
- public string len { get; set; }
- public string dtoCenter { get; set; }
- public string dtoRange { get; set; }
- public string fs { get; set; }
- }
- public class CgRes
- {
- [Display(Name = "文件1")]
- public string File1 { get; set; }
- [Display(Name = "文件2")]
- public string File2 { get; set; }
- [Display(Name = "时差(us)")]
- public double Dto { get; set; }
- [Display(Name = "频差(us)")]
- public double Dfo { get; set; }
- [Display(Name = "信噪比(dB)")]
- public double Snr { get; set; }
- [Display(Name = "耗时(ms)")]
- public double CostTimeMs { get; set; }
- }
- List<CgRes> list = new List<CgRes>();
- public FormCpuCg()
- {
- InitializeComponent();
- }
- private void XtraForm1_Load(object sender, EventArgs e)
- {
- gridControl1.Init().UseExportCsv().UseExportXlsx();
- gridControl1.DataSource = list;
- txtF1.UseChooseFile();
- txtF2.UseChooseFile();
- if (File.Exists("tmp.txt"))
- {
- var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<CgParam>(File.ReadAllText("tmp.txt"));
- txtAddZero.Text = obj.addZero;
- txtDfoCenter.Text = obj.dfoCenter;
- txtDfoRange.Text = obj.dfoRange;
- txtDfoXb.Text = obj.dfoXb;
- txtDtoCenter.Text = obj.dtoCenter;
- txtDtoRange.Text = obj.dtoRange;
- txtDtoXb.Text = obj.dtoXb;
- txtF1.Text = obj.F1;
- txtF2.Text = obj.F2;
- txtFs.Text = obj.fs;
- txtLen.Text = obj.len;
- txtSnr.Text = obj.snr;
- txtStart.Text = obj.start;
- txtThread.Text = obj.thread;
- }
- }
- private async void btnCalc_Click(object sender, EventArgs e)
- {
- this.tablePanel1.Enabled = false;
- await Task.Run(() =>
- {
- try
- {
- Stopwatch sw = new Stopwatch();
- sw.Start();
- Process p = new Process();
- p.StartInfo.WorkingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Core");
- p.StartInfo.FileName = Path.Combine(p.StartInfo.WorkingDirectory, "corc.exe");
- string snr = "";
- if (!string.IsNullOrWhiteSpace(txtSnr.Text))
- snr = $"--snr {txtSnr.Text} ";
- string dfoCenter = "";
- if (!string.IsNullOrWhiteSpace(txtDfoCenter.Text))
- dfoCenter = $"--dfocenter {txtDfoCenter.Text} ";
- string dfoRange = "";
- if (!string.IsNullOrWhiteSpace(txtDfoRange.Text))
- dfoRange = $"--dforange {txtDfoRange.Text} ";
- string dtoXb = "";
- if (!string.IsNullOrWhiteSpace(txtDtoXb.Text))
- dtoXb = $"--dtocorr {txtDtoXb.Text} ";
- string dfoXb = "";
- if (!string.IsNullOrWhiteSpace(txtDfoXb.Text))
- dfoXb = $"--dfocorr {txtDfoXb.Text} ";
- string thread = "";
- if (!string.IsNullOrWhiteSpace(txtThread.Text))
- thread = $"--threadnum {txtThread.Text} ";
- else
- thread = $"--threadnum {Environment.ProcessorCount} ";
- long Samplestart = 0;
- long Samplelen = 0;
- if (!string.IsNullOrWhiteSpace(txtStart.Text) && !string.IsNullOrWhiteSpace(txtLen.Text))
- {
- Samplestart = Convert.ToInt64(txtStart.Text);
- Samplelen = Convert.ToInt64(txtLen.Text);
- }
- if (!string.IsNullOrWhiteSpace(txtStart.Text) && (string.IsNullOrWhiteSpace(txtLen.Text) || Convert.ToInt32(txtLen.Text) <= 0))
- {
- FileInfo f1 = new FileInfo(txtF1.Text);
- FileInfo f2 = new FileInfo(txtF2.Text);
- long size = f1.Length;
- if (f1.Length > f2.Length)
- size = f2.Length;
- size /= 4;//IQ文件一个样点4个字节
- var len = size - Convert.ToInt32(txtStart.Text);
- Samplestart = Convert.ToInt64(txtStart.Text);
- Samplelen = len;
- }
- string slot = "";
- if (Samplestart != 0)
- {
- slot = $"-m {Samplestart},{Samplelen} ";
- }
- if (!string.IsNullOrWhiteSpace(txtAddZero.Text))
- {
- long addzero = Convert.ToInt16(txtAddZero.Text);
- //起始样点=起始位置+补零样点
- Samplestart = Samplestart + addzero;
- //样点长度=补零样点*2+补零长度
- Samplelen = addzero * 2 + Samplelen;
- }
- long dtocenterus = Convert.ToInt64(txtDtoCenter.Text);
- double offset = dtocenterus * Convert.ToDouble(txtFs.Text);
- //当偏移大于样点长度就需要补零
- if (offset > Samplelen)
- {
- long addzero = Convert.ToInt64(offset) - Samplelen;
- //起始样点=起始位置+补零样点
- Samplestart = Samplestart + addzero;
- //样点长度=补零样点*2+补零长度
- Samplelen = addzero * 2 + Samplelen;
- }
- if (Samplestart != 0)
- {
- if (dtocenterus > 200000)
- {
- slot += $"-n {Samplestart - offset},{Samplelen}";
- }
- else
- {
- slot += $"-n {Samplestart},{Samplelen}";
- }
- }
- //样点长度>时差范围*采样率
- CgParam cp = new CgParam()
- {
- addZero = txtAddZero.Text,
- dfoCenter = txtDfoCenter.Text,
- dfoRange = txtDfoRange.Text,
- dfoXb = txtDfoXb.Text,
- dtoCenter = txtDtoCenter.Text,
- dtoRange = txtDtoRange.Text,
- dtoXb = txtDtoXb.Text,
- F1 = txtF1.Text,
- F2 = txtF2.Text,
- fs = txtFs.Text,
- len = txtLen.Text,
- snr = txtSnr.Text,
- start = txtStart.Text,
- thread = txtThread.Text,
- };
- var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(cp);
- File.WriteAllText("tmp.txt", jsonStr);
- p.StartInfo.Arguments = $"\"{txtF1.Text}\" \"{txtF2.Text}\" {txtFs.Text} {txtDtoCenter.Text} {txtDtoRange.Text} {snr}{dfoCenter}{dfoRange}{dtoXb}{dfoXb}{thread}{slot}";
- p.StartInfo.CreateNoWindow = true;
- p.StartInfo.RedirectStandardError = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.UseShellExecute = false;
- p.Start();
- Stopwatch stopwatch = new Stopwatch();
- stopwatch.Start();
- p.WaitForExit();
- stopwatch.Stop();
- var str = p.StandardOutput.ReadToEnd();
- sw.Stop();
- var arr = str.Split(new string[] { "\t", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
- if (arr.Length == 3)
- {
- var costTimeMs = stopwatch.Elapsed.TotalMilliseconds;
- var dt = Math.Round(Convert.ToDouble(arr[0]), 3);
- var df = Math.Round(Convert.ToDouble(arr[1]), 1);
- var snrRes = Math.Round(Convert.ToDouble(arr[2].Replace(";", "")), 1);
- if (dtocenterus > 200000 && snrRes >= 14)
- {
- dt += offset;
- }
- list.Add(new CgRes() { File1 = txtF1.Text, File2 = txtF2.Text, CostTimeMs = costTimeMs, Dto = dt, Dfo = df, Snr = snrRes });
- }
- else
- {
- this.Invoke(new Action(() => XtraMessageBox.Show("参估计算无结果")));
- }
- }
- catch (Exception ex)
- {
- Serilog.Log.Error("参估计算出错", ex);
- this.Invoke(new Action(() => XtraMessageBox.Show("参估计算出错")));
- }
- });
- this.gridView1.RefreshData();
- this.tablePanel1.Enabled = true;
- }
- }
- }
|