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