Skip to content

Commit 1a8b8f5

Browse files
committed
- added check for the obs in sat selection.
1 parent 097270d commit 1a8b8f5

File tree

9 files changed

+16968
-21
lines changed

9 files changed

+16968
-21
lines changed

cssrlib/data/3034265G.21O

Lines changed: 6874 additions & 0 deletions
Large diffs are not rendered by default.

cssrlib/data/SEPT2650.21P

Lines changed: 2578 additions & 0 deletions
Large diffs are not rendered by default.

cssrlib/data/SEPT265G.21O

Lines changed: 7470 additions & 0 deletions
Large diffs are not rendered by default.

cssrlib/gnss.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ class uGNSS(IntEnum):
4343
IRN = 7
4444
GNSSMAX = 8
4545
GPSMAX = 32
46-
# GALMAX = 36
47-
GALMAX = 0
46+
GALMAX = 36
47+
QZSMAX = 10
48+
# GALMAX = 0
4849
# BDSMAX = 63
49-
# QZSMAX = 10
50-
QZSMAX = 0
50+
# QZSMAX = 0
5151
# GLOMAX = 24
5252
# SBSMAX = 24
5353
# IRNMAX = 10
@@ -56,8 +56,7 @@ class uGNSS(IntEnum):
5656
SBSMAX = 0
5757
IRNMAX = 0
5858
NONE = -1
59-
MAXSAT = GPSMAX+GLOMAX+GALMAX+BDSMAX+QZSMAX
60-
# MAXSAT=GPSMAX+GLOMAX+GALMAX+BDSMAX+QZSMAX+SBSMAX+IRNMAX
59+
MAXSAT=GPSMAX+GLOMAX+GALMAX+BDSMAX+QZSMAX+SBSMAX+IRNMAX
6160

6261

6362
class uSIG(IntEnum):
@@ -177,8 +176,8 @@ def __init__(self):
177176
self.freq = [1.57542e9, 1.22760e9, 1.17645e9, 1.20714e9]
178177
self.rb = [0, 0, 0] # base station position in ECEF [m]
179178
self.smode = 0 # position mode 0:NONE,1:std,2:DGPS,4:fix,5:float
180-
# self.gnss_t = [uGNSS.GPS, uGNSS.GAL, uGNSS.QZS]
181-
self.gnss_t = [uGNSS.GPS]
179+
self.gnss_t = [uGNSS.GPS, uGNSS.GAL, uGNSS.QZS]
180+
# self.gnss_t = [uGNSS.GPS]
182181
self.loglevel = 2
183182
self.cnr_min = 35
184183
self.maxout = 5 # maximum outage [epoch]

cssrlib/ppprtk.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from cssrlib.ephemeris import satposs
1212
from cssrlib.cssrlib import sSigGPS, sSigGAL, sSigQZS, sCType
1313
from cssrlib.ppp import tidedisp, shapiro, windupcorr
14-
from cssrlib.rtk import IB, ddres, resamb_lambda, valpos, holdamb, initx
14+
from cssrlib.rtk import IB, ddres, resamb_lambda, valpos, holdamb, initx, kfupdate
1515

1616
MAXITR = 10
1717
ELMIN = 10
@@ -350,7 +350,7 @@ def ppprtkpos(nav, obs, cs):
350350
v, H, R = ddres(nav, xp, y, e, sat, el)
351351
Pp = nav.P.copy()
352352
# Kalman filter measurement update
353-
xp, Pp = gn.kfupdate(xp, Pp, H, v, R)
353+
xp, Pp, _ = kfupdate(xp, Pp, H, v, R)
354354

355355
# non-differencial residual for rover after measurement update
356356
yu, eu, elu = zdres(nav, obs, rs, vs, dts, svh, xp[0:3], cs)

cssrlib/rtk.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,35 @@ def udstate(nav, obs, obsb, iu, ir):
449449

450450
def selsat(nav, obs, obsb, elb):
451451
""" select common satellite between rover and base station """
452-
idx0 = np.where(elb >= nav.elmin)
453-
idx = np.intersect1d(obs.sat, obsb.sat[idx0], return_indices=True)
452+
# exclude satellite with missing observation and cycle slip for rover
453+
idx_u = []
454+
for k, sat in enumerate(obs.sat):
455+
sys, _ = gn.sat2prn(sat)
456+
j0 = nav.obs_idx[0][sys]
457+
j1 = nav.obs_idx[1][sys]
458+
if obs.P[k, j0] == 0.0 or obs.P[k, j1] == 0.0 or \
459+
obs.L[k, j0] == 0.0 or obs.L[k, j1] == 0.0 or \
460+
obs.lli[k, j0] > 0 or obs.lli[k, j1] > 0:
461+
continue
462+
idx_u.append(k)
463+
464+
# exclude satellite with missing observation and cycle slip for base
465+
idx_r = []
466+
for k, sat in enumerate(obsb.sat):
467+
sys, _ = gn.sat2prn(sat)
468+
j0 = nav.obs_idx[0][sys]
469+
j1 = nav.obs_idx[1][sys]
470+
if obsb.P[k, j0] == 0.0 or obsb.P[k, j1] == 0.0 or \
471+
obsb.L[k, j0] == 0.0 or obsb.L[k, j1] == 0.0 or \
472+
obsb.lli[k, j0] > 0 or obsb.lli[k, j1] > 0 or \
473+
elb[k] < nav.elmin:
474+
continue
475+
idx_r.append(k)
476+
477+
idx = np.intersect1d(obs.sat[idx_u], obsb.sat[idx_r], return_indices=True)
454478
k = len(idx[0])
455-
iu = idx[1]
456-
ir = idx0[0][idx[2]]
479+
iu = np.array(idx_u)[idx[1]]
480+
ir = np.array(idx_r)[idx[2]]
457481
return k, iu, ir
458482

459483

@@ -498,11 +522,14 @@ def relpos(nav, obs, obsb):
498522
rsb, _, dtsb, svhb = satposs(obsb, nav)
499523

500524
# non-differencial residual for base
501-
yr, er, el = zdres(nav, obsb, rsb, dtsb, svhb, nav.rb, 0)
502-
ns, iu, ir = selsat(nav, obs, obsb, el)
525+
yr, er, elr = zdres(nav, obsb, rsb, dtsb, svhb, nav.rb, 0)
526+
ns, iu, ir = selsat(nav, obs, obsb, elr)
503527
y = np.zeros((ns*2, nf*2))
504528
e = np.zeros((ns*2, 3))
505529

530+
if ns<4:
531+
return -1
532+
506533
y[ns:, :] = yr[ir, :]
507534
e[ns:, :] = er[ir, :]
508535

cssrlib/tests/test_pntpos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
dec = rnxdec()
1414
nav = stdinit()
1515
nav = dec.decode_nav(navfile, nav)
16-
nep = 120
16+
nep = 360
1717
t = np.zeros(nep)
1818
enu = np.zeros((nep, 3))
1919
sol = np.zeros((nep, nav.nx))

cssrlib/tests/test_rtk.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
obs, obsb = rn.sync_obs(dec, decb)
4444
if ne == 0:
4545
t0 = nav.t = obs.t
46+
if ne>=18:
47+
print(ne)
4648
relpos(nav, obs, obsb)
4749
t[ne] = gn.timediff(nav.t, t0)
4850
sol = nav.xa[0:3]

cssrlib/tests/test_rtk2.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@
2020
decb.decode_obsh(basefile)
2121
dec.decode_obsh(obsfile)
2222

23-
nep = 85
23+
nep = 360
2424
# GSI 3034 fujisawa
2525
nav.rb = [-3959400.631, 3385704.533, 3667523.111]
26-
nav.excl_sat = [158]
2726
t = np.zeros(nep)
2827
enu = np.zeros((nep, 3))
2928
smode = np.zeros(nep, dtype=int)
@@ -37,8 +36,6 @@
3736
obs, obsb = rn.sync_obs(dec, decb)
3837
if ne == 0:
3938
t0 = nav.t = obs.t
40-
if ne>=60:
41-
ne
4239
relpos(nav, obs, obsb)
4340
t[ne] = gn.timediff(nav.t, t0)
4441
sol = nav.x[0:3]

0 commit comments

Comments
 (0)