/// <summary> /// 配置分析参数 /// </summary> /// <param name="refWaveform">参考波形</param> public void SetAnalyzeParam(SteppedLevelSineWaveform refWaveform) { analyzer.SetReferenceWaveform(refWaveform.GetRawWaveform() as ManagedAudioLibrary.SteppedLevelSineWaveform); this.refWaveform = refWaveform; this.RefWaveform = refWaveform; IsAnalyzeParamSet = true; }
/// <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(); }
public static Form GetGenerator(GeneratorType type) { Form generatorPanel = null; switch (type) { case GeneratorType.AribitraryWaveform: break; case GeneratorType.FromWavFile: break; case GeneratorType.LogChirpWaveform: generatorPanel = new LogChripWaveForm(); break; case GeneratorType.MultiToneWaveform: generatorPanel = new MultiToneWaveForm(); break; case GeneratorType.SingleToneWaveForm: generatorPanel = new SingleToneWaveForm(); break; case GeneratorType.DualToneWaveForm: generatorPanel = new DualToneWaveForm(); break; case GeneratorType.SteppedLevelSineWaveform: generatorPanel = new SteppedLevelSineWaveform(); break; case GeneratorType.SteppedSineWaveform: generatorPanel = new SteppedSineWave(); break; default: break; } return(generatorPanel); }