コード例 #1
0
ファイル: ObsFileFixer.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 钟差探测与修复器
        /// </summary>
        /// <param name="maxBreakingSecond"></param>
        public ClockJumpCorrector2(double maxBreakingSecond)
        {
            int windowSize = 5;

            WindowA     = new TimeNumeralWindowData(windowSize, maxBreakingSecond);
            MaxRmsTimes = 8;
        }
コード例 #2
0
        /// <summary>
        /// 注册数据
        /// </summary>
        /// <param name="paramName"></param>
        /// <param name="time"></param>
        /// <param name="val"></param>
        /// <param name="isBreakTime">是否重新记录,如发生了周跳</param>
        public void Regist(string paramName, Time time, double val, bool isBreakTime)
        {
            TimePeriod            period  = null;
            TimeNumeralWindowData winData = null;
            var last = this.GetLastTimePeriod(paramName);

            if (last != null)
            {
                winData = GetWindowData(last);

                if (winData.Count > 0)
                {
                    var differ = Math.Abs(winData.AverageValue - val);
                    if (differ > MaxDiffer)
                    {
                        //重新建立分区
                        period  = base.Regist(paramName, time, true);
                        winData = GetWindowData(period);
                    }
                }
            }

            if (period == null)//新建
            {
                period  = base.Regist(paramName, time, isBreakTime);
                winData = GetWindowData(period);
            }

            //最后都要添加
            winData.Add(time, val);
        }
コード例 #3
0
        /// <summary>
        /// 获取窗口
        /// </summary>
        /// <param name="prn"></param>
        /// <param name="frequenceType"></param>
        /// <returns></returns>
        public TimeNumeralWindowData GetBufferValues(SatelliteNumber prn, FrequenceType frequenceType)
        {
            TimeNumeralWindowData window = new TimeNumeralWindowData(WindowSize);
            var buffer = this.Buffers;
            //首先从过去的
            var lastWindowOfP1 = LastWindowDataManager.GetOrCreate(BuildKey(prn, frequenceType));

            window.Add(lastWindowOfP1);

            //然后从bufffer里面提取另一半
            var bufferOfEpoches = buffer.GetSubList(0, HalfWindowSize);

            foreach (var epoch in bufferOfEpoches)
            {
                if (epoch.Contains(prn))
                {
                    var sat  = epoch[prn];
                    var time = epoch.ReceiverTime;
                    var p    = sat[frequenceType].PseudoRange.Value;//原始数据

                    window.Add(time, p);
                }
            }
            return(window);
        }
コード例 #4
0
        /// <summary>
        /// 提取绑定的窗口数据
        /// </summary>
        /// <param name="period"></param>
        /// <returns></returns>
        public TimeNumeralWindowData GetWindowData(TimePeriod period)
        {
            TimeNumeralWindowData data = null;

            if (period.Tag == null)
            {
                data       = new TimeNumeralWindowData(100000, MaxGapSecond * 2);
                period.Tag = data;
            }
            else
            {
                data = period.Tag as TimeNumeralWindowData;
            }
            return(data);
        }
コード例 #5
0
        public TimePeriod GetTimePeriod(string key, TimeNumeralWindowData manager)
        {
            var vals = Get(key);

            foreach (var item in vals)
            {
                var data = item.Tag as TimeNumeralWindowData;
                if (data == null)
                {
                    continue;
                }
                if (data == manager)
                {
                    return(item);
                }
            }
            return(null);
        }
コード例 #6
0
 /// <summary>
 ///  数据多项式平滑器
 /// </summary>
 /// <param name="maxEpochCount"></param>
 /// <param name="name"></param>
 public TimedSmoothValueBuilder(int maxEpochCount, string name)
 {
     this.Name         = name;
     NumeralWindowData = new TimeNumeralWindowData(maxEpochCount, 5 * 60);
     this.Order        = 2;
 }