public void IQ_Process(byte[] t) { if (dataType == 0 && BitConverter.ToInt32(t, 4) == (uint)DATA_TYPE.DT_NB_DDC) //前4字节是ID 屏蔽网络上的非命令包 { int channel = BitConverter.ToInt32(t, 16); int DATA_LEN = 512 * 2 * 2; if (NB_Filter != channel) { return; } int NB_DataMode = BitConverter.ToInt32(t, 92); byte[] fData = new byte[DATA_LEN]; Array.Copy(t, 104, fData, 0, DATA_LEN); //switch ((DataAndFreq.NB_DATA_MODE)NB_DataMode) //{ // case DataAndFreq.NB_DATA_MODE.NB_MODE_IQ: // case DataAndFreq.NB_DATA_MODE.NB_MODE_ISB: // { // Array.Copy(t, 104, fData, 0, DATA_LEN); // break; // } // case DataAndFreq.NB_DATA_MODE.NB_MODE_AM: // case DataAndFreq.NB_DATA_MODE.NB_MODE_USB: // case DataAndFreq.NB_DATA_MODE.NB_MODE_CW: // case DataAndFreq.NB_DATA_MODE.NB_MODE_LSB: // { // Array.Copy(t, 104, fData, 0, DATA_LEN / 2); // break; // } //} DataAndFreq nDataAndFreq = new DataAndFreq(t, fData, 1, null, null, NB_DataMode); m_queue.Enqueue(nDataAndFreq); } else if (dataType == 1 && BitConverter.ToInt32(t, 4) == (uint)DATA_TYPE.DT_WB_FFT) { FFT_Data fft_Data = FFT_Data.DataProcessFFT(t); byte[] fData = fft_Data?.data; if (fData != null && fft_extract++ == 1) { fft_extract = 0; DataAndFreq nDataAndFreq = new DataAndFreq(t, fData, 3, null, null); m_queue.Enqueue(nDataAndFreq); } } }
public static FFT_Data DataProcessFFT(byte[] t) { FFT_Data fft_data = null; int channel = t[12]; short key = BitConverter.ToInt16(t, 8); if (dict.ContainsKey(key)) { if (channel >= 0 && channel < 6) { fft_data = dict[key].Add(t); if (fft_data != null) { dict.Remove(key); } } else { dict.Remove(key); } } else { if (channel >= 0 && channel < 6) { FFT_Data data = new FFT_Data(t); data.Add(t); dict[key] = data; } } if (dict.Count > 2000) { dict.Clear(); } return(fft_data); }