void m_queue_TEvent(DataAndFreq t) { IQDataAndFreq nIQDataAndFreq = null; int dataLength = t.Ai_Data.Length / 20 * 2; //(重要)保持多线程数据一致行所做的必要处理 int mm_Resolution = m_Resolution, Resolution_length = mm_Resolution * 512; if (Resolution_length != IQDataResolution.Length) { ResolutionIndex = 0; IQDataResolution = new double[Resolution_length]; IQDataResolutionOrg = new double[Resolution_length]; } int BaseIndex = dataLength * ResolutionIndex; for (int i = 0; i < dataLength / 2; ++i) { IQDataResolutionOrg[BaseIndex + 2 * i] = (double)t.Ar_Data[i]; IQDataResolutionOrg[BaseIndex + 2 * i + 1] = (double)t.Ai_Data[i]; } if (++ResolutionIndex < mm_Resolution)//凑包个数计数 { return; } ResolutionIndex = 0; //对不同分辨率(长度)的数据进行加窗处理 int mm_Resolution_Index = (int)Math.Log(mm_Resolution, 2); for (int i = 0; i < IQDataResolution.Length / 2; i++) { IQDataResolution[2 * i] = IQDataResolutionOrg[2 * i] * Window[mm_Resolution_Index][i]; IQDataResolution[2 * i + 1] = IQDataResolutionOrg[2 * i + 1] * Window[mm_Resolution_Index][i]; } nIQDataAndFreq = new IQDataAndFreq(t.StartFreq, t.StopFreq, t.Type, t.RF_Gain, t.Digital_Gain);//构造结构体 nIQDataAndFreq.Data = IQDataResolution; ///分发至时域处理类 DataIQWaveform.PushData(IQDataResolutionOrg); //进入此处必然处理下一包 需要为下一包申请指向新空间 IQDataResolution = new double[Resolution_length]; IQDataResolutionOrg = new double[Resolution_length]; ///分发至频域处理类 DataFrequencySpectrum.PushData(nIQDataAndFreq); }
void m_queue_TEvent(DataAndFreq t) { int dataLength; double[] fftData; if (t.Type == 3) { dataLength = t.Data.Length / 2; fftData = new double[dataLength]; for (int i = 0; i < dataLength; ++i) { fftData[i] = (double)BitConverter.ToInt16(t.Data, 2 * i);//每2个字节IQ数据转换为一个32位有符号整数的数组LX } t.m_Data = fftData; } else { dataLength = t.Data.Length / 2; //(重要)保持多线程数据一致行所做的必要处理 int mm_Resolution = m_Resolution, Resolution_length = mm_Resolution * 1024; if (Resolution_length != IQDataResolution.Length) { ResolutionIndex = 0; IQDataResolution = new double[Resolution_length]; IQDataResolutionOrg = new double[Resolution_length]; } int BaseIndex = dataLength * ResolutionIndex; //for (int i = 0; i < dataLength; ++i) //{ // IQDataResolutionOrg[BaseIndex + i] = (double)BitConverter.ToInt16(t.Data, 2 * i); //} switch (t.NB_DataMode) { case DataAndFreq.NB_DATA_MODE.NB_MODE_IQ: case DataAndFreq.NB_DATA_MODE.NB_MODE_ISB: { for (int k = 0; k < dataLength; ++k) { IQDataResolutionOrg[BaseIndex + k] = (double)BitConverter.ToInt16(t.Data, 2 * k); } 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: { for (int k = dataLength / 2 - 1; k >= 0; k--) { IQDataResolutionOrg[2 * k] = (double)BitConverter.ToInt16(t.Data, 2 * k); } break; } case DataAndFreq.NB_DATA_MODE.NB_MODE_LSB: { for (int k = dataLength / 2 - 1; k >= 0; k--) { IQDataResolutionOrg[2 * k + 1] = (double)BitConverter.ToInt16(t.Data, 2 * k); } break; } default: break; } if (++ResolutionIndex < mm_Resolution)//凑包个数计数 { return; } ResolutionIndex = 0; //对不同分辨率(长度)的数据进行加窗处理 int mm_Resolution_Index = (int)Math.Log(mm_Resolution, 2); for (int i = 0; i < IQDataResolution.Length / 2; i++) { IQDataResolution[2 * i] = IQDataResolutionOrg[2 * i] * Window[mm_Resolution_Index][i]; IQDataResolution[2 * i + 1] = IQDataResolutionOrg[2 * i + 1] * Window[mm_Resolution_Index][i]; } t.m_Data = IQDataResolution; ///分发至时域处理类 DataIQWaveform.PushData(IQDataResolutionOrg); //进入此处必然处理下一包 需要为下一包申请指向新空间 IQDataResolution = new double[Resolution_length]; IQDataResolutionOrg = new double[Resolution_length]; } ///分发至频域处理类 DataFrequencySpectrum.PushData(t); }