Skip to content

Commit 5d7ed1a

Browse files
Modifications for Google Decimeter Challenge 2022
1 parent c0b4cd9 commit 5d7ed1a

File tree

12 files changed

+67
-48
lines changed

12 files changed

+67
-48
lines changed

app/winapp/rtkpost/postmain.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
118118
DynamicModel=IonoOpt=TropOpt=RovAntPcv=RefAntPcv=AmbRes=0;
119119
RovPosType=RefPosType=0;
120120
OutCntResetAmb=5; LockCntFixAmb=5; FixCntHoldAmb=10;
121-
MaxAgeDiff=30.0; RejectThres=30.0; RejectGdop=30.0;
121+
MaxAgeDiff=30.0; RejectPhase=30.0; RejectCode=30.0;
122122
MeasErrR1=MeasErrR2=MeasErrR5=100.0; MeasErr2=0.004; MeasErr3=0.003; MeasErr4=1.0;
123123
SatClkStab=1E-11; ValidThresAR=3.0; ValidThresARMin=3.0; ValidThresARMax=3.0;
124124
RovAntE=RovAntN=RovAntU=RefAntE=RefAntN=RefAntU=0.0;
@@ -905,8 +905,8 @@ int __fastcall TMainForm::GetOption(prcopt_t &prcopt, solopt_t &solopt,
905905
prcopt.thresslip=SlipThres;
906906
prcopt.thresdop=DopThres;
907907
prcopt.maxtdiff =MaxAgeDiff;
908-
prcopt.maxgdop =RejectGdop;
909-
prcopt.maxinno =RejectThres;
908+
prcopt.maxinno[1]=RejectCode;
909+
prcopt.maxinno[0]=RejectPhase;
910910
prcopt.varholdamb=VarHoldAmb;
911911
prcopt.gainholdamb=GainHoldAmb;
912912
prcopt.outsingle=OutputSingle;
@@ -1260,10 +1260,10 @@ void __fastcall TMainForm::LoadOpt(void)
12601260
SlipThres =ini->ReadFloat ("opt","slipthres", 0.05);
12611261
DopThres =ini->ReadFloat ("opt","dopthres", 0.0);
12621262
MaxAgeDiff =ini->ReadFloat ("opt","maxagediff", 30.0);
1263-
RejectThres =ini->ReadFloat ("opt","rejectthres", 30.0);
1263+
RejectPhase =ini->ReadFloat ("opt","rejectphase", 5.0);
12641264
VarHoldAmb =ini->ReadFloat ("opt","varholdamb", 0.1);
12651265
GainHoldAmb =ini->ReadFloat ("opt","gainholdamb", 0.01);
1266-
RejectGdop =ini->ReadFloat ("opt","rejectgdop", 30.0);
1266+
RejectCode =ini->ReadFloat ("opt","rejectcode", 30.0);
12671267
ARIter =ini->ReadInteger("opt","ariter", 1);
12681268
NumIter =ini->ReadInteger("opt","numiter", 1);
12691269
MinFixSats =ini->ReadInteger("opt","minfixsats", 4);
@@ -1484,8 +1484,8 @@ void __fastcall TMainForm::SaveOpt(void)
14841484
ini->WriteFloat ("opt","slipthres", SlipThres );
14851485
ini->WriteFloat ("opt","dopthres", DopThres );
14861486
ini->WriteFloat ("opt","maxagediff", MaxAgeDiff );
1487-
ini->WriteFloat ("opt","rejectgdop", RejectGdop );
1488-
ini->WriteFloat ("opt","rejectthres", RejectThres );
1487+
ini->WriteFloat ("opt","rejectcode", RejectCode );
1488+
ini->WriteFloat ("opt","rejectphase", RejectPhase );
14891489
ini->WriteFloat ("opt","varholdamb", VarHoldAmb );
14901490
ini->WriteFloat ("opt","gainholdamb", GainHoldAmb );
14911491
ini->WriteInteger("opt","ariter", ARIter );

app/winapp/rtkpost/postmain.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class TMainForm : public TForm
202202
int SbasCorr,SbasCorr1,SbasCorr2,SbasCorr3,SbasCorr4,TimeDecimal;
203203
int SolStatic,SbasSat,MapFunc;
204204
int PosOpt[6];
205-
double ElMask,MaxAgeDiff,RejectThres,VarHoldAmb,GainHoldAmb,RejectGdop;
205+
double ElMask,MaxAgeDiff,VarHoldAmb,GainHoldAmb,RejectCode,RejectPhase;
206206
double MeasErrR1,MeasErrR2,MeasErrR5,MeasErr2,MeasErr3,MeasErr4,MeasErr5;
207207
double MeasErr6,MeasErr7,MeasErr8;
208208
double SatClkStab,RovAntE,RovAntN,RovAntU,RefAntE,RefAntN,RefAntU;

app/winapp/rtkpost/postopt.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,8 @@ void __fastcall TOptDialog::GetOpt(void)
391391
ElMaskAR ->Text =s.sprintf("%.0f",MainForm->ElMaskAR);
392392
ElMaskHold ->Text =s.sprintf("%.0f",MainForm->ElMaskHold);
393393
MaxAgeDiff ->Text =s.sprintf("%.1f",MainForm->MaxAgeDiff);
394-
RejectGdop ->Text =s.sprintf("%.1f",MainForm->RejectGdop);
395-
RejectThres ->Text =s.sprintf("%.1f",MainForm->RejectThres);
394+
RejectCode ->Text =s.sprintf("%.1f",MainForm->RejectCode);
395+
RejectPhase ->Text =s.sprintf("%.1f",MainForm->RejectPhase);
396396
VarHoldAmb ->Text =s.sprintf("%.4f",MainForm->VarHoldAmb);
397397
GainHoldAmb ->Text =s.sprintf("%.4f",MainForm->GainHoldAmb);
398398
SlipThres ->Text =s.sprintf("%.3f",MainForm->SlipThres);
@@ -526,8 +526,8 @@ void __fastcall TOptDialog::SetOpt(void)
526526
MainForm->ElMaskAR =ElMaskAR ->Text.ToInt();
527527
MainForm->ElMaskHold =ElMaskHold ->Text.ToInt();
528528
MainForm->MaxAgeDiff =str2dbl(MaxAgeDiff ->Text);
529-
MainForm->RejectGdop =str2dbl(RejectGdop ->Text);
530-
MainForm->RejectThres =str2dbl(RejectThres->Text);
529+
MainForm->RejectCode =str2dbl(RejectCode ->Text);
530+
MainForm->RejectPhase =str2dbl(RejectPhase->Text);
531531
MainForm->VarHoldAmb =str2dbl(VarHoldAmb->Text);
532532
MainForm->GainHoldAmb =str2dbl(GainHoldAmb->Text);
533533
MainForm->SlipThres =str2dbl(SlipThres ->Text);
@@ -676,8 +676,8 @@ int ppp=PosMode->ItemIndex>=PMODE_PPP_KINEMA;
676676
ElMaskAR ->Text =s.sprintf("%.0f",prcopt.elmaskar*R2D);
677677
ElMaskHold ->Text =s.sprintf("%.0f",prcopt.elmaskhold*R2D);
678678
MaxAgeDiff ->Text =s.sprintf("%.1f",prcopt.maxtdiff );
679-
RejectGdop ->Text =s.sprintf("%.1f",prcopt.maxgdop );
680-
RejectThres ->Text =s.sprintf("%.1f",prcopt.maxinno );
679+
RejectCode ->Text =s.sprintf("%.1f",prcopt.maxinno[1] );
680+
RejectPhase ->Text =s.sprintf("%.1f",prcopt.maxinno[0] );
681681
VarHoldAmb ->Text =s.sprintf("%.5f",prcopt.varholdamb);
682682
GainHoldAmb ->Text =s.sprintf("%.5f",prcopt.gainholdamb);
683683
SlipThres ->Text =s.sprintf("%.3f",prcopt.thresslip);
@@ -837,8 +837,8 @@ int ppp=PosMode->ItemIndex>=PMODE_PPP_KINEMA;
837837
prcopt.elmaskar =str2dbl(ElMaskAR ->Text)*D2R;
838838
prcopt.elmaskhold=str2dbl(ElMaskHold->Text)*D2R;
839839
prcopt.maxtdiff =str2dbl(MaxAgeDiff ->Text);
840-
prcopt.maxgdop =str2dbl(RejectGdop ->Text);
841-
prcopt.maxinno =str2dbl(RejectThres->Text);
840+
prcopt.maxinno[1]=str2dbl(RejectCode ->Text);
841+
prcopt.maxinno[0]=str2dbl(RejectPhase->Text);
842842
prcopt.varholdamb=str2dbl(VarHoldAmb->Text);
843843
prcopt.gainholdamb=str2dbl(GainHoldAmb->Text);
844844
prcopt.thresslip=str2dbl(SlipThres ->Text);
@@ -958,7 +958,8 @@ void __fastcall TOptDialog::UpdateEnable(void)
958958
SlipThres ->Enabled=rtk||ppp;
959959
DopThres ->Enabled=rtk||ppp;
960960
MaxAgeDiff ->Enabled=rel;
961-
RejectThres ->Enabled=rel||ppp;
961+
RejectPhase ->Enabled=rel||ppp;
962+
RejectCode ->Enabled=rel||ppp;
962963
VarHoldAmb ->Enabled=ar;
963964
GainHoldAmb ->Enabled=ar&&AmbRes->ItemIndex==3;
964965
//ARIter ->Enabled=ppp;
@@ -1134,3 +1135,4 @@ void __fastcall TOptDialog::BtnFreqClick(TObject *Sender)
11341135

11351136

11361137

1138+

app/winapp/rtkpost/postopt.dfm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,9 +498,9 @@ object OptDialog: TOptDialog
498498
object Label11: TLabel
499499
Left = 24
500500
Top = 170
501-
Width = 176
501+
Width = 179
502502
Height = 13
503-
Caption = 'Reject Threshold of GDOP/Innov (m)'
503+
Caption = 'Outlier Threshold for Code/Phase (m)'
504504
end
505505
object Label37: TLabel
506506
Left = 25
@@ -609,7 +609,7 @@ object OptDialog: TOptDialog
609609
TabOrder = 9
610610
Text = '30'
611611
end
612-
object RejectThres: TEdit
612+
object RejectPhase: TEdit
613613
Left = 325
614614
Top = 167
615615
Width = 75
@@ -682,7 +682,7 @@ object OptDialog: TOptDialog
682682
TabOrder = 6
683683
Text = '0'
684684
end
685-
object RejectGdop: TEdit
685+
object RejectCode: TEdit
686686
Left = 248
687687
Top = 167
688688
Width = 75

app/winapp/rtkpost/postopt.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class TOptDialog : public TForm
5959
TEdit *ElMaskAR;
6060
TEdit *SlipThres;
6161
TEdit *MaxAgeDiff;
62-
TEdit *RejectThres;
62+
TEdit *RejectPhase;
6363
TEdit *NumIter;
6464
TTabSheet *TabSheet3;
6565
TLabel *LabelSolFormat;
@@ -175,7 +175,7 @@ class TOptDialog : public TForm
175175
TButton *BtnBLQFile;
176176
TEdit *MeasErrR2;
177177
TEdit *ElMaskHold;
178-
TEdit *RejectGdop;
178+
TEdit *RejectCode;
179179
TLabel *Label39;
180180
TLabel *Label40;
181181
TComboBox *IntpRefObs;

src/options.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ EXPORT opt_t sysopts[]={
113113
{"pos2-maxage", 1, (void *)&prcopt_.maxtdiff, "s" },
114114
{"pos2-syncsol", 3, (void *)&prcopt_.syncsol, SWTOPT },
115115
{"pos2-slipthres", 1, (void *)&prcopt_.thresslip, "m" },
116-
{"pos2-dopthres", 1, (void *)&prcopt_.thresdop, "m" },
117-
{"pos2-rejionno", 1, (void *)&prcopt_.maxinno, "m" },
118-
{"pos2-rejgdop", 1, (void *)&prcopt_.maxgdop, "" },
116+
{"pos2-dopthres", 1, (void *)&prcopt_.thresdop, "m" },
117+
{"pos2-rejionno", 1, (void *)&prcopt_.maxinno[0], "m" },
118+
{"pos2-rejcode", 1, (void *)&prcopt_.maxinno[1], "m" },
119119
{"pos2-niter", 0, (void *)&prcopt_.niter, "" },
120120
{"pos2-baselen", 1, (void *)&prcopt_.baseline[0],"m" },
121121
{"pos2-basesig", 1, (void *)&prcopt_.baseline[1],"m" },

src/pntpos.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#define ERR_CBIAS 0.3 /* code bias error Std (m) */
4545
#define REL_HUMI 0.7 /* relative humidity for Saastamoinen model */
4646
#define MIN_EL (5.0*D2R) /* min elevation for measurement error (rad) */
47+
# define MAX_GDOP 30 /* max gdop for valid solution */
4748

4849
/* pseudorange measurement error variance ------------------------------------*/
4950
static double varerr(const prcopt_t *opt, const ssat_t *ssat, const obsd_t *obs, double el, int sys)
@@ -383,7 +384,7 @@ static int valsol(const double *azel, const int *vsat, int n,
383384
ns++;
384385
}
385386
dops(ns,azels,opt->elmin,dop);
386-
if (dop[0]<=0.0||dop[0]>opt->maxgdop) {
387+
if (dop[0]<=0.0||dop[0]>MAX_GDOP) {
387388
sprintf(msg,"gdop error nv=%d gdop=%.1f",nv,dop[0]);
388389
return 0;
389390
}

src/postpos.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ static int inputobs(obsd_t *obs, int solq, const prcopt_t *popt)
242242
{
243243
gtime_t time={0};
244244
int i,nu,nr,n=0;
245+
double dt,dt_next;
245246

246247
trace(3,"\ninfunc : revs=%d iobsu=%d iobsr=%d isbs=%d\n",revs,iobsu,iobsr,isbs);
247248

@@ -254,12 +255,18 @@ static int inputobs(obsd_t *obs, int solq, const prcopt_t *popt)
254255
if (!revs) { /* input forward data */
255256
if ((nu=nextobsf(&obss,&iobsu,1))<=0) return -1;
256257
if (popt->intpref) {
258+
/* interpolate nearest timestamps */
257259
for (;(nr=nextobsf(&obss,&iobsr,2))>0;iobsr+=nr)
258260
if (timediff(obss.data[iobsr].time,obss.data[iobsu].time)>-DTTOL) break;
259261
}
260262
else {
261-
for (i=iobsr;(nr=nextobsf(&obss,&i,2))>0;iobsr=i,i+=nr)
262-
if (timediff(obss.data[i].time,obss.data[iobsu].time)>DTTOL) break;
263+
/* find closest timestamp */
264+
dt=timediff(obss.data[i].time,obss.data[iobsu].time);
265+
for (i=iobsr;(nr=nextobsf(&obss,&i,2))>0;iobsr=i,i+=nr) {
266+
dt_next=timediff(obss.data[i].time,obss.data[iobsu].time);
267+
if (fabs(dt_next)>fabs(dt)) break;
268+
dt=dt_next;
269+
}
263270
}
264271
nr=nextobsf(&obss,&iobsr,2);
265272
if (nr<=0) {
@@ -287,12 +294,18 @@ static int inputobs(obsd_t *obs, int solq, const prcopt_t *popt)
287294
else { /* input backward data */
288295
if ((nu=nextobsb(&obss,&iobsu,1))<=0) return -1;
289296
if (popt->intpref) {
297+
/* interpolate nearest timestamps */
290298
for (;(nr=nextobsb(&obss,&iobsr,2))>0;iobsr-=nr)
291299
if (timediff(obss.data[iobsr].time,obss.data[iobsu].time)<DTTOL) break;
292300
}
293301
else {
294-
for (i=iobsr;(nr=nextobsb(&obss,&i,2))>0;iobsr=i,i-=nr)
295-
if (timediff(obss.data[i].time,obss.data[iobsu].time)<-DTTOL) break;
302+
/* find closest timestamp */
303+
dt=timediff(obss.data[i].time,obss.data[iobsu].time);
304+
for (i=iobsr;(nr=nextobsb(&obss,&i,2))>0;iobsr=i,i-=nr) {
305+
dt_next=timediff(obss.data[i].time,obss.data[iobsu].time);
306+
if (fabs(dt_next)>fabs(dt)) break;
307+
dt=dt_next;
308+
}
296309
}
297310
nr=nextobsb(&obss,&iobsr,2);
298311
for (i=0;i<nu&&n<MAXOBS*2;i++) obs[n++]=obss.data[iobsu-nu+1+i];

src/ppp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ static int ppp_res(int post, const obsd_t *obs, int n, const double *rs,
10381038
code?"P":"L",frq+1,v[nv],sqrt(var[nv]),azel[1+i*2]*R2D);
10391039

10401040
/* reject satellite by pre-fit residuals */
1041-
if (!post&&opt->maxinno>0.0&&fabs(v[nv])>opt->maxinno) {
1041+
if (!post&&opt->maxinno[code]>0.0&&fabs(v[nv])>opt->maxinno[code]) {
10421042
trace(2,"outlier (%d) rejected %s sat=%2d %s%d res=%9.4f el=%4.1f\n",
10431043
post,str,sat,code?"P":"L",frq+1,v[nv],azel[1+i*2]*R2D);
10441044
exc[i]=1; rtk->ssat[sat-1].rejc[frq]++;

src/rtkcmn.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ const prcopt_t prcopt_default={ /* defaults processing options */
216216
5E-12, /* sclkstab */
217217
{3.0,0.25,0.0,1E-9,1E-5,3.0,3.0,0.0}, /* thresar */
218218
0.0,0.0,0.05,0, /* elmaskar,elmaskhold,thresslip,thresdop, */
219-
0.1,0.01,30.0,5.0,30.0, /* varholdamb,gainholdamb,maxtdif,maxinno,maxgdop */
219+
0.1,0.01,30.0, /* varholdamb,gainholdamb,maxtdif */
220+
{5.0,30.0}, /* maxinno {phase,code} */
220221
{0},{0},{0}, /* baseline,ru,rb */
221222
{"",""}, /* anttype */
222223
{{0}},{{0}},{0}, /* antdel,pcv,exsats */

0 commit comments

Comments
 (0)