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: In the L5 band:
- 🛰 GPS L5 (centered at 1176.45 MHz) :white_check_mark: - 🛰 Galileo E5b (centered at 1207.140 MHz) :white_check_mark:
- 🛰 Galileo E5a (centered at 1176.45 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 GNSS-SDR provides interfaces for a wide range of radio frequency front-ends and
raw sample file formats, generates processing outputs in standard formats, raw sample file formats, generates processing outputs in standard formats,
@ -1662,6 +1663,7 @@ identifiers:
| Glonass L2 C/A | 2G | | Glonass L2 C/A | 2G |
| GPS L5 | L5 | | GPS L5 | L5 |
| Galileo E5a | 5X | | Galileo E5a | 5X |
| Galileo E5b | 7X |
Example: Eight GPS L1 C/A channels. 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: ### 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 - 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 was making the receiver to drop the satellite if the PLL got locked at 180
degrees, and making some optimizations on bit transition detection. 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 gps_dual_band = false;
bool band1 = false; bool band1 = false;
bool band2 = false; bool band2 = false;
bool gal_e5_is_e5b = false;
for (gnss_observables_iter = gnss_observables_map.cbegin(); for (gnss_observables_iter = gnss_observables_map.cbegin();
gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter != gnss_observables_map.cend();
++gnss_observables_iter) ++gnss_observables_iter)
@ -468,7 +469,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
} }
// Galileo E5 // 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 // 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); 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; DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
} }
if (sig_ == "7X")
{
gal_e5_is_e5b = true;
}
} }
break; 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++) 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; break;
case 'E': case 'E':
rtklib_obs.sat = gnss_synchro.PRN + NSATGPS + NSATGLO; rtklib_obs.sat = gnss_synchro.PRN + NSATGPS + NSATGLO;
if (sig_ == "7X")
{
rtklib_obs.code[band] = static_cast<unsigned char>(CODE_L7X);
}
break; break;
case 'R': case 'R':
rtklib_obs.sat = gnss_synchro.PRN + NSATGPS; rtklib_obs.sat = gnss_synchro.PRN + NSATGPS;