コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }