| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 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<int> list1 = new List<int>();        static List<int> list2 = new List<int>();        public static List<SignalProcRes> 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<SignalProcRes> list = new List<SignalProcRes>();            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    {        /// <summary>        /// 信号类型        /// </summary>        public EnumSignalType SignalType { get; set; }        /// <summary>        /// 调制速率(bps)        /// </summary>        public double Rate { get; set; }        /// <summary>        /// 频偏        /// </summary>        public double Ffc { get; set; }        /// <summary>        /// 信号信噪比        /// </summary>        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    }}
 |