/// <summary> /// Calculates the fourier transforms and updates the axis scales. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BackgroundWorker_CalculateFourierTransforms(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; float[] pidFFTW = FourierTransform.CalculateFFTW(PIDOutput.ToArray()); float[] adrcFFTW = FourierTransform.CalculateFFTW(ADRCOutput.ToArray()); float[] pidAngleFFTW = FourierTransform.CalculateFFTW(PIDAngle.ToArray()); float[] adrcAngleFFTW = FourierTransform.CalculateFFTW(ADRCAngle.ToArray()); this.BeginInvoke((Action)(() => { double pidMax, adrcMax; pidMax = pidMaxValue.Filter((pidFFTW.Max() + Math.Abs(pidFFTW.Min())) / 2); adrcMax = adrcMaxValue.Filter((adrcFFTW.Max() + Math.Abs(adrcFFTW.Min())) / 2); pidScale.Text = "PID Scale: " + pidMax; adrcScale.Text = "ADRC Scale: " + adrcMax; chart3.ChartAreas[0].AxisY.Maximum = pidMax; chart3.ChartAreas[0].AxisY.Minimum = -pidMax; chart4.ChartAreas[0].AxisY.Maximum = adrcMax; chart4.ChartAreas[0].AxisY.Minimum = -adrcMax; })); e.Result = new float[4][] { pidFFTW, adrcFFTW, pidAngleFFTW, adrcAngleFFTW }; }
/// <summary> /// Calculates the fourier transforms and updates the axis scales. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CalculateFourierTransforms(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; float[] FFTW = FourierTransform.CalculateFFTW(PreviousOutputs.ToArray()); float[] AngleFFTW = FourierTransform.CalculateFFTW(PreviousAngles.ToArray()); this.BeginInvoke((Action)(() => { double fourierMaxOutput = feedbackMaxKalman.Filter((FFTW.Max() + Math.Abs(FFTW.Min())) / 2); pidScale.Text = "Scale: " + fourierMaxOutput; chart3.ChartAreas[0].AxisY.Maximum = fourierMaxOutput; chart3.ChartAreas[0].AxisY.Minimum = -fourierMaxOutput; })); e.Result = new float[2][] { FFTW, AngleFFTW }; }