/// <summary> /// 每隔10ms刷新用户界面 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; samplesToPreview = int.Parse(textBox_previewSamples.Text); double length = 0; bool recordDone = false; //步骤5:获取流盘状态,包括已流盘长度和流盘是否结束标志位 dstask.GetRecordStatus(out length, out recordDone); if (recordDone) { //流盘已结束 buttonStop_Click(null, null); progressBar1.Value = progressBar1.Maximum; } else { //步骤6:流盘仍在进行中,预览最新流盘数据并显示 dstask.ReadLatestData(ref priewData); ArrayManipulation.Transpose(priewData, ref transposedData); easyChart_signal.Plot(transposedData); for (int i = 0; i < channelNumbers.Count; i++) { ArrayManipulation.GetArraySubset(transposedData, i, ref singleChannelPriewData, ArrayManipulation.IndexType.row); Spectrum.PowerSpectrum(singleChannelPriewData, double.Parse(textBox_sampleRate.Text), ref singleChannelSpectrumData, out spectrumInterval[i], SpectrumUnits.V2); ArrayManipulation.ReplaceArraySubset(singleChannelSpectrumData, ref previewSpectrumBufferTransposed, i, ArrayManipulation.IndexType.row); } easyChart_spectrum.Plot(previewSpectrumBufferTransposed, 0, spectrumInterval[0]); progressBar1.Value = (int)(length / double.Parse(textBox_recordLength.Text) * progressBar1.Maximum); timer1.Enabled = true; } }
public void SubsetData(double[,] readData, int index, double samplingRate) { SampleRate = samplingRate; //If the size of the data length is the same, don't create new array to save the memory usage if (_dataLength != readData.GetLength(0)) { _dataLength = readData.GetLength(0); tempData = new double[100000]; } ArrayManipulation.GetArraySubset(readData, index, ref tempData, ArrayManipulation.IndexType.column); PreData = tempData; }
private void timer_measure_Tick(object sender, EventArgs e) { timer_measure.Enabled = false; if (dataAvailable) { MathEngineHandler.WfmSubset(readData, device.SelectedChannels.ToList(), (double)numericUpDown_sampleRate.Value); ArrayManipulation.Transpose(readData, ref displayData); MathEngineHandler.Process(); if (spectrumMode) { for (int i = 0; i < readData.GetLength(1); i++) { ArrayManipulation.GetArraySubset(readData, i, ref tempData, ArrayManipulation.IndexType.column); Spectrum.PowerSpectrum(tempData, _sampleRate, ref tempSpecData, out df); ArrayManipulation.ReplaceArraySubset(tempSpecData, ref displayData, i, ArrayManipulation.IndexType.row); } easyChart1.Plot(displayData, 0, df); } else { if (checkBox_timeDisplay.Checked) { easyChart1.Plot(displayData, 0, 1.0 / (double)numericUpDown_sampleRate.Value); } else { easyChart1.Plot(displayData); } } easyChart1.SeriesNames = _seriesDefaultNames; easyChart1.SeriesNames = _chNames.ToArray(); dgv_mathEngine.Invalidate(); if (isSingleRun) { easyButton_stop_Click(null, null); } else { device.Stop(); easyButton_contStart_Click(null, null); } } else { timer_measure.Enabled = true; } }
/// <summary> /// 分析StepSine数据 /// </summary> //private void StepSineAnalysis() //{ // stepSine.Excitation = TempInput; // stepSine.Response = TempOutput; // stepSine.Analysis(); // easyChartInput.Plot(TempInput); // easyChartOutput.Plot(TempOutput); // easyChartMagnitude.Plot(stepSine.Frequencies,stepSine.AmplitudesDB); // //easyChartPhase.Plot(stepSine.Frequencies,stepSine.PhasesDeg); // easyChartTHD.Plot(stepSine.Frequencies,stepSine.THDsDB); //} /// <summary> /// 分析WhiteNoise数据 /// </summary> private void WhiteNoiseAnalysis() { double samplingRate = 200000; int freqLines = 5000; //set frequency resolution here double df = samplingRate / 2 / freqLines; double[] analysisInWav = new double[freqLines * 2]; double[] analysisOutWav = new double[freqLines * 2]; double[] bodeMag = new double[freqLines]; double[] bodePhase = new double[freqLines]; int numOfAverage = (int)Math.Floor((decimal)(TempInput.Length / 2 / freqLines)); easyChartInput.Plot(TempInput); easyChartOutput.Plot(TempOutput); //创建FRF分析对象 WhiteNoiseFRF FRFAnalysis = new WhiteNoiseFRF(); FRFAnalysis.SetAveraging(WhiteNoiseFRF.AverageMode.RMS, numOfAverage, true); //FRF多次分析取平均 for (int i = 0; i < numOfAverage; i++) { ArrayManipulation.GetArraySubset(TempInput, i * 2 * freqLines, ref analysisInWav); ArrayManipulation.GetArraySubset(TempOutput, i * 2 * freqLines, ref analysisOutWav); FRFAnalysis.SetInput(analysisInWav); FRFAnalysis.SetOutput(analysisOutWav); if (i == 0) { FRFAnalysis.InitStatus(); } bodeMag = FRFAnalysis.GetMagenitude(true); bodePhase = FRFAnalysis.GetPhase(true); } bool averageDone = FRFAnalysis.AveragingDone(); easyChartMagnitude.Plot(bodeMag, 0, df); //easyChartPhase.Plot(bodePhase, 0, df); }
public virtual void GetSubset <T>(T[,] src, int index, ref T[] dest, bool byRow = false) { ArrayManipulation.GetArraySubset(src, index, ref dest, byRow ? ArrayManipulation.IndexType.row : ArrayManipulation.IndexType.column); }
public virtual void GetSubset <T>(T[] src, int index, ref T[] dest) { ArrayManipulation.GetArraySubset(src, index, ref dest); }
public virtual void GetSubset <T>(T[,] src, int index, ref T[] dest, bool byRow = false) { ArrayManipulation.GetArraySubset(src, index, ref dest, byRow ? MajorOrder.Row : MajorOrder.Column); }
private void ProcessQueue() { while (start) { Thread.Sleep(1); if (myqueue.Count > 0) { qoutdata = myqueue.Dequeue(); if (lasttime.ToString("yyy_MM_dd_HH_mm_ss") == qoutdata.logtime.ToString("yyy_MM_dd_HH_mm_ss")) { qoutdata.logtime = qoutdata.logtime.AddSeconds(1); } if (qoutdata.averageindex == 1) { csvfilename = qoutdata.logtime.ToString("yyy_MM_dd_HH_mm_ss"); } lasttime = qoutdata.logtime; //显示波形需要做一次转置 if (Chcount == 1) { ArrayManipulation.GetArraySubset(qoutdata.RawData, 0, ref ch0RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch0RawValue, ch0sensivity); Spectrum.PowerSpectrum(ch0RawValue, aitask.SampleRate, ref ch0sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); spectrumcalculation(1, qoutdata.averageindex, ch0sprectrumValue); CsvData(filepath, "CH0_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch0sprectrumValue, ch0averagesprectrumValue); if (qoutdata.averageindex == averagetimes) { if (mqtt_client.IsConnected) { WriteChannelData(1); } copyalarmfile(filepath, qoutdata.logtime); } } else if (Chcount == 2) { ArrayManipulation.GetArraySubset(qoutdata.RawData, 0, ref ch0RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch0RawValue, ch0sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 1, ref ch1RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch1RawValue, ch1sensivity); Spectrum.PowerSpectrum(ch0RawValue, aitask.SampleRate, ref ch0sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch1RawValue, aitask.SampleRate, ref ch1sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); spectrumcalculation(1, qoutdata.averageindex, ch0sprectrumValue); spectrumcalculation(2, qoutdata.averageindex, ch1sprectrumValue); CsvData(filepath, "CH0", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch0sprectrumValue, ch0averagesprectrumValue); CsvData(filepath, "CH1", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch1sprectrumValue, ch1averagesprectrumValue); if (qoutdata.averageindex == averagetimes) { if (mqtt_client.IsConnected) { WriteChannelData(2); } copyalarmfile(filepath, qoutdata.logtime); } } else if (Chcount == 3) { ArrayManipulation.GetArraySubset(qoutdata.RawData, 0, ref ch0RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch0RawValue, ch0sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 1, ref ch1RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch1RawValue, ch1sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 2, ref ch2RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch2RawValue, ch2sensivity); Spectrum.PowerSpectrum(ch0RawValue, aitask.SampleRate, ref ch0sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch1RawValue, aitask.SampleRate, ref ch1sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch2RawValue, aitask.SampleRate, ref ch2sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); spectrumcalculation(1, qoutdata.averageindex, ch0sprectrumValue); spectrumcalculation(2, qoutdata.averageindex, ch1sprectrumValue); spectrumcalculation(3, qoutdata.averageindex, ch2sprectrumValue); CsvData(filepath, "CH0_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch0sprectrumValue, ch0averagesprectrumValue); CsvData(filepath, "CH1_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch1sprectrumValue, ch1averagesprectrumValue); CsvData(filepath, "CH2_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch2sprectrumValue, ch2averagesprectrumValue); if (qoutdata.averageindex == averagetimes) { if (mqtt_client.IsConnected) { WriteChannelData(3); } copyalarmfile(filepath, qoutdata.logtime); } } else { ArrayManipulation.GetArraySubset(qoutdata.RawData, 0, ref ch0RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch0RawValue, ch0sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 1, ref ch1RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch1RawValue, ch1sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 2, ref ch2RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch2RawValue, ch2sensivity); ArrayManipulation.GetArraySubset(qoutdata.RawData, 3, ref ch3RawValue, ArrayManipulation.IndexType.column); ArrayCalculation.MultiplyScale(ref ch3RawValue, ch3sensivity); Spectrum.PowerSpectrum(ch0RawValue, aitask.SampleRate, ref ch0sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch1RawValue, aitask.SampleRate, ref ch1sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch2RawValue, aitask.SampleRate, ref ch2sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); Spectrum.PowerSpectrum(ch3RawValue, aitask.SampleRate, ref ch3sprectrumValue, out df, SpectrumUnits.V, WindowType.Hanning); spectrumcalculation(1, qoutdata.averageindex, ch0sprectrumValue); spectrumcalculation(2, qoutdata.averageindex, ch1sprectrumValue); spectrumcalculation(3, qoutdata.averageindex, ch2sprectrumValue); spectrumcalculation(4, qoutdata.averageindex, ch3sprectrumValue); CsvData(filepath, "CH0_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch0sprectrumValue, ch0averagesprectrumValue); CsvData(filepath, "CH1_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch1sprectrumValue, ch1averagesprectrumValue); CsvData(filepath, "CH2_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch2sprectrumValue, ch2averagesprectrumValue); CsvData(filepath, "CH3_", csvfilename, qoutdata.averageindex, qoutdata.logtime, FFTdf, ch3sprectrumValue, ch3averagesprectrumValue); if (qoutdata.averageindex == averagetimes) { if (mqtt_client.IsConnected) { WriteChannelData(4); } copyalarmfile(filepath, qoutdata.logtime); } } this.Invoke((MethodInvoker) delegate { if (radioButtonCH0.Checked == true) { easyChartTime.Plot(ch0RawValue); easyChartFFT.Plot(ch0sprectrumValue); } if (radioButtonCH1.Checked == true) { easyChartTime.Plot(ch1RawValue); easyChartFFT.Plot(ch1sprectrumValue); } if (radioButtonCH2.Checked == true) { easyChartTime.Plot(ch2RawValue); easyChartFFT.Plot(ch2sprectrumValue); } if (radioButtonCH3.Checked == true) { easyChartTime.Plot(ch3RawValue); easyChartFFT.Plot(ch3sprectrumValue); } textBox1.Text = myqueue.Count.ToString(); }); } } }