public string PerformMeasure(MeasureType type, double[] data)
        {
            double value;

            switch (type)
            {
            case MeasureType.DC:
                value = ArrayCalculation.Average(data);
                break;

            case MeasureType.RMS:
                value = ArrayCalculation.RMS(data);
                break;

            case MeasureType.PeakAmp:
            case MeasureType.PeakFreq:
                double dt = 1.0 / _oscilloscopeGlobalInfo.SampleRate;
                double peakFreq, peakAmp;
                Spectrum.PeakSpectrumAnalysis(data, dt, out peakFreq, out peakAmp);
                value = (type == MeasureType.PeakFreq) ? peakFreq : peakAmp;
                break;

            default:
                return(Constants.NotAvailable);

                break;
            }
            return(Utility.GetShowValue(value));
        }
Exemple #2
0
        public override void Fetch(ref double[,] fetchData)
        {
            double[,] data = new double[_samplesToRead, simChList.Count];
            List <double[]> Data = new List <double[]>();

            for (int i = 0; i < simChList.Count; i++)
            {
                double[] simData = new double[_samplesToRead];
                double[] noise   = new double[_samplesToRead];

                Generation.UniformWhiteNoise(ref noise, 0.03);

                if (i == 0)
                {
                    Generation.SquareWave(ref simData, 1, 50, 10);
                }
                else
                {
                    Generation.SineWave(ref simData, 1, 0, 10);
                }
                ArrayCalculation.Add(simData, noise, ref simData);
                Data.Add(simData);
            }

            for (int i = 0; i < Data.Count; i++)
            {
                ArrayManipulation.ReplaceArraySubset(Data.ElementAt(i), ref data, i, ArrayManipulation.IndexType.column);
            }


            fetchData = data;
        }
Exemple #3
0
        public string PerformMeasure(MeasureType type, double[] data)
        {
            string value;

            switch (type)
            {
            case MeasureType.DC:
                value = ArrayCalculation.Average(data).ToString();
                break;

            case MeasureType.RMS:
                value = ArrayCalculation.RMS(data).ToString();
                break;

            case MeasureType.PeakAmp:
            case MeasureType.PeakFreq:
                double dt = 1.0 / _oscilloscopeGlobalInfo.SampleRate;
                double peakFreq, peakAmp;
                PeakSpectrum.PeakSpectrumAnalysis(data, dt, out peakFreq, out peakAmp);
                value = (type == MeasureType.PeakFreq) ? peakFreq.ToString() : peakAmp.ToString();
                break;

            default:
                value = "";
                break;
            }
            return(value);
        }
Exemple #4
0
        private void FetchLoop()
        {
            while (isRunning)
            {
                if (device.SelectedChannels.Length != 0)
                {
                    if (device.ReadyToFetch)
                    {
                        device.Fetch(ref readData);
                        ArrayCalculation.MultiplyScale(ref readData, Double.Parse(_attenuation));

                        //isExecCompleted = true;
                        isRunning     = false;
                        dataAvailable = true;
                    }
                }
                Thread.Sleep(1);
            }
        }
        /// <summary>
        /// 计算出信号的AC成分以及DC成分(单位:RMS)
        /// </summary>
        /// <param name="signalData">信号来源</param>
        /// <param name="acTerm">AC成分</param>
        /// <param name="dcTerm">DC成分</param>
        public static void EstimateACDC(double[] signalData, out double acTerm, out double dcTerm)
        {
            double[] inputData      = new double[signalData.Length];
            double[] acData         = new double[signalData.Length];
            double[] hann_weighting = Window.Hann(signalData.Length);
            double   coeff_cg       = 0.5; // cg=0.5, compensation for Hanning windowing
            double   coeff_enbw     = 1.5; // enbw=1.5, compensation for Hanning windowing

            //DC term extraction
            //Hanning windowing the signal
            ArrayCalculation.Multiply(hann_weighting, signalData, ref inputData);
            //Get the mean value and compensated by the cg coeff
            dcTerm = Statistics.Mean(inputData) / coeff_cg;

            //AC term extraction
            Buffer.BlockCopy(signalData, 0, inputData, 0, signalData.Length * sizeof(double));
            //Substract from the dc term
            ArrayCalculation.SubtractOffset(ref inputData, dcTerm);
            //Hanning windowing the signal
            ArrayCalculation.Multiply(hann_weighting, inputData, ref acData);
            //Get the variance data, compensated by coeff , and sqrt to derive ac term
            acTerm = Math.Sqrt(Statistics.Variance(acData) / (coeff_cg * coeff_cg * coeff_enbw));
        }
 public virtual void Substract(double[] src1, double[] src2, ref double[] dest)
 {
     ArrayCalculation.Subtract(src1, src2, ref dest);
 }
 public virtual void Add(short[] src1, short[] src2, ref short[] dest)
 {
     ArrayCalculation.Add(src1, src2, ref dest);
 }
 public virtual void Add(float[] src1, float[] src2, ref float[] dest)
 {
     ArrayCalculation.Add(src1, src2, ref dest);
 }
 public virtual void Multiply(ref short[] srcDest, short scalar)
 {
     ArrayCalculation.MultiplyScale(ref srcDest, scalar);
 }
 public virtual double Sum(float[] src1)
 {
     return(ArrayCalculation.Sum(src1));
 }
 public virtual void Substract(ref double[] srcDest, double scalar)
 {
     ArrayCalculation.SubtractOffset(ref srcDest, scalar);
 }
 public virtual void Multiply(float[] src1, float[] src2, ref float[] dest)
 {
     ArrayCalculation.Multiply(src1, src2, ref dest);
 }
 public virtual void Multiply(double[] src1, double[] src2, ref double[] dest)
 {
     ArrayCalculation.Multiply(src1, src2, ref dest);
 }
 public virtual void Initialize(ref float[] dest, float initValue)
 {
     ArrayCalculation.InitializeArray(ref dest, initValue);
 }
 public virtual void Initialize(ref double[] dest, double initValue)
 {
     ArrayCalculation.InitializeArray(ref dest, initValue);
 }
 public virtual void Absolute(float[] src, ref float[] dest)
 {
     ArrayCalculation.Abs(src, ref dest);
 }
 public virtual void Absolute(double[] src, ref double[] dest)
 {
     ArrayCalculation.Abs(src, ref dest);
 }
 public virtual void Substract(float[] src1, float[] src2, ref float[] dest)
 {
     ArrayCalculation.Subtract(src1, src2, ref dest);
 }
 public virtual void Substract(short[] src1, short[] src2, ref short[] dest)
 {
     ArrayCalculation.Subtract(src1, src2, ref dest);
 }
 public virtual void Multiply(short[] src1, short[] src2, ref short[] dest)
 {
     ArrayCalculation.Multiply(src1, src2, ref dest);
 }
 public virtual void Substract(ref short[] srcDest, short scalar)
 {
     ArrayCalculation.SubtractOffset(ref srcDest, scalar);
 }
        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();
                    });
                }
            }
        }
 public virtual void Add(double[] src1, double[] src2, ref double[] dest)
 {
     ArrayCalculation.Add(src1, src2, ref dest);
 }
 public virtual void Multiply(ref double[] srcDest, double scalar)
 {
     ArrayCalculation.MultiplyScale(ref srcDest, scalar);
 }