示例#1
0
        /// <summary>
        /// 音频
        /// </summary>
        /// <param name="args"></param>
        private void AudioInput_DataGenerated(DataGeneratedEventArgs args)
        {
            double[][] samples = args.Samples;

            if (samples.Length == 0)
            {
                return;
            }

            int channelIndex = 0;

            if (m_aWaveformMonitors != null)
            {
                foreach (WaveformMonitor wm in m_aWaveformMonitors)
                {
                    wm.FeedData(new double[1][]
                    {
                        samples[channelIndex]
                    });
                    channelIndex++;
                }
            }

            //Feed multi-channel data to FFT calculator. If it gives a calculated result, set multi-channel result in the selected FFT chart
            if (m_fftCalculator != null)
            {
                double[][][] yValues;
                double[][][] xValues;

                if (m_fftCalculator.FeedDataAndCalculate(samples, out xValues, out yValues))
                {
                    int rowCount = xValues.Length;

                    for (channelIndex = 0; channelIndex < _channelCount; channelIndex++)
                    {
                        if (m_aSpectrograms2D != null)
                        {
                            m_aSpectrograms2D[channelIndex].SetData(yValues, channelIndex, rowCount);
                        }
                    }
                }
            }

            //TODO
            //base.DataGenerated(samples[0].Length);
        }
示例#2
0
        /// <summary>
        /// 音频数据更新
        /// </summary>
        /// <param name="args"></param>
        private void AudioInput_DataGenerated(DataGeneratedEventArgs args)
        {
            double[][] samples = args.Samples;

            if (samples.Length == 0)
            {
                return;
            }

            //源波
            double[] souceWave = samples[0];

            //生成载波
            double MaxAmplitude = 10000;

            double[] carryWave = WaveGenerator.Sine(samples[0].Count(),
                                                    (int)MaxAmplitude, _samplingFrequency, Param.moudulateFrequency);

            //生成调制波
            double[] modulatedWava = new double[souceWave.Count()];
            for (int i = 0; i < souceWave.Count(); i++)
            {
                double signal = souceWave[i] * carryWave[i];
                //每个信号除以载波幅度以约束其值范围
                signal          /= MaxAmplitude;
                modulatedWava[i] = signal;
            }

            //为示波器输入数据
            if (m_aWaveformMonitors != null)
            {
                double[][] waveData = new double[_seriesNames.Count()][];
                waveData[0] = souceWave;
                waveData[1] = carryWave;
                waveData[2] = modulatedWava;
                waveData[3] = samples[0];
                m_aWaveformMonitors.FeedData(waveData);
            }

            //Feed multi-channel data to FFT calculator. If it gives a calculated result, set multi-channel result in the selected FFT chart
            if (m_fftCalculator != null)
            {
                double[][][] yValues;
                double[][][] xValues;

                double[][] data = new double[2][];
                data[0] = souceWave;
                data[1] = modulatedWava;
                if (m_fftCalculator.FeedDataAndCalculate(data, out xValues, out yValues))
                {
                    int rowCount = xValues.Length;
                    m_aSpectrograms2D_source.SetData(yValues, 0, rowCount);
                    m_AreaSpectrum_souce.SetData(xValues[0][0], yValues[0][0]);
                    m_aSpectrograms2D_signal.SetData(yValues, 1, rowCount);
                    m_AreaSpectrum_signal.SetData(xValues[0][1], yValues[0][1]);
                }
            }

            //TODO
            //base.DataGenerated(samples[0].Length);
        }