Beispiel #1
0
        private void btnFindAllCorPeak_Click(object sender, EventArgs e)
        {
            if (!_allFbList.Any())
            {
                return;
            }
            _allCorPeakList = new List <int>(_allFbList.Count);
            var sg = new SeqGen(_seqGen);

            if (numCorStart.Value > numCorEnd.Value)
            {
                var t = numCorStart.Value;
                numCorStart.Value = numCorEnd.Value;
                numCorEnd.Value   = t;
            }
            int start = (int)numCorStart.Value - 1;
            int end   = (int)numCorEnd.Value - 1;

            Stopwatch sw = new Stopwatch();



            if (cmbCorrelationMethod.SelectedIndex != 2)
            {
                if (MessageBox.Show("Данная операция отключена",
                                    "", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Information) != DialogResult.Ignore)
                {
                    return;
                }

                if (cmbCorrelationMethod.SelectedIndex == 0)
                {
                    var sp = new SearchPeak(
                        sg,
                        1,
                        1,
                        double.Parse(txtTimeConstant.Text.Replace(',', '.'), new CultureInfo("en-US")),
                        double.Parse(txtDnl.Text.Replace(',', '.'), new CultureInfo("en-US")),
                        cmbPowNl.SelectedIndex + 2,
                        true
                        );

                    sw.Start();
                    foreach (var fb in _allFbList)
                    {
                        sg.Feedback = fb;
                        sp.Calculate();

                        var i     = 0;
                        var oldMv = double.MinValue;
                        var res   = 0;

                        var fSt = (start + DiscreteInMinPulse - 1) / DiscreteInMinPulse + 1;
                        var fE  = end / DiscreteInMinPulse;

                        foreach (var val in sp.ResponseNL)
                        {
                            if (fSt <= i && i <= fE && val > oldMv) //Добавить диапазон
                            {
                                oldMv = val;
                                res   = i;
                            }
                            i++;
                        }

                        res *= DiscreteInMinPulse;
                        res -= DiscreteInMinPulse - 1;
                        res  = Math.Max(res, start);
                        res  = Math.Min(res, end);
                        _allCorPeakList.Add(res);
                    }
                }
                else
                {
                    return;
                }
            }
            else
            {
                var ct = sg.Period * 1L * DiscreteInMinPulse;
                ct *= ct * _allFbList.Count * (int)numCorrelationPeriods.Value;

                if (LongTimeMessageNo(ct))
                {
                    return;
                }


                var sp = new PrecisionSearchPeak(
                    sg,
                    DiscreteInMinPulse,
                    (int)numCorrelationPeriods.Value,
                    double.Parse(txtTimeConstant.Text.Replace(',', '.'), new CultureInfo("en-US")),
                    double.Parse(txtDnl.Text.Replace(',', '.'), new CultureInfo("en-US")),
                    cmbPowNl.SelectedIndex + 2
                    );

                sw.Start();
                foreach (var fb in _allFbList)
                {
                    sg.Feedback = fb;
                    sp.Calculate();

                    var i     = 0;
                    var oldMv = double.MinValue;
                    var res   = 0;

                    foreach (var val in sp.CorrelationNL.Skip(sp.OnePer).Take(sp.OnePer))
                    {
                        if (start <= i && i <= end && (double)val > oldMv)  //Добавить диапазон
                        {
                            oldMv = (double)val;
                            res   = i;
                        }
                        i++;
                    }
                    _allCorPeakList.Add(res);
                }
            }
            sw.Stop();
            lblTime.Text = sw.ElapsedMilliseconds.ToString();

            UpdateFeedbacksList();
        }