From c1cdc5ea803d6b8b462627d0ee3483c5afbb5a0e Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Wed, 12 Apr 2023 07:44:33 +0200 Subject: [PATCH 01/24] Update gems --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8c7e323e..789866c1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,17 +6,17 @@ GEM i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.3) + addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.23.8) + commonmarker (0.23.9) concurrent-ruby (1.2.2) - dnsruby (1.61.9) - simpleidn (~> 0.1) + dnsruby (1.70.0) + simpleidn (~> 0.2.1) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -213,7 +213,7 @@ GEM jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) minitest (5.18.0) - nokogiri (1.14.2) + nokogiri (1.14.3) mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.25.1) From 8c0a8ffd852a9072fa0bb4927b6914f9ebe9000b Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 18 Apr 2023 10:34:20 +0200 Subject: [PATCH 02/24] Introducing Geniux 23.04 --- _posts/2023-04-17-introducing-geniux-v2304.md | 796 ++++++++++++++++++ 1 file changed, 796 insertions(+) create mode 100644 _posts/2023-04-17-introducing-geniux-v2304.md diff --git a/_posts/2023-04-17-introducing-geniux-v2304.md b/_posts/2023-04-17-introducing-geniux-v2304.md new file mode 100644 index 00000000..20c98e20 --- /dev/null +++ b/_posts/2023-04-17-introducing-geniux-v2304.md @@ -0,0 +1,796 @@ +--- +title: "Introducing Geniux v23.04" +excerpt: "Geniux v23.04: a GNU/Linux custom distribution for running GNSS-SDR on embedded devices." +header: + teaser: /assets/images/geniux-teaser.png +tags: + - news + - embedded +author_profile: false +sidebar: + nav: "news" +toc: true +toc_sticky: true +last_modified_at: 2023-04-17T11:54:02+02:00 +--- + +![Geniux logo]({{ "/assets/images/geniux-logo.png" | relative_url }}){:width="500px"}{: .align-center .invert-colors} + +Geniux (**G**NSS-SDR for **E**mbedded G**N**U/L**i**n**ux**) is a customized GNU/Linux distribution +for developing and running GNSS-SDR on embedded devices, based on the [Yocto +Project](https://www.yoctoproject.org/). This Operating System includes a +specific set of popular tools, libraries, and device drivers tailored for +supporting an extended range of Software Defined Radio applications, helping to +bring them to production-ready deployments with an approach [widely adopted +throughout the embedded/IoT +industry](https://www.yoctoproject.org/is-yocto-project-for-you/). + +The Geniux distribution comes in different version names, following [those of +the Yocto Project](https://wiki.yoctoproject.org/wiki/Releases), being Rocko the +oldest supported version. Each version name is tagged with a timestamp, so +Geniux versions can evolve in time, but tagged versions can be reproduced at any +time in the future. In addition, each version and each time tag can be built for +a particular board or machine. This is expressed in the figure below: + +![Geniux evolution]({{ "/assets/images/geniux-evolution.png" | relative_url }}){:width="800px"}{: .align-center .invert-colors} +_Geniux keeps the pace of the software ecosystem evolution, but older versions +are still reproducible. Virtualization technology allows reproducing images +regardless of the software stack running at the host system building it_. +{: style="text-align: center;"} + +Those names (Rocko, Sumo, Thud, Warrior, Zeus, etc.) represent major Geniux +versions. Then, each named version can have time tags (in the figure above, +`20.09` and `20.10`). All versions have a `latest` tag pointing to the latest +commit. Each named version with a time tag can be built for different +boards or machines (in the figure above, `zedboard-zynq7` and `rasperrypi3`). + + +## Version naming + +The Geniux distribution follows the versioning format +`VERSION_NAME-MANIFEST_DATE.CONF_NUMBER`, where: + +* VERSION_NAME follows those of the [Yocto Project + releases](https://wiki.yoctoproject.org/wiki/Releases). + - `rocko`, `sumo`, `thud`, `warrior`, `zeus`, `dunfell`, `gatesgarth`, + `hardknott`, `honister`, `kirkstone`, `langdale`. +* MANIFEST_DATE follows the tag names at + [https://github.com/carlesfernandez/oe-gnss-sdr-manifest](https://github.com/carlesfernandez/oe-gnss-sdr-manifest). + The time tag `latest` always exists for each version name, and points to the + latest release. + - `20.09`, `21.02`, ..., `21.08`, `22.02`, `22.06`, `23.04`, `latest`. +* CONF_NUMBER: minor version number. + - `0`, `1`, ... + +Example of version name: `rocko-23.04.0`. + + +## Generating Geniux images for a specific version, time tag, and machine + +The generation of images and SDKs for a given Geniux version, time tag, and +machine in a virtualized environment is automated by the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repository. With +[Docker](https://www.docker.com/) already installed and running on your system, +clone the Git repository and go to its base path: + +```console +$ git clone https://github.com/carlesfernandez/yocto-geniux +$ cd yocto-geniux +``` + +Now you are ready to build Geniux images for the release you want with a single +command, by using the `geniux-builder.sh` script. Taking a look at its help +message: + +```console +$ ./geniux-builder.sh --help +``` + +You should get: +``` +This script builds and stores Geniux images. + +Usage: +./geniux-builder.sh [version] [manifest] [machine] (--image-only / -i) + +Options: + version Geniux version (from oldest to most recent): + rocko, sumo, thud, warrior, zeus, dunfell, + gatesgarth, hardknott, honister, kirkstone, langdale. Default: dunfell + Check available branches at https://github.com/carlesfernandez/meta-gnss-sdr + manifest Geniux version manifest: 21.02, 21.08, 22.02, 22.06, 23.04, latest. Default: latest + Dated manifests available at https://github.com/carlesfernandez/oe-gnss-sdr-manifest/tags + machine Specify your (list of) MACHINE here. By default, zedboard-zynq7 and raspberrypi3 are built. + If more than one, surround it with quotes, e.g.: "raspberrypi4-64 intel-corei7-64" + --image-only / -i (optional) Build the image but do not execute the container. + +Environment variables that affect behavior: + GENIUX_MIRROR_PATH Base path to local mirror. Only used if set. + e.g.: 'export GENIUX_MIRROR_PATH=/home/carlesfernandez/mirror' + The mirror is expected to be at '$GENIUX_MIRROR_PATH/sources/$version' + GENIUX_STORE_PATH Path in which products will be stored. Only used if set. + e.g.: 'export GENIUX_STORE_PATH=/home/carlesfernandez/geniux-releases' + GENIUX_STORE_REQUIRES_SUDO If set, the script will ask for super-user privileges to write in the store. + You will be asked only once at the beginning. The password will not be revealed. + e.g.: 'export GENIUX_STORE_REQUIRES_SUDO=1' +``` +{: class="no-copy"} + +You can find specific examples of how to use this script below. For more +advanced usage modes (*e.g.*, an interactive mode that allows you to make +changes and experiment), check the [instructions +here](https://github.com/carlesfernandez/yocto-geniux/blob/main/README.md). + +The building process takes several hours and requires a powerful host system +with at least 120 GB of free space in the hard disk and 32 GB of RAM. When +finished, you will get your products in the `output/` folder (or wherever the +`GENIUX_STORE_PATH` environment variable points to). Among others: + +* gnss-sdr-demo-image: an image containing gnss-sdr, ready to go. It defines the + "root" and "geniux" users, both with default password "geniux". +* gnss-sdr-dev-image: a development image with everything required for gnss-sdr, + **but without gnss-sdr**. You can cross-compile the binary and copy it to the + target filesystem. No password. +* Starting from Zeus v21.08, `wic.xz` and `wic.bmap` image files ready to de + deployed on an SD card. +* gnss-sdr-dev-docker: a Docker development image archive file for the target + architecture. +* A script that installs a software development kit (SDK) for + [cross-compiling]({{ "docs/tutorials/cross-compiling/" | relative_url }}). + +Please note that if the automated building process fails for some reason +(failing network connection, misconfiguration, disappeared source repositories, +shortage of free hard disk space, RAM memory or CPU resources, etc.) before it +finishes, the running container will be deleted and you will lose everything, so +you will need to start over again. For a safer procedure, you can use the +[interactive +mode](https://github.com/carlesfernandez/yocto-geniux/blob/main/README.md#interactive-method) +of the Docker image, which allows you to make changes, retry after a failure, +build other images, and save your products to `/home/geniux/yocto/output/` when +done, so _outside_ the Docker container. The container itself will be deleted at +exit. +{: .notice--info} + + +## Main features + +### Geniux Rocko 23.04.0 + +* Operating System based on the Yocto Project version 2.4.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.15.1, CMake v3.8.2, GCC v7.3.0 + (+ libgfortran), make v4.2.1, ninja v1.7.2, Python v2.7.14 and v3.5.3. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.7.13. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.6, Lapack v3.7.0, + VOLK v1.4.0. + - C++ supporting libraries: Boost v1.64.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.4.1, Pugixml + v1.11.4. + - Graphical representation: Gnuplot v5.0.5. + - Additional Python modules (_e.g._, Scipy, Matplotlib) can be installed + with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.10.2.0 (+ gr-uhd), + gr-osmosdr v0.1.4.1 (+ rtl-sdr, airspy, hackrf, and rfspace), gr-iio v0.3, + libiio v2019_R1, libad9361-iio v2019_R1, iio-oscilloscope v2019_R1. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/rocko/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=rocko), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=rocko), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/rocko/meta/conf/machine) + layers. +* The + [`meta-gnss-sdr`](https://github.com/carlesfernandez/meta-gnss-sdr/tree/rocko) + layer is compatible with Xilinx PetaLinux Tools v2018.3. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh rocko 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh rocko 23.04 zcu102-zynqmp +``` + +```console +$ ./geniux-builder.sh rocko 23.04 raspberrypi3 +``` + +```console +$ ./geniux-builder.sh rocko 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh rocko 23.04 qemuarm +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Sumo 23.04.0 + +* Operating System based on the Yocto Project version 2.5.3. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.15.1, CMake v3.10.3, GCC v7.3.0 + (+ libgfortran), make v4.2.1, ninja v1.8.2, Python v2.7.15 and v3.5.5. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.7.13.5. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.7, Lapack v3.7.0, + VOLK v1.5.0. + - C++ supporting libraries: Boost v1.66.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.0, Matio v1.5.23, Protocol Buffers v3.5.1, Pugixml + v1.11.4. + - Graphical representation: Gnuplot v5.2.2. + - Additional Python modules (_e.g._, Scipy, Matplotlib) can be installed + with `pip3`. + * Software drivers and tools for RF front-ends: gr-osmosdr v0.1.4.1 (+ rtl-sdr + and hackrf), gr-iio v0.3, libiio v2019_R1, libad9361-iio v2019_R1, + iio-oscilloscope v2019_R1. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/sumo/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=sumo), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=sumo), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/sumo/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh sumo 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh sumo 23.04 raspberrypi3 +``` + +```console +$ ./geniux-builder.sh sumo 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh sumo 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Thud 23.04.0 + +* Operating System based on the Yocto Project version 2.6.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.1, CMake v3.12.2, GCC v8.2.0 + (+ libgfortran), make v4.2.1, ninja v1.8.2, Python v2.7.16 and v3.5.6. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.7.14.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.8, Lapack v3.7.0, + VOLK v2.2.1. + - C++ supporting libraries: Boost v1.64.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.0, Matio v1.5.23, Protocol Buffers v3.6.1, Pugixml + v1.11.4. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.2. + - Additional Python modules (_e.g._, Scipy, Matplotlib) can be installed + with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.13.0.1 (+ gr-uhd), + libiio v2019_R2, libad9361-iio v2019_R2, iio-oscilloscope v2019_R2. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/rel-v2019.2/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=thud), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=thud), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/thud/meta/conf/machine) + layers. + * The `meta-xilinx` layer points to the `rel-v2019.2` branch. +* The + [`meta-gnss-sdr`](https://github.com/carlesfernandez/meta-gnss-sdr/tree/thud) + layer is compatible with Xilinx PetaLinux Tools v2019.2. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh thud 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh thud 23.04 zcu102-zynqmp +``` + +```console +$ ./geniux-builder.sh thud 23.04 raspberrypi3 +``` + + +```console +$ ./geniux-builder.sh thud 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh thud 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Warrior 23.04.0 + +* Operating System based on the Yocto Project version 2.7.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.1, CMake v3.14.1, GCC v8.3.0 + (+ libgfortran), make v4.2.1, ninja v1.9.0, Python v2.7.18 and v3.7.7. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.8.2.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.7.0, + VOLK v2.3.0. + - C++ supporting libraries: Boost v1.69.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.0, Matio v1.5.23, Protocol Buffers v3.6.1, Pugixml + v1.11.4. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.2. + - Additional Python modules (_e.g._, Scipy, Matplotlib) can be installed + with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.15.LTS (+ gr-uhd), + gr-osmosdr v0.2.3 (+ rtl-sdr and hackrf), gr-iio v0.3, libiio v0.23, + libad9361-iio v0.2, iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/warrior/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=warrior), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=warrior), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/warrior/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh warrior 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh warrior 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh warrior 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh warrior 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Zeus 23.04.0 + +* Operating System based on the Yocto Project version 3.0.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.1, CMake v3.15.3, GCC v9.2.0 + (+ libgfortran), make v4.2.1, ninja v1.9.0, Python v2.7.18 and v3.7.8. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.8.2.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.7.0, + VOLK v2.3.0. + - C++ supporting libraries: Boost v1.71.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.0, Matio v1.5.23, Protocol Buffers v3.9.2, Pugixml + v1.11.4. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.2, + Matplotlib v3.1.1. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.15.LTS (+ gr-uhd), + gr-osmosdr v0.2.3 (+ rtl-sdr and hackrf), gr-iio v0.3, libiio v0.23, + libad9361-iio v0.2, iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/rel-v2020.3/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=zeus), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=zeus), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/zeus/meta/conf/machine) + layers. + * The `meta-xilinx` layer points to `rel-v2020.3` branch. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh zeus 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh zeus 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh zeus 23.04 intel-skylake-64 +``` + +```console +$ ./geniux-builder.sh zeus 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Dunfell 23.04.0 + +* Operating System based on the Yocto Project version 3.1.20 LTS. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.1, CMake v3.16.5, GCC v9.5.0 + (+ libgfortran), make v4.3, ninja v1.10.0, Python v3.8.12. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.8.5.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.7.0, + VOLK v2.4.1. + - C++ supporting libraries: Boost v1.72.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.11.4, Pugixml + v1.11.4. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.8, + Matplotlib v3.2.1. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.15.LTS (+ gr-uhd), + gr-osmosdr v0.2.3 (+ rtl-sdr and hackrf), gr-iio v0.3, libiio v0.23, + libad9361-iio v0.2, iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/gatesgarth/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=dunfell), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=dunfell), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/dunfell/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh dunfell 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh dunfell 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh dunfell 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh dunfell 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Gatesgarth 23.04.0 + +* Operating System based on the Yocto Project version 3.2.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.2, CMake v3.18.2, GCC v10.2.0 + (+ libgfortran), make v4.3, ninja v1.10.1, Python v3.8.5. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.9.5.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.9.0, + VOLK v2.5.0. + - C++ supporting libraries: Boost v1.74.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.13.0, Pugixml + v1.13. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.8, + Matplotlib v3.3.2. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.15.LTS (+ gr-uhd), + gr-osmosdr v0.2.3 (+ rtl-sdr and hackrf), gr-iio v0.3, libiio v0.23, + libad9361-iio v0.2, iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/rel-v2021.2/meta-xilinx-bsp/conf/machine/), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=gatesgarth), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=gatesgarth), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/gatesgarth/meta/conf/machine) + layers. + * The `meta-xilinx` layer points to the `rel-v2021.2` branch. + * Use `linux-xlnx` kernel for `zedboard-zynq7` machine, based on Linux kernel + 5.10. + * The + [`meta-gnss-sdr`](https://github.com/carlesfernandez/meta-gnss-sdr/tree/gatesgarth) + layer is compatible with Xilinx PetaLinux Tools v2021.2. + + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh gatesgarth 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh gatesgarth 23.04 zc706-zynq7 +``` + +```console +$ ./geniux-builder.sh gatesgarth 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh gatesgarth 23.04 intel-skylake-64 +``` + +```console +$ ./geniux-builder.sh gatesgarth 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Hardknott 23.04.0 + +* Operating System based on the Yocto Project version 3.3.6. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.3, CMake v3.19.5, GCC v10.3.0 + (+ libgfortran), make v4.3, ninja v1.10.2, Python v3.9.9. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.9.5.0. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.9.0, + VOLK v2.5.0. + - C++ supporting libraries: Boost v1.75.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.15.2, Pugixml + v1.13. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.2.8, + Matplotlib v3.4.1. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD v3.15.LTS (+ gr-uhd), + gr-osmosdr v0.2.3 (+ rtl-sdr and hackrf), gr-iio v0.3, libiio v0.23, + libad9361-iio v0.2, iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=hardknott), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=hardknott), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/hardknott/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh hardknott 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh hardknott 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh hardknott 23.04 qemuarm64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + + +### Geniux Honister 23.04.0 + +* Operating System based on the Yocto Project version 3.4.4. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.3, CMake v3.21.1, GCC v11.2.0 + (+ libgfortran), make v4.3, ninja v1.10.2, Python v3.9.9. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.10.2. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.9.0, + VOLK v2.5.0. + - C++ supporting libraries: Boost v1.77.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.18.0, Pugixml + v1.13. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.4.1, + Matplotlib v3.4.1. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD 4.3 (+ gr-uhd), gr-iio, + gr-osmosdr v0.2.0 (+ rtl-sdr and hackrf), libiio v0.24, libad9361-iio v0.2, + iio-oscilloscope v0.14. + +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/rel-v2022.2/meta-xilinx-bsp/conf/machine/), + [`meta-xilinx-vendor`](https://github.com/Xilinx/meta-xilinx/tree/rel-v2022.2/meta-xilinx-vendor/conf/machine), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=honister), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=honister), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/honister/meta/conf/machine) + layers. + * The `meta-xilinx` layer points to the `rel-v2022.2` branch. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh honister 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh honister 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh honister 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh honister 23.04 zc706-zynq7 +``` + +```console +$ ./geniux-builder.sh honister 23.04 zcu102-zynqmp +``` + +```console +$ ./geniux-builder.sh honister 23.04 zcu208-zynqmp +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +### Geniux Kirkstone 23.04.0 + +* Operating System based on the Yocto Project version 4.0.5 LTS. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.5, CMake v3.22.3, GCC v11.2.0 + (+ libgfortran), make v4.3, ninja v1.10.2, Python v3.10.4. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.10.5.0-rc1 + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.9, Lapack v3.9.0, + VOLK v2.5.2. + - C++ supporting libraries: Boost v1.77.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.19.4, Pugixml + v1.13. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.4.3, + Matplotlib v3.5.1. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD 4.3 (+ gr-uhd), gr-iio, + gr-osmosdr v0.2.0 (+ rtl-sdr and hackrf), libiio v0.24, libad9361-iio v0.2, + iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=kirkstone), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=kirkstone), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/kirkstone/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh kirkstone 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh kirkstone 23.04 raspberrypi4-64 +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + + + +### Geniux Langdale 23.04.0 + +* Operating System based on the Yocto Project version 4.1. +* It brings, among many others, the following software packages: + * Development tools: Automake v1.16.5, CMake v3.24.0, GCC v12.2.0 + (+ libgfortran), make v4.3, ninja v1.11.1, Python v3.10.6. + * Goodies for signal processing: + - GNSS-SDR v0.0.18. + - SDR framework: GNU Radio v3.10.3. + - Number crunching libraries: Armadillo v10.8.0, FFTW v3.3.10, Lapack v3.10.1, + VOLK v2.5.2. + - C++ supporting libraries: Boost v1.80.0, gflags v2.2.2, glog v0.5.0, + googletest v1.12.1, Matio v1.5.23, Protocol Buffers v3.21.5, Pugixml + v1.13. + - Graphical representation: gnss-sdr-monitor v1.0, Gnuplot v5.4.3, + Matplotlib v3.5.3. + - Additional Python modules (_e.g._, Scipy) can be installed with `pip3`. + * Software drivers and tools for RF front-ends: UHD 4.3 (+ gr-uhd), gr-iio, + gr-osmosdr v0.2.0 (+ rtl-sdr and hackrf), libiio v0.23, libad9361-iio v0.2, + iio-oscilloscope v0.14. +* It can be built for machines defined by the + [`meta-xilinx-bsp`](https://github.com/Xilinx/meta-xilinx/tree/langdale/meta-xilinx-bsp/conf/machine/), + [`meta-xilinx-vendor`](https://github.com/Xilinx/meta-xilinx/tree/langdale/meta-xilinx-vendor/conf/machine), + [`meta-raspberrypi`](https://git.yoctoproject.org/meta-raspberrypi/tree/conf/machine?h=langdale), + [`meta-intel`](https://git.yoctoproject.org/meta-intel/tree/conf/machine?h=langdale), + and + [`openembedded-core/meta`](https://github.com/openembedded/openembedded-core/tree/langdale/meta/conf/machine) + layers. + +Examples on how to generate images and the SDK using the +[yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) repo: + +```console +$ ./geniux-builder.sh langdale 23.04 intel-corei7-64 +``` + +```console +$ ./geniux-builder.sh langdale 23.04 raspberrypi4-64 +``` + +```console +$ ./geniux-builder.sh langdale 23.04 zedboard-zynq7 +``` + +```console +$ ./geniux-builder.sh langdale 23.04 zcu208-zynqmp +``` + +You can replace `23.04` by `latest` in order to get the latest developments. + +## Flashing images on an SD card + +Starting from Geniux Zeus 21.08, the `geniux-builder.sh` script produces `.wic` +images that can be flashed on an SD card and your device will be ready to go. +For image flashing, we recommend using a software tool such as [Balena +Etcher](https://www.balena.io/etcher/). Just pick up the +`gnss-sdr-demo-image-$MACHINE-yyyymmddHHMMSS.rootfs.wic.xz` file, flash your SD +card, insert it in your device, and it will be ready to boot and run `gnss-sdr`. +Other flashing options [here]({{ +"/docs/tutorials/cross-compiling/#copying-an-image-file-to-your-sd-card" | +relative_url }}). + +## Key repositories + +All the required information for building a Geniux release is contained in three +public repositories: + +* **meta-gnss-sdr layer**: Yocto layer defining all the packages in the Geniux + distribution, including the recipes for downloading and building them, their + cryptographic hash, the way to create customized full-system images. + * URL: + [https://github.com/carlesfernandez/meta-gnss-sdr](https://github.com/carlesfernandez/meta-gnss-sdr) + * Each Geniux version is defined in a different branch: `rocko`, `sumo`, + `thud`, `warrior`, `zeus`, `dunfell`, `gatesgarth`, `hardknott`, `honister`, + `kirkstone`, `langdale`. Those branches are updated as we learn more about the Yocto + Project usage, so they evolve in time. +* **oe-gnss-sdr-manifest**: Manifest containing the specific commits of all + the other Yocto layers required to build Geniux (notably, + [openembedded-core](https://github.com/openembedded/openembedded-core), + [meta-openembedded](https://github.com/openembedded/meta-openembedded), + [meta-qt5](https://github.com/meta-qt5/meta-qt5), + [meta-sdr](https://github.com/balister/meta-sdr), + [meta-xilinx](https://github.com/Xilinx/meta-xilinx), + [meta-raspberrypi](https://git.yoctoproject.org/meta-raspberrypi), + [meta-intel](https://git.yoctoproject.org/meta-intel), etc.). + * URL: + [https://github.com/carlesfernandez/oe-gnss-sdr-manifest](https://github.com/carlesfernandez/oe-gnss-sdr-manifest) + * Each Geniux version is defined in a different branch: `rocko`, `sumo`, + `thud`, `warrior`, `zeus`, `dunfell`, `gatesgarth`, `hardknott`, `honister`, + `kirkstone`, `langdale`. + * Tags: each tag corresponds to a version of the manifest in which the + `meta-gnss-sdr` has been pinned to a specific commit. This allows + fully-reproducible buildings in the future since it defines a + fully-specified software system set. Examples: `rocko-20.09`, `sumo-20.09`, + `thud-20.09`, etc. + * In the above instructions, when `MANIFEST_DATE` is set to `latest`, all the + layers are pinned to a specific commit but except the `meta-gnss-sdr` layer, + which points to whatever it is in the corresponding branch of that layer at + that point of time. +* **yocto-geniux**: Tool for the virtualization and automation of the building + process. + * URL: + [https://github.com/carlesfernandez/yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) + +If you miss any feature on Geniux, or have an idea on how to make it better, +pull requests and issues are welcome on those repositories. Their contents are +released under the [MIT License](https://opensource.org/licenses/MIT). + + +## Disclaimer + +Yocto Project and all related marks and logos are trademarks of The Linux +Foundation. This website is not, in any way, endorsed by the Yocto Project or +[The Linux Foundation](https://linuxfoundation.org/). + +  + +  + +Enjoy Geniux! From c82b24772412cc890af316f653b8e1f65764baf4 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 18 Apr 2023 10:37:57 +0200 Subject: [PATCH 03/24] Fix Yocto project versions --- _posts/2023-04-17-introducing-geniux-v2304.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_posts/2023-04-17-introducing-geniux-v2304.md b/_posts/2023-04-17-introducing-geniux-v2304.md index 20c98e20..81f24a2f 100644 --- a/_posts/2023-04-17-introducing-geniux-v2304.md +++ b/_posts/2023-04-17-introducing-geniux-v2304.md @@ -420,7 +420,7 @@ You can replace `23.04` by `latest` in order to get the latest developments. ### Geniux Dunfell 23.04.0 -* Operating System based on the Yocto Project version 3.1.20 LTS. +* Operating System based on the Yocto Project version 3.1.24 LTS. * It brings, among many others, the following software packages: * Development tools: Automake v1.16.1, CMake v3.16.5, GCC v9.5.0 (+ libgfortran), make v4.3, ninja v1.10.0, Python v3.8.12. @@ -634,7 +634,7 @@ You can replace `23.04` by `latest` in order to get the latest developments. ### Geniux Kirkstone 23.04.0 -* Operating System based on the Yocto Project version 4.0.5 LTS. +* Operating System based on the Yocto Project version 4.0.8 LTS. * It brings, among many others, the following software packages: * Development tools: Automake v1.16.5, CMake v3.22.3, GCC v11.2.0 (+ libgfortran), make v4.3, ninja v1.10.2, Python v3.10.4. @@ -676,7 +676,7 @@ You can replace `23.04` by `latest` in order to get the latest developments. ### Geniux Langdale 23.04.0 -* Operating System based on the Yocto Project version 4.1. +* Operating System based on the Yocto Project version 4.1.3. * It brings, among many others, the following software packages: * Development tools: Automake v1.16.5, CMake v3.24.0, GCC v12.2.0 (+ libgfortran), make v4.3, ninja v1.11.1, Python v3.10.6. From 016971bcb440f37caa0c549a8654b4ec8d6847fc Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 10 Jul 2023 08:16:26 +0200 Subject: [PATCH 04/24] Document Kalman filter in the PVT block --- _sp-blocks/12-pvt.md | 118 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 8 deletions(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 43bb01f6..1a69cee8 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -6,7 +6,7 @@ sidebar: nav: "sp-block" toc: true toc_sticky: true -last_modified_at: 2023-02-14T09:54:02+02:00 +last_modified_at: 2023-07-10T09:54:02+02:00 --- The _PVT_ block is the last one in the GNSS-SDR flow graph. Hence, it acts as a @@ -52,7 +52,7 @@ where $$ \mathbf{r}_r $$ is the receiver's antenna position in an earth-centered, earth-fixed (ECEF) coordinate system (in meters), $$ c $$ is the speed of light, and $$ dt_r $$ is the receiver clock bias (in seconds). -The measurement vector is defined as: +The measurement vector is defi $$ \begin{equation} \mathbf{y} = \left(P_r^{(1)}, P_r^{(2)}, P_r^{(3)}, ..., P_r^{(m)} \right)^T~. \end{equation} $$ @@ -165,8 +165,9 @@ where: - $$ El_r^{(s)} $$ is the elevation angle of satellite direction (in rad). - - $$ \sigma_{bclock,s} = 30 $$ is the standard deviation of the broadcast - clock error (in m). + - $$ \sigma_{bclock,s} $$ is the standard deviation of the broadcast ephemeris + and clock error (in m). This parameter is estimated internally from URA (User + Range Accuracy) or or similar indicators. - $$ \sigma_{ion,s} $$ is the standard deviation of ionosphere correction model error (in m). This parameter is set to $$ \sigma_{ion} = 5 $$ m by @@ -814,8 +815,6 @@ function](https://gssc.esa.int/navipedia/index.php/Mapping_of_Niell)[^Niell96]. The zenith total delay $$ Z_{T,r} $$ is estimated as an unknown parameter in the parameter estimation process. - - ## Estimate the tropospheric zenith total delay and gradient If the processing option `trop_model` is set to `Estimate_ZTD_Grad`, a more @@ -826,14 +825,112 @@ $$ \begin{equation} \!\!\!\!\!\!\!\!\!\!\!\!\!\!m\left(El_{r}^{(s)}\right)\! = \!m_{W}\left(El_{r}^{(s)}\right)\!\left[1\!+\!\cot \! \left(El_{r}^{(s)}\right) \! \left( \! G_{N,r} \cos \! \left(Az_{r}^{(s)}\right) \!+\! G_{E,r} \sin \! \left(Az_{r}^{(s)}\right)\!\right) \!\right] \end{equation} $$ -where $$ Az_{r}^{(s)} $$ is the azimuth angle of satellite direction (rad), and -$$ G_{E,r} $$ and $$ G_{N,r} $$ are the east and north components of the +where $$ Az_{r}^{(s)} $$ is the azimuth angle of satellite direction (rad), and $$ G_{E,r} $$ and $$ G_{N,r} $$ are the east and north components of the tropospheric gradient, respectively. The zenith total delay $$ Z_{T,r} $$ and the gradient parameters $$ G_{E,r} $$ and $$ G_{N,r} $$ are estimated as unknown parameters in the parameter estimation process.   +## A de-noising Kalman filter for the PVT solution + +The `PVT` block can apply a simple Kalman filter to the computed PVT solutions. +This filter can be enabled by setting `PVT.enable_pvt_kf=true` in the +configuration file. The structure of this filter is as follows: + +- **State model:** + $$ \begin{equation} + \mathbf{x} = \left[ x, y, z, v_x, v_y, v_z \right]^{T} + \end{equation} $$ + $$ \begin{equation} + \mathbf{x}_k = \mathbf{F} \mathbf{x}_{k-1} + \mathbf{v}_k~, \quad \mathbf{v}_k \sim \mathcal{N}(\mathbf{0},\mathbf{Q}) + \end{equation} $$ + $$ \begin{equation} + \textbf{F} = \left[ \begin{array}{cccccc} + 1 & 0 & 0 & T & 0 & 0 \\ + 0 & 1 & 0 & 0 & T & 0 \\ + 0 & 0 & 1 & 0 & 0 & T \\ + 0 & 0 & 0 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 1 + \end{array} \right] + \end{equation} $$ + $$ \begin{equation} + \textbf{Q} = \begin{bmatrix} + \sigma_{s\_pos}^{2} & 0 & 0 & 0 & 0 & 0 \\ + 0 & \sigma_{s\_pos}^{2} & 0 & 0 & 0 & 0 \\ + 0 & 0 & \sigma_{s\_pos}^{2} & 0 & 0 & 0 \\ + 0 & 0 & 0 & \sigma_{s\_vel}^{2} & 0 & 0 \\ + 0 & 0 & 0 & 0 & \sigma_{s\_vel}^{2} & 0 \\ + 0 & 0 & 0 & 0 & 0 & \sigma_{s\_vel}^{2} + \end{bmatrix} + \end{equation} $$ +- **Measurement model:** + $$ \begin{equation} + \mathbf{z} = \left[ x , y , z , v_{x}, v_{y}, v_{z} \right]^{T} + \end{equation} $$ + $$ \begin{equation} + \mathbf{z}_k = \mathbf{H}\mathbf{x}_k + \mathbf{w}_k , \quad \mathbf{w}_k \sim \mathcal{N}(\mathbf{0},\mathbf{R}) + \end{equation} $$ + $$ \begin{equation} \textbf{H} = \begin{bmatrix} + 1 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 1 + \end{bmatrix} \end{equation} $$ + $$ \begin{equation} \textbf{R} = \begin{bmatrix} + \sigma_{m\_pos}^{2} & 0 & 0 & 0 & 0 & 0 \\ + 0 & \sigma_{m\_pos}^{2} & 0 & 0 & 0 & 0 \\ + 0 & 0 & \sigma_{m\_pos}^{2} & 0 & 0 & 0 \\ + 0 & 0 & 0 & \sigma_{m\_vel}^{2} & 0 & 0 \\ + 0 & 0 & 0 & 0 & \sigma_{m\_vel}^{2} & 0 \\ + 0 & 0 & 0 & 0 & 0 & \sigma_{m\_vel}^{2} + \end{bmatrix} \end{equation} $$ + +- **Initialization:** + $$ \begin{equation} + \mathbf{x}_{0|0} = \left[ \begin{array}{cccc} x_{0} & y_{0} & z_{0} & v_{x_{0}} & v_{y_{0}} & v_{z_{0}} \end{array} \right]^T + \end{equation} $$ + + $$\begin{equation} + \mathbf{P}_{0|0} = \begin{bmatrix} + \sigma_{s\_pos}^{2} & 0 & 0 & 0 & 0 & 0 \\ + 0 & \sigma_{s\_pos}^{2} & 0 & 0 & 0 & 0 \\ + 0 & 0 & \sigma_{s\_pos}^{2} & 0 & 0 & 0 \\ + 0 & 0 & 0 & \sigma_{s\_vel}^{2} & 0 & 0 \\ + 0 & 0 & 0 & 0 & \sigma_{s\_vel}^{2} & 0 \\ + 0 & 0 & 0 & 0 & 0 & \sigma_{s\_vel}^{2} + \end{bmatrix} + \end{equation} $$ + +- **Prediction:** + $$ \begin{equation} + \hat{\mathbf{x}}_{k|k-1} = \mathbf{F} \hat{\mathbf{x}}_{k-1|k-1} + \end{equation} $$ + $$ \begin{equation} + \mathbf{P}_{k|k-1} = \mathbf{F} \mathbf{P}_{k-1|k-1} \mathbf{F}^T + \mathbf{Q} + \end{equation} $$ +- **Update:** + $$ \begin{equation} + \mathbf{K}_k = \mathbf{P}_{k|k-1} \mathbf{H}^T \left( \mathbf{H}\mathbf{P}_{k|k-1} \mathbf{H}^T + \mathbf{R} \right)^{-1} + \end{equation} $$ + + $$ \begin{equation} + \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k \left( \mathbf{z}_k - \mathbf{H}_k\hat{\mathbf{x}}_{k|k-1} \right) + \end{equation} $$ + + $$ \begin{equation} + \mathbf{P}_{k|k} = \left( \mathbf{I} - \mathbf{K}_{k} \mathbf{H} \right)\mathbf{P}_{k|k-1} + \end{equation} $$ + +The following parameters are exposed in the configuration, here with their defaut values: + $$ \sigma_{m\_pos} = \text{\texttt{PVT.kf\_measures\_ecef\_pos\_sd\_m}} = 1.0 \text {, in [m].} $$ + $$ \sigma_{m\_pos} = \text{\texttt{PVT.kf\_measures\_ecef\_vel\_sd\_ms}} = 0.1 \text {, in [m/s].} $$ + $$ \sigma_{s\_pos} = \text{\texttt{PVT.kf\_system\_ecef\_pos\_sd\_m}} = 0.01 \text {, in [m].} $$ + $$ \sigma_{s\_vel} = \text{\texttt{PVT.kf\_system\_ecef\_vel\_sd\_ms}} = 0.001 \text {, in [m/s].} $$ + ---------   @@ -1058,6 +1155,11 @@ standard and precise positioning. It accepts the following parameters: | `enable_protobuf` | [`true`, `false`]: If set to `true`, the data serialization is done using [Protocol Buffers](https://developers.google.com/protocol-buffers/), with the format defined at [`monitor_pvt.proto`](https://github.com/gnss-sdr/gnss-sdr/blob/next/docs/protobuf/monitor_pvt.proto). An example of usage is the [gnss-sdr-monitor](https://github.com/acebrianjuan/gnss-sdr-monitor). If set to `false`, it uses [Boost Serialization](https://www.boost.org/doc/libs/release/libs/serialization/doc/index.html). For an example of usage of the latter, check the [gnss-sdr-pvt-monitoring-client](https://github.com/acebrianjuan/gnss-sdr-pvt-monitoring-client). This parameter defaults to `true` (Protocol Buffers is used). | Optional | | `use_e6_for_pvt` | [`true`, `false`]: If set to `false`, the PVT engine will ignore observables from Galileo E6B signals. It defaults to `true`, so observables will be used if found. This feature is present in GNSS-SDR v0.0.18 and later versions. | Optional | | `use_has_corrections` | [`true`, `false`]: If set to `false`, the PVT engine will ignore corrections from the Galileo High Accuracy Service. It defaults to `true`, so corrections will be applied if available. This feature is present in GNSS-SDR v0.0.18 and later versions. | Optional | +| `enable_pvt_kf` | [`true`, `false`]: If set to `true`, it enables the Kalman filter of the PVT solution. It defaults to `false`. This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | Optional | +| `kf_measures_ecef_pos_sd_m` | Standard deviation of the position estimations, in meters. It defaults to `1.0` [m]. Only used if `PVT.enable_pvt_kf=true`. This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | Optional | +| `kf_measures_ecef_vel_sd_ms` | Standard deviation of the velocity estimations, in meters per second. It defaults to `0.1` [m/s]. Only used if `PVT.enable_pvt_kf=true`. This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | Optional | +| `kf_system_ecef_pos_sd_m` | Standard deviation of the dynamic system model for position, in meters. It defaults to `0.01` [m]. Only used if `PVT.enable_pvt_kf=true`. This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | Optional | +| `kf_system_ecef_vel_sd_ms` | Standard deviation of the dynamic system model for velocity, in meters per second. It defaults to `0.001` [m/s]. Only used if `PVT.enable_pvt_kf=true`. This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | Optional | | `use_unhealthy_sats` | [`true`, `false`]: If set to `true`, the PVT engine will use observables from satellites flagged as unhealthy in the navigation message. It defaults to `false`, so those observables will be ignored. This feature is present in GNSS-SDR v0.0.18 and later versions. | Optional | | `show_local_time_zone` | [`true`, `false`]: If set to `true`, the time of the PVT solution displayed in the terminal is shown in the local time zone, referred to UTC. It defaults to `false`, so time is shown in UTC. This parameter does not affect time annotations in other output formats, which are always UTC. | Optional | | `rtk_trace_level` | Configure the RTKLIB trace level (`0`: off, up to `5`: max. verbosity). When set to something > `2`, the RTKLIB library become more verbose in the internal logging file. It defaults to `0` (off). | Optional | From e5dfb6232fbb7865eb7d1bb7857d563d1f26f5d3 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 10 Jul 2023 09:15:41 +0200 Subject: [PATCH 05/24] Add space between equations --- _sp-blocks/12-pvt.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 1a69cee8..0b8e9f8f 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -842,9 +842,11 @@ configuration file. The structure of this filter is as follows: $$ \begin{equation} \mathbf{x} = \left[ x, y, z, v_x, v_y, v_z \right]^{T} \end{equation} $$ + $$ \begin{equation} \mathbf{x}_k = \mathbf{F} \mathbf{x}_{k-1} + \mathbf{v}_k~, \quad \mathbf{v}_k \sim \mathcal{N}(\mathbf{0},\mathbf{Q}) \end{equation} $$ + $$ \begin{equation} \textbf{F} = \left[ \begin{array}{cccccc} 1 & 0 & 0 & T & 0 & 0 \\ @@ -865,13 +867,16 @@ configuration file. The structure of this filter is as follows: 0 & 0 & 0 & 0 & 0 & \sigma_{s\_vel}^{2} \end{bmatrix} \end{equation} $$ + - **Measurement model:** $$ \begin{equation} \mathbf{z} = \left[ x , y , z , v_{x}, v_{y}, v_{z} \right]^{T} \end{equation} $$ + $$ \begin{equation} \mathbf{z}_k = \mathbf{H}\mathbf{x}_k + \mathbf{w}_k , \quad \mathbf{w}_k \sim \mathcal{N}(\mathbf{0},\mathbf{R}) \end{equation} $$ + $$ \begin{equation} \textbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ @@ -880,6 +885,7 @@ configuration file. The structure of this filter is as follows: 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \end{bmatrix} \end{equation} $$ + $$ \begin{equation} \textbf{R} = \begin{bmatrix} \sigma_{m\_pos}^{2} & 0 & 0 & 0 & 0 & 0 \\ 0 & \sigma_{m\_pos}^{2} & 0 & 0 & 0 & 0 \\ @@ -909,9 +915,11 @@ configuration file. The structure of this filter is as follows: $$ \begin{equation} \hat{\mathbf{x}}_{k|k-1} = \mathbf{F} \hat{\mathbf{x}}_{k-1|k-1} \end{equation} $$ + $$ \begin{equation} \mathbf{P}_{k|k-1} = \mathbf{F} \mathbf{P}_{k-1|k-1} \mathbf{F}^T + \mathbf{Q} \end{equation} $$ + - **Update:** $$ \begin{equation} \mathbf{K}_k = \mathbf{P}_{k|k-1} \mathbf{H}^T \left( \mathbf{H}\mathbf{P}_{k|k-1} \mathbf{H}^T + \mathbf{R} \right)^{-1} From db27975866d9c53dbd46f80b0ea1f5a1b8cfe010 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 10 Jul 2023 09:18:22 +0200 Subject: [PATCH 06/24] Add space between equations --- _sp-blocks/12-pvt.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 0b8e9f8f..0b024758 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -857,6 +857,7 @@ configuration file. The structure of this filter is as follows: 0 & 0 & 0 & 0 & 0 & 1 \end{array} \right] \end{equation} $$ + $$ \begin{equation} \textbf{Q} = \begin{bmatrix} \sigma_{s\_pos}^{2} & 0 & 0 & 0 & 0 & 0 \\ From d8e13b34f09106e9f96bee0fbc8797527b66adf9 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 10 Jul 2023 10:31:29 +0200 Subject: [PATCH 07/24] Fix equations --- _sp-blocks/12-pvt.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 0b024758..605b8154 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -935,10 +935,10 @@ configuration file. The structure of this filter is as follows: \end{equation} $$ The following parameters are exposed in the configuration, here with their defaut values: - $$ \sigma_{m\_pos} = \text{\texttt{PVT.kf\_measures\_ecef\_pos\_sd\_m}} = 1.0 \text {, in [m].} $$ - $$ \sigma_{m\_pos} = \text{\texttt{PVT.kf\_measures\_ecef\_vel\_sd\_ms}} = 0.1 \text {, in [m/s].} $$ - $$ \sigma_{s\_pos} = \text{\texttt{PVT.kf\_system\_ecef\_pos\_sd\_m}} = 0.01 \text {, in [m].} $$ - $$ \sigma_{s\_vel} = \text{\texttt{PVT.kf\_system\_ecef\_vel\_sd\_ms}} = 0.001 \text {, in [m/s].} $$ + $$ \sigma_{m\_pos} = \text{PVT.kf\_measures\_ecef\_pos\_sd\_m} = 1.0 \text {, in [m].} $$ + $$ \sigma_{m\_pos} = \text{PVT.kf\_measures\_ecef\_vel\_sd\_ms} = 0.1 \text {, in [m/s].} $$ + $$ \sigma_{s\_pos} = \text{PVT.kf\_system\_ecef\_pos\_sd\_m} = 0.01 \text {, in [m].} $$ + $$ \sigma_{s\_vel} = \text{PVT.kf\_system\_ecef\_vel\_sd\_ms} = 0.001 \text {, in [m/s].} $$ --------- From 91d677829d6cc478d6a28c58a1cb19eeaf8ca94d Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 10 Jul 2023 10:38:17 +0200 Subject: [PATCH 08/24] Fix equations --- _sp-blocks/12-pvt.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 605b8154..56cb6351 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -935,10 +935,11 @@ configuration file. The structure of this filter is as follows: \end{equation} $$ The following parameters are exposed in the configuration, here with their defaut values: - $$ \sigma_{m\_pos} = \text{PVT.kf\_measures\_ecef\_pos\_sd\_m} = 1.0 \text {, in [m].} $$ - $$ \sigma_{m\_pos} = \text{PVT.kf\_measures\_ecef\_vel\_sd\_ms} = 0.1 \text {, in [m/s].} $$ - $$ \sigma_{s\_pos} = \text{PVT.kf\_system\_ecef\_pos\_sd\_m} = 0.01 \text {, in [m].} $$ - $$ \sigma_{s\_vel} = \text{PVT.kf\_system\_ecef\_vel\_sd\_ms} = 0.001 \text {, in [m/s].} $$ + +- $$ \sigma_{m\_pos} = \text{PVT.kf_measures_ecef_pos_sd_m} = 1.0 \text {, in [m].} $$ +- $$ \sigma_{m\_vel} = \text{PVT.kf_measures_ecef_vel_sd_ms} = 0.1 \text {, in [m/s].} $$ +- $$ \sigma_{s\_pos} = \text{PVT.kf_system_ecef_pos_sd_m} = 0.01 \text {, in [m].} $$ +- $$ \sigma_{s\_vel} = \text{PVT.kf_system_ecef_vel_sd_ms} = 0.001 \text {, in [m/s].} $$ --------- From 2587f4a7b383ac7abb3196835d5ecc65a7ac2df0 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 11:24:31 +0200 Subject: [PATCH 09/24] Update gems --- Gemfile.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 789866c1..6a230128 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,19 +1,19 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.0.4.3) + activesupport (7.0.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.4) + addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.23.9) + commonmarker (0.23.10) concurrent-ruby (1.2.2) dnsruby (1.70.0) simpleidn (~> 0.2.1) @@ -25,7 +25,7 @@ GEM eventmachine (1.2.7) eventmachine (1.2.7-x64-mingw32) execjs (2.8.1) - faraday (2.7.4) + faraday (2.7.10) faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) @@ -88,7 +88,7 @@ GEM activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) - i18n (1.12.0) + i18n (1.14.1) concurrent-ruby (~> 1.0) jekyll (3.9.3) addressable (~> 2.4) @@ -207,14 +207,14 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.8.1) + mini_portile2 (2.8.4) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.18.0) - nokogiri (1.14.3) - mini_portile2 (~> 2.8.0) + minitest (5.19.0) + nokogiri (1.15.4) + mini_portile2 (~> 2.8.2) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) @@ -222,11 +222,11 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (4.0.7) - racc (1.6.2) + racc (1.7.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.5) + rexml (3.2.6) rouge (3.26.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) From 480137fdd695cda47972a9f0531234d0b2d1d6ed Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 11:43:57 +0200 Subject: [PATCH 10/24] Update npmjs modules --- package-lock.json | 221 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 174 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e737d02..f45bf1f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,39 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -227,18 +260,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -246,8 +280,8 @@ "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", @@ -255,16 +289,21 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -382,13 +421,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -451,9 +491,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/has": { @@ -639,9 +679,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -781,16 +821,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -811,6 +847,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1133,14 +1175,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -1150,12 +1192,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -1166,6 +1208,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -1181,9 +1241,9 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -1211,9 +1271,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1282,6 +1342,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -1364,6 +1441,57 @@ "tree-kill": "cli.js" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -1444,17 +1572,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" From e9cd09f010a8c72146bf06195d5115147a721793 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 12:48:40 +0200 Subject: [PATCH 11/24] Remove former sponsors, update Xilinx and Altera links --- _design-forces/08-portability.md | 6 +++--- _pages/acknowledgements.md | 37 -------------------------------- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/_design-forces/08-portability.md b/_design-forces/08-portability.md index 83f3f19d..9f7a82ef 100644 --- a/_design-forces/08-portability.md +++ b/_design-forces/08-portability.md @@ -237,9 +237,9 @@ receiver: - Others. - Support of FPGA offloading (define FPGA's vendor/model). - - [Xilinx](https://www.xilinx.com/) - - [Altera](https://www.altera.com/) - - [Microsemi (formerly Actel)](https://www.microsemi.com/product-directory/1636-fpga-soc) + - [AMD (formerly Xilinx)](https://www.xilinx.com/products/silicon-devices/fpga.html) + - [Intel (formerly Altera)](https://www.intel.com/content/www/us/en/products/programmable.html) + - [Microchip (formerly Actel)](https://www.microchip.com/en-us/products/fpgas-and-plds#) - Others. - Other software dependencies (define required minimal versions). diff --git a/_pages/acknowledgements.md b/_pages/acknowledgements.md index a7141c8d..ee9f986e 100644 --- a/_pages/acknowledgements.md +++ b/_pages/acknowledgements.md @@ -191,40 +191,3 @@ and open-source GNSS software-defined receiver: projects. {: .notice--success} - -## Sponsors - -![NSL logo]({{ "/assets/images/logo-nsl.jpg" | relative_url }}){:height="250px" width="250px"} -{: style="text-align: center;"} - -* [NSL](https://gmvnsl.com/), a leading company specialised in satellite -navigation, actively supported GNSS-SDR. Based in Nottingham, UK, NSL deliver -reliable and robust Global Navigation Satellite System technologies for a -variety of applications, such as those that require highest accuracies, impact -safety, or are critical in terms of business, finance and security. NSL also -produce radiofrequency front-ends and associated products, for example the -dual channel -[Stereo](https://gmvnsl.com/advanced-gnns-hw-sw/2016-04-11-15-01-35) system -that is being used with GNSS-SDR development. - -[**NSL**](https://gmvnsl.com/) kindly provided equipment and technical support -to the development of dual-band software architectures. -{: .notice--success} - ------ - - -![Xilinx logo]({{ "/assets/images/logo-xilinx.png" | relative_url }}){:height="250px" width="250px"} -{: style="text-align: center;"} - -* [Xilinx](https://www.xilinx.com) is a worldwide renowned supplier of -programmable logic devices. It is known for inventing the field-programmable -gate array (FPGA) and as the first semiconductor company with a fabless -manufacturing model. - -Through their [**Xilinx University Program -(XUP)**](https://www.xilinx.com/support/university.html), Xilinx is supporting -GNSS-SDR with the donation of four Zedboard development kits and a full license -of the Vivado Design Suite, a software tool for synthesis and analysis of HDL -designs. -{: .notice--success} From 6634275b0000643bc4570319f9f2e76df187ef85 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 13:11:54 +0200 Subject: [PATCH 12/24] Update GPS ICD versions --- _posts/2016-07-08-gnss-signals.md | 50 +++++++++++++++---------------- _sp-blocks/12-pvt.md | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/_posts/2016-07-08-gnss-signals.md b/_posts/2016-07-08-gnss-signals.md index 41cf81a9..ae224673 100644 --- a/_posts/2016-07-08-gnss-signals.md +++ b/_posts/2016-07-08-gnss-signals.md @@ -839,28 +839,28 @@ Details of the $$ e_{B3Q}(t) $$ component have not been disclosed. The following table lists the GNSS signals providing Open Service. |---------- -| **GNSS Signal** | **Center Freq.** | **Modulation** | -|:-:|:-:|:-:| -|-------------- -| [**GPS L5**](https://www.gps.gov/technical/icwg/IS-GPS-705H.pdf)$$ ^{(*)} $$ | $$ 1176.45 $$ MHz | BPSK(10) | -| [**Galileo E5a**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1176.45 $$ MHz | QPSK(10) | -| [**BeiDou B2a**](http://www.beidou.gov.cn/xt/gfxz/201712/P020171226742357364174.pdf)$$ ^{(**)} $$ | $$ 1176.45 $$ MHz | BPSK(10) | -| [**GLONASS L3OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L3-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(*)} $$ | $$ 1202.025 $$ MHz | BPSK(10) | -| [**Galileo E5b**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1207.14 $$ MHz | QPSK(10) | -| [**BeiDou B2I**](http://www.beidou.gov.cn/xt/gfxz/201710/P020171202693088949056.pdf) | $$ 1207.14 $$ MHz | BPSK(2) | -| [**GPS L2C**](https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf)$$ ^{(*)} $$ | $$ 1227.60 $$ MHz | BPSK(1) | -| [**GLONASS L2OF**](http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf) | $$ 1246.00 $$ MHz | BPSK(0.5) | -| [**GLONASS L2OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L2-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(**)} $$ | $$ 1248.06 $$ MHz | BOC(1,1) | -| [**BeiDou B3I**](http://www.beidou.gov.cn/xt/gfxz/201802/P020180209623601401189.pdf)$$ ^{(*)} $$ | $$ 1268.520 $$ MHz | BPSK(10) | -| [**Galileo E6B**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/E6BC_SIS_Technical_Note.pdf)$$ ^{(**)} $$ | $$ 1278.750 $$ MHz | BPSK(5) | -| [**BeiDou B1I**](http://en.beidou.gov.cn/SYSTEMS/Officialdocument/201902/P020190227601370045731.pdf) | $$ 1561.098 $$ MHz | BPSK(2) | -| [**BeiDou B1C**](http://www.beidou.gov.cn/xt/gfxz/201712/P020171226741342013031.pdf)$$ ^{(**)} $$ | $$ 1575.42 $$ MHz | BOC(1,1) | -| [**GPS L1 C/A**](https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf) | $$ 1575.42 $$ MHz | BPSK(1) | -| [**GPS L1C**](https://www.gps.gov/technical/icwg/IS-GPS-800H.pdf)$$ ^{(**)} $$ | $$ 1575.42 $$ MHz | BOC(1,1) | -| [**Galileo E1b/c**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1575.42 $$ MHz | CBOC(6,1,1/11) | -| [**GLONASS L1OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L1-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(**)} $$ | $$ 1600.995 $$ MHz | BOC(1,1) | -| [**GLONASS L1OF**](http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf) | $$ 1602.00 $$ MHz | BPSK(0.5) | -|-------------- +| **GNSS Signal** | **Center Freq.** | **Modulation** | +| :----------------------------------------------------------------------------------------------------------------------------: | :----------------: | :------------: | +| -------------- | +| [**GPS L5**](https://www.gps.gov/technical/icwg/IS-GPS-705J.pdf)$$ ^{(*)} $$ | $$ 1176.45 $$ MHz | BPSK(10) | +| [**Galileo E5a**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1176.45 $$ MHz | QPSK(10) | +| [**BeiDou B2a**](http://www.beidou.gov.cn/xt/gfxz/201712/P020171226742357364174.pdf)$$ ^{(**)} $$ | $$ 1176.45 $$ MHz | BPSK(10) | +| [**GLONASS L3OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L3-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(*)} $$ | $$ 1202.025 $$ MHz | BPSK(10) | +| [**Galileo E5b**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1207.14 $$ MHz | QPSK(10) | +| [**BeiDou B2I**](http://www.beidou.gov.cn/xt/gfxz/201710/P020171202693088949056.pdf) | $$ 1207.14 $$ MHz | BPSK(2) | +| [**GPS L2C**](https://www.gps.gov/technical/icwg/IS-GPS-200N.pdf)$$ ^{(*)} $$ | $$ 1227.60 $$ MHz | BPSK(1) | +| [**GLONASS L2OF**](http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf) | $$ 1246.00 $$ MHz | BPSK(0.5) | +| [**GLONASS L2OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L2-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(**)} $$ | $$ 1248.06 $$ MHz | BOC(1,1) | +| [**BeiDou B3I**](http://www.beidou.gov.cn/xt/gfxz/201802/P020180209623601401189.pdf)$$ ^{(*)} $$ | $$ 1268.520 $$ MHz | BPSK(10) | +| [**Galileo E6B**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/E6BC_SIS_Technical_Note.pdf)$$ ^{(**)} $$ | $$ 1278.750 $$ MHz | BPSK(5) | +| [**BeiDou B1I**](http://en.beidou.gov.cn/SYSTEMS/Officialdocument/201902/P020190227601370045731.pdf) | $$ 1561.098 $$ MHz | BPSK(2) | +| [**BeiDou B1C**](http://www.beidou.gov.cn/xt/gfxz/201712/P020171226741342013031.pdf)$$ ^{(**)} $$ | $$ 1575.42 $$ MHz | BOC(1,1) | +| [**GPS L1 C/A**](https://www.gps.gov/technical/icwg/IS-GPS-200N.pdf) | $$ 1575.42 $$ MHz | BPSK(1) | +| [**GPS L1C**](https://www.gps.gov/technical/icwg/IS-GPS-800J.pdf)$$ ^{(**)} $$ | $$ 1575.42 $$ MHz | BOC(1,1) | +| [**Galileo E1b/c**](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf) | $$ 1575.42 $$ MHz | CBOC(6,1,1/11) | +| [**GLONASS L1OC**](http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L1-s-kod.-razd.-Red-1.0-2016.pdf)$$ ^{(**)} $$ | $$ 1600.995 $$ MHz | BOC(1,1) | +| [**GLONASS L1OF**](http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf) | $$ 1602.00 $$ MHz | BPSK(0.5) | +| -------------- | (*): Modernized signal not broadcast by all satellites. @@ -879,11 +879,11 @@ The following table lists the GNSS signals providing Open Service. [^GPS-PPS]: U.S. Government, Department of Defense, Positioning, Navigation, and Timing Executive Committee, [Global Positioning System Precise Positioning Service Performance Standard](https://www.gps.gov/technical/ps/2007-PPS-performance-standard.pdf), 1st edition, Feb. 2007. -[^ISGPS200]: Global Positioning System Directorate, [Interface Specification IS-GPS-200M: Navstar GPS Space Segment/Navigation User Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf), May 2021. +[^ISGPS200]: Global Positioning System Directorate, [Interface Specification IS-GPS-200N: Navstar GPS Space Segment/Navigation User Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-200N.pdf), Aug 2022. -[^ISGPS800]: Global Positioning System Directorate, [Interface Specification IS-GPS-800H: Navstar GPS Space Segment/User Segment L1C Interface](https://www.gps.gov/technical/icwg/IS-GPS-800H.pdf), May 2021. +[^ISGPS800]: Global Positioning System Directorate, [Interface Specification IS-GPS-800J: Navstar GPS Space Segment/User Segment L1C Interface](https://www.gps.gov/technical/icwg/IS-GPS-800J.pdf), Aug 2022. -[^ISGPS705]: Global Positioning System Directorate, [Interface Specification IS-GPS-705H: Navstar GPS Space Segment/User Segment L5 Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-705H.pdf), May 2021. +[^ISGPS705]: Global Positioning System Directorate, [Interface Specification IS-GPS-705J: Navstar GPS Space Segment/User Segment L5 Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-705J.pdf), Aug 2022. [^GLONASS08]: Global Navigation Satellite System GLONASS. [Interface Control Document. Navigational radiosignal in bands L1, L2](http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf). Edition 5.1, Moscow, Russia, 2008. diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 56cb6351..414a3de7 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -1289,7 +1289,7 @@ deactivated with `rtcm_output_file_enabled=false`. [^Niell96]: A. E. Niell, [Global mapping functions for the atmosphere delay at radio wavelengths](https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/95JB03048), Journal of Geophysical Research: Solid Earth, Volume 101, Issue B2 10, Feb. 1996, pp. 3227-3246. -[^ISGPS200]: Global Positioning System Directorate, [Interface Specification IS-GPS-200M: Navstar GPS Space Segment/Navigation User Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf), May 2021. +[^ISGPS200]: Global Positioning System Directorate, [Interface Specification IS-GPS-200N: Navstar GPS Space Segment/Navigation User Interfaces](https://www.gps.gov/technical/icwg/IS-GPS-200N.pdf), August 2022. [^MOPS]: RTCA/DO‐229C, [Minimum operational performance standards for global positioning system/wide area augmentation system airborne equipment](https://standards.globalspec.com/std/1014192/rtca-do-229), RTCA Inc., December 13, 2006. From de01543949b6ce3f621c0f8e2185e8bf34c8277e Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 13:15:17 +0200 Subject: [PATCH 13/24] Update GPS ICD version --- _posts/2016-07-08-gnss-signals.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2016-07-08-gnss-signals.md b/_posts/2016-07-08-gnss-signals.md index ae224673..d5c58a2e 100644 --- a/_posts/2016-07-08-gnss-signals.md +++ b/_posts/2016-07-08-gnss-signals.md @@ -102,7 +102,7 @@ denying non–U.S. military users) are sequences of $$ 7 $$ days in length. Regarding the modernization plans for GPS, it is worthwhile to mention that there is a new civilian–use signal planned, called L1C and defined in -IS-GPS-800D[^ISGPS800], to be broadcast on the same L1 frequency that currently +IS-GPS-800J[^ISGPS800], to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C signal will be available with first Block III launch, currently scheduled for May 2018 by SpaceX, and it will feature a Multiplexed Binary Offset Carrier (MBOC) modulation scheme that ensures backward @@ -117,7 +117,7 @@ of the respective ranging codes as needed to protect users from receiving and utilizing anomalous signals. These "incorrect" codes are termed non-standard $$ L1C_P $$ (NSCP) and non-standard $$ L1C_D $$ (NSCD). Non-standard codes are not for utilization by the users and, therefore, -are not defined in IS-GPS-800D. +are not defined in IS-GPS-800J. ![Spectra GPS Signals L1]({{ "/assets/images/Spectra_GPS_Signals_L1.png" | relative_url }}){: .align-center .invert-colors} _GPS signals spectra in L1. Source: [Navipedia](https://gssc.esa.int/navipedia/index.php/GPS_Signal_Plan)_. From 6e304d1c04a4a2c041689198f8c026a39a5d2a43 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 13:17:58 +0200 Subject: [PATCH 14/24] Update date --- _posts/2016-07-08-gnss-signals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2016-07-08-gnss-signals.md b/_posts/2016-07-08-gnss-signals.md index d5c58a2e..faf0decb 100644 --- a/_posts/2016-07-08-gnss-signals.md +++ b/_posts/2016-07-08-gnss-signals.md @@ -12,7 +12,7 @@ sidebar: toc: true toc_sticky: true show_date: false -last_modified_at: 2022-05-13T08:37:02+02:00 +last_modified_at: 2023-08-21T08:37:02+02:00 --- From 63ae677234f92659e1715ae6fefed338c198f8b4 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 13:27:19 +0200 Subject: [PATCH 15/24] Remove unused images --- assets/images/logo-nsl.jpg | Bin 42221 -> 0 bytes assets/images/logo-xilinx.png | Bin 6781 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 assets/images/logo-nsl.jpg delete mode 100644 assets/images/logo-xilinx.png diff --git a/assets/images/logo-nsl.jpg b/assets/images/logo-nsl.jpg deleted file mode 100644 index fd46ea08d23558dc43110f8e0f48e58a48b809de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42221 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 z zPqF2{D_*+sqqgbczf%iFxs>qru-_(vRWv+^E4TN=xqY-+b#N+q=Z{vI1_i4Gf#u?7 z##8-PGd0E`7E7NZ28-Um5k=5F<F--4ofVAXZL0N`|k%rPH;c?qqS4KT>B zN8EUqZ+x)Am2a|S>N?tniEAqs2WDS5`T6SagG;o7>#5h$mlW;+nQXYBN0*k1 zZSE8^9Pht4hRp!{{GVU6@0jLk-qw%$iOmH?{CiXq9nb{>1AkDZL>M&YprO<_8d8N? zD?3w^S;n>l4^aRv%n;TOT+UXL1^CTX9)*|(m#+~ET7bajpC}(03+q}2Q@R7sXZQov zECQV!0$t>s{9S+#5JUnZAtoUy27#E|yC-+=ft;j_h=hckgam)bkm>(n@b+=`a1Hza V8B7)eRsaT&mYTk54b=YW{{YP4J#+v7 From f7e36466dde064be780ba5a88b1abb7f1ceee4e9 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 13:58:44 +0200 Subject: [PATCH 16/24] Update urls from cttc.es to cttc.cat --- _posts/2017-01-03-cross-compiling-gnss-sdr.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/_posts/2017-01-03-cross-compiling-gnss-sdr.md b/_posts/2017-01-03-cross-compiling-gnss-sdr.md index 6ef384e9..4a647ea2 100644 --- a/_posts/2017-01-03-cross-compiling-gnss-sdr.md +++ b/_posts/2017-01-03-cross-compiling-gnss-sdr.md @@ -13,7 +13,7 @@ sidebar: toc: true toc_sticky: true show_date: false -last_modified_at: 2022-03-25T02:11:02+02:00 +last_modified_at: 2023-08-21T02:11:02+02:00 --- An **embedded system** is defined as a computer system with a specific function @@ -24,9 +24,9 @@ at the price of limited processing resources. This page is devoted to the development cycle for building and executing GNSS-SDR in an embedded computer. In this example, we are working with a -[Zedboard](https://www.xilinx.com/products/boards-and-kits/1-elhabt.html) (a -development board that ships a [Xilinx -Zynq-7000](https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html) +[Zedboard](https://www.xilinx.com/video/soc/zedboard-overview-featuring-zynq.html) +(a development board that ships a [Xilinx +Zynq-7000](https://www.xilinx.com/video/soc/xilinx-arm-zynq-7000-all-programmable-soc.html) all-programmable [SoC](https://en.wikipedia.org/wiki/System_on_a_chip), which houses two ARM and one FPGA processor in a single chip), but this procedure is applicable to other embedded platforms without much modification. @@ -77,19 +77,19 @@ right-click on the SDK link and choose "Save link as ...". -| Yocto version | SDK version | Download | Size | MD5 checksum | Manifest | -|:-|:-:|:-:|:-:|:-|:-:| -| Gatesgarth | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/gatesgarth-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.sh"} | 2.13 GB | b71e8608d246fc2bf1d8e0535e0b0c1d | [Host](https://sites.cttc.es/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.target.manifest) | -| Dunfell | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/dunfell-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.sh"} | 2.14 GB | 93b54c322c6595c09278216972bfca04 | [Host](https://sites.cttc.es/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.target.manifest) | -| Zeus | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/zeus-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.sh"} | 2.04 GB | 8c201b971d541596f3f21a52cc0849e3 | [Host](https://sites.cttc.es/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.target.manifest) | -| Warrior | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/warrior-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.sh"} | 2.10 GB | 931fa513cc26c268b25b6bfd4e12de2e | [Host](https://sites.cttc.es/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.target.manifest) | -| Thud | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/thud-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.sh"} | 2.06 GB | 79f00e47ba437fb73afaf4937dbea3d8 | [Host](https://sites.cttc.es/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.target.manifest) | -| Sumo | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/sumo-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.sh"} | 1.54 GB | 118968d0194718ccdbdff8122eea210d | [Host](https://sites.cttc.es/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.target.manifest) | -| Rocko | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/rocko-21.08) | [SDK](https://sites.cttc.es/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.sh"} | 1.24 GB | 12d1eb7fb3a2446e03325ddb12adf4c4 | [Host](https://sites.cttc.es/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.target.manifest) | -| Pyro | Abandoned | [SDK](https://sites.cttc.es/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 1.1 GB | 8ce7c2a732884e5487f592ae102780f1 | [Host](https://sites.cttc.es/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | -| Morty | Abandoned | [SDK](https://sites.cttc.es/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 1.0 GB | b2eb36d4ef2838586afa1bc6b44dc0f4 | [Host](https://sites.cttc.es/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | -| Krogoth | Abandoned | [SDK](https://sites.cttc.es/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 920 MB | 16af7ab553a0c8f553ba4d6ccc5d6bfe | [Host](https://sites.cttc.es/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | -| Jethro | Abandoned | [SDK](https://sites.cttc.es/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.sh"} | 1.6 GB | d0419e9c1e0894a327af4d9560cf0294 | [Host](https://sites.cttc.es/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.es/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.target.manifest) | +| Yocto version | SDK version | Download | Size | MD5 checksum | Manifest | +| :------------ | :---------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----: | :------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| Gatesgarth | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/gatesgarth-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.sh"} | 2.13 GB | b71e8608d246fc2bf1d8e0535e0b0c1d | [Host](https://sites.cttc.cat/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Gatesgarth/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-gatesgarth-21.08.0.target.manifest) | +| Dunfell | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/dunfell-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.sh"} | 2.14 GB | 93b54c322c6595c09278216972bfca04 | [Host](https://sites.cttc.cat/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Dunfell/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-dunfell-21.08.0.target.manifest) | +| Zeus | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/zeus-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.sh"} | 2.04 GB | 8c201b971d541596f3f21a52cc0849e3 | [Host](https://sites.cttc.cat/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Zeus/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-zeus-21.08.0.target.manifest) | +| Warrior | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/warrior-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.sh"} | 2.10 GB | 931fa513cc26c268b25b6bfd4e12de2e | [Host](https://sites.cttc.cat/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Warrior/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-warrior-21.08.0.target.manifest) | +| Thud | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/thud-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.sh"} | 2.06 GB | 79f00e47ba437fb73afaf4937dbea3d8 | [Host](https://sites.cttc.cat/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Thud/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-thud-21.08.0.target.manifest) | +| Sumo | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/sumo-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.sh"} | 1.54 GB | 118968d0194718ccdbdff8122eea210d | [Host](https://sites.cttc.cat/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Sumo/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-sumo-21.08.0.target.manifest) | +| Rocko | [v21.08](https://github.com/carlesfernandez/oe-gnss-sdr-manifest/releases/tag/rocko-21.08) | [SDK](https://sites.cttc.cat/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.sh){:download="geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.sh"} | 1.24 GB | 12d1eb7fb3a2446e03325ddb12adf4c4 | [Host](https://sites.cttc.cat/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Rocko/geniux-x86_64-gnss-sdr-dev-image-zedboard-zynq7-toolchain-rocko-21.08.0.target.manifest) | +| Pyro | Abandoned | [SDK](https://sites.cttc.cat/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 1.1 GB | 8ce7c2a732884e5487f592ae102780f1 | [Host](https://sites.cttc.cat/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Pyro/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | +| Morty | Abandoned | [SDK](https://sites.cttc.cat/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 1.0 GB | b2eb36d4ef2838586afa1bc6b44dc0f4 | [Host](https://sites.cttc.cat/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Morty/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | +| Krogoth | Abandoned | [SDK](https://sites.cttc.cat/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh"} | 920 MB | 16af7ab553a0c8f553ba4d6ccc5d6bfe | [Host](https://sites.cttc.cat/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Krogoth/oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.target.manifest) | +| Jethro | Abandoned | [SDK](https://sites.cttc.cat/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.sh){:download="oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.sh"} | 1.6 GB | d0419e9c1e0894a327af4d9560cf0294 | [Host](https://sites.cttc.cat/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.host.manifest), [Target](https://sites.cttc.cat/gnss_files/SDK/Jethro/oecore-x86_64-armv7ahf-vfp-neon-toolchain-nodistro.0.target.manifest) | Releases are listed from the most recent (top) to the oldest (bottom). All the From 91acb69c0ef919091c88f12ada8fb4d79ffca878 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 21 Aug 2023 14:12:02 +0200 Subject: [PATCH 17/24] Update URLs --- _pages/publications.md | 2 +- .../2013-02-01-google-summer-code-2013-ideas-list.md | 2 +- _posts/2016-06-23-using-git.md | 2 +- _posts/2016-07-08-gnss-signals.md | 2 +- _quick-start/01-quick-start-guide.md | 2 +- _sp-blocks/12-pvt.md | 10 +++++----- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/_pages/publications.md b/_pages/publications.md index 63a8e53f..ee088b00 100644 --- a/_pages/publications.md +++ b/_pages/publications.md @@ -470,7 +470,7 @@ note = {doi: 10.1007/978-981-15-3715-8} Cork, Ireland, 31 Aug. / 3 Sept., 2020. pp. 1-4.
[BibTeX] - [Online ] + [Online ]

@inproceedings{ Calvo20,
diff --git a/_posts/2013-02-01-google-summer-code-2013-ideas-list.md b/_posts/2013-02-01-google-summer-code-2013-ideas-list.md
index 64e94173..de600023 100644
--- a/_posts/2013-02-01-google-summer-code-2013-ideas-list.md
+++ b/_posts/2013-02-01-google-summer-code-2013-ideas-list.md
@@ -13,7 +13,7 @@ redirect_from:
   - /node/52
 ---
 
-[Global Navigation Satellite System (GNSS)](https://en.wikipedia.org/wiki/Satellite_navigation) is the general concept used to identify those systems that allow user positioning based on a constellation of satellites. Specific GNSS are the well-known American [GPS](https://www.gps.gov/), the Russian [GLONASS](https://www.glonass-iac.ru/en/), or the forthcoming European [Galileo](https://www.gsc-europa.eu/galileo/what-is-galileo) and Chinese [BeiDou](http://www.beidou.gov.cn/). Governments around the World are spending billions of dollars of tax payers' money in building and maintaining an infrastructure with explicitly free civilian usage. However, users only have access to a small fraction of the full capability of GNSS in terms of accuracy, robustness and reliability of the provided service at a reasonable cost. Professional, full-featured receivers are expensive, and even in those cases the users have limited access (if any) to know exactly how position and time information were computed.
+[Global Navigation Satellite System (GNSS)](https://en.wikipedia.org/wiki/Satellite_navigation) is the general concept used to identify those systems that allow user positioning based on a constellation of satellites. Specific GNSS are the well-known American [GPS](https://www.gps.gov/), the Russian [GLONASS](https://glonass-iac.ru/en/about_glonass/), or the forthcoming European [Galileo](https://www.gsc-europa.eu/galileo/what-is-galileo) and Chinese [BeiDou](http://www.beidou.gov.cn/). Governments around the World are spending billions of dollars of tax payers' money in building and maintaining an infrastructure with explicitly free civilian usage. However, users only have access to a small fraction of the full capability of GNSS in terms of accuracy, robustness and reliability of the provided service at a reasonable cost. Professional, full-featured receivers are expensive, and even in those cases the users have limited access (if any) to know exactly how position and time information were computed.
 
 Some commercial, industrial and scientific applications of GNSS signals and data require non-standard features of the receiver. Access to intermediate signals is not possible in mass-market receivers, and professional equipment is costly and often a ‘black box’ that does not offer exact information about how signals are being processed. Since all the processing is done in [ASICs](https://en.wikipedia.org/wiki/Application-specific_integrated_circuit) or [SoCs](https://en.wikipedia.org/wiki/System_on_a_chip), one cannot change the implementation of a certain functional block and assess the impact of that change on the whole receiver performance.
 
diff --git a/_posts/2016-06-23-using-git.md b/_posts/2016-06-23-using-git.md
index 86555b49..c450ec26 100644
--- a/_posts/2016-06-23-using-git.md
+++ b/_posts/2016-06-23-using-git.md
@@ -54,7 +54,7 @@ learning curve, but it worth it. A good reference is the freely available [Git
 Pro book](https://git-scm.com/book/en/v2), but there are plenty of good Git
 tutorials out there. If you have never used it, start from the [Git
 Basics](https://git-scm.com/book/en/v2/Getting-Started-Git-Basics) or this [free
-online course](https://lab.github.com/githubtraining/introduction-to-github).
+online course](https://github.com/skills/introduction-to-github).
 
 
 ## Git branches in GNSS-SDR
diff --git a/_posts/2016-07-08-gnss-signals.md b/_posts/2016-07-08-gnss-signals.md
index faf0decb..3906b9aa 100644
--- a/_posts/2016-07-08-gnss-signals.md
+++ b/_posts/2016-07-08-gnss-signals.md
@@ -218,7 +218,7 @@ ascending node. Eight satellites are equally spaced in each plane with $$ 45^o $
 argument of latitude. Moreover, the orbital planes have an argument of latitude
 displacement of $$ 15^o $$ relative to each other. The current constellation
 status can be checked at the Russian [Information and Analysis Center for
-Positioning, Navigation and Timing website](https://www.glonass-iac.ru/en/).
+Positioning, Navigation and Timing website](https://glonass-iac.ru/en/about_glonass/).
 
 The ground control segment of GLONASS is almost entirely located within former
 Soviet Union territory, except for a station in Brasilia, Brazil. The Ground
diff --git a/_quick-start/01-quick-start-guide.md b/_quick-start/01-quick-start-guide.md
index 02fe5d26..aab3b4be 100644
--- a/_quick-start/01-quick-start-guide.md
+++ b/_quick-start/01-quick-start-guide.md
@@ -18,7 +18,7 @@ The name is not a bragging display of creativity:
   encompasses those systems that allow users to compute their position based on
   signals transmitted by satellites, world-wide. The obvious example is
   [GPS](https://www.gps.gov/), but this term also includes other systems such as
-  [GLONASS](https://www.glonass-iac.ru/en/),
+  [GLONASS](https://glonass-iac.ru/en/about_glonass/),
   [Galileo](https://www.gsc-europa.eu/galileo/what-is-galileo), and
   [BeiDou](http://en.beidou.gov.cn/).
 
diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md
index 414a3de7..311ce79f 100644
--- a/_sp-blocks/12-pvt.md
+++ b/_sp-blocks/12-pvt.md
@@ -987,12 +987,12 @@ messages, v3.2. A TCP/IP server of RTCM messages can be enabled by setting
 the execution of the software receiver. By default, the server will operate on
 port 2101 (which is the recommended port for RTCM services 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")), and will identify the Reference
-Station with ID= $$ 1234 $$. These values can be changed with
+[IANA](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
+"Service Name and Transport Protocol Port Number Registry")), and will identify
+the Reference Station with ID= $$ 1234 $$. These values can be changed with
 `PVT.rtcm_tcp_port` and `PVT.rtcm_station_id`. The rate of the generated RTCM
-messages can be tuned with the options `PVT.rtcm_MT1045_rate_ms` (it defaults to $$
-5000 $$ ms), `PVT.rtcm_MT1019_rate_ms` (it defaults to $$ 5000 $$ ms),
+messages can be tuned with the options `PVT.rtcm_MT1045_rate_ms` (it defaults to
+$$ 5000 $$ ms), `PVT.rtcm_MT1019_rate_ms` (it defaults to $$ 5000 $$ ms),
 `PVT.rtcm_MSM_rate_ms` (it defaults to $$ 1000 $$ ms). The RTCM messages can
 also be forwarded to the serial port `PVT.rtcm_dump_devname` (it defaults to
 `/dev/pts/1`) by setting `PVT.flag_rtcm_tty_port=true` in the configuration

From 1df68a76a14b6409bb86eed853d6060724752c9a Mon Sep 17 00:00:00 2001
From: Carles Fernandez 
Date: Wed, 13 Sep 2023 11:49:10 +0200
Subject: [PATCH 18/24] Document TelemetryDecoder_1B.use_reduced_ced parameter

---
 _sp-blocks/10-telemetry-decoder.md | 203 +++++++++++++++--------------
 1 file changed, 102 insertions(+), 101 deletions(-)

diff --git a/_sp-blocks/10-telemetry-decoder.md b/_sp-blocks/10-telemetry-decoder.md
index d3104775..c7e50e52 100644
--- a/_sp-blocks/10-telemetry-decoder.md
+++ b/_sp-blocks/10-telemetry-decoder.md
@@ -6,7 +6,7 @@ sidebar:
   nav: "sp-block"
 toc: true
 toc_sticky: true
-last_modified_at: 2022-02-09T10:54:02+02:00
+last_modified_at: 2023-09-13T10:54:02+02:00
 ---
 
 
@@ -72,17 +72,17 @@ satellite.
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `GPS_L1_CA_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `GPS_L1_CA_Telemetry_Decoder`                                                                                                                                                                                                                                                                                  |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`GPS_L1_CA_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -146,18 +146,19 @@ coding are applied to the Galileo message data stream:
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `Galileo_E1B_Telemetry_Decoder` | Mandatory |
-| `enable_reed_solomon` |  [`true`, `false`]: If set to `true`, it enables the FEC2 Erasure Correction defined for the Galileo E1B INAV message at [OS ICD v2.0](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf). It defaults to `false`. | Optional |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                                                          | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `Galileo_E1B_Telemetry_Decoder`                                                                                                                                                                                                                                                                                                                          |  Mandatory   |
+|   `enable_reed_solomon`   | [`true`, `false`]: If set to `true`, it enables the FEC2 Erasure Correction defined for the Galileo E1B INAV message at [OS ICD v2.0](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_OS_SIS_ICD_v2.0.pdf). It defaults to `false`.                                                                                                |   Optional   |
+|     `use_reduced_ced`     | [`true`, `false`]: If set to `true`, it enables the use of the reduced CED parameters transmitted in Galileo E1B INAV message. It defaults to `false`.  This configuration parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. |   Optional   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                                                                         |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                                                                    |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                                                                         |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`.                                           |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                                                              |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                                                                      |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`Galileo_E1B_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -192,17 +193,17 @@ $$ D_{\text{I/NAV}} \in \{1, -1 \} $$ navigation message in its Inphase componen
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `Galileo_E5b_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `Galileo_E5b_Telemetry_Decoder`                                                                                                                                                                                                                                                                                |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`Galileo_E5b_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -267,17 +268,17 @@ parameters.
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `GLONASS_L1_CA_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `GLONASS_L1_CA_Telemetry_Decoder`                                                                                                                                                                                                                                                                              |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
 _Telemetry Decoder implementation:_ **`GLONASS_L1_CA_Telemetry_Decoder`**.
 {: style="text-align: center;"}
@@ -296,17 +297,17 @@ TelemetryDecoder_1G.dump=false
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `GLONASS_L2_CA_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `GLONASS_L2_CA_Telemetry_Decoder`                                                                                                                                                                                                                                                                              |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`GLONASS_L2_CA_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -351,17 +352,17 @@ _GPS L2 CNAV message structure. Source: [Navipedia](https://gssc.esa.int/naviped
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `GPS_L2C_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `GPS_L2C_Telemetry_Decoder`                                                                                                                                                                                                                                                                                    |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`GPS_L2C_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -405,17 +406,17 @@ _GPS L5 CNAV message structure. Source: [Navipedia](https://gssc.esa.int/naviped
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `GPS_L5_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `GPS_L5_Telemetry_Decoder`                                                                                                                                                                                                                                                                                     |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`GPS_L5_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -460,17 +461,17 @@ This implementation accepts the following parameters:
 
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `Galileo_E5a_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `Galileo_E5a_Telemetry_Decoder`                                                                                                                                                                                                                                                                                |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`Galileo_E5a_Telemetry_Decoder`**.
   {: style="text-align: center;"}
@@ -504,17 +505,17 @@ T_{c,E6B}=\frac{1}{5.115} $$ $$\mu $$s.
 This implementation accepts the following parameters:
 
 |----------
-|  **Parameter**  |  **Description** | **Required** |
-|:-:|:--|:-:|
-|--------------
-| `implementation` | `Galileo_E6_Telemetry_Decoder` | Mandatory |
-| `dump` |  [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`. | Optional |
-| `dump_filename` |  If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added). | Optional |
-| `dump_mat` |  [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`. | Optional |
-| `remove_dat` |  [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats` | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`. | Optional |
-| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number. | Optional |
-|--------------
+|       **Parameter**       | **Description**                                                                                                                                                                                                                                                                                                | **Required** |
+| :-----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: |
+|      --------------       |
+|     `implementation`      | `Galileo_E6_Telemetry_Decoder`                                                                                                                                                                                                                                                                                 |  Mandatory   |
+|          `dump`           | [`true`, `false`]: If set to `true`, it enables the Telemetry Decoder internal binary data file logging (see section Binary Output down below for details). It defaults to `false`.                                                                                               |   Optional   |
+|      `dump_filename`      | If `dump` is set to `true`, base name of the files in which internal data will be stored. It defaults to `./telemetry`, so files will be named `./telemetryN`, where `N` is the channel number (automatically added).                                                                                          |   Optional   |
+|        `dump_mat`         | [`true`, `false`]: If `dump` is set to `true`, the binary output is converted to `.mat` format, readable from Matlab7octave and Python, at the end of the receiver execution. By default, it is set to the same value as `dump`.                                                                               |   Optional   |
+|       `remove_dat`        | [`true`, `false`]: If `dump=true` and `dump_mat` is not set, or set to `true`, then this parameter controls if the internal `.dat` binary file is removed after conversion to `.mat`, leaving a cleaner output if the user is not interested in the `.dat` file. By default, this parameter is set to `false`. |   Optional   |
+|     `dump_crc_stats`      | [`true`, `false`]: If set to `true`, the success rate of the CRC check when decoding navigation messages is reported in a file generated at the end of the processing (or when exiting with `q` + `[Enter]`). By default, this parameter is set to `false`.                                                    |   Optional   |
+| `dump_crc_stats_filename` | If `dump_crc_stats=true`, this parameter sets the base name of the files in which the CRC success rate is reported. It defaults to `telemetry_crc_stats`, so files named `telemetry_crc_stats_chN.txt` will be created, with `N` in `chN` being the channel number.                                            |   Optional   |
+|      --------------       |
 
   _Telemetry Decoder implementation:_ **`Galileo_E6_Telemetry_Decoder`**.
   {: style="text-align: center;"}

From 4857165a1d008c1baf07999a48bfd99ee628527c Mon Sep 17 00:00:00 2001
From: Carles Fernandez 
Date: Thu, 21 Sep 2023 08:33:00 +0200
Subject: [PATCH 19/24] Add reflectometry paper

---
 _pages/publications.md | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/_pages/publications.md b/_pages/publications.md
index ee088b00..9ee3c256 100644
--- a/_pages/publications.md
+++ b/_pages/publications.md
@@ -16,6 +16,35 @@ List of academic papers in which GNSS-SDR has been referenced, described or used
 
 

Articles in peer-reviewed, indexed Journals and Magazines

+ +
    + +
  • + N. Varais, J. Verdun, J. Cali and L. Lestarquit +
    Lake Altimetry Using Long Coherent Integration Carrier Phase Measurements from Airborne GNSS Reflectometry
    + Remote Sensing, Vol. 15, 4192, pp. 1-17, Sept. 2023. +
    + [BibTeX] + [Online ] + [ ] +

    +
    +
    @article{ Varais23,
    +author  = {N.~Varais and J.~Verdun and J.~Cali and L.~Lestarquit},
    +title   = {Lake Altimetry Using Long Coherent Integration Carrier Phase Measurements from Airborne {GNSS} Reflectometry},
    +journal = {Remote Sensing},
    +year    = {2023},
    +month   = {Sep},
    +volume  = {15},
    +number  = {4192},
    +pages   = {1--17},
    +note    = { {doi}: 10.3390/rs15174192}
    +}
    +
    +
  • +
+ +
  • From 275152b66f02353f21e7bafa92e4e4430ce3ca9b Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Thu, 21 Sep 2023 08:44:41 +0200 Subject: [PATCH 20/24] Document utc_time field in the monitor_pvt structure --- _sp-blocks/12-pvt.md | 65 ++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 311ce79f..df49af07 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -6,7 +6,7 @@ sidebar: nav: "sp-block" toc: true toc_sticky: true -last_modified_at: 2023-07-10T09:54:02+02:00 +last_modified_at: 2023-09-21T07:54:02+02:00 --- The _PVT_ block is the last one in the GNSS-SDR flow graph. Hence, it acts as a @@ -1017,38 +1017,39 @@ Java, Python, C#, Dart, Go, or Ruby, among other languages, hence enhancing The following table shows the complete list of streamed parameters: |---------- -| **Name** | **Type** | **Description** | -| :------------------------: | :--------: | :------------------------------------------------------------------------- | +| **Name** | **Type** | **Description** | +| :------------------------: | :--------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | -| `tow_at_current_symbol_ms` | `uint32_t` | Time of week of the current symbol, in [ms]. | -| `week` | `uint32_t` | PVT GPS week. | -| `rx_time` | `double` | PVT GPS time. | -| `user_clk_offset` | `double` | User clock offset, in [s]. | -| `pos_x` | `double` | Position X component in ECEF, expressed in [m]. | -| `pos_y` | `double` | Position Y component in ECEF, expressed in [m]. | -| `pos_z` | `double` | Position Z component in ECEF, expressed in [m]. | -| `vel_x` | `double` | Velocity X component in ECEF, expressed in [m/s]. | -| `vel_y` | `double` | Velocity Y component in ECEF, expressed in [m/s]. | -| `vel_z` | `double` | Velocity Z component in ECEF, expressed in [m/s]. | -| `cov_xx` | `double` | Position variance in the X component, $$ \sigma_{xx}^2 $$, in [$$ m^2 $$]. | -| `cov_yy` | `double` | Position variance in the Y component, $$ \sigma_{yy}^2 $$, in [$$ m^2 $$]. | -| `cov_zz` | `double` | Position variance in the X component, $$ \sigma_{zz}^2 $$, in [$$ m^2 $$]. | -| `cov_xy` | `double` | Position XY covariance $$ \sigma_{xy}^2 $$, in [$$ m^2 $$]. | -| `cov_yz` | `double` | Position YZ covariance $$ \sigma_{yz}^2 $$, in [$$ m^2 $$]. | -| `cov_zx` | `double` | Position ZX covariance $$ \sigma_{zx}^2 $$, in [$$ m^2 $$]. | -| `latitude` | `double` | Latitude, in [deg]. Positive: North. | -| `longitude` | `double` | Longitude, in [deg]. Positive: East. | -| `height` | `double` | Height, in [m]. | -| `valid_sats` | `uint32_t` | Number of valid satellites. | -| `solution_status` | `uint32_t` | RTKLIB solution status. | -| `solution_type` | `uint32_t` | RTKLIB solution type (`0`: xyz-ecef, `1`: enu-baseline). | -| `ar_ratio_factor` | `float` | Ambiguity resolution ratio factor for validation. | -| `ar_ratio_threshold` | `float` | Ambiguity resolution ratio threshold for validation. | -| `gdop` | `double` | Geometric dilution of precision (GDOP). | -| `pdop` | `double` | Position (3D) dilution of precision (PDOP). | -| `hdop` | `double` | Horizontal dilution of precision (HDOP). | -| `vdop` | `double` | Vertical dilution of precision (VDOP). | -| `user_clk_drift_ppm` | `double` | User clock drift, in parts per million. | +| `tow_at_current_symbol_ms` | `uint32_t` | Time of week of the current symbol, in [ms]. | +| `week` | `uint32_t` | PVT GPS week. | +| `rx_time` | `double` | PVT GPS time. | +| `user_clk_offset` | `double` | User clock offset, in [s]. | +| `pos_x` | `double` | Position X component in ECEF, expressed in [m]. | +| `pos_y` | `double` | Position Y component in ECEF, expressed in [m]. | +| `pos_z` | `double` | Position Z component in ECEF, expressed in [m]. | +| `vel_x` | `double` | Velocity X component in ECEF, expressed in [m/s]. | +| `vel_y` | `double` | Velocity Y component in ECEF, expressed in [m/s]. | +| `vel_z` | `double` | Velocity Z component in ECEF, expressed in [m/s]. | +| `cov_xx` | `double` | Position variance in the X component, $$ \sigma_{xx}^2 $$, in [$$ m^2 $$]. | +| `cov_yy` | `double` | Position variance in the Y component, $$ \sigma_{yy}^2 $$, in [$$ m^2 $$]. | +| `cov_zz` | `double` | Position variance in the X component, $$ \sigma_{zz}^2 $$, in [$$ m^2 $$]. | +| `cov_xy` | `double` | Position XY covariance $$ \sigma_{xy}^2 $$, in [$$ m^2 $$]. | +| `cov_yz` | `double` | Position YZ covariance $$ \sigma_{yz}^2 $$, in [$$ m^2 $$]. | +| `cov_zx` | `double` | Position ZX covariance $$ \sigma_{zx}^2 $$, in [$$ m^2 $$]. | +| `latitude` | `double` | Latitude, in [deg]. Positive: North. | +| `longitude` | `double` | Longitude, in [deg]. Positive: East. | +| `height` | `double` | Height, in [m]. | +| `valid_sats` | `uint32_t` | Number of valid satellites. | +| `solution_status` | `uint32_t` | RTKLIB solution status. | +| `solution_type` | `uint32_t` | RTKLIB solution type (`0`: xyz-ecef, `1`: enu-baseline). | +| `ar_ratio_factor` | `float` | Ambiguity resolution ratio factor for validation. | +| `ar_ratio_threshold` | `float` | Ambiguity resolution ratio threshold for validation. | +| `gdop` | `double` | Geometric dilution of precision (GDOP). | +| `pdop` | `double` | Position (3D) dilution of precision (PDOP). | +| `hdop` | `double` | Horizontal dilution of precision (HDOP). | +| `vdop` | `double` | Vertical dilution of precision (VDOP). | +| `user_clk_drift_ppm` | `double` | User clock drift, in parts per million. | +| `utc_time` | `string` | PVT UTC time ([RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) datetime string). This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | | -------------- |   From 4e27a2f5cf12c940ce371a3c80b098d143ce5252 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sun, 1 Oct 2023 08:51:29 +0200 Subject: [PATCH 21/24] Add new parameters to the custom output stream --- _sp-blocks/12-pvt.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index df49af07..9bc74188 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -6,7 +6,7 @@ sidebar: nav: "sp-block" toc: true toc_sticky: true -last_modified_at: 2023-09-21T07:54:02+02:00 +last_modified_at: 2023-10-01T07:54:02+02:00 --- The _PVT_ block is the last one in the GNSS-SDR flow graph. Hence, it acts as a @@ -1050,6 +1050,10 @@ The following table shows the complete list of streamed parameters: | `vdop` | `double` | Vertical dilution of precision (VDOP). | | `user_clk_drift_ppm` | `double` | User clock drift, in parts per million. | | `utc_time` | `string` | PVT UTC time ([RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) datetime string). This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_e` | `double` | East component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_n` | `double` | North component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_u` | `double` | Up component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `cog` | `double` | Course Over Ground, in degrees. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | | -------------- |   From f300f6c2c423944bcf5f184c968d918cddc6466a Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sun, 1 Oct 2023 08:53:20 +0200 Subject: [PATCH 22/24] Update gems --- Gemfile.lock | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6a230128..2269eee7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,14 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.0.7) + activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) + base64 (0.1.1) coffee-script (2.4.1) coffee-script-source execjs @@ -24,13 +25,13 @@ GEM ffi (>= 1.15.0) eventmachine (1.2.7) eventmachine (1.2.7-x64-mingw32) - execjs (2.8.1) - faraday (2.7.10) + execjs (2.9.1) + faraday (2.7.11) + base64 faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) - ffi (1.15.5) - ffi (1.15.5-x64-mingw32) + ffi (1.16.2) forwardable-extended (2.6.0) gemoji (3.0.1) github-pages (228) @@ -212,7 +213,7 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.19.0) + minitest (5.20.0) nokogiri (1.15.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) From 2719cdd2e48050cc105d198d4604111fecbfe819 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Thu, 5 Oct 2023 14:02:21 +0200 Subject: [PATCH 23/24] Update custom streaming docs --- _sp-blocks/12-pvt.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/_sp-blocks/12-pvt.md b/_sp-blocks/12-pvt.md index 9bc74188..c8efcdf7 100644 --- a/_sp-blocks/12-pvt.md +++ b/_sp-blocks/12-pvt.md @@ -6,7 +6,7 @@ sidebar: nav: "sp-block" toc: true toc_sticky: true -last_modified_at: 2023-10-01T07:54:02+02:00 +last_modified_at: 2023-10-05T07:54:02+02:00 --- The _PVT_ block is the last one in the GNSS-SDR flow graph. Hence, it acts as a @@ -1049,11 +1049,13 @@ The following table shows the complete list of streamed parameters: | `hdop` | `double` | Horizontal dilution of precision (HDOP). | | `vdop` | `double` | Vertical dilution of precision (VDOP). | | `user_clk_drift_ppm` | `double` | User clock drift, in parts per million. | -| `utc_time` | `string` | PVT UTC time ([RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) datetime string). This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | -| `vel_e` | `double` | East component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | -| `vel_n` | `double` | North component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | -| `vel_u` | `double` | Up component of the velocity in the local ENU frame, in m/s. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | -| `cog` | `double` | Course Over Ground, in degrees. This parameter is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `utc_time` | `string` | PVT UTC time ([RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) datetime string). This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_e` | `double` | East component of the velocity in the local ENU frame, in m/s. This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_n` | `double` | North component of the velocity in the local ENU frame, in m/s. This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `vel_u` | `double` | Up component of the velocity in the local ENU frame, in m/s. This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `cog` | `double` | Course Over Ground, in degrees. This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `galhas_status` | `uint32_t` | Galileo HAS status (0: not available; 1: HAS corrections applied). This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | +| `geohash` | `string` | [Encoded geographic location](https://en.wikipedia.org/wiki/Geohash). This metric is only present on the `next` branch of the upstream repository, and it will be included in the next stable release of GNSS-SDR. | | -------------- |   From 2f2b6a23180bf58601aa662e262c6a46092a4672 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Thu, 5 Oct 2023 14:03:51 +0200 Subject: [PATCH 24/24] Update gems --- Gemfile.lock | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2269eee7..0890d79f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,14 +1,20 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.0.8) + activesupport (7.1.0) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) base64 (0.1.1) + bigdecimal (3.1.4) coffee-script (2.4.1) coffee-script-source execjs @@ -16,8 +22,11 @@ GEM colorator (1.1.0) commonmarker (0.23.10) concurrent-ruby (1.2.2) + connection_pool (2.4.1) dnsruby (1.70.0) simpleidn (~> 0.2.1) + drb (2.1.1) + ruby2_keywords em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -31,7 +40,8 @@ GEM faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) - ffi (1.16.2) + ffi (1.16.3) + ffi (1.16.3-x64-mingw32) forwardable-extended (2.6.0) gemoji (3.0.1) github-pages (228) @@ -214,9 +224,12 @@ GEM jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) minitest (5.20.0) + mutex_m (0.1.2) nokogiri (1.15.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) + nokogiri (1.15.4-x64-mingw32) + racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) sawyer (~> 0.9) @@ -253,6 +266,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) + unf_ext (0.0.8.2-x64-mingw32) unicode-display_width (1.8.0) webrick (1.8.1) @@ -275,4 +289,4 @@ DEPENDENCIES webrick (~> 1.7) BUNDLED WITH - 2.3.17 + 2.3.6