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