1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-07-04 10:53:17 +00:00

Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next

This commit is contained in:
Carles Fernandez 2018-11-27 07:58:01 +01:00
commit bffcc74290
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
7 changed files with 126 additions and 35 deletions

View File

@ -16,6 +16,7 @@ Next release will have several improvements in different dimensions, addition of
- Redesign of the time counter for enhanced continuity.
- Improved flow graph in multisystem configurations: the receiver does not get stalled anymore if no signal is found from the first system.
- Improved acquisition and tracking sensitivity.
- Added mechanisms for Assisted GNSS, thus shortening the Time-To-First-Fix. Provision of data via XML files or via SUPL v1.0. Documented at https://gnss-sdr.org/docs/sp-blocks/global-parameters/
- Other minor bug fixes.
@ -27,6 +28,7 @@ Next release will have several improvements in different dimensions, addition of
- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h
- Some AVX2 implementations added to the volk_gnsssdr library.
- Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator.
- Output printers can be shut down, with some savings in memory and storage requirements.
- A number of code optimizations here and there.
@ -34,7 +36,8 @@ Next release will have several improvements in different dimensions, addition of
- A number of new parameters have been exposed to the configuration system.
- Possibility to choose Pilot or Data component for tracking of GPS L5 and Galileo E5a signals.
- Enabled extended coherent integration times.
- Enabled extended coherent integration times for signal tracking.
- Configurable coherent and/or non-coherent signal acquisition.
- Some configuration parameters can now be overridden by commandline flags for easier use in scripts.
@ -48,11 +51,15 @@ Next release will have several improvements in different dimensions, addition of
- Added five more signal sources: "Fmcomms2_Signal_Source" (requires gr-iio), "Plutosdr_Signal Source" (requires gr-iio), "Spir_GSS6450_File_Signal_Source", "Labsat_Signal_Source" and "Custom_UDP_Signal_Source" (requires libpcap). Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/
- Improved support for BladeRF, HackRF and RTL-SDR front-ends.
- Added tools for the interaction with front-ends based on the AD9361 chipset.
- Intermediate results are now saved in .mat binary format, readable from Matlab/Octave and from Python via h5py.
- Intermediate results are now saved in MAT-file format (.mat), readable from Matlab/Octave and from Python via h5py.
- Added the GPX output format.
- Fixed a bug in the format of NMEA sentences when latitude or longitude minutes were >10.
- Improvements in the generation of KML files.
- Improvements in the NMEA output. The receiver can produce GPGGA, GPRMC, GPGSA, GPGSV, GAGSA and GAGSV sentences.
- Improvements in the RTCM server stability.
- Improvements in the correctness of generated RINEX files.
- The receiver can read and make use of Galileo almanac XML files published by the European GNSS Service Centre at https://www.gsc-europa.eu/system-status/almanac-data
- Own-defined XML schemas for navigation data published at https://github.com/gnss-sdr/gnss-sdr/tree/next/docs/xml-schemas
- Added program rinex2assist to convert RINEX navigation files into XML files usable for Assisted GNSS. Only available building from source. See https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist
### Improvements in Maintainability:
@ -64,6 +71,8 @@ Next release will have several improvements in different dimensions, addition of
- Improvement in C++ usage: The override special identifier is now used when overriding a virtual function. This helps the compiler to check for type changes in the base class, making the detection of errors easier.
- Improvement in C++ usage: A number of unused includes have been removed. Order of includes set to: local (in-source) headers, then library headers, then system headers. This helps to detect missing includes.
- Improvement in C++ usage: Enhanced const correctness. Misuses of those variables are detected by the compiler.
- Applied some style rules to CMake scripts.
- Minimal versions of dependencies identified and detected.
### Improvements in Portability:
@ -76,15 +85,16 @@ Next release will have several improvements in different dimensions, addition of
- The Ninja build system can be used in replacement of make.
- The volk_gnsssdr library can be built using Python 2.7 or Python 3.6.
- The volk_gnsssdr library is now ready for AArch64 NEON instructions.
- Ready for GNU Radio 3.8 C++ API (as per current next branch of GNU Radio upstream repository).
- Ready for GNU Radio 3.8 C++ API (as per current master branch of GNU Radio upstream repository).
- Improved detection of required and optional dependencies in many GNU/Linux distributions and processor architectures.
- Improvement in C++ usage: The <ctime> library has been replaced by the more modern and portable <chrono>.
- Improvement in C++ usage: The <ctime> library has been replaced by the more modern and portable <chrono> (except for the interaction with RTKLIB).
- Improvement in C++ usage: The <stdio.h> library has been replaced by the more modern and portable <fstream> for file handling.
- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., <cctype> instead of <ctype.h>, <cmath> instead of <math.h>).
- Fixes required by Debian packaging.
- Fixes required by Macports packaging.
- A downside in portability: BLAS and LAPACK libraries are now required even in ARM devices.
- A downside in portability: the matio library >= 1.5.3 is a new required dependency. If not found, it is downloaded and built automatically at building time, but this requires libtool, automake and hdf5 already installed in the system.
- A downside in portability: the PugiXML library is a new required dependency. If not found, it is downloaded and built automatically at building time.
### Improvements in Reliability:
@ -93,6 +103,7 @@ Next release will have several improvements in different dimensions, addition of
- Improved flow graph stabiliy.
- Introduction of high-integrity C++ practices into the source code and included in the coding style guide. See https://gnss-sdr.org/coding-style/
- Fixed a number of defects detected by Coverity Scan.
- Improvement of QA code and addition of a number of new tests. Documented at https://gnss-sdr.org/docs/tutorials/testing-software-receiver-2/
- Improvement in C++ usage: rand() function replaced by <random> library.
- Improvement in C++ usage: strlen and strncpy have been replaced by safer C++ counterparts.
- Improvement in C++ usage: Some destructors have been fixed, avoiding segmentation faults when exiting the program.
@ -122,9 +133,10 @@ Next release will have several improvements in different dimensions, addition of
- All Observables block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
- All PVT block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a warning is provided to the user.
- Updated and improved documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a warning is provided to the user. The old name will be removed in future releases.
- Updated and improved online documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/
- Improved documentation of required dependency packages in several GNU/Linux distributions.
- Dump and output files can now be stored anywhere.
- Parameter names with the same role have been harmonized within different block implementations.
- Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree.
- Added colors to the commandline user interface.

View File

@ -12,14 +12,14 @@ GPS L1 C/A
- [iono_model.xsd](./iono_model.xsd) - GPS NAV message ionospheric model parameters.
- [utc_model.xsd](./utc_model.xsd) - GPS NAV message UTC model parameters.
- [gps_almanac_map.xsd](./gps_almanac_map.xsd) - GPS NAV message almanac.
GPS L2C and L5
--------------
- [cnav_ephemeris_map.xsd](./cnav_ephemeris_map.xsd) - GPS CNAV message ephemeris parameters.
Galileo
-------
@ -31,4 +31,5 @@ Galileo
-------
Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more information about the usage of XML files in GNSS-SDR.
You could find useful the utility program [rinex2assist](https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist) for the generation of compatible XML files from recent, publicly available RINEX navigation data files.

View File

@ -1,4 +1,4 @@
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="boost_serialization">
<xs:complexType>
<xs:sequence>
@ -16,6 +16,7 @@
<xs:sequence>
<xs:element type="xs:byte" name="i_satellite_PRN"/>
<xs:element type="xs:float" name="M0_1"/>
<xs:element type="xs:float" name="delta_n_3"/>
<xs:element type="xs:float" name="e_1"/>
<xs:element type="xs:float" name="A_1"/>
<xs:element type="xs:float" name="OMEGA_0_2"/>
@ -34,6 +35,22 @@
<xs:element type="xs:float" name="af0_4"/>
<xs:element type="xs:float" name="af1_4"/>
<xs:element type="xs:float" name="af2_4"/>
<xs:element type="xs:float" name="WN_5"/>
<xs:element type="xs:float" name="TOW_5"/>
<xs:element type="xs:float" name="Galileo_satClkDrift"/>
<xs:element type="xs:float" name="Galileo_dtr"/>
<xs:element type="xs:byte" name="flag_all_ephemeris"/>
<xs:element type="xs:byte" name="IOD_ephemeris"/>
<xs:element type="xs:byte" name="IOD_nav_1"/>
<xs:element type="xs:float" name="SISA_3"/>
<xs:element type="xs:byte" name="E5a_HS"/>
<xs:element type="xs:float" name="E5b_HS_5"/>
<xs:element type="xs:float" name="E1B_HS_5"/>
<xs:element type="xs:byte" name="E5a_DVS"/>
<xs:element type="xs:float" name="E5b_DVS_5"/>
<xs:element type="xs:float" name="E1B_DVS_5"/>
<xs:element type="xs:float" name="BGD_E1E5a_5"/>
<xs:element type="xs:float" name="BGD_E1E5b_5"/>
</xs:sequence>
<xs:attribute type="xs:byte" name="class_id" use="optional"/>
<xs:attribute type="xs:byte" name="tracking_level" use="optional"/>

View File

@ -123,10 +123,7 @@ public:
{
};
archive& BOOST_SERIALIZATION_NVP(flag_all_ephemeris);
archive& BOOST_SERIALIZATION_NVP(IOD_ephemeris);
archive& BOOST_SERIALIZATION_NVP(IOD_nav_1);
archive& BOOST_SERIALIZATION_NVP(SV_ID_PRN_4);
archive& BOOST_SERIALIZATION_NVP(i_satellite_PRN);
archive& BOOST_SERIALIZATION_NVP(M0_1);
archive& BOOST_SERIALIZATION_NVP(delta_n_3);
@ -155,6 +152,10 @@ public:
archive& BOOST_SERIALIZATION_NVP(Galileo_satClkDrift);
archive& BOOST_SERIALIZATION_NVP(Galileo_dtr);
archive& BOOST_SERIALIZATION_NVP(flag_all_ephemeris);
archive& BOOST_SERIALIZATION_NVP(IOD_ephemeris);
archive& BOOST_SERIALIZATION_NVP(IOD_nav_1);
archive& BOOST_SERIALIZATION_NVP(SISA_3);
archive& BOOST_SERIALIZATION_NVP(E5a_HS);
archive& BOOST_SERIALIZATION_NVP(E5b_HS_5);
@ -165,8 +166,6 @@ public:
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5a_5);
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5b_5);
archive& BOOST_SERIALIZATION_NVP(i_satellite_PRN);
}
};

View File

@ -28,6 +28,18 @@ set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${GPSTK_INCLUDE_DIR}/gpstk)
find_package(Boost COMPONENTS iostreams serialization QUIET)
find_program(UNCOMPRESS_EXECUTABLE uncompress
PATHS /bin
/usr/bin
/usr/sbin
)
if(NOT UNCOMPRESS_EXECUTABLE-NOTFOUND)
add_definitions(-DUNCOMPRESS_EXECUTABLE="${UNCOMPRESS_EXECUTABLE}")
else()
add_definitions(-DUNCOMPRESS_EXECUTABLE="")
endif()
if(Boost_FOUND)
include_directories(
${CMAKE_SOURCE_DIR}/src/core/system_parameters

View File

@ -1,19 +1,48 @@
Rinex2assist
------------
This program reads data from RINEX navigation files and generates XML files that can be read by GNSS-SDR as Assisted GNSS data. The usage is as follows:
This program reads data from RINEX navigation files and generates XML files that can be read by GNSS-SDR as Assisted GNSS data.
### Building
This program is built along with GNSS-SDR if the options `ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON` when calling CMake:
```
$ rinex2assist /path/to/RINEX_nav_file
$ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON ..
$ make
$ sudo make intall
```
The last step is optional. Without it, you will get the executable at `../install/rinex2assist`.
The building requires two extra dependencies: the Boost Iostreams library and the program `uncompress`:
* The Boost Iostreams library can be installed through a package:
- In Debian / Ubuntu: `sudo apt-get install libboost-iostreams-dev`
- In Fedora / CentOS: `sudo yum install boost-iostreams`
- In OpenSUSE: `sudo zypper install libboost_iostreams-devel`
- In Arch Linux: included in `boost-libs` package.
- In MacOS: included in Macports / Homebrew `boost` package.
* The program `uncompress` is available by default in most UNIX and GNU/Linux systems.
- In Fedora / CentOS: `sudo yum install ncompress`
- In OpenSUSE: `sudo zypper install ncompress`
### Usage
The usage is as follows:
```
$ rinex2assist /path/to/RINEX_nav_file
```
The argument is mandatory (the name of the RINEX navigation file). The name `gps_ephemeris.xml` is given to the output if GPS NAV data is fould. If the RINEX file contains Galileo data, the corresponding `gal_ephemeris.xml` file will be generated. The program is also able to extract parameters of the UTC and the Ionospheric models from the RINEX header, if available. They will be called `gps_utc_model.xml`, `gps_iono.xml`, `gal_utc_model.xml` and `gal_iono.xml`.
There are some servers available for downloading RINEX navigation files. For instance:
There are some servers available for downloading recent RINEX navigation files. For instance:
* NASA: [ftp://cddis.gsfc.nasa.gov/pub/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
* ESA: [ftp://gssc.esa.int/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
* UNAVCO: [ftp://data-out.unavco.org/pub/hourly/rinex/](ftp://data-out.unavco.org/pub/hourly/rinex/)
Just make sure to pick up a [station near you](http://www.igs.org/network).
Just make sure to pick up a recent file from a [station near you](http://www.igs.org/network).
The program accepts either versions 2.xx or 3.xx for the RINEX navigation data file, as well as compressed files (ending in `.gz` or `.Z`).

View File

@ -76,6 +76,7 @@ int main(int argc, char** argv)
// Uncompress if RINEX file is gzipped
std::string rinex_filename(argv[1]);
std::string input_filename = rinex_filename;
std::size_t found = rinex_filename.find_last_of(".");
if (found != std::string::npos)
{
@ -99,9 +100,14 @@ int main(int argc, char** argv)
}
in.push(file);
std::string rinex_filename_unzipped = rinex_filename.substr(0, found);
std::ofstream output_file(rinex_filename_unzipped.c_str(), std::ios_base::out | std::ios_base::binary);
std::ofstream output_file(rinex_filename_unzipped.c_str(), std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
if (file.fail())
{
std::cerr << "Could not create file " << rinex_filename_unzipped << std::endl;
return 1;
}
boost::iostreams::copy(in, output_file);
rinex_filename = rinex_filename_unzipped;
input_filename = rinex_filename_unzipped;
}
if ((rinex_filename.substr(found + 1, found + 2).compare("Z") == 0))
{
@ -112,14 +118,28 @@ int main(int argc, char** argv)
return 1;
}
file.close();
// option k is not always available, so we save a copy of the original file
std::string argum = std::string("/bin/cp " + rinex_filename + " " + rinex_filename + ".aux");
std::system(argum.c_str());
std::string argum2 = std::string("/usr/bin/uncompress -f " + rinex_filename);
std::system(argum2.c_str());
std::string argum3 = std::string("/bin/mv " + rinex_filename + +".aux" + " " + rinex_filename);
std::system(argum3.c_str());
rinex_filename = rinex_filename.substr(0, found);
std::string uncompress_executable(UNCOMPRESS_EXECUTABLE);
if (!uncompress_executable.empty())
{
// option k is not always available, so we save a copy of the original file
std::string argum = std::string("/bin/cp " + rinex_filename + " " + rinex_filename + ".aux");
int s1 = std::system(argum.c_str());
std::string argum2 = std::string(uncompress_executable + " -f " + rinex_filename);
int s2 = std::system(argum2.c_str());
std::string argum3 = std::string("/bin/mv " + rinex_filename + +".aux" + " " + rinex_filename);
int s3 = std::system(argum3.c_str());
input_filename = rinex_filename.substr(0, found);
if ((s1 != 0) or (s2 != 0) or (s3 != 0))
{
std::cerr << "Failure uncompressing file." << std::endl;
return 1;
}
}
else
{
std::cerr << "uncompress program not found." << std::endl;
return 1;
}
}
}
@ -136,7 +156,7 @@ int main(int argc, char** argv)
try
{
// Read nav file
gpstk::Rinex3NavStream rnffs(rinex_filename.c_str()); // Open navigation data file
gpstk::Rinex3NavStream rnffs(input_filename.c_str()); // Open navigation data file
gpstk::Rinex3NavData rne;
gpstk::Rinex3NavHeader hdr;
@ -271,6 +291,7 @@ int main(int argc, char** argv)
eph.af0_4 = rne.af0;
eph.af1_4 = rne.af1;
eph.af2_4 = rne.af2;
eph.WN_5 = rne.weeknum;
eph_gal_map[j] = eph;
j++;
}