Beispiel #1
0
        /// <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;
            }
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
 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;
     }
 }
Beispiel #4
0
        /// <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);
 }
Beispiel #7
0
 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();
                    });
                }
            }
        }