Changeset 10451 in ntrip for trunk/BNC


Ignore:
Timestamp:
Apr 24, 2024, 3:46:28 PM (3 weeks ago)
Author:
stuerze
Message:

two more options added to the combination procedure

Location:
trunk/BNC
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r10446 r10451  
    11# Changelog
     2## 2.13.2 (2014-0?-??)
     3- ADDED: The possibility to to exclude satellites or satellite system for individual ACs within the combination.
     4         Also the possibility to ignore orbit corrections from an indiviul AC that differ by more than 'Maximal Orb Displacement' meters
     5         from the average of all orbit corrections per satellite.
    26
    37## 2.13.1 (2024-04-18)
  • trunk/BNC/src/bnchelp.html

    r10405 r10451  
    220220&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.1 <a href=#combiadd>Add Row, Delete</a><br>
    221221&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.2 <a href=#combimethod>Method</a><br>
    222 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.3 <a href=#combimax>Maximal Residuum</a><br>
    223 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combismpl>Sampling</a><br>
     222&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.3 <a href=#combimaxres>Maximal Clock Residuum</a><br>
     223&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combimaxdisp>Maximal Orbit Displacement</a><br>
     224&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.5 <a href=#combismpl>Sampling</a><br>
     225&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.6 <a href=#combisatsys>Satellite Systems</a><br>
    224226&nbsp; &nbsp; &nbsp; 2.15 <a href=#upclk><b>Upload Corrections</b></a><br>
    225227&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.15.1 <a href=#upadd>Add, Delete Row</a><br>
     
    44924494<p>
    44934495Hit the 'Add Row' button, double click on the 'Mountpoint' field, enter a Broadcast Correction mountpoint from the 'Streams' section
    4494 and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing
    4495 the Antenna Phase Center (APC) related correction stream. Finally, double click on the 'Weight' field to enter a weight to be applied
    4496 to this stream in the combination.</p>
     4496and hit Enter.</p>
     4497<p>
     4498Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing
     4499the Antenna Phase Center (APC) related correction stream.</p>
     4500<p>
     4501After that, double click on the 'Weight Factor' field to enter a weight to be applied to this stream in the combination.
     4502A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution.</p>
     4503<p>
     4504Finally, double click on the 'Exclude Satellites' field and specify satellites or satellite systems, to exclude them for an individual AC.
     4505An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC.
     4506Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p>
     4507<p>
     4508Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams.
     4509The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage
     4510then BNC switches to the next remaining stream for getting hold of the orbit information.</p>
     4511<p>
     4512The combination process requires Broadcast Ephemeris.
     4513Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p>
     4514<p>
     4515It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table.
     4516Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility
     4517to save final orbit and clock results in SP3 and/or Clock RINEX format.
     4518</p>
    44974519<p>
    44984520The sequence of entries in the 'Combine Corrections' table is not of importance.
     
    45214543Select a clock combination method. Available options are 'Kalman Filter' and 'Single-Epoch'.
    45224544It is suggested to use the 'Kalman Filter' approach in case the combined stream of Broadcast Corrections
    4523 is intended for Precise Point Positioning.
    4524 </p>
    4525 
    4526 <p><h4 id="combimax">2.14.1.3 Maximal Residuum - mandatory if 'Combine Corrections' table is populated</h4></p>
     4545is intended for Precise Point Positioning.</p>
     4546
     4547<p><h4 id="combimaxres">2.14.1.3 Maximal Clock Residuum - mandatory if 'Combine Corrections' table is populated</h4></p>
    45274548<p>
    45284549BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than
    4529 'Maximal Residuum' meters from the average of all clocks will be ignored.
     4550'Maximal Clk Residuum' meters from the average of all clocks will be ignored.
    45304551It is suggested to specify a value of about 0.2 m for the Kalman Filter combination approach and
    4531 a value of about 3.0 meters for the Single-Epoch combination approach.
    4532 </p>
    4533 <p>
    4534 Default is a 'Maximal Residuum' of 999.0 meters.</p>
    4535 
    4536 <p><h4 id="combismpl">2.14.1.4 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
     4552a value of about 3.0 meters for the Single-Epoch combination approach.</p>
     4553<p>
     4554Default is a 'Maximal Clk Residuum' of 999.0 meters.</p>
     4555
     4556<p><h4 id="combimaxdisp">2.14.1.4 Maximal Orbit Displacement - mandatory if 'Combine Corrections' table is populated</h4></p>
     4557<p>
     4558BNC builds mean values for all incoming orbit corrections per satellite.
     4559Individual orbit corrections that differ by more than 'Maximal Orb Displacement' meters from the average
     4560of all orbit corrections per satellite will be ignored. It is suggested to specify a value of about 0.5 m.</p>
     4561<p>
     4562Default is a 'Maximal Orb Displacement' of 2.0 meters.</p>
     4563
     4564<p><h4 id="combismpl">2.14.1.5 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
    45374565<p>
    45384566Specify a combination sampling interval. Orbit and clock corrections will be produced following that interval.
    4539 A value of 10 sec may be an appropriate choice.
    4540 </p>
     4567A value of 10 sec may be an appropriate choice.</p>
     4568
     4569<p><h4 id="combisatsys">2.14.1.6 Satellite Systems - mandatory if 'Combine Corrections' table is populated</h4></p>
     4570<p>
     4571Specify for each satellite system whether the clock corrections shall be combined.</p>
    45414572
    45424573<p><h4 id="upclk">2.15 Upload Corrections</h4></p>
     
    61296160
    61306161Combine Corrections Panel keys:
    6131    cmbStreams      {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:
    6132                    "SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0"]}
    6133    cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]}
    6134    cmbBsxFile      {SINEX Bias file, full path [char string]}
    6135    cmbMaxres       {Clock outlier residuum threshold in meters [floating-point number]
    6136    cmbSampl        {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}
    6137    cmbGps          {GPS correction usage [integer number: 0=no,2=yes]}
    6138    cmbGlo          {GLONASS correction usage [integer number: 0=no,2=yes]}
    6139    cmbGal          {Galileo correction usage [integer number: 0=no,2=yes]}
    6140    cmbBds          {Beidou correction usage [integer number: 0=no,2=yes]}
    6141    cmbQzss         {QZSS correction usage [integer number: 0=no,2=yes]}
    6142    cmbSbas         {SBAS correction usage [integer number: 0=no,2=yes]}
    6143    cmbIrnss        {IRNSS correction usage [integer number: 0=no,2=yes]}
     6162   cmbStreams         {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:
     6163                      "SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0"]}
     6164   cmbMethodFilter    {Combination approach [character string: Single-Epoch|Filter]}
     6165   cmbBsxFile         {SINEX Bias file, full path [char string]}
     6166   cmbMaxres          {Clock outlier residuum threshold in meters [floating-point number]
     6167   cmbMaxdisplacement {Maximal orbit displacement from the mean of corrections for a satellite [floating-point number]
     6168   cmbSampl           {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}
     6169   cmbGps             {GPS correction usage [integer number: 0=no,2=yes]}
     6170   cmbGlo             {GLONASS correction usage [integer number: 0=no,2=yes]}
     6171   cmbGal             {Galileo correction usage [integer number: 0=no,2=yes]}
     6172   cmbBds             {Beidou correction usage [integer number: 0=no,2=yes]}
     6173   cmbQzss            {QZSS correction usage [integer number: 0=no,2=yes]}
     6174   cmbSbas            {SBAS correction usage [integer number: 0=no,2=yes]}
     6175   cmbIrnss           {IRNSS correction usage [integer number: 0=no,2=yes]}
    61446176
    61456177Upload Corrections Panel keys:
  • trunk/BNC/src/bncmain.cpp

    r10354 r10451  
    281281      "\n"
    282282      "Combine Corrections Panel keys:\n"
    283       "   cmbStreams      {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
    284       "                   \"SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0\"]}\n"
    285       "   cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]}\n"
    286       "   cmbBsxFile      {SINEX Bias file, full path [char string]}\n"
    287       "   cmbMaxres       {Clock outlier residuum threshold in meters [floating-point number]\n"
    288       "   cmbSampl        {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}\n"
    289       "   cmbGps          {GPS correction usage [integer number: 0=no,2=yes]}\n"
    290       "   cmbGlo          {GLONASS correction usage [integer number: 0=no,2=yes]}\n"
    291       "   cmbGal          {Galileo correction usage [integer number: 0=no,2=yes]}\n"
    292       "   cmbBds          {Beidou correction usage [integer number: 0=no,2=yes]}\n"
    293       "   cmbQzss         {QZSS correction usage [integer number: 0=no,2=yes]}\n"
    294       "   cmbSbas         {SBAS correction usage [integer number: 0=no,2=yes]}\n"
    295       "   cmbIrnss        {IRNSS correction usage [integer number: 0=no,2=yes]}\n"
     283      "   cmbStreams         {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
     284      "                       \"SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0\"]}\n"
     285      "   cmbMethodFilter    {Combination approach [character string: Single-Epoch|Filter]}\n"
     286      "   cmbBsxFile         {SINEX Bias file, full path [char string]}\n"
     287      "   cmbMaxres          {Clock outlier residuum threshold in meters [floating-point number]}\n"
     288      "   cmbMaxdisplacement {Maximal orbit displacement from the mean of corrections for a satellite [floating-point number]}\n"
     289      "   cmbSampl           {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}\n"
     290      "   cmbGps             {GPS correction usage [integer number: 0=no,2=yes]}\n"
     291      "   cmbGlo             {GLONASS correction usage [integer number: 0=no,2=yes]}\n"
     292      "   cmbGal             {Galileo correction usage [integer number: 0=no,2=yes]}\n"
     293      "   cmbBds             {Beidou correction usage [integer number: 0=no,2=yes]}\n"
     294      "   cmbQzss            {QZSS correction usage [integer number: 0=no,2=yes]}\n"
     295      "   cmbSbas            {SBAS correction usage [integer number: 0=no,2=yes]}\n"
     296      "   cmbIrnss           {IRNSS correction usage [integer number: 0=no,2=yes]}\n"
    296297      "\n"
    297298      "Upload Corrections Panel keys:\n"
  • trunk/BNC/src/bncsettings.cpp

    r10420 r10451  
    171171    setValue_p("cmbMethod",           "");
    172172    setValue_p("cmbMaxres",           "");
     173    setValue_p("cmbMaxdisplacement",  "");
    173174    setValue_p("cmbSampl",          "10");
    174175    setValue_p("cmbGps",             "2");
  • trunk/BNC/src/bncwindow.cpp

    r10422 r10451  
    474474  // Combine Corrections
    475475  // -------------------
    476   _cmbTable = new QTableWidget(0,3);
    477   _cmbTable->setHorizontalHeaderLabels(QString("Mountpoint, AC Name, Weight Factor").split(","));
     476  _cmbTable = new QTableWidget(0,4);
     477  _cmbTable->setHorizontalHeaderLabels(QString("Mountpoint, AC Name, Weight Factor, Exclude Satellites").split(","));
    478478  _cmbTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
    479479  _cmbTable->setSelectionBehavior(QAbstractItemView::SelectRows);
    480   _cmbTable->setMaximumWidth(30*ww);
     480  _cmbTable->setMaximumWidth(40*ww);
    481481  _cmbTable->horizontalHeader()->resizeSection(0,10*ww);
    482   _cmbTable->horizontalHeader()->resizeSection(1,8*ww);
    483   _cmbTable->horizontalHeader()->resizeSection(2,8*ww);
     482  _cmbTable->horizontalHeader()->resizeSection(1,6*ww);
     483  _cmbTable->horizontalHeader()->resizeSection(2,9*ww);
     484  _cmbTable->horizontalHeader()->resizeSection(3,9*ww);
    484485#if QT_VERSION < 0x050000
    485486  _cmbTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
     
    491492
    492493  _cmbMaxresLineEdit = new QLineEdit(settings.value("cmbMaxres").toString());
     494  _cmbMaxdisplacementLineEdit = new QLineEdit(settings.value("cmbMaxdisplacements").toString());
    493495
    494496  _cmbSamplSpinBox = new QSpinBox;
     
    517519    enableWidget(true, _cmbMethodComboBox);
    518520    enableWidget(true, _cmbMaxresLineEdit);
     521    enableWidget(true, _cmbMaxdisplacementLineEdit);
    519522    enableWidget(true, _cmbSamplSpinBox);
    520523  }
     
    522525    enableWidget(false, _cmbMethodComboBox);
    523526    enableWidget(false, _cmbMaxresLineEdit);
     527    enableWidget(false, _cmbMaxdisplacementLineEdit);
    524528    enableWidget(false, _cmbSamplSpinBox);
    525529  }
     
    12831287
    12841288  populateCmbTable();
    1285   cmbLayout->addWidget(_cmbTable,                                                0, 0, 8, 6);
    1286   cmbLayout->addWidget(new QLabel(" Combine Broadcast Correction streams.<br>"), 1, 6, 1, 10);
    1287   cmbLayout->addWidget(addCmbRowButton,                                          2,  6);
    1288   cmbLayout->addWidget(delCmbRowButton,                                          2,  7);
    1289   cmbLayout->addWidget(new QLabel("Method"),                                     3,  6, Qt::AlignLeft);
    1290   cmbLayout->addWidget(_cmbMethodComboBox,                                       3,  7);
    1291   cmbLayout->addWidget(new QLabel("BSX File"),                                   4,  6, Qt::AlignLeft);
    1292   cmbLayout->addWidget(_cmbBsxFile,                                              4,  7, Qt::AlignRight);
    1293   cmbLayout->addWidget(new QLabel("Max Residual"),                               5,  6, Qt::AlignLeft);
    1294   cmbLayout->addWidget(_cmbMaxresLineEdit,                                       5,  7, Qt::AlignRight);
    1295   cmbLayout->addWidget(new QLabel("Sampling"),                                   6,  6, Qt::AlignLeft);
    1296   cmbLayout->addWidget(_cmbSamplSpinBox,                                         6,  7, Qt::AlignRight);
    1297   cmbLayout->addWidget(new QLabel("GNSS"),                                       7,  6, Qt::AlignLeft);
    1298   cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                                7,  7);
    1299   cmbLayout->addWidget(_cmbGpsCheckBox,                                          7,  8);
    1300   cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          7,  9);
    1301   cmbLayout->addWidget(_cmbGloCheckBox,                                          7, 10);
    1302   cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          7, 11);
    1303   cmbLayout->addWidget(_cmbGalCheckBox,                                          7, 12);
    1304   cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           7, 13);
    1305   cmbLayout->addWidget(_cmbBdsCheckBox,                                          7, 14);
    1306   cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             8,  7);
    1307   cmbLayout->addWidget(_cmbQzssCheckBox,                                         8,  8);
    1308   cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             8,  9);
    1309   cmbLayout->addWidget(_cmbSbasCheckBox,                                         8, 10);
    1310   cmbLayout->addWidget(new QLabel("IRNSS"),                                      8, 11);
    1311   cmbLayout->addWidget(_cmbIrnssCheckBox,                                        8, 12);
    1312   cmbLayout->setRowStretch(8, 999);
     1289  cmbLayout->addWidget(_cmbTable,                                                0, 0, 8, 10);
     1290  cmbLayout->addWidget(new QLabel(" Combine Broadcast Correction streams.<br>"), 0, 10, 1, 10);
     1291  cmbLayout->addWidget(addCmbRowButton,                                          1, 10);
     1292  cmbLayout->addWidget(delCmbRowButton,                                          1, 11);
     1293  cmbLayout->addWidget(new QLabel("Method"),                                     2, 10, Qt::AlignLeft);
     1294  cmbLayout->addWidget(_cmbMethodComboBox,                                       2, 11);
     1295  cmbLayout->addWidget(new QLabel("BSX File"),                                   3, 10, Qt::AlignLeft);
     1296  cmbLayout->addWidget(_cmbBsxFile,                                              3, 11, Qt::AlignRight);
     1297  cmbLayout->addWidget(new QLabel("Max Clk Residual"),                           4, 10, Qt::AlignLeft);
     1298  cmbLayout->addWidget(_cmbMaxresLineEdit,                                       4, 11, Qt::AlignRight);
     1299  cmbLayout->addWidget(new QLabel("Max Orb Displacement"),                       5, 10, Qt::AlignLeft);
     1300  cmbLayout->addWidget(_cmbMaxdisplacementLineEdit,                              5, 11, Qt::AlignRight);
     1301  cmbLayout->addWidget(new QLabel("Sampling"),                                   6, 10, Qt::AlignLeft);
     1302  cmbLayout->addWidget(_cmbSamplSpinBox,                                         6, 11, Qt::AlignRight);
     1303
     1304  cmbLayout->addWidget(new QLabel("GNSS"),                                       0, 14, Qt::AlignLeft);
     1305  cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                              1, 14);
     1306  cmbLayout->addWidget(_cmbGpsCheckBox,                                          1, 15);
     1307
     1308  cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          2, 14);
     1309  cmbLayout->addWidget(_cmbGloCheckBox,                                          2, 15);
     1310
     1311  cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          3, 14);
     1312  cmbLayout->addWidget(_cmbGalCheckBox,                                          3, 15);
     1313
     1314  cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           4, 14);
     1315  cmbLayout->addWidget(_cmbBdsCheckBox,                                          4, 15);
     1316
     1317  cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             5, 14);
     1318  cmbLayout->addWidget(_cmbQzssCheckBox,                                         5, 15);
     1319
     1320  cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             6, 14);
     1321  cmbLayout->addWidget(_cmbSbasCheckBox,                                         6, 15);
     1322
     1323  cmbLayout->addWidget(new QLabel("IRNSS"),                                      7, 14);
     1324  cmbLayout->addWidget(_cmbIrnssCheckBox,                                        7, 15);
     1325  cmbLayout->setRowStretch(9, 999);
    13131326
    13141327  connect(addCmbRowButton, SIGNAL(clicked()), this, SLOT(slotAddCmbRow()));
     
    15831596  // WhatsThis, Combine Corrections
    15841597  // ------------------------------
    1585   _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Finally, double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
     1598  _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution. Finally, double click on the 'Exclude Satellites' field and specify satellites, to exclude them for an individual AC. An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC. Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
    15861599  addCmbRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Combine Corrections' table.</p>"));
    15871600  delCmbRowButton->setWhatsThis(tr("<p>Hit 'Delete' button to delete the highlighted line(s) from the 'Combine Corrections' table.</p>"));
    15881601  _cmbMethodComboBox->setWhatsThis(tr("<p>Select a clock combination approach. Options are 'Single-Epoch' and Kalman 'Filter'.</p><p>It is suggested to use the Kalman filter approach for the purpose of Precise Point Positioning. <i>[key: cmbMethod]</i></p>"));
    1589   _cmbMaxresLineEdit->setWhatsThis(tr("<p>BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than 'Maximal residuum' meters from the average of all clocks will be ignored.<p></p>It is suggested to specify a value of about 0.2 m for the Kalman filter combination approach and a value of about 3.0 meters for the Single-Epoch combination approach.</p><p>Default is a value of '999.0'. <i>[key: cmbMaxres]</i></p>"));
     1602  _cmbMaxresLineEdit->setWhatsThis(tr("<p>BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than 'Maximal Clk Residuum' meters from the average of all clocks will be ignored.<p></p>It is suggested to specify a value of about 0.2 m for the Kalman filter combination approach and a value of about 3.0 meters for the Single-Epoch combination approach.</p><p>Default is a value of '999.0'. <i>[key: cmbMaxres]</i></p>"));
     1603  _cmbMaxdisplacementLineEdit->setWhatsThis(tr("<p>BNC builds mean values for all incoming orbit corrections per satellite. Individual orbit corrections that differ by more than 'Maximal Orb Displacement' meters from the average of all orbit corrections per satellite will be ignored.<p></p>It is suggested to specify a value of about 0.5 m.</p><p>Default is a value of '2.0'. <i>[key: cmbMaxdisplacement]</i></p>"));
    15901604  _cmbSamplSpinBox->setWhatsThis(tr("<p>Select a combination Sampling interval for the clocks. Clock corrections will be produced following that interval.</p><p>A value of 10 sec may be an appropriate choice. A value of zero '0' tells BNC to use all available samples. <i>[key:  ]</i></p>"));
    15911605  _cmbGpsCheckBox->setWhatsThis(tr("<p>GPS clock corrections shall be combined. GPS Broadcast ephemeris and corrections are required. <i>[key: cmbGps]</i></p>"));
     
    17271741  _cmbTable->deleteLater();
    17281742  delete _cmbMaxresLineEdit;
     1743  delete _cmbMaxdisplacementLineEdit;
    17291744  delete _cmbSamplSpinBox;
    17301745  delete _cmbMethodComboBox;
     
    22172232    settings.setValue("cmbStreams", "");
    22182233  }
    2219   settings.setValue("cmbMethod",     _cmbMethodComboBox->currentText());
    2220   settings.setValue("cmbMaxres",     _cmbMaxresLineEdit->text());
    2221   settings.setValue("cmbSampl",      _cmbSamplSpinBox->value());
    2222   settings.setValue("cmbGps",        _cmbGpsCheckBox->checkState());
    2223   settings.setValue("cmbGlo",        _cmbGloCheckBox->checkState());
    2224   settings.setValue("cmbGal",        _cmbGalCheckBox->checkState());
    2225   settings.setValue("cmbBds",        _cmbBdsCheckBox->checkState());
    2226   settings.setValue("cmbQzss",       _cmbQzssCheckBox->checkState());
    2227   settings.setValue("cmbSbas",       _cmbSbasCheckBox->checkState());
    2228   settings.setValue("cmbIrnss",      _cmbIrnssCheckBox->checkState());
    2229   settings.setValue("cmbBsxFile",    _cmbBsxFile->fileName());
     2234  settings.setValue("cmbMethod",          _cmbMethodComboBox->currentText());
     2235  settings.setValue("cmbMaxres",          _cmbMaxresLineEdit->text());
     2236  settings.setValue("cmbMaxdisplacement", _cmbMaxresLineEdit->text());
     2237  settings.setValue("cmbSampl",           _cmbSamplSpinBox->value());
     2238  settings.setValue("cmbGps",             _cmbGpsCheckBox->checkState());
     2239  settings.setValue("cmbGlo",             _cmbGloCheckBox->checkState());
     2240  settings.setValue("cmbGal",             _cmbGalCheckBox->checkState());
     2241  settings.setValue("cmbBds",             _cmbBdsCheckBox->checkState());
     2242  settings.setValue("cmbQzss",            _cmbQzssCheckBox->checkState());
     2243  settings.setValue("cmbSbas",            _cmbSbasCheckBox->checkState());
     2244  settings.setValue("cmbIrnss",           _cmbIrnssCheckBox->checkState());
     2245  settings.setValue("cmbBsxFile",         _cmbBsxFile->fileName());
    22302246
    22312247// Upload Corrections
     
    27522768      enableWidget(true, _cmbMethodComboBox);
    27532769      enableWidget(true, _cmbMaxresLineEdit);
     2770      enableWidget(true, _cmbMaxdisplacementLineEdit);
    27542771      enableWidget(true, _cmbSamplSpinBox);
    27552772      enableWidget(true, _cmbGpsCheckBox);
     
    27652782      enableWidget(false, _cmbMethodComboBox);
    27662783      enableWidget(false, _cmbMaxresLineEdit);
     2784      enableWidget(false, _cmbMaxdisplacementLineEdit);
    27672785      enableWidget(false, _cmbSamplSpinBox);
    27682786      enableWidget(false, _cmbGpsCheckBox);
     
    28732891    enableWidget(false, _cmbMethodComboBox);
    28742892    enableWidget(false, _cmbMaxresLineEdit);
     2893    enableWidget(false, _cmbMaxdisplacementLineEdit);
    28752894    enableWidget(false, _cmbSamplSpinBox);
    28762895  }
  • trunk/BNC/src/bncwindow.h

    r10420 r10451  
    219219    QTableWidget*  _cmbTable;
    220220    QLineEdit*     _cmbMaxresLineEdit;
     221    QLineEdit*     _cmbMaxdisplacementLineEdit;
    221222    QComboBox*     _cmbMethodComboBox;
    222223    QSpinBox*      _cmbSamplSpinBox;
  • trunk/BNC/src/combination/bnccomb.cpp

    r10449 r10451  
    176176      newAC->name         = hlp[1];
    177177      newAC->weightFactor = hlp[2].toDouble();
    178       newAC->isAPC = bool(newAC->mountPoint.mid(0,4) == "SSRA");
     178      newAC->excludeSats  = hlp[3].split(QRegExp("[ ,]"), QString::SkipEmptyParts);
     179      newAC->isAPC        = bool(newAC->mountPoint.mid(0,4) == "SSRA");
    179180      QMapIterator<char, unsigned> itSys(_cmbSysPrn);
    180181      // init
     
    182183        itSys.next();
    183184        char sys = itSys.key();
    184         if (!_masterOrbitAC.contains(sys)) {
     185        if (!_masterOrbitAC.contains(sys) &&
     186            !newAC->excludeSats.contains(QString(sys), Qt::CaseSensitive)) {
    185187          _masterOrbitAC[sys] = newAC->name;
    186188          _masterIsAPC[sys]   = newAC->isAPC;
     
    299301  // Maximal Residuum
    300302  // ----------------
    301   _MAXRES = settings.value("cmbMaxres").toDouble();
    302   if (_MAXRES <= 0.0) {
    303     _MAXRES = 999.0;
    304   }
     303  _MAX_RES = settings.value("cmbMaxres").toDouble();
     304  if (_MAX_RES <= 0.0) {
     305    _MAX_RES = 999.0;
     306  }
     307
     308  // Maximal Displacement
     309  // --------------------
     310  _MAX_DISPLACEMENT = settings.value("cmbMaxdisplacement").toDouble();
     311  if (_MAX_DISPLACEMENT <= 0.0) {
     312    _MAX_DISPLACEMENT = 2.0;
     313  }
     314
    305315  _newCorr = 0;
    306316}
     
    395405    // ----------------------
    396406    QString acName;
     407    QStringList excludeSats;
    397408    QListIterator<cmbAC*> icAC(_ACs);
    398409    while (icAC.hasNext()) {
     
    400411      if (AC->mountPoint == staID) {
    401412        acName = AC->name;
     413        excludeSats = AC->excludeSats;
    402414        break;
    403415      }
    404416    }
    405     if (acName.isEmpty()) {
     417    if (acName.isEmpty() || excludeSat(orbCorr._prn, excludeSats)) {
    406418      continue;
    407419    }
     
    431443    // ----------------------
    432444    QString acName;
     445    QStringList excludeSats;
    433446    QListIterator<cmbAC*> icAC(_ACs);
    434447    while (icAC.hasNext()) {
     
    436449      if (AC->mountPoint == staID) {
    437450        acName = AC->name;
     451        excludeSats = AC->excludeSats;
    438452        break;
    439453      }
    440454    }
    441     if (acName.isEmpty()) {
     455    if (acName.isEmpty() || excludeSat(satCodeBias._prn, excludeSats)) {
    442456      continue;
    443457    }
     
    480494    // ----------------------
    481495    QString acName;
     496    QStringList excludeSats;
    482497    bool isAPC;
    483498    QString staID(newClk._staID.c_str());
     
    487502      if (AC->mountPoint == staID) {
    488503        acName = AC->name;
     504        QStringList excludeSats;
    489505        isAPC  = AC->isAPC;
    490506        break;
    491507      }
    492508    }
    493     if (acName.isEmpty() || isAPC != _masterIsAPC[sys]) {
     509    if (acName.isEmpty() ||
     510        isAPC != _masterIsAPC[sys] ||
     511        excludeSat(newClk._prn, excludeSats)) {
    494512      continue;
    495513    }
     
    962980        << " Maximum Residuum " << maxRes << ' '
    963981        << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
    964     if (maxRes > _MAXRES) {
     982    if (maxRes > _MAX_RES) {
    965983      for (int iPar = 1; iPar <= _params[sys].size(); iPar++) {
    966984        cmbParam* pp = _params[sys][iPar-1];
     
    13681386        << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
    13691387
    1370     if (maxRes > _MAXRES) {
     1388    if (maxRes > _MAX_RES) {
    13711389      out << "  Outlier" << "\n";
    13721390      delete corrs(sys)[maxResIndex-1];
     
    13981416t_irc bncComb::checkOrbits(bncTime epoTime, char sys, QTextStream& out) {
    13991417
    1400   const double MAX_DISPLACEMENT = 2.0;
    1401 
    14021418  // Switch to last ephemeris (if possible)
    14031419  // --------------------------------------
     
    15001516      else if (corr == maxDiff[prn]) {
    15011517        double norm = corr->_diffRao.NormFrobenius();
    1502         if (norm > MAX_DISPLACEMENT) {
     1518        if (norm > _MAX_DISPLACEMENT) {
    15031519          out << epoTime.datestr().c_str()    << " "
    15041520              << epoTime.timestr().c_str()    << " "
     
    15771593  }
    15781594}
     1595
     1596//
     1597////////////////////////////////////////////////////////////////////////////
     1598bool bncComb::excludeSat(const t_prn& prn, const QStringList excludeSats) const {
     1599  QStringListIterator it(excludeSats);
     1600  while (it.hasNext()) {
     1601    string prnStr = it.next().toLatin1().data();
     1602    if (prnStr == prn.toString() || prnStr == prn.toString().substr(0,1)) {
     1603      return true;
     1604    }
     1605  }
     1606  return false;
     1607}
  • trunk/BNC/src/combination/bnccomb.h

    r10275 r10451  
    9898    QString              name;
    9999    double               weightFactor;
     100    QStringList          excludeSats;
    100101    bool                 isAPC;
    101102    QMap<char, unsigned> numObs;
     
    153154    std::vector<t_clkCorr>  _clkCorr;
    154155  };
    155 
    156 
    157156
    158157  class cmbRefSig {
     
    245244  void  switchToLastEph(t_eph* lastEph, cmbCorr* corr);
    246245  t_irc checkOrbits(bncTime epoTime, char sys, QTextStream& out);
     246  bool excludeSat(const t_prn& prn, const QStringList excludeSats) const;
    247247  QVector<cmbCorr*>& corrs(char sys) {return _buffer[sys].corrs;}
    248248
     
    257257  bncAntex*                                  _antex;
    258258  bncBiasSnx*                                _bsx;
    259   double                                     _MAXRES;
     259  double                                     _MAX_RES;
     260  double                                     _MAX_DISPLACEMENT;
    260261  e_method                                   _method;
    261262  int                                        _cmbSampl;
Note: See TracChangeset for help on using the changeset viewer.