/// <summary> /// 采用窗口进行平滑 /// </summary> /// <returns></returns> public double GetSmoothedRange() { if (NumeralWindowData.Count == 0) { throw new Exception("are you kidding? you must put one value first."); } if (NumeralWindowData.Count < this.Order + 1) { return(this.CurrentRaw); } var val = NumeralWindowData.GetLsPolyFit(Order).GetY(this.NumeralWindowData.Count - 1); double differ = val - CurrentRaw; return(val); }
/// <summary> /// 采用窗口进行平滑 /// </summary> /// <returns></returns> public double GetSmoothedRange() { if (NumeralWindowData.Count == 0) { throw new Exception("are you kidding? you must put one value first."); } if (NumeralWindowData.Count < this.Order + 1) { return(this.CurrentRaw); } var rmsVal = NumeralWindowData.GetPolyFitValue(SmoothTime, Order); var differ = rmsVal.Value - this.CurrentRaw; if (rmsVal.Rms > 10) { return(CurrentRaw); } return(rmsVal.Value); }
/// <summary> /// 数据多项式平滑器 /// </summary> /// <param name="maxEpochCount"></param> /// <param name="name"></param> public SmoothValueBuilder(int maxEpochCount, string name) { this.Name = name; NumeralWindowData = new NumeralWindowData(maxEpochCount); this.Order = 2; }
/// <summary> /// 重设。 /// </summary> public void Reset() { NumeralWindowData.Clear(); }
/// <summary> /// 滑动平均 /// </summary> private void MovingAverage() { Int32 count = Int32.Parse(this.textBox_windowSize.Text); NumeralWindowData = new Geo.NumeralWindowData(count); if (this.HasIndexColumn) { var dic = IndexedValues; Dictionary <Double, Double> result = new Dictionary <Double, Double>(); Dictionary <Double, Double> grossErrors = new Dictionary <Double, Double>(); foreach (var item in dic) { if (NumeralWindowData.IsFull) { if (errorRejectControl1.IsEnabled) { var isOvered = NumeralWindowData.IsOverLimited(item.Value, errorRejectControl1.MaxLimit, errorRejectControl1.IsRelative); if (isOvered) { grossErrors.Add(item.Key, item.Value); continue; } } result.Add(item.Key, NumeralWindowData.AverageValue); } NumeralWindowData.Add((int)item.Key, item.Value); } //输出 this.OutputLines = DoubleUtil.ToStringLines(result).ToArray(); ShowInfo("粗差:" + grossErrors.Count + " 个\r\n" + DoubleUtil.ToTableString(grossErrors)); } else { var doubles = Values;// new List<Double>(Utils.DoubleUtil.ParseLines(this.InputLines)); List <Double> result = new List <double>(); List <Double> grossErrors = new List <double>(); foreach (var item in doubles) { if (NumeralWindowData.IsFull) { if (errorRejectControl1.IsEnabled) { var isOvered = NumeralWindowData.IsOverLimited(item, errorRejectControl1.MaxLimit, errorRejectControl1.IsRelative); if (isOvered) { grossErrors.Add(item); continue; } } result.Add(NumeralWindowData.AverageValue); } NumeralWindowData.Add(item); } //输出 this.OutputLines = DoubleUtil.ToStringLines(result).ToArray(); ShowInfo("粗差:" + grossErrors.Count + " 个\r\n" + DoubleUtil.ToColumnString(grossErrors)); } }