Get PVT fixes from a standalone Galileo E5b receiver

This commit is contained in:
Carles Fernandez 2022-02-10 15:15:35 +01:00
parent 7a0259fb1d
commit df1820e98e
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
4 changed files with 25 additions and 4 deletions

View File

@ -36,8 +36,9 @@ In the L2 band:
In the L5 band:
- 🛰 GPS L5 (centered at 1176.45 MHz) :white_check_mark:
- 🛰 Galileo E5a (centered at 1176.45 MHz) :white_check_mark:
- 🛰 Galileo E5b (centered at 1207.140 MHz) :white_check_mark:
- 🛰 Galileo E5a (centered at 1176.450 MHz) :white_check_mark:
- 🛰 GPS L5 (centered at 1176.450 MHz) :white_check_mark:
GNSS-SDR provides interfaces for a wide range of radio frequency front-ends and
raw sample file formats, generates processing outputs in standard formats,
@ -1662,6 +1663,7 @@ identifiers:
| Glonass L2 C/A | 2G |
| GPS L5 | L5 |
| Galileo E5a | 5X |
| Galileo E5b | 7X |
Example: Eight GPS L1 C/A channels.

View File

@ -16,6 +16,8 @@ All notable changes to GNSS-SDR will be documented in this file.
### Improvements in Availability:
- Added the Galileo E5b receiving chain. The software is now able to compute PVT
solutions as a standalone Galileo E5b receiver.
- Improved Time-To-First-Fix when using GPS L1 C/A signals, fixing a bug that
was making the receiver to drop the satellite if the PLL got locked at 180
degrees, and making some optimizations on bit transition detection.

View File

@ -406,6 +406,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
bool gps_dual_band = false;
bool band1 = false;
bool band2 = false;
bool gal_e5_is_e5b = false;
for (gnss_observables_iter = gnss_observables_map.cbegin();
gnss_observables_iter != gnss_observables_map.cend();
++gnss_observables_iter)
@ -468,7 +469,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
}
// Galileo E5
if (sig_ == "5X")
if ((sig_ == "5X") || (sig_ == "7X"))
{
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
@ -508,6 +509,10 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
{
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
}
if (sig_ == "7X")
{
gal_e5_is_e5b = true;
}
}
break;
}
@ -874,7 +879,15 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
{
for (int j = 0; j < NFREQ; j++)
{
nav_data.lam[i][j] = satwavelen(i + 1, j, &nav_data);
if (j == 2 && gal_e5_is_e5b)
{
// frq = 4 corresponds to E5B in that function
nav_data.lam[i][j] = satwavelen(i + 1, 4, &nav_data);
}
else
{
nav_data.lam[i][j] = satwavelen(i + 1, j, &nav_data);
}
}
}

View File

@ -71,6 +71,10 @@ obsd_t insert_obs_to_rtklib(obsd_t& rtklib_obs, const Gnss_Synchro& gnss_synchro
break;
case 'E':
rtklib_obs.sat = gnss_synchro.PRN + NSATGPS + NSATGLO;
if (sig_ == "7X")
{
rtklib_obs.code[band] = static_cast<unsigned char>(CODE_L7X);
}
break;
case 'R':
rtklib_obs.sat = gnss_synchro.PRN + NSATGPS;