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