1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-11-04 17:16:26 +00:00

Merge branch 'readme' into next

Improve Markdown formatting, add a CI job to check it.
This commit is contained in:
Carles Fernandez 2020-02-28 07:52:11 +01:00
commit fc88f5fa88
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
15 changed files with 2478 additions and 1462 deletions

View File

@ -1,5 +1,7 @@
:+1::tada: Hello, and thanks for contributing to [GNSS-SDR](https://gnss-sdr.org)! :tada::+1: :+1::tada: Hello, and thanks for contributing to
[GNSS-SDR](https://gnss-sdr.org)! :tada::+1:
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
@ -7,13 +9,36 @@ SPDX-License-Identifier: GPL-3.0-or-later
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
Before submitting your pull request, please make sure the following is done: Before submitting your pull request, please make sure the following is done:
1. You undertake the [Contributor Covenant Code of Conduct](https://github.com/gnss-sdr/gnss-sdr/blob/master/CODE_OF_CONDUCT.md).
2. If you are a first-time contributor, after your pull request you will be asked to sign an Individual Contributor License Agreement ([CLA](https://en.wikipedia.org/wiki/Contributor_License_Agreement)) before your code gets accepted into `master`. This license is for your protection as a Contributor as well as for the protection of [CTTC](http://www.cttc.es/); it does not change your rights to use your own contributions for any other purpose. Except for the license granted therein to CTTC and recipients of software distributed by CTTC, you reserve all right, title, and interest in and to your contributions. The information you provide in that CLA will be maintained in accordance with [CTTC's privacy policy](http://www.cttc.es/privacy/). 1. You undertake the
3. You have read the [Contributing Guidelines](https://github.com/gnss-sdr/gnss-sdr/blob/master/CONTRIBUTING.md). [Contributor Covenant Code of Conduct](https://github.com/gnss-sdr/gnss-sdr/blob/master/CODE_OF_CONDUCT.md).
4. You have read the [coding style guide](https://gnss-sdr.org/coding-style/). Specifically, you have read [about clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting) and [about clang-tidy](https://gnss-sdr.org/coding-style/#use-code-linters), and you have applied those tools to your changes. 2. If you are a first-time contributor, after your pull request you will be
5. You have forked the [gnss-sdr upstream repository](https://github.com/gnss-sdr/gnss-sdr) and have created your branch from `next` (or any other currently living branch in the upstream repository). asked to sign an Individual Contributor License Agreement
([CLA](https://en.wikipedia.org/wiki/Contributor_License_Agreement)) before
your code gets accepted into `master`. This license is for your protection
as a Contributor as well as for the protection of
[CTTC](http://www.cttc.es/); it does not change your rights to use your own
contributions for any other purpose. Except for the license granted therein
to CTTC and recipients of software distributed by CTTC, you reserve all
right, title, and interest in and to your contributions. The information you
provide in that CLA will be maintained in accordance with
[CTTC's privacy policy](http://www.cttc.es/privacy/).
3. You have read the
[Contributing Guidelines](https://github.com/gnss-sdr/gnss-sdr/blob/master/CONTRIBUTING.md).
4. You have read the [coding style guide](https://gnss-sdr.org/coding-style/).
Specifically, you have read
[about clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting)
and [about clang-tidy](https://gnss-sdr.org/coding-style/#use-code-linters),
and you have applied those tools to your changes.
5. You have forked the
[gnss-sdr upstream repository](https://github.com/gnss-sdr/gnss-sdr) and
have created your branch from `next` (or any other currently living branch
in the upstream repository).
6. Please include a description of your changes here. 6. Please include a description of your changes here.
**Please feel free to delete this line and the above text once you have read it and in case you want to go on with your pull request, and explain your intend below.** **Please feel free to delete this line and the above text once you have read it
and in case you want to go on with your pull request, and explain your intend
below.**

View File

@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako python3-six run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako python3-six
- name: configure - name: configure
run: cd build && cmake -GNinja .. run: cd build && cmake -GNinja ..
@ -25,7 +25,7 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: brew install ninja pkg-config hdf5 armadillo lapack gflags glog gnuradio libmatio log4cpp pugixml protobuf && pip3 install mako && pip3 install six run: brew install ninja pkg-config hdf5 armadillo lapack gflags glog gnuradio libmatio log4cpp pugixml protobuf && pip3 install mako && pip3 install six
- name: configure - name: configure
run: cd build && cmake -GNinja .. run: cd build && cmake -GNinja ..
@ -41,7 +41,7 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: brew install llvm && ln -s /usr/local/opt/llvm/bin/clang-format /usr/local/bin run: brew install llvm && ln -s /usr/local/opt/llvm/bin/clang-format /usr/local/bin
- name: run clang-format - name: run clang-format
run: find . -iname \*.h -o -iname \*.c -o -iname \*.cpp -o -iname \*.hpp | xargs clang-format -style=file -i run: find . -iname \*.h -o -iname \*.c -o -iname \*.cpp -o -iname \*.hpp | xargs clang-format -style=file -i
@ -53,7 +53,7 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: brew install llvm pkg-config hdf5 armadillo lapack gflags glog gnuradio libmatio log4cpp pugixml protobuf && ln -s /usr/local/opt/llvm/bin/clang-tidy /usr/local/bin && ln -s /usr/local/Cellar/llvm/9.*/bin/clang-apply-replacements /usr/local/bin && cp /usr/local/Cellar/llvm/9.*/share/clang/run-clang-tidy.py /usr/local/bin && pip3 install mako && pip3 install six run: brew install llvm pkg-config hdf5 armadillo lapack gflags glog gnuradio libmatio log4cpp pugixml protobuf && ln -s /usr/local/opt/llvm/bin/clang-tidy /usr/local/bin && ln -s /usr/local/Cellar/llvm/9.*/bin/clang-apply-replacements /usr/local/bin && cp /usr/local/Cellar/llvm/9.*/share/clang/run-clang-tidy.py /usr/local/bin && pip3 install mako && pip3 install six
- name: Prepare run - name: Prepare run
run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.10.0 core_monitor pvt_libs run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.10.0 core_monitor pvt_libs
@ -67,12 +67,22 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: sudo apt-get install python3-pip && sudo pip3 install cpplint run: sudo apt-get install python3-pip && sudo pip3 install cpplint
- name: run checks - name: run checks
run: find ./src/ -iname *.h -o -iname *.cc | xargs cpplint --filter=-,+build/class,+build/c++14,+build/deprecated,+build/explicit_make_pair,+build/include_what_you_use,+build/printf_format,+build/storage_class,+readability/constructors,+readability/namespace,+readability/newline,+readability/utf8,+runtime/casting,+runtime/explicit,+runtime/indentation_namespace,+runtime/init,+runtime/invalid_increment,+runtime/member_string_references,+runtime/memset,+runtime/operator,+runtime/printf,+runtime/printf_format,+whitespace/blank_line,+whitespace/comma,+whitespace/comments,+whitespace/empty_conditional_body,+whitespace/end-of-line,+whitespace/ending-newline,+whitespace/semicolon,+whitespace/tab run: find ./src/ -iname *.h -o -iname *.cc | xargs cpplint --filter=-,+build/class,+build/c++14,+build/deprecated,+build/explicit_make_pair,+build/include_what_you_use,+build/printf_format,+build/storage_class,+readability/constructors,+readability/namespace,+readability/newline,+readability/utf8,+runtime/casting,+runtime/explicit,+runtime/indentation_namespace,+runtime/init,+runtime/invalid_increment,+runtime/member_string_references,+runtime/memset,+runtime/operator,+runtime/printf,+runtime/printf_format,+whitespace/blank_line,+whitespace/comma,+whitespace/comments,+whitespace/empty_conditional_body,+whitespace/end-of-line,+whitespace/ending-newline,+whitespace/semicolon,+whitespace/tab
prettier-markdown:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: install dependencies
run: sudo npm install --global prettier
- name: check markdown
run: find . -iname "*.md" | xargs prettier --parser markdown --print-width 80 --prose-wrap always --list-different
volk-gnsssdr-windows: volk-gnsssdr-windows:
runs-on: windows-latest runs-on: windows-latest
steps: steps:
@ -96,7 +106,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: sudo apt-get install build-essential python3-mako python3-six cmake run: sudo apt-get install build-essential python3-mako python3-six cmake
- name: configure - name: configure
run: cd build && cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr run: cd build && cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr
@ -112,7 +122,7 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: pip3 install mako && pip3 install six run: pip3 install mako && pip3 install six
- name: configure - name: configure
run: cd build && cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr run: cd build && cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr
@ -126,7 +136,7 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install-dependencies - name: install dependencies
run: pip3 install mako && pip3 install six run: pip3 install mako && pip3 install six
- name: configure - name: configure
run: cd build && cmake -GXcode ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr run: cd build && cmake -GXcode ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr

View File

@ -1,42 +1,44 @@
# Contributor Covenant Code of Conduct # Contributor Covenant Code of Conduct
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2017-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
## Our Pledge ## Our Pledge
In the interest of fostering an open and welcoming environment, we as In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience, size, disability, ethnicity, gender identity and expression, level of
nationality, personal appearance, race, religion, or sexual identity and experience, nationality, personal appearance, race, religion, or sexual identity
orientation. and orientation.
## Our Standards ## Our Standards
Examples of behavior that contributes to creating a positive environment Examples of behavior that contributes to creating a positive environment
include: include:
* Using welcoming and inclusive language - Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences - Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism - Gracefully accepting constructive criticism
* Focusing on what is best for the community - Focusing on what is best for the community
* Showing empathy towards other community members - Showing empathy towards other community members
Examples of unacceptable behavior by participants include: Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or - The use of sexualized language or imagery and unwelcome sexual attention or
advances advances
* Trolling, insulting/derogatory comments, and personal or political attacks - Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment - Public or private harassment
* Publishing others' private information, such as a physical or electronic - Publishing others' private information, such as a physical or electronic
address, without explicit permission address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a - Other conduct which could reasonably be considered inappropriate in a
professional setting professional setting
## Our Responsibilities ## Our Responsibilities
@ -45,11 +47,11 @@ Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior. response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or Project maintainers have the right and responsibility to remove, edit, or reject
reject comments, commits, code, wiki edits, issues, and other contributions comments, commits, code, wiki edits, issues, and other contributions that are
that are not aligned to this Code of Conduct, or to ban temporarily or not aligned to this Code of Conduct, or to ban temporarily or permanently any
permanently any contributor for other behaviors that they deem inappropriate, contributor for other behaviors that they deem inappropriate, threatening,
threatening, offensive, or harmful. offensive, or harmful.
## Scope ## Scope
@ -66,8 +68,9 @@ Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at carles.fernandez@cttc.es. All reported by contacting the project team at carles.fernandez@cttc.es. All
complaints will be reviewed and investigated and will result in a response that complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident. obligated to maintain confidentiality with regard to the reporter of an
Further details of specific enforcement policies may be posted separately. incident. Further details of specific enforcement policies may be posted
separately.
Project maintainers who do not follow or enforce the Code of Conduct in good Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other faith may face temporary or permanent repercussions as determined by other
@ -75,8 +78,9 @@ members of the project's leadership.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, This Code of Conduct is adapted from the [Contributor Covenant][homepage],
available at [https://contributor-covenant.org/version/1/4][version] version 1.4, available at
[https://contributor-covenant.org/version/1/4][version]
[homepage]: https://contributor-covenant.org [homepage]: https://contributor-covenant.org
[version]: https://contributor-covenant.org/version/1/4/ [version]: https://contributor-covenant.org/version/1/4/

View File

@ -1,5 +1,6 @@
# Contributing to GNSS-SDR # Contributing to GNSS-SDR
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
@ -7,90 +8,87 @@ SPDX-License-Identifier: GPL-3.0-or-later
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
:+1::tada: Thanks for taking the time to contribute! :tada::+1: :+1::tada: Thanks for taking the time to contribute! :tada::+1:
Third-party contributions are essential for keeping GNSS-SDR Third-party contributions are essential for keeping GNSS-SDR continuously
continuously improving. We simply cannot access the huge number of improving. We simply cannot access the huge number of platforms and myriad
platforms and myriad configurations for running GNSS-SDR. We want to configurations for running GNSS-SDR. We want to keep it as easy as possible to
keep it as easy as possible to contribute changes that get things contribute changes that get things working in your environment. There are a few
working in your environment. There are a few guidelines that we need guidelines that we need contributors to follow so that we can have a chance of
contributors to follow so that we can have a chance of keeping on top of keeping on top of things.
things.
The following is a set of guidelines for contributing to GNSS-SDR, which The following is a set of guidelines for contributing to GNSS-SDR, which is
is hosted in the [GNSS-SDR Organization](https://github.com/gnss-sdr) on hosted in the [GNSS-SDR Organization](https://github.com/gnss-sdr) on GitHub.
GitHub. These are just guidelines, not rules. Use your best judgment, These are just guidelines, not rules. Use your best judgment, and feel free to
and feel free to propose changes to this document in a [pull propose changes to this document in a
request](#how-to-submit-a-pull-request). [pull request](#how-to-submit-a-pull-request).
## Code of Conduct ## Code of Conduct
This project adheres to the Contributor Covenant [code of This project adheres to the Contributor Covenant
conduct](CODE_OF_CONDUCT.md). By participating, you are expected to [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to
uphold this code. Please report unacceptable behavior. uphold this code. Please report unacceptable behavior.
## Reporting an issue ## Reporting an issue
Have you found a bug in the code which is not in the [list of known Have you found a bug in the code which is not in the
bugs](https://github.com/gnss-sdr/gnss-sdr/issues)? Do you have a [list of known bugs](https://github.com/gnss-sdr/gnss-sdr/issues)? Do you have a
suggestion for improvement? Then by all means please [submit a new suggestion for improvement? Then by all means please
issue](https://github.com/gnss-sdr/gnss-sdr/issues/new), and do not [submit a new issue](https://github.com/gnss-sdr/gnss-sdr/issues/new), and do
hesitate to comment on existing [open not hesitate to comment on existing
issues](https://github.com/gnss-sdr/gnss-sdr/issues). [open issues](https://github.com/gnss-sdr/gnss-sdr/issues).
When filling a new issue, please remember to: When filling a new issue, please remember to:
* **Use a clear and descriptive title** for the issue to identify the - **Use a clear and descriptive title** for the issue to identify the problem.
problem.
* **Describe the exact steps which reproduce the problem** in as many - **Describe the exact steps which reproduce the problem** in as many details as
details as possible. For example, start by describing your computing possible. For example, start by describing your computing platform (Operating
platform (Operating System and version, how did you installed GNSS-SDR System and version, how did you installed GNSS-SDR and its dependencies, what
and its dependencies, what file or front-end are you using as a signal file or front-end are you using as a signal source, etc.). You can also
source, etc.). You can also include the configuration file you are include the configuration file you are using, or a dump of the terminal output
using, or a dump of the terminal output you are getting. The more you are getting. The more information you provide, the more chances to get
information you provide, the more chances to get useful answers. useful answers.
* **Please be patient**. This organization is run on a volunteer basis, - **Please be patient**. This organization is run on a volunteer basis, so it
so it can take some time to the Developer Team to reach your issue. can take some time to the Developer Team to reach your issue. They will do
They will do their best to fix it as soon as possible. their best to fix it as soon as possible.
* If you opened an issue that is now solved, it is a good practice to - If you opened an issue that is now solved, it is a good practice to **close
**close it**. it**.
The list of [open issues](https://github.com/gnss-sdr/gnss-sdr/issues)
can be a good starting point and a source of ideas if you are looking to
contribute to the source code.
The list of [open issues](https://github.com/gnss-sdr/gnss-sdr/issues) can be a
good starting point and a source of ideas if you are looking to contribute to
the source code.
## Contributing to the source code ## Contributing to the source code
### Preliminaries ### Preliminaries
1. If you still have not done so, [create your personal account on 1. If you still have not done so,
GitHub](https://github.com/join). [create your personal account on GitHub](https://github.com/join).
2. [Fork GNSS-SDR from 2. [Fork GNSS-SDR from GitHub](https://github.com/gnss-sdr/gnss-sdr/fork). This
GitHub](https://github.com/gnss-sdr/gnss-sdr/fork). This will copy the will copy the whole gnss-sdr repository to your personal account.
whole gnss-sdr repository to your personal account.
3. Then, go to your favorite working folder in your computer and 3. Then, go to your favorite working folder in your computer and clone your
clone your forked repository by typing (replacing ```YOUR_USERNAME``` by forked repository by typing (replacing `YOUR_USERNAME` by the actual
the actual username of your GitHub account): username of your GitHub account):
$ git clone https://github.com/YOUR_USERNAME/gnss-sdr $ git clone https://github.com/YOUR_USERNAME/gnss-sdr
4. Your forked repository https://github.com/YOUR_USERNAME/gnss-sdr 4. Your forked repository https://github.com/YOUR_USERNAME/gnss-sdr will
will receive the default name of `origin`. You can also add the original receive the default name of `origin`. You can also add the original gnss-sdr
gnss-sdr repository, which is usually referred to as `upstream`: repository, which is usually referred to as `upstream`:
$ cd gnss-sdr $ cd gnss-sdr
$ git remote add upstream https://github.com/gnss-sdr/gnss-sdr.git $ git remote add upstream https://github.com/gnss-sdr/gnss-sdr.git
To verify the new upstream repository you have specified for your fork, To verify the new upstream repository you have specified for your fork, type
type `git remote -v`. You should see the URL for your fork as `origin`, `git remote -v`. You should see the URL for your fork as `origin`, and the URL
and the URL for the original repository as `upstream`: for the original repository as `upstream`:
``` ```
$ git remote -v $ git remote -v
@ -102,33 +100,32 @@ upstream https://github.com/gnss-sdr/gnss-sdr.git (push)
### Start working on your contribution ### Start working on your contribution
Checkout the `next` branch of the git repository in order to get Checkout the `next` branch of the git repository in order to get synchronized
synchronized with the latest development code: with the latest development code:
``` ```
$ git checkout next $ git checkout next
$ git pull upstream next $ git pull upstream next
``` ```
When start working in a new improvement, please **always** branch off When start working in a new improvement, please **always** branch off from
from `next`. Open a new branch and start working on it: `next`. Open a new branch and start working on it:
``` ```
$ git checkout -b my_feature $ git checkout -b my_feature
``` ```
Now you can do changes, add files, do commits (please take a look at Now you can do changes, add files, do commits (please take a look at
[how to write good commit [how to write good commit messages](https://chris.beams.io/posts/git-commit/)!)
messages](https://chris.beams.io/posts/git-commit/)!) and push them to and push them to your repository:
your repository:
``` ```
$ git push origin my_feature $ git push origin my_feature
``` ```
If there have been new pushes to the `next` branch of the `upstream` If there have been new pushes to the `next` branch of the `upstream` repository
repository since the last time you pulled from it, you might want to put since the last time you pulled from it, you might want to put your commits on
your commits on top of them (this is mandatory for pull requests): top of them (this is mandatory for pull requests):
``` ```
$ git pull --rebase upstream next $ git pull --rebase upstream next
@ -136,55 +133,51 @@ $ git pull --rebase upstream next
### How to submit a pull request ### How to submit a pull request
Before submitting your code, please be sure to [apply clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting). Before submitting your code, please be sure to
[apply clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting).
When the contribution is ready, you can [submit a pull When the contribution is ready, you can
request](https://github.com/gnss-sdr/gnss-sdr/compare/). Head to your [submit a pull request](https://github.com/gnss-sdr/gnss-sdr/compare/). Head to
GitHub repository, switch to your `my_feature` branch, and click the your GitHub repository, switch to your `my_feature` branch, and click the
_**Pull Request**_ button, which will do all the work for you. Code _**Pull Request**_ button, which will do all the work for you. Code comparison
comparison must be always to the `next` branch. must be always to the `next` branch.
Once a pull request is sent, the Developer Team can review the set of Once a pull request is sent, the Developer Team can review the set of changes,
changes, discuss potential modifications, and even push follow-up discuss potential modifications, and even push follow-up commits if necessary.
commits if necessary.
Some things that will increase the chance that your pull request is Some things that will increase the chance that your pull request is accepted:
accepted:
* Avoid platform-dependent code. If your code require external - Avoid platform-dependent code. If your code require external dependencies,
dependencies, they must be available as packages in [Debian OldStable](https://wiki.debian.org/DebianOldStable). they must be available as packages in
* Write tests. [Debian OldStable](https://wiki.debian.org/DebianOldStable).
* Follow our [coding style guide](https://gnss-sdr.org/coding-style/). - Write tests.
- Follow our [coding style guide](https://gnss-sdr.org/coding-style/).
Specifically, please make sure that you have applied Specifically, please make sure that you have applied
[clang-format](https://clang.llvm.org/docs/ClangFormat.html) and [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and
[clang-tidy](https://clang.llvm.org/extra/clang-tidy/) to your changes before [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) to your changes before
you do your pull request. Please check the you do your pull request. Please check the
[final recommendations](https://gnss-sdr.org/coding-style/#final-recommendations) [final recommendations](https://gnss-sdr.org/coding-style/#final-recommendations)
for guidelines on how to apply those tools. for guidelines on how to apply those tools.
* Write a descriptive and detailed summary. Please consider that - Write a descriptive and detailed summary. Please consider that reviewing pull
reviewing pull requests is hard, so include as much information as requests is hard, so include as much information as possible to make your pull
possible to make your pull request's intent clear. request's intent clear.
For more details about Git usage, please check out [our
tutorial](https://gnss-sdr.org/docs/tutorials/using-git/).
For more details about Git usage, please check out
[our tutorial](https://gnss-sdr.org/docs/tutorials/using-git/).
## Contributing to the website ## Contributing to the website
The content of https://gnss-sdr.org lives in a GitHub repository at The content of https://gnss-sdr.org lives in a GitHub repository at
https://github.com/gnss-sdr/geniuss-place https://github.com/gnss-sdr/geniuss-place
You can fork that repository, reproduce the entire website on your You can fork that repository, reproduce the entire website on your computer
computer using [Jekyll](https://jekyllrb.com/), do changes and submit using [Jekyll](https://jekyllrb.com/), do changes and submit pull requests, just
pull requests, just as explained above. For more details, please check as explained above. For more details, please check out
out [how to contribute](https://gnss-sdr.org/contribute/). [how to contribute](https://gnss-sdr.org/contribute/).
Last but not the least, you can leave your comments on the website. Last but not the least, you can leave your comments on the website.
---
------
![GeNiuSS ![GeNiuSS
contributes](https://gnss-sdr.org/assets/images/geniuss-contribute.png) contributes](https://gnss-sdr.org/assets/images/geniuss-contribute.png)

1598
README.md

File diff suppressed because it is too large Load Diff

View File

@ -1,635 +0,0 @@
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez(at)cttc.es>
SPDX-License-Identifier: GPL-3.0-or-later
## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next)
### Improvements in Accuracy:
- Improved accuracy of the CN0 estimator.
### Improvements in Availability:
- Fixed computation of acquisition threshold when using the pfa configuration parameter, including non-coherent accumulation (max_dwells > 1).
### Improvements in Efficiency:
- Faster implementation of the Viterbi decoder for Galileo navigation messages.
- The -O3 flag is now passed to GCC in Release and RelWithDebInfo build types (instead of -O2), thus enabling tree vectorization. Disabled if building for Fedora or Gentoo.
### Improvements in Flexibility:
- New Tracking parameters allow the configuration of the C/N0 and lock detector smoothers, as well as the activation of the FLL in pull-in and steady state stages.
- Added new Tracking parameter carrier_aiding, allowing enabling/disabling of carrier aiding to the code tracking loop.
- New PVT parameter enable_rx_clock_correction allows to enable or disable the continuous application of the Time solution correction (clock steering) to the computation of Observables. By default is set to false (that is, disabled).
- New PVT parameter max_clock_offset_ms: if PVT.enable_rx_clock_correction is set to false, this parameter sets the maximum allowed local clock offset with respect to the Time solution. If the estimated offset exceeds this parameter, a clock correction is applied to the computation of Observables.
- Fixed L5 and E5a receiver chains when tracking the data component.
- Added new PVT parameter rinex_name to specify a custom name of the generated RINEX files. A commandline flag --RINEX_name is also available, and overrides the configuration.
### Improvements in Interoperability:
- Fixed PVT solution in receivers processing L1 plus L2C and/or L5 signals.
- Added carrier phase observable initialization to match the pseudorange length.
- Added RINEX files generation for triple-band configurations (L1 + L2C + L5 and L1 + E1 + L2C + L5 + E5a).
- Fixed bugs in the decoding of BeiDou navigation messages.
- Fixed bugs in the generation of RTCM messages.
- Fixed a bug in feeding Galileo channels' observations to RTKLIB, which was causing wrong date of PVT fixes in Galileo-only receivers and not considering Galileo observations in multi-constellation receivers when using signals after the GPS rollover on April 6, 2019.
- Improved management of devices with the AD9361 RF transceiver.
- Fixed bugs in FPGA off-loading.
### Improvements in Maintainability:
- Rewriting of acquisition and tracking adapters, thus avoiding a lot of code duplication.
- New CMake option ENABLE_ARMA_NO_DEBUG defines the macro ARMA_NO_DEBUG, which disables all run-time checks, such as bounds checking, in the Armadillo library. This will result in faster code. This option is disabled by default during development, but automatically set to ON if the option ENABLE_PACKAGING is set to ON.
- All shadowed variables detected by passing -Wshadow to the compiler have been fixed (see https://rules.sonarsource.com/cpp/RSPEC-1117?search=shadow).
- Apply more clang-tidy checks related to readability: readability-avoid-const-params-in-decls, readability-braces-around-statements, readability-isolate-declaration, readability-redundant-control-flow, readability-uppercase-literal-suffix. Fixed raised warnings.
- Fixed a number of defects detected by cpplint.py. Filters applied: +build/class,+build/c++14,+build/deprecated,+build/explicit_make_pair,+build/include_what_you_use,+build/printf_format,+build/storage_class,+readability/constructors,+readability/namespace,+readability/newline,+readability/utf8,+runtime/casting,+runtime/explicit,+runtime/indentation_namespace,+runtime/init,+runtime/invalid_increment,+runtime/member_string_references,+runtime/memset,+runtime/operator,+runtime/printf,+runtime/printf_format,+whitespace/blank_line.
- clang-format can now be applied to the whole code tree without breaking compilation.
- Added more check options to .clang-tidy file.
- Default Python version is now >= 3.4. Python 2.7 still can be used in systems where Python 3 is not available (e.g., CentOS 7, Debian 8, Ubuntu 10.04).
- CMake now passes the CMAKE_BUILD_TYPE (or configuration in multi-configuration generators like Xcode) to modules built along gnss-sdr (e.g, the volk_gnsssdr library and googletest). Build types available: None, Release (by default), Debug, RelWithDebInfo, MinSizeRel, Coverage, NoOptWithASM, O2WithASM, O3WithASM, ASAN.
- Updated links in comments along the source code and in CMake scripts.
- Update GSL implementation to 0.36.0. See https://github.com/gsl-lite/gsl-lite/releases/tag/v0.36.0
- Create a CI job in GitHub to ensure that clang-tidy has been applied in most of the source code (some optional blocks and tests are left apart).
- Create a CI job in GitHub to ensure that clang-format has been applied.
- Create a CI job in GitHub to ensure that cpplint filters have been applied.
- Create a CI job in GitHub to ensure compliance with REUSE Specification (see https://reuse.software)
### Improvements in Openness:
- Make software compliant with REUSE Specification Version 3.0 (see https://reuse.software/spec/).
### Improvements in Portability:
- The CMake scripts now find dependencies in Debian's riscv64 architecture.
- Enable AVX2 kernels of the volk_gnsssdr library when using the Clang compiler.
- Fixed building in some ARM-based devices. Now Clang and ARMClang can be used for native building.
- Added toolchain files for building gnss-sdr and the volk_gnsssdr library in several ARM processor architectures, including those in Raspberry Pi 3 and 4.
- The software can now be built using Xcode (passing -GXcode to CMake) without previous manual installation of volk_gnsssdr.
- The software can now be built using Xcode (passing -GXcode to CMake) without gflags, glog, matio, PugiXML, Protocol Buffers or googletest previously installed.
- Now the volk_gnsssdr library can be built on Microsoft Windows.
- Now the volk_gnsssdr library makes use of C11 aligned_alloc where available.
- Improved CMake script for cross-compilation and for the detection of AVX, AVX2 and NEON (v7 and v8) instructions.
- Fixed warnings raised by CMake 3.17.
### Improvements in Reliability:
- Decoding of navigation messages no longer rely on implementation defined behavior for shifting left a signed integer.
- Removed usage of functions with insecure API (e.g., strcpy, sprintf).
- New type alias volk_gnsssdr::vector allows both aligned memory allocation and automatic deallocation.
- Fixed a memory leak in the generation of Galileo PRN codes.
- Added clang-tidy checks clang-analyzer-security.*, clang-analyzer-optin.portability.UnixAPI clang-tidy checks. Fixed raised warnings.
- Fixed cpplint.py runtime/printf and runtime/explicit errors.
- All constructors callable with one argument are marked with the keyword explicit. See MISRA C++:2008, 12-1-3 - All constructors that are callable with a single argument of fundamental type shall be declared explicit.
### Improvements in Repeatability:
- Added the option to apply carrier smoothing of code pseudoranges with new Observables parameter enable_carrier_smoothing.
- Fixed normalization of DLL discriminator in BPSK modulations when the spacing between correlators was not 0.5.
### Improvements in Testability:
- Add receiver runtime to position_test report.
- Improvements in FPGA unit tests.
- Add new utility tool obsdiff to perform single and double differences computations from observation RINEX files. Requires GPSTk and Armadillo >= 9.800.
### Improvements in Usability:
- A new parameter allows to process raw sample files containing GPS L1 C/A signals dated before July 14, 2009.
- Improved DLL-PLL binary dump MATLAB/Octave plot script. Old versions removed.
- Simplified RTKLIB error log.
- Added a Python 3 plotting script to show relative performance of generic volk_gnsssdr kernels wrt SIMD fastest versions.
- Added reporting of velocity in the terminal.
- Added reporting of user clock drift estimation, in ppm, in the Pvt_Monitor and in internal logging (debug mode).
- Updated documentation generated by Doxygen, now the pdfmanual target works when using ninja.
- CMake now generates an improved summary of required/optional dependency packages found and enabled/disabled features, including the building system and GNSS-SDR, CMake and compiler versions. This info is also stored in a file called features.log in the building directory.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
## [0.0.11](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.11)
This release has several improvements in different dimensions, addition of new features and bug fixes:
### Improvements in Accuracy:
- Local clock correction based on PVT solution, allowing the delivery of continuous observables.
- Fix a bug in broadcast ionospheric parameters usage.
### Improvements in Availability:
- Improved mechanism for false lock detection in the Tracking loops.
- Fixed bug in Galileo INAV/FNAV message decoding when PLL is locked at 180 degrees, which prevented from correct navigation message decoding in some situations.
- Fixed bug that caused a random deadlock in the Observables block, preventing the computation of PVT fixes.
- Fixed PVT computation continuity through the TOW rollover.
- Improved signal acquisition and tracking mechanisms in high dynamic scenarios.
### Improvements in Efficiency:
- Added mechanism for assisted acquisition of signals on a secondary band when the primary has already been acquired. This allows a great reduction of the computational load in multi-frequency configurations.
- Tracking loops now perform bit synchronization, simplifying the decoding process in Telemetry blocks and FPGA-offloading.
- Improved preamble detection implementation in the decoding of navigation messages (acceleration by x1.6 on average per channel).
- Shortened Acquisition to Tracking transition time.
- Applied clang-tidy checks and fixes related to performance: performance-faster-string-find, performance-for-range-copy, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-inefficient-string-concatenation, performance-inefficient-vector-operation, performance-move-const-arg, performance-move-constructor-init, performance-noexcept-move-constructor, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, performance-unnecessary-value-param, readability-string-compare.
### Improvements in Flexibility:
- Rewritten Control Thread and GNSS flow graph for increased control of channels' status and smarter assignation of satellites in multi-band configurations.
- New Tracking parameters allow the configuration of PLL and DLL filters order.
- Added parameter to enable FLL during pull-in time.
- Configurable pull-in time in the Tracking loops.
### Improvements in Interoperability:
- Added the BeiDou B1I and B3I receiver chains.
- Fix bug in GLONASS dual frequency receiver.
- Added a custom UDP/IP output for PVT data streaming.
- Improved Monitor block with UDP/IP output for internal receiver's data streaming.
- Custom output formats described with .proto files, making easier to other applications reading them in a forward and backward-compatible fashion upon future format changes. New dependency: Protocol Buffers >= 3.0.0
- Fixes in RINEX generation: week rollover, annotations are not repeated anymore in navigation files. Parameter rinexnav_rate_ms has been removed, annotations are made as new ephemeris arrive.
- Fixes in RTCM messages generation: week rollover.
### Improvements in Maintainability:
- The internal communication mechanism based on gr::msg_queue has been replaced by a thread-safe, built-in asynchronous message passing system based on GNU Radio's Polymorphic Types. This change is backwards-compatible and prevents from a failure in case of a possible future deprecation or removal of the gr::msg_queue API.
- Deprecated boost::asio::io_service replaced by boost::asio::io_context if Boost > 1.65
- CMake turns all policies to ON according to the running version up to version 3.15.
- Usage of clang-tidy integrated into CMake scripts. New option -DENABLE_CLANG_TIDY=ON executes clang-tidy along with compilation. Requires clang compiler.
- Applied clang-tidy checks and fixes related to readability: readability-container-size-empty, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-named-parameter, readability-non-const-parameter, readability-string-compare.
- Improved includes selection following suggestions by include-what-you-use (see https://include-what-you-use.org/), allowing faster compiles, fewer recompiles and making refactoring easier.
- Massive reduction of warnings triggered by clang-tidy checks.
- Throughout code cleaning and formatting performed with automated tools in order to reduce future commit noise.
### Improvements in Portability:
- Added interfaces for FPGA off-loading in GPS L1 C/A, Galileo E1b/c, GPS L2C, GPS L5 and Galileo E5a receiver chains.
- CMake scripts now follow a modern approach (targets and properties) but still work with 2.8.12.
- Improvements for macOS users using Homebrew.
- The software builds against GNU Radio >= 3.7.3, including 3.8.0. Automatically detected, no user intervention is required.
- The volk_gnsssdr library can now be built without requiring Boost if the compiler supports C++17 or higher.
- The Boost Filesystem library is not anymore a required dependency in cases where it can be replaced by std::filesystem. Automatically detected, no user intervention is required.
- CMake scripts automatically select among C++11, C++14, C++17 or C++20 standards, the most recent as possible, depending on compiler and dependencies versions.
- Drawback in portability: Protocol Buffers >= 3.0.0 is a new required dependency.
### Improvements in Reliability:
- Included the Guidelines Support Library. General improvement of memory management, replacement of raw pointers by containers or smart pointers.
- Applied clang-tidy checks and fixes related to High Integrity C++: performance-move-const-arg, modernize-use-auto, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr, cert-dcl21-cpp, misc-new-delete-overloads, cert-dcl58-cpp, cert-err52-cpp, cert-err60-cpp, hicpp-exception-baseclass, hicpp-explicit-conversions.
- Fixed a number of defects detected by Coverity Scan (version June 2019).
### Improvements in Usability:
- The receiver now admits FPGA off-loading, allowing for real time operation in embedded systems at high sampling rates and high number of signals and channels per signal in multiple bands.
- Fixed program termination (avoiding hangs and segfaults in some platforms/configurations).
- The Labsat_Signal_Source now terminates the receiver's execution when the end of file(s) is reached. It now accepts LabSat 2 filenames and series of LabSat 3 files.
- Added configuration parameters to set the annotation rate in KML, GPX, GeoJSON and NMEA outputs, set by default to 1 s.
- New parameter PVT.show_local_time_zone displays time in the local time zone. Subject to the proper system configuration of the machine running the software receiver. This feature is not available in old compilers.
- CMake now generates a summary of required/optional dependency packages found and enabled/disabled features. This info is also stored in a file called features.log in the building directory.
- Improved information provided to the user in case of building configuration and runtime failures.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
## [0.0.10](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.10)
This release has several improvements in different dimensions, addition of new features and bug fixes:
### Improvements in Accuracy:
- Part of the RTKLIB core library has been integrated into GNSS-SDR. There is now a single PVT block implementation which makes use of RTKLIB to deliver PVT solutions, including Single and PPP navigation modes.
- Fixed CN0 estimation for other correlation times than 1 ms.
- Improved computation of tracking parameters and GNSS observables.
- Other minor bug fixes.
### Improvements in Availability:
- Internal Finite State Machines rewritten for improved continuity in delivering position fixes. This fixes a bug that was stalling the receiver after about six hours of continuous operation.
- Redesign of the time counter for enhanced continuity.
- Improved flow graph in multi-system configurations: the receiver does not get stalled anymore if no signal is found from the first system.
- Improved acquisition and tracking sensitivity.
- Added mechanisms for Assisted GNSS, thus shortening the Time-To-First-Fix. Provision of data via XML files or via SUPL v1.0. Documented at https://gnss-sdr.org/docs/sp-blocks/global-parameters/
- Other minor bug fixes.
### Improvements in Efficiency:
- Added the possibility of non-blocking acquisition, which works well when using real-time data from an RF front-end.
- Improved flow graph in multi-band configurations: satellites acquired in one band are immediately searched in others.
- Complex local codes have been replaced by real codes, alleviating the computational burden.
- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h
- Some AVX2 implementations added to the volk_gnsssdr library.
- Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator.
- Output printers can be shut down, with some savings in memory and storage requirements.
- A number of code optimizations here and there.
### Improvements in Flexibility:
- A number of new parameters have been exposed to the configuration system.
- Possibility to choose Pilot or Data component for tracking of GPS L5 and Galileo E5a signals.
- Enabled extended coherent integration times for signal tracking.
- Configurable coherent and/or non-coherent signal acquisition.
- Some configuration parameters can now be overridden by commandline flags for easier use in scripts.
### Improvements in Interoperability:
- Added the GPS L5 receiver chain.
- Added the GLONASS L1 SP receiver chain.
- Added the GLONASS L2 SP receiver chain.
- Improvements in the Galileo E5a and GPS L2C receiver chains.
- Updated list of available GNSS satellites.
- Added five more signal sources: "Fmcomms2_Signal_Source" (requires gr-iio), "Plutosdr_Signal Source" (requires gr-iio), "Spir_GSS6450_File_Signal_Source", "Labsat_Signal_Source" and "Custom_UDP_Signal_Source" (requires libpcap). Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/
- Improved support for BladeRF, HackRF and RTL-SDR front-ends.
- Added tools for the interaction with front-ends based on the AD9361 chipset.
- Intermediate results are now saved in MAT-file format (.mat), readable from Matlab/Octave and from Python via h5py.
- Added the GPX output format.
- Improvements in the generation of KML files.
- Improvements in the NMEA output. The receiver can produce GPGGA, GPRMC, GPGSA, GPGSV, GAGSA and GAGSV sentences.
- Improvements in the RTCM server stability.
- Improvements in the correctness of generated RINEX files.
- The receiver can read and make use of Galileo almanac XML files published by the European GNSS Service Centre at https://www.gsc-europa.eu/system-status/almanac-data
- Own-defined XML schemas for navigation data published at https://github.com/gnss-sdr/gnss-sdr/tree/next/docs/xml-schemas
- Added program rinex2assist to convert RINEX navigation files into XML files usable for Assisted GNSS. Only available building from source. See https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist
### Improvements in Maintainability:
- Setup of a Continuous Integration system that checks building and runs QA code in a wide range of GNU/Linux distributions (Arch Linux, CentOS, Debian, Fedora, OpenSUSE, Ubuntu) and releases. See https://gitlab.com/gnss-sdr/gnss-sdr
- Creation of multi-system processing blocks, drastically reducing code duplication and maintainability time.
- Automated code formatting with clang-format. This tool is widely available and easy to integrate into many code editors, and it also can be used from the command line. It cuts time spent on adhering to the project's code formatting style.
- Improvement in C++ usage: C-style casts have been replaced by C++ casts. C-style casts are difficult to search for. C++ casts provide compile time checking ability and express programmers' intent better, so they are safer and clearer.
- Improvement in C++ usage: The override special identifier is now used when overriding a virtual function. This helps the compiler to check for type changes in the base class, making the detection of errors easier.
- Improvement in C++ usage: A number of unused includes have been removed. Order of includes set to: local (in-source) headers, then library headers, then system headers. This helps to detect missing includes.
- Improvement in C++ usage: Enhanced const correctness. Misuses of those variables are detected by the compiler.
- Improved code with clang-tidy and generation of a compile_commands.json file containing the exact compiler calls for all translation units of the project in machine-readable form if clang-tidy is detected.
- Applied some style rules to CMake scripts.
- Minimal versions of dependencies identified and detected.
### Improvements in Portability:
- Several CMake scripts improvements, more verbose outputs in case of errors. Building configuration has been documented in https://gnss-sdr.org/docs/tutorials/configuration-options-building-time/
- Improved SDK for cross-compilation in embedded devices. Documented in https://gnss-sdr.org/docs/tutorials/cross-compiling/
- Improved control over minimum required versions for core dependencies.
- The software builds with C++11, C++14 and C++17 standards.
- The software can now be built using GCC >= 4.7.2 or LLVM/Clang >= 3.4.0 compilers on GNU/Linux, and with Clang/AppleClang on macOS.
- The Ninja build system can be used in replacement of make.
- The volk_gnsssdr library can be built using Python 2.7+ or Python 3.6+.
- The volk_gnsssdr library is now ready for AArch64 NEON instructions.
- Improved detection of required and optional dependencies in many GNU/Linux distributions and processor architectures.
- Improvement in C++ usage: The <ctime> library has been replaced by the more modern and portable <chrono> (except for the interaction with RTKLIB).
- Improvement in C++ usage: The <stdio.h> library has been replaced by the more modern and portable <fstream> for file handling.
- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., <cctype> instead of <ctype.h>, <cmath> instead of <math.h>).
- Fix compatibility with Boost 1.67 (closes Debian bug #911882 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911882)
- Fixes required by Debian packaging.
- Fixes required by Macports packaging.
- A downside in portability: BLAS and LAPACK libraries are now required even in ARM devices.
- A downside in portability: the matio library >= 1.5.3 is a new required dependency. If not found, it is downloaded and built automatically at building time, but this requires libtool, automake and hdf5 already installed in the system.
- A downside in portability: the PugiXML library is a new required dependency. If not found, it is downloaded and built automatically at building time.
### Improvements in Reliability:
- Introduced 3 new Input Filter implementations for pulsed and narrowband interference mitigation: `Pulse_Blanking_Filter`, `Notch_Filter` and `Notch_Filter_Lite`. Documented in https://gnss-sdr.org/docs/sp-blocks/input-filter/
- Improved flow graph stability.
- Introduction of high-integrity C++ practices into the source code and included in the coding style guide. See https://gnss-sdr.org/coding-style/
- Fixed a number of defects detected by Coverity Scan.
- Improvement of QA code and addition of a number of new tests. Documented at https://gnss-sdr.org/docs/tutorials/testing-software-receiver-2/
- Improvement in C++ usage: rand() function replaced by <random> library.
- Improvement in C++ usage: strlen and strncpy have been replaced by safer C++ counterparts.
- Improvement in C++ usage: Some destructors have been fixed, avoiding segmentation faults when exiting the program.
- Website switched from http to https. Links in the source tree switched when available.
### Improvements in Reproducibility:
- Setup of a Continuous Reproducibility system at GitLab for the automatic reproduction of experiments. The concept was introduced in https://ieeexplore.ieee.org/document/8331069/ Example added in the src/utils/reproducibility/ieee-access18/ folder.
- Fixes of Lintian warnings related to build reproducibility.
### Improvements in Scalability:
- Improvements in multi-system, multi-band receiver configurations. The receiver now accepts any number of channels and systems in the three available bands.
- All possible combinations of signals and integration times are now accepted by the Observables block.
### Improvements in Testability:
- Several Unit Tests added. Documentation of testing concepts and available tests at https://gnss-sdr.org/docs/tutorials/testing-software-receiver/
- New extra unit test AcquisitionPerformanceTest checks the performance of Acquisition blocks.
- New extra unit test TrackingPullInTest checks acquisition to tracking transition.
- New extra unit test HybridObservablesTest checks the generation of observables.
- Improved system testing: position_test accepts a wide list of parameters and can be used with external files.
- Receiver channels can now be fixed to a given satellite.
- Testing integrated in a Continuous Reproducibility system (see above).
- Improved CTest support in volk_gnsssdr.
### Improvements in Usability:
- All Observables block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
- All PVT block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a warning is provided to the user. The old name will be removed in future releases.
- Updated and improved online documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/
- Improved documentation of required dependency packages in several GNU/Linux distributions.
- Dump and output files can now be stored anywhere.
- Parameter names with the same role have been harmonized within different block implementations.
- Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree.
- Added colors to the commandline user interface.
- Updated manfiles.
- Updated examples of configuration files under the conf/ folder.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
## [0.0.9](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.9)
DOI: https://doi.org/10.5281/zenodo.291371
This release has several improvements, addition of new features and bug fixes in many dimensions:
### Improvements in Accuracy:
- Major rewriting in the generation of pseudoranges.
- Fixed bug in Galileo E5a/I codes.
- Fixed bug in Galileo E1 correlator spacing.
- Fixed bug that was causing errors in receivers above the troposphere.
- Fixed 16-bit complex resampler.
- Improved time tracking algorithm.
- Added Bancroft's algorithm implementation for PVT initialization.
### Improvements in Availability:
- Improved numerical stability of the PVT solution. The infamous bug that was causing apparently random error peaks has finally been fixed.
### Improvements in Efficiency:
- VOLK_GNSSSDR: Added NEON,AVX and unaligned protokernels for volk_gnsssdr_32f_index_max_32 kernel.
- VOLK_GNSSSDR: Added volk_gnsssdr-config-info to the list of generated executables.
### Improvements in Flexibility:
- Added maximum number of dwells in the Tong algorithm.
### Improvements in Interoperability:
- Added six new Galileo satellites: FM7, FM10, FM11, FM12, FM13, FM14.
- The Hybrid_Observables and Hybrid_PVT implementations can now handle more types of GNSS signals.
- The RINEX printer can now print L2C and E5a observables and navigation files, including multiband configurations.
- Added RTCM 3.2 output to more receiver configurations.
### Improvements in Maintainability:
- The VOLK_GNSSSDR library can now be built with Python 3. Switched dependencies for VOLK_GNSSDR: from (old, python2.7-only) python-cheetah templates to Python3 friendly python-mako and python-six. So, Python-cheetah dependency has been dropped, and python-mako and python-six have been added.
- If suitable versions of gflags, glog, armadillo or googletest are not found in the system, they will be downloaded and built at compile time (versions 2.2.0, 0.3.4, 7.600.2 and 1.8.0, respectively).
- Fixed more than 30 defects detected by Coverity Scan.
- Added CMake Python finder and module checker.
- Deleted files related to CPack.
- Fixes, updates and improvements in the documentation.
- Improvements in CMake scripts: General code cleaning and addition of comments. Improved user information in case of failure. Improved detection of dependencies in more processor architectures (e.g. aarch64).
### Improvements in Marketability:
- Reduced time from a commit to deployment (see virtualization mechanisms in Portability).
### Improvements in Portability:
- Now GNSS-SDR can be run in virtual environments through snap packages (see https://github.com/carlesfernandez/snapcraft-sandbox) and docker images (see https://github.com/carlesfernandez/docker-gnsssdr).
- Now GNSS-SDR is adapted to cross-compiling environments for embedded devices (see https://github.com/carlesfernandez/oe-gnss-sdr-manifest).
- BLAS and LAPACK libraries are no longer mandatory on ARM devices.
### Improvements in Scalability:
- Fixed bug in acquisition with rata rates higher than 16 Msps in 4ms code periods.
### Improvements in Testability:
- Major QA source code refactoring: they has been split into src/tests/unit-tests and src/tests/system-tests folders. They are optionally built with the ENABLE_UNIT_TESTING=ON (unit testing QA code), ENABLE_UNIT_TESTING_EXTRA=ON (unit tests that require extra files downloaded at configure time), ENABLE_SYSTEM_TESTING=ON (system tests, such as measurement of Time-To-First-Fix) and ENABLE_SYSTEM_TESTING_EXTRA=ON (extra system test requiring external tools, automatically downloaded and built at building time) configuration flags. The EXTRA options also download and build a custom software-defined signal generator and version 2.9 of GPSTk, if not already found on the system. Download and local link of version 2.9 can be forced by ENABLE_OWN_GPSTK=ON building configuration flag. Only ENABLE_UNIT_TESTING is set to ON by default.
- Unit tests added: CPU_multicorrelator_test and GPU_multicorrelator_test measure computer performance in multicorrelator setups.
- Unit tests added: GpsL1CADllPllTracking and GpsL1CATelemetryDecoderTest.
- System test added: ttff_gps_l1 performs a set of cold / assisted runs of the software receiver and computes statistics about the obtained Time To First Fix.
- System test added: obs_gps_l1_system_test uses an external software-defined signal generator to produce raw digital GNSS signal from a RINEX navigation file and a position (static or dynamic), processes it with GNSS-SDR, and then compares the RINEX observation file produced by the software receiver to that produced by the signal generator.
- Software Development Kit provided for embedded devices (see https://gnss-sdr.org/docs/tutorials/cross-compiling/).
### Improvements in Usability:
- Now the block factory automatically detects Channel input data type, so it is no longer required to specify Channel.input_type in the configuration. An error raises if Acquisition and Tracking Blocks are not configured with the same input data type.
- Block names changed from L2_M to L2C.
- Documentation available at https://gnss-sdr.org/docs/
- Improved tools for compilation, execution and testing in embedded devices.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
## [0.0.8](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.8)
DOI: https://doi.org/10.5281/zenodo.57022
This is a maintenance and bug fix release with no relevant new features with respect to v0.0.7. The main changes are:
- Fixed a bug that broke building when using latest VOLK release
- Updated PYBOMBS instructions
- Added Tests for FFT length
- Added Tests for CUDA-based tracking
- Added Tests for SIMD-based tracking
- Improved CUDA-based correlation.
- Updated documentation
- Fixed building in mips and powerpc architectures.
- gr-gn3s and gr-dbfcttc moved to its own repository.
- Improved package reproducibility
- VOLK_GNSSSDR: Fixed a bug in AVX2 puppet
- VOLK_GNSSSDR: can now be built using the C98 standard
- VOLK_GNSSSDR: Fixed a bug that broke building when linking to Boost in some configurations.
- VOLK_GNSSSDR: Added an option to trigger profiling at building time.
- VOLK_GNSSSDR: Fix the CMake-based check for posix_memalign.
## [0.0.7](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.7)
DOI: https://doi.org/10.5281/zenodo.51521
This release has several improvements, addition of new features and bug fixes:
- Improvements in receiver design: Internal block communication has been redesigned to accommodate the addition of new signals, and now upstream and downstream communication within blocks is implemented through the GNU Radio blocks asynchronous message passing system, leading to a more scalable, more robust and cleaner design.
- Improvements in receiver design: Correlators have been rewritten to take full advantage of VOLK and VOLK_GNSSSDR, and they are of general use for any tracking block. Their API now admit an arbitrary number of correlators, spaced in an arbitrary manner, in 16ic and 32fc versions.
- Improvements in receiver design: Block adapters are now all managed by smart pointers, ensuring better memory management.
- Improvements in processing speed: The VOLK_GNSSSDR library has been rewritten, following current VOLK standards and adding a number of new kernels. This approach addresses both efficiency and portability. Now the library provides the key kernels for GNSS signal processing in 16ic and 32fc versions, including SSE2, SSE3, SSE4.1, AVX, AV2 and NEON implementations. Please execute volk_gnsssdr_profile and volk_profile to use the fastest implementation for your host machine.
- New source block: Two_Bit_Packed_File_Signal_Source. This block takes 2 bit samples that have been packed into bytes or shorts as input and generates a byte for each sample.
- Fixes in SUPL assistance (supl.nokia.com removed).
- Improvements in acquisition: Added a non CFAR PCPS acquisition algorithm based on the estimation of the post correlation noise floor. If enabled as an option in the acquisition configuration, it allows setting more stable thresholds in the presence of non-gaussian front-end noise (which is the usual behavior of front-ends.)
- Fixes in acquisition: Fixed mismatch between the config files and the acquisition code in the specification of the IF. Fixed a bug in the length of the FFT of local codes.
- Improvements in tracking sensitivity: Added configuration option to customize the extension of the GPS L1 CA correlation length after bit synchronization (options are: [1,2,4,5,10,20] ms). Only available in the GPS_L1_CA_DLL_PLL_C_Aid_Tracking implementation.
- New tracking block introduced: GPS_L1_CA_DLL_PLL_C_Aid_Tracking is a GPS L1 C/A carrier PLL and code DLL with optional carrier-aid feedback. It is available in both 32 bits gr_complex input samples and in 16 bits short int complex samples. The gr_complex version has also the capability to extend the coherent correlation period from 1ms to 20ms using telemetry symbol synchronization.
- Increased resolution in CN0 estimator internal variables.
- Fixed a bug in computation of GPS L1 C/A carrier phase observable.
- Fixed a bug in the internal state machine that was blocking the receiver after a few hours of usage. Now the receiver can work continually (tested for more than one week, no known limit).
- New tracking block introduced: GPS_L1_CA_DLL_PLL_Tracking_GPU is a GPS L1 C/A carrier PLL and code DLL that uses the CUDA-compatible GPU to compute carrier wipe off and correlation operations, alleviating the CPU load.
- Obsolete/buggy blocks removed: GPS_L1_CA_DLL_FLL_PLL_Tracking, GPS_L1_CA_DLL_PLL_Optim_Tracking.
- Added a RTCM printer and TCP server in PVT blocks (still experimental). The receiver is now able to stream data in real time, serving RTCM 3.2 messages to multiple clients. For instance, it can act as a Ntrip Source feeding a Ntrip Server, or to be used as data input in RTKLIB, obtaining Precise Point Positioning fixes in real-time. The TCP port, Station ID, and rate of MT1019/MT1045 and MSM can be configured. GPS_L1_CA_PVT serves MT1019 (GPS Ephemeris) and MSM7 (MT1077, full GPS pseudoranges, phase ranges, phase range rates and CNR - high resolution) messages, while GALILEO_E1_PVT serves MT1045 (Galileo ephemeris) and MSM7 (MT1097, full Galileo pseudoranges, phase ranges, phase range rates and CNR - high resolution).
- Added a GeoJSON printer. Basic (least-squares) position fixes can be now also stored in this format, in addition to KML.
- Obsolete block removed: output filter.
- QA code migrated to the new asynchronous message passing system.
- Improvements in documentation: update of README.md file, addition of documentation for the VOLK_GNSSSDR library, updated links to new ICDs.
- Improvements in documentation: Satellite identification updated to current constellation status.
- Updated and cleaner console output. Now Galileo satellites have the E identifier in their PRN number.
- Several improvements in CMake scripts allow to build GNSS-SDR in Linux Debian (Jessie, Stretch and Sid), Ubuntu (from 12.04 to 16.04), including amd64, i386, armhf and arm64 architectures, and possibly in other GNU/Linux distributions, as well as in Mac OS X 10.9 to 10.11. It also works well with CMake 3.5 (some problems solved with VOLK_GNSSSDR as a sub-project).
- The software can link either against OpenSSL or against GnuTLS with openssl extensions, whatever it is available. This allows buildings in distributions such as Fedora or ArchLinux, while being compatible with binary distribution through Debian packages.
- Fixed a number of defects detected by Coverity Scan.
- Some fixes required by Debian licensing and packaging system.
- Added a CGRAN (https://www.cgran.org/) manifest
- Lots of code cleaning and fixes of typos and small bugs.
## [0.0.6](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.6)
This release has several improvements and bug fixes:
- Added initial support to multi-band, multi-source configurations (multiple signal sources and signal conditioners).
- Updated configuration files to new notation. Old and new configuration notations still compatible.
- Added skeleton for mixed (multi-frequency and multi-system) observables block.
- Faster local carrier update (25% of improvement).
- Added initial support to GPS L2C real time tracking and decoding of CNAV message with NSL STEREO v2, Fraunhofers Flexiband, and USRPx front-ends (the latter requiring external clock).
- Added initial support to select the frontend clock reference source in UHD signal source (i.e. internal or external clock reference).
- Added 2 bits complex file source for GNSS-SDR GSoC 2015 signal sampler designed by Ajith Peter.
- Added a new rtl_tcp signal source, remote access to RTL2832U-based dongles via TCP.
- Always build front-end-cal, a calibration tool for some DVB-T receivers based on the Realtek's RTL2832U chipset.
- Fixed bug in UTC time computation for GPS signals.
- Updated satellite identification for GPS and Galileo.
- Defined cbyte as a new input data type (std::complex<unsigned char>)
- Adding a new data_type_adapter, from interleaved short to std::complex<short>
- Adding a filter for complex short streams.
- Adding a fir_filter for std::complex<signed char> (aka cbyte). It converts the data type to floats, filters, and converts back to cbyte.
- Added a resampler for cbytes and cshorts.
- First working version of a GPS tracking block implementation using CUDA with multi-GPU device support.
- Updating RINEX obs header when leap second is available.
- Updating RINEX nav file when IONO and UTC data are available.
- Include Signal Strength Indicator in RINEX observable files.
- Tests fixed.
- Fixed more than 200 code defects detected by Coverity Scan.
- Updated documentation.
- Updated documentation and CMake scripts for the GN3S v2 driver (Linux-only)
- Armadillo version automatically downloaded and built if it is not present in the system is now 5.400.3.
- Updated old links from googlecode to new links at GitHub for Google Test, gflags, glog and gperftools.
- gfortran is no longer a required package, but it is used if available.
- Added an option to remove logging.
- Enabled cross-compilation for ARM devices.
- Lots of code cleaning.
## [0.0.5](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.5)
This release has several improvements and bug fixes:
- Now GNSS-SDR can be installed on the system with the usual cmake ../ && make && sudo make install.
- Added volk_gnsssdr library, a volk-like library implementing some specific kernels and ensuring portable executables. It comes with a volk_gnsssdr_profile executable, in the fashion of volk_profile. Volk and volk_gnsssdr are compatible and can be mixed together. This is expected to enable faster execution of the software receiver in upcoming versions.
- The former rtlsdr_signal_source has been replaced by a more general osmosdr_signal_source compatible with all those front-ends accessible by the OsmoSDR driver (bladeRF, hackRF, etc.) in addition to RTL-based dongles.
- Added manpages when binaries gnss-sdr, volk_gnsssdr_profile and front-end-cal are installed.
- Now GNSS-SDR can be built on i386, amd64, armhf, armel and arm64 architectures.
- Now GNSS-SDR builds on Ubuntu 14.04 and 14.10, Debian jessie/sid and Mac OS X 10.9 and 10.10.
- Improved detection of dependencies, specially when installed as .deb packages.
- Added a check' target with some minimal tests.
- Added support for interleaved I/Q byte-size sample files.
- Minor bug fixes, updated documentation and code cleaning.
## [0.0.4](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.4)
This release has several improvements and bug fixes:
- Added hybrid processing GPS L1 C/A and Galileo E1B, providing position fixes make use of observables for both constellations.
- Added implementations of the QuickSync algorithm for GPS L1 C/A and Galileo E1 acquisition.
- Added processing blocks for Galileo E5a: Acquisition, Tracking, Telemetry_Decoder (experimental)
- New configuration files allow to configure GPS and Galileo channels in the same receiver.
- Added tropospheric corrections to GPS and Galileo PVT solution.
- Improved precision obtained by changing some variables from float to double.
- New building options: ENABLE_GN3S, ENABLE_RTLSDR and ENABLE_ARRAY and ENABLE_OPENCL.
- Improved documentation on how to enable optional drivers.
- Fixed bug in memory alignment that caused problems with high data rates.
- Added ENABLE_GENERIC_ARCH, an option to build the binary without detecting the SIMD instruction set present in the compiling machine, so it can be executed in other machines without those specific sets.
- Added ENABLE_GPERFTOOLS, which links the executable to tcmalloc and profiler if Gperftools is available on the system.
- Added carrier phase, Doppler shift and signal strength observables to the RINEX files. Static PPP solutions are available for GPS with RTKLIB via RINEX files.
- The executable now produces RINEX files version 3.02 of Galileo Observables, Navigation data, and mixed (GPS/Galileo) observables and nav data. RINEX 3.02 is the default version of RINEX files.
- Armadillo version updated to 4.400.2
- Armadillo now uses OpenBLAS instead of BLAS if the former is available on the system.
- Some raw pointers have been changed to smart pointers.
- Minor bug fixes and code cleaning.
## [0.0.3](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.3)
This release has several improvements and bug fixes, completing the transition from Subversion to Git. The main changes are:
- Created some missing directories lost in the SVN to Git transition.
- New C++11-ized block factory, flow graph and tests, resulting in better memory management and fewer segmentation faults. Several raw pointers converted to smart pointers.
- Reorganization of assistance data input and output.
- Fixed memory leak when talking to SUPL servers.
- Improved retrieval of assistance data.
- Fixing an error in a constant value related to Galileo.
- Inform users if the temporal folder is not /tmp.
- Fixes and additions to the documentation.
- README in markdown language so it looks better in Git repositories.
- Fixed a bug that prevented the update of all shared map structures (ephemeris, iono parameters, etc…).
- The configuration script now throws error if GCC is older than 4.7 or Boost is older than 1.45
- Improved detection / downloading & building if missing of Gflags and Glog.
- Improved detection / downloading & building if missing of Armadillo and related dependencies.
- Fixes many warnings that appeared when using CMake 3.0.
- Improved detection of GTEST_DIR variable.
- Include header files in libraries so IDEs such as Xcode can display them.
Enjoy it!

937
docs/changelog.md Normal file
View File

@ -0,0 +1,937 @@
<!-- prettier-ignore-start -->
[comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later
)
[comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
)
<!-- prettier-ignore-end -->
## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next)
### Improvements in Accuracy:
- Improved accuracy of the CN0 estimator.
### Improvements in Availability:
- Fixed computation of acquisition threshold when using the `Acquisition_XX.pfa`
configuration parameter, including non-coherent accumulation
(`Acquisition_XX.max_dwells` > 1).
### Improvements in Efficiency:
- Faster implementation of the Viterbi decoder for Galileo navigation messages.
- The `-O3` flag is now passed to GCC in `Release` and `RelWithDebInfo` build
types (instead of `-O2`), thus enabling tree vectorization. Disabled if
building for Fedora or Gentoo.
### Improvements in Flexibility:
- New Tracking parameters allow the configuration of the C/N0 and lock detector
smoothers, as well as the activation of the FLL in pull-in and steady state
stages.
- Added new Tracking parameter `Tracking_XX.carrier_aiding`, allowing
enabling/disabling of carrier aiding to the code tracking loop.
- New PVT parameter `PVT.enable_rx_clock_correction` allows to enable or disable
the continuous application of the Time solution correction (clock steering) to
the computation of Observables. By default is set to `false` (that is,
disabled).
- New PVT parameter `PVT.max_clock_offset_ms`: if
`PVT.enable_rx_clock_correction` is set to `false`, this parameter sets the
maximum allowed local clock offset with respect to the Time solution. If the
estimated offset exceeds this parameter, a clock correction is applied to the
computation of Observables.
- Fixed L5 and E5a receiver chains when tracking the data component.
- Added new PVT configuration parameter `PVT.rinex_name` to specify a custom
name of the generated RINEX files. A commandline flag `--RINEX_name` is also
available, and overrides the configuration.
### Improvements in Interoperability:
- Fixed PVT solution in receivers processing L1 plus L2C and/or L5 signals.
- Added carrier phase observable initialization to match the pseudorange length.
- Added RINEX files generation for triple-band configurations (L1 + L2C + L5 and
L1 + E1 + L2C + L5 + E5a).
- Fixed bugs in the decoding of BeiDou navigation messages.
- Fixed bugs in the generation of RTCM messages.
- Fixed a bug in feeding Galileo channels' observations to RTKLIB, which was
causing wrong date of PVT fixes in Galileo-only receivers and not considering
Galileo observations in multi-constellation receivers when using signals after
the GPS rollover on April 6, 2019.
- Improved management of devices with the AD9361 RF transceiver.
- Fixed bugs in FPGA off-loading.
### Improvements in Maintainability:
- Rewriting of acquisition and tracking adapters, thus avoiding a lot of code
duplication.
- New CMake option `-DENABLE_ARMA_NO_DEBUG` defines the macro `ARMA_NO_DEBUG`,
which disables all run-time checks, such as bounds checking, in the Armadillo
library. This will result in faster code. This option is disabled by default
during development, but automatically set to `ON` if the option
`ENABLE_PACKAGING` is set to `ON`.
- All shadowed variables detected by passing `-Wshadow` to the compiler have
been fixed (see https://rules.sonarsource.com/cpp/RSPEC-1117?search=shadow and
MISRA C++:2008, 2-10-2 - Identifiers declared in an inner scope shall not hide
an identifier declared in an outer scope).
- Apply more clang-tidy checks related to readability:
`readability-avoid-const-params-in-decls`,
`readability-braces-around-statements`, `readability-isolate-declaration`,
`readability-redundant-control-flow`, `readability-uppercase-literal-suffix`.
Fixed raised warnings.
- Fixed a number of defects detected by `cpplint.py`. Filters applied:
`+build/class`, `+build/c++14`, `+build/deprecated`,
`+build/explicit_make_pair`, `+build/include_what_you_use`,
`+build/printf_format`, `+build/storage_class`, `+readability/constructors`,
`+readability/namespace`, `+readability/newline`, `+readability/utf8`,
`+runtime/casting`, `+runtime/explicit`, `+runtime/indentation_namespace`,
`+runtime/init`, `+runtime/invalid_increment`,
`+runtime/member_string_references`, `+runtime/memset`, `+runtime/operator`,
`+runtime/printf`, `+runtime/printf_format`, `+whitespace/blank_line`.
- `clang-format` can now be applied to the whole code tree without breaking
compilation.
- Added more check options to `.clang-tidy` file.
- Default Python version is now >= 3.4. Python 2.7 still can be used in systems
where Python 3 is not available (e.g., CentOS 7, Debian 8, Ubuntu 10.04).
- CMake now passes the `-DCMAKE_BUILD_TYPE` (or configuration in
multi-configuration generators like Xcode) to modules built along gnss-sdr
(e.g, the volk_gnsssdr library and googletest). Build types available: `None`,
`Release` (by default), `Debug`, `RelWithDebInfo`, `MinSizeRel`, `Coverage`,
`NoOptWithASM`, `O2WithASM`, `O3WithASM`, `ASAN`.
- Updated links in comments along the source code and in CMake scripts.
- Update GSL implementation to 0.36.0. See
https://github.com/gsl-lite/gsl-lite/releases/tag/v0.36.0
- Create a CI job in GitHub to ensure that `clang-tidy` has been applied in most
of the source code (some optional blocks and tests are left apart).
- Create a CI job in GitHub to ensure that `clang-format` has been applied.
- Create a CI job in GitHub to ensure that `cpplint` filters have been applied.
- Create a CI job in GitHub to ensure compliance with REUSE Specification (see
https://reuse.software)
- Create a CI job in GitHub using `prettier` (https://prettier.io/) to check
markdown files formatting.
### Improvements in Openness:
- Make software compliant with REUSE Specification Version 3.0 (see
https://reuse.software/spec/).
### Improvements in Portability:
- The CMake scripts now find dependencies in Debian's riscv64 architecture.
- Enable AVX2 kernels of the volk_gnsssdr library when using the Clang compiler.
- Fixed building in some ARM-based devices. Now Clang and ARMClang can be used
for native building.
- Added toolchain files for building gnss-sdr and the volk_gnsssdr library in
several ARM processor architectures, including those in Raspberry Pi 3 and 4.
- The software can now be built using Xcode (passing `-GXcode` to CMake) without
previous manual installation of volk_gnsssdr.
- The software can now be built using Xcode (passing `-GXcode` to CMake) without
gflags, glog, matio, PugiXML, Protocol Buffers or googletest previously
installed.
- Now the volk_gnsssdr library can be built on Microsoft Windows.
- Now the volk_gnsssdr library makes use of C11 `aligned_alloc` where available.
- Improved CMake script for cross-compilation and for the detection of AVX, AVX2
and NEON (v7 and v8) instructions.
- Fixed warnings raised by CMake 3.17.
### Improvements in Reliability:
- Decoding of navigation messages no longer rely on implementation defined
behavior for shifting left a signed integer.
- Removed usage of functions with insecure API (e.g., `strcpy`, `sprintf`).
- New type alias `volk_gnsssdr::vector` allows both aligned memory allocation
and automatic deallocation.
- Fixed a memory leak in the generation of Galileo PRN codes.
- Added clang-tidy checks `clang-analyzer-security.*`,
`clang-analyzer-optin.portability.UnixAPI` clang-tidy checks. Fixed raised
warnings.
- Fixed `cpplint.py` `runtime/printf` and `runtime/explicit` errors.
- All constructors callable with one argument are marked with the keyword
explicit. See MISRA C++:2008, 12-1-3 - All constructors that are callable with
a single argument of fundamental type shall be declared explicit.
### Improvements in Repeatability:
- Added the option to apply carrier smoothing of code pseudoranges with new
Observables parameter enable_carrier_smoothing.
- Fixed normalization of DLL discriminator in BPSK modulations when the spacing
between correlators was not 0.5.
### Improvements in Testability:
- Add receiver runtime to position_test report.
- Improvements in FPGA unit tests.
- Add new utility tool `obsdiff` to perform single and double differences
computations from observation RINEX files. Requires GPSTk and Armadillo >=
9.800.
### Improvements in Usability:
- A new global parameter `GNSS-SDR.pre_2009_file` allows to process raw sample
files containing GPS L1 C/A signals dated before July 14, 2009.
- Improved DLL-PLL binary dump MATLAB/Octave plot script. Old versions removed.
- Simplified RTKLIB error log.
- Added a Python 3 plotting script to show relative performance of generic
volk_gnsssdr kernels wrt SIMD fastest versions.
- Added reporting of velocity in the terminal.
- Added reporting of user clock drift estimation, in ppm, in the Pvt_Monitor and
in internal logging (`Debug` mode).
- Updated documentation generated by Doxygen, now the `pdfmanual` target works
when using ninja.
- CMake now generates an improved summary of required/optional dependency
packages found and enabled/disabled features, including the building system
and GNSS-SDR, CMake and compiler versions. This info is also stored in a file
called `features.log` in the building directory.
- Markdown files have been wrapped to 80 characters line length to make it
easier to read them from the terminal.
See the definitions of concepts and metrics at
https://gnss-sdr.org/design-forces/
## [0.0.11](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.11)
This release has several improvements in different dimensions, addition of new
features and bug fixes:
### Improvements in Accuracy:
- Local clock correction based on PVT solution, allowing the delivery of
continuous observables.
- Fix a bug in broadcast ionospheric parameters usage.
### Improvements in Availability:
- Improved mechanism for false lock detection in the Tracking loops.
- Fixed bug in Galileo INAV/FNAV message decoding when PLL is locked at 180
degrees, which prevented from correct navigation message decoding in some
situations.
- Fixed bug that caused a random deadlock in the Observables block, preventing
the computation of PVT fixes.
- Fixed PVT computation continuity through the TOW rollover.
- Improved signal acquisition and tracking mechanisms in high dynamic scenarios.
### Improvements in Efficiency:
- Added mechanism for assisted acquisition of signals on a secondary band when
the primary has already been acquired. This allows a great reduction of the
computational load in multi-frequency configurations.
- Tracking loops now perform bit synchronization, simplifying the decoding
process in Telemetry blocks and FPGA-offloading.
- Improved preamble detection implementation in the decoding of navigation
messages (acceleration by x1.6 on average per channel).
- Shortened Acquisition to Tracking transition time.
- Applied clang-tidy checks and fixes related to performance:
performance-faster-string-find, performance-for-range-copy,
performance-implicit-conversion-in-loop, performance-inefficient-algorithm,
performance-inefficient-string-concatenation,
performance-inefficient-vector-operation, performance-move-const-arg,
performance-move-constructor-init, performance-noexcept-move-constructor,
performance-type-promotion-in-math-fn,
performance-unnecessary-copy-initialization,
performance-unnecessary-value-param, readability-string-compare.
### Improvements in Flexibility:
- Rewritten Control Thread and GNSS flow graph for increased control of
channels' status and smarter assignation of satellites in multi-band
configurations.
- New Tracking parameters allow the configuration of PLL and DLL filters order.
- Added parameter to enable FLL during pull-in time.
- Configurable pull-in time in the Tracking loops.
### Improvements in Interoperability:
- Added the BeiDou B1I and B3I receiver chains.
- Fix bug in GLONASS dual frequency receiver.
- Added a custom UDP/IP output for PVT data streaming.
- Improved Monitor block with UDP/IP output for internal receiver's data
streaming.
- Custom output formats described with .proto files, making easier to other
applications reading them in a forward and backward-compatible fashion upon
future format changes. New dependency: Protocol Buffers >= 3.0.0
- Fixes in RINEX generation: week rollover, annotations are not repeated anymore
in navigation files. Parameter rinexnav_rate_ms has been removed, annotations
are made as new ephemeris arrive.
- Fixes in RTCM messages generation: week rollover.
### Improvements in Maintainability:
- The internal communication mechanism based on gr::msg_queue has been replaced
by a thread-safe, built-in asynchronous message passing system based on GNU
Radio's Polymorphic Types. This change is backwards-compatible and prevents
from a failure in case of a possible future deprecation or removal of the
gr::msg_queue API.
- Deprecated boost::asio::io_service replaced by boost::asio::io_context if
Boost > 1.65
- CMake turns all policies to ON according to the running version up to version
3.15.
- Usage of clang-tidy integrated into CMake scripts. New option
-DENABLE_CLANG_TIDY=ON executes clang-tidy along with compilation. Requires
clang compiler.
- Applied clang-tidy checks and fixes related to readability:
readability-container-size-empty, readability-identifier-naming,
readability-inconsistent-declaration-parameter-name,
readability-named-parameter, readability-non-const-parameter,
readability-string-compare.
- Improved includes selection following suggestions by include-what-you-use (see
https://include-what-you-use.org/), allowing faster compiles, fewer recompiles
and making refactoring easier.
- Massive reduction of warnings triggered by clang-tidy checks.
- Throughout code cleaning and formatting performed with automated tools in
order to reduce future commit noise.
### Improvements in Portability:
- Added interfaces for FPGA off-loading in GPS L1 C/A, Galileo E1b/c, GPS L2C,
GPS L5 and Galileo E5a receiver chains.
- CMake scripts now follow a modern approach (targets and properties) but still
work with 2.8.12.
- Improvements for macOS users using Homebrew.
- The software builds against GNU Radio >= 3.7.3, including 3.8.0. Automatically
detected, no user intervention is required.
- The volk_gnsssdr library can now be built without requiring Boost if the
compiler supports C++17 or higher.
- The Boost Filesystem library is not anymore a required dependency in cases
where it can be replaced by std::filesystem. Automatically detected, no user
intervention is required.
- CMake scripts automatically select among C++11, C++14, C++17 or C++20
standards, the most recent as possible, depending on compiler and dependencies
versions.
- Drawback in portability: Protocol Buffers >= 3.0.0 is a new required
dependency.
### Improvements in Reliability:
- Included the Guidelines Support Library. General improvement of memory
management, replacement of raw pointers by containers or smart pointers.
- Applied clang-tidy checks and fixes related to High Integrity C++:
performance-move-const-arg, modernize-use-auto, modernize-use-equals-default,
modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr,
cert-dcl21-cpp, misc-new-delete-overloads, cert-dcl58-cpp, cert-err52-cpp,
cert-err60-cpp, hicpp-exception-baseclass, hicpp-explicit-conversions.
- Fixed a number of defects detected by Coverity Scan (version June 2019).
### Improvements in Usability:
- The receiver now admits FPGA off-loading, allowing for real time operation in
embedded systems at high sampling rates and high number of signals and
channels per signal in multiple bands.
- Fixed program termination (avoiding hangs and segfaults in some
platforms/configurations).
- The Labsat_Signal_Source now terminates the receiver's execution when the end
of file(s) is reached. It now accepts LabSat 2 filenames and series of LabSat
3 files.
- Added configuration parameters to set the annotation rate in KML, GPX, GeoJSON
and NMEA outputs, set by default to 1 s.
- New parameter PVT.show_local_time_zone displays time in the local time zone.
Subject to the proper system configuration of the machine running the software
receiver. This feature is not available in old compilers.
- CMake now generates a summary of required/optional dependency packages found
and enabled/disabled features. This info is also stored in a file called
features.log in the building directory.
- Improved information provided to the user in case of building configuration
and runtime failures.
See the definitions of concepts and metrics at
https://gnss-sdr.org/design-forces/
## [0.0.10](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.10)
This release has several improvements in different dimensions, addition of new
features and bug fixes:
### Improvements in Accuracy:
- Part of the RTKLIB core library has been integrated into GNSS-SDR. There is
now a single PVT block implementation which makes use of RTKLIB to deliver PVT
solutions, including Single and PPP navigation modes.
- Fixed CN0 estimation for other correlation times than 1 ms.
- Improved computation of tracking parameters and GNSS observables.
- Other minor bug fixes.
### Improvements in Availability:
- Internal Finite State Machines rewritten for improved continuity in delivering
position fixes. This fixes a bug that was stalling the receiver after about
six hours of continuous operation.
- Redesign of the time counter for enhanced continuity.
- Improved flow graph in multi-system configurations: the receiver does not get
stalled anymore if no signal is found from the first system.
- Improved acquisition and tracking sensitivity.
- Added mechanisms for Assisted GNSS, thus shortening the Time-To-First-Fix.
Provision of data via XML files or via SUPL v1.0. Documented at
https://gnss-sdr.org/docs/sp-blocks/global-parameters/
- Other minor bug fixes.
### Improvements in Efficiency:
- Added the possibility of non-blocking acquisition, which works well when using
real-time data from an RF front-end.
- Improved flow graph in multi-band configurations: satellites acquired in one
band are immediately searched in others.
- Complex local codes have been replaced by real codes, alleviating the
computational burden.
- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h,
volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h,
volk_gnsssdr_32f_xn_resampler_32f_xn.h,
volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h
- Some AVX2 implementations added to the volk_gnsssdr library.
- Improvement in C++ usage: Use of const container calls when result is
immediately converted to a const iterator. Using these members removes an
implicit conversion from iterator to const_iterator.
- Output printers can be shut down, with some savings in memory and storage
requirements.
- A number of code optimizations here and there.
### Improvements in Flexibility:
- A number of new parameters have been exposed to the configuration system.
- Possibility to choose Pilot or Data component for tracking of GPS L5 and
Galileo E5a signals.
- Enabled extended coherent integration times for signal tracking.
- Configurable coherent and/or non-coherent signal acquisition.
- Some configuration parameters can now be overridden by commandline flags for
easier use in scripts.
### Improvements in Interoperability:
- Added the GPS L5 receiver chain.
- Added the GLONASS L1 SP receiver chain.
- Added the GLONASS L2 SP receiver chain.
- Improvements in the Galileo E5a and GPS L2C receiver chains.
- Updated list of available GNSS satellites.
- Added five more signal sources: "Fmcomms2_Signal_Source" (requires gr-iio),
"Plutosdr_Signal Source" (requires gr-iio), "Spir_GSS6450_File_Signal_Source",
"Labsat_Signal_Source" and "Custom_UDP_Signal_Source" (requires libpcap).
Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/
- Improved support for BladeRF, HackRF and RTL-SDR front-ends.
- Added tools for the interaction with front-ends based on the AD9361 chipset.
- Intermediate results are now saved in MAT-file format (.mat), readable from
Matlab/Octave and from Python via h5py.
- Added the GPX output format.
- Improvements in the generation of KML files.
- Improvements in the NMEA output. The receiver can produce GPGGA, GPRMC, GPGSA,
GPGSV, GAGSA and GAGSV sentences.
- Improvements in the RTCM server stability.
- Improvements in the correctness of generated RINEX files.
- The receiver can read and make use of Galileo almanac XML files published by
the European GNSS Service Centre at
https://www.gsc-europa.eu/system-status/almanac-data
- Own-defined XML schemas for navigation data published at
https://github.com/gnss-sdr/gnss-sdr/tree/next/docs/xml-schemas
- Added program rinex2assist to convert RINEX navigation files into XML files
usable for Assisted GNSS. Only available building from source. See
https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist
### Improvements in Maintainability:
- Setup of a Continuous Integration system that checks building and runs QA code
in a wide range of GNU/Linux distributions (Arch Linux, CentOS, Debian,
Fedora, OpenSUSE, Ubuntu) and releases. See
https://gitlab.com/gnss-sdr/gnss-sdr
- Creation of multi-system processing blocks, drastically reducing code
duplication and maintainability time.
- Automated code formatting with clang-format. This tool is widely available and
easy to integrate into many code editors, and it also can be used from the
command line. It cuts time spent on adhering to the project's code formatting
style.
- Improvement in C++ usage: C-style casts have been replaced by C++ casts.
C-style casts are difficult to search for. C++ casts provide compile time
checking ability and express programmers' intent better, so they are safer and
clearer.
- Improvement in C++ usage: The override special identifier is now used when
overriding a virtual function. This helps the compiler to check for type
changes in the base class, making the detection of errors easier.
- Improvement in C++ usage: A number of unused includes have been removed. Order
of includes set to: local (in-source) headers, then library headers, then
system headers. This helps to detect missing includes.
- Improvement in C++ usage: Enhanced const correctness. Misuses of those
variables are detected by the compiler.
- Improved code with clang-tidy and generation of a compile_commands.json file
containing the exact compiler calls for all translation units of the project
in machine-readable form if clang-tidy is detected.
- Applied some style rules to CMake scripts.
- Minimal versions of dependencies identified and detected.
### Improvements in Portability:
- Several CMake scripts improvements, more verbose outputs in case of errors.
Building configuration has been documented in
https://gnss-sdr.org/docs/tutorials/configuration-options-building-time/
- Improved SDK for cross-compilation in embedded devices. Documented in
https://gnss-sdr.org/docs/tutorials/cross-compiling/
- Improved control over minimum required versions for core dependencies.
- The software builds with C++11, C++14 and C++17 standards.
- The software can now be built using GCC >= 4.7.2 or LLVM/Clang >= 3.4.0
compilers on GNU/Linux, and with Clang/AppleClang on macOS.
- The Ninja build system can be used in replacement of make.
- The volk_gnsssdr library can be built using Python 2.7+ or Python 3.6+.
- The volk_gnsssdr library is now ready for AArch64 NEON instructions.
- Improved detection of required and optional dependencies in many GNU/Linux
distributions and processor architectures.
- Improvement in C++ usage: The <ctime> library has been replaced by the more
modern and portable <chrono> (except for the interaction with RTKLIB).
- Improvement in C++ usage: The <stdio.h> library has been replaced by the more
modern and portable <fstream> for file handling.
- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g.,
<cctype> instead of <ctype.h>, <cmath> instead of <math.h>).
- Fix compatibility with Boost 1.67 (closes Debian bug #911882
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911882)
- Fixes required by Debian packaging.
- Fixes required by Macports packaging.
- A downside in portability: BLAS and LAPACK libraries are now required even in
ARM devices.
- A downside in portability: the matio library >= 1.5.3 is a new required
dependency. If not found, it is downloaded and built automatically at building
time, but this requires libtool, automake and hdf5 already installed in the
system.
- A downside in portability: the PugiXML library is a new required dependency.
If not found, it is downloaded and built automatically at building time.
### Improvements in Reliability:
- Introduced 3 new Input Filter implementations for pulsed and narrowband
interference mitigation: `Pulse_Blanking_Filter`, `Notch_Filter` and
`Notch_Filter_Lite`. Documented in
https://gnss-sdr.org/docs/sp-blocks/input-filter/
- Improved flow graph stability.
- Introduction of high-integrity C++ practices into the source code and included
in the coding style guide. See https://gnss-sdr.org/coding-style/
- Fixed a number of defects detected by Coverity Scan.
- Improvement of QA code and addition of a number of new tests. Documented at
https://gnss-sdr.org/docs/tutorials/testing-software-receiver-2/
- Improvement in C++ usage: rand() function replaced by <random> library.
- Improvement in C++ usage: strlen and strncpy have been replaced by safer C++
counterparts.
- Improvement in C++ usage: Some destructors have been fixed, avoiding
segmentation faults when exiting the program.
- Website switched from http to https. Links in the source tree switched when
available.
### Improvements in Reproducibility:
- Setup of a Continuous Reproducibility system at GitLab for the automatic
reproduction of experiments. The concept was introduced in
https://ieeexplore.ieee.org/document/8331069/ Example added in the
src/utils/reproducibility/ieee-access18/ folder.
- Fixes of Lintian warnings related to build reproducibility.
### Improvements in Scalability:
- Improvements in multi-system, multi-band receiver configurations. The receiver
now accepts any number of channels and systems in the three available bands.
- All possible combinations of signals and integration times are now accepted by
the Observables block.
### Improvements in Testability:
- Several Unit Tests added. Documentation of testing concepts and available
tests at https://gnss-sdr.org/docs/tutorials/testing-software-receiver/
- New extra unit test AcquisitionPerformanceTest checks the performance of
Acquisition blocks.
- New extra unit test TrackingPullInTest checks acquisition to tracking
transition.
- New extra unit test HybridObservablesTest checks the generation of
observables.
- Improved system testing: position_test accepts a wide list of parameters and
can be used with external files.
- Receiver channels can now be fixed to a given satellite.
- Testing integrated in a Continuous Reproducibility system (see above).
- Improved CTest support in volk_gnsssdr.
### Improvements in Usability:
- All Observables block implementations have been merged into a single
implementation for all kinds of GNSS signals, making it easier to configure.
- All PVT block implementations have been merged into a single implementation
for all kinds of GNSS signals, making it easier to configure.
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by
GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a
warning is provided to the user. The old name will be removed in future
releases.
- Updated and improved online documentation of processing blocks at
https://gnss-sdr.org/docs/sp-blocks/
- Improved documentation of required dependency packages in several GNU/Linux
distributions.
- Dump and output files can now be stored anywhere.
- Parameter names with the same role have been harmonized within different block
implementations.
- Added a changelog, a code of conduct, a contributing guide and a pull-request
template in the source tree.
- Added colors to the commandline user interface.
- Updated manfiles.
- Updated examples of configuration files under the conf/ folder.
See the definitions of concepts and metrics at
https://gnss-sdr.org/design-forces/
## [0.0.9](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.9)
DOI: https://doi.org/10.5281/zenodo.291371
This release has several improvements, addition of new features and bug fixes in
many dimensions:
### Improvements in Accuracy:
- Major rewriting in the generation of pseudoranges.
- Fixed bug in Galileo E5a/I codes.
- Fixed bug in Galileo E1 correlator spacing.
- Fixed bug that was causing errors in receivers above the troposphere.
- Fixed 16-bit complex resampler.
- Improved time tracking algorithm.
- Added Bancroft's algorithm implementation for PVT initialization.
### Improvements in Availability:
- Improved numerical stability of the PVT solution. The infamous bug that was
causing apparently random error peaks has finally been fixed.
### Improvements in Efficiency:
- VOLK_GNSSSDR: Added NEON,AVX and unaligned protokernels for
volk_gnsssdr_32f_index_max_32 kernel.
- VOLK_GNSSSDR: Added volk_gnsssdr-config-info to the list of generated
executables.
### Improvements in Flexibility:
- Added maximum number of dwells in the Tong algorithm.
### Improvements in Interoperability:
- Added six new Galileo satellites: FM7, FM10, FM11, FM12, FM13, FM14.
- The Hybrid_Observables and Hybrid_PVT implementations can now handle more
types of GNSS signals.
- The RINEX printer can now print L2C and E5a observables and navigation files,
including multiband configurations.
- Added RTCM 3.2 output to more receiver configurations.
### Improvements in Maintainability:
- The VOLK_GNSSSDR library can now be built with Python 3. Switched dependencies
for VOLK_GNSSDR: from (old, python2.7-only) python-cheetah templates to
Python3 friendly python-mako and python-six. So, Python-cheetah dependency has
been dropped, and python-mako and python-six have been added.
- If suitable versions of gflags, glog, armadillo or googletest are not found in
the system, they will be downloaded and built at compile time (versions 2.2.0,
0.3.4, 7.600.2 and 1.8.0, respectively).
- Fixed more than 30 defects detected by Coverity Scan.
- Added CMake Python finder and module checker.
- Deleted files related to CPack.
- Fixes, updates and improvements in the documentation.
- Improvements in CMake scripts: General code cleaning and addition of comments.
Improved user information in case of failure. Improved detection of
dependencies in more processor architectures (e.g. aarch64).
### Improvements in Marketability:
- Reduced time from a commit to deployment (see virtualization mechanisms in
Portability).
### Improvements in Portability:
- Now GNSS-SDR can be run in virtual environments through snap packages (see
https://github.com/carlesfernandez/snapcraft-sandbox) and docker images (see
https://github.com/carlesfernandez/docker-gnsssdr).
- Now GNSS-SDR is adapted to cross-compiling environments for embedded devices
(see https://github.com/carlesfernandez/oe-gnss-sdr-manifest).
- BLAS and LAPACK libraries are no longer mandatory on ARM devices.
### Improvements in Scalability:
- Fixed bug in acquisition with rata rates higher than 16 Msps in 4ms code
periods.
### Improvements in Testability:
- Major QA source code refactoring: they has been split into
src/tests/unit-tests and src/tests/system-tests folders. They are optionally
built with the ENABLE_UNIT_TESTING=ON (unit testing QA code),
ENABLE_UNIT_TESTING_EXTRA=ON (unit tests that require extra files downloaded
at configure time), ENABLE_SYSTEM_TESTING=ON (system tests, such as
measurement of Time-To-First-Fix) and ENABLE_SYSTEM_TESTING_EXTRA=ON (extra
system test requiring external tools, automatically downloaded and built at
building time) configuration flags. The EXTRA options also download and build
a custom software-defined signal generator and version 2.9 of GPSTk, if not
already found on the system. Download and local link of version 2.9 can be
forced by ENABLE_OWN_GPSTK=ON building configuration flag. Only
ENABLE_UNIT_TESTING is set to ON by default.
- Unit tests added: CPU_multicorrelator_test and GPU_multicorrelator_test
measure computer performance in multicorrelator setups.
- Unit tests added: GpsL1CADllPllTracking and GpsL1CATelemetryDecoderTest.
- System test added: ttff_gps_l1 performs a set of cold / assisted runs of the
software receiver and computes statistics about the obtained Time To First
Fix.
- System test added: obs_gps_l1_system_test uses an external software-defined
signal generator to produce raw digital GNSS signal from a RINEX navigation
file and a position (static or dynamic), processes it with GNSS-SDR, and then
compares the RINEX observation file produced by the software receiver to that
produced by the signal generator.
- Software Development Kit provided for embedded devices (see
https://gnss-sdr.org/docs/tutorials/cross-compiling/).
### Improvements in Usability:
- Now the block factory automatically detects Channel input data type, so it is
no longer required to specify Channel.input_type in the configuration. An
error raises if Acquisition and Tracking Blocks are not configured with the
same input data type.
- Block names changed from L2_M to L2C.
- Documentation available at https://gnss-sdr.org/docs/
- Improved tools for compilation, execution and testing in embedded devices.
See the definitions of concepts and metrics at
https://gnss-sdr.org/design-forces/
## [0.0.8](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.8)
DOI: https://doi.org/10.5281/zenodo.57022
This is a maintenance and bug fix release with no relevant new features with
respect to v0.0.7. The main changes are:
- Fixed a bug that broke building when using latest VOLK release
- Updated PYBOMBS instructions
- Added Tests for FFT length
- Added Tests for CUDA-based tracking
- Added Tests for SIMD-based tracking
- Improved CUDA-based correlation.
- Updated documentation
- Fixed building in mips and powerpc architectures.
- gr-gn3s and gr-dbfcttc moved to its own repository.
- Improved package reproducibility
- VOLK_GNSSSDR: Fixed a bug in AVX2 puppet
- VOLK_GNSSSDR: can now be built using the C98 standard
- VOLK_GNSSSDR: Fixed a bug that broke building when linking to Boost in some
configurations.
- VOLK_GNSSSDR: Added an option to trigger profiling at building time.
- VOLK_GNSSSDR: Fix the CMake-based check for posix_memalign.
## [0.0.7](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.7)
DOI: https://doi.org/10.5281/zenodo.51521
This release has several improvements, addition of new features and bug fixes:
- Improvements in receiver design: Internal block communication has been
redesigned to accommodate the addition of new signals, and now upstream and
downstream communication within blocks is implemented through the GNU Radio
blocks asynchronous message passing system, leading to a more scalable, more
robust and cleaner design.
- Improvements in receiver design: Correlators have been rewritten to take full
advantage of VOLK and VOLK_GNSSSDR, and they are of general use for any
tracking block. Their API now admit an arbitrary number of correlators, spaced
in an arbitrary manner, in 16ic and 32fc versions.
- Improvements in receiver design: Block adapters are now all managed by smart
pointers, ensuring better memory management.
- Improvements in processing speed: The VOLK_GNSSSDR library has been rewritten,
following current VOLK standards and adding a number of new kernels. This
approach addresses both efficiency and portability. Now the library provides
the key kernels for GNSS signal processing in 16ic and 32fc versions,
including SSE2, SSE3, SSE4.1, AVX, AV2 and NEON implementations. Please
execute volk_gnsssdr_profile and volk_profile to use the fastest
implementation for your host machine.
- New source block: Two_Bit_Packed_File_Signal_Source. This block takes 2 bit
samples that have been packed into bytes or shorts as input and generates a
byte for each sample.
- Fixes in SUPL assistance (supl.nokia.com removed).
- Improvements in acquisition: Added a non CFAR PCPS acquisition algorithm based
on the estimation of the post correlation noise floor. If enabled as an option
in the acquisition configuration, it allows setting more stable thresholds in
the presence of non-gaussian front-end noise (which is the usual behavior of
front-ends.)
- Fixes in acquisition: Fixed mismatch between the config files and the
acquisition code in the specification of the IF. Fixed a bug in the length of
the FFT of local codes.
- Improvements in tracking sensitivity: Added configuration option to customize
the extension of the GPS L1 CA correlation length after bit synchronization
(options are: [1,2,4,5,10,20] ms). Only available in the
GPS_L1_CA_DLL_PLL_C_Aid_Tracking implementation.
- New tracking block introduced: GPS_L1_CA_DLL_PLL_C_Aid_Tracking is a GPS L1
C/A carrier PLL and code DLL with optional carrier-aid feedback. It is
available in both 32 bits gr_complex input samples and in 16 bits short int
complex samples. The gr_complex version has also the capability to extend the
coherent correlation period from 1ms to 20ms using telemetry symbol
synchronization.
- Increased resolution in CN0 estimator internal variables.
- Fixed a bug in computation of GPS L1 C/A carrier phase observable.
- Fixed a bug in the internal state machine that was blocking the receiver after
a few hours of usage. Now the receiver can work continually (tested for more
than one week, no known limit).
- New tracking block introduced: GPS_L1_CA_DLL_PLL_Tracking_GPU is a GPS L1 C/A
carrier PLL and code DLL that uses the CUDA-compatible GPU to compute carrier
wipe off and correlation operations, alleviating the CPU load.
- Obsolete/buggy blocks removed: GPS_L1_CA_DLL_FLL_PLL_Tracking,
GPS_L1_CA_DLL_PLL_Optim_Tracking.
- Added a RTCM printer and TCP server in PVT blocks (still experimental). The
receiver is now able to stream data in real time, serving RTCM 3.2 messages to
multiple clients. For instance, it can act as a Ntrip Source feeding a Ntrip
Server, or to be used as data input in RTKLIB, obtaining Precise Point
Positioning fixes in real-time. The TCP port, Station ID, and rate of
MT1019/MT1045 and MSM can be configured. GPS_L1_CA_PVT serves MT1019 (GPS
Ephemeris) and MSM7 (MT1077, full GPS pseudoranges, phase ranges, phase range
rates and CNR - high resolution) messages, while GALILEO_E1_PVT serves MT1045
(Galileo ephemeris) and MSM7 (MT1097, full Galileo pseudoranges, phase ranges,
phase range rates and CNR - high resolution).
- Added a GeoJSON printer. Basic (least-squares) position fixes can be now also
stored in this format, in addition to KML.
- Obsolete block removed: output filter.
- QA code migrated to the new asynchronous message passing system.
- Improvements in documentation: update of README.md file, addition of
documentation for the VOLK_GNSSSDR library, updated links to new ICDs.
- Improvements in documentation: Satellite identification updated to current
constellation status.
- Updated and cleaner console output. Now Galileo satellites have the E
identifier in their PRN number.
- Several improvements in CMake scripts allow to build GNSS-SDR in Linux Debian
(Jessie, Stretch and Sid), Ubuntu (from 12.04 to 16.04), including amd64,
i386, armhf and arm64 architectures, and possibly in other GNU/Linux
distributions, as well as in Mac OS X 10.9 to 10.11. It also works well with
CMake 3.5 (some problems solved with VOLK_GNSSSDR as a sub-project).
- The software can link either against OpenSSL or against GnuTLS with openssl
extensions, whatever it is available. This allows buildings in distributions
such as Fedora or ArchLinux, while being compatible with binary distribution
through Debian packages.
- Fixed a number of defects detected by Coverity Scan.
- Some fixes required by Debian licensing and packaging system.
- Added a CGRAN (https://www.cgran.org/) manifest
- Lots of code cleaning and fixes of typos and small bugs.
## [0.0.6](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.6)
This release has several improvements and bug fixes:
- Added initial support to multi-band, multi-source configurations (multiple
signal sources and signal conditioners).
- Updated configuration files to new notation. Old and new configuration
notations still compatible.
- Added skeleton for mixed (multi-frequency and multi-system) observables block.
- Faster local carrier update (25% of improvement).
- Added initial support to GPS L2C real time tracking and decoding of CNAV
message with NSL STEREO v2, Fraunhofers Flexiband, and USRPx front-ends (the
latter requiring external clock).
- Added initial support to select the frontend clock reference source in UHD
signal source (i.e. internal or external clock reference).
- Added 2 bits complex file source for GNSS-SDR GSoC 2015 signal sampler
designed by Ajith Peter.
- Added a new rtl_tcp signal source, remote access to RTL2832U-based dongles via
TCP.
- Always build front-end-cal, a calibration tool for some DVB-T receivers based
on the Realtek's RTL2832U chipset.
- Fixed bug in UTC time computation for GPS signals.
- Updated satellite identification for GPS and Galileo.
- Defined cbyte as a new input data type (std::complex<unsigned char>)
- Adding a new data_type_adapter, from interleaved short to std::complex<short>
- Adding a filter for complex short streams.
- Adding a fir_filter for std::complex<signed char> (aka cbyte). It converts the
data type to floats, filters, and converts back to cbyte.
- Added a resampler for cbytes and cshorts.
- First working version of a GPS tracking block implementation using CUDA with
multi-GPU device support.
- Updating RINEX obs header when leap second is available.
- Updating RINEX nav file when IONO and UTC data are available.
- Include Signal Strength Indicator in RINEX observable files.
- Tests fixed.
- Fixed more than 200 code defects detected by Coverity Scan.
- Updated documentation.
- Updated documentation and CMake scripts for the GN3S v2 driver (Linux-only)
- Armadillo version automatically downloaded and built if it is not present in
the system is now 5.400.3.
- Updated old links from googlecode to new links at GitHub for Google Test,
gflags, glog and gperftools.
- gfortran is no longer a required package, but it is used if available.
- Added an option to remove logging.
- Enabled cross-compilation for ARM devices.
- Lots of code cleaning.
## [0.0.5](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.5)
This release has several improvements and bug fixes:
- Now GNSS-SDR can be installed on the system with the usual cmake ../ && make
&& sudo make install.
- Added volk_gnsssdr library, a volk-like library implementing some specific
kernels and ensuring portable executables. It comes with a
volk_gnsssdr_profile executable, in the fashion of volk_profile. Volk and
volk_gnsssdr are compatible and can be mixed together. This is expected to
enable faster execution of the software receiver in upcoming versions.
- The former rtlsdr_signal_source has been replaced by a more general
osmosdr_signal_source compatible with all those front-ends accessible by the
OsmoSDR driver (bladeRF, hackRF, etc.) in addition to RTL-based dongles.
- Added manpages when binaries gnss-sdr, volk_gnsssdr_profile and front-end-cal
are installed.
- Now GNSS-SDR can be built on i386, amd64, armhf, armel and arm64
architectures.
- Now GNSS-SDR builds on Ubuntu 14.04 and 14.10, Debian jessie/sid and Mac OS X
10.9 and 10.10.
- Improved detection of dependencies, specially when installed as .deb packages.
- Added a check' target with some minimal tests.
- Added support for interleaved I/Q byte-size sample files.
- Minor bug fixes, updated documentation and code cleaning.
## [0.0.4](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.4)
This release has several improvements and bug fixes:
- Added hybrid processing GPS L1 C/A and Galileo E1B, providing position fixes
make use of observables for both constellations.
- Added implementations of the QuickSync algorithm for GPS L1 C/A and Galileo E1
acquisition.
- Added processing blocks for Galileo E5a: Acquisition, Tracking,
Telemetry_Decoder (experimental)
- New configuration files allow to configure GPS and Galileo channels in the
same receiver.
- Added tropospheric corrections to GPS and Galileo PVT solution.
- Improved precision obtained by changing some variables from float to double.
- New building options: ENABLE_GN3S, ENABLE_RTLSDR and ENABLE_ARRAY and
ENABLE_OPENCL.
- Improved documentation on how to enable optional drivers.
- Fixed bug in memory alignment that caused problems with high data rates.
- Added ENABLE_GENERIC_ARCH, an option to build the binary without detecting the
SIMD instruction set present in the compiling machine, so it can be executed
in other machines without those specific sets.
- Added ENABLE_GPERFTOOLS, which links the executable to tcmalloc and profiler
if Gperftools is available on the system.
- Added carrier phase, Doppler shift and signal strength observables to the
RINEX files. Static PPP solutions are available for GPS with RTKLIB via RINEX
files.
- The executable now produces RINEX files version 3.02 of Galileo Observables,
Navigation data, and mixed (GPS/Galileo) observables and nav data. RINEX 3.02
is the default version of RINEX files.
- Armadillo version updated to 4.400.2
- Armadillo now uses OpenBLAS instead of BLAS if the former is available on the
system.
- Some raw pointers have been changed to smart pointers.
- Minor bug fixes and code cleaning.
## [0.0.3](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.3)
This release has several improvements and bug fixes, completing the transition
from Subversion to Git. The main changes are:
- Created some missing directories lost in the SVN to Git transition.
- New C++11-ized block factory, flow graph and tests, resulting in better memory
management and fewer segmentation faults. Several raw pointers converted to
smart pointers.
- Reorganization of assistance data input and output.
- Fixed memory leak when talking to SUPL servers.
- Improved retrieval of assistance data.
- Fixing an error in a constant value related to Galileo.
- Inform users if the temporal folder is not /tmp.
- Fixes and additions to the documentation.
- README in markdown language so it looks better in Git repositories.
- Fixed a bug that prevented the update of all shared map structures (ephemeris,
iono parameters, etc…).
- The configuration script now throws error if GCC is older than 4.7 or Boost is
older than 1.45
- Improved detection / downloading & building if missing of Gflags and Glog.
- Improved detection / downloading & building if missing of Armadillo and
related dependencies.
- Fixes many warnings that appeared when using CMake 3.0.
- Improved detection of GTEST_DIR variable.
- Include header files in libraries so IDEs such as Xcode can display them.
Enjoy it!

View File

@ -1,5 +1,6 @@
# Custom structured data format definitions # Custom structured data format definitions
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
@ -7,9 +8,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
Files in this folder describe structured data formats that are generated by Files in this folder describe structured data formats that are generated by
GNSS-SDR. They use [Protocol Buffers](https://developers.google.com/protocol-buffers/)' GNSS-SDR. They use
[Protocol Buffers](https://developers.google.com/protocol-buffers/)'
[proto3](https://developers.google.com/protocol-buffers/docs/proto3) syntax. [proto3](https://developers.google.com/protocol-buffers/docs/proto3) syntax.
From those files, the protocol buffer compiler creates classes that implement From those files, the protocol buffer compiler creates classes that implement

View File

@ -1,5 +1,6 @@
# XML Schemas for Assisted GNSS-SDR # XML Schemas for Assisted GNSS-SDR
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
@ -7,37 +8,47 @@ SPDX-License-Identifier: GPL-3.0-or-later
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
GNSS-SDR can read assistance data from [Extensible Markup Language (XML)](https://www.w3.org/XML/) files for faster [Time-To-First-Fix](https://gnss-sdr.org/design-forces/availability/#time-to-first-fix-ttff), and can store navigation data decoded from GNSS signals in the same format. This folder provides XML Schemas which describe those XML files structure. GNSS-SDR can read assistance data from
[Extensible Markup Language (XML)](https://www.w3.org/XML/) files for faster
[Time-To-First-Fix](https://gnss-sdr.org/design-forces/availability/#time-to-first-fix-ttff),
and can store navigation data decoded from GNSS signals in the same format. This
folder provides XML Schemas which describe those XML files structure.
[XSD (XML Schema Definition)](https://www.w3.org/XML/Schema) is a World Wide Web Consortium (W3C) recommendation that specifies how to formally describe the elements in an XML document. [XSD (XML Schema Definition)](https://www.w3.org/XML/Schema) is a World Wide Web
Consortium (W3C) recommendation that specifies how to formally describe the
elements in an XML document.
## GPS L1 C/A
GPS L1 C/A - [ephemeris_map.xsd](./ephemeris_map.xsd) - GPS NAV message ephemeris
---------- parameters.
- [iono_model.xsd](./iono_model.xsd) - GPS NAV message ionospheric model
- [ephemeris_map.xsd](./ephemeris_map.xsd) - GPS NAV message ephemeris parameters. parameters.
- [iono_model.xsd](./iono_model.xsd) - GPS NAV message ionospheric model parameters.
- [utc_model.xsd](./utc_model.xsd) - GPS NAV message UTC model parameters. - [utc_model.xsd](./utc_model.xsd) - GPS NAV message UTC model parameters.
- [gps_almanac_map.xsd](./gps_almanac_map.xsd) - GPS NAV message almanac. - [gps_almanac_map.xsd](./gps_almanac_map.xsd) - GPS NAV message almanac.
## GPS L2C and L5
GPS L2C and L5 - [cnav_ephemeris_map.xsd](./cnav_ephemeris_map.xsd) - GPS CNAV message
-------------- ephemeris parameters.
- [cnav_ephemeris_map.xsd](./cnav_ephemeris_map.xsd) - GPS CNAV message ephemeris parameters. ## Galileo
- [gal_ephemeris_map.xsd](./gal_ephemeris_map.xsd) - Galileo ephemeris
Galileo parameters.
------- - [gal_iono_model.xsd](./gal_iono_model.xsd) - Galileo ionospheric model
parameters.
- [gal_ephemeris_map.xsd](./gal_ephemeris_map.xsd) - Galileo ephemeris parameters.
- [gal_iono_model.xsd](./gal_iono_model.xsd) - Galileo ionospheric model parameters.
- [gal_utc_model.xsd](./gal_utc_model.xsd) - Galileo UTC model parameters. - [gal_utc_model.xsd](./gal_utc_model.xsd) - Galileo UTC model parameters.
- [gal_almanac_map.xsd](./gal_almanac_map.xsd) - Galileo almanac. - [gal_almanac_map.xsd](./gal_almanac_map.xsd) - Galileo almanac.
------- ---
Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more information about the usage of XML files in GNSS-SDR. Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more
information about the usage of XML files in GNSS-SDR.
You could find useful the utility program [rinex2assist](https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist) for the generation of compatible XML files from recent, publicly available RINEX navigation data files. You could find useful the utility program
[rinex2assist](https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist)
for the generation of compatible XML files from recent, publicly available RINEX
navigation data files.

View File

@ -1,5 +1,6 @@
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
@ -7,139 +8,134 @@ SPDX-License-Identifier: GPL-3.0-or-later
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
# Welcome to VOLK_GNSSSDR, the Vector-Optimized Library of Kernels for GNSS-SDR # Welcome to VOLK_GNSSSDR, the Vector-Optimized Library of Kernels for GNSS-SDR
VOLK_GNSSSDR is a sub-project of GNSS-SDR. This library provides a set VOLK_GNSSSDR is a sub-project of GNSS-SDR. This library provides a set of extra
of extra kernels that can be used stand-alone or in combination with kernels that can be used stand-alone or in combination with VOLK's. Please see
VOLK's. Please see https://www.libvolk.org for documentation, source code, https://www.libvolk.org for documentation, source code, and contact information
and contact information about the original VOLK library. about the original VOLK library.
The boilerplate of this code was initially generated with The boilerplate of this code was initially generated with `volk_modtool`, an
`volk_modtool`, an application provided by VOLK that creates the application provided by VOLK that creates the skeleton that can then be filled
skeleton that can then be filled with custom kernels. Some modifications with custom kernels. Some modifications were added to accommodate the
were added to accommodate the specificities of Global Navigation specificities of Global Navigation Satellite Systems (GNSS) signal processing.
Satellite Systems (GNSS) signal processing. Those changes are clearly Those changes are clearly indicated in the source code, and do not break
indicated in the source code, and do not break compatibility. compatibility.
This library contains kernels of hand-written SIMD code for different This library contains kernels of hand-written SIMD code for different
mathematical operations, mainly with 8-bit and 16-bit real and complex mathematical operations, mainly with 8-bit and 16-bit real and complex data
data types, offering a platform/architecture agnostic version that will types, offering a platform/architecture agnostic version that will run in all
run in all machines, plus other versions for different SIMD instruction machines, plus other versions for different SIMD instruction sets. Then, the
sets. Then, the application `volk_gnsssdr_profile` runs some application `volk_gnsssdr_profile` runs some iterations of all versions that
iterations of all versions that your machine can execute and annotates your machine can execute and annotates which is the fastest, which will then be
which is the fastest, which will then be selected at runtime when selected at runtime when executing GNSS-SDR. In this way, we can address at the
executing GNSS-SDR. In this way, we can address at the same time same time [portability](https://gnss-sdr.org/design-forces/portability/) (by
[portability](https://gnss-sdr.org/design-forces/portability/) (by creating executables that will run in nearly all processor architectures) and
creating executables that will run in nearly all processor [efficiency](https://gnss-sdr.org/design-forces/efficiency/) (by providing
architectures) and custom implementations specially designed to take advantage of the specific
[efficiency](https://gnss-sdr.org/design-forces/efficiency/) (by processor that is running the code).
providing custom implementations specially designed to take advantage of
the specific processor that is running the code).
These kernels have some specific features (*e.g.*, saturation arithmetics) These kernels have some specific features (_e.g._, saturation arithmetics) that
that are aimed to GNSS signal processing, but could make them not are aimed to GNSS signal processing, but could make them not suitable for its
suitable for its general use in other applications. Check out the general use in other applications. Check out the documentation generated by
documentation generated by Doxygen and the *generic* (that is, plain C) Doxygen and the _generic_ (that is, plain C) implementation to see what each
implementation to see what each kernel is actually doing. kernel is actually doing.
This figure shows the role of some VOLK_GNSSSDR kernels in the context This figure shows the role of some VOLK_GNSSSDR kernels in the context of a GNSS
of a GNSS baseband processor: baseband processor:
![Example of VOLK_GNSSSDR ![Example of VOLK_GNSSSDR
usage.](./docs/images/VOLK_GNSSSDR_Usage_Example.png) usage.](./docs/images/VOLK_GNSSSDR_Usage_Example.png)
## How to build VOLK_GNSSSDR: ## How to build VOLK_GNSSSDR:
This library is automatically built and installed along with GNSS-SDR if This library is automatically built and installed along with GNSS-SDR if it is
it is not found by CMake on your system at configure time. not found by CMake on your system at configure time.
However, you can install and use VOLK_GNSSSDR kernels as you use VOLK's, However, you can install and use VOLK_GNSSSDR kernels as you use VOLK's,
independently of GNSS-SDR. independently of GNSS-SDR.
First, make sure that the required dependencies are installed in your First, make sure that the required dependencies are installed in your machine:
machine:
~~~~~~ ```
$ sudo apt-get install cmake python3-mako python3-six libboost-dev \ $ sudo apt-get install cmake python3-mako python3-six libboost-dev \
libboost-filesystem-dev libboost-system-dev libboost-filesystem-dev libboost-system-dev
~~~~~~ ```
Please note that if you are using a compiler supporting the C++17 standard Please note that if you are using a compiler supporting the C++17 standard (for
(for instance, gcc >= 8.0), specifically the std::filesystem library, packages instance, gcc >= 8.0), specifically the std::filesystem library, packages
`libboost-dev`, `libboost-filesystem-dev` and `libboost-system-dev` are no `libboost-dev`, `libboost-filesystem-dev` and `libboost-system-dev` are no
longer required dependencies. The CMake script will detect that availability for longer required dependencies. The CMake script will detect that availability for
you. you.
### Building on most x86 (32-bit and 64-bit) platforms ### Building on most x86 (32-bit and 64-bit) platforms
In order to build and install the library, go to the base folder of the In order to build and install the library, go to the base folder of the source
source code and do: code and do:
~~~~~~ ```
$ mkdir build $ mkdir build
$ cd build $ cd build
$ cmake .. $ cmake ..
$ make $ make
$ sudo make install $ sudo make install
~~~~~~ ```
That's it! That's it!
Before its first use, please execute `volk_gnsssdr_profile` to let Before its first use, please execute `volk_gnsssdr_profile` to let your system
your system know which is the fastest available implementation. This know which is the fastest available implementation. This only has to be done
only has to be done once: once:
~~~~~~ ```
$ volk_gnsssdr_profile $ volk_gnsssdr_profile
~~~~~~ ```
From now on, GNSS-SDR (and any other program of your own that makes use From now on, GNSS-SDR (and any other program of your own that makes use of
of VOLK_GNSSSDR) will benefit from the acceleration provided by SIMD VOLK_GNSSSDR) will benefit from the acceleration provided by SIMD instructions
instructions available in your processor. available in your processor.
The execution of `volk_gnsssdr_profile` can be set automatically The execution of `volk_gnsssdr_profile` can be set automatically after building,
after building, leaving your system ready to use: leaving your system ready to use:
~~~~~~ ```
$ cmake -DENABLE_PROFILING=ON ../ $ cmake -DENABLE_PROFILING=ON ../
$ make $ make
$ sudo make install $ sudo make install
~~~~~~ ```
### Building on Raspberry Pi and other ARM boards ### Building on Raspberry Pi and other ARM boards
To build for these boards you need specify the correct CMake toolchain file for To build for these boards you need specify the correct CMake toolchain file for
best performance. best performance.
* Raspberry Pi 4: `arm_cortex_a72_hardfp_native.cmake` - Raspberry Pi 4: `arm_cortex_a72_hardfp_native.cmake`
* Raspberry Pi 3: `arm_cortex_a53_hardfp_native.cmake` - Raspberry Pi 3: `arm_cortex_a53_hardfp_native.cmake`
Example for Raspberry Pi 4: Example for Raspberry Pi 4:
~~~~~~ ```
$ mkdir build && cd build $ mkdir build && cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake .. $ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake ..
$ make $ make
$ make test $ make test
$ sudo make install $ sudo make install
$ volk_gnsssdr_profile $ volk_gnsssdr_profile
~~~~~~ ```
## References ## References
If you use VOLK_GNSSSDR in your research and/or software, please cite If you use VOLK_GNSSSDR in your research and/or software, please cite the
the following paper: following paper:
* C. Fern&aacute;ndez-Prades, J. Arribas, P. Closas, [*Accelerating - C. Fern&aacute;ndez-Prades, J. Arribas, P. Closas,
GNSS Software Receivers*](https://zenodo.org/record/266493), in Proc. of the [_Accelerating GNSS Software Receivers_](https://zenodo.org/record/266493), in
29th International Technical Meeting of the Satellite Division of The Institute Proc. of the 29th International Technical Meeting of the Satellite Division of
of Navigation (ION GNSS+ 2016), pp. 44-61, Portland, Oregon, September 12-16, 2016. The Institute of Navigation (ION GNSS+ 2016), pp. 44-61, Portland, Oregon,
doi: [10.33012/2016.14576](https://doi.org/10.33012/2016.14576) September 12-16, 2016. doi:
[10.33012/2016.14576](https://doi.org/10.33012/2016.14576)
BibTeX entry: BibTeX entry:
@ -156,20 +152,18 @@ note = {{doi}: 10.33012/2016.14576}
} }
``` ```
Citations are useful for the continued development and maintenance of Citations are useful for the continued development and maintenance of the
the library. library.
---
VOLK_GNSSSDR was originally created by Andres Cecilia Luque in the framework of
the
[Summer Of Code In Space (SOCIS 2014)](https://socis.esa.int/about/ "SOCIS
webpage")
program organized by the European Space Agency, and then evolved and maintained
by Carles Fern&aacute;ndez-Prades and Javier Arribas. This software is released
under the GNU General Public License version 3, see the file COPYING.
___ This project is managed by
[Centre Tecnol&ograve;gic de Telecomunicacions de Catalunya](http://www.cttc.es "CTTC webpage").
VOLK_GNSSSDR was originally created by Andres Cecilia Luque in the
framework of the [Summer Of Code In Space (SOCIS
2014)](https://socis.esa.int/about/ "SOCIS
webpage") program organized by the European Space Agency, and then
evolved and maintained by Carles Fern&aacute;ndez-Prades and Javier
Arribas. This software is released under the GNU General Public License
version 3, see the file COPYING.
This project is managed by [Centre Tecnol&ograve;gic de Telecomunicacions de
Catalunya](http://www.cttc.es "CTTC webpage").

View File

@ -18,8 +18,10 @@ modules. If you need to design or work with VOLK kernels away from
the canonical VOLK library, this is the tool. If you need to tailor the canonical VOLK library, this is the tool. If you need to tailor
your own VOLK library for whatever reason, this is the tool. your own VOLK library for whatever reason, this is the tool.
The canonical VOLK library installs a volk_gnsssdr.h and a libvolk_gnsssdr.so. Your The canonical VOLK-GNSSSDR library installs a volk_gnsssdr.h and a
own library will install volk_gnsssdr_$name.h and libvolk_gnsssdr_$name.so. Ya Gronk? libvolk_gnsssdr.so. Your own library will install volk_gnsssdr_$name.h
and libvolk_gnsssdr_$name.so.
Ya Gronk?
Good. Good.
There isn't a substantial difference between the canonical VOLK There isn't a substantial difference between the canonical VOLK

View File

@ -130,7 +130,7 @@ if(NOT GZIP_NOTFOUND)
DESTINATION share/man/man1 DESTINATION share/man/man1
) )
execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/changelog execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/changelog.md
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
OUTPUT_FILE "${CMAKE_BINARY_DIR}/changelog.gz" OUTPUT_FILE "${CMAKE_BINARY_DIR}/changelog.gz"
) )

View File

@ -1,33 +1,49 @@
Continuous Reproducibility in GNSS Signal Processing ## Continuous Reproducibility in GNSS Signal Processing
----------------------------------------------------
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2018 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
This folder contains files required for the reproduction of the experiment proposed in: This folder contains files required for the reproduction of the experiment
proposed in:
C. Fern&aacute;ndez-Prades, J. Vil&agrave;-Valls, J. Arribas and A. Ramos, [*Continuous Reproducibility in GNSS Signal Processing*](https://ieeexplore.ieee.org/document/8331069/), IEEE Access, Vol. 6, No. 1, pp. 20451-20463, April 2018. DOI: [10.1109/ACCESS.2018.2822835](https://doi.org/10.1109/ACCESS.2018.2822835) C. Fern&aacute;ndez-Prades, J. Vil&agrave;-Valls, J. Arribas and A. Ramos,
[_Continuous Reproducibility in GNSS Signal Processing_](https://ieeexplore.ieee.org/document/8331069/),
IEEE Access, Vol. 6, No. 1, pp. 20451-20463, April 2018. DOI:
[10.1109/ACCESS.2018.2822835](https://doi.org/10.1109/ACCESS.2018.2822835)
The data set used in this paper is available at https://zenodo.org/record/1184601 The data set used in this paper is available at
https://zenodo.org/record/1184601
The sample format is `ibyte`: Interleaved (I&Q) stream of samples of type signed integer, 8-bit twos complement number ranging from -128 to 127. The sampling rate is 3 MSps. The sample format is `ibyte`: Interleaved (I&Q) stream of samples of type signed
integer, 8-bit twos complement number ranging from -128 to 127. The sampling
rate is 3 MSps.
The figure appearing in that paper can be automatically generated with the pipeline available at https://gitlab.com/gnss-sdr/gnss-sdr/pipelines The figure appearing in that paper can be automatically generated with the
pipeline available at https://gitlab.com/gnss-sdr/gnss-sdr/pipelines
After the **Build** stage, which compiles the source code in several versions of the most popular GNU/Linux distributions, and the **Test** stage, which executes GNSS-SDRs QA code, the **Deploy** stage creates and publishes an image of a software container ready to execute the experiment. This container is available by doing: After the **Build** stage, which compiles the source code in several versions of
the most popular GNU/Linux distributions, and the **Test** stage, which executes
GNSS-SDRs QA code, the **Deploy** stage creates and publishes an image of a
software container ready to execute the experiment. This container is available
by doing:
``` ```
$ docker pull carlesfernandez/docker-gnsssdr:access18 $ docker pull carlesfernandez/docker-gnsssdr:access18
``` ```
Then, in the **Experiment** stage, a job installs the image created in the previous step, grabs the data file, executes the experiment and produces a figure with the obtained results. Then, in the **Experiment** stage, a job installs the image created in the
previous step, grabs the data file, executes the experiment and produces a
figure with the obtained results.
The steps to reproduce the experiment in your own machine (with [Docker](https://www.docker.com) already installed and running) are: The steps to reproduce the experiment in your own machine (with
[Docker](https://www.docker.com) already installed and running) are:
``` ```
$ docker pull carlesfernandez/docker-gnsssdr:access18 $ docker pull carlesfernandez/docker-gnsssdr:access18
@ -52,4 +68,5 @@ $ cp Figure2.pdf /home/access18/
$ exit $ exit
``` ```
You will find the file `Figure2.pdf` in a newly created folder called `access18`. You will find the file `Figure2.pdf` in a newly created folder called
`access18`.

View File

@ -1,28 +1,43 @@
obsdiff ## obsdiff
-------
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: Javier Arribas, 2020. <jarribas@cttc.es> SPDX-FileCopyrightText: 2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
This program computes single-differences and double-differences from RINEX observation files. This program computes single-differences and double-differences from RINEX
observation files.
### Building ### Building
Requirements: Requirements:
* [Armadillo](http://arma.sourceforge.net/): A C++ library for linear algebra and scientific computing. This program requires version 9.800 or higher. If your installed Armadillo version is older, see below.
* [Gflags](https://github.com/gflags/gflags): A C++ library that implements command-line flags processing. If not found in your system, the latest version will be downloaded, built and linked for you at building time. - [Armadillo](http://arma.sourceforge.net/): A C++ library for linear algebra
* [GPSTK](https://github.com/SGL-UT/GPSTk): The GPS Toolkit, used for RINEX files reading. If not found in your system, the latest version will be downloaded, built and linked for you at building time. and scientific computing. This program requires version 9.800 or higher. If
* [Matio](https://github.com/tbeu/matio): A MATLAB MAT File I/O Library, version >= 1.5.3. If it is not found, or an older version is found, CMake will download, build and link a recent version for you at building time. your installed Armadillo version is older, see below.
- [Gflags](https://github.com/gflags/gflags): A C++ library that implements
command-line flags processing. If not found in your system, the latest version
will be downloaded, built and linked for you at building time.
- [GPSTK](https://github.com/SGL-UT/GPSTk): The GPS Toolkit, used for RINEX
files reading. If not found in your system, the latest version will be
downloaded, built and linked for you at building time.
- [Matio](https://github.com/tbeu/matio): A MATLAB MAT File I/O Library,
version >= 1.5.3. If it is not found, or an older version is found, CMake will
download, build and link a recent version for you at building time.
Optional: Optional:
* [Gnuplot](http://www.gnuplot.info/): a portable command-line driven graphing utility.
This program is built along with GNSS-SDR if the options `ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON` when calling CMake: - [Gnuplot](http://www.gnuplot.info/): a portable command-line driven graphing
utility.
This program is built along with GNSS-SDR if the options
`ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON`
when calling CMake:
``` ```
$ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON .. $ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON ..
@ -30,9 +45,13 @@ $ make obsdiff
$ sudo make install $ sudo make install
``` ```
The last step is optional. Without it, you still will get the executable at `../install/obsdiff`. The last step is optional. Without it, you still will get the executable at
`../install/obsdiff`.
This program requires Armadillo 9.800 or higher. If the available Armadillo version is older, this program will not be built. If your local Armadillo installed version is older than 9.800, you can force CMake to download, build and link a recent one: This program requires Armadillo 9.800 or higher. If the available Armadillo
version is older, this program will not be built. If your local Armadillo
installed version is older than 9.800, you can force CMake to download, build
and link a recent one:
``` ```
$ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON -DENABLE_OWN_ARMADILLO=ON .. $ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON -DENABLE_OWN_ARMADILLO=ON ..
@ -40,7 +59,9 @@ $ make obsdiff
$ sudo make install $ sudo make install
``` ```
This later option requires [BLAS](http://www.netlib.org/blas/), [LAPACK](http://www.netlib.org/lapack/) and [GFortran](https://gcc.gnu.org/fortran/) already installed in your system. This later option requires [BLAS](http://www.netlib.org/blas/),
[LAPACK](http://www.netlib.org/lapack/) and
[GFortran](https://gcc.gnu.org/fortran/) already installed in your system.
### Usage ### Usage
@ -48,7 +69,8 @@ This later option requires [BLAS](http://www.netlib.org/blas/), [LAPACK](http://
$ obsdiff --ref_rinex_obs=reference.20o --test_rinex_obs=rover.20o $ obsdiff --ref_rinex_obs=reference.20o --test_rinex_obs=rover.20o
``` ```
There is some flexibility in how command-line flags may be specified. The following examples are equivalent: There is some flexibility in how command-line flags may be specified. The
following examples are equivalent:
``` ```
$ obsdiff -ref_rinex_obs=reference.20o $ obsdiff -ref_rinex_obs=reference.20o
@ -58,6 +80,7 @@ $ obsdiff --ref_rinex_obs reference.20o
``` ```
For boolean flags, the possibilities are slightly different: For boolean flags, the possibilities are slightly different:
``` ```
$ obsdiff --single_diffs $ obsdiff --single_diffs
$ obsdiff --nosingle_diffs $ obsdiff --nosingle_diffs
@ -67,10 +90,13 @@ $ obsdiff --single_diffs=false
(as well as the single-dash variant on all of these). (as well as the single-dash variant on all of these).
Despite this flexibility, we recommend using only a single form: `--variable=value` for non-boolean flags, and `--variable/--novariable` for boolean flags. Despite this flexibility, we recommend using only a single form:
`--variable=value` for non-boolean flags, and `--variable/--novariable` for
boolean flags.
Available command-line flags: Available command-line flags:
<!-- prettier-ignore-start -->
| **Command-line flag** | **Default value** | **Description** | | **Command-line flag** | **Default value** | **Description** |
|:-------------------------:|:-----------------:|:-----------------| |:-------------------------:|:-----------------:|:-----------------|
| `--skip_obs_transitory_s` | `30.0` | Skip the initial observable outputs to avoid transitory results [s]. | | `--skip_obs_transitory_s` | `30.0` | Skip the initial observable outputs to avoid transitory results [s]. |
@ -84,3 +110,4 @@ Available command-line flags:
| `--remove_rx_clock_error` | `false` | Compute and remove the receivers clock error prior to compute observable differences (requires a valid RINEX nav file for both receivers) | | `--remove_rx_clock_error` | `false` | Compute and remove the receivers clock error prior to compute observable differences (requires a valid RINEX nav file for both receivers) |
| `--rinex_nav` | `reference.nav` | Filename of reference RINEX navigation file. Only needed if `remove_rx_clock_error` is set to `true`. | | `--rinex_nav` | `reference.nav` | Filename of reference RINEX navigation file. Only needed if `remove_rx_clock_error` is set to `true`. |
| `--show_plots` | `true` | [`true`, `false`]: If `true`, and if [gnuplot](http://www.gnuplot.info/) is found on the system, displays results plots on screen. Please set it to `false` for non-interactive testing. | | `--show_plots` | `true` | [`true`, `false`]: If `true`, and if [gnuplot](http://www.gnuplot.info/) is found on the system, displays results plots on screen. Please set it to `false` for non-interactive testing. |
<!-- prettier-ignore-end -->

View File

@ -1,19 +1,23 @@
Rinex2assist ## Rinex2assist
------------
<!-- prettier-ignore-start -->
[comment]: # ( [comment]: # (
SPDX-License-Identifier: GPL-3.0-or-later SPDX-License-Identifier: GPL-3.0-or-later
) )
[comment]: # ( [comment]: # (
SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es> SPDX-FileCopyrightText: 2019-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
) )
<!-- prettier-ignore-end -->
This program reads data from RINEX navigation files and generates XML files that can be read by GNSS-SDR as Assisted GNSS data. This program reads data from RINEX navigation files and generates XML files that
can be read by GNSS-SDR as Assisted GNSS data.
### Building ### Building
This program is built along with GNSS-SDR if the options `ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON` when calling CMake: This program is built along with GNSS-SDR if the options
`ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON`
when calling CMake:
``` ```
$ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON .. $ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON ..
@ -21,17 +25,20 @@ $ make
$ sudo make install $ sudo make install
``` ```
The last step is optional. Without it, you will get the executable at `../install/rinex2assist`. The last step is optional. Without it, you will get the executable at
`../install/rinex2assist`.
The building requires two extra dependencies: the Boost Iostreams library and the program `uncompress`: The building requires two extra dependencies: the Boost Iostreams library and
the program `uncompress`:
* The Boost Iostreams library can be installed through a package: - The Boost Iostreams library can be installed through a package:
- In Debian / Ubuntu: `sudo apt-get install libboost-iostreams-dev` - In Debian / Ubuntu: `sudo apt-get install libboost-iostreams-dev`
- In Fedora / CentOS: `sudo yum install boost-iostreams` - In Fedora / CentOS: `sudo yum install boost-iostreams`
- In OpenSUSE: `sudo zypper install libboost_iostreams-devel` - In OpenSUSE: `sudo zypper install libboost_iostreams-devel`
- In Arch Linux: included in `boost-libs` package. - In Arch Linux: included in `boost-libs` package.
- In macOS: included in Macports / Homebrew `boost` package. - In macOS: included in Macports / Homebrew `boost` package.
* The program `uncompress` is available by default in most UNIX and GNU/Linux systems. - The program `uncompress` is available by default in most UNIX and GNU/Linux
systems.
- In Fedora / CentOS: `sudo yum install ncompress` - In Fedora / CentOS: `sudo yum install ncompress`
- In OpenSUSE: `sudo zypper install ncompress` - In OpenSUSE: `sudo zypper install ncompress`
@ -43,16 +50,28 @@ The usage is as follows:
$ rinex2assist /path/to/RINEX_nav_file $ rinex2assist /path/to/RINEX_nav_file
``` ```
The argument is mandatory (the name of the RINEX navigation file). The name `gps_ephemeris.xml` is given to the output if GPS NAV data is fould. If the RINEX file contains Galileo data, the corresponding `gal_ephemeris.xml` file will be generated. The program is also able to extract parameters of the UTC and the Ionospheric models from the RINEX header, if available. They will be called `gps_utc_model.xml`, `gps_iono.xml`, `gal_utc_model.xml` and `gal_iono.xml`. The argument is mandatory (the name of the RINEX navigation file). The name
`gps_ephemeris.xml` is given to the output if GPS NAV data is fould. If the
RINEX file contains Galileo data, the corresponding `gal_ephemeris.xml` file
will be generated. The program is also able to extract parameters of the UTC and
the Ionospheric models from the RINEX header, if available. They will be called
`gps_utc_model.xml`, `gps_iono.xml`, `gal_utc_model.xml` and `gal_iono.xml`.
There are some servers available for downloading recent RINEX navigation files. For instance: There are some servers available for downloading recent RINEX navigation files.
* NASA: [ftp://cddis.gsfc.nasa.gov/pub/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/) For instance:
* ESA: [ftp://gssc.esa.int/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
* UNAVCO: [ftp://data-out.unavco.org/pub/hourly/rinex/](ftp://data-out.unavco.org/pub/hourly/rinex/)
Just make sure to pick up a recent file from a [station near you](http://www.igs.org/network). - NASA:
[ftp://cddis.gsfc.nasa.gov/pub/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
- ESA:
[ftp://gssc.esa.int/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
- UNAVCO:
[ftp://data-out.unavco.org/pub/hourly/rinex/](ftp://data-out.unavco.org/pub/hourly/rinex/)
The program accepts either versions 2.xx or 3.xx for the RINEX navigation data file, as well as compressed files (ending in `.gz` or `.Z`). Just make sure to pick up a recent file from a
[station near you](http://www.igs.org/network).
The program accepts either versions 2.xx or 3.xx for the RINEX navigation data
file, as well as compressed files (ending in `.gz` or `.Z`).
Examples: Examples:
@ -72,8 +91,8 @@ Generated file: gal_utc_model.xml
Generated file: gal_iono.xml Generated file: gal_iono.xml
``` ```
An example of GNSS-SDR configuration using ephemeris, UTC and ionospheric model
An example of GNSS-SDR configuration using ephemeris, UTC and ionospheric model parameters for GPS L1 and Galileo signals is shown below: parameters for GPS L1 and Galileo signals is shown below:
``` ```
GNSS-SDR.AGNSS_XML_enabled=true GNSS-SDR.AGNSS_XML_enabled=true
@ -86,4 +105,5 @@ GNSS-SDR.AGNSS_gal_iono_xml=gal_iono.xml
GNSS-SDR.AGNSS_gal_utc_model_xml=gal_utc_model.xml GNSS-SDR.AGNSS_gal_utc_model_xml=gal_utc_model.xml
``` ```
More info about the usage of AGNSS data [here](https://gnss-sdr.org/docs/sp-blocks/global-parameters/#assisted-gnss-with-xml-files). More info about the usage of AGNSS data
[here](https://gnss-sdr.org/docs/sp-blocks/global-parameters/#assisted-gnss-with-xml-files).