@@ -121,6 +121,9 @@ def __init__(self, nav, pos0=np.zeros(3),
121121 self .nav .elmaskar = np .deg2rad (20.0 ) # elevation mask for AR
122122 self .nav .elmin = np .deg2rad (15.0 )
123123
124+ self .nav .parmode = 2 # 1: normal, 2: PAR
125+ self .nav .par_P0 = 0.995 # probability of sussefull AR
126+
124127 # Initial state vector
125128 #
126129 self .nav .x [0 :3 ] = pos0
@@ -657,11 +660,13 @@ def zdres(self, obs, cs, bsx, rs, vs, dts, rr, rtype=1):
657660 elif sys == uGNSS .BDS :
658661 sig0 = (rSigRnx ("CC6I" ),)
659662
660- elif cs .cssrmode == sc .PVS_PPP :
663+ elif cs .cssrmode in ( sc .PVS_PPP , sc . SBAS_L1 , sc . SBAS_L5 ) :
661664 if sys == uGNSS .GPS :
662665 sig0 = (rSigRnx ("GC1C" ), rSigRnx ("GC5Q" ))
663666 elif sys == uGNSS .GAL :
664667 sig0 = (rSigRnx ("EC1C" ), rSigRnx ("EC5Q" ))
668+ elif sys == uGNSS .SBS :
669+ sig0 = (rSigRnx ("SC1C" ), rSigRnx ("SC5Q" ))
665670
666671 # Receiver/satellite antenna offset
667672 #
@@ -1054,7 +1059,7 @@ def ddidx(self, nav, sat):
10541059 ix = np .resize (ix , (nb , 2 ))
10551060 return ix
10561061
1057- def resamb_lambda (self , sat ):
1062+ def resamb_lambda (self , sat , armode = 1 , P0 = 0.995 ):
10581063 """ resolve integer ambiguity using LAMBDA method """
10591064 nx = self .nav .nx
10601065 na = self .nav .na
@@ -1072,8 +1077,9 @@ def resamb_lambda(self, sat):
10721077 Qab = self .nav .P [0 :na , ix [:, 0 ]]- self .nav .P [0 :na , ix [:, 1 ]]
10731078
10741079 # MLAMBDA ILS
1075- b , s = mlambda (y , Qb )
1076- if s [0 ] <= 0.0 or s [1 ]/ s [0 ] >= self .nav .thresar :
1080+ b , s , nfix , Ps = mlambda (y , Qb , armode = armode , P0 = P0 )
1081+ if s [0 ] <= 0.0 or s [1 ]/ s [0 ] >= self .nav .thresar \
1082+ or (armode == 2 and nfix > 0 ):
10771083 self .nav .xa = self .nav .x [0 :na ].copy ()
10781084 self .nav .Pa = self .nav .P [0 :na , 0 :na ].copy ()
10791085 bias = b [:, 0 ]
@@ -1084,6 +1090,13 @@ def resamb_lambda(self, sat):
10841090
10851091 # restore SD ambiguity
10861092 xa = self .restamb (bias , nb )
1093+
1094+ elif armode == 2 and nfix == 0 :
1095+ nb = 0
1096+ if self .nav .monlevel > 0 :
1097+ self .nav .fout .write (
1098+ "{:s} Ps={:3.2f} nfix={:d}\n " .
1099+ format (time2str (self .time ), Ps , nfix ))
10871100 else :
10881101 nb = 0
10891102
@@ -1404,7 +1417,7 @@ def process(self, obs, cs=None, orb=None, bsx=None, obsb=None):
14041417 self .nav .smode = 5 # 4: fixed ambiguities, 5: float ambiguities
14051418
14061419 if self .nav .armode > 0 :
1407- nb , xa = self .resamb_lambda (sat )
1420+ nb , xa = self .resamb_lambda (sat , self . nav . parmode , self . nav . par_P0 )
14081421 if nb > 0 :
14091422 # Use position with fixed ambiguities xa
14101423 yu , eu , elu = self .zdres (obs , cs , bsx , rs , vs , dts , xa [0 :3 ])
@@ -1416,6 +1429,10 @@ def process(self, obs, cs=None, orb=None, bsx=None, obsb=None):
14161429 if self .nav .armode == 3 : # fix and hold
14171430 self .holdamb (xa ) # hold fixed ambiguity
14181431 self .nav .smode = 4 # fix
1432+ else :
1433+ pass
1434+ else :
1435+ pass
14191436
14201437 # Store epoch for solution
14211438 #
0 commit comments