mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-06-26 15:12:51 +00:00
Add Table of Contents to README.med file
Improve wording
This commit is contained in:
parent
b2fccc826e
commit
54f9a01082
327
README.md
327
README.md
@ -18,7 +18,7 @@ SPDX-FileCopyrightText: 2011-2021 Carles Fernandez-Prades <carles.fernandez@cttc
|
|||||||
|
|
||||||
This program is a software-defined receiver which is able to process (that is,
|
This program is a software-defined receiver which is able to process (that is,
|
||||||
to perform detection, synchronization, demodulation and decoding of the
|
to perform detection, synchronization, demodulation and decoding of the
|
||||||
navigation message, computation of observables and, finally, computation of
|
navigation message, computation of observables, and, finally, computation of
|
||||||
position fixes) the following Global Navigation Satellite System's signals:
|
position fixes) the following Global Navigation Satellite System's signals:
|
||||||
|
|
||||||
In the L1 band:
|
In the L1 band:
|
||||||
@ -44,7 +44,68 @@ raw sample file formats, generates processing outputs in standard formats,
|
|||||||
allows for the full inspection of the whole signal processing chain, and offers
|
allows for the full inspection of the whole signal processing chain, and offers
|
||||||
a framework for the development of new features. Please visit
|
a framework for the development of new features. Please visit
|
||||||
[https://gnss-sdr.org](https://gnss-sdr.org "GNSS-SDR website") for more
|
[https://gnss-sdr.org](https://gnss-sdr.org "GNSS-SDR website") for more
|
||||||
information about this open source software-defined GNSS receiver.
|
information about this open-source, software-defined GNSS receiver.
|
||||||
|
|
||||||
|
# Table of Contents
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>(click to expand)</b></summary>
|
||||||
|
<!-- MarkdownTOC -->
|
||||||
|
|
||||||
|
1. [How to build GNSS-SDR](#how-to-build-gnss-sdr)
|
||||||
|
1. [GNU/Linux](#gnulinux)
|
||||||
|
1. [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages)
|
||||||
|
1. [Debian / Ubuntu](#debian--ubuntu)
|
||||||
|
1. [Arch Linux](#arch-linux)
|
||||||
|
1. [CentOS](#centos)
|
||||||
|
1. [Fedora](#fedora)
|
||||||
|
1. [OpenSUSE](#opensuse)
|
||||||
|
1. [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs)
|
||||||
|
1. [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies)
|
||||||
|
1. [Armadillo](#install-armadillo-a-c-linear-algebra-library)
|
||||||
|
1. [gflags](#install-gflags-a-commandline-flags-processing-module-for-c)
|
||||||
|
1. [google-glog](#install-glog-a-library-that-implements-application-level-logging)
|
||||||
|
1. [googletest](#download-the-google-c-testing-framework-also-known-as-google-test)
|
||||||
|
1. [GnuTLS or OpenSSL](#install-the-gnutls-or-openssl-libraries)
|
||||||
|
1. [matio](#install-matio-matlab-mat-file-io-library)
|
||||||
|
1. [Protocol Buffers](#install-protocol-buffers-a-portable-mechanism-for-serialization-of-structured-data)
|
||||||
|
1. [pugixml](#install-pugixml-a-light-weight-c-xml-processing-library)
|
||||||
|
1. [Clone GNSS-SDR's Git repository](#clone-gnss-sdrs-git-repository)
|
||||||
|
1. [Build and install GNSS-SDR](#build-and-install-gnss-sdr)
|
||||||
|
1. [Build OsmoSDR support (optional)](#build-osmosdr-support-optional)
|
||||||
|
1. [Build IIO support (optional)](#build-fmcomms2-based-sdr-hardware-support-optional)
|
||||||
|
1. [Build OpenCL support (optional)](#build-opencl-support-optional)
|
||||||
|
1. [Build CUDA support (optional)](#build-cuda-support-optional)
|
||||||
|
1. [Build a portable binary](#build-a-portable-binary)
|
||||||
|
1. [macOS](#macos)
|
||||||
|
1. [Macports](#macports)
|
||||||
|
1. [Homebrew](#homebrew)
|
||||||
|
1. [Build GNSS-SDR](#build-gnss-sdr)
|
||||||
|
1. [Other builds](#other-builds)
|
||||||
|
1. [Updating GNSS-SDR](#updating-gnss-sdr)
|
||||||
|
1. [Getting started](#getting-started)
|
||||||
|
1. [Using GNSS-SDR](#using-gnss-sdr)
|
||||||
|
1. [Control Plane](#control-plane)
|
||||||
|
1. [Configuration](#configuration)
|
||||||
|
1. [GNSS block factory](#gnss-block-factory)
|
||||||
|
1. [Signal Processing Plane](#signal-processing-plane)
|
||||||
|
1. [Signal Source](#signal-source)
|
||||||
|
1. [Signal Conditioner](#signal-conditioner)
|
||||||
|
1. [Data type adapter](#data-type-adapter)
|
||||||
|
1. [Input filter](#input-filter)
|
||||||
|
1. [Resampler](#resampler)
|
||||||
|
1. [Channel](#channel)
|
||||||
|
1. [Acquisition](#acquisition)
|
||||||
|
1. [Tracking](#tracking)
|
||||||
|
1. [Decoding of the navigation message](#decoding-of-the-navigation-message)
|
||||||
|
1. [Observables](#observables)
|
||||||
|
1. [Computation of Position, Velocity and Time](#computation-of-position-velocity-and-time)
|
||||||
|
1. [About the software license](#about-the-software-license)
|
||||||
|
1. [Publications and Credits](#publications-and-credits)
|
||||||
|
1. [Ok, now what?](#ok-now-what)
|
||||||
|
|
||||||
|
<!-- /MarkdownTOC -->
|
||||||
|
</details>
|
||||||
|
|
||||||
# How to build GNSS-SDR
|
# How to build GNSS-SDR
|
||||||
|
|
||||||
@ -59,7 +120,7 @@ This section describes how to set up the compilation environment in GNU/Linux or
|
|||||||
- Supported microprocessor architectures:
|
- Supported microprocessor architectures:
|
||||||
- i386: Intel x86 instruction set (32-bit microprocessors).
|
- i386: Intel x86 instruction set (32-bit microprocessors).
|
||||||
- amd64: also known as x86-64, the 64-bit version of the x86 instruction set,
|
- amd64: also known as x86-64, the 64-bit version of the x86 instruction set,
|
||||||
originally created by AMD and implemented by AMD, Intel, VIA and others.
|
originally created by AMD and implemented by AMD, Intel, VIA, and others.
|
||||||
- armel: ARM embedded ABI, supported on ARM v4t and higher.
|
- armel: ARM embedded ABI, supported on ARM v4t and higher.
|
||||||
- armhf: ARM hard float, ARMv7 + VFP3-D16 floating-point hardware extension +
|
- armhf: ARM hard float, ARMv7 + VFP3-D16 floating-point hardware extension +
|
||||||
Thumb-2 instruction set and above.
|
Thumb-2 instruction set and above.
|
||||||
@ -68,7 +129,7 @@ This section describes how to set up the compilation environment in GNU/Linux or
|
|||||||
- mipsel: MIPS architecture (little-endian, such as Loongson 3).
|
- mipsel: MIPS architecture (little-endian, such as Loongson 3).
|
||||||
- mips64el: 64-bit version of MIPS architecture.
|
- mips64el: 64-bit version of MIPS architecture.
|
||||||
- powerpc: the RISC 32-bit microprocessor architecture developed by IBM,
|
- powerpc: the RISC 32-bit microprocessor architecture developed by IBM,
|
||||||
Motorola (now Freescale) and Apple.
|
Motorola (now Freescale), and Apple.
|
||||||
- ppc64: 64-bit big-endian PowerPC architecture.
|
- ppc64: 64-bit big-endian PowerPC architecture.
|
||||||
- ppc64el: 64-bit little-endian PowerPC architecture.
|
- ppc64el: 64-bit little-endian PowerPC architecture.
|
||||||
- s390x: IBM System z architecture for mainframe computers.
|
- s390x: IBM System z architecture for mainframe computers.
|
||||||
@ -82,7 +143,7 @@ the source code. It is in general not a good idea to mix both approaches.
|
|||||||
|
|
||||||
### Alternative 1: Install dependencies using software packages
|
### Alternative 1: Install dependencies using software packages
|
||||||
|
|
||||||
If you want to start building and running GNSS-SDR as quick and easy as
|
If you want to start building and running GNSS-SDR as quickly and easily as
|
||||||
possible, the best option is to install all the required dependencies as binary
|
possible, the best option is to install all the required dependencies as binary
|
||||||
packages.
|
packages.
|
||||||
|
|
||||||
@ -108,7 +169,7 @@ above).
|
|||||||
**Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source
|
**Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source
|
||||||
and install GNU Radio manually, as explained below, since GNSS-SDR requires
|
and install GNU Radio manually, as explained below, since GNSS-SDR requires
|
||||||
`gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the
|
`gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the
|
||||||
packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev` and `gr-osmosdr` (and
|
packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev`, and `gr-osmosdr` (and
|
||||||
remove them if they are already installed in your machine), and install those
|
remove them if they are already installed in your machine), and install those
|
||||||
dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04
|
dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04
|
||||||
came with 1.5.2 and the minimum required version is 1.5.3. Please do not install
|
came with 1.5.2 and the minimum required version is 1.5.3. Please do not install
|
||||||
@ -205,9 +266,9 @@ Once you have installed these packages, you can jump directly to
|
|||||||
### Alternative 2: Install dependencies using PyBOMBS
|
### Alternative 2: Install dependencies using PyBOMBS
|
||||||
|
|
||||||
This option is adequate if you are interested in development, in working with
|
This option is adequate if you are interested in development, in working with
|
||||||
the most recent versions of software dependencies, want more fine tuning on the
|
the most recent versions of software dependencies, want more fine-tuning on the
|
||||||
installed versions, or simply in building everything from the scratch just for
|
installed versions, or simply in building everything from the scratch just for
|
||||||
the fun of it. In such cases, we recommend to use
|
the fun of it. In such cases, we recommend using
|
||||||
[PyBOMBS](https://github.com/gnuradio/pybombs "Python Build Overlay Managed Bundle System")
|
[PyBOMBS](https://github.com/gnuradio/pybombs "Python Build Overlay Managed Bundle System")
|
||||||
(Python Build Overlay Managed Bundle System), GNU Radio's meta-package manager
|
(Python Build Overlay Managed Bundle System), GNU Radio's meta-package manager
|
||||||
tool that installs software from source, or whatever the local package manager
|
tool that installs software from source, or whatever the local package manager
|
||||||
@ -240,7 +301,7 @@ Add list of default recipes:
|
|||||||
$ pybombs recipes add-defaults
|
$ pybombs recipes add-defaults
|
||||||
```
|
```
|
||||||
|
|
||||||
Download, build and install GNU Radio, related drivers and some other extra
|
Download, build and install GNU Radio, related drivers, and some other extra
|
||||||
modules into the directory `/path/to/prefix` (replace this path by your
|
modules into the directory `/path/to/prefix` (replace this path by your
|
||||||
preferred one, for instance `$HOME/sdr`):
|
preferred one, for instance `$HOME/sdr`):
|
||||||
|
|
||||||
@ -267,17 +328,17 @@ $ pybombs install gnss-sdr
|
|||||||
```
|
```
|
||||||
|
|
||||||
By default, PyBOMBS installs the ‘next’ branch of GNSS-SDR development, which is
|
By default, PyBOMBS installs the ‘next’ branch of GNSS-SDR development, which is
|
||||||
the most recent version of the source code. This behaviour can be modified by
|
the most recent version of the source code. This behavior can be modified by
|
||||||
altering the corresponding recipe at
|
altering the corresponding recipe at
|
||||||
`$HOME/.pybombs/recipes/gr-recipes/gnss-sdr.lwr`
|
`$HOME/.pybombs/recipes/gr-recipes/gnss-sdr.lwr`
|
||||||
|
|
||||||
In case you do not want to use PyBOMBS and prefer to build and install GNSS-SDR
|
In case you do not want to use PyBOMBS and prefer to build and install GNSS-SDR
|
||||||
step by step (i.e., cloning the repository and doing the usual
|
step by step (i.e., cloning the repository and doing the usual
|
||||||
`cmake .. && make && make install` dance), Armadillo, GFlags, Glog and GnuTLS
|
`cmake .. && make && make install` dance), Armadillo, GFlags, Glog, GnuTLS, and
|
||||||
can be installed either by using PyBOMBS:
|
Matio can be installed either by using PyBOMBS:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ pybombs install armadillo gflags glog gnutls
|
$ pybombs install armadillo gflags glog gnutls matio
|
||||||
```
|
```
|
||||||
|
|
||||||
or manually as explained below, and then please follow instructions on how to
|
or manually as explained below, and then please follow instructions on how to
|
||||||
@ -304,8 +365,8 @@ The full stop separated from `cmake` by a space is important.
|
|||||||
[CMake](https://cmake.org/ "CMake's Homepage") will figure out what other
|
[CMake](https://cmake.org/ "CMake's Homepage") will figure out what other
|
||||||
libraries are currently installed and will modify Armadillo's configuration
|
libraries are currently installed and will modify Armadillo's configuration
|
||||||
correspondingly. CMake will also generate a run-time armadillo library, which is
|
correspondingly. CMake will also generate a run-time armadillo library, which is
|
||||||
a combined alias for all the relevant libraries present on your system (eg.
|
a combined alias for all the relevant libraries present on your system (e.g.,
|
||||||
BLAS, LAPACK and ATLAS).
|
BLAS, LAPACK, and ATLAS).
|
||||||
|
|
||||||
#### Install [Gflags](https://github.com/gflags/gflags "Gflags' Homepage"), a commandline flags processing module for C++:
|
#### Install [Gflags](https://github.com/gflags/gflags "Gflags' Homepage"), a commandline flags processing module for C++:
|
||||||
|
|
||||||
@ -341,7 +402,7 @@ $ unzip v1.10.x.zip
|
|||||||
|
|
||||||
Please **DO NOT build or install** Google Test. Every user needs to compile
|
Please **DO NOT build or install** Google Test. Every user needs to compile
|
||||||
tests using the same compiler flags used to compile the Google Test libraries;
|
tests using the same compiler flags used to compile the Google Test libraries;
|
||||||
otherwise he or she may run into undefined behaviors (_i.e._, the tests can
|
otherwise, he or she may run into undefined behaviors (_i.e._, the tests can
|
||||||
behave strangely and may even crash for no obvious reasons). The explanation is
|
behave strangely and may even crash for no obvious reasons). The explanation is
|
||||||
that C++ has the One-Definition Rule: if two C++ source files contain different
|
that C++ has the One-Definition Rule: if two C++ source files contain different
|
||||||
definitions of the same class/function/variable, and you link them together, you
|
definitions of the same class/function/variable, and you link them together, you
|
||||||
@ -381,6 +442,18 @@ $ sudo pacman -S openssl # For Arch Linux
|
|||||||
In case the GnuTLS library with openssl extensions package is not available in
|
In case the GnuTLS library with openssl extensions package is not available in
|
||||||
your GNU/Linux distribution, GNSS-SDR can also work well with OpenSSL.
|
your GNU/Linux distribution, GNSS-SDR can also work well with OpenSSL.
|
||||||
|
|
||||||
|
#### Install [Matio](https://github.com/tbeu/matio "Matio's Homepage"), MATLAB MAT file I/O library:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget https://github.com/tbeu/matio/releases/download/v1.5.21/matio-1.5.21.tar.gz
|
||||||
|
$ tar xvfz matio-1.5.21.tar.gz
|
||||||
|
$ cd matio-1.5.21
|
||||||
|
$ ./configure
|
||||||
|
$ make
|
||||||
|
$ sudo make install
|
||||||
|
$ sudo ldconfig
|
||||||
|
```
|
||||||
|
|
||||||
#### Install [Protocol Buffers](https://developers.google.com/protocol-buffers/ "Protocol Buffers' Homepage"), a portable mechanism for serialization of structured data:
|
#### Install [Protocol Buffers](https://developers.google.com/protocol-buffers/ "Protocol Buffers' Homepage"), a portable mechanism for serialization of structured data:
|
||||||
|
|
||||||
GNSS-SDR requires Protocol Buffers v3.0.0 or later. If the packages that come
|
GNSS-SDR requires Protocol Buffers v3.0.0 or later. If the packages that come
|
||||||
@ -405,6 +478,19 @@ $ sudo make install
|
|||||||
$ sudo ldconfig
|
$ sudo ldconfig
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Install [Pugixml](https://pugixml.org/ "Pugixml's Homepage"), a light-weight C++ XML processing library:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget https://github.com/zeux/pugixml/releases/download/v1.11.4/pugixml-1.11.4.tar.gz
|
||||||
|
$ tar xvfz pugixml-1.11.4.tar.gz
|
||||||
|
$ cd pugixml-1.11.4
|
||||||
|
$ mkdir build && cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ make
|
||||||
|
$ sudo make install
|
||||||
|
$ sudo ldconfig
|
||||||
|
```
|
||||||
|
|
||||||
### <a name="download-and-build-linux">Clone GNSS-SDR's Git repository</a>:
|
### <a name="download-and-build-linux">Clone GNSS-SDR's Git repository</a>:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -460,7 +546,7 @@ $ make
|
|||||||
|
|
||||||
By default, CMake will build the Release version, meaning that the compiler will
|
By default, CMake will build the Release version, meaning that the compiler will
|
||||||
generate a fast, optimized executable. This is the recommended build type when
|
generate a fast, optimized executable. This is the recommended build type when
|
||||||
using an RF front-end and you need to attain real time. If working with a file
|
using an RF front-end and you need to attain real-time. If working with a file
|
||||||
(and thus without real-time constraints), you may want to obtain more
|
(and thus without real-time constraints), you may want to obtain more
|
||||||
information about the internals of the receiver, as well as more fine-grained
|
information about the internals of the receiver, as well as more fine-grained
|
||||||
logging. This can be done by building the Debug version, by doing:
|
logging. This can be done by building the Debug version, by doing:
|
||||||
@ -480,9 +566,9 @@ $ sudo make install
|
|||||||
```
|
```
|
||||||
|
|
||||||
This will also make a copy of the conf/ folder into
|
This will also make a copy of the conf/ folder into
|
||||||
/usr/local/share/gnss-sdr/conf for your reference. We suggest to create a
|
/usr/local/share/gnss-sdr/conf for your reference. We suggest creating a working
|
||||||
working directory at your preferred location and store your own configuration
|
directory at your preferred location and store your own configuration and data
|
||||||
and data files there.
|
files there.
|
||||||
|
|
||||||
You could be interested in creating the documentation (requires:
|
You could be interested in creating the documentation (requires:
|
||||||
`sudo apt-get install doxygen-latex` in Ubuntu/Debian) by doing:
|
`sudo apt-get install doxygen-latex` in Ubuntu/Debian) by doing:
|
||||||
@ -505,10 +591,10 @@ will create a PDF manual at build/docs/GNSS-SDR_manual.pdf. Finally,
|
|||||||
$ make doc-clean
|
$ make doc-clean
|
||||||
```
|
```
|
||||||
|
|
||||||
will remove the content of previously-generated documentation.
|
will remove the content of previously generated documentation.
|
||||||
|
|
||||||
GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
|
GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
|
||||||
of Kernels (so called
|
of Kernels (so-called
|
||||||
[VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md))
|
[VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md))
|
||||||
and a profiler that will build a config file for the best SIMD architecture for
|
and a profiler that will build a config file for the best SIMD architecture for
|
||||||
your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`.
|
your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`.
|
||||||
@ -544,40 +630,6 @@ and then import the created project into Eclipse:
|
|||||||
After building the project, you will find the generated binaries at
|
After building the project, you will find the generated binaries at
|
||||||
`eclipse/install`.
|
`eclipse/install`.
|
||||||
|
|
||||||
###### Build GN3S V2 Custom firmware and driver (OPTIONAL):
|
|
||||||
|
|
||||||
Install the GNU Radio module:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ git clone https://github.com/gnss-sdr/gr-gn3s
|
|
||||||
$ cd gr-gn3s/build
|
|
||||||
$ cmake ..
|
|
||||||
$ make
|
|
||||||
$ sudo make install
|
|
||||||
$ sudo ldconfig
|
|
||||||
```
|
|
||||||
|
|
||||||
Then configure GNSS-SDR to build the `GN3S_Signal_Source` by:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ cd gnss-sdr/build
|
|
||||||
$ cmake -DENABLE_GN3S=ON ..
|
|
||||||
$ make
|
|
||||||
$ sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
In order to gain access to USB ports, gnss-sdr should be used as root. In
|
|
||||||
addition, the driver requires access to the GN3S firmware binary file. It should
|
|
||||||
be available in the same path where the application is called. GNSS-SDR comes
|
|
||||||
with a pre-compiled custom GN3S firmware available at
|
|
||||||
gr-gn3s/firmware/GN3S_v2/bin/gn3s_firmware.ihx. Please copy this file to the
|
|
||||||
application path.
|
|
||||||
|
|
||||||
(in order to disable the `GN3S_Signal_Source` compilation, you can pass
|
|
||||||
`-DENABLE_GN3S=OFF` to cmake and build GNSS-SDR again).
|
|
||||||
|
|
||||||
More info at https://github.com/gnss-sdr/gr-gn3s
|
|
||||||
|
|
||||||
###### Build OSMOSDR support (OPTIONAL):
|
###### Build OSMOSDR support (OPTIONAL):
|
||||||
|
|
||||||
Install the [OsmoSDR](https://osmocom.org/projects/sdr "OsmoSDR's Homepage")
|
Install the [OsmoSDR](https://osmocom.org/projects/sdr "OsmoSDR's Homepage")
|
||||||
@ -834,7 +886,7 @@ $ open ./docs/html/index.html
|
|||||||
```
|
```
|
||||||
|
|
||||||
GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
|
GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
|
||||||
of Kernels (so called
|
of Kernels (so-called
|
||||||
[VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md))
|
[VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md))
|
||||||
and a profiler that will build a config file for the best SIMD architecture for
|
and a profiler that will build a config file for the best SIMD architecture for
|
||||||
your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`.
|
your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`.
|
||||||
@ -951,24 +1003,24 @@ Git commands `fetch` and `merge`, as described in our
|
|||||||
The signal file can be easily recorded using the GNU Radio file sink in
|
The signal file can be easily recorded using the GNU Radio file sink in
|
||||||
`gr_complex<float>` mode. 2. You will need a GPS active antenna, a
|
`gr_complex<float>` mode. 2. You will need a GPS active antenna, a
|
||||||
[USRP](https://www.ettus.com/products/) and a suitable USRP daughter board to
|
[USRP](https://www.ettus.com/products/) and a suitable USRP daughter board to
|
||||||
receive GPS L1 C/A signals. GNSS-SDR require to have at least 2 MHz of
|
receive GPS L1 C/A signals. GNSS-SDR requires to have at least 2 MHz of
|
||||||
bandwidth in 1.57542 GHz. (remember to enable the DC bias with the daughter
|
bandwidth in 1.57542 GHz. (remember to enable the DC bias with the
|
||||||
board jumper). We use a [DBSRX2](https://www.ettus.com/all-products/DBSRX2/)
|
daughterboard jumper). We use a
|
||||||
to do the task, but you can try the newer Ettus' daughter boards as well. 3.
|
[DBSRX2](https://www.ettus.com/all-products/DBSRX2/) to do the task, but you
|
||||||
The easiest way to capture a signal file is to use the GNU Radio Companion
|
can try the newer Ettus' daughter boards as well. 3. The easiest way to
|
||||||
GUI. Only two blocks are needed: a USRP signal source connected to complex
|
capture a signal file is to use the GNU Radio Companion GUI. Only two blocks
|
||||||
float file sink. You need to tune the USRP central frequency and decimation
|
are needed: a USRP signal source connected to a complex float file sink. You
|
||||||
factor using USRP signal source properties box. We suggest using a decimation
|
need to tune the USRP central frequency and decimation factor using the USRP
|
||||||
factor of 20 if you use the USRP2. This will give you 100/20 = 5 MSPS which
|
signal source properties box. We suggest using a decimation factor of 20 if
|
||||||
will be enough to receive GPS L1 C/A signals. The front-end gain should also
|
you use the USRP2. This will give you 100/20 = 5 MSPS which will be enough to
|
||||||
be configured. In our test with the DBSRX2 we obtained good results with
|
receive GPS L1 C/A signals. The front-end gain should also be configured. In
|
||||||
`G=50`. 4. Capture at least 80 seconds of signal in open sky conditions.
|
our test with the DBSRX2 we obtained good results with `G=50`. 4. Capture at
|
||||||
During the process, be aware of USRP driver buffer underruns messages. If
|
least 80 seconds of signal in open sky conditions. During the process, be
|
||||||
your hard disk is not fast enough to write data at this speed you can capture
|
aware of USRP driver buffer underruns messages. If your hard disk is not fast
|
||||||
to a virtual RAM drive. 80 seconds of signal at 5 MSPS occupies less than 3
|
enough to write data at this speed you can capture it to a virtual RAM drive.
|
||||||
Gbytes using `gr_complex<float>`. 5. If you have no access to an RF
|
80 seconds of signal at 5 MSPS occupies less than 3 Gbytes using
|
||||||
front-end, you can download a sample raw data file (that contains GPS and
|
`gr_complex<float>`. If you have no access to an RF front-end, you can
|
||||||
Galileo signals) from
|
download a sample raw data file (that contains GPS and Galileo signals) from
|
||||||
[here](https://sourceforge.net/projects/gnss-sdr/files/data/).
|
[here](https://sourceforge.net/projects/gnss-sdr/files/data/).
|
||||||
3. You are ready to configure the receiver to use your captured file among other
|
3. You are ready to configure the receiver to use your captured file among other
|
||||||
parameters:
|
parameters:
|
||||||
@ -1035,29 +1087,29 @@ file.
|
|||||||
GNSS-SDR's main method initializes the logging library, processes the command
|
GNSS-SDR's main method initializes the logging library, processes the command
|
||||||
line flags, if any, provided by the user and instantiates a
|
line flags, if any, provided by the user and instantiates a
|
||||||
[ControlThread](./src/core/receiver/control_thread.h) object. Its constructor
|
[ControlThread](./src/core/receiver/control_thread.h) object. Its constructor
|
||||||
reads the configuration file, creates a control queue and creates a flowgraph
|
reads the configuration file, creates a control queue, and creates a flowgraph
|
||||||
according to the configuration. Then, the program's main method calls the run()
|
according to the configuration. Then, the program's main method calls the run()
|
||||||
method of the instantiated object, an action that connects the flowgraph and
|
method of the instantiated object, an action that connects the flowgraph and
|
||||||
starts running it. After that, and until a stop message is received, it reads
|
starts running it. After that, and until a stop message is received, it reads
|
||||||
control messages sent by the receiver's modules through a safe-thread queue and
|
control messages sent by the receiver's modules through a safe-thread queue and
|
||||||
processes them. Finally, when a stop message is received, the main method
|
processes them. Finally, when a stop message is received, the main method
|
||||||
executes the destructor of the ControlThread object, which deallocates memory,
|
executes the destructor of the ControlThread object, which deallocates memory,
|
||||||
does other cleanup and exits the program.
|
does other cleanup, and exits the program.
|
||||||
|
|
||||||
The [GNSSFlowgraph](./src/core/receiver/gnss_flowgraph.h) class is responsible
|
The [GNSSFlowgraph](./src/core/receiver/gnss_flowgraph.h) class is responsible
|
||||||
for preparing the graph of blocks according to the configuration, running it,
|
for preparing the graph of blocks according to the configuration, running it,
|
||||||
modifying it during run-time and stopping it. Blocks are identified by its role.
|
modifying it during run-time, and stopping it. Blocks are identified by their
|
||||||
This class knows which roles it has to instantiate and how to connect them. It
|
role. This class knows which roles it has to instantiate and how to connect
|
||||||
relies on the configuration to get the correct instances of the roles it needs
|
them. It relies on the configuration to get the correct instances of the roles
|
||||||
and then it applies the connections between GNU Radio blocks to make the graph
|
it needs and then it applies the connections between GNU Radio blocks to make
|
||||||
ready to be started. The complexity related to managing the blocks and the data
|
the graph ready to be started. The complexity related to managing the blocks and
|
||||||
stream is handled by GNU Radio's `gr::top_block` class. GNSSFlowgraph wraps the
|
the data stream is handled by GNU Radio's `gr::top_block` class. GNSSFlowgraph
|
||||||
`gr::top_block` instance so we can take advantage of the `gnss_block_factory`
|
wraps the `gr::top_block` instance so we can take advantage of the
|
||||||
(see below), the configuration system and the processing blocks. This class is
|
`gnss_block_factory` (see below), the configuration system, and the processing
|
||||||
also responsible for applying changes to the configuration of the flowgraph
|
blocks. This class is also responsible for applying changes to the configuration
|
||||||
during run-time, dynamically reconfiguring channels: it selects the strategy for
|
of the flowgraph during run-time, dynamically reconfiguring channels: it selects
|
||||||
selecting satellites. This can range from a sequential search over all the
|
the strategy for selecting satellites. This can range from a sequential search
|
||||||
satellites' ID to other more efficient approaches.
|
over all the satellites' ID to other more efficient approaches.
|
||||||
|
|
||||||
The Control Plane is in charge of creating a flowgraph according to the
|
The Control Plane is in charge of creating a flowgraph according to the
|
||||||
configuration and then managing the modules. Configuration allows users to
|
configuration and then managing the modules. Configuration allows users to
|
||||||
@ -1066,7 +1118,7 @@ define in an easy way their own custom receiver by specifying the flowgraph
|
|||||||
channel and each module, strategies for satellite selection, type of output
|
channel and each module, strategies for satellite selection, type of output
|
||||||
format, etc.). Since it is difficult to foresee what future module
|
format, etc.). Since it is difficult to foresee what future module
|
||||||
implementations will be needed in terms of configuration, we used a very simple
|
implementations will be needed in terms of configuration, we used a very simple
|
||||||
approach that can be extended without a major impact in the code. This can be
|
approach that can be extended without a major impact on the code. This can be
|
||||||
achieved by simply mapping the names of the variables in the modules with the
|
achieved by simply mapping the names of the variables in the modules with the
|
||||||
names of the parameters in the configuration.
|
names of the parameters in the configuration.
|
||||||
|
|
||||||
@ -1122,7 +1174,7 @@ encapsulates the complexity of blocks' instantiation. With that approach, adding
|
|||||||
a new block that requires new parameters will be as simple as adding the block
|
a new block that requires new parameters will be as simple as adding the block
|
||||||
class and modifying the factory to be able to instantiate it. This loose
|
class and modifying the factory to be able to instantiate it. This loose
|
||||||
coupling between the blocks' implementations and the syntax of the configuration
|
coupling between the blocks' implementations and the syntax of the configuration
|
||||||
enables extending the application capacities in a high degree. It also allows
|
enables extending the application capacities to a high degree. It also allows
|
||||||
producing fully customized receivers, for instance a testbed for acquisition
|
producing fully customized receivers, for instance a testbed for acquisition
|
||||||
algorithms, and to place observers at any point of the receiver chain.
|
algorithms, and to place observers at any point of the receiver chain.
|
||||||
|
|
||||||
@ -1154,16 +1206,16 @@ are required to be implemented by a derived class.
|
|||||||
Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver
|
Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver
|
||||||
blocks depicted in the figure above. This hierarchy provides the definition of
|
blocks depicted in the figure above. This hierarchy provides the definition of
|
||||||
different algorithms and different implementations, which will be instantiated
|
different algorithms and different implementations, which will be instantiated
|
||||||
according to the configuration. This strategy allows multiple implementations
|
according to the configuration. This strategy allows multiple implementations to
|
||||||
sharing a common interface, achieving the objective of decoupling interfaces
|
share a common interface, achieving the objective of decoupling interfaces from
|
||||||
from implementations: it defines a family of algorithms, encapsulates each one,
|
implementations: it defines a family of algorithms, encapsulates each one, and
|
||||||
and makes them interchangeable. Hence, we let the algorithm vary independently
|
makes them interchangeable. Hence, we let the algorithm vary independently of
|
||||||
of the program that uses it.
|
the program that uses it.
|
||||||
|
|
||||||
Internally, GNSS-SDR makes use of the complex data types defined by
|
Internally, GNSS-SDR makes use of the complex data types defined by
|
||||||
[VOLK](https://www.libvolk.org/ "Vector-Optimized Library of Kernels home").
|
[VOLK](https://www.libvolk.org/ "Vector-Optimized Library of Kernels home").
|
||||||
They are fundamental for handling sample streams in which samples are complex
|
They are fundamental for handling sample streams in which samples are complex
|
||||||
numbers with real and imaginary components of 8, 16 or 32 bits, common formats
|
numbers with real and imaginary components of 8, 16, or 32 bits, common formats
|
||||||
delivered by GNSS (and generic SDR) radio frequency front-ends. The following
|
delivered by GNSS (and generic SDR) radio frequency front-ends. The following
|
||||||
list shows the data type names that GNSS-SDR exposes through the configuration
|
list shows the data type names that GNSS-SDR exposes through the configuration
|
||||||
file:
|
file:
|
||||||
@ -1192,7 +1244,7 @@ parameters can be found at the
|
|||||||
|
|
||||||
### Signal Source
|
### Signal Source
|
||||||
|
|
||||||
The input of a software receiver are the raw bits that come out from the
|
The inputs of a software receiver are the raw bits that come out from the
|
||||||
front-end's analog-to-digital converter (ADC). Those bits can be read from a
|
front-end's analog-to-digital converter (ADC). Those bits can be read from a
|
||||||
file stored in the hard disk or directly in real-time from a hardware device
|
file stored in the hard disk or directly in real-time from a hardware device
|
||||||
through USB or Ethernet buses.
|
through USB or Ethernet buses.
|
||||||
@ -1204,8 +1256,8 @@ USB or Ethernet buses. Since real-time processing requires a highly optimized
|
|||||||
implementation of the whole receiver, this module also allows reading samples
|
implementation of the whole receiver, this module also allows reading samples
|
||||||
from a file stored in a hard disk, and thus processing without time constraints.
|
from a file stored in a hard disk, and thus processing without time constraints.
|
||||||
Relevant parameters of those samples are the intermediate frequency (or baseband
|
Relevant parameters of those samples are the intermediate frequency (or baseband
|
||||||
I&Q components), the sampling rate and number of bits per sample, that must be
|
I&Q components), the sampling rate, and the number of bits per sample, which
|
||||||
specified by the user in the configuration file.
|
must be specified by the user in the configuration file.
|
||||||
|
|
||||||
This module also performs bit-depth adaptation, since most of the existing RF
|
This module also performs bit-depth adaptation, since most of the existing RF
|
||||||
front-ends provide samples quantized with 2 or 3 bits, while operations inside
|
front-ends provide samples quantized with 2 or 3 bits, while operations inside
|
||||||
@ -1213,7 +1265,7 @@ the processor are performed on 32- or 64-bit words, depending on its
|
|||||||
architecture. Although there are implementations of the most intensive
|
architecture. Although there are implementations of the most intensive
|
||||||
computational processes (mainly correlation) that take advantage of specific
|
computational processes (mainly correlation) that take advantage of specific
|
||||||
data types and architectures for the sake of efficiency, the approach is
|
data types and architectures for the sake of efficiency, the approach is
|
||||||
processor-specific and hardly portable. We suggest to keep signal samples in
|
processor-specific and hardly portable. We suggest keeping signal samples in
|
||||||
standard data types and letting the compiler select the best library version
|
standard data types and letting the compiler select the best library version
|
||||||
(implemented using SIMD or any other processor-specific technology) of the
|
(implemented using SIMD or any other processor-specific technology) of the
|
||||||
required routines for a given processor.
|
required routines for a given processor.
|
||||||
@ -1246,14 +1298,14 @@ complex stream via Data Type Adapter block (see below).
|
|||||||
|
|
||||||
**_Example: Two-bit packed file source_**
|
**_Example: Two-bit packed file source_**
|
||||||
|
|
||||||
Sometimes, samples are stored in files with a format which is not in the list of
|
Sometimes, samples are stored in files with a format that is not in the list of
|
||||||
_native_ types supported by the `File_Signal_Source` implementation (i.e, it is
|
_native_ types supported by the `File_Signal_Source` implementation (i.e, it is
|
||||||
not among `byte`, `ibyte`, `short`, `ishort`, `float` or `gr_complex`). This is
|
not among `byte`, `ibyte`, `short`, `ishort`, `float`, or `gr_complex`). This is
|
||||||
the case of 2-bit samples, which is a common format delivered by GNSS RF
|
the case of 2-bit samples, which is a common format delivered by GNSS RF
|
||||||
front-ends. The `Two_Bit_Packed_File_Signal_Source` implementation allows
|
front-ends. The `Two_Bit_Packed_File_Signal_Source` implementation allows
|
||||||
reading two-bit length samples from a file. The data is assumed to be packed as
|
reading two-bit length samples from a file. The data is assumed to be packed as
|
||||||
bytes `item_type=byte` or shorts `item_type=short` so that there are 4 two bit
|
bytes `item_type=byte` or shorts `item_type=short` so that there are 4 two-bit
|
||||||
samples in each byte. The two bit values are assumed to have the following
|
samples in each byte. The two-bit values are assumed to have the following
|
||||||
interpretation:
|
interpretation:
|
||||||
|
|
||||||
| **b_1** | **b_0** | **Value** |
|
| **b_1** | **b_0** | **Value** |
|
||||||
@ -1263,14 +1315,14 @@ interpretation:
|
|||||||
| 1 | 0 | -3 |
|
| 1 | 0 | -3 |
|
||||||
| 1 | 1 | -1 |
|
| 1 | 1 | -1 |
|
||||||
|
|
||||||
Within a byte the samples may be packed in big endian `big_endian_bytes=true`
|
Within a byte the samples may be packed in big-endian `big_endian_bytes=true`
|
||||||
(if the most significant byte value is stored at the memory location with the
|
(if the most significant byte value is stored at the memory location with the
|
||||||
lowest address, the next byte value in significance is stored at the following
|
lowest address, the next byte value in significance is stored at the following
|
||||||
memory location, and so on) or little endian `big_endian_bytes=false` (if the
|
memory location, and so on) or little-endian `big_endian_bytes=false` (if the
|
||||||
least significant byte value is at the lowest address, and the other bytes
|
least significant byte value is at the lowest address, and the other bytes
|
||||||
follow in increasing order of significance). If the order is big endian then the
|
follow in increasing order of significance). If the order is big-endian then the
|
||||||
most significant two bits will form the first sample output, otherwise the least
|
most significant two bits will form the first sample output. Otherwise, the
|
||||||
significant two bits will be used.
|
least significant two bits will be used.
|
||||||
|
|
||||||
Additionally, the samples may be either real `sample_type=real`, or complex. If
|
Additionally, the samples may be either real `sample_type=real`, or complex. If
|
||||||
the sample type is complex, then the samples are either stored in the order:
|
the sample type is complex, then the samples are either stored in the order:
|
||||||
@ -1278,8 +1330,8 @@ real, imag, real, imag, ... `sample_type=iq` or in the order: imag, real, imag,
|
|||||||
real, ... `sample_type=qi`.
|
real, ... `sample_type=qi`.
|
||||||
|
|
||||||
Finally, if the data is stored as shorts `item_type=short`, then it may be
|
Finally, if the data is stored as shorts `item_type=short`, then it may be
|
||||||
stored in either big endian `big_endian_items=true` or little endian
|
stored in either big-endian `big_endian_items=true` or little-endian
|
||||||
`big_endian_items=false`. If the shorts are big endian then the 2nd byte in each
|
`big_endian_items=false`. If the shorts are big-endian then the 2nd byte in each
|
||||||
short is output first.
|
short is output first.
|
||||||
|
|
||||||
The output data type is either `float` or `gr_complex` depending on whether or
|
The output data type is either `float` or `gr_complex` depending on whether or
|
||||||
@ -1443,8 +1495,9 @@ More documentation and examples are available at the
|
|||||||
The signal conditioner is in charge of resampling the signal and delivering a
|
The signal conditioner is in charge of resampling the signal and delivering a
|
||||||
reference sample rate to the downstream processing blocks, acting as a facade
|
reference sample rate to the downstream processing blocks, acting as a facade
|
||||||
between the signal source and the synchronization channels, providing a
|
between the signal source and the synchronization channels, providing a
|
||||||
simplified interface to the input signal. In case of multiband front-ends, this
|
simplified interface to the input signal. In the case of multiband front-ends,
|
||||||
module would be in charge of providing a separated data stream for each band.
|
this module would be in charge of providing a separated data stream for each
|
||||||
|
band.
|
||||||
|
|
||||||
If your signal source is providing baseband signal samples of type `gr_complex`
|
If your signal source is providing baseband signal samples of type `gr_complex`
|
||||||
at 4 Msps, you can bypass the Signal Conditioner block by:
|
at 4 Msps, you can bypass the Signal Conditioner block by:
|
||||||
@ -1455,7 +1508,7 @@ SignalConditioner.implementation=Pass_Through
|
|||||||
|
|
||||||
If you need to adapt some aspect of your signal, you can enable the Signal
|
If you need to adapt some aspect of your signal, you can enable the Signal
|
||||||
Conditioner and configure three internal blocks: a data type adapter, an input
|
Conditioner and configure three internal blocks: a data type adapter, an input
|
||||||
signal and a resampler.
|
signal, and a resampler.
|
||||||
|
|
||||||
```
|
```
|
||||||
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
|
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
|
||||||
@ -1485,7 +1538,7 @@ More documentation at the
|
|||||||
This block filters the input data. It can be combined with frequency translation
|
This block filters the input data. It can be combined with frequency translation
|
||||||
for IF signals. The computation of the filter taps is based on parameters of GNU
|
for IF signals. The computation of the filter taps is based on parameters of GNU
|
||||||
Radio's function
|
Radio's function
|
||||||
[pm_remez](https://www.gnuradio.org/doc/doxygen/pm__remez_8h.html), that
|
[pm_remez](https://www.gnuradio.org/doc/doxygen/pm__remez_8h.html), which
|
||||||
calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse
|
calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse
|
||||||
response given a set of band edges, the desired response on those bands, and the
|
response given a set of band edges, the desired response on those bands, and the
|
||||||
weight given to the error in those bands.
|
weight given to the error in those bands.
|
||||||
@ -1566,7 +1619,7 @@ More documentation at the
|
|||||||
|
|
||||||
A channel encapsulates all signal processing devoted to a single satellite.
|
A channel encapsulates all signal processing devoted to a single satellite.
|
||||||
Thus, it is a large composite object which encapsulates the acquisition,
|
Thus, it is a large composite object which encapsulates the acquisition,
|
||||||
tracking and navigation data decoding modules. As a composite object, it can be
|
tracking, and navigation data decoding modules. As a composite object, it can be
|
||||||
treated as a single entity, meaning that it can be easily replicated. Since the
|
treated as a single entity, meaning that it can be easily replicated. Since the
|
||||||
number of channels is selectable by the user in the configuration file, this
|
number of channels is selectable by the user in the configuration file, this
|
||||||
approach helps to improve the scalability and maintainability of the receiver.
|
approach helps to improve the scalability and maintainability of the receiver.
|
||||||
@ -1624,10 +1677,10 @@ ephemeris and almanac data is still valid, or this information is provided by
|
|||||||
other means), and an acquisition process can finish deciding that the satellite
|
other means), and an acquisition process can finish deciding that the satellite
|
||||||
is not present, that longer integration is needed in order to confirm the
|
is not present, that longer integration is needed in order to confirm the
|
||||||
presence of the satellite, or declaring the satellite present. In the latter
|
presence of the satellite, or declaring the satellite present. In the latter
|
||||||
case, acquisition process should stop and trigger the tracking module with
|
case, the acquisition process should stop and trigger the tracking module with
|
||||||
coarse estimations of the synchronization parameters. The mathematical
|
coarse estimations of the synchronization parameters. The mathematical
|
||||||
abstraction used to design this logic is known as finite state machine (FSM),
|
abstraction used to design this logic is known as a finite state machine (FSM),
|
||||||
that is a behavior model composed of a finite number of states, transitions
|
which is a behavior model composed of a finite number of states, transitions
|
||||||
between those states, and actions.
|
between those states, and actions.
|
||||||
|
|
||||||
The abstract class [ChannelInterface](./src/core/interfaces/channel_interface.h)
|
The abstract class [ChannelInterface](./src/core/interfaces/channel_interface.h)
|
||||||
@ -1643,11 +1696,11 @@ More documentation at the
|
|||||||
The first task of a GNSS receiver is to detect the presence or absence of
|
The first task of a GNSS receiver is to detect the presence or absence of
|
||||||
in-view satellites. This is done by the acquisition system process, which also
|
in-view satellites. This is done by the acquisition system process, which also
|
||||||
provides a coarse estimation of two signal parameters: the frequency shift with
|
provides a coarse estimation of two signal parameters: the frequency shift with
|
||||||
respect to the nominal frequency, and a delay term which allows the receiver to
|
respect to the nominal frequency, and a delay term that allows the receiver to
|
||||||
create a local code aligned with the incoming code.
|
create a local code aligned with the incoming code.
|
||||||
[AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the
|
[AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the
|
||||||
common interface for all the acquisition algorithms and their corresponding
|
common interface for all the acquisition algorithms and their corresponding
|
||||||
implementations. Algorithms' interface, that may vary depending on the use of
|
implementations. Algorithms' interface, which may vary depending on the use of
|
||||||
information external to the receiver, such as in Assisted GNSS, is defined in
|
information external to the receiver, such as in Assisted GNSS, is defined in
|
||||||
classes referred to as _adapters_. These adapters wrap the GNU Radio blocks
|
classes referred to as _adapters_. These adapters wrap the GNU Radio blocks
|
||||||
interface into a compatible interface expected by AcquisitionInterface. This
|
interface into a compatible interface expected by AcquisitionInterface. This
|
||||||
@ -1789,13 +1842,13 @@ More documentation at the
|
|||||||
|
|
||||||
Most of GNSS signal links are modulated by a navigation message containing the
|
Most of GNSS signal links are modulated by a navigation message containing the
|
||||||
time the message was transmitted, orbital parameters of satellites (also known
|
time the message was transmitted, orbital parameters of satellites (also known
|
||||||
as ephemeris) and an almanac (information about the general system health, rough
|
as ephemeris), and an almanac (information about the general system health,
|
||||||
orbits of all satellites in the network as well as data related to error
|
rough orbits of all satellites in the network as well as data related to error
|
||||||
correction). Navigation data bits are structured in words, pages, subframes,
|
correction). Navigation data bits are structured in words, pages, subframes,
|
||||||
frames and superframes. Sometimes, bits corresponding to a single parameter are
|
frames, and superframes. Sometimes, bits corresponding to a single parameter are
|
||||||
spread over different words, and values extracted from different frames are
|
spread over different words, and values extracted from different frames are
|
||||||
required for proper decoding. Some words are for synchronization purposes,
|
required for proper decoding. Some words are for synchronization purposes,
|
||||||
others for error control and others contain actual information. There are also
|
others for error control, and others contain actual information. There are also
|
||||||
error control mechanisms, from parity checks to forward error correction (FEC)
|
error control mechanisms, from parity checks to forward error correction (FEC)
|
||||||
encoding and interleaving, depending on the system. All this decoding complexity
|
encoding and interleaving, depending on the system. All this decoding complexity
|
||||||
is managed by a finite state machine.
|
is managed by a finite state machine.
|
||||||
@ -1837,7 +1890,7 @@ More documentation at the
|
|||||||
GNSS systems provide different kinds of observations. The most commonly used are
|
GNSS systems provide different kinds of observations. The most commonly used are
|
||||||
the code observations, also called pseudoranges. The _pseudo_ comes from the
|
the code observations, also called pseudoranges. The _pseudo_ comes from the
|
||||||
fact that on the receiver side the clock error is unknown and thus the
|
fact that on the receiver side the clock error is unknown and thus the
|
||||||
measurement is not a pure range observation. High accuracy applications also use
|
measurement is not a pure range observation. High-accuracy applications also use
|
||||||
the carrier phase observations, which are based on measuring the difference
|
the carrier phase observations, which are based on measuring the difference
|
||||||
between the carrier phase transmitted by the GNSS satellites and the phase of
|
between the carrier phase transmitted by the GNSS satellites and the phase of
|
||||||
the carrier generated in the receiver. Both observables are computed from the
|
the carrier generated in the receiver. Both observables are computed from the
|
||||||
@ -1865,14 +1918,14 @@ More documentation at the
|
|||||||
Although data processing for obtaining high-accuracy PVT solutions is out of the
|
Although data processing for obtaining high-accuracy PVT solutions is out of the
|
||||||
scope of GNSS-SDR, we provide a module that can compute position fixes (stored
|
scope of GNSS-SDR, we provide a module that can compute position fixes (stored
|
||||||
in GIS-friendly formats such as [GeoJSON](https://tools.ietf.org/html/rfc7946),
|
in GIS-friendly formats such as [GeoJSON](https://tools.ietf.org/html/rfc7946),
|
||||||
[GPX](https://www.topografix.com/gpx.asp) and
|
[GPX](https://www.topografix.com/gpx.asp), and
|
||||||
[KML](https://www.opengeospatial.org/standards/kml), or transmitted via serial
|
[KML](https://www.opengeospatial.org/standards/kml), or transmitted via serial
|
||||||
port as [NMEA 0183](https://en.wikipedia.org/wiki/NMEA_0183) messages), and
|
port as [NMEA 0183](https://en.wikipedia.org/wiki/NMEA_0183) messages), and
|
||||||
leaves room for more sophisticated positioning methods by storing observables
|
leaves room for more sophisticated positioning methods by storing observables
|
||||||
and navigation data in [RINEX](https://en.wikipedia.org/wiki/RINEX) files (v2.11
|
and navigation data in [RINEX](https://en.wikipedia.org/wiki/RINEX) files (v2.11
|
||||||
or v3.02), and generating
|
or v3.02), and generating
|
||||||
[RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services")
|
[RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services")
|
||||||
3.2 messages that can be disseminated through the Internet in real time.
|
3.2 messages that can be disseminated through the Internet in real-time.
|
||||||
|
|
||||||
The common interface is [PvtInterface](./src/core/interfaces/pvt_interface.h).
|
The common interface is [PvtInterface](./src/core/interfaces/pvt_interface.h).
|
||||||
|
|
||||||
@ -1926,7 +1979,7 @@ PVT.rtcm_MT1077_rate_ms=1000
|
|||||||
[Marble](https://marble.kde.org), [osgEarth](http://osgearth.org), or used
|
[Marble](https://marble.kde.org), [osgEarth](http://osgearth.org), or used
|
||||||
with the [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/).
|
with the [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/).
|
||||||
|
|
||||||
- **GPX** (the GPS Exchange Format) is a light-weight XML data format for the
|
- **GPX** (the GPS Exchange Format) is a lightweight XML data format for the
|
||||||
interchange of GPS data (waypoints, routes, and tracks) between applications
|
interchange of GPS data (waypoints, routes, and tracks) between applications
|
||||||
and Web services on the Internet. The format is open and can be used without
|
and Web services on the Internet. The format is open and can be used without
|
||||||
the need to pay license fees, and it is supported by a
|
the need to pay license fees, and it is supported by a
|
||||||
@ -1934,7 +1987,7 @@ PVT.rtcm_MT1077_rate_ms=1000
|
|||||||
|
|
||||||
- **NMEA 0183** is a combined electrical and data specification for
|
- **NMEA 0183** is a combined electrical and data specification for
|
||||||
communication between marine electronics such as echo sounder, sonars,
|
communication between marine electronics such as echo sounder, sonars,
|
||||||
anemometer, gyrocompass, autopilot, GPS receivers and many other types of
|
anemometer, gyrocompass, autopilot, GPS receivers, and many other types of
|
||||||
instruments. It has been defined by, and is controlled by, the U.S.
|
instruments. It has been defined by, and is controlled by, the U.S.
|
||||||
[National Marine Electronics Association](https://www.nmea.org/). The NMEA
|
[National Marine Electronics Association](https://www.nmea.org/). The NMEA
|
||||||
0183 standard uses a simple ASCII, serial communications protocol that defines
|
0183 standard uses a simple ASCII, serial communications protocol that defines
|
||||||
@ -1959,7 +2012,7 @@ PVT.rtcm_MT1077_rate_ms=1000
|
|||||||
(usually with other data unknown to the original receiver, such as better
|
(usually with other data unknown to the original receiver, such as better
|
||||||
models of the atmospheric conditions at time of measurement). RINEX files can
|
models of the atmospheric conditions at time of measurement). RINEX files can
|
||||||
be used by software packages such as [GPSTk](https://github.com/SGL-UT/GPSTk),
|
be used by software packages such as [GPSTk](https://github.com/SGL-UT/GPSTk),
|
||||||
[RTKLIB](http://www.rtklib.com/) and [gLAB](https://gage.upc.edu/gLAB/).
|
[RTKLIB](http://www.rtklib.com/), and [gLAB](https://gage.upc.edu/gLAB/).
|
||||||
GNSS-SDR by default generates RINEX version
|
GNSS-SDR by default generates RINEX version
|
||||||
[3.02](ftp://igs.org/pub/data/format/rinex302.pdf). If
|
[3.02](ftp://igs.org/pub/data/format/rinex302.pdf). If
|
||||||
[2.11](ftp://igs.org/pub/data/format/rinex211.txt) is needed, it can be
|
[2.11](ftp://igs.org/pub/data/format/rinex211.txt) is needed, it can be
|
||||||
@ -1974,7 +2027,7 @@ PVT.rinex_version=2
|
|||||||
correction applications. Developed by the Radio Technical Commission for
|
correction applications. Developed by the Radio Technical Commission for
|
||||||
Maritime Services
|
Maritime Services
|
||||||
([RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services")),
|
([RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services")),
|
||||||
they have become an industry standard for communication of correction
|
they have become an industry standard for the communication of correction
|
||||||
information. GNSS-SDR implements RTCM version 3.2, defined in the document
|
information. GNSS-SDR implements RTCM version 3.2, defined in the document
|
||||||
_RTCM 10403.2, Differential GNSS (Global Navigation Satellite Systems)
|
_RTCM 10403.2, Differential GNSS (Global Navigation Satellite Systems)
|
||||||
Services - Version 3_ (February 1, 2013), which can be
|
Services - Version 3_ (February 1, 2013), which can be
|
||||||
@ -1993,7 +2046,7 @@ PVT.rinex_version=2
|
|||||||
operate on port 2101 (which is the recommended port for RTCM services
|
operate on port 2101 (which is the recommended port for RTCM services
|
||||||
according to the Internet Assigned Numbers Authority,
|
according to the Internet Assigned Numbers Authority,
|
||||||
[IANA](https://www.iana.org/assignments/service-names-port-numbers/ "Service Name and Transport Protocol Port Number Registry")),
|
[IANA](https://www.iana.org/assignments/service-names-port-numbers/ "Service Name and Transport Protocol Port Number Registry")),
|
||||||
and will identify the Reference Station with ID=1234. This behaviour can be
|
and will identify the Reference Station with ID=1234. This behavior can be
|
||||||
changed in the configuration file:
|
changed in the configuration file:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -2004,9 +2057,9 @@ PVT.rtcm_station_id=1111
|
|||||||
|
|
||||||
**Important note:**
|
**Important note:**
|
||||||
|
|
||||||
In order to get well-formatted GeoJSON, KML and RINEX files, always terminate
|
In order to get well-formatted GeoJSON, KML, and RINEX files, always terminate
|
||||||
`gnss-sdr` execution by pressing key `q` and then key `ENTER`. Those files will
|
`gnss-sdr` execution by pressing key `q` and then key `ENTER`. Those files will
|
||||||
be automatically deleted if no position fix have been obtained during the
|
be automatically deleted if no position fix has been obtained during the
|
||||||
execution of the software receiver.
|
execution of the software receiver.
|
||||||
|
|
||||||
More documentation at the
|
More documentation at the
|
||||||
@ -2084,7 +2137,7 @@ processed.
|
|||||||
Another interesting option is working in real-time with an RF front-end. We
|
Another interesting option is working in real-time with an RF front-end. We
|
||||||
provide drivers for UHD-compatible hardware such as the
|
provide drivers for UHD-compatible hardware such as the
|
||||||
[USRP family](https://www.ettus.com/product), for OsmoSDR and other front-ends
|
[USRP family](https://www.ettus.com/product), for OsmoSDR and other front-ends
|
||||||
(HackRF, bladeRF, LimeSDR), for the GN3S v2 USB dongle and for some DVB-T USB
|
(HackRF, bladeRF, LimeSDR), for the GN3S v2 USB dongle, and for some DVB-T USB
|
||||||
dongles. Start with a low number of channels and then increase it in order to
|
dongles. Start with a low number of channels and then increase it in order to
|
||||||
test how many channels your processor can handle in real-time.
|
test how many channels your processor can handle in real-time.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user