예제 #1
0
        /// <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 };
        }
예제 #2
0
        /// <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 };
        }