Skip to content
Snippets Groups Projects
Commit 1bdee2fa authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

new SBAS options for iono and eph

parent 95f3dcec
No related branches found
No related tags found
2 merge requests!20new tag,!19new tag
Subproject commit f37a58057ce5ca45d46c492dacd8105f6f9e4d70
Subproject commit 0260d91932df0ca0691842aa99b39acde5d49c45
......@@ -113,15 +113,15 @@ struct TdcpOptions
struct Options
{
int sateph; // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris
int ionoopt; // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode
int tropopt; // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction
int sbascorr; // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging
int raim; // RAIM removed sats
double elmin; // min elevation (degrees)
double maxgdop; // maxgdop: reject threshold of gdop
int sateph; // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(2 if possible, otherwise 6), EPHOPT_SBAS4(8):broadcast + SBAS(2 if possible, otherwise 0)
int ionoopt; // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode
int tropopt; // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction
int sbascorr; // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging
int raim; // RAIM removed sats
double elmin; // min elevation (degrees)
double maxgdop; // maxgdop: reject threshold of gdop
bool GPS,SBS,GLO,GAL,QZS,CMP,IRN,LEO; // constellations used
TdcpOptions tdcp; // TDCP options
TdcpOptions tdcp; // TDCP options
// compute navsys int
int getNavSys() const
......@@ -152,10 +152,10 @@ struct Options
const Options default_options =
{
EPHOPT_BRDC, // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris
IONOOPT_BRDC, // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode
EPHOPT_SBAS2, // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_SBAS2), EPHOPT_SBAS4(8):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_BRDC)
IONOOPT_SBAS2, // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode, IONOOPT_SBAS2(9):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), IONOOPT_SBAS3(10):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_SBAS2), IONOOPT_SBAS4(8):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_BRDC)
TROPOPT_SAAS, // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction
0, // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging
15, // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging
1, // RAIM enabled
D2R*15.0, // min elevation (degrees)
30.0, // maxgdop: reject threshold of gdop
......
......@@ -35,7 +35,6 @@ namespace GnssUtils
double clock_bias;
double clock_drift;
int svh;
int eph_mode;
};
} // namespace GnssUtils
......
......@@ -39,9 +39,7 @@ Satellites computeSatellites(const Observations& obs,
const int& eph_opt)
{
double rs[6 * obs.size()], dts[2 * obs.size()], var[obs.size()];
double rs_brdc[6 * obs.size()], dts_brdc[2 * obs.size()], var_brdc[obs.size()];
int svh[obs.size()];
int svh_brdc[obs.size()];
// std::cout << "computing position of sats: ";
// for (auto&& obs_ref : obs.getObservations())
......@@ -49,68 +47,30 @@ Satellites computeSatellites(const Observations& obs,
// std::cout << std::endl;
// compute positions
// first compute all broadcasted ephemeris
satposs(obs.getObservations().front().time,
obs.data(),
obs.size(),
&nav.getNavigation(),
0,
rs_brdc,
dts_brdc,
var_brdc,
svh_brdc);
/* DEBUG
std::cout << "Sats positions with broadcasted ephemeris: \n";
for (int i = 0; i < obs.size(); i++)
{
if (rs_brdc[6*i] == 0 and rs_brdc[6*i+1] == 0 and rs_brdc[6*i+2] == 0)
std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << " ephemeris not available" << std::endl;
else
{
std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << std::endl
<< "\t\tpos: " << rs_brdc[6*i] << " " << rs_brdc[6*i+1] << " " << rs_brdc[6*i+2] << std::endl
<< "\t\tvel: " << rs_brdc[6*i+3] << " " << rs_brdc[6*i+4] << " " << rs_brdc[6*i+5] << std::endl
<< "\t\tvar: " << var_brdc[i] << std::endl
<< "\t\tclock bias: " << dts_brdc[2*i] << std::endl
<< "\t\tclock drift: " << dts_brdc[2*i+1] << std::endl
<< "\t\tsvh: " << svh_brdc[i] << std::endl;
}
}
//*/
// compute SBAS ephemeris
if (eph_opt != 0)
satposs(obs.getObservations().front().time,
obs.data(),
obs.size(),
&nav.getNavigation(),
eph_opt,
rs,
dts,
var,
svh);
eph_opt,
rs,
dts,
var,
svh);
// fill Satellites
Satellites sats;
//std::cout << "computeSatellites: filling satellites: \n";
for (int i = 0; i < obs.size(); i++)
{
bool brdc_eph = eph_opt == 0 or (rs[6*i] == 0 and rs[6*i+1] == 0 and rs[6*i+2] == 0);
auto sat_pair = sats.emplace(obs.getObservationByIdx(i).sat, // Key
Satellite({satsys(obs.getObservationByIdx(i).sat,NULL),
obs.getObservationByIdx(i).sat, // Constructor...
brdc_eph ?
(Eigen::Vector3d() << rs_brdc[6*i],rs_brdc[6*i+1],rs_brdc[6*i+2]).finished() :
(Eigen::Vector3d() << rs[6*i],rs[6*i+1],rs[6*i+2]).finished(),
brdc_eph ?
(Eigen::Vector3d() << rs_brdc[6*i+3], rs_brdc[6*i+4], rs_brdc[6*i+5]).finished() :
(Eigen::Vector3d() << rs[6*i+3], rs[6*i+4], rs[6*i+5]).finished() ,
brdc_eph ? var_brdc[i] : var[i],
brdc_eph ? dts_brdc[2*i] : dts[2*i],
brdc_eph ? dts_brdc[2*i+1] : dts[2*i+1],
brdc_eph ? svh_brdc[i] : svh[i],
brdc_eph ? 0 : 2}));
var[i],
dts[2*i],
dts[2*i+1],
svh[i]}));
assert(sat_pair.second && "satellite already computed");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment