/// <summary> /// 直接取整。设置属性。 /// </summary> /// <param name="length">数值</param> public void SetAmbiguity(double length) { //宽巷模糊度 long NaMinusMb = (long)(length / WideFactor / WidePhase.Frequence.WaveLength); this.WidePhase.Ambiguity = NaMinusMb; //窄巷模糊度 double remained = length - WideFactor * this.WidePhase.PhaseRange; long ambiA = (long)(remained / NarrowFactor / NarrowPhase.Frequence.WaveLength); this.NarrowPhase.Ambiguity = ambiA; long ambiB = ambiA - NaMinusMb; //返回验证 var facs = PhaseCombinationBuilder.GetIonoFreePhaseCycleCombFactors(FrequenceA, FrequenceB); //double remain2 = facs[0] * this.WidePhase.Ambiguity * FrequenceA.WaveLength + facs[1] * this.WidePhase.Ambiguity * FrequenceB.WaveLength; //int ambi2 = (int)(remain2 / FrequenceB.WaveLength); //验证 double distance = WideFactor * this.WidePhase.PhaseRange + NarrowFactor * this.NarrowPhase.PhaseRange; // double differ2 = ambi2 - this.NarrowPhase.Ambiguity; double differ = length - distance; }
/// <summary> /// 构造函数。采用两个频率初始化。 /// </summary> /// <param name="A">频率A</param> /// <param name="B">频率B</param> public IonoFreeCombination(PhaseRangeObservation A = null, PhaseRangeObservation B = null) { PhaseCombination combination = PhaseCombinationBuilder.GetIonoFreeRangeCombination(A.Value, B.Value, A.Frequence, B.Frequence); this.Value = combination.Value; this.Frequence = combination.Frequence; double f1 = A.Frequence.Value; double f2 = B.Frequence.Value; this.WideFactor = (f1 * f2) / (f1 * f1 - f2 * f2); this.NarrowFactor = f1 / (f1 + f2); Frequence wideFrequence = new Gnsser.Frequence("WidePhase", A.Frequence.Value - B.Frequence.Value); this.NarrowPhase = new PhaseValue(0, A.Frequence); this.WidePhase = new PhaseValue(0, wideFrequence); this.FrequenceA = A.Frequence; this.FrequenceB = B.Frequence; }