/// <summary> /// SteppedLevelSine波形生成 /// </summary> /// <param name="sampleRate">采样率</param> /// <param name="amplitudeMin">最小频率</param> /// <param name="amplitudeMax">最大频率</param> /// <param name="frequency">频率</param> /// <param name="steps">波幅阶数</param> /// <param name="minCycle">最小周期</param> /// <param name="minDuration">最小时间</param> /// <param name="isLog">是否对数波形</param> /// <param name="isInverse">是否反转</param> /// <returns>波形数据</returns> public static double[] SteppedLevelSineWaveform(double sampleRate, double amplitudeMin, double amplitudeMax, double frequency, ushort steps, ushort minCycle, double minDuration, bool isLog = false, bool isInverse = false) { SteppedLevelSineWaveform steppedLevelSineWaveform = new SteppedLevelSineWaveform(); steppedLevelSineWaveform.CreateData(amplitudeMin, amplitudeMax, frequency, steps, isLog, isInverse, minCycle, minDuration, sampleRate); double[] waveData = new double[steppedLevelSineWaveform.GetTotalPoints()]; steppedLevelSineWaveform.GetCopyOfData(waveData); return(waveData); }
public void Start() { if (null == tableLayoutPanel_waveConfig.Controls[0]) { return; } double sampleRate = (double)numericUpDown_sampleRate.Value; Generator waveGenerator = tableLayoutPanel_waveConfig.Controls[0] as Generator; dataGridView_result.Rows.Clear(); AITask.AITask input = _globalInfo.AITask; AOTask.AOTask output = _globalInfo.AOTask; output.SetUpdateRate(sampleRate); input.SetSampleRate(sampleRate); double channelRange = waveGenerator.GetAmplitude(); output.AddChannel(comboBox_aoChannel.SelectedIndex, -1 * channelRange, channelRange); input.AddChannel(comboBox_refChannel.SelectedIndex, -1 * channelRange, channelRange); input.AddChannel(comboBox_testChannel.SelectedIndex, -1 * channelRange, channelRange); double[] outData = waveGenerator.Generate(); output.SetSamplesToUpdate(outData.Length); double outTime = outData.Length / output.GetUpdateRate(); input.SetSamplesToAcquire((int)(outTime * input.GetSampleRate() * GlobalInfo.ExtraReadTime)); output.WriteData(outData, -1); input.Start(); output.Start(); double[,] readWaveform = new double[input.GetSamplesToAcquire(), 2]; input.ReadData(ref readWaveform, readWaveform.GetLength(0), GlobalInfo.ReadTimeOut); double[,] plotData = new double[readWaveform.GetLength(1), readWaveform.GetLength(0)]; ArrayManipulation.Transpose(readWaveform, ref plotData); _globalInfo.Mainform.Invoke(new Action <double[, ], double, double>(easyChart_waveform.Plot), plotData, 0, 1); _testData = new double[plotData.GetLength(1)]; Buffer.BlockCopy(plotData, 0, _testData, 0, _testData.Length * sizeof(double)); _refWaveform = waveGenerator.GetRefWaveform() as SteppedLevelSineWaveform; // double[] peakToPeak, thd, nr, thdPlusNr, rms; // SeeSharpTools.JY.Audio.AudioAnalyzer.AnalyzeSteppedLevelSineWaveform(testWaveData, refWaveform, // out peakToPeak, out thd, out nr, out thdPlusNr, out rms); _analyzeSize = _refWaveform.GetTotalPoints(); }