source: ntrip/trunk/BNC/src/combination/bncbiassnx.cpp@ 10669

Last change on this file since 10669 was 10660, checked in by stuerze, 4 weeks ago

minor changes

File size: 20.2 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
25/* -------------------------------------------------------------------------
26 * BKG NTRIP Client
27 * -------------------------------------------------------------------------
28 *
29 * Class: bncBiasSnx
30 *
31 * Purpose: Biases from Bias SINEX File
32 *
33 * Author: A. Stuerze
34 *
35 * Created: 15-Mar-2022
36 *
37 * Changes:
38 *
39 * -----------------------------------------------------------------------*/
40
41#include "bncbiassnx.h"
42
43#include <iostream>
44#include <newmatio.h>
45
46using namespace std;
47
48// Constructor
49////////////////////////////////////////////////////////////////////////////
50bncBiasSnx::bncBiasSnx() {
51 bncSettings settings;
52 _useGnss['G'] = (Qt::CheckState(settings.value("cmbGps").toInt()) == Qt::Checked) ? true : false;
53 _useGnss['R'] = (Qt::CheckState(settings.value("cmbGlo").toInt()) == Qt::Checked) ? true : false;
54 _useGnss['E'] = (Qt::CheckState(settings.value("cmbGal").toInt()) == Qt::Checked) ? true : false;
55 _useGnss['C'] = (Qt::CheckState(settings.value("cmbBds").toInt()) == Qt::Checked) ? true : false;
56 _useGnss['J'] = (Qt::CheckState(settings.value("cmbQzss").toInt()) == Qt::Checked) ? true : false;
57 _useGnss['S'] = (Qt::CheckState(settings.value("cmbSbas").toInt()) == Qt::Checked) ? true : false;
58 _useGnss['I'] = (Qt::CheckState(settings.value("cmbNavic").toInt()) == Qt::Checked) ? true : false;
59}
60
61// Destructor
62////////////////////////////////////////////////////////////////////////////
63bncBiasSnx::~bncBiasSnx() {
64 clear();
65}
66
67// Clear Satellite Map
68////////////////////////////////////////////////////////////////////////////
69void bncBiasSnx::clear() {
70 QMapIterator<QString,snxSatCodeBias*>it(_snxSatCodeBiasMap);
71 while (it.hasNext()) {
72 it.next();
73 delete it.value();
74 }
75 _snxSatCodeBiasMap.clear();
76}
77
78// Print
79////////////////////////////////////////////////////////////////////////////
80void bncBiasSnx::print() const {
81 QMapIterator<QString,snxSatCodeBias*> it(_snxSatCodeBiasMap);
82 cout << "============= bncBiasSnx::print() ==========" << endl;
83 while (it.hasNext()) {
84 it.next();
85 cout << it.key().toStdString() << " ";
86 snxSatCodeBias* satCbMap = it.value();
87 cout << satCbMap->_startTime.datestr() << "_" << satCbMap->_startTime.timestr() << " ";
88 QMapIterator <QString, double> itB(satCbMap->_biasMap);
89 cout << satCbMap->_biasMap.size() << " ";
90 while (itB.hasNext()) {
91 itB.next();
92 QString osb = itB.key();
93 double value = itB.value();
94 cout << osb.toStdString() << " " << value << " ";
95 }
96 cout << endl;
97 }
98}
99
100
101// Read Bias SINEX File
102////////////////////////////////////////////////////////////////////////////
103t_irc bncBiasSnx::readFile(const QString& fileName) {
104 clear();
105 QFile inFile(fileName);
106 if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
107 return failure;
108 }
109
110 QTextStream in(&inFile);
111
112 while ( !in.atEnd() ) {
113 QString biasType, biasAtrib, svn, prn, station, obs1, obs2, startTimeStr, endTimeStr, unit;
114 double value;
115 bncTime startTime;
116
117 QString line = in.readLine();//cout << line.toStdString() << endl;
118 if (line.indexOf("+BIAS/SOLUTION") == 14) {
119 clear();
120 }
121 else if (line.indexOf("BIAS_MODE") == 1) {
122 if (line.contains("ABSOLUTE")) {
123 _type = ABS;
124 }
125 else if (line.contains("RELATIVE")) {
126 _type = REL;
127 }
128 }
129 else if (line.indexOf("OSB") == 1 || line.indexOf("DSB") == 1) {
130 QTextStream inLine(&line, QIODevice::ReadOnly);
131 inLine >> biasType;
132 if (biasType == "OSB") {
133 inLine >> svn >> prn >> obs1 >> startTimeStr >> endTimeStr >> unit >> value;
134 biasAtrib = obs1;
135 }
136 else if (biasType == "DSB") {
137 inLine >> svn;
138 if (svn.size() == 1) { // station data
139 continue;
140 } else {
141 inLine >> prn >> obs1 >> obs2 >> startTimeStr >> endTimeStr >> unit >> value;
142 biasAtrib = QString("%1-%2").arg(obs1).arg(obs2);
143 }
144 }
145 // bncTime from snx time
146 // ---------------------
147 if (bncTimeFromSinex(startTimeStr, startTime) != success) {
148 continue;
149 }
150 // conversion of Code Biases
151 // -------------------------
152 if (unit.contains("ns")) {
153 // from nano seconds into meters
154 value /= 1.e9;
155 value *= t_CST::c;
156
157 }
158
159 // delete existing entries if there are newer once available
160 // ---------------------------------------------------------
161 if (_snxSatCodeBiasMap.contains(prn)) {
162 if (_snxSatCodeBiasMap[prn]->_startTime < startTime) {
163 delete _snxSatCodeBiasMap[prn];
164 _snxSatCodeBiasMap[prn] = new snxSatCodeBias(startTime);
165 }
166 }
167 else {
168 _snxSatCodeBiasMap[prn] = new snxSatCodeBias(startTime);
169 }
170 // save biases
171 // -----------
172 QMap<QString, double>& biasMap = _snxSatCodeBiasMap[prn]->_biasMap;
173 if (!biasMap.contains(biasAtrib)) {
174 biasMap.insert(biasAtrib, value);
175 }
176 }
177 }
178 inFile.close();
179
180 if (_type == ABS) {
181 getDsbFromOsb();
182 }
183 cleanDsb();
184 //print();
185 return success;
186}
187
188// bncTime from SINEX Time String
189////////////////////////////////////////////////////////////////////////////
190t_irc bncBiasSnx::bncTimeFromSinex(QString snxStr, bncTime& time) {
191 bool ok = false;
192 QStringList hlp = snxStr.split(":");// yyyy:doy:dssec
193
194 int year = hlp[0].toInt(&ok, 10);
195 if (!ok) {
196 return failure;
197 }
198 time.set(year, 1, 1, 0, 0, 0.0);
199
200 int doy = hlp[1].toInt(&ok, 10);
201 if (!ok) {
202 return failure;
203 }
204 time += (doy * 24.0 * 3600.0);
205
206 int daysec = hlp[2].toInt(&ok, 10);
207 if (!ok) {
208 return failure;
209 }
210
211 time += daysec;
212
213 return success;
214}
215
216
217// get DSBs from OSBs
218////////////////////////////////////////////////////////////////////////////
219t_irc bncBiasSnx::getDsbFromOsb(void) {
220 QMapIterator<QString,snxSatCodeBias*>itSat(_snxSatCodeBiasMap);
221 while (itSat.hasNext()) {
222 itSat.next();
223 char sys = itSat.key().at(0).toLatin1();
224 QMap<QString, double>& cb = itSat.value()->_biasMap;
225 switch (sys) {
226 case 'G':
227 if (cb.contains("C1W") && cb.contains("C2W")) {cb.insert("C1W-C2W", cb["C1W"] - cb["C2W"]);}
228 if (cb.contains("C1C") && cb.contains("C1W")) {cb.insert("C1C-C1W", cb["C1C"] - cb["C1W"]);}
229 if (cb.contains("C2C") && cb.contains("C2W")) {cb.insert("C2C-C2W", cb["C2C"] - cb["C2W"]);}
230 if (cb.contains("C2W") && cb.contains("C2S")) {cb.insert("C2W-C2S", cb["C2W"] - cb["C2S"]);}
231 if (cb.contains("C2W") && cb.contains("C2L")) {cb.insert("C2W-C2L", cb["C2W"] - cb["C2L"]);}
232 if (cb.contains("C2W") && cb.contains("C2X")) {cb.insert("C2W-C2X", cb["C2W"] - cb["C2X"]);}
233 if (cb.contains("C1C") && cb.contains("C2W")) {cb.insert("C1C-C2W", cb["C1C"] - cb["C2W"]);}
234 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
235 if (cb.contains("C1C") && cb.contains("C5X")) {cb.insert("C1C-C5X", cb["C1C"] - cb["C5X"]);}
236 break;
237 case 'R':
238 if (cb.contains("C1P") && cb.contains("C2P")) {cb.insert("C1P-C2P", cb["C1P"] - cb["C2P"]);}
239 if (cb.contains("C1C") && cb.contains("C1P")) {cb.insert("C1C-C1P", cb["C1C"] - cb["C1P"]);}
240 if (cb.contains("C2C") && cb.contains("C2P")) {cb.insert("C2C-C2P", cb["C2C"] - cb["C2P"]);}
241 if (cb.contains("C1C") && cb.contains("C2C")) {cb.insert("C1C-C2C", cb["C1C"] - cb["C2C"]);}
242 if (cb.contains("C1C") && cb.contains("C2P")) {cb.insert("C1C-C2P", cb["C1C"] - cb["C2P"]);}
243 break;
244 case 'E':
245 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
246 if (cb.contains("C1C") && cb.contains("C6C")) {cb.insert("C1C-C6C", cb["C1C"] - cb["C6C"]);}
247 if (cb.contains("C1C") && cb.contains("C7Q")) {cb.insert("C1C-C7Q", cb["C1C"] - cb["C7Q"]);}
248 if (cb.contains("C1C") && cb.contains("C8Q")) {cb.insert("C1C-C8Q", cb["C1C"] - cb["C8Q"]);}
249 break;
250 case 'C':
251 if (cb.contains("C2I") && cb.contains("C6I")) {cb.insert("C2I-C6I", cb["C2I"] - cb["C6I"]);}
252 if (cb.contains("C2I") && cb.contains("C7I")) {cb.insert("C2I-C7I", cb["C2I"] - cb["C7I"]);}
253 if (cb.contains("C1X") && cb.contains("C6I")) {cb.insert("C1X-C6I", cb["C1X"] - cb["C6I"]);}
254 if (cb.contains("C1P") && cb.contains("C6I")) {cb.insert("C1P-C6I", cb["C1P"] - cb["C6I"]);}
255 if (cb.contains("C1D") && cb.contains("C6I")) {cb.insert("C1D-C6I", cb["C1D"] - cb["C6I"]);}
256 if (cb.contains("C1X") && cb.contains("C7Z")) {cb.insert("C1X-C7Z", cb["C1X"] - cb["C7Z"]);}
257 if (cb.contains("C1X") && cb.contains("C8X")) {cb.insert("C1X-C8X", cb["C1X"] - cb["C8X"]);}
258 if (cb.contains("C1X") && cb.contains("C5X")) {cb.insert("C1X-C5X", cb["C1X"] - cb["C5X"]);}
259 if (cb.contains("C1P") && cb.contains("C5P")) {cb.insert("C1P-C5P", cb["C1P"] - cb["C5P"]);}
260 if (cb.contains("C1D") && cb.contains("C5D")) {cb.insert("C1D-C5D", cb["C1D"] - cb["C5D"]);}
261 break;
262 case 'J':
263 if (cb.contains("C1C") && cb.contains("C1X")) {cb.insert("C1C-C1X", cb["C1C"] - cb["C1X"]);}
264 if (cb.contains("C1C") && cb.contains("C2L")) {cb.insert("C1C-C2L", cb["C1C"] - cb["C2L"]);}
265 if (cb.contains("C1C") && cb.contains("C5X")) {cb.insert("C1C-C5X", cb["C1C"] - cb["C5X"]);}
266 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
267 if (cb.contains("C1X") && cb.contains("C2X")) {cb.insert("C1X-C2X", cb["C1X"] - cb["C2X"]);}
268 if (cb.contains("C1X") && cb.contains("C5X")) {cb.insert("C1X-C5X", cb["C1X"] - cb["C5X"]);}
269 break;
270 default:
271 break;
272 }
273 }
274 return success;
275}
276
277//
278////////////////////////////////////////////////////////////////////////////
279t_irc bncBiasSnx::cleanDsb() {
280
281 for (auto itS = _snxSatCodeBiasMap.begin(); itS != _snxSatCodeBiasMap.end();) {
282 char sys = itS.key().at(0).toLatin1();
283 if (!_useGnss[sys]) {
284 delete itS.value();
285 itS = _snxSatCodeBiasMap.erase(itS);
286 }
287 else {
288 QMap<QString, double>& cb = itS.value()->_biasMap;
289 for (auto itB = cb.begin(); itB != cb.end();){
290 if (itB.key().size() == 3) {
291 itB = cb.erase(itB);
292 }
293 else {
294 ++itB;
295 }
296 }
297 ++itS;
298 }
299 }
300 return success;
301}
302
303//
304////////////////////////////////////////////////////////////////////////////
305void bncBiasSnx::determineSsrSatCodeBiases(QString prn, double aIF1, double aIF2,
306 t_satCodeBias& satCodeBias) {
307 std::string rnxType2ch;
308 double value;
309 if (_snxSatCodeBiasMap.contains(prn)) {
310 char sys = prn.at(0).toLatin1();
311 QMap<QString, double>& cb = _snxSatCodeBiasMap[prn]->_biasMap;
312 switch (sys) {
313 case 'G':
314 if (cb.contains("C1W-C2W")) {
315 double dcb_1W2W = cb.find("C1W-C2W").value();
316 rnxType2ch = "1W";
317 value = aIF2 * dcb_1W2W;
318 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
319 rnxType2ch = "2W";
320 value = -aIF1 * dcb_1W2W;
321 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
322 if (cb.contains("C1C-C1W")) {
323 double dcb_1C1W = cb.find("C1C-C1W").value();
324 rnxType2ch = "1C";
325 value = dcb_1C1W + aIF2 * dcb_1W2W;
326 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
327 if (cb.contains("C1C-C5Q")) {
328 double dcb_1C5Q = cb.find("C1C-C5Q").value();
329 rnxType2ch = "5Q";
330 value = dcb_1C1W + aIF2 * dcb_1W2W - dcb_1C5Q;
331 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
332 }
333 if (cb.contains("C1C-C5X")) {
334 double dcb_1C5X = cb.find("C1C-C5X").value();
335 rnxType2ch = "5X";
336 value = dcb_1C1W + aIF2 * dcb_1W2W - dcb_1C5X;
337 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
338 }
339 }
340 else {
341 if (cb.contains("C1C-C2W")) {
342 double dcb_1C2W = cb.find("C1C-C2W").value();
343 rnxType2ch = "1C";
344 value = dcb_1C2W - aIF1 * dcb_1W2W;
345 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
346 }
347 }
348 if (cb.contains("C2C-C2W")) {
349 double dcb_2C2W = cb.find("C2C-C2W").value();
350 rnxType2ch = "2C";
351 value = dcb_2C2W - aIF1 * dcb_1W2W;
352 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
353 }
354 if (cb.contains("C2W-C2S")) {
355 double dcb_2W2S = cb.find("C2W-C2S").value();
356 rnxType2ch = "2S";
357 value = -aIF1 * dcb_1W2W - dcb_2W2S;
358 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
359 }
360 if (cb.contains("C2W-C2L")) {
361 double dcb_2W2L = cb.find("C2W-C2L").value();
362 rnxType2ch = "2L";
363 value = -aIF1 * dcb_1W2W - dcb_2W2L;
364 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
365 }
366 if (cb.contains("C2W-C2X")) {
367 double dcb_2W2X = cb.find("C2W-C2X").value();
368 rnxType2ch = "2X";
369 value = -aIF1 * dcb_1W2W - dcb_2W2X;
370 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
371 }
372 }
373 break;
374 case 'R':
375 if (cb.contains("C1P-C2P")) {
376 double dcb_1P2P = cb.find("C1P-C2P").value();
377 rnxType2ch = "1P";
378 value = aIF2 * dcb_1P2P;
379 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
380 rnxType2ch = "2P";
381 value = -aIF1 * dcb_1P2P;
382 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
383 if (cb.contains("C1C-C1P")) {
384 double dcb_1C1P = cb.find("C1C-C1P").value();
385 rnxType2ch = "1C";
386 value = dcb_1C1P + aIF2 * dcb_1P2P;
387 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
388 }
389 if (cb.contains("C2C-C2P")) {
390 double dcb_2C2P = cb.find("C2C-C2P").value();
391 rnxType2ch = "2C";
392 value = dcb_2C2P - aIF1 * dcb_1P2P;
393 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
394 }
395 }
396 break;
397 case 'E':
398 if (cb.contains("C1C-C5Q")) {
399 double dcb_1C5Q = cb.find("C1C-C5Q").value();
400 rnxType2ch = "5Q";
401 value = -aIF1 * dcb_1C5Q;
402 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
403 rnxType2ch = "1C";
404 value = aIF2 * dcb_1C5Q;
405 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
406 if (cb.contains("C1C-C6C")) {
407 double dcb_1C6C = cb.find("C1C-C6C").value();
408 rnxType2ch = "6C";
409 value = aIF2 * dcb_1C5Q - dcb_1C6C;
410 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
411 }
412 if (cb.contains("C1C-C7Q")) {
413 double dcb_1C7Q = cb.find("C1C-C7Q").value();
414 rnxType2ch = "7Q";
415 value = aIF2 * dcb_1C5Q - dcb_1C7Q;
416 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
417 }
418 if (cb.contains("C1C-C8Q")) {
419 double dcb_1C8Q = cb.find("C1C-C8Q").value();
420 rnxType2ch = "8Q";
421 value = aIF2 * dcb_1C5Q - dcb_1C8Q;
422 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
423 }
424 }
425 break;
426 case 'C':
427 if (cb.contains("C2I-C6I")) {
428 double dcb_2I6I = cb.find("C2I-C6I").value();
429 rnxType2ch = "2I";
430 value = aIF2 * dcb_2I6I;
431 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
432 rnxType2ch = "6I";
433 value = -aIF1 * dcb_2I6I;
434 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
435 if (cb.contains("C2I-C7I")) {
436 double dcb_2I7I = cb.find("C2I-C7I").value();
437 rnxType2ch = "7I";
438 value = aIF2 * dcb_2I6I - dcb_2I7I;
439 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
440 }
441 if (cb.contains("C1X-C6I")) {
442 double dcb_1X6I = cb.find("C1X-C6I").value();
443 rnxType2ch = "1X";
444 value = dcb_1X6I - aIF1 * dcb_2I6I;
445 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
446 if (cb.contains("C1X-C7Z")) {
447 double dcb_1X7Z = cb.find("C1X-C7Z").value();
448 rnxType2ch = "7Z";
449 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X7Z;
450 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
451 }
452 if (cb.contains("C1X-C8X")) {
453 double dcb_1X8X = cb.find("C1X-C8X").value();
454 rnxType2ch = "8X";
455 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X8X;
456 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
457 }
458 if (cb.contains("C1X-C5X")) {
459 double dcb_1X5X = cb.find("C1X-C5X").value();
460 rnxType2ch = "5X";
461 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X5X;
462 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
463 }
464 }
465 if (cb.contains("C1P-C6I")) {
466 double dcb_1P6I = cb.find("C1P-C6I").value();
467 rnxType2ch = "1P";
468 value = dcb_1P6I - aIF1 * dcb_2I6I;
469 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
470 if (cb.contains("C1P-C5P")) {
471 double dcb_1P5P = cb.find("C1P-C5P").value();
472 rnxType2ch = "5P";
473 value = dcb_1P6I - aIF1 * dcb_2I6I - dcb_1P5P;
474 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
475 }
476 }
477 if (cb.contains("C1D-C6I")) {
478 double dcb_1D6I = cb.find("C1D-C6I").value();
479 rnxType2ch = "1D";
480 value = dcb_1D6I - aIF1 * dcb_2I6I;
481 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
482 if (cb.contains("C1D-C5D")) {
483 double dcb_1D5D = cb.find("C1D-C5D").value();
484 rnxType2ch = "5D";
485 value = dcb_1D6I - aIF1 * dcb_2I6I - dcb_1D5D;
486 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
487 }
488 }
489 }
490 break;
491 case 'J':
492 if (cb.contains("C1C-C2L")) {
493 double dcb_1C2L = cb.find("C1C-C2L").value();
494 rnxType2ch = "1C";
495 value = aIF2 * dcb_1C2L;
496 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
497 rnxType2ch = "2L";
498 value = -aIF1 * dcb_1C2L;
499 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
500 if (cb.contains("C1C-C1X")) {
501 double dcb_1C1X = cb.find("C1C-C1X").value();
502 rnxType2ch = "1X";
503 value = aIF2 * dcb_1C2L - dcb_1C1X;
504 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
505 if (cb.contains("C1X-C2X")) {
506 double dcb_1X2X = cb.find("C1X-C2X").value();
507 rnxType2ch = "2X";
508 value = aIF2 * dcb_1C2L - dcb_1C1X - dcb_1X2X;
509 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
510 }
511 }
512 if (cb.contains("C1C-C5X")) {
513 double dcb_1C5X = cb.find("C1C-C5X").value();
514 rnxType2ch = "5X";
515 value = aIF2 * dcb_1C2L - dcb_1C5X;
516 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
517 }
518 }
519 break;
520 default:
521 break;
522 }
523 }
524 return;
525}
526
527
528void bncBiasSnx::setSsrSatCodeBias(std::string rnxType2ch, double value,
529 t_satCodeBias& satCodeBias) {
530 t_frqCodeBias frqCodeBias;
531
532 frqCodeBias._rnxType2ch = rnxType2ch;
533 frqCodeBias._value = value;
534
535 satCodeBias._bias.push_back(frqCodeBias);
536 return;
537}
Note: See TracBrowser for help on using the repository browser.