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)); }
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; }
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); }
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); }