Skip to content

Commit

Permalink
Get PVT fixes from a standalone Galileo E5b receiver
Browse files Browse the repository at this point in the history
  • Loading branch information
carlesfernandez committed Feb 10, 2022
1 parent 7a0259f commit df1820e
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 4 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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.

Expand Down
2 changes: 2 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
17 changes: 15 additions & 2 deletions src/algorithms/PVT/libs/rtklib_solver.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/algorithms/libs/rtklib/rtklib_conversions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit df1820e

Please sign in to comment.