using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace CheckServer { public static class SignalProcHelper { private const string dll = @"AddIns\SignalProc.dll"; #region cpp dll Interop [DllImport(dll, EntryPoint = "SigalEst", CallingConvention = CallingConvention.Cdecl)] private extern static void SigalEst(string file, long fsHz, int[] smpStart, int[] smpCount, int[] modes, double[] rates, double[] ffcs, double[] snrs, int len); #endregion static List list1 = new List(); static List list2 = new List(); public static List SigalEst(string file, long fsHz, int[] smpStart, int[] smpCount) { for (int i = 0; i < smpStart.Length; i++) { if (!list1.Contains(smpStart[i])) list1.Add(smpStart[i]); if (!list2.Contains(smpCount[i])) list2.Add(smpCount[i]); } int sigCount = smpStart.Length; int[] modes = new int[sigCount];//信号模式 double[] rates = new double[sigCount];//调制速率 double[] ffcs = new double[sigCount];//信号频偏Hz double[] snrs = new double[sigCount];//信号信噪比dB SigalEst(file, fsHz, smpStart, smpCount, modes, rates, ffcs, snrs, sigCount); List list = new List(); for (int i = 0; i < modes.Length; i++) { SignalProcRes item = new SignalProcRes() { SignalType = (EnumSignalType)modes[i], Ffc = Math.Round(ffcs[i], 2), Rate = Math.Round(rates[i], 2), Snr= Math.Round(snrs[i], 2), }; list.Add(item); } return list; } } public class SignalProcRes { /// /// 信号类型 /// public EnumSignalType SignalType { get; set; } /// /// 调制速率(bps) /// public double Rate { get; set; } /// /// 频偏 /// public double Ffc { get; set; } /// /// 信号信噪比 /// public double Snr { get; set; } } public enum EnumSignalType { SUNKNOW = -1, //UNKNOW BPSK = 1, //BPSK 备注为界面显示字母 OQPSK = 2, //OQPSK QPSK = 3, //QPSK P4QPSK = 4, //Pi/4QPSK _8PSK = 5, //8PSK _16APSK = 6, //16APSK _32APSK = 7 //32APSK } }