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
- }
- }
|