Changeset 10942 in ntrip for trunk


Ignore:
Timestamp:
Jun 22, 2026, 12:48:31 PM (3 days ago)
Author:
stuerze
Message:

handling of ionospheric constraints descrived/updated

Location:
trunk/BNC
Files:
33 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r10935 r10942  
    33- ADDED: PPP-AR Algorithm description is now part of BNCs help contents
    44- ADDED: L1C/B (RINEX code: '1E') in QZSS Signal ID Mapping
     5- FIXED: BNC is now able to work with com ports with higher numbers, e.g. COM11 or COM17  [(#205)](https://software.rtcm-ntrip.org/ticket/205)
     6- FIXED: Handling of ionospheric constraints [(#220)](https://software.rtcm-ntrip.org/ticket/220)
    57
    68
  • trunk/BNC/Example_Configs/01_RinexObs.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
    161160maxResL1=0.03
    162161minEle=0
  • trunk/BNC/Example_Configs/02_RinexEph.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
    161160maxResL1=0.03
    162161minEle=0
  • trunk/BNC/Example_Configs/03_BrdcCorr.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/04_RinexConcat.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/05_RinexQC.bnc

    r10877 r10942  
    169169mapWinDotSize=
    170170maxResC1=3.0
    171 maxResGIM=3.0
     171=3.0
    172172maxResL1=0.03
    173173minEle=0
  • trunk/BNC/Example_Configs/06_RTK.bnc

    r10896 r10942  
    192192mapWinDotSize=
    193193maxResC1=4.0
    194 maxResGIM=3.0
     194=3.0
    195195maxResL1=0.03
    196196minEle=0
  • trunk/BNC/Example_Configs/07_FeedEngine.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/08_PPP.bnc

    r10753 r10942  
    158158mapWinDotSize=6
    159159maxResC1=3.0
    160 maxResGIM=5.0
     160=5.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/09_PPPNet.bnc

    r10753 r10942  
    158158mapWinDotSize=6
    159159maxResC1=3.0
    160 maxResGIM=5.0
     160=5.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/10_PPPQuickStart.bnc

    r10876 r10942  
    3333miscPort=
    3434miscScanRTCM=0
    35 mountPoints=//Example:Configs@euref-ip.net:2101/WTZR00DEU0 RTCM_3.3 DEU 49.14 12.88 no 2, //Example:Configs@products.igs-ip.net:2101/BCEP00BKG0 RTCM_3 DEU 50.09 8.66 no 2, //Example:Configs@products.igs-ip.net:2101/SSRA00CNE1 RTCM_3.1 FRA 43.56 1.48 no 2
     35mountPoints=//Example:Configs@euref-ip.net:2101/WTZR00DEU0 RTCM_3.3 DEU 49.14 12.88 no 2, //Example:Configs@products.igs-ip.net:2101/BCEP00BKG0 RTCM_3 DEU 50.09 8.66 no 2, //Example:Configs@products.igs-ip.net:2101/SSRA01CAS1 RTCM_3.1 CHN 40.07 116.28 no 2
    3636ntripVersion=2
    3737onTheFlyInterval=no
     
    107107sslClientCertPath=
    108108sslIgnoreErrors=0
    109 startTab=13
    110 statusTab=3
     109startTab=11
     110statusTab=0
    111111trafo_dx=
    112112trafo_dxr=
     
    149149biasMount=
    150150blqFile=Input/BNC.BLQ
    151 constraints=no
     151constraints=Ionosphere: pseudo-obs
    152152corrFile=
    153 corrMount=SSRA00CNE1
     153corrMount=SSRA00CAS1
    154154corrWaitTime=5
    155155crdFile=Input/BNC_IGS20.CRD
     
    169169mapWinDotSize=6
    170170maxResC1=3.0
    171 maxResGIM=5.0
     171=5.0
    172172maxResL1=0.03
    173173minEle=7
  • trunk/BNC/Example_Configs/11_PPPPostProc.bnc

    r10753 r10942  
    158158mapWinDotSize=6
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/12_PPPOsm.bnc

    r10753 r10942  
    158158mapWinDotSize=5
    159159maxResC1=10.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=5
  • trunk/BNC/Example_Configs/13_PPPGalHAS.bnc

    r10753 r10942  
    158158mapWinDotSize=6
    159159maxResC1=3.0
    160 maxResGIM=5.0
     160=5.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/14_SaveSp3.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/15_Sp3ETRFPPP.bnc

    r10753 r10942  
    158158mapWinDotSize=6
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/16_Upload.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/17_Combi.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/18_CombiPPP.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=5.0
     160=5.0
    161161maxResL1=0.03
    162162minEle=7
  • trunk/BNC/Example_Configs/19_UploadEph.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/20_UploadRaw.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/21_CompareSp3.bnc

    r10753 r10942  
    158158mapWinDotSize=
    159159maxResC1=3.0
    160 maxResGIM=3.0
     160=3.0
    161161maxResL1=0.03
    162162minEle=0
  • trunk/BNC/Example_Configs/22_Empty.bnc

    r10753 r10942  
    157157mapWinDotSize=
    158158maxResC1=3.0
    159 maxResGIM=3.0
     159=3.0
    160160maxResL1=0.03
    161161minEle=0
  • trunk/BNC/Example_Configs/29_PPPAR_CNES.bnc

    r10875 r10942  
    170170mapWinDotSize=6
    171171maxResC1=3.0
    172 maxResGIM=5.0
     172=5.0
    173173maxResL1=0.03
    174174minEle=10
  • trunk/BNC/Example_Configs/30_PPPAR_WHU.bnc

    r10875 r10942  
    170170mapWinDotSize=6
    171171maxResC1=3.0
    172 maxResGIM=5.0
     172=5.0
    173173maxResL1=0.03
    174174minEle=10
  • trunk/BNC/src/PPP/pppSatObs.cpp

    r10938 r10942  
    393393    retVal += it->second * it->second * OPT->_maxResL1 * OPT->_maxResL1;
    394394  }
    395   if (LC._type == t_lc::GIM) {
    396     retVal = OPT->_maxResGIM * OPT->_maxResGIM + OPT->_maxResGIM * OPT->_maxResGIM;
    397   }
    398395
    399396  retVal = sqrt(retVal);
  • trunk/BNC/src/bnchelp.html

    r10940 r10942  
    201201&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.8 <a href=#pppseeding>Seeding</a><br>
    202202&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.9 <a href=#pppconstraints>Constraints</a><br>
    203 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.9.1 <a href=#ppppseudogimobs>GIM Pseudo Observations</a><br>
     203&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.9.0 <a href=#ppppseudogimobs>GIM Pseudo Observations - How it works</a><br>
     204&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.9.1 <a href=#ppppseudogimobssigma>GIM Pseudo Observations Sigma</a><br>
    204205&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.10 <a href=#pppar>PPP-AR</a><br>
    205206&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.10.0 <a href=#ppparmethod>Algorithm Description</a><br>
     
    45014502<p><h4 id="pppconstraints">2.13.2.9 Constraints - optional</h4></p>
    45024503<p>
    4503 Specify, whether ionospheric constraints in form of pseudo-observations shall be added.
    4504 Please note, this is only valid, if no ionosphere-free linear-combination is used and VTEC informations is part of the SSR stream.
    4505 Furthermore, it would be only helpful as soon as the ionosphere information is more accurate than the code data accuracy.
    4506 Hence, currently this option is not recommended to use!
    4507 </p>
    4508 
    4509 <p><h4 id="ppppseudogimobs">2.13.2.9.2 GIM Pseudo Observations - optional</h4></p>
     4504Specify, whether ionospheric constraints in form of pseudo-observations shall be added to an uncombined PPP
     4505solution ('Pi&amp;Li', 'Pi', 'P1&amp;L1' or 'P1', see <a href=#pppobs>Section 2.13.2.1</a>). This is sometimes
     4506called 'PPP with pseudo-observations for STEC'.
     4507</p>
     4508<p><h4 id="ppppseudogimobs">2.13.2.9.0 GIM Pseudo Observations - How it works</h4></p>
     4509<p>
     4510When ionospheric constraints are activated, BNC derives a slant ionospheric delay (STEC) for every satellite from VTEC informations - taken
     4511from an Ionosphere stream/file (<a href=#pppionostream>Section 2.13.1.6</a>, <a href=#pppionofile>Section
     45122.13.1.7</a>) or from the Corrections stream/file if no dedicated Ionosphere source is specified. For each GNSS
     4513system, one satellite is chosen as 'reference satellite' (initially the one with the highest elevation), and one
     4514satellite-differenced pseudo-observation per remaining satellite is added to the Kalman filter:
     4515</p>
     4516<p>
     4517&nbsp; &nbsp; STEC(reference satellite) &minus; STEC(satellite) = ION(reference satellite) &minus; ION(satellite)
     4518</p>
     4519<p>
     4520where ION(satellite) is the per-satellite ionospheric delay state already estimated by the uncombined PPP filter.
     4521This single difference constrains the relative ionospheric delay between satellites without removing the
     4522receiver's own freedom to estimate it from code and phase data. The reference satellite is kept as long as it
     4523stays in view; a new one is selected only once the previous reference satellite disappears from the
     4524observations, which avoids spurious jumps in the constraint from one epoch to the next.
     4525</p>
     4526<p>
     4527Pseudo-observations are treated as a soft constraint: they contribute to the solution with a weight derived from
     4528'Sigma GIM' (see below) but are never rejected as outliers, regardless of their residual size. They are also
     4529fully independent of ambiguity resolution (<a href=#pppar>Section 2.13.2.10</a>), which only ever resolves
     4530carrier-phase ambiguities.
     4531</p>
     4532<p>
     4533Please note that this option is only valid if no ionosphere-free linear combination is used and VTEC informations
     4534are actually available. Without VTEC data, no pseudo-observations are added and the PPP solution falls back to
     4535estimating per-satellite ionospheric delays from code and phase data alone. The pseudo-observations are only
     4536helpful once the ionosphere information is more accurate than the code data accuracy.
     4537</p>
     4538
     4539<p><h4 id="ppppseudogimobssigma">2.13.2.9.1 GIM Pseudo Observations Sigma - optional</h4></p>
    45104540<p>
    45114541Enter a 'Sigma GIM' for pseudo observations regarding the Ionosphere in meters.
    45124542The bigger the sigma you enter, the less the contribution of GIM Pseudo observations to a PPP solutions
    45134543based on a combination of code and phase data. '5.0' meters is likely to be an appropriate choice.
    4514 </p>
    4515 <p>
    4516 Specify a maximum for residuals 'Max Res GIM' for pseudo observations regarding the Ionosphere in a PPP solution.
    4517 '5.0' meters may be an appropriate choice for that.
    4518 If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.
    45194544</p>
    45204545<p><h4 id="pppar">2.13.2.10 PPP-AR - optional</h4></p>
     
    67426767   PPP/constraints  {Specify, whether ionospheric constraints in form of pseudo-observations shall be added [character string: no|Ionosphere: pseudo-obs]}
    67436768   PPP/sigmaGIM     {Sigma for GIM pseudo observations in meters [floating-point number]}
    6744    PPP/maxResGIM    {Maximal residuum for GIM pseudo observations in meters [floating-point number]}
    67456769   PPP/arGPS        {Ambiguities for GPS should be resolved: [integer number: 0=no,2=yes]}
    67466770   PPP/arGalileo    {Ambiguities for Galileo should be resolved: [integer number: 0=no,2=yes]}
  • trunk/BNC/src/bncmain.cpp

    r10914 r10942  
    280280        "   PPP/constraints  {Specify, whether ionospheric constraints in form of pseudo-observations shall be added [character string: no|Ionosphere: pseudo-obs]}\n"
    281281        "   PPP/sigmaGIM     {Sigma for GIM pseudo observations in meters [floating-point number]}\n"
    282         "   PPP/maxResGIM    {Maximal residuum for GIM pseudo observations in meters [floating-point number]}\n"
    283282        "   PPP/arGPS        {Ambiguities for GPS should be resolved: [integer number: 0=no,2=yes]}\n"
    284283        "   PPP/arGalileo    {Ambiguities for Galileo should be resolved: [integer number: 0=no,2=yes]}\n"
  • trunk/BNC/src/bncwindow.cpp

    r10914 r10942  
    11321132  ++ir;
    11331133  pppLayout2->addItem(new QSpacerItem(8 * ww, 0), ir, 2);
    1134   pppLayout2->addWidget(new QLabel("Max Res GIM"), ir, 3, Qt::AlignLeft);
    1135   pppLayout2->addWidget(_pppWidgets._maxResGIM, ir, 4); _pppWidgets._maxResGIM->setMaximumWidth(8 * ww);
    11361134  pppLayout2->addWidget(new QLabel("Seeding (sec)"), ir, 6, Qt::AlignLeft);
    11371135  pppLayout2->addWidget(_pppWidgets._seedingTime, ir, 7); _pppWidgets._seedingTime->setMaximumWidth(8 * ww);
     
    16761674  _pppWidgets._maxResC1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS C1 code observations in a PPP solution. '2.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res C1 = 3.0' <i>[key: PPP/maxResC1]</i></p>"));
    16771675  _pppWidgets._maxResL1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS L1 phase observations in a PPP solution. '0.02' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res L1 = 0.03' <i>[key: PPP/maxResL1]</i></p>"));
    1678   _pppWidgets._maxResGIM->setWhatsThis(tr("<p>Specify a maximum for residuals from GIM pseudo observations in a PPP solution. '5.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res GIM = 3.0' <i>[key: PPP/maxResGIM]</i></p>"));
    16791676  _pppWidgets._eleWgtCode->setWhatsThis(tr("<p>Tic 'Ele Wgt Code' to use satellite Elevation depending Weights for Code observations in the PPP solution. <i>[key: PPP/eleWgtCode]</i></p>"));
    16801677  _pppWidgets._eleWgtPhase->setWhatsThis(tr("<p>Tic 'Ele Wgt Phase' to use satellite Elevation depending Weights for Phase observations in the PPP solution. <i>[key: PPP/eleWgtPhase]</i></p>"));
  • trunk/BNC/src/pppMain.cpp

    r10791 r10942  
    249249    opt->_maxResC1    = settings.value("PPP/maxResC1").toDouble();  if (opt->_maxResC1 <= 0.0)  opt->_maxResC1  = 3.0;
    250250    opt->_maxResL1    = settings.value("PPP/maxResL1").toDouble();  if (opt->_maxResL1 <= 0.0)  opt->_maxResL1  = 0.03;
    251     opt->_maxResGIM   = settings.value("PPP/maxResGIM").toDouble(); if (opt->_maxResGIM <= 0.0) opt->_maxResGIM = 3.0;
    252251    opt->_eleWgtCode  = (settings.value("PPP/eleWgtCode").toInt() != 0);
    253252    opt->_eleWgtPhase = (settings.value("PPP/eleWgtPhase").toInt() != 0);
  • trunk/BNC/src/pppOptions.h

    r10791 r10942  
    8585  double                        _maxResC1;
    8686  double                        _maxResL1;
    87   double                        _maxResGIM;
    8887  bool                          _eleWgtCode;
    8988  bool                          _eleWgtPhase;
  • trunk/BNC/src/pppWidgets.cpp

    r10880 r10942  
    9494  _maxResC1     = new QLineEdit();     _maxResC1    ->setObjectName("PPP/maxResC1");     _widgets << _maxResC1;
    9595  _maxResL1     = new QLineEdit();     _maxResL1    ->setObjectName("PPP/maxResL1");     _widgets << _maxResL1;
    96   _maxResGIM    = new QLineEdit();     _maxResGIM   ->setObjectName("PPP/maxResGIM");    _widgets << _maxResGIM;
    9796  _minObs       = new QSpinBox();      _minObs      ->setObjectName("PPP/minObs");       _widgets << _minObs;
    9897  _minEle       = new QSpinBox();      _minEle      ->setObjectName("PPP/minEle");       _widgets << _minEle;
     
    301300  setWidgetValue(_maxResC1,    "3.0");
    302301  setWidgetValue(_maxResL1,    "0.03");
    303   setWidgetValue(_maxResGIM,   "3.0");
    304302  setWidgetValue(_seedingTime, "0");
    305303
     
    420418  if (pseudoObsIono) {
    421419   _sigmaGIM->setEnabled(true);
    422    _maxResGIM->setEnabled(true);
    423420  } else {
    424421    _sigmaGIM->setEnabled(false);
    425     _maxResGIM->setEnabled(false);
    426422  }
    427423
  • trunk/BNC/src/pppWidgets.h

    r10791 r10942  
    8080  QLineEdit*     _maxResC1;
    8181  QLineEdit*     _maxResL1;
    82   QLineEdit*     _maxResGIM;
    8382  QCheckBox*     _eleWgtCode;
    8483  QCheckBox*     _eleWgtPhase;
Note: See TracChangeset for help on using the changeset viewer.