/// <summary> /// 提取一个测站所有时段卫星的MW平均值,作为具有卫星和接收机硬件延迟的宽巷模糊度。 /// 此处假定时段内卫星和接收机硬件延迟变化可以忽略不计。 /// </summary> /// <returns></returns> public MultiSatPeriodRmsNumeralStorage Build() { Init(); foreach (var epoch in BuffferStream) { //简单的质量控制 if (epoch == null) { continue; } Run(epoch); }//end of stream //最后,将最后的窗口数据进行检查输出 foreach (var item in WindowDataManager.Data) { var prn = item.Key; var windowData = WindowDataManager.GetOrCreate(prn); CheckBuildPeriodResultAndClear(windowData, prn); } this.OnCompleted(); return(Result); }
/// <summary> /// 过滤掉小历元时段,在缓存中操作,确保缓存大于断裂数量 /// </summary> /// <param name="info"></param> private void CheckAndFiltSmallSpan(EpochInformation info) { //添加 foreach (var sat in info) { WindowDataManager.GetOrCreate(sat.Prn).Add(info.ReceiverTime); } ////保证有足够的数量 //if (!WindowDataManager.HasFull) { return; } JudgeAndFiltSmallSpanInBuffer(info.ReceiverTime, info.ReceiverTime == LastEpoch); }
/// <summary> /// 处理一个 /// </summary> /// <param name="epoch"></param> public void Process(EpochInformation epoch) { Time time = epoch.ReceiverTime; //计算 foreach (var sat in epoch) { if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType) || sat.Ephemeris == null) { continue; } var prn = sat.Prn; double mwValue = sat.Combinations.MwPhaseCombinationValue; var weight = 1.0; if (sat.Polar.Elevation < 30) { weight = 2 * Math.Sin(sat.GeoElevation * Geo.Coordinates.AngularConvert.DegToRadMultiplier); } var windowData = WindowDataManager.GetOrCreate(prn); //弧段断裂,求值 if (sat.IsUnstable || windowData.IsKeyBreaked(time)) { CheckBuildPeriodResultAndClear(windowData, prn); } windowData.Add(time, new WeightedNumeral(mwValue, weight)); } //每一历元结束,都做一次判断,确保数据完全输出 foreach (var item in WindowDataManager.Data) { var prn = item.Key; var windowData = WindowDataManager.GetOrCreate(prn); //弧段断裂,求值 if (windowData.IsKeyBreaked(time)) { CheckBuildPeriodResultAndClear(windowData, prn); } } }
/// <summary> /// 过滤掉小历元时段,在缓存中操作,确保缓存大于断裂数量 /// </summary> /// <param name="info"></param> private void CheckAndFiltSmallSpan(RinexEpochObservation info) { //是否启用 if (!this.Option.IsEnableMinEpochCount) { return; } //添加 foreach (var sat in info) { WindowDataManager.GetOrCreate(sat.Prn).Add(info.ReceiverTime); } ////保证有足够的数量 //if (!WindowDataManager.HasFull) { return; } JudgeAndFiltSmallSpanInBuffer(info.ReceiverTime, info.ReceiverTime == LastEpoch); }