Skip to content

Commit 2ddb0ee

Browse files
committed
- fixed RTCM MSM decoder for lli, ttr -> tot
1 parent 96e6178 commit 2ddb0ee

File tree

2 files changed

+58
-32
lines changed

2 files changed

+58
-32
lines changed

src/cssrlib/rinex.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ def decode_nav(self, navfile, nav, append=False):
565565
if (sys == uGNSS.GPS or sys == uGNSS.QZS) and \
566566
self.mode_nav > 0: # CNAV, CNAV/2
567567
eph.tops = self.flt(line, 0)
568+
eph.week, eph.toes = time2gpst(eph.toc)
568569
else:
569570
eph.toes = self.flt(line, 0)
570571
eph.cic = self.flt(line, 1)
@@ -1043,10 +1044,15 @@ def rnx_obs_header(self, ts: gtime_t, fh=None, ver=4.02):
10431044
for sys in self.sig_tab:
10441045
pr = self.sig_tab[sys][uTYP.C]
10451046
cp = self.sig_tab[sys][uTYP.L]
1046-
dp = self.sig_tab[sys][uTYP.D]
1047-
cn = self.sig_tab[sys][uTYP.S]
1047+
nsig = len(pr)+len(cp)
10481048

1049-
nsig = len(pr)+len(cp)+len(dp)+len(cn)
1049+
if uTYP.D in self.sig_tab[sys]:
1050+
dp = self.sig_tab[sys][uTYP.D]
1051+
nsig += len(dp)
1052+
1053+
if uTYP.S in self.sig_tab[sys]:
1054+
cn = self.sig_tab[sys][uTYP.S]
1055+
nsig += len(cn)
10501056

10511057
fh.write("{:1s} {:3d}".format(sys_t[sys], nsig))
10521058

@@ -1064,14 +1070,16 @@ def rnx_obs_header(self, ts: gtime_t, fh=None, ver=4.02):
10641070
fh.write(" {:20s}\n{:6s}".format(
10651071
"SYS / # / OBS TYPES", ""))
10661072

1067-
fh.write(" {:3s}".format(dp[k].str()))
1068-
n += 1
1069-
if n == 13:
1070-
fh.write(" {:20s}\n{:6s}".format(
1071-
"SYS / # / OBS TYPES", ""))
1073+
if uTYP.D in self.sig_tab[sys]:
1074+
fh.write(" {:3s}".format(dp[k].str()))
1075+
n += 1
1076+
if n == 13:
1077+
fh.write(" {:20s}\n{:6s}".format(
1078+
"SYS / # / OBS TYPES", ""))
10721079

1073-
fh.write(" {:3s}".format(cn[k].str()))
1074-
n += 1
1080+
if uTYP.S in self.sig_tab[sys]:
1081+
fh.write(" {:3s}".format(cn[k].str()))
1082+
n += 1
10751083

10761084
if n == 13:
10771085
fh.write(" {:20s}\n{:6s}".format(
@@ -1113,21 +1121,25 @@ def rnx_obs_body(self, obs=None, fh=None):
11131121

11141122
for k in range(nsat):
11151123
fh.write("{:3s}".format(sat2id(obs.sat[k])))
1116-
sys, _ = sat2prn(obs.sat[k])
1124+
sys, prn = sat2prn(obs.sat[k])
11171125
for i in range(nsig):
11181126
ssi = min(max(int(obs.S[k][i]/6), 1), 9)
11191127
lli = obs.lli[k][i]
11201128
fh.write("{:14s}{:2s}".format(
11211129
self.sval(obs.P[k][i]), ""))
1130+
11221131
fh.write("{:14s}".format(self.sval(obs.L[k][i])))
11231132
if obs.L[k][i] == 0.0:
11241133
fh.write("{:2s}".format(""))
11251134
else:
11261135
fh.write("{:1d}{:1d}".format(lli, ssi))
11271136

1128-
fh.write("{:14s}{:2s}".format(
1129-
self.sval(obs.D[k][i]), ""))
1130-
fh.write("{:14s}{:2s}".format(self.sval(obs.S[k][i]), ""))
1137+
if uTYP.D in self.sig_tab[sys]:
1138+
fh.write("{:14s}{:2s}".format(self.sval(obs.D[k][i]), ""))
1139+
1140+
if uTYP.S in self.sig_tab[sys]:
1141+
fh.write("{:14s}{:2s}".format(self.sval(obs.S[k][i]), ""))
1142+
11311143
fh.write("\n")
11321144

11331145
def rnx_nav_body(self, eph=None, fh=None):

src/cssrlib/rtcm.py

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ def __init__(self, foutname=None):
176176
self.monlevel = 1
177177
self.sysref = -1
178178
self.nsig_max = 4
179+
self.lock = {}
179180
self.mask_pbias = False
180181

181182
self.nrtk_r = {}
@@ -1179,6 +1180,9 @@ def decode_msm_time(self, sys, week, t):
11791180
tow = (t & 0x7ffffff)*1e-3
11801181
time = gpst2time(week, tow+dow*86400.0)
11811182
time = utc2gpst(timeadd(time, -10800.0))
1183+
elif sys == uGNSS.BDS:
1184+
tow = t*1e-3
1185+
time = bdt2gpst(gpst2time(week, tow))
11821186
else:
11831187
tow = t*1e-3
11841188
time = gpst2time(week, tow)
@@ -1298,13 +1302,14 @@ def decode_msm(self, msg, i):
12981302
rrf[k] = self.sval(v, 15, 1e-4)
12991303

13001304
obs = Obs()
1301-
obs.t = self.time
1305+
obs.time = self.time
13021306

1303-
obs.P = np.empty((0, self.nsig), dtype=np.float64)
1304-
obs.L = np.empty((0, self.nsig), dtype=np.float64)
1305-
obs.S = np.empty((0, self.nsig), dtype=np.float64)
1306-
obs.lli = np.empty((0, self.nsig), dtype=np.int32)
1307-
obs.sat = np.empty(0, dtype=np.int32)
1307+
obs.P = np.zeros((self.nsat, self.nsig), dtype=np.float64)
1308+
obs.L = np.zeros((self.nsat, self.nsig), dtype=np.float64)
1309+
obs.S = np.zeros((self.nsat, self.nsig), dtype=np.float64)
1310+
obs.D = np.zeros((self.nsat, self.nsig), dtype=np.float64)
1311+
obs.lli = np.zeros((self.nsat, self.nsig), dtype=np.int32)
1312+
obs.sat = np.zeros(self.nsat, dtype=np.int32)
13081313

13091314
obs.sig = {}
13101315
obs.sig[sys] = {}
@@ -1334,11 +1339,20 @@ def decode_msm(self, msg, i):
13341339
ll_[idx] = lock[j+ofst]
13351340
ofst += nsig_
13361341

1337-
obs.P = np.append(obs.P, pr_)
1338-
obs.L = np.append(obs.L, cp_)
1339-
obs.S = np.append(obs.S, cn_)
1340-
obs.lli = np.append(obs.lli, ll_)
1341-
obs.sat = np.append(obs.sat, sat_)
1342+
obs.P[k, :] = pr_
1343+
obs.L[k, :] = cp_
1344+
obs.S[k, :] = cn_
1345+
obs.sat[k] = sat_
1346+
1347+
if sat_ in self.lock:
1348+
for j, ll in enumerate(ll_):
1349+
ll_p = self.lock[sat_][j]
1350+
if (ll == 0 & ll_p != 0) | ll < ll_p:
1351+
obs.lli[k, j] = 1
1352+
else:
1353+
obs.lli[k, j] = 0
1354+
1355+
self.lock[sat_] = ll_
13421356

13431357
return i, obs
13441358

@@ -1473,7 +1487,7 @@ def decode_gps_eph(self, msg, i):
14731487

14741488
eph.toe = gpst2time(eph.week, eph.toes)
14751489
eph.toc = gpst2time(eph.week, toc)
1476-
eph.ttr = self.time
1490+
eph.tot = self.time
14771491
eph.A = sqrtA*sqrtA
14781492
eph.mode = 0
14791493

@@ -1601,7 +1615,7 @@ def decode_gal_eph(self, msg, i):
16011615

16021616
eph.toe = gpst2time(eph.week, eph.toes)
16031617
eph.toc = gpst2time(eph.week, toc)
1604-
eph.ttr = self.time
1618+
eph.tot = self.time
16051619
eph.A = sqrtA*sqrtA
16061620
eph.svh = (hs << 7)+(dvs << 6)
16071621
if self.msgtype == 1046:
@@ -1656,15 +1670,15 @@ def decode_qzs_eph(self, msg, i):
16561670
eph.week = week
16571671
eph.sva = sva
16581672
eph.svh = svh
1659-
eph.tgd = tgd*self.P2_31
1673+
eph.tgd = tgd*rCST.P2_31
16601674
eph.iodc = iodc
16611675
eph.fit = fit
16621676

16631677
eph.week = self.adjustweek(eph.week, self.time)
16641678

16651679
eph.toe = gpst2time(eph.week, eph.toes)
16661680
eph.toc = gpst2time(eph.week, toc)
1667-
eph.ttr = self.time
1681+
eph.tot = self.time
16681682
eph.A = sqrtA*sqrtA
16691683
eph.flag = 1
16701684
eph.mode = 0
@@ -1718,7 +1732,7 @@ def decode_bds_eph(self, msg, i):
17181732

17191733
eph.toe = bdt2gpst(bdt2time(eph.week, eph.toes))
17201734
eph.toc = bdt2gpst(bdt2time(eph.week, toc))
1721-
eph.ttr = self.time
1735+
eph.tot = self.time
17221736
eph.A = sqrtA*sqrtA
17231737
eph.mode = 0
17241738

@@ -1771,7 +1785,7 @@ def decode_irn_eph(self, msg, i):
17711785

17721786
eph.toe = gpst2time(eph.week, eph.toes)
17731787
eph.toc = gpst2time(eph.week, toc)
1774-
eph.ttr = self.time
1788+
eph.tot = self.time
17751789
eph.A = sqrtA*sqrtA
17761790
eph.iodc = eph.iode
17771791
eph.mode = 0
@@ -2612,7 +2626,7 @@ def decode(self, msg, subtype=None):
26122626
if self.monlevel > 0 and self.fh is not None:
26132627
self.out_log(obs, eph, geph, seph)
26142628

2615-
return i, obs, eph
2629+
return i, obs, eph, geph, seph
26162630

26172631

26182632
class rtcme(cssre):

0 commit comments

Comments
 (0)