Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
 /// <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;
 }
Exemplo n.º 4
0
 /// <summary>
 /// 重设。
 /// </summary>
 public void Reset()
 {
     NumeralWindowData.Clear();
 }
Exemplo n.º 5
0
        /// <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));
            }
        }