diff --git a/.clang-format b/.clang-format
new file mode 100644
index 000000000..7ab3cb079
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,97 @@
+---
+Language: Cpp
+# BasedOnStyle: Google
+# More info: https://clang.llvm.org/docs/ClangFormatStyleOptions.html
+AccessModifierOffset: -4
+AlignAfterOpenBracket: DontAlign
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: true
+AlignOperands: true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: true
+AllowShortLoopsOnASingleLine: true
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+ AfterClass: false
+ AfterControlStatement: false
+ AfterEnum: false
+ AfterFunction: false
+ AfterNamespace: false
+ AfterObjCDeclaration: false
+ AfterStruct: false
+ AfterUnion: false
+ BeforeCatch: false
+ BeforeElse: false
+ IndentBraces: false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: GNU
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+ColumnLimit: 0
+CommentPragmas: '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: true
+DisableFormat: false
+ExperimentalAutoDetectBinPacking: false
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeBlocks: Merge
+IncludeCategories:
+ - Regex: '^.*.h"'
+ Priority: 1
+ - Regex: '^.*(boost|gflags|glog|gnsssdr|gpstk|gtest|gnuradio|pmt|uhd|volk)/'
+ Priority: 2
+ - Regex: '^.*(armadillo|matio|pugixml)'
+ Priority: 2
+ - Regex: '.*'
+ Priority: 3
+ - Regex: '^<.*\.h>'
+ Priority: 4
+ - Regex: '^<.*'
+ Priority: 5
+IndentCaseLabels: false
+IndentWidth: 4
+IndentWrappedFunctionNames: false
+KeepEmptyLinesAtTheStartOfBlocks: false
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 2
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: false
+PenaltyBreakBeforeFirstCallParameter: 1
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 200
+PointerAlignment: Left
+ReflowComments: true
+SortIncludes: true
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 2
+SpacesInAngles: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Auto
+TabWidth: 8
+UseTab: Never
+...
diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 000000000..50fa566d0
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,3 @@
+---
+Checks: '-*,boost-use-to-string,cert-dcl21-cpp,cert-dcl58-cpp,cert-env33-c,cert-err52-cpp,cert-err60-cpp,cert-flp30-c,clang-analyzer-cplusplus*,cppcoreguidelines-pro-type-static-cast-downcast,cppcoreguidelines-slicing,google-build-namespaces,google-runtime-int,google-runtime-references,llvm-header-guard,misc-misplaced-const,misc-new-delete-overloads,misc-non-copyable-objects,misc-static-assert,misc-throw-by-value-catch-by-reference,misc-uniqueptr-reset-release,modernize-deprecated-headers,modernize-loop-convert,modernize-pass-by-value,modernize-raw-string-literal,modernize-use-auto,modernize-use-bool-literals,modernize-use-equals-default,modernize-use-equals-delete,modernize-use-noexcept,modernize-use-nullptr,modernize-use-using,performance-faster-string-find,performance-inefficient-algorithm,performance-move-const-arg,performance-type-promotion-in-math-fn,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,readability-container-size-empty,readability-named-parameter,readability-non-const-parameter,readability-string-compare'
+HeaderFilterRegex: '.*'
diff --git a/.gitignore b/.gitignore
index 2d1eebded..a128f1558 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,10 @@ docs/latex
docs/GNSS-SDR_manual.pdf
src/tests/data/output.dat
thirdparty/
+.settings
.project
.cproject
+.idea
+cmake-build-debug/
/install
.DS_Store
diff --git a/AUTHORS b/AUTHORS
index 451c4a971..6f98d2038 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,57 +1,58 @@
-GNSS-SDR Authorship
-------------------------------------------------------------------------------
-
-The GNSS-SDR project is hosted and sponsored by the Centre Tecnologic de
-Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located
-in Castelldefels (40.396764 N, 3.713379 E), 20 km south of Barcelona, Spain.
-GNSS-SDR is the by-product of GNSS research conducted at the Communications
-Systems Division of CTTC, and it is the combined effort of students,
-software engineers and researchers from different institutions around the World.
-
-Contact Information
-------------------------------------------------------------------------------
- GNSS-SDR Homepage
- ----------------------------
- http://gnss-sdr.org
-
-
- CTTC Homepage
- ----------------------------
- http://www.cttc.cat
-
-
- Mailing Lists
- ----------------------------
- gnss-sdr-developers@lists.sourceforge.net
- http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers
-
-
- Email
- ----------------------------
- Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat
-
-
-List of authors
-------------------------------------------------------------------------------
-Carles Fernandez-Prades carles.fernandez@cttc.cat Project manager
-Javier Arribas javier.arribas@cttc.cat Developer
-Luis Esteve Elfau luis@epsilon-formacion.com Developer
-Pau Closas pau.closas@cttc.cat Consultant
-Carlos Aviles carlos.avilesr@googlemail.com Developer
-David Pubill david.pubill@cttc.cat Developer
-Mara Branzanti mara.branzanti@gmail.com Developer
-Marc Molina marc.molina.pena@gmail.com Developer
-Daniel Fehr daniel.co@bluewin.ch Developer
-Marc Sales marcsales92@gmail.com Developer
-Damian Miralles dmiralles2009@gmail.com Developer
-Andres Cecilia Luque a.cecilia.luque@gmail.com Developer
-Leonardo Tonetto tonetto.dev@gmail.com Contributor
-Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
-Fran Fabra fabra@ice.csic.es Contributor
-Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
-Ignacio Paniego ignacio.paniego@gmail.com Web design
-Eva Puchol eva.puchol@gmail.com Web developer
-Carlos Paniego carpanie@hotmail.com Artwork
-
-
-
+GNSS-SDR Authorship
+------------------------------------------------------------------------------
+
+The GNSS-SDR project is hosted and sponsored by the Centre Tecnològic de
+Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located
+in Castelldefels (41.27504 N, 1.987709 E), 20 km south of Barcelona, Spain.
+GNSS-SDR is the by-product of GNSS research conducted at the Communications
+Systems Division of CTTC, and it is the combined effort of students,
+software engineers and researchers from different institutions around the World.
+
+Contact Information
+------------------------------------------------------------------------------
+ GNSS-SDR Homepage
+ ----------------------------
+ https://gnss-sdr.org
+
+
+ CTTC Homepage
+ ----------------------------
+ http://www.cttc.cat
+
+
+ Mailing Lists
+ ----------------------------
+ gnss-sdr-developers@lists.sourceforge.net
+ https://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers
+
+
+ Email
+ ----------------------------
+ Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat
+
+
+List of authors
+------------------------------------------------------------------------------
+Carles Fernández-Prades carles.fernandez@cttc.cat Project manager
+Javier Arribas javier.arribas@cttc.es Developer
+Luis Esteve Elfau luis@epsilon-formacion.com Developer
+Antonio Ramos antonio.ramosdet@gmail.com Developer
+Marc Majoral marc.majoral@cttc.cat Developer
+Jordi Vilà-Valls jordi.vila@cttc.cat Consultant
+Pau Closas pau.closas@northeastern.edu Consultant
+Álvaro Cebrián Juan acebrianjuan@gmail.com Contributor
+Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor
+Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
+Carlos Avilés carlos.avilesr@googlemail.com Contributor
+Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
+Damian Miralles dmiralles2009@gmail.com Contributor
+Daniel Fehr daniel.co@bluewin.ch Contributor
+David Pubill david.pubill@cttc.cat Contributor
+Fran Fabra fabra@ice.csic.es Contributor
+Gabriel Araujo gabriel.araujo.5000@gmail.com Contributor
+Gerald LaMountain gerald@gece.neu.edu Contributor
+Leonardo Tonetto tonetto.dev@gmail.com Contributor
+Mara Branzanti mara.branzanti@gmail.com Contributor
+Marc Molina marc.molina.pena@gmail.com Contributor
+Marc Sales marcsales92@gmail.com Contributor
+Carlos Paniego carpanie@hotmail.com Artwork
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8ea7c79ba..10cb6b119 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
########################################################################
@@ -21,7 +21,8 @@
########################################################################
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(WARNING "In-tree build is bad practice. Try 'cd build && cmake ../' ")
-endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
+endif()
+
cmake_minimum_required(VERSION 2.8)
project(gnss-sdr CXX C)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
@@ -30,23 +31,28 @@ file(RELATIVE_PATH RELATIVE_CMAKE_CALL ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRE
if(NOT CMAKE_PREFIX_PATH)
if(DEFINED ENV{PYBOMBS_PREFIX})
set(CMAKE_PREFIX_PATH $ENV{PYBOMBS_PREFIX})
- endif(DEFINED ENV{PYBOMBS_PREFIX})
+ endif()
if(DEFINED ENV{SNAP})
set(CMAKE_PREFIX_PATH $ENV{SNAP})
- endif(DEFINED ENV{SNAP})
-endif(NOT CMAKE_PREFIX_PATH)
+ endif()
+endif()
########################################################################
# Determine optional blocks/libraries to be built (default: not built)
-# Enable them here or at the command line by doing 'cmake -DENABLE_XXX=ON ../'
+# Enable them at the command line by doing 'cmake -DENABLE_XXX=ON ../'
########################################################################
# Support of optional RF front-ends
-option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source (experimental)" OFF)
+option(ENABLE_UHD "Enable the use of UHD (driver for all USRP devices)" ON)
+option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source" OFF)
option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF)
option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF)
option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF)
+option(ENABLE_PLUTOSDR "Enable the use of ADALM-PLUTO Evaluation Boards (Analog Devices Inc.), requires gr-iio" OFF)
+option(ENABLE_FMCOMMS2 "Enable the use of FMCOMMS4-EBZ + ZedBoard hardware, requires gr-iio" OFF)
+option(ENABLE_AD9361 "Enable the use of AD9361 directo to FPGA hardware, requires libiio" OFF)
+option(ENABLE_RAW_UDP "Enable the use of high-optimized custom UDP packet sample source, requires libpcap" OFF)
# Performance analysis tools
option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF)
@@ -56,6 +62,7 @@ option(ENABLE_GPROF "Enable the use of the GNU profiler tool 'gprof'" OFF)
option(ENABLE_PROFILING "Enable execution of volk_gnsssdr_profile at the end of the building" OFF)
option(ENABLE_OPENCL "Enable building of processing blocks implemented with OpenCL (experimental)" OFF)
option(ENABLE_CUDA "Enable building of processing blocks implemented with CUDA (experimental, requires CUDA SDK)" OFF)
+option(ENABLE_FPGA "Enable building of processing blocks implemented with FPGA (experimental, requires EZDMA driver)" OFF)
# Building and packaging options
option(ENABLE_GENERIC_ARCH "Builds a portable binary" OFF)
@@ -65,17 +72,22 @@ option(ENABLE_OWN_ARMADILLO "Download and build Armadillo locally" OFF)
option(ENABLE_LOG "Enable logging" ON)
if(ENABLE_PACKAGING)
set(ENABLE_GENERIC_ARCH ON)
-endif(ENABLE_PACKAGING)
+endif()
# Testing
option(ENABLE_UNIT_TESTING "Build unit tests" ON)
+option(ENABLE_UNIT_TESTING_MINIMAL "Build a minimal set of unit tests" OFF)
option(ENABLE_UNIT_TESTING_EXTRA "Download external files and build extra unit tests" OFF)
option(ENABLE_SYSTEM_TESTING "Build system tests" OFF)
option(ENABLE_SYSTEM_TESTING_EXTRA "Download external tools and build extra system tests" OFF)
if(ENABLE_SYSTEM_TESTING_EXTRA)
set(ENABLE_SYSTEM_TESTING ON)
-endif(ENABLE_SYSTEM_TESTING_EXTRA)
+endif()
option(ENABLE_OWN_GPSTK "Force to download, build and link GPSTk for system tests, even if it is already installed" OFF)
+option(ENABLE_INSTALL_TESTS "Install QA code system-wide" OFF)
+if(ENABLE_FPGA)
+ set(ENABLE_INSTALL_TESTS ON)
+endif()
@@ -86,28 +98,27 @@ set(THIS_IS_A_RELEASE ON) # only related to version name, no further implicati
if(NOT ${THIS_IS_A_RELEASE})
# Get the current working branch
execute_process(
- COMMAND git rev-parse --abbrev-ref HEAD
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE GIT_BRANCH
- OUTPUT_STRIP_TRAILING_WHITESPACE
+ COMMAND git rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
)
-
# Get the latest abbreviated commit hash of the working branch
execute_process(
- COMMAND git log -1 --format=%h
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE GIT_COMMIT_HASH
- OUTPUT_STRIP_TRAILING_WHITESPACE
+ COMMAND git log -1 --format=%h
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_COMMIT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
)
-endif(NOT ${THIS_IS_A_RELEASE})
+endif()
set(VERSION_INFO_MAJOR_VERSION 0)
-set(VERSION_INFO_API_COMPAT 0)
+set(VERSION_INFO_API_COMPAT 0)
if(${THIS_IS_A_RELEASE})
- set(VERSION_INFO_MINOR_VERSION 9)
-else(${THIS_IS_A_RELEASE})
- set(VERSION_INFO_MINOR_VERSION 9.git-${GIT_BRANCH}-${GIT_COMMIT_HASH})
-endif(${THIS_IS_A_RELEASE})
+ set(VERSION_INFO_MINOR_VERSION 10)
+else()
+ set(VERSION_INFO_MINOR_VERSION 10.git-${GIT_BRANCH}-${GIT_COMMIT_HASH})
+endif()
set(VERSION ${VERSION_INFO_MAJOR_VERSION}.${VERSION_INFO_API_COMPAT}.${VERSION_INFO_MINOR_VERSION})
@@ -118,181 +129,281 @@ set(VERSION ${VERSION_INFO_MAJOR_VERSION}.${VERSION_INFO_API_COMPAT}.${VERSION_I
########################################################################
include(ExternalProject)
# Detect 64-bits machine
-if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- set(ARCH_64BITS TRUE)
-endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ARCH_64BITS TRUE)
+endif()
set(OS_IS_MACOSX "")
set(OS_IS_LINUX "")
# Detect Linux Distribution
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
- set(OperatingSystem "Linux")
- set(OS_IS_LINUX TRUE)
- if(ARCH_64BITS)
- set(ARCH_ "(64 bits)")
- else(ARCH_64BITS)
- set(ARCH_ "(32 bits)")
- endif(ARCH_64BITS)
- if(EXISTS "/etc/lsb-release")
- execute_process(COMMAND cat /etc/lsb-release
- COMMAND grep DISTRIB_ID
- COMMAND awk -F= "{ print $2 }"
- COMMAND tr "\n" " "
- COMMAND sed "s/ //"
- OUTPUT_VARIABLE LINUX_DISTRIBUTION
- RESULT_VARIABLE LINUX_ID_RESULT
- )
- execute_process(COMMAND cat /etc/lsb-release
- COMMAND grep DISTRIB_RELEASE
- COMMAND awk -F= "{ print $2 }"
- COMMAND tr "\n" " "
- COMMAND sed "s/ //"
- OUTPUT_VARIABLE LINUX_VER
- RESULT_VARIABLE LINUX_VER_RESULT
- )
- endif(EXISTS "/etc/lsb-release")
- if(NOT LINUX_DISTRIBUTION)
- if(EXISTS "/etc/linuxmint/info")
- set(LINUX_DISTRIBUTION "LinuxMint")
- execute_process(COMMAND cat /etc/linuxmint/info
- COMMAND grep -m1 RELEASE
- COMMAND awk -F= "{ print $2 }"
- COMMAND tr "\n" " "
- COMMAND sed "s/ //"
- OUTPUT_VARIABLE LINUX_VER
- RESULT_VARIABLE LINUX_VER_RESULT
- )
- endif(EXISTS "/etc/linuxmint/info")
- endif(NOT LINUX_DISTRIBUTION)
- if(NOT LINUX_DISTRIBUTION)
- if(EXISTS "/etc/os-release")
- execute_process(COMMAND cat /etc/os-release
- COMMAND grep -m1 NAME
- COMMAND awk -F= "{ print $2 }"
- COMMAND tr "\n" " "
- COMMAND sed "s/ //"
- OUTPUT_VARIABLE LINUX_DISTRIBUTION
- RESULT_VARIABLE LINUX_ID_RESULT
- )
- execute_process(COMMAND cat /etc/os-release
- COMMAND grep VERSION_ID
- COMMAND awk -F= "{ print $2 }"
- COMMAND tr "\n" " "
- COMMAND sed "s/ //"
- OUTPUT_VARIABLE LINUX_VER
- RESULT_VARIABLE LINUX_VER_RESULT
- )
- if(${LINUX_DISTRIBUTION} MATCHES "Debian")
- set(LINUX_DISTRIBUTION "Debian")
- file(READ /etc/debian_version LINUX_VER)
- endif(${LINUX_DISTRIBUTION} MATCHES "Debian")
- endif(EXISTS "/etc/os-release")
- endif(NOT LINUX_DISTRIBUTION)
- if(NOT LINUX_DISTRIBUTION)
- if(EXISTS "/etc/redhat-release")
- set(LINUX_DISTRIBUTION "Red Hat")
- file (READ /etc/redhat-release LINUX_VER)
- endif(EXISTS "/etc/redhat-release")
- endif(NOT LINUX_DISTRIBUTION)
- if(NOT LINUX_DISTRIBUTION)
- if(EXISTS "/etc/debian_version")
- set(LINUX_DISTRIBUTION "Debian")
- file (READ /etc/debian_version LINUX_VER)
- endif(EXISTS "/etc/debian_version")
- endif(NOT LINUX_DISTRIBUTION)
- if(NOT LINUX_DISTRIBUTION)
- set(LINUX_DISTRIBUTION "Generic")
- set(LINUX_VER "Unknown")
- endif(NOT LINUX_DISTRIBUTION)
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on ${LINUX_DISTRIBUTION} GNU/Linux Release ${LINUX_VER} ${ARCH_}")
-endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ set(OperatingSystem "Linux")
+ set(OS_IS_LINUX TRUE)
+ if(ARCH_64BITS)
+ set(ARCH_ "(64 bits)")
+ else()
+ set(ARCH_ "(32 bits)")
+ endif()
+ if(EXISTS "/etc/lsb-release")
+ execute_process(COMMAND cat /etc/lsb-release
+ COMMAND grep DISTRIB_ID
+ COMMAND awk -F= "{ print $2 }"
+ COMMAND tr "\n" " "
+ COMMAND sed "s/ //"
+ OUTPUT_VARIABLE LINUX_DISTRIBUTION
+ RESULT_VARIABLE LINUX_ID_RESULT
+ )
+ execute_process(COMMAND cat /etc/lsb-release
+ COMMAND grep DISTRIB_RELEASE
+ COMMAND awk -F= "{ print $2 }"
+ COMMAND tr "\n" " "
+ COMMAND sed "s/ //"
+ OUTPUT_VARIABLE LINUX_VER
+ RESULT_VARIABLE LINUX_VER_RESULT
+ )
+ endif()
+ if(NOT LINUX_DISTRIBUTION)
+ if(EXISTS "/etc/linuxmint/info")
+ set(LINUX_DISTRIBUTION "LinuxMint")
+ execute_process(COMMAND cat /etc/linuxmint/info
+ COMMAND grep -m1 RELEASE
+ COMMAND awk -F= "{ print $2 }"
+ COMMAND tr "\n" " "
+ COMMAND sed "s/ //"
+ OUTPUT_VARIABLE LINUX_VER
+ RESULT_VARIABLE LINUX_VER_RESULT
+ )
+ endif()
+ endif()
+ if(NOT LINUX_DISTRIBUTION)
+ if(EXISTS "/etc/os-release")
+ execute_process(COMMAND cat /etc/os-release
+ COMMAND grep -m1 NAME
+ COMMAND awk -F= "{ print $2 }"
+ COMMAND tr "\n" " "
+ COMMAND sed "s/ //"
+ OUTPUT_VARIABLE LINUX_DISTRIBUTION
+ RESULT_VARIABLE LINUX_ID_RESULT
+ )
+ execute_process(COMMAND cat /etc/os-release
+ COMMAND grep VERSION_ID
+ COMMAND awk -F= "{ print $2 }"
+ COMMAND tr "\n" " "
+ COMMAND sed "s/ //"
+ OUTPUT_VARIABLE LINUX_VER
+ RESULT_VARIABLE LINUX_VER_RESULT
+ )
+ if(${LINUX_DISTRIBUTION} MATCHES "Debian")
+ set(LINUX_DISTRIBUTION "Debian")
+ file(READ /etc/debian_version LINUX_VER)
+ endif()
+ endif()
+ endif()
+ if(NOT LINUX_DISTRIBUTION)
+ if(EXISTS "/etc/redhat-release")
+ set(LINUX_DISTRIBUTION "Red Hat")
+ file(READ /etc/redhat-release LINUX_VER)
+ endif()
+ endif()
+ if(NOT LINUX_DISTRIBUTION)
+ if(EXISTS "/etc/debian_version")
+ set(LINUX_DISTRIBUTION "Debian")
+ file(READ /etc/debian_version LINUX_VER)
+ endif()
+ endif()
+ if(NOT LINUX_DISTRIBUTION)
+ set(LINUX_DISTRIBUTION "Generic")
+ set(LINUX_VER "Unknown")
+ endif()
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on ${LINUX_DISTRIBUTION} GNU/Linux Release ${LINUX_VER} ${ARCH_}")
+endif()
+if(NOT LINUX_DISTRIBUTION)
+ set(LINUX_DISTRIBUTION "Unknown")
+endif()
-# Detect Mac OS X Version
+# Detect macOS / Mac OS X Version
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- set(OperatingSystem "Mac OS X")
- set(OS_IS_MACOSX TRUE)
- exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
- string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
- if(${DARWIN_VERSION} MATCHES "16")
- set(MACOS_SIERRA TRUE)
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on macOS Sierra 10.12")
- endif(${DARWIN_VERSION} MATCHES "16")
- if(${DARWIN_VERSION} MATCHES "15")
- set(MACOSX_EL_CAPITAN TRUE)
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.11 El Capitan")
- endif(${DARWIN_VERSION} MATCHES "15")
- if(${DARWIN_VERSION} MATCHES "14")
- set(MACOSX_YOSEMITE TRUE)
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.10 Yosemite")
- endif(${DARWIN_VERSION} MATCHES "14")
- if(${DARWIN_VERSION} MATCHES "13")
- set(MACOSX_MAVERICKS TRUE)
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
- set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
- set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION="com.apple.compilers.llvm.clang.1_0")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.9 Mavericks")
- endif(${DARWIN_VERSION} MATCHES "13")
- if(${DARWIN_VERSION} MATCHES "12")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.8 Mountain Lion")
- endif(${DARWIN_VERSION} MATCHES "12")
- if(${DARWIN_VERSION} MATCHES "11")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.7 Lion")
- endif(${DARWIN_VERSION} MATCHES "11")
- if(${DARWIN_VERSION} MATCHES "10")
- message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.6 Snow Leopard")
- endif(${DARWIN_VERSION} MATCHES "10")
-endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set(OperatingSystem "Mac OS X")
+ set(OS_IS_MACOSX TRUE)
+ execute_process(COMMAND uname -v OUTPUT_VARIABLE DARWIN_VERSION)
+ string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
+ if(${DARWIN_VERSION} MATCHES "18")
+ set(MACOS_MOJAVE TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on macOS Mojave 10.14")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "17")
+ set(MACOS_HIGH_SIERRA TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on macOS High Sierra 10.13")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "16")
+ set(MACOS_SIERRA TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on macOS Sierra 10.12")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "15")
+ set(MACOSX_EL_CAPITAN TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.11 El Capitan")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "14")
+ set(MACOSX_YOSEMITE TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.10 Yosemite")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "13")
+ set(MACOSX_MAVERICKS TRUE)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION="com.apple.compilers.llvm.clang.1_0")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.9 Mavericks")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "12")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.8 Mountain Lion")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "11")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.7 Lion")
+ endif()
+ if(${DARWIN_VERSION} MATCHES "10")
+ message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.6 Snow Leopard")
+ endif()
+endif()
-#select the release build type by default to get optimization flags
+# Define extra build types and select Release by default to get optimization flags
+include(GnsssdrBuildTypes)
+# Available options:
+# - None: nothing set
+# - Debug: -O2 -g
+# - Release: -O3
+# - RelWithDebInfo: -O3 -g
+# - MinSizeRel: -Os
+# - Coverage: -Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage
+# - NoOptWithASM: -O0 -g -save-temps
+# - O2WithASM: -O2 -g -save-temps
+# - O3WithASM: -O3 -g -save-temps
+# - ASAN: -Wall -Wextra -g -O2 -fsanitize=address -fno-omit-frame-pointer
if(NOT CMAKE_BUILD_TYPE)
- if(ENABLE_GPERFTOOLS OR ENABLE_GPROF)
- set(CMAKE_BUILD_TYPE "RelWithDebInfo")
- message(STATUS "Build type not specified: defaulting to RelWithDebInfo.")
- else(ENABLE_GPERFTOOLS OR ENABLE_GPROF)
- set(CMAKE_BUILD_TYPE "Release")
- message(STATUS "Build type not specified: defaulting to Release.")
- endif(ENABLE_GPERFTOOLS OR ENABLE_GPROF)
-else(NOT CMAKE_BUILD_TYPE)
- message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.")
-endif(NOT CMAKE_BUILD_TYPE)
+ if(ENABLE_GPERFTOOLS OR ENABLE_GPROF)
+ set(CMAKE_BUILD_TYPE "RelWithDebInfo")
+ message(STATUS "Build type not specified: defaulting to RelWithDebInfo.")
+ else()
+ set(CMAKE_BUILD_TYPE "Release")
+ message(STATUS "Build type not specified: defaulting to Release.")
+ endif()
+else()
+ message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.")
+endif()
+gnsssdr_check_build_type(${CMAKE_BUILD_TYPE})
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
-# Append -O2 optimization flag for Debug builds
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2")
+# allow 'large' files in 32 bit builds
+if(UNIX)
+ add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES)
+endif()
+
+# Determine if we are using make or ninja
+if(CMAKE_MAKE_PROGRAM MATCHES "make")
+ set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "make")
+endif()
+if(CMAKE_MAKE_PROGRAM MATCHES "ninja")
+ set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "ninja")
+endif()
+if(NOT CMAKE_MAKE_PROGRAM_PRETTY_NAME)
+ set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "${CMAKE_MAKE_PROGRAM}")
+endif()
################################################################################
-# Checkout cmake version
+# Minimum required versions
################################################################################
-if(CMAKE_VERSION VERSION_LESS 2.8.8)
- message(STATUS "Your CMake version is too old and does not support some features required by GNSS-SDR. CMake version must be at least 2.8.8. For more information check https://github.com/joakimkarlsson/bandit/issues/40")
- message(FATAL_ERROR "Fatal error: CMake >= 2.8.8 required.")
-endif(CMAKE_VERSION VERSION_LESS 2.8.8)
+set(GNSSSDR_CMAKE_MIN_VERSION "2.8.8")
+set(GNSSSDR_GCC_MIN_VERSION "4.7.2")
+set(GNSSSDR_CLANG_MIN_VERSION "3.4.0")
+set(GNSSSDR_APPLECLANG_MIN_VERSION "500")
+set(GNSSSDR_GNURADIO_MIN_VERSION "3.7.3")
+set(GNSSSDR_BOOST_MIN_VERSION "1.45")
+set(GNSSSDR_PYTHON_MIN_VERSION "2.7")
+set(GNSSSDR_PYTHON3_MIN_VERSION "3.4")
+set(GNSSSDR_MAKO_MIN_VERSION "0.4.2")
+set(GNSSSDR_ARMADILLO_MIN_VERSION "5.300.0")
+set(GNSSSDR_MATIO_MIN_VERSION "1.5.3")
################################################################################
-# Checkout compiler version
+# Versions to download and build (but not installed) if not found
################################################################################
-if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
- message(STATUS "Your GCC version is too old and does not support some C++11 features required by GNSS-SDR. GCC version must be at least 4.7")
- if(${LINUX_DISTRIBUTION} MATCHES "Ubuntu")
- if(${LINUX_VER} MATCHES "12.04")
- message(STATUS "For instructions on how to upgrade GCC, check http://askubuntu.com/a/271561")
- endif(${LINUX_VER} MATCHES "12.04")
- endif(${LINUX_DISTRIBUTION} MATCHES "Ubuntu")
- message(FATAL_ERROR "Fatal error: GCC >= 4.7 required.")
- endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
-endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2")
+set(GNSSSDR_GLOG_LOCAL_VERSION "0.3.5")
+set(GNSSSDR_ARMADILLO_LOCAL_VERSION "9.200.x")
+set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1")
+set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master")
+set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6")
+set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.13")
+set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.9")
+
+if(CMAKE_VERSION VERSION_LESS "3.0.2") # Fix for CentOS 7
+ set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1")
+endif()
+
+
+
+################################################################################
+# Check CMake version
+################################################################################
+if(CMAKE_VERSION VERSION_LESS ${GNSSSDR_CMAKE_MIN_VERSION})
+ message(STATUS "Your CMake version is too old and does not support some features required by GNSS-SDR. CMake version must be at least ${GNSSSDR_CMAKE_MIN_VERSION}.")
+ message(FATAL_ERROR "Fatal error: CMake >= ${GNSSSDR_CMAKE_MIN_VERSION} required.")
+endif()
+
+
+
+################################################################################
+# Check compiler version
+################################################################################
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${GNSSSDR_GCC_MIN_VERSION})
+ message(STATUS "Your GCC version is too old and does not support some C++ features required by GNSS-SDR. GCC version must be at least ${GNSSSDR_GCC_MIN_VERSION}")
+ message(FATAL_ERROR "Fatal error: GCC >= ${GNSSSDR_GCC_MIN_VERSION} required.")
+ endif()
+endif()
+
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ execute_process(COMMAND
+ ${CMAKE_CXX_COMPILER} -v
+ RESULT_VARIABLE _res ERROR_VARIABLE _err
+ ERROR_STRIP_TRAILING_WHITESPACE)
+ if(${_res} STREQUAL "0")
+ # output is in error stream
+ string(REGEX MATCH "^Apple.*" IS_APPLE ${_err})
+ if("${IS_APPLE}" STREQUAL "")
+ set(MIN_VERSION ${GNSSSDR_CLANG_MIN_VERSION})
+ set(APPLE_STR "")
+ # retrieve the compiler's version from it
+ string(REGEX MATCH "clang version [0-9.]+" CLANG_OTHER_VERSION ${_err})
+ string(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_OTHER_VERSION})
+ else()
+ set(MIN_VERSION ${GNSSSDR_APPLECLANG_MIN_VERSION})
+ set(APPLE_STR "Apple ")
+ # retrieve the compiler's version from it
+ string(REGEX MATCH "(clang-[0-9.]+)" CLANG_APPLE_VERSION ${_err})
+ string(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_APPLE_VERSION})
+ endif()
+ if(${CLANG_VERSION} VERSION_LESS "${MIN_VERSION}")
+ message(WARNING "\nThe compiler selected to build GNSS-SDR (${APPLE_STR}Clang version ${CLANG_VERSION} : ${CMAKE_CXX_COMPILER}) is older than that officially supported (${MIN_VERSION} minimum). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.")
+ endif()
+ else()
+ message(WARNING "\nCannot determine the version of the compiler selected to build GNSS-SDR (${APPLE_STR}Clang : ${CMAKE_CXX_COMPILER}). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.")
+ endif()
+endif()
@@ -302,10 +413,10 @@ endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
if(NOT OS_IS_MACOSX)
if(CMAKE_CROSSCOMPILING)
set(IS_ARM TRUE)
- else(CMAKE_CROSSCOMPILING)
+ else()
include(TestForARM)
- endif(CMAKE_CROSSCOMPILING)
-endif(NOT OS_IS_MACOSX)
+ endif()
+endif()
@@ -313,18 +424,27 @@ endif(NOT OS_IS_MACOSX)
# Check for availability of SSE
################################################################################
if(NOT ENABLE_GENERIC_ARCH)
- include(TestForSSE)
-endif(NOT ENABLE_GENERIC_ARCH)
+ include(TestForSSE)
+endif()
-###############################
-# Find a thread library
-###############################
-if(OS_IS_LINUX)
+################################################################################
+# Find the POSIX thread (pthread) libraries
+################################################################################
+if(CMAKE_VERSION VERSION_LESS 3.1)
find_package(Threads REQUIRED)
- link_libraries(${CMAKE_THREAD_LIBS_INIT})
-endif(OS_IS_LINUX)
+ set(THREAD_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+else()
+ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+ if(CMAKE_CROSSCOMPILING)
+ set(THREADS_PREFER_PTHREAD_FLAG FALSE)
+ else()
+ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+ endif()
+ find_package(Threads REQUIRED)
+ set(THREAD_LIBRARIES Threads::Threads)
+endif()
@@ -335,37 +455,37 @@ enable_testing()
if(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING)
if(EXISTS $ENV{GTEST_DIR})
set(GTEST_DIR $ENV{GTEST_DIR})
- endif(EXISTS $ENV{GTEST_DIR})
+ endif()
if(GTEST_DIR)
message(STATUS "Googletest root folder set at ${GTEST_DIR}")
find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS ${GTEST_DIR})
if(LIBGTEST_DEV_DIR)
- message (STATUS "Googletest has been found.")
- else(LIBGTEST_DEV_DIR)
- message (FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.")
- endif(LIBGTEST_DEV_DIR)
+ message(STATUS "Googletest has been found.")
+ else()
+ message(FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.")
+ endif()
find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_DIR}/include)
- else(GTEST_DIR)
- find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS /usr/src/gtest /opt/local/src/gtest-1.7.0)
+ else()
+ find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS /usr/src/googletest/googletest /usr/src/gtest /usr/include/gtest /opt/local/src/gtest-1.7.0)
find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS /usr/include /opt/local/src/gtest-1.7.0/include)
if(LIBGTEST_DEV_DIR)
- message (STATUS "Googletest (libgtest-dev package) has been found.")
- else(LIBGTEST_DEV_DIR)
- message (STATUS " Googletest has not been found.")
- message (STATUS " Googletest will be downloaded and built automatically ")
- message (STATUS " when doing 'make'. ")
- endif(LIBGTEST_DEV_DIR)
- endif(GTEST_DIR)
-endif(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING)
+ message(STATUS "Googletest package has been found.")
+ else()
+ message(STATUS " Googletest has not been found.")
+ message(STATUS " Googletest v${GNSSSDR_GTEST_LOCAL_VERSION} will be downloaded and built automatically ")
+ message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
+ endif()
+ endif()
+endif()
################################################################################
-# Boost - http://www.boost.org
+# Boost - https://www.boost.org
################################################################################
if(UNIX AND EXISTS "/usr/lib64")
list(APPEND BOOST_LIBRARYDIR "/usr/lib64") # Fedora 64-bit fix
-endif(UNIX AND EXISTS "/usr/lib64")
+endif()
set(Boost_ADDITIONAL_VERSIONS
"1.45.0" "1.45" "1.46.0" "1.46" "1.48.0" "1.48" "1.49.0" "1.49"
"1.50.0" "1.50" "1.51.0" "1.51" "1.53.0" "1.53" "1.54.0" "1.54"
@@ -373,58 +493,59 @@ set(Boost_ADDITIONAL_VERSIONS
"1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
"1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
"1.70.0" "1.70" "1.71.0" "1.71" "1.72.0" "1.72" "1.73.0" "1.73" "1.74.0" "1.74"
+ "1.75.0" "1.75" "1.76.0" "1.76" "1.77.0" "1.77" "1.78.0" "1.78" "1.79.0" "1.79"
+ "1.80.0" "1.80" "1.81.0" "1.81" "1.82.0" "1.82" "1.83.0" "1.83" "1.84.0" "1.84"
)
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS OFF)
-find_package(Boost COMPONENTS date_time system filesystem thread serialization chrono unit_test_framework program_options REQUIRED)
+find_package(Boost COMPONENTS date_time system filesystem thread serialization chrono REQUIRED)
if(NOT Boost_FOUND)
- message(FATAL_ERROR "Fatal error: Boost (version >=1.45.0) required.")
-endif(NOT Boost_FOUND)
+ message(FATAL_ERROR "Fatal error: Boost (version >=${GNSSSDR_BOOST_MIN_VERSION}) required.")
+endif()
################################################################################
-# GNU Radio - http://gnuradio.org
+# GNU Radio - https://gnuradio.org
################################################################################
set(GR_REQUIRED_COMPONENTS RUNTIME ANALOG BLOCKS FFT FILTER PMT)
-find_package(Gnuradio)
+find_package(GNURADIO)
if(PC_GNURADIO_RUNTIME_VERSION)
- if(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS 3.7.3)
- set(GNURADIO_RUNTIME_FOUND)
- message(STATUS "The GNU Radio version installed in your system is too old.")
- endif(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS 3.7.3)
-endif(PC_GNURADIO_RUNTIME_VERSION)
+ if(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS ${GNSSSDR_GNURADIO_MIN_VERSION})
+ set(GNURADIO_RUNTIME_FOUND)
+ message(STATUS "The GNU Radio version installed in your system is too old.")
+ endif()
+endif()
if(NOT GNURADIO_RUNTIME_FOUND)
- message(STATUS "CMake cannot find GNU Radio >= 3.7.3")
- if(OS_IS_LINUX)
- message("Go to https://github.com/gnuradio/pybombs")
- message("and follow the instructions to install GNU Radio in your system.")
- message(FATAL_ERROR "GNU Radio 3.7.3 or later is required to build gnss-sdr")
- endif(OS_IS_LINUX)
- if(OS_IS_MACOSX)
- message("You can install it easily via Macports:")
- message(" sudo port install gnuradio ")
- message("Alternatively, you can use homebrew:")
- message(" brew tap odrisci/gnuradio")
- message(" brew install gnuradio" )
- message(FATAL_ERROR "GNU Radio 3.7.3 or later is required to build gnss-sdr")
- endif(OS_IS_MACOSX)
-endif(NOT GNURADIO_RUNTIME_FOUND)
+ message(STATUS "CMake cannot find GNU Radio >= ${GNSSSDR_GNURADIO_MIN_VERSION}")
+ if(OS_IS_LINUX)
+ message("Go to https://github.com/gnuradio/pybombs")
+ message("and follow the instructions to install GNU Radio in your system.")
+ message(FATAL_ERROR "GNU Radio ${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
+ endif()
+ if(OS_IS_MACOSX)
+ message("You can install it easily via Macports:")
+ message(" sudo port install gnuradio ")
+ message("Alternatively, you can use homebrew:")
+ message(" brew install gnuradio")
+ message(FATAL_ERROR "GNU Radio ${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
+ endif()
+endif()
if(NOT GNURADIO_ANALOG_FOUND)
- message(FATAL_ERROR "*** The gnuradio-analog library v3.7.3 or later is required to build gnss-sdr")
+ message(FATAL_ERROR "*** The gnuradio-analog library v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
endif()
if(NOT GNURADIO_BLOCKS_FOUND)
- message(FATAL_ERROR "*** The gnuradio-blocks library v3.7.3 or later is required to build gnss-sdr")
+ message(FATAL_ERROR "*** The gnuradio-blocks library v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
endif()
if(NOT GNURADIO_FILTER_FOUND)
- message(FATAL_ERROR "*** The gnuradio-filter library v3.7.3 or later is required to build gnss-sdr")
+ message(FATAL_ERROR "*** The gnuradio-filter library v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
endif()
if(NOT GNURADIO_FFT_FOUND)
- message(FATAL_ERROR "*** The gnuradio-fft library v3.7.3 or later is required to build gnss-sdr")
+ message(FATAL_ERROR "*** The gnuradio-fft library v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
endif()
if(NOT GNURADIO_PMT_FOUND)
- message(FATAL_ERROR "*** The gnuradio-pmt library v3.7.3 or later is required to build gnss-sdr")
+ message(FATAL_ERROR "*** The gnuradio-pmt library v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr")
endif()
@@ -432,128 +553,163 @@ endif()
################################################################################
# VOLK - Vector-Optimized Library of Kernels
################################################################################
-find_package(Volk)
+find_package(VOLK)
if(NOT VOLK_FOUND)
message(FATAL_ERROR "*** VOLK is required to build gnss-sdr")
endif()
+################################################################################
+# Log4cpp - http://log4cpp.sourceforge.net/
+################################################################################
+find_package(LOG4CPP)
+if(NOT LOG4CPP_FOUND)
+ message(FATAL_ERROR "*** Log4cpp is required to build gnss-sdr")
+endif()
+
+
+
################################################################################
# volk_gnsssdr module - GNSS-SDR's own VOLK library
################################################################################
-find_package(VolkGnssSdr)
-
-if(NOT VOLK_GNSSSDR_FOUND)
- message(STATUS " volk_gnsssdr will be built along with gnss-sdr when doing 'make'")
+find_package(VOLKGNSSSDR)
+if(NOT VOLKGNSSSDR_FOUND)
+ message(STATUS " volk_gnsssdr will be built along with gnss-sdr when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'")
###############################
# Find Python required modules
###############################
- include(SetupPython) #sets PYTHON_EXECUTABLE and PYTHON_DASH_B
- GNSSSDR_PYTHON_CHECK_MODULE("python >= 2.7" sys "sys.version.split()[0] >= '2.7'" PYTHON_MIN_VER_FOUND)
- GNSSSDR_PYTHON_CHECK_MODULE("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
- GNSSSDR_PYTHON_CHECK_MODULE("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
+ include(SetupPython) # sets PYTHON_EXECUTABLE and search for required modules
if(NOT PYTHON_MIN_VER_FOUND)
- message(FATAL_ERROR "Python 2.7 or greater required to build VOLK_GNSSSDR")
+ message(FATAL_ERROR "Python ${GNSSSDR_PYTHON_MIN_VERSION} or greater required to build VOLK_GNSSSDR")
+ endif()
+
+ if(${PYTHON3})
+ set(PYTHON_NAME "python3")
+ else()
+ set(PYTHON_NAME "python")
endif()
# Mako
if(NOT MAKO_FOUND)
- message(STATUS "Mako templates not found. See http://www.makotemplates.org/ ")
+ message(STATUS "Mako template library not found. See http://www.makotemplates.org/ ")
message(STATUS " You can try to install it by typing:")
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo yum install python-mako")
+ message(STATUS " sudo yum install ${PYTHON_NAME}-mako")
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(STATUS " sudo zypper install python-Mako")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo apt-get install python-mako")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(STATUS " sudo zypper install ${PYTHON_NAME}-Mako")
+ else()
+ message(STATUS " sudo apt-get install ${PYTHON_NAME}-mako")
+ endif()
message(FATAL_ERROR "Mako templates required to build VOLK_GNSSSDR")
- endif(NOT MAKO_FOUND)
+ endif()
# Six
if(NOT SIX_FOUND)
message(STATUS "python-six not found. See https://pythonhosted.org/six/ ")
message(STATUS " You can try to install it by typing:")
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo yum install python-six")
+ message(STATUS " sudo yum install ${PYTHON_NAME}-six")
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(STATUS " sudo zypper install python-six")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo apt-get install python-six")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(STATUS " sudo zypper install ${PYTHON_NAME}-six")
+ else()
+ message(STATUS " sudo apt-get install ${PYTHON_NAME}-six")
+ endif()
message(FATAL_ERROR "six - python 2 and 3 compatibility library required to build VOLK_GNSSSDR")
- endif(NOT SIX_FOUND)
+ endif()
+ set(READ_ENVIRO "")
if(ENABLE_PACKAGING)
- if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
- set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON")
- endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
- endif(ENABLE_PACKAGING)
+ if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
+ set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON -DCMAKE_VERBOSE_MAKEFILE=ON")
+ endif()
+ if(NOT DEFINED ENV{PROTECT_PASSWORDS})
+ set(READ_ENVIRO ${CMAKE_COMMAND} -E environment)
+ endif()
+ endif()
- set(VOLK_GNSSSDR_BUILD_COMMAND "make")
+ set(VOLK_GNSSSDR_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}")
if(PYTHON_EXECUTABLE)
set(USE_THIS_PYTHON "-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
- endif(PYTHON_EXECUTABLE)
+ endif()
if(OS_IS_MACOSX)
if(CMAKE_GENERATOR STREQUAL Xcode)
set(VOLK_GNSSSDR_BUILD_COMMAND "xcodebuild" "-configuration" "Debug" "-target")
- endif(CMAKE_GENERATOR STREQUAL Xcode)
- endif(OS_IS_MACOSX)
+ endif()
+ endif()
- set(CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- set(C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
- if(CMAKE_CROSSCOMPILING)
- set(VOLK_GNSSSDR_COMPILER "")
- else(CMAKE_CROSSCOMPILING)
+ if(CMAKE_CROSSCOMPILING)
+ set(VOLK_GNSSSDR_COMPILER "")
+ else()
set(VOLK_GNSSSDR_COMPILER -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
- endif(CMAKE_CROSSCOMPILING)
+ endif()
set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_COMPILER}
- -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install
- -DENABLE_STATIC_LIBS=ON
- -DENABLE_PROFILING=${ENABLE_PROFILING}
- -DCMAKE_CXX_FLAGS=${CXX_FLAGS}
- -DCMAKE_C_FLAGS=${C_FLAGS}
- -DCMAKE_INCLUDE_PATH=${Boost_INCLUDE_DIR}
- ${STRIP_VOLK_GNSSSDR_PROFILE}
- ${USE_THIS_PYTHON} )
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install
+ -DENABLE_STATIC_LIBS=ON
+ -DENABLE_PROFILING=${ENABLE_PROFILING}
+ -DCMAKE_INCLUDE_PATH=${Boost_INCLUDE_DIR}
+ -DENABLE_ORC=OFF
+ ${STRIP_VOLK_GNSSSDR_PROFILE}
+ ${USE_THIS_PYTHON})
if(EXISTS $ENV{OECORE_TARGET_SYSROOT})
- set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS}
- -DENABLE_ORC=OFF
- -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake
- -DCROSSCOMPILE_MULTILIB=TRUE )
- endif(EXISTS $ENV{OECORE_TARGET_SYSROOT})
- ExternalProject_Add(volk_gnsssdr_module
- PREFIX ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build
- CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS}
- DOWNLOAD_COMMAND ""
- UPDATE_COMMAND ""
- PATCH_COMMAND ""
- BUILD_COMMAND ${VOLK_GNSSSDR_BUILD_COMMAND} volk_gnsssdr_profile
- INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install
- )
+ set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake
+ -DCROSSCOMPILE_MULTILIB=TRUE)
+ endif()
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(volk_gnsssdr_module
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build
+ CMAKE_ARGS ${READ_ENVIRO} ${VOLK_GNSSSDR_CMAKE_ARGS}
+ DOWNLOAD_COMMAND ""
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ BUILD_COMMAND ${READ_ENVIRO} ${VOLK_GNSSSDR_BUILD_COMMAND} volk_gnsssdr_profile
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install
+ )
+ else()
+ ExternalProject_Add(volk_gnsssdr_module
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build
+ CMAKE_ARGS ${READ_ENVIRO} ${VOLK_GNSSSDR_CMAKE_ARGS}
+ DOWNLOAD_COMMAND ""
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ BUILD_COMMAND ${READ_ENVIRO} ${VOLK_GNSSSDR_BUILD_COMMAND} volk_gnsssdr_profile
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}volk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX}
+ ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install
+ )
+ endif()
find_package(ORC)
if(NOT ORC_FOUND)
- set(ORC_LIBRARIES "")
- set(ORC_INCLUDE_DIRS "")
- endif(NOT ORC_FOUND)
+ set(ORC_LIBRARIES "")
+ set(ORC_INCLUDE_DIRS "")
+ endif()
add_library(volk_gnsssdr UNKNOWN IMPORTED)
- set_property(TARGET volk_gnsssdr PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/lib/libvolk_gnsssdr.a)
+ set_property(TARGET volk_gnsssdr PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/lib/libvolk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX})
set(VOLK_GNSSSDR_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build/include/;${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include;${ORC_INCLUDE_DIRS}")
set(VOLK_GNSSSDR_LIBRARIES volk_gnsssdr ${ORC_LIBRARIES})
- add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
- ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile)
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
+ ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile)
+ else()
+ add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
+ ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile
+ BYPRODUCTS ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile)
+ endif()
add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr-config-info
- ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr-config-info)
-endif(NOT VOLK_GNSSSDR_FOUND)
+ ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr-config-info)
+endif()
@@ -561,43 +717,57 @@ endif(NOT VOLK_GNSSSDR_FOUND)
# gflags - https://github.com/gflags/gflags
################################################################################
set(LOCAL_GFLAGS false)
-set(gflags_RELEASE 2.2.0)
-find_package(GFlags)
-if (NOT GFlags_FOUND)
- message (STATUS " gflags library has not been found.")
- message (STATUS " gflags will be downloaded and built automatically ")
- message (STATUS " when doing 'make'. ")
+find_package(GFLAGS)
+if(NOT GFLAGS_FOUND)
+ message(STATUS " gflags library has not been found.")
+ message(STATUS " gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded and built automatically ")
+ message(STATUS " when doing 'make'. ")
- ExternalProject_Add(
- gflags-${gflags_RELEASE}
- PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}
- GIT_REPOSITORY git://github.com/gflags/gflags.git
- GIT_TAG v${gflags_RELEASE}
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags/gflags-${gflags_RELEASE}
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}
- CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_nothreads_LIB=OFF -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
- BUILD_COMMAND make
- UPDATE_COMMAND ""
- PATCH_COMMAND ""
- INSTALL_COMMAND ""
- )
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ GIT_REPOSITORY git://github.com/gflags/gflags.git
+ GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_nothreads_LIB=OFF -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ else()
+ ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ GIT_REPOSITORY git://github.com/gflags/gflags.git
+ GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
+ CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_nothreads_LIB=OFF -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX}
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ endif()
- set(GFlags_INCLUDE_DIRS
- ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/include CACHE PATH "Local Gflags headers"
- )
+ set(GFlags_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/include CACHE PATH "Local Gflags headers"
+ )
- add_library(gflags UNKNOWN IMPORTED)
- set_property(TARGET gflags PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags.a)
- add_dependencies(gflags gflags-${gflags_RELEASE})
- set(GFlags_LIBS gflags)
- file(GLOB GFlags_SHARED_LIBS "${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_SHARED_LIBRARY_SUFFIX}*")
- set(GFlags_LIBRARY gflags-${gflags_RELEASE})
- set(GFlags_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib )
- link_directories(${GFlags_LIBRARY_PATH})
- set(GFlags_lib ${GFlags_LIBS} CACHE FILEPATH "Local Gflags library")
- set(GFlags_LIBRARY_PATH ${GFlags_LIBS})
- set(LOCAL_GFLAGS true CACHE STRING "GFlags downloaded and built automatically" FORCE)
-endif(NOT GFlags_FOUND)
+ add_library(gflags UNKNOWN IMPORTED)
+ set_property(TARGET gflags PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX})
+ add_dependencies(gflags gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION})
+ set(GFlags_LIBS gflags)
+ file(GLOB GFlags_SHARED_LIBS "${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_SHARED_LIBRARY_SUFFIX}*")
+ set(GFlags_LIBRARY gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION})
+ set(GFlags_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib)
+ link_directories(${GFlags_LIBRARY_PATH})
+ set(GFlags_lib ${GFlags_LIBS} CACHE FILEPATH "Local Gflags library")
+ set(GFlags_LIBRARY_PATH ${GFlags_LIBS})
+ set(LOCAL_GFLAGS true CACHE STRING "GFlags downloaded and built automatically" FORCE)
+endif()
@@ -605,34 +775,34 @@ endif(NOT GFlags_FOUND)
# glog - https://github.com/google/glog
################################################################################
if(NOT ${ENABLE_OWN_GLOG})
- find_package(GLOG)
- if(GLOG_INCLUDE_DIRS)
+ find_package(GLOG)
+ if(GLOG_INCLUDE_DIRS)
set(GLOG_FOUND ON)
- endif(GLOG_INCLUDE_DIRS)
-endif(NOT ${ENABLE_OWN_GLOG})
-set(glog_RELEASE 0.3.4)
-if (NOT GLOG_FOUND OR ${LOCAL_GFLAGS})
- message (STATUS " glog library has not been found")
- if(NOT GFlags_FOUND)
- message(STATUS " or it is likely not linked to gflags.")
- endif(NOT GFlags_FOUND)
- message (STATUS " glog will be downloaded and built automatically ")
- message (STATUS " when doing 'make'. ")
- if(NOT ${LOCAL_GFLAGS})
- add_library(gflags-${gflags_RELEASE} UNKNOWN IMPORTED)
- set_property(TARGET gflags-${gflags_RELEASE} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}")
- endif(NOT ${LOCAL_GFLAGS})
- set(TARGET_GFLAGS gflags-${gflags_RELEASE})
- if(${LOCAL_GFLAGS})
- set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_SHARED_LIBS})
- set(GFLAGS_LIBRARY_DIR_TO_LINK ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib)
- else(${LOCAL_GFLAGS})
- set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_LIBS})
- set(GFLAGS_LIBRARY_DIR_TO_LINK ${GFlags_LIBRARY_DIRS})
- endif(${LOCAL_GFLAGS})
+ endif()
+endif()
+set(glog_RELEASE ${GNSSSDR_GLOG_LOCAL_VERSION})
+if(NOT GLOG_FOUND OR ${LOCAL_GFLAGS})
+ message(STATUS " glog library has not been found")
+ if(NOT GFLAGS_FOUND)
+ message(STATUS " or it is likely not linked to gflags.")
+ endif()
+ message(STATUS " glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded and built automatically ")
+ message(STATUS " when doing 'make'. ")
+ if(NOT ${LOCAL_GFLAGS})
+ add_library(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} UNKNOWN IMPORTED)
+ set_property(TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}")
+ endif()
+ set(TARGET_GFLAGS gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION})
+ if(${LOCAL_GFLAGS})
+ set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_SHARED_LIBS})
+ set(GFLAGS_LIBRARY_DIR_TO_LINK ${CMAKE_CURRENT_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib)
+ else()
+ set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_LIBS})
+ set(GFLAGS_LIBRARY_DIR_TO_LINK ${GFlags_LIBRARY_DIRS})
+ endif()
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags
+ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags
"#!/bin/sh
export CPPFLAGS=-I${GFlags_INCLUDE_DIRS}
export LDFLAGS=-L${GFLAGS_LIBRARY_DIR_TO_LINK}
@@ -640,376 +810,467 @@ export LIBS=\"${GFLAGS_LIBRARIES_TO_LINK} -lc++\"
export CXXFLAGS=\"-stdlib=libc++\"
export CC=clang
export CXX=clang++
-cd ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/
+cd ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/
aclocal
automake --add-missing
autoreconf -vfi
-cd ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
-${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure")
+cd ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure")
- else("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags
+ else()
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags
"#!/bin/sh
export CPPFLAGS=-I${GFlags_INCLUDE_DIRS}
export LDFLAGS=-L${GFLAGS_LIBRARY_DIR_TO_LINK}
export LIBS=${GFLAGS_LIBRARIES_TO_LINK}
-cd ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/
+cd ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/
aclocal
automake --add-missing
autoreconf -vfi
-cd ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
-${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure")
+cd ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure")
+ endif()
- endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
+ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
- file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
- FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
- GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+ set(GLOG_CONFIGURE ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure_with_gflags)
- set(GLOG_CONFIGURE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/configure_with_gflags)
-
- # Ensure that aclocal and libtool are present
- if(OS_IS_LINUX)
- if(EXISTS "/usr/bin/libtoolize")
- if(EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10")
- # Everything ok, we can move on
- else(EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10")
- message(" aclocal has not been found.")
- message(" You can try to install it by typing:")
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo yum groupinstall 'Development Tools'")
- elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(" sudo zypper install automake")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo apt-get install automake")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(FATAL_ERROR "aclocal is required to build glog from source")
- endif(EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10")
- else(EXISTS "/usr/bin/libtoolize")
- message(" libtool has not been found.")
- message(" You can try to install it by typing:")
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo yum groupinstall 'Development Tools'")
- elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(" sudo zypper install libtoool")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo apt-get install libtool")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(FATAL_ERROR "libtool is required to build glog from source")
- endif(EXISTS "/usr/bin/libtoolize")
- endif(OS_IS_LINUX)
+ # Ensure that aclocal and libtool are present
+ if(OS_IS_LINUX)
+ if(EXISTS "/usr/bin/libtoolize")
+ if(EXISTS "/usr/bin/aclocal" OR EXISTS "/usr/bin/aclocal-1.16" OR EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.13" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10")
+ # Everything ok, we can move on
+ else()
+ message(" aclocal has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum groupinstall 'Development Tools'")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(" sudo zypper install automake")
+ else()
+ message(" sudo apt-get install automake")
+ endif()
+ message(FATAL_ERROR "aclocal is required to build glog from source")
+ endif()
+ else()
+ message(" libtool has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum groupinstall 'Development Tools'")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(" sudo zypper install libtoool")
+ else()
+ message(" sudo apt-get install libtool")
+ endif()
+ message(FATAL_ERROR "libtool is required to build glog from source")
+ endif()
+ endif()
- ExternalProject_Add(
- glog-${glog_RELEASE}
- DEPENDS ${TARGET_GFLAGS}
- PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
- GIT_REPOSITORY https://github.com/google/glog/
- GIT_TAG v${glog_RELEASE}
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
- CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix=
- BUILD_COMMAND make
- UPDATE_COMMAND ""
- PATCH_COMMAND ""
- INSTALL_COMMAND ""
- )
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ DEPENDS ${TARGET_GFLAGS}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ GIT_REPOSITORY https://github.com/google/glog/
+ GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix=
+ BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}"
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ else()
+ ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ DEPENDS ${TARGET_GFLAGS}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ GIT_REPOSITORY https://github.com/google/glog/
+ GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}
+ CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix=
+ BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}"
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX}
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ endif()
- # Set up variables
- set(GLOG_INCLUDE_DIRS
- ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/src/
- ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/src
- )
- set(GLOG_LIBRARIES
- ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog.a
- )
- set(LOCAL_GLOG true CACHE STRING "Glog downloaded and built automatically" FORCE)
-else(NOT GLOG_FOUND OR ${LOCAL_GFLAGS})
- add_library(glog-${glog_RELEASE} UNKNOWN IMPORTED)
- set_property(TARGET glog-${glog_RELEASE} PROPERTY IMPORTED_LOCATION "${GLOG_LIBRARIES}")
-endif(NOT GLOG_FOUND OR ${LOCAL_GFLAGS})
+ # Set up variables
+ set(GLOG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src/
+ ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src
+ )
+ set(GLOG_LIBRARIES
+ ${CMAKE_CURRENT_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX}
+ )
+ set(LOCAL_GLOG true CACHE STRING "Glog downloaded and built automatically" FORCE)
+else()
+ add_library(glog-${GNSSSDR_GLOG_LOCAL_VERSION} UNKNOWN IMPORTED)
+ set_property(TARGET glog-${GNSSSDR_GLOG_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GLOG_LIBRARIES}")
+endif()
if(NOT ENABLE_LOG)
- message(STATUS "Logging is not enabled")
- add_definitions(-DGOOGLE_STRIP_LOG=1)
-endif(NOT ENABLE_LOG)
+ message(STATUS "Logging is not enabled")
+ add_definitions(-DGOOGLE_STRIP_LOG=1)
+endif()
+
+
+
+#############################################################################
+# Check that BLAS (Basic Linear Algebra Subprograms) is found in the system
+# See http://www.netlib.org/blas/
+#############################################################################
+find_library(BLAS blas)
+if(NOT BLAS)
+ message(" The BLAS library has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum install blas-devel")
+ else()
+ message(" sudo apt-get install libblas-dev")
+ endif()
+ message(FATAL_ERROR "BLAS is required to build gnss-sdr")
+endif()
+
+
+
+#############################################################################
+# Check that LAPACK (Linear Algebra PACKage) is found in the system
+# See http://www.netlib.org/lapack/
+#############################################################################
+find_library(LAPACK lapack)
+if(NOT LAPACK)
+ message(" The LAPACK library has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum install lapack-devel")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(" sudo zypper install lapack-devel")
+ else()
+ message(" sudo apt-get install liblapack-dev")
+ endif()
+ message(FATAL_ERROR "LAPACK is required to build gnss-sdr")
+endif()
################################################################################
# Armadillo - http://arma.sourceforge.net/
################################################################################
-if(OS_IS_LINUX)
- #############################################################################
- # Check that LAPACK is found in the system
- # LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse.
- #############################################################################
- find_library(LAPACK lapack)
- if(NOT LAPACK)
- message(" The LAPACK library has not been found.")
- message(" You can try to install it by typing:")
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo yum install lapack-devel")
- elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(" sudo zypper install lapack-devel")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo apt-get install liblapack-dev")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- if(IS_ARM)
- message(WARNING "LAPACK is recommended to build gnss-sdr")
- set(LAPACK "")
- else(IS_ARM)
- message(FATAL_ERROR "LAPACK is required to build gnss-sdr")
- endif(IS_ARM)
- endif(NOT LAPACK)
- #############################################################################
- # Check that BLAS is found in the system
- # BLAS is used for matrix multiplication.
- # Without BLAS, matrix multiplication will still work, but might be slower.
- #############################################################################
- find_library(BLAS blas)
- if(NOT BLAS)
- message(" The BLAS library has not been found.")
- message(" You can try to install it by typing:")
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo yum install blas-devel")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" sudo apt-get install libopenblas-dev")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- if(IS_ARM)
- message(WARNING "BLAS is recommended to build gnss-sdr")
- set(BLAS "")
- else(IS_ARM)
- message(FATAL_ERROR "BLAS is required to build gnss-sdr")
- endif(IS_ARM)
- endif(NOT BLAS)
+find_package(Armadillo)
+if(ARMADILLO_FOUND)
+ if(${ARMADILLO_VERSION_STRING} VERSION_LESS ${GNSSSDR_ARMADILLO_MIN_VERSION})
+ set(ARMADILLO_FOUND false)
+ set(ENABLE_OWN_ARMADILLO true)
+ endif()
+endif()
+
+if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
+ message(STATUS " Armadillo has not been found.")
+ message(STATUS " Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded and built automatically")
+ message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
+ set(armadillo_BRANCH ${GNSSSDR_ARMADILLO_LOCAL_VERSION})
+ set(armadillo_RELEASE ${armadillo_BRANCH})
+
#############################################
# Check if GFORTRAN is found in the system
#############################################
- find_library(GFORTRAN NAMES gfortran
- PATHS /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib/i386
- /usr/lib/gcc/x86_64-linux-gnu
- /usr/lib/gcc/i686-linux-gnu
- /usr/lib/gcc/i386-linux-gnu
- /usr/lib/gcc/x86_64-linux-gnu/4.6 # Ubuntu 12.04
- /usr/lib/gcc/i686-linux-gnu/4.6
- /usr/lib/gcc/x86_64-linux-gnu/4.7
- /usr/lib/gcc/i686-linux-gnu/4.7
- /usr/lib/gcc/x86_64-linux-gnu/4.8
- /usr/lib/gcc/i686-linux-gnu/4.8
- /usr/lib/gcc/x86_64-linux-gnu/4.9
- /usr/lib/gcc/i686-linux-gnu/4.9
- /usr/lib/gcc/x86_64-redhat-linux/4.7.2 # Fedora 18
- /usr/lib/gcc/i686-redhat-linux/4.7.2
- /usr/lib/gcc/x86_64-redhat-linux/4.8.1 # Fedora 19
- /usr/lib/gcc/x86_64-redhat-linux/4.8.3 # Fedora 20
- /usr/lib/gcc/x86_64-redhat-linux/4.9.1 # Fedora 21
- /usr/lib/gcc/i686-redhat-linux/4.8.1
- /usr/lib/gcc/i686-redhat-linux/4.8.3
- /usr/lib/gcc/i686-redhat-linux/4.9.1
- /usr/lib/gcc/x86_64-redhat-linux/4.4.4 # CentOS 6
- /usr/lib/gcc/i686-redhat-linux/4.4.4
- /usr/lib/gcc/x86_64-redhat-linux/4.8.2
- /usr/lib/gcc/i686-redhat-linux/4.8.2
- /usr/lib/gcc/i586-suse-linux/4.8 # OpenSUSE 13.1
- /usr/lib/gcc/i586-suse-linux/4.9
- /usr/lib/gcc/x86_64-suse-linux/4.8
- /usr/lib/gcc/x86_64-suse-linux/4.9
- /usr/lib/gcc/i486-linux-gnu # Debian 7
- /usr/lib/gcc/i486-linux-gnu/4.4
- /usr/lib/gcc/i486-linux-gnu/4.6
- /usr/lib/gcc/i486-linux-gnu/4.7
- /usr/lib/gcc/i486-linux-gnu/4.8
- /usr/lib/gcc/i486-linux-gnu/4.9
- /usr/lib/gcc/i586-linux-gnu/4.9
- /usr/lib/gcc/arm-linux-gnueabihf/4.4 # Debian armhf
- /usr/lib/gcc/arm-linux-gnueabihf/4.5
- /usr/lib/gcc/arm-linux-gnueabihf/4.6
- /usr/lib/gcc/arm-linux-gnueabihf/4.7
- /usr/lib/gcc/arm-linux-gnueabihf/4.8
- /usr/lib/gcc/arm-linux-gnueabihf/4.9
- /usr/lib/gcc/aarch64-linux-gnu/4.9 # Debian arm64
- /usr/lib/gcc/arm-linux-gnueabi/4.7 # Debian armel
- /usr/lib/gcc/arm-linux-gnueabi/4.9
- /usr/lib/gcc/x86_64-linux-gnu/5
- /usr/lib/gcc/i686-linux-gnu/5
- /usr/lib/gcc/arm-linux-gnueabi/5
- /usr/lib/gcc/arm-linux-gnueabihf/5
- /usr/lib/gcc/aarch64-linux-gnu/5
- /usr/lib/gcc/x86_64-linux-gnu/6 # Ubuntu 16.10
- /usr/lib/gcc/alpha-linux-gnu/6
- /usr/lib/gcc/aarch64-linux-gnu/6
- /usr/lib/gcc/arm-linux-gnueabi/6
- /usr/lib/gcc/arm-linux-gnueabihf/6
- /usr/lib/gcc/hppa-linux-gnu/6
- /usr/lib/gcc/i686-gnu/6
- /usr/lib/gcc/i686-linux-gnu/6
- /usr/lib/gcc/x86_64-kfreebsd-gnu/6
- /usr/lib/gcc/i686-kfreebsd-gnu/6
- /usr/lib/gcc/m68k-linux-gnu/6
- /usr/lib/gcc/mips-linux-gnu/6
- /usr/lib/gcc/mips64el-linux-gnuabi64/6
- /usr/lib/gcc/mipsel-linux-gnu/6
- /usr/lib/gcc/powerpc-linux-gnu/6
- /usr/lib/gcc/powerpc-linux-gnuspe/6
- /usr/lib/gcc/powerpc64-linux-gnu/6
- /usr/lib/gcc/powerpc64le-linux-gnu/6
- /usr/lib/gcc/s390x-linux-gnu/6
- /usr/lib/gcc/sparc64-linux-gnu/6
- /usr/lib/gcc/x86_64-linux-gnux32/6
- /usr/lib/gcc/sh4-linux-gnu/6
- )
+ if(NOT OS_IS_MACOSX)
+ find_package(GFORTRAN)
+ if(NOT GFORTRAN)
+ message(STATUS "The gfortran library has not been found.")
+ message(STATUS " You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(STATUS " sudo yum install gcc-fortran")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(STATUS " sudo zypper install gcc-fortran")
+ else()
+ message(STATUS " sudo apt-get install gfortran")
+ endif()
+ message(FATAL_ERROR "gfortran is required to build gnss-sdr")
+ endif()
+ endif()
+
+ #############################################
+ # Download and build Armadillo
+ #############################################
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(armadillo-${armadillo_RELEASE}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
+ GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git
+ GIT_TAG ${armadillo_BRANCH}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
+ CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS=-std=c++11
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
+ UPDATE_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ else()
+ ExternalProject_Add(armadillo-${armadillo_RELEASE}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
+ GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git
+ GIT_TAG ${armadillo_BRANCH}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
+ CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS=-std=c++11
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}
+ UPDATE_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ endif()
+
+ # Set up variables
+ ExternalProject_Get_Property(armadillo-${armadillo_RELEASE} binary_dir)
+ set(ARMADILLO_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include)
if(NOT GFORTRAN)
- message(STATUS "The gfortran library has not been found.")
- message(STATUS " You can try to install it by typing:")
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo yum install gcc-fortran")
- elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(STATUS " sudo zypper install gcc-fortran")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo apt-get install gfortran")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- endif(NOT GFORTRAN)
-endif(OS_IS_LINUX)
-
-find_package(Armadillo)
-if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
- message(STATUS " Armadillo has not been found.")
- message(STATUS " Armadillo will be downloaded and built automatically ")
- message(STATUS " when doing 'make'. ")
-
- if(CMAKE_VERSION VERSION_LESS 3.1)
- # ExternalProject in CMake > 3.1 cannot open .xz files
- set(armadillo_RELEASE 6.700.7)
- set(armadillo_MD5 "8116185e1d7391eed3bf6c500f81b4d8")
- set(ARMA_FILE_EXTENSION "gz")
- else(CMAKE_VERSION VERSION_LESS 3.1)
- set(armadillo_RELEASE 7.600.2)
- set(armadillo_MD5 "8dee8bc37f7cb29323c20c4104126b5c")
- set(ARMA_FILE_EXTENSION "xz")
- endif(CMAKE_VERSION VERSION_LESS 3.1)
-
- ExternalProject_Add(
- armadillo-${armadillo_RELEASE}
- PREFIX ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
- URL http://sourceforge.net/projects/arma/files/armadillo-${armadillo_RELEASE}.tar.${ARMA_FILE_EXTENSION}
- DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download/armadillo-${armadillo_RELEASE}
- URL_MD5 ${armadillo_MD5}
- CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DBUILD_SHARED_LIBS=OFF
- BUILD_IN_SOURCE 1
- BUILD_COMMAND make
- UPDATE_COMMAND ""
- INSTALL_COMMAND ""
- )
-
- # Set up variables
- ExternalProject_Get_Property(armadillo-${armadillo_RELEASE} binary_dir)
- set(ARMADILLO_INCLUDE_DIRS ${binary_dir}/include )
- find_library(LAPACK NAMES lapack HINTS /usr/lib /usr/local/lib /usr/lib64)
- if(OS_IS_MACOSX)
- find_library(BLAS blas)
- endif(OS_IS_MACOSX)
- find_package(OpenBLAS)
- if(OPENBLAS_FOUND)
- set(BLAS ${OPENBLAS})
- endif(OPENBLAS_FOUND)
- if(NOT GFORTRAN)
- set(GFORTRAN "")
- endif(NOT GFORTRAN)
- set(ARMADILLO_LIBRARIES ${BLAS} ${LAPACK} ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo.a)
- set(LOCAL_ARMADILLO true CACHE STRING "Armadillo downloaded and built automatically" FORCE)
- # Save a copy at the thirdparty folder
- file(COPY ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE}
- DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo
- )
- set(ARMADILLO_VERSION_STRING ${armadillo_RELEASE})
-else(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
- set(armadillo_RELEASE ${ARMADILLO_VERSION_STRING})
- add_library(armadillo-${armadillo_RELEASE} UNKNOWN IMPORTED)
- set_property(TARGET armadillo-${armadillo_RELEASE} PROPERTY IMPORTED_LOCATION "${ARMADILLO_LIBRARIES}")
-endif(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
+ set(GFORTRAN "")
+ endif()
+ set(ARMADILLO_LIBRARIES ${BLAS} ${LAPACK} ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX})
+ set(LOCAL_ARMADILLO true CACHE STRING "Armadillo downloaded and built automatically" FORCE)
+ set(ARMADILLO_VERSION_STRING ${armadillo_RELEASE})
+else()
+ set(armadillo_RELEASE ${ARMADILLO_VERSION_STRING})
+ add_library(armadillo-${armadillo_RELEASE} UNKNOWN IMPORTED)
+ set_property(TARGET armadillo-${armadillo_RELEASE} PROPERTY IMPORTED_LOCATION "${ARMADILLO_LIBRARIES}")
+endif()
################################################################################
-# GnuTLS - http://www.gnutls.org/
+# GnuTLS - https://www.gnutls.org/
################################################################################
find_package(GnuTLS)
find_library(GNUTLS_OPENSSL_LIBRARY NAMES gnutls-openssl libgnutls-openssl.so.27
- HINTS /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib64
- /opt/local/lib
- /usr/lib/x86_64-linux-gnu
- /usr/lib/aarch64-linux-gnu
- /usr/lib/arm-linux-gnueabihf
- /usr/lib/arm-linux-gnueabi
- /usr/lib/i386-linux-gnu
- /usr/lib/alpha-linux-gnu
- /usr/lib/hppa-linux-gnu
- /usr/lib/i686-gnu
- /usr/lib/i686-linux-gnu
- /usr/lib/x86_64-kfreebsd-gnu
- /usr/lib/i686-kfreebsd-gnu
- /usr/lib/m68k-linux-gnu
- /usr/lib/mips-linux-gnu
- /usr/lib/mips64el-linux-gnuabi64
- /usr/lib/mipsel-linux-gnu
- /usr/lib/powerpc-linux-gnu
- /usr/lib/powerpc-linux-gnuspe
- /usr/lib/powerpc64-linux-gnu
- /usr/lib/powerpc64le-linux-gnu
- /usr/lib/s390x-linux-gnu
- /usr/lib/sparc64-linux-gnu
- /usr/lib/x86_64-linux-gnux32
- /usr/lib/sh4-linux-gnu
- )
+ HINTS /usr/lib
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib64
+ /opt/local/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/i386-linux-gnu
+ /usr/lib/alpha-linux-gnu
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/i386-gnu
+ /usr/lib/i686-gnu
+ /usr/lib/i686-linux-gnu
+ /usr/lib/x86_64-kfreebsd-gnu
+ /usr/lib/i686-kfreebsd-gnu
+ /usr/lib/m68k-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc-linux-gnuspe
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib/sparc64-linux-gnu
+ /usr/lib/x86_64-linux-gnux32
+ /usr/lib/sh4-linux-gnu
+)
if(NOT GNUTLS_OPENSSL_LIBRARY)
- message(STATUS "Looking for OpenSSL instead...")
- find_package(OpenSSL)
- if(OPENSSL_FOUND)
+ message(STATUS "Looking for OpenSSL instead...")
+ find_package(OpenSSL)
+ if(OPENSSL_FOUND)
set(GNUTLS_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR})
set(GNUTLS_LIBRARIES "")
set(GNUTLS_OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
- else(OPENSSL_FOUND)
- message(" The GnuTLS library with openssl compatibility enabled has not been found.")
- message(" You can try to install the required libraries by typing:")
- if(OS_IS_LINUX)
+ else()
+ message(" The GnuTLS library with openssl compatibility enabled has not been found.")
+ message(" You can try to install the required libraries by typing:")
+ if(OS_IS_LINUX)
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
message(" sudo yum install openssl-devel")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ else()
message(" sudo apt-get install libgnutls-openssl-dev")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- endif(OS_IS_LINUX)
- if(OS_IS_MACOSX)
+ endif()
+ endif()
+ if(OS_IS_MACOSX)
message(" sudo port install gnutls")
- endif(OS_IS_MACOSX)
- message(FATAL_ERROR "GnuTLS libraries with openssl compatibility are required to build gnss-sdr")
- endif(OPENSSL_FOUND)
-endif(NOT GNUTLS_OPENSSL_LIBRARY)
+ endif()
+ message(FATAL_ERROR "GnuTLS libraries with openssl compatibility are required to build gnss-sdr")
+ endif()
+endif()
+########################################################################
+# Matio - https://github.com/tbeu/matio
+########################################################################
+find_package(MATIO)
+if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERSION})
+ if(MATIO_FOUND)
+ message(STATUS " Matio installed version (${MATIO_VERSION_STRING}) is too old (>= ${GNSSSDR_MATIO_MIN_VERSION} is required).")
+ endif()
+ message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded and built automatically")
+ message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
+ find_package(ZLIB)
+ if(ZLIB_FOUND)
+ get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY)
+ if(OS_IS_LINUX)
+ if(NOT EXISTS "/usr/bin/libtoolize")
+ message(" libtool has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum groupinstall 'Development Tools'")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(" sudo zypper install libtoool")
+ else()
+ message(" sudo apt-get install libtool")
+ endif()
+ message(FATAL_ERROR "libtool is required to build matio from source")
+ endif()
+ if(EXISTS "/usr/bin/aclocal" OR
+ EXISTS "/usr/bin/aclocal-1.16" OR
+ EXISTS "/usr/bin/aclocal-1.15" OR
+ EXISTS "/usr/bin/aclocal-1.14" OR
+ EXISTS "/usr/bin/aclocal-1.13" OR
+ EXISTS "/usr/bin/aclocal-1.11" OR
+ EXISTS "/usr/bin/aclocal-1.10")
+ message(STATUS "Automake found.")
+ else()
+ message(" aclocal has not been found.")
+ message(" You can try to install it by typing:")
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(" sudo yum groupinstall 'Development Tools'")
+ elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
+ message(" sudo zypper install automake")
+ else()
+ message(" sudo apt-get install automake")
+ endif()
+ message(FATAL_ERROR "aclocal is required to build matio from source")
+ endif()
+ endif()
+ find_package(HDF5)
+ if(HDF5_FOUND)
+ list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR)
+ get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY)
+ get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY)
+ if(OS_IS_MACOSX)
+ if(EXISTS /opt/local/include/hdf5.h)
+ set(HDF5_BASE_DIR /opt/local)
+ endif()
+ if(EXISTS /usr/local/include/hdf5.h)
+ set(HDF5_BASE_DIR /usr/local)
+ endif()
+ endif()
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/matio
+ GIT_REPOSITORY https://github.com/tbeu/matio
+ GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}
+ UPDATE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh
+ CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix=
+ BUILD_COMMAND make
+ )
+ else()
+ ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/matio
+ GIT_REPOSITORY https://github.com/tbeu/matio
+ GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}
+ UPDATE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh
+ CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix=
+ BUILD_COMMAND make
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}
+ )
+ endif()
+ set(MATIO_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX} ${HDF5_LIBRARIES} ${ZLIB_LIBRARIES})
+ set(MATIO_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/matio/include)
+ set(MATIO_LOCAL true)
+ else()
+ message(STATUS " The hdf5 library has not been found in your system.")
+ message(STATUS " Please try to install it by doing:")
+ if(OS_IS_MACOSX)
+ message(STATUS " $ sudo port install hdf5")
+ message(STATUS " or")
+ message(STATUS " $ brew install hdf5")
+ endif()
+ if(OS_IS_LINUX)
+ message(STATUS " $ sudo apt-get install libhdf5-dev")
+ endif()
+ message(FATAL_ERROR "*** The hdf5 library is required to build gnss-sdr")
+ endif()
+ else()
+ message(FATAL_ERROR "*** The zlib library is required to build gnss-sdr")
+ endif()
+endif()
+
+
+
+################################################################################
+# PugiXML - https://pugixml.org/
+################################################################################
+find_package(PUGIXML QUIET)
+if(PUGIXML_FOUND)
+ message(STATUS "PugiXML has been found.")
+else()
+ message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built automatically when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
+ set(PUGIXML_COMPILER -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER})
+ set(TOOLCHAIN_ARG "")
+ if(EXISTS $ENV{OECORE_TARGET_SYSROOT})
+ set(PUGIXML_COMPILER "")
+ set(TOOLCHAIN_ARG "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake")
+ endif()
+ if(CMAKE_VERSION VERSION_LESS 3.2)
+ ExternalProject_Add(pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ GIT_REPOSITORY https://github.com/zeux/pugixml
+ GIT_TAG v${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ CMAKE_ARGS ${PUGIXML_COMPILER} ${TOOLCHAIN_ARG}
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ else()
+ ExternalProject_Add(pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ GIT_REPOSITORY https://github.com/zeux/pugixml
+ GIT_TAG v${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}
+ CMAKE_ARGS ${PUGIXML_COMPILER} ${TOOLCHAIN_ARG}
+ UPDATE_COMMAND ""
+ PATCH_COMMAND ""
+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX}
+ INSTALL_COMMAND ""
+ )
+ endif()
+ set(PUGIXML_LIBRARY ${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX})
+ set(PUGIXML_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/src)
+ set(PUGIXML_LOCAL true)
+endif()
+
+
################################################################################
# USRP Hardware Driver (UHD) - OPTIONAL
################################################################################
-find_package(UHD)
-if(NOT UHD_FOUND)
- set(ENABLE_UHD OFF)
- message(STATUS " The USRP Hardware Driver (UHD) signal source will not be built,")
- message(STATUS " so all USRP-based front-ends will not be usable.")
- message(STATUS " Please check http://files.ettus.com/manual/")
-else(NOT UHD_FOUND)
- set(GR_REQUIRED_COMPONENTS UHD)
- find_package(Gnuradio)
- set(ENABLE_UHD ON)
-endif(NOT UHD_FOUND)
-
+if(ENABLE_UHD)
+ find_package(UHD)
+ if(NOT UHD_FOUND)
+ set(ENABLE_UHD OFF)
+ message(STATUS " The USRP Hardware Driver (UHD) signal source will not be built,")
+ message(STATUS " so all USRP-based front-ends will not be usable.")
+ message(STATUS " Please check https://files.ettus.com/manual/")
+ else()
+ set(GR_REQUIRED_COMPONENTS UHD)
+ find_package(Gnuradio)
+ endif()
+endif()
################################################################################
@@ -1017,62 +1278,62 @@ endif(NOT UHD_FOUND)
################################################################################
find_package(Doxygen)
if(DOXYGEN_FOUND)
- message(STATUS "Doxygen found.")
- message(STATUS "You can build the documentation with 'make doc'." )
- message(STATUS "When done, point your browser to ${CMAKE_BINARY_DIR}/html/index.html")
- set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
- file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir)
- file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir)
- find_package(LATEX)
- if (PDFLATEX_COMPILER)
- set(GENERATE_PDF_DOCUMENTATION "YES")
- set(GNSSSDR_USE_MATHJAX "NO")
- else(PDFLATEX_COMPILER)
- set(GENERATE_PDF_DOCUMENTATION "NO")
- set(GNSSSDR_USE_MATHJAX "YES")
- endif(PDFLATEX_COMPILER)
- configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.in
- ${CMAKE_BINARY_DIR}/docs/doxygen/Doxyfile
- @ONLY
- )
- add_custom_target(doc
- ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/docs/doxygen/Doxyfile
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- COMMENT "Generating API documentation with Doxygen." VERBATIM
- )
- if(LATEX_COMPILER)
- message(STATUS "'make pdfmanual' will generate a manual at ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf")
- add_custom_target(pdfmanual
- COMMAND ${CMAKE_MAKE_PROGRAM}
- COMMAND ${CMAKE_COMMAND} -E copy refman.pdf ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf
- COMMAND ${CMAKE_MAKE_PROGRAM} clean
- DEPENDS doc
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/docs/latex
- COMMENT "Generating PDF manual with Doxygen." VERBATIM
- )
- endif(LATEX_COMPILER)
- message(STATUS "'make doc-clean' will clean the documentation.")
- add_custom_target(doc-clean
- COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/docs/html
- COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/docs/latex
- COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf
- COMMENT "Cleaning documentation." VERBATIM
- )
-else(DOXYGEN_FOUND)
- message(STATUS " Doxygen has not been found in your system.")
- message(STATUS " You can get nice code documentation by using it!")
- message(STATUS " Get it from http://www.stack.nl/~dimitri/doxygen/index.html")
- if(OS_IS_LINUX)
- if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" or simply by doing 'sudo yum install doxygen-latex'.")
- else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(" or simply by doing 'sudo apt-get install doxygen-latex'.")
- endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- endif(OS_IS_LINUX)
- if(OS_IS_MACOSX)
- message(STATUS " or simply by doing 'sudo port install doxygen +latex'.")
- endif(OS_IS_MACOSX)
-endif(DOXYGEN_FOUND)
+ message(STATUS "Doxygen found.")
+ message(STATUS "You can build the documentation with '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'.")
+ message(STATUS "When done, point your browser to ${CMAKE_BINARY_DIR}/html/index.html")
+ set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
+ file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir)
+ file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir)
+ find_package(LATEX)
+ if(PDFLATEX_COMPILER)
+ set(GENERATE_PDF_DOCUMENTATION "YES")
+ set(GNSSSDR_USE_MATHJAX "NO")
+ else()
+ set(GENERATE_PDF_DOCUMENTATION "NO")
+ set(GNSSSDR_USE_MATHJAX "YES")
+ endif()
+ configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.in
+ ${CMAKE_BINARY_DIR}/docs/doxygen/Doxyfile
+ @ONLY
+ )
+ add_custom_target(doc
+ ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/docs/doxygen/Doxyfile
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Generating API documentation with Doxygen." VERBATIM
+ )
+ if(LATEX_COMPILER)
+ message(STATUS "'${CMAKE_MAKE_PROGRAM_PRETTY_NAME} pdfmanual' will generate a manual at ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf")
+ add_custom_target(pdfmanual
+ COMMAND ${CMAKE_MAKE_PROGRAM}
+ COMMAND ${CMAKE_COMMAND} -E copy refman.pdf ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf
+ COMMAND ${CMAKE_MAKE_PROGRAM} clean
+ DEPENDS doc
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/docs/latex
+ COMMENT "Generating PDF manual with Doxygen." VERBATIM
+ )
+ endif()
+ message(STATUS "'${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc-clean' will clean the documentation.")
+ add_custom_target(doc-clean
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/docs/html
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/docs/latex
+ COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf
+ COMMENT "Cleaning documentation." VERBATIM
+ )
+else()
+ message(STATUS " Doxygen has not been found in your system.")
+ message(STATUS " You can get nice code documentation by using it!")
+ message(STATUS " Get it from http://www.stack.nl/~dimitri/doxygen/index.html")
+ if(OS_IS_LINUX)
+ if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
+ message(STATUS " or simply by doing 'sudo yum install doxygen-latex'.")
+ else()
+ message(STATUS " or simply by doing 'sudo apt-get install doxygen-latex'.")
+ endif()
+ endif()
+ if(OS_IS_MACOSX)
+ message(STATUS " or simply by doing 'sudo port install doxygen +latex'.")
+ endif()
+endif()
@@ -1080,28 +1341,28 @@ endif(DOXYGEN_FOUND)
# OpenCL (OPTIONAL)
###############################################################################
if(ENABLE_OPENCL)
- find_package(OpenCL)
+ find_package(OPENCL)
if($ENV{DISABLE_OPENCL})
set(DISABLE_OPENCL TRUE)
- endif($ENV{DISABLE_OPENCL})
+ endif()
if(DISABLE_OPENCL)
set(OPENCL_FOUND FALSE)
- else(DISABLE_OPENCL)
+ else()
if(OPENCL_FOUND)
message(STATUS "OpenCL has been found and will be used by some processing blocks")
message(STATUS "You can disable OpenCL use by doing 'cmake -DENABLE_OPENCL=OFF ../' ")
- endif(OPENCL_FOUND)
- endif(DISABLE_OPENCL)
+ endif()
+ endif()
if(ENABLE_GENERIC_ARCH)
set(OPENCL_FOUND FALSE)
message(STATUS "ENABLE_GENERIC_ARCH is set to ON so the use of OpenCL has been disabled.")
- endif(ENABLE_GENERIC_ARCH)
+ endif()
if(NOT OPENCL_FOUND)
message(STATUS "Processing blocks using OpenCL will not be built.")
- endif(NOT OPENCL_FOUND)
-else(ENABLE_OPENCL)
+ endif()
+else()
set(OPENCL_FOUND FALSE)
-endif(ENABLE_OPENCL)
+endif()
@@ -1109,18 +1370,43 @@ endif(ENABLE_OPENCL)
# CUDA (OPTIONAL)
###############################################################################
if($ENV{CUDA_GPU_ACCEL})
- message(STATUS "CUDA_GPU_ACCEL environment variable found." )
+ message(STATUS "CUDA_GPU_ACCEL environment variable found.")
set(ENABLE_CUDA ON)
-endif($ENV{CUDA_GPU_ACCEL})
+endif()
if(ENABLE_CUDA)
- FIND_PACKAGE(CUDA REQUIRED)
- message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled." )
- message(STATUS "You can disable it with 'cmake -DENABLE_CUDA=OFF ../'" )
-else(ENABLE_CUDA)
- message(STATUS "NVIDIA CUDA GPU Acceleration will be not enabled." )
- message(STATUS "Enable it with 'cmake -DENABLE_CUDA=ON ../' to add support for GPU-based acceleration using CUDA." )
-endif(ENABLE_CUDA)
+ find_package(CUDA REQUIRED)
+ message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_CUDA=OFF ../'")
+else()
+ message(STATUS "NVIDIA CUDA GPU Acceleration will be not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_CUDA=ON ../' to add support for GPU-based acceleration using CUDA.")
+endif()
+
+
+
+###############################################################################
+# CUSTOM UDP PACKET SOURCE (OPTIONAL)
+###############################################################################
+if(ENABLE_RAW_UDP)
+ message(STATUS "High-optimized custom UDP ip packet source will be enabled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_RAW_UDP=OFF ../'")
+else()
+ message(STATUS "High-optimized custom UDP ip packet source will be enabled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_RAW_UDP=OFF ../'")
+endif()
+
+
+###############################################################################
+# FPGA (OPTIONAL)
+###############################################################################
+if(ENABLE_FPGA)
+ message(STATUS "FPGA Acceleration will be enabled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_FPGA=OFF ../'")
+else()
+ message(STATUS "Fpga Acceleration will be not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_FPGA=ON ../' to add support for GPU-based acceleration using the FPGA.")
+endif()
@@ -1128,68 +1414,77 @@ endif(ENABLE_CUDA)
# Setup of optional drivers
################################################################################
if($ENV{GN3S_DRIVER})
- message(STATUS "GN3S_DRIVER environment variable found." )
+ message(STATUS "GN3S_DRIVER environment variable found.")
set(ENABLE_GN3S ON)
-endif($ENV{GN3S_DRIVER})
+endif()
if(GN3S_DRIVER)
set(ENABLE_GN3S ON)
-endif(GN3S_DRIVER)
+endif()
if(ENABLE_GN3S)
- message(STATUS "The GN3S driver will be compiled.")
- message(STATUS "You can disable it with 'cmake -DENABLE_GN3S=OFF ../'" )
-else(ENABLE_GN3S)
- message(STATUS "The (optional and experimental) GN3S driver is not enabled." )
- message(STATUS "Enable it with 'cmake -DENABLE_GN3S=ON ../' to add support for the GN3S dongle." )
-endif(ENABLE_GN3S)
+ message(STATUS "The GN3S driver will be compiled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_GN3S=OFF ../'")
+else()
+ message(STATUS "The (optional and experimental) GN3S driver is not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_GN3S=ON ../' to add support for the GN3S dongle.")
+endif()
if($ENV{RAW_ARRAY_DRIVER})
- message(STATUS "RAW_ARRAY_DRIVER environment variable found." )
+ message(STATUS "RAW_ARRAY_DRIVER environment variable found.")
set(ENABLE_ARRAY ON)
-endif($ENV{RAW_ARRAY_DRIVER})
+endif()
if(RAW_ARRAY_DRIVER)
set(ENABLE_ARRAY ON)
-endif(RAW_ARRAY_DRIVER)
+endif()
if(ENABLE_ARRAY)
- message(STATUS "CTTC's Antenna Array front-end driver will be compiled." )
- message(STATUS "You can disable it with 'cmake -DENABLE_ARRAY=OFF ../'" )
+ message(STATUS "CTTC's Antenna Array front-end driver will be compiled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_ARRAY=OFF ../'")
# copy firmware to install folder
# Build project gr-dbfcttc
-else(ENABLE_ARRAY)
- message(STATUS "The (optional) CTTC's Antenna Array front-end driver is not enabled." )
- message(STATUS "Enable it with 'cmake -DENABLE_ARRAY=ON ../' to add support for the CTTC experimental array front-end." )
-endif(ENABLE_ARRAY)
+else()
+ message(STATUS "The (optional) CTTC's Antenna Array front-end driver is not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_ARRAY=ON ../' to add support for the CTTC experimental array front-end.")
+endif()
if($ENV{RTLSDR_DRIVER})
- message(STATUS "RTLSDR_DRIVER environment variable found." )
+ message(STATUS "RTLSDR_DRIVER environment variable found.")
set(ENABLE_OSMOSDR ON)
-endif($ENV{RTLSDR_DRIVER})
+endif()
if(ENABLE_OSMOSDR)
- message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled." )
- message(STATUS "You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ../'" )
-else(ENABLE_OSMOSDR)
- message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled." )
- message(STATUS "Enable it with 'cmake -DENABLE_OSMOSDR=ON ../' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)" )
-endif(ENABLE_OSMOSDR)
+ find_package(GROSMOSDR)
+ if(GROSMOSDR_FOUND)
+ message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ../'")
+ else()
+ if(ENABLE_PACKAGING)
+ message(WARNING "gr-osmosdr has not been found. Source blocks depending on it will NOT be built.")
+ else()
+ message(FATAL_ERROR "gr-osmosdr required to build gnss-sdr with the optional OSMOSDR driver")
+ endif()
+ endif()
+else()
+ message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_OSMOSDR=ON ../' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)")
+endif()
if($ENV{FLEXIBAND_DRIVER})
- message(STATUS "FLEXIBAND_DRIVER environment variable found." )
+ message(STATUS "FLEXIBAND_DRIVER environment variable found.")
set(ENABLE_FLEXIBAND ON)
-endif($ENV{FLEXIBAND_DRIVER})
+endif()
if(FLEXIBAND_DRIVER)
set(ENABLE_FLEXIBAND ON)
-endif(FLEXIBAND_DRIVER)
+endif()
if(ENABLE_FLEXIBAND)
- message(STATUS "CTTC's Antenna Array front-end driver will be compiled." )
- message(STATUS "You can disable it with 'cmake -DENABLE_FLEXIBAND=OFF ../'" )
-else(ENABLE_FLEXIBAND)
- message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled." )
- message(STATUS "Enable it with 'cmake -DENABLE_FLEXIBAND=ON ../' to add support for the Teleorbit Flexiband front-end." )
-endif(ENABLE_FLEXIBAND)
+ message(STATUS "The Teleorbit Flexiband front-end source will be compiled.")
+ message(STATUS "You can disable it with 'cmake -DENABLE_FLEXIBAND=OFF ../'")
+else()
+ message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled.")
+ message(STATUS "Enable it with 'cmake -DENABLE_FLEXIBAND=ON ../' to add support for the Teleorbit Flexiband front-end.")
+endif()
@@ -1197,28 +1492,28 @@ endif(ENABLE_FLEXIBAND)
# GPerftools - https://github.com/gperftools/gperftools (OPTIONAL)
################################################################################
if(ENABLE_GPERFTOOLS)
- find_package(Gperftools)
- if ( NOT GPERFTOOLS_FOUND )
+ find_package(GPERFTOOLS)
+ if(NOT GPERFTOOLS_FOUND)
message(STATUS "Although ENABLE_GPERFTOOLS has been set to ON, GPerftools has not been found.")
message(STATUS "Binaries will be compiled without 'tcmalloc' and 'profiler' libraries.")
message(STATUS "You can install GPerftools from https://github.com/gperftools/gperftools")
- else( NOT GPERFTOOLS_FOUND )
- message(STATUS "GPerftools libraries found." )
+ else()
+ message(STATUS "GPerftools libraries found.")
message(STATUS "Binaries will be compiled with 'tcmalloc' and 'profiler' libraries.")
- endif( NOT GPERFTOOLS_FOUND )
-endif(ENABLE_GPERFTOOLS)
+ endif()
+endif()
if(ENABLE_GPERFTOOLS)
# Set GPerftools related flags if it is available
- # See http://gperftools.googlecode.com/svn/trunk/README
+ # See https://github.com/gperftools/gperftools/blob/master/README
if(GPERFTOOLS_FOUND)
- if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+ if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
- endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+ endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -fno-builtin")
- endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- endif(GPERFTOOLS_FOUND)
-endif(ENABLE_GPERFTOOLS)
+ endif()
+ endif()
+endif()
@@ -1226,63 +1521,123 @@ endif(ENABLE_GPERFTOOLS)
# GNU gprof (OPTIONAL) - https://sourceware.org/binutils/docs/gprof/
########################################################################
if(ENABLE_GPROF)
- #if(CMAKE_COMPILER_IS_GNUCXX)
- set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -pg")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
- #endif(CMAKE_COMPILER_IS_GNUCXX)
-endif(ENABLE_GPROF)
-
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -pg")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
+endif()
########################################################################
# Set compiler flags
########################################################################
-# Enable C++11 support in GCC
-if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
- set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11 -Wall -Wextra") #Add warning flags: For "-Wall" see http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
-endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+# Support of C++17 is still not possible due to pm_remez.h (solved in GNU Radio 3.8)
+# Enable C++14 support in GCC >= 6.1.1
+# Fallback to C++11 when using GCC < 6.1.1
+if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
+ else()
+ # if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
+ # else(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")
+ # set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++17")
+ # endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")
+ endif()
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -Wall -Wextra") #Add warning flags: For "-Wall" see https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
+endif()
+
+# Support of C++17 is still not possible due to pm_remez.h (solved in GNU Radio 3.8)
+# Enable C++14 support in Clang >= 3.5.0 or AppleClang >= 600
+# Fallback to C++11 if older version
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11 -stdlib=libc++")
- if(CMAKE_BUILD_TYPE MATCHES "Release")
- set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -Wno-unused-private-field")
- endif(CMAKE_BUILD_TYPE MATCHES "Release")
-endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(OS_IS_MACOSX)
+ # See https://trac.macports.org/wiki/XcodeVersionInfo for Apple Clang version equivalences
+ if(CLANG_VERSION VERSION_LESS "600")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
+ else()
+ # if(CLANG_VERSION VERSION_LESS "900")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
+ # else(CLANG_VERSION VERSION_LESS "900")
+ # set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++17")
+ # endif(CLANG_VERSION VERSION_LESS "900")
+ endif()
+ else()
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
+ else()
+ # if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0.0")
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
+ # else(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0.0")
+ # set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++17")
+ # endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0.0")
+ endif()
+ endif()
+
+ if(OS_IS_MACOSX)
+ set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -stdlib=libc++")
+ endif()
+endif()
+
+if(NOT ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND NOT WIN32)
+ if(NOT (CMAKE_VERSION VERSION_LESS "3.1"))
+ set(CMAKE_C_STANDARD 11)
+ set(CMAKE_CXX_STANDARD 14)
+ endif()
+endif()
# Processor-architecture related flags
-# See http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
-if (NOT ARCH_COMPILER_FLAGS)
- if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
- if(OS_IS_MACOSX)
- set(ARCH_COMPILER_FLAGS "-march=corei7 -mfpmath=sse")
- else(OS_IS_MACOSX)
- if(NOT ${ENABLE_GENERIC_ARCH})
- if(IS_ARM) # ARM-specific options (https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)
- if(NOT CMAKE_CROSSCOMPILING)
- if(ARM_VERSION STREQUAL "arm")
- # Unknown arm version - try our best to detect
- set(ARCH_COMPILER_FLAGS "-mcpu=native")
- else(ARM_VERSION STREQUAL "arm")
- set(ARCH_COMPILER_FLAGS "-march=${ARM_VERSION}")
- endif(ARM_VERSION STREQUAL "arm")
- endif(NOT CMAKE_CROSSCOMPILING)
- else(IS_ARM)
- set(ARCH_COMPILER_FLAGS "-march=native -mfpmath=sse")
- endif(IS_ARM)
- endif(NOT ${ENABLE_GENERIC_ARCH})
- endif(OS_IS_MACOSX)
- endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-endif (NOT ARCH_COMPILER_FLAGS)
+# See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
+if(NOT ARCH_COMPILER_FLAGS)
+ if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
+ if(OS_IS_MACOSX)
+ set(ARCH_COMPILER_FLAGS "-march=corei7 -mfpmath=sse")
+ else()
+ if(NOT ${ENABLE_GENERIC_ARCH})
+ if(IS_ARM) # ARM-specific options (https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)
+ if(NOT CMAKE_CROSSCOMPILING)
+ if(ARM_VERSION STREQUAL "arm")
+ # Unknown arm version - try our best to detect
+ set(ARCH_COMPILER_FLAGS "-mcpu=native")
+ else()
+ set(ARCH_COMPILER_FLAGS "-march=${ARM_VERSION}")
+ endif()
+ endif()
+ else()
+ set(ARCH_COMPILER_FLAGS "-march=native -mfpmath=sse")
+ endif()
+ endif()
+ endif()
+ endif()
+endif()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} ${ARCH_COMPILER_FLAGS}")
-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_FLAGS}")
-if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
- #http://gcc.gnu.org/wiki/Visibility
+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
+ # https://gcc.gnu.org/wiki/Visibility
add_definitions(-fvisibility=hidden)
-endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+endif()
+########################################################################
+# clang-tidy https://clang.llvm.org/extra/clang-tidy/index.html
+########################################################################
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(NOT (CMAKE_VERSION VERSION_LESS "3.6"))
+ find_program(
+ CLANG_TIDY_EXE
+ NAMES "clang-tidy"
+ DOC "Path to clang-tidy executable"
+ )
+ if(NOT CLANG_TIDY_EXE)
+ message(STATUS "clang-tidy not found.")
+ else()
+ message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
+ set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-checks=*")
+ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+ endif()
+ endif()
+endif()
+
########################################################################
# Create uninstall target
@@ -1301,4 +1656,3 @@ add_custom_target(uninstall
# Add subdirectories (in order of deps)
########################################################################
add_subdirectory(src)
-
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 33e45b9d5..8db189904 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -68,7 +68,7 @@ members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at [http://contributor-covenant.org/version/1/4][version]
+available at [https://contributor-covenant.org/version/1/4][version]
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/4/
+[homepage]: https://contributor-covenant.org
+[version]: https://contributor-covenant.org/version/1/4/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 12cc1328f..06f37b0a2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -67,7 +67,7 @@ GitHub](https://github.com/join).
GitHub](https://github.com/gnss-sdr/gnss-sdr/fork). This will copy the
whole gnss-sdr repository to your personal account.
- 3. Then, go to your favourite working folder in your computer and
+ 3. Then, go to your favorite working folder in your computer and
clone your forked repository by typing (replacing ```YOUR_USERNAME``` by
the actual username of your GitHub account):
@@ -75,7 +75,7 @@ the actual username of your GitHub account):
4. Your forked repository https://github.com/YOUR_USERNAME/gnss-sdr
will receive the default name of `origin`. You can also add the original
-gnss-sdr repository, which is usually called `upstream`:
+gnss-sdr repository, which is usually referred to as `upstream`:
$ cd gnss-sdr
$ git remote add upstream https://github.com/gnss-sdr/gnss-sdr.git
@@ -128,6 +128,8 @@ $ git pull --rebase upstream next
### 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).
+
When the contribution is ready, you can [submit a pull
request](https://github.com/gnss-sdr/gnss-sdr/compare/). Head to your
GitHub repository, switch to your `my_feature` branch, and click the
@@ -144,24 +146,24 @@ accepted:
* Avoid platform-dependent code. If your code require external
dependencies, they must be available as packages in [Debian OldStable](https://wiki.debian.org/DebianOldStable).
* Write tests.
- * Follow our [coding style guide](http://gnss-sdr.org/coding-style/).
+ * Follow our [coding style guide](https://gnss-sdr.org/coding-style/).
* Write a descriptive and detailed summary. Please consider that
reviewing pull requests is hard, so include as much information as
possible to make your pull request's intent clear.
For more details about Git usage, please check out [our
-tutorial](http://gnss-sdr.org/docs/tutorials/using-git/).
+tutorial](https://gnss-sdr.org/docs/tutorials/using-git/).
## Contributing to the website
-The content of http://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
You can fork that repository, reproduce the entire website on your
computer using [Jekyll](https://jekyllrb.com/), do changes and submit
pull requests, just as explained above. For more details, please check
-out [how to contribute](http://gnss-sdr.org/contribute/).
+out [how to contribute](https://gnss-sdr.org/contribute/).
Last but not the least, you can leave your comments on the website.
@@ -171,6 +173,6 @@ Last but not the least, you can leave your comments on the website.
![GeNiuSS
-contributes](http://gnss-sdr.org/assets/images/geniuss-contribute.png)
+contributes](https://gnss-sdr.org/assets/images/geniuss-contribute.png)
Thanks for your contribution to GNSS-SDR!
diff --git a/COPYING b/COPYING
index 818433ecc..8859f3d09 100644
--- a/COPYING
+++ b/COPYING
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see .
+ along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
@@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
-.
+.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
-.
+.
diff --git a/MANIFEST.md b/MANIFEST.md
index 487b88be4..ea64ec678 100644
--- a/MANIFEST.md
+++ b/MANIFEST.md
@@ -5,6 +5,7 @@ tags:
- gnss
- gps
- Galileo
+ - Glonass
author:
- Carles Fernandez-Prades
- Javier Arribas
@@ -17,15 +18,15 @@ dependencies:
- gflags
- glog
- gnutls
+ - matio
license: GPLv3+
repo: https://github.com/gnss-sdr/gnss-sdr
website: https://gnss-sdr.org
icon: https://gnss-sdr.org/assets/images/logo400x400.jpg
---
-Global Navigation Satellite Systems receiver defined by software. It performs all the signal
-processing from raw signal samples up to the computation of the Position-Velocity-Time solution,
-including code and phase observables. It is able to work with raw data files or, if there is
-computational power enough, in real time with suitable radiofrequency front-ends. This software
+Global Navigation Satellite Systems receiver defined by software. It performs all the signal
+processing from raw signal samples up to the computation of the Position-Velocity-Time solution,
+including code and phase observables. It is able to work with raw data files or, if there is
+computational power enough, in real time with suitable radiofrequency front-ends. This software
is mainly developed at [CTTC](http://www.cttc.es "Centre Tecnologic de Telecomunicacions de Catalunya")
with contributions from around the world. More info at [gnss-sdr.org](https://gnss-sdr.org "GNSS-SDR's Homepage").
-
diff --git a/README.md b/README.md
index 3d7c7104d..184f67102 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,38 @@
-![](./docs/doxygen/images/gnss-sdr_logo.png)
+[![](./docs/doxygen/images/gnss-sdr_logo.png)](https://gnss-sdr.org "GNSS-SDR website")
+
+[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
**Welcome to GNSS-SDR!**
-Visit [gnss-sdr.org](http://gnss-sdr.org "GNSS-SDR's Homepage") for more information about this open source GNSS software defined receiver.
+This program is a software-defined receiver which is able to process (that is, to perform detection, synchronization, demodulation and decoding of the navigation message, computation of observables and, finally, computation of position fixes) the following Global Navigation Satellite System's signals:
-If you have questions about GNSS-SDR, please [subscribe to the gnss-sdr-developers mailing list](http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers "Subscribe to the gnss-sdr-developers mailing list" ) and post your questions there.
+In the L1 band:
+ - 🛰 GPS L1 C/A (centered at 1575.42 MHz) :white_check_mark:
+ - 🛰 Galileo E1b/c (centered at 1575.42 MHz) :white_check_mark:
+ - 🛰 GLONASS L1 C/A (centered at 1601.72 MHz) :white_check_mark:
+
+In the L2 band:
+ - 🛰 GPS L2C (centered at 1227.60 MHz) :white_check_mark:
+ - 🛰 GLONASS L2 C/A (centered at 1246 MHz) :white_check_mark:
+
+In the L5 band:
+ - 🛰 GPS L5 (centered at 1176.45 MHz) :white_check_mark:
+ - 🛰 Galileo E5a (centered at 1176.45 MHz) :white_check_mark:
+
+GNSS-SDR provides interfaces for a wide range of radio frequency front-ends and raw sample file formats, generates processing outputs in standard formats, allows for the full inspection of the whole signal processing chain, and offers a framework for the development of new features. Please visit [https://gnss-sdr.org](https://gnss-sdr.org "GNSS-SDR website") for more information about this open source software-defined GNSS receiver.
# How to build GNSS-SDR
-This section describes how to set up the compilation environment in GNU/Linux or [macOS / Mac OS X](#macosx), and to build GNSS-SDR. See also our [build and install page](http://gnss-sdr.org/build-and-install/ "GNSS-SDR's Build and Install").
+This section describes how to set up the compilation environment in GNU/Linux or [macOS / Mac OS X](#macosx), and to build GNSS-SDR. See also our [build and install page](https://gnss-sdr.org/build-and-install/ "GNSS-SDR's Build and Install").
GNU/Linux
----------
- * Tested distributions: Ubuntu 14.04 LTS and [above](http://packages.ubuntu.com/search?keywords=gnss-sdr), Debian 8.0 "jessie" and [above](https://packages.debian.org/search?searchon=names&keywords=gnss-sdr), Linaro 15.03
- * Known to work but not continually tested: Arch Linux, Fedora, and openSUSE
+ * Tested distributions: Ubuntu 14.04 LTS and above; Debian 8.0 "jessie" and above; Fedora 26 and above; CentOS 7; Arch Linux.
* Supported microprocessor architectures:
* i386: Intel x86 instruction set (32-bit microprocessors).
* amd64: also known as x86-64, the 64-bit version of the x86 instruction set, originally created by AMD and implemented by AMD, Intel, VIA and others.
@@ -39,38 +53,76 @@ Before building GNSS-SDR, you need to install all the required dependencies. The
### Alternative 1: Install dependencies using software packages
-If you want to start building and running GNSS-SDR as quick and easy as possible, the best option is to install all the required dependencies as binary packages. If you are using Debian 8, Ubuntu 14.10 or above, this can be done by copying and pasting the following line in a terminal:
+If you want to start building and running GNSS-SDR as quick and easy as possible, the best option is to install all the required dependencies as binary packages.
+
+#### Debian / Ubuntu
+
+If you are using Debian 8, Ubuntu 14.10 or above, this can be done by copying and pasting the following line in a terminal:
~~~~~~
$ sudo apt-get install build-essential cmake git libboost-dev libboost-date-time-dev \
libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev \
- libboost-serialization-dev libboost-program-options-dev libboost-test-dev \
- liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr libblas-dev liblapack-dev \
- libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libgtest-dev \
- python-mako python-six
+ libboost-serialization-dev liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr \
+ libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \
+ libgnutls-openssl-dev libpcap-dev python-mako python-six libmatio-dev libpugixml-dev \
+ libgtest-dev
~~~~~~
-Alternatively, and starting from Ubuntu 16.04 LTS, you can install all the required dependencies by adding the line
+Please note that the required files from `libgtest-dev` were moved to `googletest` in Debian 9 "stretch" and Ubuntu 18.04 "bionic", and moved back again to `libgtest-dev` in Debian 10 "buster" and Ubuntu 18.10 "cosmic".
+
+**Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires `gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev` and `gr-osmosdr` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04 came with 1.5.2 and the minimum required version is 1.5.3. Please do not install the `libmatio-dev` package and install `libtool`, `automake` and `libhdf5-dev` instead. A recent version of the library will be downloaded and built automatically if CMake does not find it installed.
+
+**Note for Debian 8 "jessie" users:** please see the note about `libmatio-dev` above. Install `libtool`, `automake` and `libhdf5-dev` instead.
+
+Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#download-and-build-linux).
+
+
+#### Fedora
+
+If you are using Fedora 26 or above, the required software dependencies can be installed by doing:
~~~~~~
-deb-src http://us.archive.ubuntu.com/ubuntu/ xenial universe
+$ sudo yum install make automake gcc gcc-c++ kernel-devel cmake git boost-devel \
+ boost-date-time boost-system boost-filesystem boost-thread boost-chrono \
+ boost-serialization log4cpp-devel gnuradio-devel gr-osmosdr-devel \
+ blas-devel lapack-devel matio-devel armadillo-devel gflags-devel \
+ glog-devel openssl-devel libpcap-devel python-mako python-six pugixml-devel
~~~~~~
-to your ```/etc/apt/sources.list``` file and doing:
+Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#download-and-build-linux).
+
+#### CentOS
+
+If you are using CentOS 7, you can install the dependencies via Extra Packages for Enterprise Linux ([EPEL](https://fedoraproject.org/wiki/EPEL)):
~~~~~~
-$ sudo apt-get update
-$ sudo apt-get build-dep gnss-sdr
+$ sudo yum install wget
+$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
+$ sudo rpm -Uvh epel-release-latest-7.noarch.rpm
+$ sudo yum install make automake gcc gcc-c++ kernel-devel libtool \
+ hdf5-devel cmake git boost-devel boost-date-time boost-system \
+ boost-filesystem boost-thread boost-chrono boost-serialization \
+ log4cpp-devel gnuradio-devel gr-osmosdr-devel blas-devel lapack-devel \
+ armadillo-devel openssl-devel libpcap-devel python-mako python-six pugixml-devel
~~~~~~
-Once you have installed these packages, you can jump directly to [how to download the source code and build GNSS-SDR](#download-and-build-linux).
+Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#download-and-build-linux).
-Note for Ubuntu 14.04 LTS "trusty" users: you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires gnuradio-dev >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT ```libuhd-dev```, ```gnuradio-dev``` and ```gr-osmosdr``` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS.
+#### Arch Linux
+If you are using Arch Linux (with base-devel group installed):
+
+~~~~~~
+$ pacman -S cmake git boost boost-libs log4cpp libvolk gnuradio gnuradio-osmosdr \
+ blas lapack gflags google-glog openssl pugixml python-mako python-six \
+ libmatio libpcap gtest
+~~~~~~
+
+Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#download-and-build-linux).
### Alternative 2: Install dependencies using PyBOMBS
-This option is adequate if you are interested in development, in working with the most recent versions of software dependencies, want more fine tuning on the installed versions, or simply in building everything from the scratch just for the fun of it. In such cases, we recommend to use [PyBOMBS](http://gnuradio.org/pybombs "Python Build Overlay Managed Bundle System wiki") (Python Build Overlay Managed Bundle System), GNU Radio's meta-package manager tool that installs software from source, or whatever the local package manager is, that automatically does all the work for you. Please take a look at the configuration options and general PyBOMBS usage at https://github.com/gnuradio/pybombs. Here we provide a quick step-by-step tutorial.
+This option is adequate if you are interested in development, in working with the most recent versions of software dependencies, want more fine tuning on the installed versions, or simply in building everything from the scratch just for the fun of it. In such cases, we recommend to use [PyBOMBS](https://github.com/gnuradio/pybombs "Python Build Overlay Managed Bundle System") (Python Build Overlay Managed Bundle System), GNU Radio's meta-package manager tool that installs software from source, or whatever the local package manager is, that automatically does all the work for you. Please take a look at the configuration options and general PyBOMBS usage at https://github.com/gnuradio/pybombs. Here we provide a quick step-by-step tutorial.
First of all, install some basic packages:
@@ -84,11 +136,16 @@ Download, build and install PyBOMBS:
$ sudo pip install git+https://github.com/gnuradio/pybombs.git
~~~~~~
-Add some software recipes (i.e., instructions on how to install software dependencies):
+Apply a configuration:
~~~~~~
-$ pybombs recipes add gr-recipes git+https://github.com/gnuradio/gr-recipes.git
-$ pybombs recipes add gr-etcetera git+https://github.com/gnuradio/gr-etcetera.git
+$ pybombs auto-config
+~~~~~~
+
+Add list of default recipes:
+
+~~~~~~
+$ pybombs recipes add-defaults
~~~~~~
Download, build and install GNU Radio, related drivers and some other extra modules into the directory ```/path/to/prefix``` (replace this path by your preferred one, for instance ```$HOME/sdr```):
@@ -112,7 +169,7 @@ $ pybombs install gnss-sdr
By default, PyBOMBS installs the ‘next’ branch of GNSS-SDR development, which is the most recent version of the source code. This behaviour can be modified by altering the corresponding recipe at ```$HOME/.pybombs/recipes/gr-recipes/gnss-sdr.lwr```
-In case you do not want to use PyBOMBS and prefer to build and install GNSS-SDR step by step (i.e., cloning the repository and doing the usual ```cmake .. && make && make install``` dance), Armadillo, GFlags, Glog and GunTLS can be installed either by using PyBOMBS:
+In case you do not want to use PyBOMBS and prefer to build and install GNSS-SDR step by step (i.e., cloning the repository and doing the usual ```cmake .. && make && make install``` dance), Armadillo, GFlags, Glog and GnuTLS can be installed either by using PyBOMBS:
~~~~~~
$ pybombs install armadillo gflags glog gnutls
@@ -126,27 +183,28 @@ or manually as explained below, and then please follow instructions on how to [d
#### Install [Armadillo](http://arma.sourceforge.net/ "Armadillo's Homepage"), a C++ linear algebra library:
~~~~~~
-$ sudo apt-get install libopenblas-dev liblapack-dev # For Debian/Ubuntu/LinuxMint
+$ sudo apt-get install libblas-dev liblapack-dev # For Debian/Ubuntu/LinuxMint
$ sudo yum install lapack-devel blas-devel # For Fedora/CentOS/RHEL
$ sudo zypper install lapack-devel blas-devel # For OpenSUSE
-$ wget http://sourceforge.net/projects/arma/files/armadillo-7.600.2.tar.xz
-$ tar xvfz armadillo-7.600.2.tar.xz
-$ cd armadillo-7.600.2
+$ sudo pacman -S blas lapack # For Arch Linux
+$ wget https://sourceforge.net/projects/arma/files/armadillo-9.100.5.tar.xz
+$ tar xvfz armadillo-9.100.5.tar.xz
+$ cd armadillo-9.100.5
$ cmake .
$ make
$ sudo make install
~~~~~~
-The full stop separated from ```cmake``` by a space is important. [CMake](http://www.cmake.org/ "CMake's Homepage") will figure out what other libraries are currently installed and will modify Armadillo's configuration correspondingly. CMake will also generate a run-time armadillo library, which is a combined alias for all the relevant libraries present on your system (eg. BLAS, LAPACK and ATLAS).
+The full stop separated from ```cmake``` by a space is important. [CMake](https://cmake.org/ "CMake's Homepage") will figure out what other libraries are currently installed and will modify Armadillo's configuration correspondingly. CMake will also generate a run-time armadillo library, which is a combined alias for all the relevant libraries present on your system (eg. BLAS, LAPACK and ATLAS).
#### Install [Gflags](https://github.com/gflags/gflags "Gflags' Homepage"), a commandline flags processing module for C++:
~~~~~~
-$ wget https://github.com/gflags/gflags/archive/v2.2.0.tar.gz
-$ tar xvfz v2.2.0.tar.gz
-$ cd gflags-2.2.0
+$ wget https://github.com/gflags/gflags/archive/v2.2.2.tar.gz
+$ tar xvfz v2.2.2.tar.gz
+$ cd gflags-2.2.2
$ cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DBUILD_gflags_nothreads_LIB=OFF .
$ make
$ sudo make install
@@ -158,9 +216,9 @@ $ sudo ldconfig
#### Install [Glog](https://github.com/google/glog "Glog's Homepage"), a library that implements application-level logging:
~~~~~~
-$ wget https://github.com/google/glog/archive/v0.3.4.tar.gz
-$ tar xvfz v0.3.4.tar.gz
-$ cd glog-0.3.4
+$ wget https://github.com/google/glog/archive/v0.3.5.tar.gz
+$ tar xvfz v0.3.5.tar.gz
+$ cd glog-0.3.5
$ ./configure
$ make
$ sudo make install
@@ -172,28 +230,30 @@ $ sudo ldconfig
#### Build the [Google C++ Testing Framework](https://github.com/google/googletest "Googletest Homepage"), also known as Google Test:
~~~~~~
-$ wget https://github.com/google/googletest/archive/release-1.8.0.zip
-$ unzip release-1.8.0.zip
-$ cd googletest-release-1.8.0
-$ cmake -DBUILD_GTEST=ON -DBUILD_GMOCK=OFF .
+$ wget https://github.com/google/googletest/archive/release-1.8.1.zip
+$ unzip release-1.8.1.zip
+$ cd googletest-release-1.8.1
+$ cmake -DINSTALL_GTEST=OFF -DBUILD_GMOCK=OFF .
$ make
~~~~~~
Please **DO NOT install** Google Test (do *not* type ```sudo make install```). Every user needs to compile his tests using the same compiler flags used to compile the installed Google Test libraries; otherwise he may run into undefined behaviors (i.e. the tests can behave strangely and may even crash for no obvious reasons). The reason is that C++ has this thing called the One-Definition Rule: if two C++ source files contain different definitions of the same class/function/variable, and you link them together, you violate the rule. The linker may or may not catch the error (in many cases it is not required by the C++ standard to catch the violation). If it does not, you get strange run-time behaviors that are unexpected and hard to debug. If you compile Google Test and your test code using different compiler flags, they may see different definitions of the same class/function/variable (e.g. due to the use of ```#if``` in Google Test). Therefore, for your sanity, we recommend to avoid installing pre-compiled Google Test libraries. Instead, each project should compile Google Test itself such that it can be sure that the same flags are used for both Google Test and the tests. The building system of GNSS-SDR does the compilation and linking of googletest to its own tests; it is only required that you tell the system where the googletest folder that you downloaded resides. Just add to your ```$HOME/.bashrc``` file the following line:
~~~~~~
-export GTEST_DIR=/home/username/googletest-release-1.8.0/googletest
+export GTEST_DIR=/home/username/googletest-release-1.8.1/googletest
~~~~~~
-changing `/home/username/googletest-release-1.8.0/googletest` by the actual directory where you built googletest.
+changing `/home/username/googletest-release-1.8.1/googletest` by the actual directory where you built googletest.
-#### Install the [GnuTLS library](http://www.gnutls.org/ "GnuTLS's Homepage"):
+#### Install the [GnuTLS](https://www.gnutls.org/ "GnuTLS's Homepage") or [OpenSSL](https://www.openssl.org/ "OpenSSL's Homepage") libraries:
~~~~~~
$ sudo apt-get install libgnutls-openssl-dev # For Debian/Ubuntu/LinuxMint
-$ sudo yum install libgnutls-openssl-devel # For Fedora/CentOS/RHEL
+$ sudo yum install openssl-devel # For Fedora/CentOS/RHEL
+$ sudo zypper install openssl-devel # For OpenSUSE
+$ sudo pacman -S openssl # For Arch Linux
~~~~~~
In case the GnuTLS library with openssl extensions package is not available in your GNU/Linux distribution, GNSS-SDR can also work well with OpenSSL.
@@ -230,7 +290,7 @@ By default, you will be in the 'master' branch of the Git repository, which corr
$ git checkout next
~~~~~~
-More information about GNSS-SDR-specific Git usage and pointers to further readings can be found at our [Git tutorial](http://gnss-sdr.org/docs/tutorials/using-git/ "Using Git").
+More information about GNSS-SDR-specific Git usage and pointers to further readings can be found at our [Git tutorial](https://gnss-sdr.org/docs/tutorials/using-git/ "Using Git").
### Build and install GNSS-SDR
@@ -248,7 +308,7 @@ $ cmake ../
$ make
~~~~~~
-By default, CMake will build the Release version, meaning that the compiler will generate a fast, optimized executable. This is the recommended build type when using a RF front-end and you need to attain real time. If working with a file (and thus without real-time constraints), you may want to obtain more information about the internals of the receiver, as well as more fine-grained logging. This can be done by building the Debug version, by doing:
+By default, CMake will build the Release version, meaning that the compiler will generate a fast, optimized executable. This is the recommended build type when using an RF front-end and you need to attain real time. If working with a file (and thus without real-time constraints), you may want to obtain more information about the internals of the receiver, as well as more fine-grained logging. This can be done by building the Debug version, by doing:
~~~~~~
$ cmake -DCMAKE_BUILD_TYPE=Debug ../
@@ -291,7 +351,7 @@ GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
If you are using Eclipse as your development environment, CMake can create the project for you. Type:
~~~~~~
-$ cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DECLIPSE_CDT4_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_ECLIPSE_VERSION=3.7 -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j8 ../
+$ cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_ECLIPSE_VERSION=4.5 .
~~~~~~
and then import the created project file into Eclipse:
@@ -368,7 +428,52 @@ $ sudo make install
(in order to disable the `Osmosdr_Signal_Source` compilation, you can pass `DENABLE_OSMOSDR=OFF` to cmake and build GNSS-SDR again).
+###### Build FMCOMMS2 based SDR Hardware support (OPTIONAL):
+Install the [libiio](https://github.com/analogdevicesinc/libiio.git) (>=v0.11), [libad9361](https://github.com/analogdevicesinc/libad9361-iio.git) (>=v0.1-1) libraries and [gr-iio](https://github.com/analogdevicesinc/gr-iio.git) (>v0.3) gnuradio block:
+
+~~~~~~
+$ sudo apt-get install libxml2-dev bison flex
+$ git clone https://github.com/analogdevicesinc/libiio.git
+$ cd libiio
+$ mkdir build
+$ cd build
+$ cmake ..
+$ make && sudo make install && sudo ldconfig
+$ cd ../..
+$ git clone https://github.com/analogdevicesinc/libad9361-iio.git
+$ cd libad9361-iio
+$ mkdir build
+$ cd build
+$ cmake ..
+$ make && sudo make install && sudo ldconfig
+$ cd ../..
+$ git clone https://github.com/analogdevicesinc/gr-iio.git
+$ cd gr-iio
+$ mkdir build
+$ cd build
+$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
+$ make && sudo make install && sudo ldconfig
+$ cd ../..
+~~~~~~
+
+Then configure GNSS-SDR to build the `Fmcomms2_Signal_Source` implementation:
+
+~~~~~~
+$ cd gnss-sdr/build
+$ cmake -DENABLE_FMCOMMS2=ON ../
+$ make
+$ sudo make install
+~~~~~~
+
+or configure it to build `Plutosdr_Signal_Source`:
+~~~~~~
+$ cmake -DENABLE_PLUTOSDR=ON ../
+$ make
+$ sudo make install
+~~~~~~
+
+With `Fmcomms2_Signal_Source` you can use any SDR hardware based on [FMCOMMS2](https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz), including the ADALM-PLUTO (PlutoSdr) by configuring correctly the .conf file. The `Plutosdr_Signal_Source` offers a simpler manner to use the ADALM-PLUTO because implements only a subset of FMCOMMS2's parameters valid for those devices.
###### Build OpenCL support (OPTIONAL):
@@ -406,15 +511,13 @@ $ sudo make install
Using this option, all SIMD instructions are exclusively accessed via VOLK, which automatically includes versions of each function for different SIMD instruction sets, then detects at runtime which to use, or if there are none, substitutes a generic, non-SIMD implementation.
+More details can be found in our tutorial about [GNSS-SDR configuration options at building time](https://gnss-sdr.org/docs/tutorials/using-git/ "Configuration options at building time").
macOS and Mac OS X
---------
-
-### macOS Sierra, Mac OS X 10.11 (El Capitan), 10.10 (Yosemite) and 10.9 (Mavericks).
-
-If you still have not installed [Xcode](http://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools. Launch the Terminal, found in /Applications/Utilities/, and type:
+GNSS-SDR can be built on MacOS or Mac OS X, starting from 10.9 (Mavericks) and including 10.14 (Mojave). If you still have not installed [Xcode](https://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools. Launch the Terminal, found in /Applications/Utilities/, and type:
~~~~~~
$ xcode-select --install
@@ -428,9 +531,9 @@ $ sudo xcodebuild -license
Software pre-requisites can be installed using either [Macports](#macports) or [Homebrew](#homebrew).
-####Macports
+#### Macports
-First, [install Macports](http://www.macports.org/install.php). If you are upgrading from a previous installation, please follow the [migration rules](http://trac.macports.org/wiki/Migration).
+First, [install Macports](https://www.macports.org/install.php). If you are upgrading from a previous installation, please follow the [migration rules](https://trac.macports.org/wiki/Migration).
In a terminal, type:
@@ -444,6 +547,8 @@ $ sudo port install gnutls
$ sudo port install google-glog +gflags
$ sudo port install py27-mako
$ sudo port install py27-six
+$ sudo port install matio
+$ sudo port install pugixml
~~~~~~
You also might need to activate a Python installation. The list of installed versions can be retrieved with:
@@ -452,7 +557,7 @@ You also might need to activate a Python installation. The list of installed ver
$ port select list python
~~~~~~
-and you can activate a certain version (2.7 works well) by typing:
+and you can activate a certain version by typing:
~~~~~~
$ sudo port select --set python python27
@@ -460,15 +565,32 @@ $ sudo port select --set python python27
#### Homebrew
-Instructions for installing GNU Radio using [homebrew](http://www.brew.sh) can be found [here](http://github.com/odrisci/homebrew-gnuradio) - please ensure to install all dependencies as required.
+First, install [Homebrew](https://brew.sh/). Paste this in a terminal prompt:
-Install Armadillo and dependencies:
+~~~~~~
+$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+~~~~~~
+
+The script explains what it will do and then pauses before it does it. There are more installation options [here](https://docs.brew.sh/Installation.html).
+
+Install pip:
+
+~~~~~~
+$ sudo easy_install pip
+~~~~~~
+
+Install the required dependencies:
~~~~~~
$ brew tap homebrew/science
$ brew install cmake hdf5 arpack superlu
$ brew install armadillo
$ brew install glog gflags gnutls
+$ brew install gnuradio
+$ brew install libmatio
+$ brew install pugixml
+$ pip install mako
+$ pip install six
~~~~~~
#### Build GNSS-SDR
@@ -506,7 +628,7 @@ GNSS-SDR comes with a library which is a module of the Vector-Optimized Library
###### Other package managers
-GNU Radio and other dependencies can also be installed using other package managers than Macports, such as [Fink](http://www.finkproject.org/ "Fink") or [Homebrew](http://brew.sh/ "Homebrew"). Since the version of Python that ships with OS X is great for learning but it is not good for development, you could have another Python executable in a non-standard location. If that is the case, you need to inform GNSS-SDR's configuration system by defining the `PYTHON_EXECUTABLE` variable as:
+GNU Radio and other dependencies can also be installed using other package managers than Macports, such as [Fink](http://www.finkproject.org/ "Fink") or [Homebrew](https://brew.sh/ "Homebrew"). Since the version of Python that ships with OS X is great for learning but it is not good for development, you could have another Python executable in a non-standard location. If that is the case, you need to inform GNSS-SDR's configuration system by defining the `PYTHON_EXECUTABLE` variable as:
~~~~~~
cmake -DPYTHON_EXECUTABLE=/path/to/bin/python ../
@@ -525,10 +647,11 @@ The CMake script will create Makefiles that download, build and link Armadillo,
Other builds
---------
+* **Docker container**: A technology providing operating-system-level virtualization to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. Visit [https://github.com/carlesfernandez/docker-gnsssdr](https://github.com/carlesfernandez/docker-gnsssdr) or [https://github.com/carlesfernandez/docker-pybombs-gnsssdr](https://github.com/carlesfernandez/docker-pybombs-gnsssdr) for instructions.
-* **Snap packages**: [Snaps](http://snapcraft.io) are universal Linux packages aimed to work on any distribution or device, from IoT devices to servers, desktops to mobile devices. Visit [https://github.com/carlesfernandez/snapcraft-sandbox](https://github.com/carlesfernandez/snapcraft-sandbox) for instructions.
+* **Snap packages**: [Snaps](https://snapcraft.io) are universal Linux packages aimed to work on any distribution or device, from IoT devices to servers, desktops to mobile devices. Visit [https://github.com/carlesfernandez/snapcraft-sandbox](https://github.com/carlesfernandez/snapcraft-sandbox) for instructions.
-* **GNSS-SDR in embedded platforms**: we provide a Software Development Kit (SDK) based on [OpenEmbedded](http://www.openembedded.org/wiki/Main_Page) for cross-compiling GNSS-SDR in your desktop computer and for producing executables that can run in embedded platforms, such as a Zedboard or a Raspberry Pi 3. Visit [Cross-compiling GNSS-SDR](http://gnss-sdr.org/docs/tutorials/cross-compiling/) for instructions.
+* **GNSS-SDR in embedded platforms**: we provide a Software Development Kit (SDK) based on [OpenEmbedded](http://www.openembedded.org/wiki/Main_Page) for cross-compiling GNSS-SDR in your desktop computer and for producing executables that can run in embedded platforms, such as a Zedboard or a Raspberry Pi 3. Visit [Cross-compiling GNSS-SDR](https://gnss-sdr.org/docs/tutorials/cross-compiling/) for instructions.
Updating GNSS-SDR
@@ -560,9 +683,9 @@ Before rebuilding the source code, it is safe (and recommended) to remove the re
$ rm -rf gnss-sdr/build/*
~~~~~~
-If you are interested in contributing to the development of GNSS-SDR, please check out [how to do it](http://gnss-sdr.org/contribute/ "How to contribute to GNSS-SDR source code").
+If you are interested in contributing to the development of GNSS-SDR, please check out [how to do it](https://gnss-sdr.org/contribute/ "How to contribute to GNSS-SDR source code").
-There is a more controlled way to upgrade your repository, which is to use the Git commands ```fetch``` and ```merge```, as described in our [Git Tutorial](http://gnss-sdr.org/docs/tutorials/using-git/ "Using Git").
+There is a more controlled way to upgrade your repository, which is to use the Git commands ```fetch``` and ```merge```, as described in our [Git Tutorial](https://gnss-sdr.org/docs/tutorials/using-git/ "Using Git").
@@ -574,32 +697,31 @@ Getting started
1. After building the code, you will find the ```gnss-sdr``` executable file at gnss-sdr/install. You can make it available everywhere else by ```sudo make install```. Run the profilers ```volk_profile``` and ```volk_gnsssdr_profile``` for testing all available VOLK kernels for each architecture supported by your processor. This only has to be done once.
2. In post-processing mode, you have to provide a captured GNSS signal file.
1. The signal file can be easily recorded using the GNU Radio file sink in ```gr_complex``` mode.
- 2. You will need a GPS active antenna, a [USRP](http://www.ettus.com/product) and a suitable USRP daughter board to receive GPS L1 C/A signals. GNSS-SDR require to have at least 2 MHz of bandwidth in 1.57542 GHz. (remember to enable the DC bias with the daughter board jumper).
+ 2. You will need a GPS active antenna, a [USRP](https://www.ettus.com/product) and a suitable USRP daughter board to receive GPS L1 C/A signals. GNSS-SDR require to have at least 2 MHz of bandwidth in 1.57542 GHz. (remember to enable the DC bias with the daughter board jumper).
We use a [DBSRX2](https://www.ettus.com/product/details/DBSRX2) to do the task, but you can try the newer Ettus' daughter boards as well.
3. The easiest way to capture a signal file is to use the GNU Radio Companion GUI. Only two blocks are needed: a USRP signal source connected to complex float file sink. You need to tune the USRP central frequency and decimation factor using USRP signal source properties box. We suggest using a decimation factor of 20 if you use the USRP2. This will give you 100/20 = 5 MSPS which will be enough to receive GPS L1 C/A signals. The front-end gain should also be configured. In our test with the DBSRX2 we obtained good results with ```G=50```.
- 4. Capture at least 80 seconds of signal in open sky conditions. During the process, be aware of USRP driver buffer underuns messages. If your hard disk is not fast enough to write data at this speed you can capture to a virtual RAM drive. 80 seconds of signal at 5 MSPS occupies less than 3 Gbytes using ```gr_complex```.
- 5. If you have no access to a RF front-end, you can download a sample raw data file (that contains GPS and Galileo signals) from [here](http://sourceforge.net/projects/gnss-sdr/files/data/).
+ 4. Capture at least 80 seconds of signal in open sky conditions. During the process, be aware of USRP driver buffer underruns messages. If your hard disk is not fast enough to write data at this speed you can capture to a virtual RAM drive. 80 seconds of signal at 5 MSPS occupies less than 3 Gbytes using ```gr_complex```.
+ 5. If you have no access to an RF front-end, you can download a sample raw data file (that contains GPS and Galileo signals) from [here](https://sourceforge.net/projects/gnss-sdr/files/data/).
3. You are ready to configure the receiver to use your captured file among other parameters:
1. The default configuration file resides at [/usr/local/share/gnss-sdr/conf/default.conf](./conf/gnss-sdr.conf).
2. You need to review/modify at least the following settings:
* ```SignalSource.filename=``` (absolute or relative route to your GNSS signal captured file)
- * ```GNSS-SDR.internal_fs_hz=``` (captured file sampling rate in Hz)
- * ```SignalSource.sampling_frequency=``` (captured file sampling rate in Hz)
- * ```SignalConditioner.sample_freq_in=``` (captured file sampling rate in Hz)
- * ```SignalConditioner.sample_freq_out=``` (captured file sampling rate in Hz)
- * ```TelemetryDecoder.fs_in=``` (captured file sampling rate in Hz)
+ * ```GNSS-SDR.internal_fs_sps=``` (captured file sampling rate in samples per second)
+ * ```SignalSource.sampling_frequency=``` (captured file sampling rate in samples per second)
+ * ```SignalConditioner.sample_freq_in=``` (captured file sampling rate in samples per second)
+ * ```SignalConditioner.sample_freq_out=``` (captured file sampling rate in samples per second)
3. The configuration file has in-line documentation, you can try to tune the number of channels and several receiver parameters. Store your .conf file in some working directory of your choice.
4. Run the receiver invoking the configuration by
```$ gnss-sdr --config_file=/path/to/my_receiver.conf```
The program reports the current status in text mode, directly to the terminal window. If all goes well, and GNSS-SDR is able to successfully track and decode at least 4 satellites, you will get PVT fixes. The program will write .kml, .geojson and RINEX files in the folder from which ```gnss-sdr``` was run. In addition to the console output, GNSS-SDR also writes log files at /tmp/ (configurable with the commandline flag ```./gnss-sdr --log_dir=/path/to/log```).
-For more information, check out our [quick start guide](http://gnss-sdr.org/quick-start-guide/).
+For more information, check out our [quick start guide](https://gnss-sdr.org/quick-start-guide/).
Using GNSS-SDR
==============
-With GNSS-SDR, you can define you own receiver, work with captured raw data or from a RF front-end, dump into files intermediate signals, or tune every single algorithm used in the signal processing. All the configuration is done in a single file. Those configuration files reside at the [gnss-sdr/conf/](./conf/) folder (or at /usr/local/share/gnss-sdr/conf if you installed the program). By default, the executable ```gnss-sdr``` will read the configuration available at ```gnss-sdr/conf/gnss-sdr.conf``` (or at (usr/local/share/gnss-sdr/conf/default.conf if you installed the program). You can edit that file to fit your needs, or even better, define a new ```my_receiver.conf``` file with your own configuration. This new receiver can be generated by invoking gnss-sdr with the ```--config_file``` flag pointing to your configuration file:
+With GNSS-SDR, you can define your own receiver, work with captured raw data or from an RF front-end, dump into files intermediate signals, or tune every single algorithm used in the signal processing. All the configuration is done in a single file. Those configuration files reside at the [gnss-sdr/conf/](./conf/) folder (or at /usr/local/share/gnss-sdr/conf if you installed the program). By default, the executable ```gnss-sdr``` will read the configuration available at ```gnss-sdr/conf/gnss-sdr.conf``` (or at (usr/local/share/gnss-sdr/conf/default.conf if you installed the program). You can edit that file to fit your needs, or even better, define a new ```my_receiver.conf``` file with your own configuration. This new receiver can be generated by invoking gnss-sdr with the ```--config_file``` flag pointing to your configuration file:
~~~~~~
$ gnss-sdr --config_file=/path/to/my_receiver.conf
@@ -645,15 +767,15 @@ The name of these parameters can be anything but one reserved word: implementati
SignalConditioner.implementation=Pass_Through
~~~~~~
-Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in the [INI format](http://en.wikipedia.org/wiki/INI_file)).
+Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in the [INI format](https://en.wikipedia.org/wiki/INI_file)).
### GNSS block factory
-Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called [GNSSBlockFactory](./src/core/receiver/gnss_block_factory.h). This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration enables extending the application capacities in a high degree. It also allows to produce fully customized receivers, for instance a testbed for acquisition algorithms, and to place observers at any point of the receiver chain.
+Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called [GNSSBlockFactory](./src/core/receiver/gnss_block_factory.h). This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration enables extending the application capacities in a high degree. It also allows producing fully customized receivers, for instance a testbed for acquisition algorithms, and to place observers at any point of the receiver chain.
-More information can be found at the [Control Plane page](http://gnss-sdr.org/docs/control-plane/).
+More information can be found at the [Control Plane page](https://gnss-sdr.org/docs/control-plane/).
Signal Processing plane
@@ -665,9 +787,9 @@ GNU Radio's class ```gr::basic_block``` is the abstract base class for all signa
A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal processing functions.
-Class ```gr::top_block``` is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the program: run(), start(), stop(), wait(), etc. A a subclass called [GNSSBlockInterface](./src/core/interfaces/gnss_block_interface.h) is the common interface for all the GNSS-SDR modules. It defines pure virtual methods, that are required to be implemented by a derived class.
+Class ```gr::top_block``` is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the program: run(), start(), stop(), wait(), etc. A subclass called [GNSSBlockInterface](./src/core/interfaces/gnss_block_interface.h) is the common interface for all the GNSS-SDR modules. It defines pure virtual methods, that are required to be implemented by a derived class.
-Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one, and makes them interchangeable. Hence, we let the algorithm vary independently from the program that uses it.
+Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one, and makes them interchangeable. Hence, we let the algorithm vary independently of the program that uses it.
Internally, GNSS-SDR makes use of the complex data types defined by [VOLK](http://libvolk.org/ "Vector-Optimized Library of Kernels home"). They are fundamental for handling sample streams in which samples are complex numbers with real and imaginary components of 8, 16 or 32 bits, common formats delivered by GNSS (and generic SDR) radio frequency front-ends. The following list shows the data type names that GNSS-SDR exposes through the configuration file:
@@ -681,13 +803,13 @@ Internally, GNSS-SDR makes use of the complex data types defined by [VOLK](http:
- **`gr_complex`**: Complex samples, with real and imaginary parts of type `float`. C++ type name: `std::complex`.
-More information about the available processing blocks and their configuration parameters can be found at the [Signal Processing Blocks documentation page](http://gnss-sdr.org/docs/sp-blocks/).
+More information about the available processing blocks and their configuration parameters can be found at the [Signal Processing Blocks documentation page](https://gnss-sdr.org/docs/sp-blocks/).
### Signal Source
The input of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC). Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses.
-The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized implementation of the whole receiver, this module also allows to read samples from a file stored in a hard disk, and thus processing without time constraints. Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be specified by the user in the configuration file.
+The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized implementation of the whole receiver, this module also allows reading samples from a file stored in a hard disk, and thus processing without time constraints. Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be specified by the user in the configuration file.
This module also performs bit-depth adaptation, since most of the existing RF front-ends provide samples quantized with 2 or 3 bits, while operations inside the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational processes (mainly correlation) that take advantage of specific data types and architectures for the sake of efficiency, the approach is processor-specific and hardly portable. We suggest to keep signal samples in standard data types and letting the compiler select the best library version (implemented using SIMD or any other processor-specific technology) of the required routines for a given processor.
@@ -700,14 +822,13 @@ The user can configure the receiver for reading from a file, setting in the conf
SignalSource.implementation=File_Signal_Source
SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat
SignalSource.item_type=gr_complex
-SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz]
-SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
+SignalSource.sampling_frequency=4000000 ; Sampling frequency in samples per second (Sps)
~~~~~~
-Type ```gr_complex``` refers to a GNU Radio typedef equivalent to ```std::complex```. In order to save some storage space, you might wanted to store your signal in a more efficient format such as an I/Q interleaved ```short`` integer sample stream. In that case, change the corresponding line to:
+Type ```gr_complex``` refers to a GNU Radio typedef equivalent to ```std::complex```. In order to save some storage space, you might want to store your signal in a more efficient format such as an I/Q interleaved ```short`` integer sample stream. In that case, change the corresponding line to:
~~~~~~
-SignalSource.item_type=short
+SignalSource.item_type=ishort
~~~~~~
In this latter case, you will need to convert the interleaved I/Q samples to a complex stream via Data Type Adapter block (see below).
@@ -728,7 +849,7 @@ Sometimes, samples are stored in files with a format which is not in the list of
Within a byte the samples may be packed in big endian ```big_endian_bytes=true``` (if the most significant byte value is stored at the memory location with the lowest address, the next byte value in significance is stored at the following memory location, and so on) or little endian ```big_endian_bytes=false``` (if the least significant byte value is at the lowest address, and the other bytes follow in increasing order of significance). If the order is big endian then the most significant two bits will form the first sample output, otherwise the least significant two bits will be used.
-Additionally the samples may be either real ```sample_type=real```, or complex. If the sample type is complex, then the samples are either stored in the order: real, imag, real, imag, ... ```sample_type=iq``` or in the order: imag, real, imag, real, ... ```sample_type=qi```.
+Additionally, the samples may be either real ```sample_type=real```, or complex. If the sample type is complex, then the samples are either stored in the order: real, imag, real, imag, ... ```sample_type=iq``` or in the order: imag, real, imag, real, ... ```sample_type=qi```.
Finally, if the data is stored as shorts ```item_type=short```, then it may be stored in either big endian ```big_endian_items=true``` or little endian ```big_endian_items=false```. If the shorts are big endian then the 2nd byte in each short is output first.
@@ -757,7 +878,7 @@ SignalSource.big_endian_bytes=false
***Example: UHD Signal Source***
-The user may prefer to use a [UHD](http://code.ettus.com/redmine/ettus/projects/uhd/wiki)-compatible RF front-end and try real-time processing. For instance, for a USRP1 + DBSRX daughterboard, use:
+The user may prefer to use a [UHD](https://files.ettus.com/manual/)-compatible RF front-end and try real-time processing. For instance, for a USRP1 + DBSRX daughterboard, use:
~~~~~~
;######### SIGNAL_SOURCE CONFIG ############
@@ -770,7 +891,7 @@ SignalSource.subdevice=B:0 ; UHD subdevice specification (for USRP1 use A:0 or B
~~~~~~
-***Example: Configuring the USRP X300 with two front-ends for receiving signals in L1 and L2 bands***
+***Example: Configuring the USRP X300/X310 with two front-ends for receiving signals in L1 and L2 bands***
~~~~~~
;######### SIGNAL_SOURCE CONFIG ############
@@ -796,7 +917,7 @@ SignalSource.dump1=false
***Example: OsmoSDR-compatible Signal Source***
-[OsmoSDR](http://sdr.osmocom.org/trac) is a small form-factor, inexpensive software defined radio project. It provides a driver for several front-ends, such as [RTL-based dongles](http://sdr.osmocom.org/trac/wiki/rtl-sdr), HackRF, bladeRF, etc. Note that not all the OsmoSDR-compatible devices can work as radio frequency front-ends for proper GNSS signal reception, please check the specifications. For suitable RF front-ends, you can use:
+[OsmoSDR](http://sdr.osmocom.org/trac) is a small form-factor, inexpensive software defined radio project. It provides a driver for several front-ends, such as [RTL-based dongles](https://www.rtl-sdr.com/tag/v3/), [HackRF](https://greatscottgadgets.com/hackrf/), [bladeRF](https://www.nuand.com/), [LimeSDR](https://myriadrf.org/projects/limesdr/), [etc](https://github.com/osmocom/gr-osmosdr/blob/master/README). Note that not all the OsmoSDR-compatible devices can work as radio frequency front-ends for proper GNSS signal reception, please check the specifications. For suitable RF front-ends, you can use:
~~~~~~
;######### SIGNAL_SOURCE CONFIG ############
@@ -807,9 +928,23 @@ SignalSource.freq=1575420000
SignalSource.rf_gain=40
SignalSource.if_gain=30
SignalSource.enable_throttle_control=false
-SignalSource.osmosdr_args=rtl_tcp,offset_tune=1
+SignalSource.osmosdr_args=hackrf,bias=1
~~~~~~
+For [RTL-SDR Blog V3](https://www.rtl-sdr.com/tag/v3/) dongles, the arguments are:
+
+~~~~~~
+SignalSource.osmosdr_args=rtl,bias=1
+~~~~~~
+
+
+and for [LimeSDR](https://myriadrf.org/projects/limesdr/):
+
+~~~~~~
+SignalSource.osmosdr_args=driver=lime,soapy=0
+~~~~~~
+
+
In case of using a Zarlink's RTL2832 based DVB-T receiver, you can even use the ```rtl_tcp``` I/Q server in order to use the USB dongle remotely. In a terminal, type:
~~~~~~
@@ -862,7 +997,7 @@ SignalSource.dump1=false
~~~~~~
-More documentation and examples are available at the [Signal Source Blocks page](http://gnss-sdr.org/docs/sp-blocks/signal-source/).
+More documentation and examples are available at the [Signal Source Blocks page](https://gnss-sdr.org/docs/sp-blocks/signal-source/).
### Signal Conditioner
@@ -876,14 +1011,14 @@ If your signal source is providing baseband signal samples of type ```gr_complex
SignalConditioner.implementation=Pass_Through
~~~~~~
-If you need to adapt some aspect of you signal, you can enable the Signal Conditioner and configure three internal blocks: a data type adpater, an input signal and a resampler.
+If you need to adapt some aspect of your signal, you can enable the Signal Conditioner and configure three internal blocks: a data type adapter, an input signal and a resampler.
~~~~~~
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
~~~~~~
-More documentation at the [Signal Conditioner Blocks page](http://gnss-sdr.org/docs/sp-blocks/signal-conditioner/).
+More documentation at the [Signal Conditioner Blocks page](https://gnss-sdr.org/docs/sp-blocks/signal-conditioner/).
#### Data type adapter
@@ -895,11 +1030,11 @@ This block changes the type of input data samples. If your signal source deliver
DataTypeAdapter.implementation=Ishort_To_Complex
~~~~~~
-More documentation at the [Data Type Adapter Blocks page](http://gnss-sdr.org/docs/sp-blocks/data-type-adapter/).
+More documentation at the [Data Type Adapter Blocks page](https://gnss-sdr.org/docs/sp-blocks/data-type-adapter/).
#### Input filter
-This block filters the input data. It can be combined with frequency translation for IF signals. The computation of the filter taps is based on parameters of GNU Radio's function [pm_remez](http://gnuradio.org/doc/doxygen/pm__remez_8h.html), that calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
+This block filters the input data. It can be combined with frequency translation for IF signals. The computation of the filter taps is based on parameters of GNU Radio's function [pm_remez](https://gnuradio.org/doc/doxygen/pm__remez_8h.html), that calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
The block can be configured like this:
@@ -950,11 +1085,11 @@ InputFilter.IF=0
InputFilter.decimation_factor=1
~~~~~~
-More documentation at the [Input Filter Blocks page](http://gnss-sdr.org/docs/sp-blocks/input-filter/).
+More documentation at the [Input Filter Blocks page](https://gnss-sdr.org/docs/sp-blocks/input-filter/).
#### Resampler
-This block resamples the input data stream. The ```Direct_Resampler``` block implements a nearest neigbourhood interpolation:
+This block resamples the input data stream. The ```Direct_Resampler``` block implements a nearest neighbourhood interpolation:
~~~~~~
;######### RESAMPLER CONFIG ############
@@ -968,20 +1103,24 @@ Resampler.sample_freq_in=8000000 ; sample frequency of the input signal
Resampler.sample_freq_out=4000000 ; desired sample frequency of the output signal
~~~~~~
-More documentation at the [Resampler Blocks page](http://gnss-sdr.org/docs/sp-blocks/resampler/).
+More documentation at the [Resampler Blocks page](https://gnss-sdr.org/docs/sp-blocks/resampler/).
### Channel
-A channel encapsulates all signal processing devoted to a single satellite. Thus, it is a large composite object which encapsulates the acquisition, tracking and navigation data decoding modules. As a composite object, it can be treated as a single entity, meaning that it can be easily replicated. Since the number of channels is selectable by the user in the configuration file, this approach helps improving the scalability and maintainability of the receiver.
+A channel encapsulates all signal processing devoted to a single satellite. Thus, it is a large composite object which encapsulates the acquisition, tracking and navigation data decoding modules. As a composite object, it can be treated as a single entity, meaning that it can be easily replicated. Since the number of channels is selectable by the user in the configuration file, this approach helps to improve the scalability and maintainability of the receiver.
Each channel must be assigned to a GNSS signal, according to the following identifiers:
| **Signal** | **Identifier** |
|:------------------|:---------------:|
| GPS L1 C/A | 1C |
+| Galileo E1b/c | 1B |
+| Glonass L1 C/A | 1G |
| GPS L2 L2C(M) | 2S |
-| Galileo E1B | 1B |
-| Galileo E5a (I+Q) | 5X |
+| Glonass L2 C/A | 2G |
+| GPS L5 | L5 |
+| Galileo E5a | 5X |
+
Example: Eight GPS L1 C/A channels.
@@ -1010,17 +1149,17 @@ Channel6.signal=1B ;
Channel7.signal=1B ;
~~~~~~
-This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on the prior information available (called cold start when the receiver has no information about its position nor the satellites almanac; warm start when a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to confirm the presence of the satellite, or declaring the satellite present. In the latter case, acquisition process should stop and trigger the tracking module with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as finite state machine (FSM), that is a behavior model composed of a finite number of states, transitions between those states, and actions. For the implementation, we use the [Boost.Statechart library](http://www.boost.org/libs/statechart/doc/tutorial.html), which provides desirable features such as support for asynchronous state machines, multi-threading, type-safety, error handling and compile-time validation.
+This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on the prior information available (called cold start when the receiver has no information about its position nor the satellites' almanac; warm start when a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to confirm the presence of the satellite, or declaring the satellite present. In the latter case, acquisition process should stop and trigger the tracking module with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as finite state machine (FSM), that is a behavior model composed of a finite number of states, transitions between those states, and actions.
The abstract class [ChannelInterface](./src/core/interfaces/channel_interface.h) represents an interface to a channel GNSS block. Check [Channel](./src/algorithms/channel/adapters/channel.h) for an actual implementation.
-More documentation at the [Channels page](http://gnss-sdr.org/docs/sp-blocks/channels/).
+More documentation at the [Channels page](https://gnss-sdr.org/docs/sp-blocks/channels/).
#### Acquisition
-The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift with respect to the nominal IF frequency, and a delay term which allows the receiver to create a local code aligned with the incoming code. [AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as *adapters*. These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks derived from ```gr::block```, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications. Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface.
+The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift with respect to the nominal frequency, and a delay term which allows the receiver to create a local code aligned with the incoming code. [AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as *adapters*. These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks derived from ```gr::block```, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications. Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface.
Check [GpsL1CaPcpsAcquisition](./src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.h) and [GalileoE1PcpsAmbiguousAcquisition](./src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.h) for examples of adapters from a Parallel Code Phase Search (PCPS) acquisition block, and [pcps_acquisition_cc](./src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.h) for an example of a block implementation. The source code of all the available acquisition algorithms is located at:
@@ -1033,14 +1172,13 @@ Check [GpsL1CaPcpsAcquisition](./src/algorithms/acquisition/adapters/gps_l1_ca_p
|---------gnuradio_blocks <- Signal processing blocks implementation
~~~~~~
-The user can select a given implementation for the algorithm to be used in each receiver channel, as well as their parameters, in the configuration file. For a GPS l1 C/A receiver:
+The user can select a given implementation for the algorithm to be used in each receiver channel, as well as their parameters, in the configuration file. For a GPS L1 C/A receiver:
~~~~~~
;######### ACQUISITION GLOBAL CONFIG ############
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ; Acquisition algorithm selection for this channel
Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0 ; Signal intermediate frequency in [Hz]
-Acquisition_1C.sampled_ms=1 ; Signal block duration for the acquisition signal detection [ms]
+Acquisition_1C.coherent_integration_time_ms=1 ; Signal block duration for the acquisition signal detection [ms]
Acquisition_1C.threshold=0.005 ; Acquisition threshold
Acquisition_1C.pfa=0.0001 ; Acquisition false alarm probability. This option overrides the threshold option.
; Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
@@ -1056,8 +1194,7 @@ and, for Galileo E1B channels:
;######### GALILEO ACQUISITION CONFIG ############
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
Acquisition_1B.item_type=gr_complex
-Acquisition_1B.if=0
-Acquisition_1B.sampled_ms=4
+Acquisition_1B.coherent_integration_time_ms=4
Acquisition_1B.pfa=0.0000008
Acquisition_1B.doppler_max=15000
Acquisition_1B.doppler_step=125
@@ -1065,7 +1202,7 @@ Acquisition_1B.dump=false
Acquisition_1B.dump_filename=./acq_dump.dat
~~~~~~
-More documentation at the [Acquisition Blocks page](http://gnss-sdr.org/docs/sp-blocks/acquisition/).
+More documentation at the [Acquisition Blocks page](https://gnss-sdr.org/docs/sp-blocks/acquisition/).
#### Tracking
@@ -1115,12 +1252,12 @@ Tracking_1B.dump=false
Tracking_1B.dump_filename=../data/veml_tracking_ch_
~~~~~~
-More documentation at the [Tracking Blocks page](http://gnss-sdr.org/docs/sp-blocks/tracking/).
+More documentation at the [Tracking Blocks page](https://gnss-sdr.org/docs/sp-blocks/tracking/).
#### Decoding of the navigation message
-Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites (also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for error control an others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and interleaving, depending on the system. All this decoding complexity is managed by a finite state machine implemented with the [Boost.Statechart library](http://www.boost.org/libs/statechart/doc/tutorial.html).
+Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites (also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for error control and others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and interleaving, depending on the system. All this decoding complexity is managed by a finite state machine.
The common interface is [TelemetryDecoderInterface](./src/core/interfaces/telemetry_decoder_interface.h). Check [GpsL1CaTelemetryDecoder](./src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.h) for an example of the GPS L1 NAV message decoding adapter, and [gps_l1_ca_telemetry_decoder_cc](./src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h) for an actual implementation of a signal processing block. Configuration example:
@@ -1137,15 +1274,13 @@ In case you are configuring a multi-system receiver, you will need to decimate t
;######### TELEMETRY DECODER GPS L1 CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=4;
;######### TELEMETRY DECODER GALILEO E1B CONFIG ############
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=1;
~~~~~~
-More documentation at the [Telemetry Decoder Blocks page](http://gnss-sdr.org/docs/sp-blocks/telemetry-decoder/).
+More documentation at the [Telemetry Decoder Blocks page](https://gnss-sdr.org/docs/sp-blocks/telemetry-decoder/).
#### Observables
@@ -1154,25 +1289,7 @@ GNSS systems provide different kinds of observations. The most commonly used are
The common interface is [ObservablesInterface](./src/core/interfaces/observables_interface.h).
-Configuration example for GPS L1 C/A signals:
-
-~~~~~~
-;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
-Observables.dump=false
-Observables.dump_filename=./observables.dat
-~~~~~~
-
-For Galileo E1B receivers:
-
-~~~~~~
-;######### OBSERVABLES CONFIG ############
-Observables.implementation=Galileo_E1B_Observables
-Observables.dump=false
-Observables.dump_filename=./observables.dat
-~~~~~~
-
-For hybrid GPS L1 / Galileo E1B receivers:
+Configuration example:
~~~~~~
;######### OBSERVABLES CONFIG ############
@@ -1181,80 +1298,55 @@ Observables.dump=false
Observables.dump_filename=./observables.dat
~~~~~~
-More documentation at the [Observables Blocks page](http://gnss-sdr.org/docs/sp-blocks/observables/).
+More documentation at the [Observables Blocks page](https://gnss-sdr.org/docs/sp-blocks/observables/).
#### Computation of Position, Velocity and Time
-Although data processing for obtaining high-accuracy PVT solutions is out of the scope of GNSS-SDR, we provide a module that can compute simple least square solutions (stored in GIS-friendly formats such as [GeoJSON](http://geojson.org/geojson-spec.html) and [KML](http://www.opengeospatial.org/standards/kml), or transmitted via serial port as [NMEA 0183](https://en.wikipedia.org/wiki/NMEA_0183) messages), and leaves room for more sophisticated positioning methods by storing observables and navigation data in [RINEX](https://en.wikipedia.org/wiki/RINEX) files (v2.11 or v3.02), and generating [RTCM](http://www.rtcm.org "Radio Technical Commission for Maritime Services") 3.2 messages that can be disseminated through the Internet in real time.
+Although data processing for obtaining high-accuracy PVT solutions is out of the scope of GNSS-SDR, we provide a module that can compute position fixes (stored in GIS-friendly formats such as [GeoJSON](https://tools.ietf.org/html/rfc7946), [GPX](http://www.topografix.com/gpx.asp) and [KML](http://www.opengeospatial.org/standards/kml), or transmitted via serial port as [NMEA 0183](https://en.wikipedia.org/wiki/NMEA_0183) messages), and leaves room for more sophisticated positioning methods by storing observables and navigation data in [RINEX](https://en.wikipedia.org/wiki/RINEX) files (v2.11 or v3.02), and generating [RTCM](http://www.rtcm.org "Radio Technical Commission for Maritime Services") 3.2 messages that can be disseminated through the Internet in real time.
The common interface is [PvtInterface](./src/core/interfaces/pvt_interface.h).
-Configuration example for GPS L1 C/A signals:
+Configuration example:
~~~~~~
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=10 ; Number of PVT observations in the moving average algorithm
-PVT.flag_averaging=true ; Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs
-PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms].
-PVT.dump=false ; Enables the PVT internal binary data file logging [true] or [false]
-PVT.dump_filename=./PVT ; Log path and filename without extension of GeoJSON and KML files
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen
+PVT.rinex_version=2 ; options: 2 or 3
+PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs
+PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms].
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea ; NMEA log path and filename
-PVT.flag_nmea_tty_port=true ; Enables the NMEA log to a serial TTY port
+PVT.flag_nmea_tty_port=false ; Enables the NMEA log to a serial TTY port
PVT.nmea_dump_devname=/dev/pts/4 ; serial device descriptor for NMEA logging
-PVT.flag_rtcm_server=false ; Enables or disables a TCP/IP server dispatching RTCM messages
-PVT.flag_rtcm_tty_port=true ; Enables the RTCM log to a serial TTY port
+PVT.flag_rtcm_server=true ; Enables or disables a TCP/IP server dispatching RTCM messages
+PVT.flag_rtcm_tty_port=false ; Enables the RTCM log to a serial TTY port
PVT.rtcm_dump_devname=/dev/pts/1 ; serial device descriptor for RTCM logging
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
~~~~~~
-For Galileo E1B receivers:
-
-~~~~~~
-;######### PVT CONFIG ############
-PVT.implementation=GALILEO_E1_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
-PVT.output_rate_ms=100;
-PVT.display_rate_ms=500;
-PVT.dump=false
-PVT.dump_filename=./PVT
-PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea ; NMEA log path and filename
-PVT.flag_nmea_tty_port=true ; Enables the NMEA log to a serial TTY port
-PVT.nmea_dump_devname=/dev/pts/4 ; serial device descriptor for NMEA logging
-PVT.flag_rtcm_server=false ; Enables or disables a TCP/IP server dispatching RTCM messages
-PVT.flag_rtcm_tty_port=true ; Enables the RTCM log to a serial TTY port
-PVT.rtcm_dump_devname=/dev/pts/1 ; serial device descriptor for RTCM logging
-~~~~~~
-
-
-For hybrid GPS L1 / Galileo E1B receivers:
-
-~~~~~~
-;######### PVT CONFIG ############
-PVT.implementation=Hybrid_PVT
-PVT.averaging_depth=10
-PVT.flag_averaging=false
-PVT.output_rate_ms=100;
-PVT.display_rate_ms=500;
-PVT.dump=false
-PVT.dump_filename=./PVT
-~~~~~~
**Notes on the output formats:**
- * **GeoJSON** is a geospatial data interchange format based on JavaScript Object Notation (JSON) supported by numerous mapping and GIS software packages, including [OpenLayers](http://openlayers.org), [Leaflet](http://leafletjs.com), [MapServer](http://www.mapserver.org), [GeoServer](http://geoserver.org), [GeoDjango](https://www.djangoproject.com), [GDAL](http://www.gdal.org), and [CartoDB](https://cartodb.com). It is also possible to use GeoJSON with [PostGIS](http://postgis.net) and [Mapnik](http://mapnik.org), both of which handle the format via the GDAL OGR conversion library. The [Google Maps Javascript API](https://developers.google.com/maps/documentation/javascript/) v3 directly supports the [integration of GeoJSON data layers](https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple), and [GitHub also supports GeoJSON rendering](https://github.com/blog/1528-there-s-a-map-for-that).
+ * **GeoJSON** is a geospatial data interchange format based on JavaScript Object Notation (JSON) supported by numerous mapping and GIS software packages, including [OpenLayers](https://openlayers.org), [Leaflet](https://leafletjs.com), [MapServer](http://www.mapserver.org), [GeoServer](http://geoserver.org), [GeoDjango](https://www.djangoproject.com), [GDAL](http://www.gdal.org), and [CartoDB](https://cartodb.com). It is also possible to use GeoJSON with [PostGIS](https://postgis.net/) and [Mapnik](http://mapnik.org), both of which handle the format via the GDAL OGR conversion library. The [Google Maps Javascript API](https://developers.google.com/maps/documentation/javascript/) v3 directly supports the [integration of GeoJSON data layers](https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple), and [GitHub also supports GeoJSON rendering](https://github.com/blog/1528-there-s-a-map-for-that).
- * **KML** (Keyhole Markup Language) is an XML grammar used to encode and transport representations of geographic data for display in an earth browser. KML is an open standard officially named the OpenGIS KML Encoding Standard (OGC KML), and it is maintained by the Open Geospatial Consortium, Inc. (OGC). KML files can be displayed in geobrowsers such as [Google Earth](https://www.google.com/earth/), [Marble](https://marble.kde.org), [osgEarth](http://osgearth.org), or used with the [NASA World Wind SDK for Java](http://worldwind.arc.nasa.gov/java/).
+ * **KML** (Keyhole Markup Language) is an XML grammar used to encode and transport representations of geographic data for display in an earth browser. KML is an open standard officially named the OpenGIS KML Encoding Standard (OGC KML), and it is maintained by the Open Geospatial Consortium, Inc. (OGC). KML files can be displayed in geobrowsers such as [Google Earth](https://www.google.com/earth/), [Marble](https://marble.kde.org), [osgEarth](http://osgearth.org), or used with the [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/).
- * **NMEA 0183** is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other types of instruments. It has been defined by, and is controlled by, the U.S. [National Marine Electronics Association](http://www.nmea.org/). The NMEA 0183 standard uses a simple ASCII, serial communications protocol that defines how data are transmitted in a *sentence* from one *talker* to multiple *listeners* at a time. Through the use of intermediate expanders, a talker can have a unidirectional conversation with a nearly unlimited number of listeners, and using multiplexers, multiple sensors can talk to a single computer port. At the application layer, the standard also defines the contents of each sentence (message) type, so that all listeners can parse messages accurately. Those messages can be sent through the serial port (that could be for instance a Bluetooth link) and be used/displayed by a number of software applications such as [gpsd](http://www.catb.org/gpsd/ "The UNIX GPS daemon"), [JOSM](https://josm.openstreetmap.de/ "The Java OpenStreetMap Editor"), [OpenCPN](http://opencpn.org/ocpn/ "Open Chart Plotter Navigator"), and many others (and maybe running on other devices).
+ * **GPX** (the GPS Exchange Format) is a light-weight XML data format for the interchange of GPS data (waypoints, routes, and tracks) between applications and Web services on the Internet. The format is open and can be used without the need to pay license fees, and it is supported by a [large list of software tools](http://www.topografix.com/gpx_resources.asp).
- * **RINEX** (Receiver Independent Exchange Format) is an interchange format for raw satellite navigation system data, covering observables and the information contained in the navigation message broadcast by GNSS satellites. This allows the user to post-process the received data to produce a more accurate result (usually with other data unknown to the original receiver, such as better models of the atmospheric conditions at time of measurement). RINEX files can be used by software packages such as [GPSTk](http://www.gpstk.org), [RTKLIB](http://www.rtklib.com/) and [gLAB](http://gage14.upc.es/gLAB/). GNSS-SDR by default generates RINEX version [3.02](https://igscb.jpl.nasa.gov/igscb/data/format/rinex302.pdf). If [2.11](https://igscb.jpl.nasa.gov/igscb/data/format/rinex211.txt) is needed, it can be requested through a commandline flag when invoking the software receiver:
+ * **NMEA 0183** is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other types of instruments. It has been defined by, and is controlled by, the U.S. [National Marine Electronics Association](http://www.nmea.org/). The NMEA 0183 standard uses a simple ASCII, serial communications protocol that defines how data are transmitted in a *sentence* from one *talker* to multiple *listeners* at a time. Through the use of intermediate expanders, a talker can have a unidirectional conversation with a nearly unlimited number of listeners, and using multiplexers, multiple sensors can talk to a single computer port. At the application layer, the standard also defines the contents of each sentence (message) type, so that all listeners can parse messages accurately. Those messages can be sent through the serial port (that could be for instance a Bluetooth link) and be used/displayed by a number of software applications such as [gpsd](http://www.catb.org/gpsd/ "The UNIX GPS daemon"), [JOSM](https://josm.openstreetmap.de/ "The Java OpenStreetMap Editor"), [OpenCPN](https://opencpn.org/ "Open Chart Plotter Navigator"), and many others (and maybe running on other devices).
+
+ * **RINEX** (Receiver Independent Exchange Format) is an interchange format for raw satellite navigation system data, covering observables and the information contained in the navigation message broadcast by GNSS satellites. This allows the user to post-process the received data to produce a more accurate result (usually with other data unknown to the original receiver, such as better models of the atmospheric conditions at time of measurement). RINEX files can be used by software packages such as [GPSTk](http://www.gpstk.org), [RTKLIB](http://www.rtklib.com/) and [gLAB](http://gage14.upc.es/gLAB/). GNSS-SDR by default generates RINEX version [3.02](https://igscb.jpl.nasa.gov/igscb/data/format/rinex302.pdf). If [2.11](https://igscb.jpl.nasa.gov/igscb/data/format/rinex211.txt) is needed, it can be requested through the `rinex_version` parameter in the configuration file:
~~~~~~
-$ gnss-sdr --RINEX_version=2
+PVT.rinex_version=2
~~~~~~
-* **RTCM SC-104** provides standards that define the data structure for differential GNSS correction information for a variety of differential correction applications. Developed by the Radio Technical Commission for Maritime Services ([RTCM](http://www.rtcm.org/overview.php#Standards "Radio Technical Commission for Maritime Services")), they have become an industry standard for communication of correction information. GNSS-SDR implements RTCM version 3.2, defined in the document *RTCM 10403.2, Differential GNSS (Global Navigation Satellite Systems) Services - Version 3* (February 1, 2013), which can be [purchased online](https://ssl29.pair.com/dmarkle/puborder.php?show=3 "RTCM Online Publication Order Form"). By default, the generated RTCM binary messages are dumped into a text file in hexadecimal format. However, GNSS-SDR is equipped with a TCP/IP server, acting as an NTRIP source that can feed an NTRIP server. NTRIP (Networked Transport of RTCM via Internet Protocol) is an open standard protocol that can be freely download from [BKG](http://igs.bkg.bund.de/root_ftp/NTRIP/documentation/NtripDocumentation.pdf "Networked Transport of RTCM via Internet Protocol (Ntrip) Version 1.0"), and it is designed for disseminating differential correction data (*e.g.* in the RTCM-104 format) or other kinds of GNSS streaming data to stationary or mobile users over the Internet. The TCP/IP server can be enabled by setting ```PVT.flag_rtcm_server=true``` in the configuration file, and will be active during the execution of the software receiver. By default, the server will operate on port 2101 (which is the recommended port for RTCM services according to the Internet Assigned Numbers Authority, [IANA](http://www.iana.org/assignments/service-names-port-numbers "Service Name and Transport Protocol Port Number Registry")), and will identify the Reference Station with ID=1234. This behaviour can be changed in the configuration file:
+* **RTCM SC-104** provides standards that define the data structure for differential GNSS correction information for a variety of differential correction applications. Developed by the Radio Technical Commission for Maritime Services ([RTCM](http://www.rtcm.org/differential-global-navigation-satellite--dgnss--standards.html "Radio Technical Commission for Maritime Services")), they have become an industry standard for communication of correction information. GNSS-SDR implements RTCM version 3.2, defined in the document *RTCM 10403.2, Differential GNSS (Global Navigation Satellite Systems) Services - Version 3* (February 1, 2013), which can be [purchased online](https://ssl29.pair.com/dmarkle/puborder.php?show=3 "RTCM Online Publication Order Form"). By default, the generated RTCM binary messages are dumped into a text file in hexadecimal format. However, GNSS-SDR is equipped with a TCP/IP server, acting as an NTRIP source that can feed an NTRIP server. NTRIP (Networked Transport of RTCM via Internet Protocol) is an open standard protocol that can be freely downloaded from [BKG](https://igs.bkg.bund.de/root_ftp/NTRIP/documentation/NtripDocumentation.pdf "Networked Transport of RTCM via Internet Protocol (Ntrip) Version 1.0"), and it is designed for disseminating differential correction data (*e.g.* in the RTCM-104 format) or other kinds of GNSS streaming data to stationary or mobile users over the Internet. The TCP/IP server can be enabled by setting ```PVT.flag_rtcm_server=true``` in the configuration file, and will be active during the execution of the software receiver. By default, the server will operate on port 2101 (which is the recommended port for RTCM services according to the Internet Assigned Numbers Authority, [IANA](https://www.iana.org/assignments/service-names-port-numbers/ "Service Name and Transport Protocol Port Number Registry")), and will identify the Reference Station with ID=1234. This behaviour can be changed in the configuration file:
~~~~~~
PVT.flag_rtcm_server=true
PVT.rtcm_tcp_port=2102
@@ -1265,13 +1357,13 @@ PVT.rtcm_station_id=1111
In order to get well-formatted GeoJSON, KML and RINEX files, always terminate ```gnss-sdr``` execution by pressing key ```q``` and then key ```ENTER```. Those files will be automatically deleted if no position fix have been obtained during the execution of the software receiver.
-More documentation at the [PVT Blocks page](http://gnss-sdr.org/docs/sp-blocks/pvt/).
+More documentation at the [PVT Blocks page](https://gnss-sdr.org/docs/sp-blocks/pvt/).
About the software license
==========================
-GNSS-SDR is released under the [General Public License (GPL) v3](http://www.gnu.org/licenses/gpl.html), thus securing practical usability, inspection, and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals. The GPL implies that:
+GNSS-SDR is released under the [General Public License (GPL) v3](https://www.gnu.org/licenses/gpl.html), thus securing practical usability, inspection, and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals. The GPL implies that:
1. Copies may be distributed free of charge or for money, but the source code has to be shipped or provided free of charge (or at cost price) on demand. The receiver of the source code has the same rights meaning he can share copies free of charge or resell.
2. The licensed material may be analyzed or modified.
@@ -1288,7 +1380,7 @@ Publications and Credits
If you use GNSS-SDR to produce a research paper or Thesis, we would appreciate if you reference the following article to credit the GNSS-SDR project:
- * C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, [GNSS-SDR: an open source tool for researchers and developers](http://www.cttc.es/publication/gnss-sdr-an-open-source-tool-for-researchers-and-developers/), in Proc. of the ION GNSS 2011 Conference, Portland, Oregon, Sept. 19-23, 2011.
+ * C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, [GNSS-SDR: an open source tool for researchers and developers](http://www.cttc.es/publication/gnss-sdr-an-open-source-tool-for-researchers-and-developers/), in Proceedings of the 24th International Technical Meeting of The Satellite Division of the Institute of Navigation (ION GNSS), Portland, Oregon, Sept. 19-23, 2011, pp. 780-794.
For LaTeX users, this is the BibTeX entry for your convenience:
@@ -1296,27 +1388,28 @@ For LaTeX users, this is the BibTeX entry for your convenience:
@INPROCEEDINGS{GNSS-SDR11,
AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve},
TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers},
- BOOKTITLE = {Proc. of the ION GNSS 2011 Conference},
+ BOOKTITLE = {Proc. 24th Intl. Tech. Meeting Sat. Div. Inst. Navig.},
YEAR = {2011},
- address = {Portland, Oregon},
- month = {Sept.} }
+ PAGES = {780--794},
+ ADDRESS = {Portland, Oregon},
+ MONTH = {Sept.} }
~~~~~~
-There is a list of papers related to GNSS-SDR in our [publications page](http://gnss-sdr.org/publications/ "Publications").
+There is a list of papers related to GNSS-SDR in our [publications page](https://gnss-sdr.org/publications/ "Publications").
Ok, now what?
=============
-In order to start using GNSS-SDR, you may want to populate ```gnss-sdr/data``` folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output of a Radio Frequency front-end's Analog-to-Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intemediate frequency (on the order of MHz). Prepare your configuration file, and then you are ready for running ```gnss-sdr --config_file=your_configuration.conf```, and seeing how the file is processed.
+In order to start using GNSS-SDR, you may want to populate ```gnss-sdr/data``` folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output of a Radio Frequency front-end's Analog-to-Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intermediate frequency (on the order of MHz). Prepare your configuration file, and then you are ready for running ```gnss-sdr --config_file=your_configuration.conf```, and seeing how the file is processed.
-Another interesting option is working in real-time with a RF front-end. We provide drivers for UHD-compatible hardware such as the [USRP family](http://www.ettus.com/product), for OsmoSDR and other front-ends (HackRF, bladeRF), for the GN3S v2 USB dongle and for some DVB-T USB dongles. Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time.
+Another interesting option is working in real-time with an RF front-end. We provide drivers for UHD-compatible hardware such as the [USRP family](https://www.ettus.com/product), for OsmoSDR and other front-ends (HackRF, bladeRF, LimeSDR), for the GN3S v2 USB dongle and for some DVB-T USB dongles. Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time.
-You can find more information at the [GNSS-SDR Documentation page](http://gnss-sdr.org/docs/) or directly asking to the [GNSS-SDR Developers mailing list](http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers).
+You can find more information at the [GNSS-SDR Documentation page](https://gnss-sdr.org/docs/) or directly asking to the [GNSS-SDR Developers mailing list](https://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers).
-You are also very welcome to contribute to the project, there are many ways to [participate in GNSS-SDR](http://gnss-sdr.org/contribute/). If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it. Please do not hesitate to [contact them](http://gnss-sdr.org/team/).
+You are also very welcome to contribute to the project, there are many ways to [participate in GNSS-SDR](https://gnss-sdr.org/contribute/). If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it. Please do not hesitate to [contact them](https://gnss-sdr.org/team/).
**Enjoy GNSS-SDR!**
diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
deleted file mode 100644
index 7ce4c49ae..000000000
--- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
+++ /dev/null
@@ -1,138 +0,0 @@
-# CMAKE_PARSE_ARGUMENTS( args...)
-#
-# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for
-# parsing the arguments given to that macro or function.
-# It processes the arguments and defines a set of variables which hold the
-# values of the respective options.
-#
-# The argument contains all options for the respective macro,
-# i.e. keywords which can be used when calling the macro without any value
-# following, like e.g. the OPTIONAL keyword of the install() command.
-#
-# The argument contains all keywords for this macro
-# which are followed by one value, like e.g. DESTINATION keyword of the
-# install() command.
-#
-# The argument contains all keywords for this macro
-# which can be followed by more than one value, like e.g. the TARGETS or
-# FILES keywords of the install() command.
-#
-# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
-# keywords listed in , and
-# a variable composed of the given
-# followed by "_" and the name of the respective keyword.
-# These variables will then hold the respective value from the argument list.
-# For the keywords this will be TRUE or FALSE.
-#
-# All remaining arguments are collected in a variable
-# _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether
-# your macro was called with unrecognized parameters.
-#
-# As an example here a my_install() macro, which takes similar arguments as the
-# real install() command:
-#
-# function(MY_INSTALL)
-# set(options OPTIONAL FAST)
-# set(oneValueArgs DESTINATION RENAME)
-# set(multiValueArgs TARGETS CONFIGURATIONS)
-# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-# ...
-#
-# Assume my_install() has been called like this:
-# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
-#
-# After the cmake_parse_arguments() call the macro will have set the following
-# variables:
-# MY_INSTALL_OPTIONAL = TRUE
-# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install()
-# MY_INSTALL_DESTINATION = "bin"
-# MY_INSTALL_RENAME = "" (was not used)
-# MY_INSTALL_TARGETS = "foo;bar"
-# MY_INSTALL_CONFIGURATIONS = "" (was not used)
-# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL"
-#
-# You can the continue and process these variables.
-#
-# Keywords terminate lists of values, e.g. if directly after a one_value_keyword
-# another recognized keyword follows, this is interpreted as the beginning of
-# the new option.
-# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
-# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
-# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-
-#=============================================================================
-# Copyright 2010 Alexander Neundorf
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
-
-if(__CMAKE_PARSE_ARGUMENTS_INCLUDED)
- return()
-endif()
-set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
-
-
-function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
- # first set all result variables to empty/FALSE
- foreach(arg_name ${_singleArgNames} ${_multiArgNames})
- set(${prefix}_${arg_name})
- endforeach(arg_name)
-
- foreach(option ${_optionNames})
- set(${prefix}_${option} FALSE)
- endforeach(option)
-
- set(${prefix}_UNPARSED_ARGUMENTS)
-
- set(insideValues FALSE)
- set(currentArgName)
-
- # now iterate over all arguments and fill the result variables
- foreach(currentArg ${ARGN})
- list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
- list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
- list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
-
- if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
- if(insideValues)
- if("${insideValues}" STREQUAL "SINGLE")
- set(${prefix}_${currentArgName} ${currentArg})
- set(insideValues FALSE)
- elseif("${insideValues}" STREQUAL "MULTI")
- list(APPEND ${prefix}_${currentArgName} ${currentArg})
- endif()
- else(insideValues)
- list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
- endif(insideValues)
- else()
- if(NOT ${optionIndex} EQUAL -1)
- set(${prefix}_${currentArg} TRUE)
- set(insideValues FALSE)
- elseif(NOT ${singleArgIndex} EQUAL -1)
- set(currentArgName ${currentArg})
- set(${prefix}_${currentArgName})
- set(insideValues "SINGLE")
- elseif(NOT ${multiArgIndex} EQUAL -1)
- set(currentArgName ${currentArg})
- set(${prefix}_${currentArgName})
- set(insideValues "MULTI")
- endif()
- endif()
-
- endforeach(currentArg)
-
- # propagate the result variables to the caller:
- foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames})
- set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
- endforeach(arg_name)
- set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE)
-
-endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs)
diff --git a/cmake/Modules/FindGFORTRAN.cmake b/cmake/Modules/FindGFORTRAN.cmake
new file mode 100644
index 000000000..f19ccd77a
--- /dev/null
+++ b/cmake/Modules/FindGFORTRAN.cmake
@@ -0,0 +1,150 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+find_library(GFORTRAN NAMES gfortran
+ PATHS /usr/lib
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib/i386
+ /usr/lib/gcc/x86_64-linux-gnu
+ /usr/lib/gcc/i686-linux-gnu
+ /usr/lib/gcc/i386-linux-gnu
+ /usr/lib/gcc/x86_64-linux-gnu/4.6 # Ubuntu 12.04
+ /usr/lib/gcc/i686-linux-gnu/4.6
+ /usr/lib/gcc/x86_64-linux-gnu/4.7
+ /usr/lib/gcc/i686-linux-gnu/4.7
+ /usr/lib/gcc/x86_64-linux-gnu/4.8
+ /usr/lib/gcc/i686-linux-gnu/4.8
+ /usr/lib/gcc/x86_64-linux-gnu/4.9
+ /usr/lib/gcc/i686-linux-gnu/4.9
+ /usr/lib/gcc/x86_64-redhat-linux/4.7.2 # Fedora 18
+ /usr/lib/gcc/i686-redhat-linux/4.7.2
+ /usr/lib/gcc/x86_64-redhat-linux/4.8.1 # Fedora 19
+ /usr/lib/gcc/x86_64-redhat-linux/4.8.3 # Fedora 20
+ /usr/lib/gcc/x86_64-redhat-linux/4.9.1 # Fedora 21
+ /usr/lib/gcc/i686-redhat-linux/4.8.1
+ /usr/lib/gcc/i686-redhat-linux/4.8.3
+ /usr/lib/gcc/i686-redhat-linux/4.9.1
+ /usr/lib/gcc/x86_64-redhat-linux/4.4.4 # CentOS 6
+ /usr/lib/gcc/i686-redhat-linux/4.4.4
+ /usr/lib/gcc/x86_64-redhat-linux/4.8.2
+ /usr/lib/gcc/i686-redhat-linux/4.8.2
+ /usr/lib/gcc/x86_64-redhat-linux/7
+ /usr/lib/gcc/i686-redhat-linux/7
+ /usr/lib/gcc/armv7hl-redhat-linux-gnueabi/7
+ /usr/lib/gcc/aarch64-redhat-linux/7
+ /usr/lib/gcc/i586-suse-linux/4.8 # OpenSUSE 13.1
+ /usr/lib/gcc/i586-suse-linux/4.9
+ /usr/lib/gcc/x86_64-suse-linux/4.8
+ /usr/lib/gcc/x86_64-suse-linux/4.9
+ /usr/lib/gcc/i486-linux-gnu # Debian 7
+ /usr/lib/gcc/i486-linux-gnu/4.4
+ /usr/lib/gcc/i486-linux-gnu/4.6
+ /usr/lib/gcc/i486-linux-gnu/4.7
+ /usr/lib/gcc/i486-linux-gnu/4.8
+ /usr/lib/gcc/i486-linux-gnu/4.9
+ /usr/lib/gcc/i586-linux-gnu/4.9
+ /usr/lib/gcc/arm-linux-gnueabihf/4.4 # Debian armhf
+ /usr/lib/gcc/arm-linux-gnueabihf/4.5
+ /usr/lib/gcc/arm-linux-gnueabihf/4.6
+ /usr/lib/gcc/arm-linux-gnueabihf/4.7
+ /usr/lib/gcc/arm-linux-gnueabihf/4.8
+ /usr/lib/gcc/arm-linux-gnueabihf/4.9
+ /usr/lib/gcc/aarch64-linux-gnu/4.9 # Debian arm64
+ /usr/lib/gcc/arm-linux-gnueabi/4.7 # Debian armel
+ /usr/lib/gcc/arm-linux-gnueabi/4.9
+ /usr/lib/gcc/x86_64-linux-gnu/5
+ /usr/lib/gcc/i686-linux-gnu/5
+ /usr/lib/gcc/arm-linux-gnueabi/5
+ /usr/lib/gcc/arm-linux-gnueabihf/5
+ /usr/lib/gcc/aarch64-linux-gnu/5
+ /usr/lib/gcc/x86_64-linux-gnu/6 # Ubuntu 16.10
+ /usr/lib/gcc/alpha-linux-gnu/6
+ /usr/lib/gcc/aarch64-linux-gnu/6
+ /usr/lib/gcc/arm-linux-gnueabi/6
+ /usr/lib/gcc/arm-linux-gnueabihf/6
+ /usr/lib/gcc/hppa-linux-gnu/6
+ /usr/lib/gcc/i686-gnu/6
+ /usr/lib/gcc/i686-linux-gnu/6
+ /usr/lib/gcc/x86_64-kfreebsd-gnu/6
+ /usr/lib/gcc/i686-kfreebsd-gnu/6
+ /usr/lib/gcc/m68k-linux-gnu/6
+ /usr/lib/gcc/mips-linux-gnu/6
+ /usr/lib/gcc/mips64el-linux-gnuabi64/6
+ /usr/lib/gcc/mipsel-linux-gnu/6
+ /usr/lib/gcc/powerpc-linux-gnu/6
+ /usr/lib/gcc/powerpc-linux-gnuspe/6
+ /usr/lib/gcc/powerpc64-linux-gnu/6
+ /usr/lib/gcc/powerpc64le-linux-gnu/6
+ /usr/lib/gcc/s390x-linux-gnu/6
+ /usr/lib/gcc/sparc64-linux-gnu/6
+ /usr/lib/gcc/x86_64-linux-gnux32/6
+ /usr/lib/gcc/sh4-linux-gnu/6
+ /usr/lib/gcc/x86_64-linux-gnu/7 # Debian 9 Buster
+ /usr/lib/gcc/alpha-linux-gnu/7
+ /usr/lib/gcc/aarch64-linux-gnu/7
+ /usr/lib/gcc/arm-linux-gnueabi/7
+ /usr/lib/gcc/arm-linux-gnueabihf/7
+ /usr/lib/gcc/hppa-linux-gnu/7
+ /usr/lib/gcc/i686-gnu/7
+ /usr/lib/gcc/i686-linux-gnu/7
+ /usr/lib/gcc/x86_64-kfreebsd-gnu/7
+ /usr/lib/gcc/i686-kfreebsd-gnu/7
+ /usr/lib/gcc/m68k-linux-gnu/7
+ /usr/lib/gcc/mips-linux-gnu/7
+ /usr/lib/gcc/mips64el-linux-gnuabi64/7
+ /usr/lib/gcc/mipsel-linux-gnu/7
+ /usr/lib/gcc/powerpc-linux-gnu/7
+ /usr/lib/gcc/powerpc-linux-gnuspe/7
+ /usr/lib/gcc/powerpc64-linux-gnu/7
+ /usr/lib/gcc/powerpc64le-linux-gnu/7
+ /usr/lib/gcc/s390x-linux-gnu/7
+ /usr/lib/gcc/sparc64-linux-gnu/7
+ /usr/lib/gcc/x86_64-linux-gnux32/7
+ /usr/lib/gcc/sh4-linux-gnu/7
+ /usr/lib/x86_64-linux-gnu # libgfortran4
+ /usr/lib/i386-linux-gnu
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/i386-gnu
+ /usr/lib/x86_64-kfreebsd-gnu
+ /usr/lib/i386-kfreebsd-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib/sh4-linux-gnu
+ /usr/lib/sparc64-linux-gnu
+ /usr/lib/x86_64-linux-gnux32
+ /usr/lib/alpha-linux-gnu
+ /usr/lib/gcc/x86_64-linux-gnu/8 # libgfortran8
+ /usr/lib/gcc/aarch64-linux-gnu/8
+ /usr/lib/gcc/arm-linux-gnueabihf/8
+ /usr/lib/gcc/i686-linux-gnu/8
+ /usr/lib/gcc/powerpc64le-linux-gnu/8
+ /usr/lib/gcc/s390x-linux-gnu/8
+ /usr/lib/gcc/alpha-linux-gnu/8
+ ${GFORTRAN_ROOT}/lib
+ $ENV{GFORTRAN_ROOT}/lib
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GFORTRAN DEFAULT_MSG GFORTRAN)
diff --git a/cmake/Modules/FindGFlags.cmake b/cmake/Modules/FindGFlags.cmake
deleted file mode 100644
index 1aff218f5..000000000
--- a/cmake/Modules/FindGFlags.cmake
+++ /dev/null
@@ -1,89 +0,0 @@
-# - Try to find GFlags
-#
-# The following variables are optionally searched for defaults
-# GFlags_ROOT_DIR: Base directory where all GFlags components are found
-#
-# The following are set after configuration is done:
-# GFlags_FOUND
-# GFlags_INCLUDE_DIRS
-# GFlags_LIBS
-# GFlags_LIBRARY_DIRS
-
-# - Try to find GFlags
-#
-#
-# The following are set after configuration is done:
-# GFlags_FOUND
-# GFlags_INCLUDE_DIRS
-# GFlags_LIBS
-# GFlags_LIBRARY_DIRS
-cmake_minimum_required(VERSION 2.6)
-
-if(APPLE)
- FIND_PATH(GFlags_ROOT_DIR
- libgflags.dylib
- PATHS
- /opt/local/lib
- /usr/local/lib
- )
-else(APPLE)
- FIND_PATH(GFlags_ROOT_DIR
- libgflags.so
- HINTS
- /usr/local/lib
- /usr/lib/x86_64-linux-gnu
- /usr/lib/i386-linux-gnu
- /usr/lib/arm-linux-gnueabihf
- /usr/lib/arm-linux-gnueabi
- /usr/lib/aarch64-linux-gnu
- /usr/lib/mipsel-linux-gnu
- /usr/lib/mips-linux-gnu
- /usr/lib/mips64el-linux-gnuabi64
- /usr/lib/powerpc-linux-gnu
- /usr/lib/powerpc64-linux-gnu
- /usr/lib/powerpc64le-linux-gnu
- /usr/lib/powerpc-linux-gnuspe
- /usr/lib/hppa-linux-gnu
- /usr/lib/s390x-linux-gnu
- /usr/lib/i386-gnu
- /usr/lib/hppa-linux-gnu
- /usr/lib/x86_64-kfreebsd-gnu
- /usr/lib/i386-kfreebsd-gnu
- /usr/lib/m68k-linux-gnu
- /usr/lib/sh4-linux-gnu
- /usr/lib/sparc64-linux-gnu
- /usr/lib/x86_64-linux-gnux32
- /usr/lib/alpha-linux-gnu
- /usr/lib64
- /usr/lib
- )
-endif(APPLE)
-
-IF(GFlags_ROOT_DIR)
- # We are testing only a couple of files in the include directories
- FIND_PATH(GFlags_INCLUDE_DIRS
- gflags/gflags.h
- HINTS
- /opt/local/include
- /usr/local/include
- /usr/include
- ${GFlags_ROOT_DIR}/src
- )
-
- # Find the libraries
- SET(GFlags_LIBRARY_DIRS ${GFlags_ROOT_DIR})
-
- FIND_LIBRARY(GFlags_lib gflags ${GFlags_LIBRARY_DIRS})
-
- # set up include and link directory
- include_directories(${GFlags_INCLUDE_DIRS})
- link_directories(${GFlags_LIBRARY_DIRS})
- message(STATUS "gflags library found at ${GFlags_lib}")
- SET(GFlags_LIBS ${GFlags_lib})
- SET(GFlags_FOUND true)
- MARK_AS_ADVANCED(GFlags_INCLUDE_DIRS)
-ELSE(GFlags_ROOT_DIR)
- MESSAGE(STATUS "Cannot find gflags")
- SET(GFlags_FOUND false)
-ENDIF(GFlags_ROOT_DIR)
-
diff --git a/cmake/Modules/FindGLOG.cmake b/cmake/Modules/FindGLOG.cmake
index 68b012c8d..2d8f154f3 100644
--- a/cmake/Modules/FindGLOG.cmake
+++ b/cmake/Modules/FindGLOG.cmake
@@ -1,3 +1,20 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
# - Try to find the Google Glog library
#
# This module defines the following variables
@@ -11,20 +28,20 @@
# GLOG_ROOT - Can be set to Glog install path or Windows build path
#
-if (NOT DEFINED GLOG_ROOT)
- set (GLOG_ROOT /usr /usr/local)
-endif (NOT DEFINED GLOG_ROOT)
+if(NOT DEFINED GLOG_ROOT)
+ set(GLOG_ROOT /usr /usr/local)
+endif()
if(MSVC)
- set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release)
-else(MSVC)
- set (LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib)
-endif(MSVC)
+ set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release)
+else()
+ set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib)
+endif()
macro(_FIND_GLOG_LIBRARIES _var)
- find_library(${_var}
- NAMES ${ARGN}
- PATHS ${LIB_PATHS}
+ find_library(${_var}
+ NAMES ${ARGN}
+ PATHS ${LIB_PATHS}
/usr/local/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
@@ -51,48 +68,52 @@ macro(_FIND_GLOG_LIBRARIES _var)
/usr/lib/alpha-linux-gnu
/usr/lib64
/usr/lib
+ ${GLOG_ROOT}/lib
+ $ENV{GLOG_ROOT}/lib
+ ${GLOG_ROOT}/lib64
+ $ENV{GLOG_ROOT}/lib64
PATH_SUFFIXES lib
)
- mark_as_advanced(${_var})
+ mark_as_advanced(${_var})
endmacro()
macro(_GLOG_APPEND_LIBRARIES _list _release)
set(_debug ${_release}_DEBUG)
if(${_debug})
- set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}})
+ set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}})
else()
- set(${_list} ${${_list}} ${${_release}})
+ set(${_list} ${${_list}} ${${_release}})
endif()
endmacro()
if(MSVC)
- find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
- PATHS
- ${GLOG_ROOT}/src/windows
- ${GLOG_ROOT}/src/windows/glog
- )
-else(MSVC)
- # Linux/OS X builds
- find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
- PATHS
- ${GLOG_ROOT}/include/glog
- /usr/include/glog
- /opt/local/include/glog # default location in Macports
- )
-endif(MSVC)
+ find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
+ PATHS
+ ${GLOG_ROOT}/src/windows
+ ${GLOG_ROOT}/src/windows/glog
+ )
+else()
+ # Linux/OS X builds
+ find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
+ PATHS
+ ${GLOG_ROOT}/include/glog
+ /usr/include/glog
+ /opt/local/include/glog # default location in Macports
+ )
+endif()
# Find the libraries
if(MSVC)
- _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.lib)
-else(MSVC)
- # Linux/OS X builds
- if(UNIX)
- _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.so)
- endif(UNIX)
- if(APPLE)
- _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.dylib)
- endif(APPLE)
-endif(MSVC)
+ _find_glog_libraries(GLOG_LIBRARIES libglog.lib)
+else()
+ # Linux/OS X builds
+ if(UNIX)
+ _find_glog_libraries(GLOG_LIBRARIES libglog.so)
+ endif()
+ if(APPLE)
+ _find_glog_libraries(GLOG_LIBRARIES libglog.dylib)
+ endif()
+endif()
if(GLOG_FOUND)
message(STATUS "glog library found at ${GLOG_LIBRARIES}")
@@ -100,21 +121,20 @@ endif()
# handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if
# all listed variables are TRUE
-include("${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake")
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Glog DEFAULT_MSG
- GLOG_LIBRARIES)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GLOG DEFAULT_MSG GLOG_LIBRARIES)
if(MSVC)
- string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR})
- string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT})
- set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}")
- string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
-else(MSVC)
- # Linux/OS X builds
- set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
- string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
-endif(MSVC)
+ string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR})
+ string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT})
+ set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}")
+ string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
+else()
+ # Linux/OS X builds
+ set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
+ string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
+endif()
if(GLOG_FOUND)
- # _GLOG_APPEND_LIBRARIES(GLOG GLOG_LIBRARIES)
+ # _GLOG_APPEND_LIBRARIES(GLOG GLOG_LIBRARIES)
endif()
diff --git a/cmake/Modules/FindGNSSSIMULATOR.cmake b/cmake/Modules/FindGNSSSIMULATOR.cmake
new file mode 100644
index 000000000..66aa9176a
--- /dev/null
+++ b/cmake/Modules/FindGNSSSIMULATOR.cmake
@@ -0,0 +1,30 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+find_program(SW_GENERATOR_BIN gnss_sim
+ PATHS /usr/bin
+ /usr/local/bin
+ /opt/local/bin
+ ${CMAKE_INSTALL_PREFIX}/bin
+ ${GNSSSIMULATOR_ROOT}/bin
+ $ENV{GNSSSIMULATOR_ROOT}/bin
+ PATH_SUFFIXES bin
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GNSSSIMULATOR DEFAULT_MSG SW_GENERATOR_BIN)
+mark_as_advanced(SW_GENERATOR_BIN)
diff --git a/cmake/Modules/FindGnuradio.cmake b/cmake/Modules/FindGNURADIO.cmake
similarity index 50%
rename from cmake/Modules/FindGnuradio.cmake
rename to cmake/Modules/FindGNURADIO.cmake
index 44ae95722..7f5deb3ab 100644
--- a/cmake/Modules/FindGnuradio.cmake
+++ b/cmake/Modules/FindGNURADIO.cmake
@@ -1,16 +1,32 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
########################################################################
# Find GNU Radio
########################################################################
-INCLUDE(FindPkgConfig)
-INCLUDE(FindPackageHandleStandardArgs)
+include(FindPkgConfig)
+include(FindPackageHandleStandardArgs)
-# if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list
+# if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list
if(NOT GR_REQUIRED_COMPONENTS)
set(GR_REQUIRED_COMPONENTS RUNTIME ANALOG BLOCKS DIGITAL FFT FILTER PMT FEC TRELLIS UHD)
endif()
-
# Allows us to use all .cmake files in this directory
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR})
@@ -18,18 +34,17 @@ list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR})
set(GNURADIO_ALL_LIBRARIES "")
set(GNURADIO_ALL_INCLUDE_DIRS "")
-MACRO(LIST_CONTAINS var value)
- SET(${var})
- FOREACH(value2 ${ARGN})
- IF (${value} STREQUAL ${value2})
- SET(${var} TRUE)
- ENDIF(${value} STREQUAL ${value2})
- ENDFOREACH(value2)
-ENDMACRO(LIST_CONTAINS)
+macro(LIST_CONTAINS var value)
+ set(${var})
+ foreach(value2 ${ARGN})
+ if(${value} STREQUAL ${value2})
+ set(${var} TRUE)
+ endif()
+ endforeach()
+endmacro()
function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
-
- LIST_CONTAINS(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS})
+ list_contains(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS})
if(NOT REQUIRED_MODULE)
#message("Ignoring GNU Radio Module ${EXTVAR}")
return()
@@ -38,7 +53,7 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
message(STATUS "Checking for GNU Radio Module: ${EXTVAR}")
# check for .pc hints
- PKG_CHECK_MODULES(PC_GNURADIO_${EXTVAR} ${PCNAME})
+ pkg_check_modules(PC_GNURADIO_${EXTVAR} ${PCNAME})
if(NOT PC_GNURADIO_${EXTVAR}_FOUND)
set(PC_GNURADIO_${EXTVAR}_LIBRARIES ${LIBFILE})
@@ -50,29 +65,29 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
set(PC_LIBDIR ${PC_GNURADIO_${EXTVAR}_LIBDIR})
# look for include files
- FIND_PATH(
- ${INCVAR_NAME}
+ find_path(${INCVAR_NAME}
NAMES ${INCFILE}
HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
- ${PC_INCDIR}
- ${CMAKE_INSTALL_PREFIX}/include
- ${GNURADIO_INSTALL_PREFIX}/include
+ ${PC_INCDIR}
+ ${CMAKE_INSTALL_PREFIX}/include
+ ${GNURADIO_INSTALL_PREFIX}/include
PATHS /usr/local/include
/usr/include
${GNURADIO_INSTALL_PREFIX}/include
+ ${GNURADIO_ROOT}/include
+ $ENV{GNURADIO_ROOT}/include
)
# look for libs
foreach(libname ${PC_GNURADIO_${EXTVAR}_LIBRARIES})
- FIND_LIBRARY(
- ${LIBVAR_NAME}_${libname}
+ find_library(${LIBVAR_NAME}_${libname}
NAMES ${libname} ${libname}-${PC_GNURADIO_RUNTIME_VERSION}
HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
- ${PC_LIBDIR}
- ${CMAKE_INSTALL_PREFIX}/lib/
- ${CMAKE_INSTALL_PREFIX}/lib64/
- ${GNURADIO_INSTALL_PREFIX}/lib/
- ${GNURADIO_INSTALL_PREFIX}/lib64
+ ${PC_LIBDIR}
+ ${CMAKE_INSTALL_PREFIX}/lib
+ ${CMAKE_INSTALL_PREFIX}/lib64
+ ${GNURADIO_INSTALL_PREFIX}/lib
+ ${GNURADIO_INSTALL_PREFIX}/lib64
PATHS /usr/local/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
@@ -100,9 +115,13 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
/usr/lib64
/usr/lib
${GNURADIO_INSTALL_PREFIX}/lib
+ ${GNURADIO_ROOT}/lib
+ $ENV{GNURADIO_ROOT}/lib
+ ${GNURADIO_ROOT}/lib64
+ $ENV{GNURADIO_ROOT}/lib64
)
- list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}})
- endforeach(libname)
+ list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}})
+ endforeach()
set(${LIBVAR_NAME} ${${LIBVAR_NAME}} PARENT_SCOPE)
@@ -114,43 +133,42 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE)
set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_${EXTVAR} DEFAULT_MSG GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
+ find_package_handle_standard_args(GNURADIO_${EXTVAR} DEFAULT_MSG GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
message(STATUS "GNURADIO_${EXTVAR}_FOUND = ${GNURADIO_${EXTVAR}_FOUND}")
set(GNURADIO_${EXTVAR}_FOUND ${GNURADIO_${EXTVAR}_FOUND} PARENT_SCOPE)
# generate an error if the module is missing
if(NOT GNURADIO_${EXTVAR}_FOUND)
- message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!")
+ message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!")
endif()
- MARK_AS_ADVANCED(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
-
+ mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
endfunction()
-GR_MODULE(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime)
-GR_MODULE(ANALOG gnuradio-analog gnuradio/analog/api.h gnuradio-analog)
-GR_MODULE(AUDIO gnuradio-audio gnuradio/audio/api.h gnuradio-audio)
-GR_MODULE(BLOCKS gnuradio-blocks gnuradio/blocks/api.h gnuradio-blocks)
-GR_MODULE(CHANNELS gnuradio-channels gnuradio/channels/api.h gnuradio-channels)
-GR_MODULE(DIGITAL gnuradio-digital gnuradio/digital/api.h gnuradio-digital)
-GR_MODULE(FCD gnuradio-fcd gnuradio/fcd_api.h gnuradio-fcd)
-GR_MODULE(FEC gnuradio-fec gnuradio/fec/api.h gnuradio-fec)
-GR_MODULE(FFT gnuradio-fft gnuradio/fft/api.h gnuradio-fft)
-GR_MODULE(FILTER gnuradio-filter gnuradio/filter/api.h gnuradio-filter)
-GR_MODULE(NOAA gnuradio-noaa gnuradio/noaa/api.h gnuradio-noaa)
-GR_MODULE(PAGER gnuradio-pager gnuradio/pager/api.h gnuradio-pager)
-GR_MODULE(QTGUI gnuradio-qtgui gnuradio/qtgui/api.h gnuradio-qtgui)
-GR_MODULE(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis)
-GR_MODULE(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd)
-GR_MODULE(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder)
-GR_MODULE(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet)
-GR_MODULE(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui)
-GR_MODULE(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt)
+gr_module(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime)
+gr_module(ANALOG gnuradio-analog gnuradio/analog/api.h gnuradio-analog)
+gr_module(AUDIO gnuradio-audio gnuradio/audio/api.h gnuradio-audio)
+gr_module(BLOCKS gnuradio-blocks gnuradio/blocks/api.h gnuradio-blocks)
+gr_module(CHANNELS gnuradio-channels gnuradio/channels/api.h gnuradio-channels)
+gr_module(DIGITAL gnuradio-digital gnuradio/digital/api.h gnuradio-digital)
+gr_module(FCD gnuradio-fcd gnuradio/fcd_api.h gnuradio-fcd)
+gr_module(FEC gnuradio-fec gnuradio/fec/api.h gnuradio-fec)
+gr_module(FFT gnuradio-fft gnuradio/fft/api.h gnuradio-fft)
+gr_module(FILTER gnuradio-filter gnuradio/filter/api.h gnuradio-filter)
+gr_module(NOAA gnuradio-noaa gnuradio/noaa/api.h gnuradio-noaa)
+gr_module(PAGER gnuradio-pager gnuradio/pager/api.h gnuradio-pager)
+gr_module(QTGUI gnuradio-qtgui gnuradio/qtgui/api.h gnuradio-qtgui)
+gr_module(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis)
+gr_module(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd)
+gr_module(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder)
+gr_module(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet)
+gr_module(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui)
+gr_module(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt)
list(REMOVE_DUPLICATES GNURADIO_ALL_INCLUDE_DIRS)
list(REMOVE_DUPLICATES GNURADIO_ALL_LIBRARIES)
- # Trick to find out that GNU Radio is >= 3.7.4 if pkgconfig is not present
+# Trick to find out that GNU Radio is >= 3.7.4 if pkgconfig is not present
if(NOT PC_GNURADIO_RUNTIME_VERSION)
find_file(GNURADIO_VERSION_GREATER_THAN_373
NAMES gnuradio/blocks/tsb_vector_sink_f.h
@@ -160,8 +178,25 @@ if(NOT PC_GNURADIO_RUNTIME_VERSION)
PATHS /usr/local/include
/usr/include
${GNURADIO_INSTALL_PREFIX}/include
+ ${GNURADIO_ROOT}/include
+ $ENV{GNURADIO_ROOT}/include
)
- if(GNURADIO_VERSION_GREATER_THAN_373)
- set(PC_GNURADIO_RUNTIME_VERSION "3.7.4+")
- endif(GNURADIO_VERSION_GREATER_THAN_373)
-endif(NOT PC_GNURADIO_RUNTIME_VERSION)
\ No newline at end of file
+ if(GNURADIO_VERSION_GREATER_THAN_373)
+ set(PC_GNURADIO_RUNTIME_VERSION "3.7.4+")
+ endif()
+
+ find_file(GNURADIO_VERSION_GREATER_THAN_38
+ NAMES gnuradio/filter/mmse_resampler_cc.h
+ HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
+ ${CMAKE_INSTALL_PREFIX}/include
+ ${GNURADIO_INSTALL_PREFIX}/include
+ PATHS /usr/local/include
+ /usr/include
+ ${GNURADIO_INSTALL_PREFIX}/include
+ ${GNURADIO_ROOT}/include
+ $ENV{GNURADIO_ROOT}/include
+ )
+ if(GNURADIO_VERSION_GREATER_THAN_38)
+ set(PC_GNURADIO_RUNTIME_VERSION "3.8.0+")
+ endif()
+endif()
diff --git a/cmake/Modules/FindGPSTK.cmake b/cmake/Modules/FindGPSTK.cmake
index fffe17877..f5ecb667e 100644
--- a/cmake/Modules/FindGPSTK.cmake
+++ b/cmake/Modules/FindGPSTK.cmake
@@ -1,24 +1,49 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
# - Find gpstk library
# Find the native gpstk includes and library
# This module defines
# GPSTK_INCLUDE_DIR, where to find Rinex3ObsBase.hpp, etc.
-# GPSTK_LIBRARIES, libraries to link against to use GPSTK.
# GPSTK_FOUND, If false, do not try to use GPSTK.
-# also defined, but not for general use are
# GPSTK_LIBRARY, where to find the GPSTK library.
-FIND_PATH(GPSTK_INCLUDE_DIR Rinex3ObsBase.hpp)
+find_path(GPSTK_INCLUDE_DIR gpstk/Rinex3ObsBase.hpp
+ HINTS /usr/include
+ /usr/local/include
+ /opt/local/include
+ ${GPSTK_ROOT}/include
+ $ENV{GPSTK_ROOT}/include
+)
-SET(GPSTK_NAMES ${GPSTK_NAMES} gpstk libgpstk)
-FIND_LIBRARY(GPSTK_LIBRARY NAMES ${GPSTK_NAMES} )
+set(GPSTK_NAMES ${GPSTK_NAMES} gpstk libgpstk)
-# handle the QUIETLY and REQUIRED arguments and set GPSTK_FOUND to TRUE if
+find_library(GPSTK_LIBRARY NAMES ${GPSTK_NAMES}
+ HINTS /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ ${GPSTK_ROOT}/lib
+ $ENV{GPSTK_ROOT}/lib
+ ${GPSTK_ROOT}/lib64
+ $ENV{GPSTK_ROOT}/lib64
+)
+
+# handle the QUIETLY and REQUIRED arguments and set GPSTK_FOUND to TRUE if
# all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPSTK DEFAULT_MSG GPSTK_LIBRARY GPSTK_INCLUDE_DIR)
-
-IF(GPSTK_FOUND)
- SET( GPSTK_LIBRARIES ${GPSTK_LIBRARY} )
-ENDIF(GPSTK_FOUND)
-
-MARK_AS_ADVANCED(GPSTK_INCLUDE_DIR GPSTK_LIBRARY)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GPSTK DEFAULT_MSG GPSTK_LIBRARY GPSTK_INCLUDE_DIR)
+mark_as_advanced(GPSTK_INCLUDE_DIR GPSTK_LIBRARY GPSTK_INCLUDE_DIR)
diff --git a/cmake/Modules/FindGRIIO.cmake b/cmake/Modules/FindGRIIO.cmake
new file mode 100644
index 000000000..6d341e7fd
--- /dev/null
+++ b/cmake/Modules/FindGRIIO.cmake
@@ -0,0 +1,72 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+include(FindPkgConfig)
+pkg_check_modules(PC_IIO gnuradio-iio)
+
+find_path(IIO_INCLUDE_DIRS
+ NAMES gnuradio/iio/api.h
+ HINTS $ENV{IIO_DIR}/include
+ ${PC_IIO_INCLUDEDIR}
+ PATHS ${CMAKE_INSTALL_PREFIX}/include
+ /usr/local/include
+ /usr/include
+ ${GRIIO_ROOT}/include
+ $ENV{GRIIO_ROOT}/include
+)
+
+find_library(IIO_LIBRARIES
+ NAMES gnuradio-iio
+ HINTS $ENV{IIO_DIR}/lib
+ ${PC_IIO_LIBDIR}
+ PATHS ${CMAKE_INSTALL_PREFIX}/lib
+ ${CMAKE_INSTALL_PREFIX}/lib64
+ /usr/local/lib
+ /usr/local/lib64
+ /usr/lib
+ /usr/lib64
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/alpha-linux-gnu
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/i686-gnu
+ /usr/lib/i686-linux-gnu
+ /usr/lib/x86_64-kfreebsd-gnu
+ /usr/lib/i686-kfreebsd-gnu
+ /usr/lib/m68k-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc-linux-gnuspe
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib/sparc64-linux-gnu
+ /usr/lib/x86_64-linux-gnux32
+ /usr/lib/sh4-linux-gnu
+ ${GRIIO_ROOT}/lib
+ $ENV{GRIIO_ROOT}/lib
+ ${GRIIO_ROOT}/lib64
+ $ENV{GRIIO_ROOT}/lib64
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GRIIO DEFAULT_MSG IIO_LIBRARIES IIO_INCLUDE_DIRS)
+mark_as_advanced(IIO_LIBRARIES IIO_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindGrOsmoSDR.cmake b/cmake/Modules/FindGROSMOSDR.cmake
similarity index 50%
rename from cmake/Modules/FindGrOsmoSDR.cmake
rename to cmake/Modules/FindGROSMOSDR.cmake
index a67e1817e..48379ed76 100644
--- a/cmake/Modules/FindGrOsmoSDR.cmake
+++ b/cmake/Modules/FindGROSMOSDR.cmake
@@ -1,8 +1,25 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
# Tries to find gr-osmosdr.
#
# Usage of this module as follows:
#
-# find_package(GrOsmoSDR)
+# find_package(GROSMOSDR)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
@@ -17,23 +34,29 @@
# GROSMOSDR_LIBRARIES The gr-osmosdr libraries (gnuradio-osmosdr)
# GROSMOSDR_INCLUDE_DIR The location of gr-osmosdr headers
-if(NOT GROSMOSDR_FOUND)
- pkg_check_modules (GROSMOSDR_PKG gnuradio-osmosdr)
- find_path(GROSMOSDR_INCLUDE_DIR
- NAMES osmosdr/source.h
- osmosdr/api.h
- PATHS
+include(FindPkgConfig)
+pkg_check_modules(GROSMOSDR_PKG gnuradio-osmosdr)
+
+find_path(GROSMOSDR_INCLUDE_DIR
+ NAMES
+ osmosdr/source.h
+ osmosdr/api.h
+ PATHS
${GROSMOSDR_PKG_INCLUDE_DIRS}
/usr/include
/usr/local/include
- )
+ /opt/local/include
+ ${GROSMOSDR_ROOT}/include
+ $ENV{GROSMOSDR_ROOT}/include
+)
- find_library(GROSMOSDR_LIBRARIES
- NAMES gnuradio-osmosdr
- PATHS
+find_library(GROSMOSDR_LIBRARIES
+ NAMES gnuradio-osmosdr
+ PATHS
${GROSMOSDR_PKG_LIBRARY_DIRS}
/usr/lib
/usr/local/lib
+ /opt/local/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
/usr/lib/arm-linux-gnueabihf
@@ -58,16 +81,12 @@ if(NOT GROSMOSDR_FOUND)
/usr/lib/x86_64-linux-gnux32
/usr/lib/alpha-linux-gnu
/usr/lib64
- )
+ ${GROSMOSDR_ROOT}/lib
+ $ENV{GROSMOSDR_ROOT}/lib
+ ${GROSMOSDR_ROOT}/lib64
+ $ENV{GROSMOSDR_ROOT}/lib64
+)
- if(GROSMOSDR_INCLUDE_DIR AND GROSMOSDR_LIBRARIES)
- set(GROSMOSDR_FOUND TRUE CACHE INTERNAL "gnuradio-osmosdr found")
- message(STATUS "Found gnuradio-osmosdr: ${GROSMOSDR_INCLUDE_DIR}, ${GROSMOSDR_LIBRARIES}")
- else(GROSMOSDR_INCLUDE_DIR AND GROSMOSDR_LIBRARIES)
- set(GROSMOSDR_FOUND FALSE CACHE INTERNAL "gnuradio-osmosdr found")
- message(STATUS "gnuradio-osmosdr not found.")
- endif(GROSMOSDR_INCLUDE_DIR AND GROSMOSDR_LIBRARIES)
-
-mark_as_advanced(GROSMOSDR_INCLUDE_DIR GROSMOSDR_LIBRARIES)
-
-endif(NOT GROSMOSDR_FOUND)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GROSMOSDR DEFAULT_MSG GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR)
+mark_as_advanced(GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR)
diff --git a/cmake/Modules/FindGperftools.cmake b/cmake/Modules/FindGperftools.cmake
deleted file mode 100644
index 5a97a29c5..000000000
--- a/cmake/Modules/FindGperftools.cmake
+++ /dev/null
@@ -1,52 +0,0 @@
-# Tries to find Gperftools.
-#
-# Usage of this module as follows:
-#
-# find_package(Gperftools)
-#
-# Variables used by this module, they can change the default behaviour and need
-# to be set before calling find_package:
-#
-# Gperftools_ROOT_DIR Set this variable to the root installation of
-# Gperftools if the module has problems finding
-# the proper installation path.
-#
-# Variables defined by this module:
-#
-# GPERFTOOLS_FOUND System has Gperftools libs/headers
-# GPERFTOOLS_LIBRARIES The Gperftools libraries (tcmalloc & profiler)
-# GPERFTOOLS_INCLUDE_DIR The location of Gperftools headers
-
-find_library(GPERFTOOLS_TCMALLOC
- NAMES tcmalloc
- HINTS ${Gperftools_ROOT_DIR}/lib)
-
-find_library(GPERFTOOLS_PROFILER
- NAMES profiler
- HINTS ${Gperftools_ROOT_DIR}/lib)
-
-find_library(GPERFTOOLS_TCMALLOC_AND_PROFILER
- NAMES tcmalloc_and_profiler
- HINTS ${Gperftools_ROOT_DIR}/lib)
-
-find_path(GPERFTOOLS_INCLUDE_DIR
- NAMES gperftools/heap-profiler.h
- HINTS ${Gperftools_ROOT_DIR}/include)
-
-set(GPERFTOOLS_LIBRARIES ${GPERFTOOLS_TCMALLOC_AND_PROFILER})
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(
- Gperftools
- DEFAULT_MSG
- GPERFTOOLS_LIBRARIES
- GPERFTOOLS_INCLUDE_DIR
-)
-
-mark_as_advanced(
- Gperftools_ROOT_DIR
- GPERFTOOLS_TCMALLOC
- GPERFTOOLS_PROFILER
- GPERFTOOLS_TCMALLOC_AND_PROFILER
- GPERFTOOLS_LIBRARIES
- GPERFTOOLS_INCLUDE_DIR)
\ No newline at end of file
diff --git a/cmake/Modules/FindGrDbfcttc.cmake b/cmake/Modules/FindGrDbfcttc.cmake
deleted file mode 100644
index 5624f8003..000000000
--- a/cmake/Modules/FindGrDbfcttc.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-########################################################################
-# Find GR-DBFCTTC Module
-########################################################################
-
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_GR_DBFCTTC gr-dbfcttc)
-
-FIND_PATH(
- GR_DBFCTTC_INCLUDE_DIRS
- NAMES dbfcttc/api.h
- HINTS $ENV{GR_DBFCTTC_DIR}/include
- ${PC_GR_DBFCTTC_INCLUDEDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/include
- /usr/include
- /usr/local/include
-)
-
-FIND_LIBRARY(
- GR_DBFCTTC_LIBRARIES
- NAMES gnuradio-dbfcttc
- HINTS $ENV{GR_DBFCTTC_DIR}/lib
- ${PC_GR_DBFCTTC_LIBDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/lib
- ${CMAKE_INSTALL_PREFIX}/lib64
- /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib64
-)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GR_DBFCTTC DEFAULT_MSG GR_DBFCTTC_LIBRARIES GR_DBFCTTC_INCLUDE_DIRS)
-MARK_AS_ADVANCED(GR_DBFCTTC_LIBRARIES GR_DBFCTTC_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindGrGN3S.cmake b/cmake/Modules/FindGrGN3S.cmake
deleted file mode 100644
index 0f1c2cbc5..000000000
--- a/cmake/Modules/FindGrGN3S.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-########################################################################
-# Find GR-GN3S Module
-########################################################################
-
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_GR_GN3S gr-gn3s)
-
-FIND_PATH(
- GR_GN3S_INCLUDE_DIRS
- NAMES gn3s/gn3s_api.h
- HINTS $ENV{GR_GN3S_DIR}/include
- ${PC_GR_GN3S_INCLUDEDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/include
- /usr/local/include
- /usr/include
-)
-
-FIND_LIBRARY(
- GR_GN3S_LIBRARIES
- NAMES gr-gn3s
- HINTS $ENV{GR_GN3S_DIR}/lib
- ${PC_GR_GN3S_LIBDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/lib
- ${CMAKE_INSTALL_PREFIX}/lib64
- /usr/local/lib
- /usr/local/lib64
- /usr/lib
- /usr/lib64
-)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GR_GN3S DEFAULT_MSG GR_GN3S_LIBRARIES GR_GN3S_INCLUDE_DIRS)
-MARK_AS_ADVANCED(GR_GN3S_LIBRARIES GR_GN3S_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindLIBIIO.cmake b/cmake/Modules/FindLIBIIO.cmake
new file mode 100644
index 000000000..a76180ca2
--- /dev/null
+++ b/cmake/Modules/FindLIBIIO.cmake
@@ -0,0 +1,76 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+include(FindPkgConfig)
+pkg_check_modules(PC_LIBIIO libiio)
+
+find_path(
+ LIBIIO_INCLUDE_DIRS
+ NAMES iio.h
+ HINTS $ENV{LIBIIO_DIR}/include
+ ${PC_LIBIIO_INCLUDEDIR}
+ PATHS ${CMAKE_INSTALL_PREFIX}/include
+ /usr/local/include
+ /usr/include
+ /opt/local/include
+ ${LIBIIO_ROOT}/include
+ $ENV{LIBIIO_ROOT}/include
+)
+
+find_library(
+ LIBIIO_LIBRARIES
+ NAMES iio libiio.so.0
+ HINTS $ENV{LIBIIO_DIR}/lib
+ ${PC_LIBIIO_LIBDIR}
+ PATHS ${CMAKE_INSTALL_PREFIX}/lib
+ ${CMAKE_INSTALL_PREFIX}/lib64
+ /usr/local/lib
+ /usr/local/lib64
+ /usr/lib
+ /usr/lib64
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/alpha-linux-gnu
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/i686-gnu
+ /usr/lib/i686-linux-gnu
+ /usr/lib/x86_64-kfreebsd-gnu
+ /usr/lib/i686-kfreebsd-gnu
+ /usr/lib/m68k-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc-linux-gnuspe
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib/sparc64-linux-gnu
+ /usr/lib/x86_64-linux-gnux32
+ /usr/lib/sh4-linux-gnu
+ /Library/Frameworks/iio.framework/
+ ${LIBIIO_ROOT}/lib
+ $ENV{LIBIIO_ROOT}/lib
+ ${LIBIIO_ROOT}/lib64
+ $ENV{LIBIIO_ROOT}/lib64
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LIBIIO DEFAULT_MSG LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS)
+mark_as_advanced(LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindLOG4CPP.cmake b/cmake/Modules/FindLOG4CPP.cmake
new file mode 100644
index 000000000..283c3ddf9
--- /dev/null
+++ b/cmake/Modules/FindLOG4CPP.cmake
@@ -0,0 +1,92 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+# - Find Log4cpp
+# Find the native LOG4CPP includes and library
+#
+# LOG4CPP_INCLUDE_DIR - where to find LOG4CPP.h, etc.
+# LOG4CPP_LIBRARIES - List of libraries when using LOG4CPP.
+# LOG4CPP_FOUND - True if LOG4CPP found.
+
+
+if(LOG4CPP_INCLUDE_DIR)
+ # Already in cache, be silent
+ set(LOG4CPP_FIND_QUIETLY TRUE)
+endif()
+
+find_path(LOG4CPP_INCLUDE_DIR log4cpp/Category.hh
+ /opt/local/include
+ /usr/local/include
+ /usr/include
+ ${LOG4CPP_ROOT}/include
+ $ENV{LOG4CPP_ROOT}/include
+)
+
+set(LOG4CPP_NAMES log4cpp)
+find_library(LOG4CPP_LIBRARY
+ NAMES ${LOG4CPP_NAMES}
+ HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
+ ${PC_LIBDIR}
+ ${CMAKE_INSTALL_PREFIX}/lib/
+ PATHS /usr/local/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/i386-linux-gnu
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/powerpc-linux-gnuspe
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib/i386-gnu
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/x86_64-kfreebsd-gnu
+ /usr/lib/i386-kfreebsd-gnu
+ /usr/lib/m68k-linux-gnu
+ /usr/lib/sh4-linux-gnu
+ /usr/lib/sparc64-linux-gnu
+ /usr/lib/x86_64-linux-gnux32
+ /usr/lib/alpha-linux-gnu
+ /usr/lib64
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ ${LOG4CPP_ROOT}/lib
+ $ENV{LOG4CPP_ROOT}/lib
+ ${LOG4CPP_ROOT}/lib64
+ $ENV{LOG4CPP_ROOT}/lib64
+)
+
+if(LOG4CPP_INCLUDE_DIR AND LOG4CPP_LIBRARY)
+ set(LOG4CPP_FOUND TRUE)
+ set(LOG4CPP_LIBRARIES ${LOG4CPP_LIBRARY} CACHE INTERNAL "" FORCE)
+ set(LOG4CPP_INCLUDE_DIRS ${LOG4CPP_INCLUDE_DIR} CACHE INTERNAL "" FORCE)
+else()
+ set(LOG4CPP_FOUND FALSE CACHE INTERNAL "" FORCE)
+ set(LOG4CPP_LIBRARY "" CACHE INTERNAL "" FORCE)
+ set(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
+ set(LOG4CPP_INCLUDE_DIR "" CACHE INTERNAL "" FORCE)
+ set(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LOG4CPP DEFAULT_MSG LOG4CPP_INCLUDE_DIRS LOG4CPP_LIBRARIES)
diff --git a/cmake/Modules/FindLibOsmoSDR.cmake b/cmake/Modules/FindLibOsmoSDR.cmake
deleted file mode 100644
index d024e0629..000000000
--- a/cmake/Modules/FindLibOsmoSDR.cmake
+++ /dev/null
@@ -1,65 +0,0 @@
-# Tries to find libosmosdr.
-#
-# Usage of this module as follows:
-#
-# find_package(LibOsmoSDR)
-#
-#
-# Variables defined by this module:
-#
-# LIBOSMOSDR_FOUND System has libosmosdr libs/headers
-# LIBOSMOSDR_LIBRARIES The libosmosdr libraries
-# LIBOSMOSDR_INCLUDE_DIR The location of libosmosdr headers
-
-
-if(NOT LIBOSMOSDR_FOUND)
- pkg_check_modules (LIBOSMOSDR_PKG libosmosdr)
- find_path(LIBOSMOSDR_INCLUDE_DIR NAMES osmosdr.h
- PATHS
- ${LIBOSMOSDR_PKG_INCLUDE_DIRS}
- /usr/include
- /usr/local/include
- )
-
- find_library(LIBOSMOSDR_LIBRARIES NAMES osmosdr
- PATHS
- ${LIBOSMOSDR_PKG_LIBRARY_DIRS}
- /usr/lib
- /usr/local/lib
- /usr/lib/x86_64-linux-gnu
- /usr/lib/i386-linux-gnu
- /usr/lib/arm-linux-gnueabihf
- /usr/lib/arm-linux-gnueabi
- /usr/lib/aarch64-linux-gnu
- /usr/lib/mipsel-linux-gnu
- /usr/lib/mips-linux-gnu
- /usr/lib/mips64el-linux-gnuabi64
- /usr/lib/powerpc-linux-gnu
- /usr/lib/powerpc64-linux-gnu
- /usr/lib/powerpc64le-linux-gnu
- /usr/lib/powerpc-linux-gnuspe
- /usr/lib/hppa-linux-gnu
- /usr/lib/s390x-linux-gnu
- /usr/lib/i386-gnu
- /usr/lib/hppa-linux-gnu
- /usr/lib/x86_64-kfreebsd-gnu
- /usr/lib/i386-kfreebsd-gnu
- /usr/lib/m68k-linux-gnu
- /usr/lib/sh4-linux-gnu
- /usr/lib/sparc64-linux-gnu
- /usr/lib/x86_64-linux-gnux32
- /usr/lib/alpha-linux-gnu
- /usr/lib64
- )
-
- if(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES)
- set(LIBOSMOSDR_FOUND TRUE CACHE INTERNAL "libosmosdr found")
- message(STATUS "Found libosmosdr: ${LIBOSMOSDR_INCLUDE_DIR}, ${LIBOSMOSDR_LIBRARIES}")
- else(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES)
- set(LIBOSMOSDR_FOUND FALSE CACHE INTERNAL "libosmosdr found")
- message(STATUS "libosmosdr not found.")
- endif(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES)
-
-mark_as_advanced(LIBOSMOSDR_INCLUDE_DIR LIBOSMOSDR_LIBRARIES)
-
-endif(NOT LIBOSMOSDR_FOUND)
diff --git a/cmake/Modules/FindMATIO.cmake b/cmake/Modules/FindMATIO.cmake
new file mode 100644
index 000000000..08facf069
--- /dev/null
+++ b/cmake/Modules/FindMATIO.cmake
@@ -0,0 +1,129 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+# FindMATIO
+#
+# Try to find MATIO library
+#
+# Once done this will define:
+#
+# MATIO_FOUND - True if MATIO found.
+# MATIO_LIBRARIES - MATIO libraries.
+# MATIO_INCLUDE_DIRS - where to find matio.h, etc..
+# MATIO_VERSION_STRING - version number as a string (e.g.: "1.3.4")
+#
+#=============================================================================
+# Copyright 2015 Avtech Scientific
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+# nor the names of their contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+#
+
+# Look for the header file.
+find_path(MATIO_INCLUDE_DIR
+ NAMES matio.h
+ HINTS
+ ${MATIO_ROOT}/include
+ $ENV{MATIO_ROOT}/include
+ DOC "The MATIO include directory"
+)
+
+# Look for the library.
+find_library(MATIO_LIBRARY
+ NAMES matio
+ HINTS
+ ${MATIO_ROOT}/lib
+ $ENV{MATIO_ROOT}/lib
+ ${MATIO_ROOT}/lib64
+ $ENV{MATIO_ROOT}/lib64
+ DOC "The MATIO library"
+)
+
+if(MATIO_INCLUDE_DIR)
+ # ---------------------------------------------------
+ # Extract version information from MATIO
+ # ---------------------------------------------------
+
+ # If the file is missing, set all values to 0
+ set(MATIO_MAJOR_VERSION 0)
+ set(MATIO_MINOR_VERSION 0)
+ set(MATIO_RELEASE_LEVEL 0)
+
+ # new versions of MATIO have `matio_pubconf.h`
+ if(EXISTS ${MATIO_INCLUDE_DIR}/matio_pubconf.h)
+ set(MATIO_CONFIG_FILE "matio_pubconf.h")
+ else()
+ set(MATIO_CONFIG_FILE "matioConfig.h")
+ endif()
+
+ if(MATIO_CONFIG_FILE)
+
+ # Read and parse MATIO config header file for version number
+ file(STRINGS "${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}" _matio_HEADER_CONTENTS REGEX "#define MATIO_((MAJOR|MINOR)_VERSION)|(RELEASE_LEVEL) ")
+
+ foreach(line ${_matio_HEADER_CONTENTS})
+ if(line MATCHES "#define ([A-Z_]+) ([0-9]+)")
+ set("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}")
+ endif()
+ endforeach()
+
+ unset(_matio_HEADER_CONTENTS)
+ endif()
+
+ set(MATIO_VERSION_STRING "${MATIO_MAJOR_VERSION}.${MATIO_MINOR_VERSION}.${MATIO_RELEASE_LEVEL}")
+endif()
+
+mark_as_advanced(MATIO_INCLUDE_DIR MATIO_LIBRARY)
+
+# handle the QUIETLY and REQUIRED arguments and set MATIO_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MATIO REQUIRED_VARS MATIO_LIBRARY MATIO_INCLUDE_DIR VERSION_VAR MATIO_VERSION_STRING)
+
+if(MATIO_FOUND)
+ set(MATIO_LIBRARIES ${MATIO_LIBRARY})
+ set(MATIO_INCLUDE_DIRS ${MATIO_INCLUDE_DIR})
+else()
+ set(MATIO_LIBRARIES)
+ set(MATIO_INCLUDE_DIRS)
+endif()
diff --git a/cmake/Modules/FindORC.cmake b/cmake/Modules/FindORC.cmake
index 9d0da9ee2..fea12b98f 100644
--- a/cmake/Modules/FindORC.cmake
+++ b/cmake/Modules/FindORC.cmake
@@ -1,49 +1,75 @@
-FIND_PACKAGE(PkgConfig)
-PKG_CHECK_MODULES(PC_ORC "orc-0.4 > 0.4.22")
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
-FIND_PROGRAM(ORCC_EXECUTABLE orcc
- HINTS ${PC_ORC_TOOLSDIR}
- PATHS ${ORC_ROOT}/bin ${CMAKE_INSTALL_PREFIX}/bin)
+find_package(PkgConfig)
+pkg_check_modules(PC_ORC "orc-0.4 > 0.4.22")
-FIND_PATH(ORC_INCLUDE_DIR NAMES orc/orc.h
- HINTS ${PC_ORC_INCLUDEDIR}
- PATHS ${ORC_ROOT}/include/orc-0.4 ${CMAKE_INSTALL_PREFIX}/include/orc-0.4)
-
-
-FIND_PATH(ORC_LIBRARY_DIR NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX}
- HINTS ${PC_ORC_LIBDIR}
- /usr/local/lib
- /usr/lib/x86_64-linux-gnu
- /usr/lib/i386-linux-gnu
- /usr/lib/arm-linux-gnueabihf
- /usr/lib/arm-linux-gnueabi
- /usr/lib/aarch64-linux-gnu
- /usr/lib/mipsel-linux-gnu
- /usr/lib/mips-linux-gnu
- /usr/lib/mips64el-linux-gnuabi64
- /usr/lib/powerpc-linux-gnu
- /usr/lib/powerpc64-linux-gnu
- /usr/lib/powerpc64le-linux-gnu
- /usr/lib/hppa-linux-gnu
- /usr/lib/s390x-linux-gnu
- /usr/lib64
- /usr/lib
- PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
-
-FIND_LIBRARY(ORC_LIB orc-0.4
- HINTS ${PC_ORC_LIBRARY_DIRS}
- PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
-
-LIST(APPEND ORC_LIBRARY
- ${ORC_LIB}
+find_program(ORCC_EXECUTABLE orcc
+ HINTS ${PC_ORC_TOOLSDIR}
+ PATHS ${ORC_ROOT}/bin
+ ${CMAKE_INSTALL_PREFIX}/bin
)
+find_path(ORC_INCLUDE_DIR
+ NAMES orc/orc.h
+ HINTS ${PC_ORC_INCLUDEDIR}
+ PATHS ${ORC_ROOT}/include/orc-0.4
+ ${CMAKE_INSTALL_PREFIX}/include/orc-0.4
+)
-SET(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR})
-SET(ORC_LIBRARIES ${ORC_LIBRARY})
-SET(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR})
+find_path(ORC_LIBRARY_DIR
+ NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX}
+ HINTS ${PC_ORC_LIBDIR}
+ /usr/local/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/i386-linux-gnu
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/powerpc-linux-gnu
+ /usr/lib/powerpc64-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/hppa-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/lib64
+ /usr/lib
+ ${ORC_ROOT}/lib
+ $ENV{ORC_ROOT}/lib
+ PATHS
+ ${ORC_ROOT}/lib${LIB_SUFFIX}
+ ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}
+)
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE)
+find_library(ORC_LIB orc-0.4
+ HINTS ${PC_ORC_LIBRARY_DIRS}
+ PATHS ${ORC_ROOT}/lib${LIB_SUFFIX}
+ ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}
+)
-mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE)
\ No newline at end of file
+list(APPEND ORC_LIBRARY ${ORC_LIB})
+
+set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR})
+set(ORC_LIBRARIES ${ORC_LIBRARY})
+set(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE)
+
+mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE)
diff --git a/cmake/Modules/FindOpenBLAS.cmake b/cmake/Modules/FindOpenBLAS.cmake
deleted file mode 100644
index d8751b216..000000000
--- a/cmake/Modules/FindOpenBLAS.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-# - Try to find OpenBLAS library (not headers!)
-#
-# The following environment variable is optionally searched
-# OPENBLAS_HOME: Base directory where all OpenBlas components are found
-
-SET(OPEN_BLAS_SEARCH_PATHS /lib/
- /lib64/
- /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib64
- /opt/OpenBLAS/lib
- /opt/local/lib
- /usr/lib/openblas-base
- $ENV{OPENBLAS_HOME}/lib
- )
-
-FIND_LIBRARY(OPENBLAS NAMES openblas PATHS ${OPEN_BLAS_SEARCH_PATHS})
-
-IF (OPENBLAS)
- SET(OPENBLAS_FOUND ON)
- MESSAGE(STATUS "Found OpenBLAS")
-ENDIF (OPENBLAS)
-
-MARK_AS_ADVANCED(OPENBLAS)
diff --git a/cmake/Modules/FindOpenCL.cmake b/cmake/Modules/FindOpenCL.cmake
deleted file mode 100644
index 1229090a9..000000000
--- a/cmake/Modules/FindOpenCL.cmake
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# This file taken from FindOpenCL project @ http://gitorious.com/findopencl
-#
-# - Try to find OpenCL
-# This module tries to find an OpenCL implementation on your system. It supports
-# AMD / ATI, Apple and NVIDIA implementations, but shoudl work, too.
-#
-# Once done this will define
-# OPENCL_FOUND - system has OpenCL
-# OPENCL_INCLUDE_DIRS - the OpenCL include directory
-# OPENCL_LIBRARIES - link these to use OpenCL
-#
-# WIN32 should work, but is untested
-
-FIND_PACKAGE( PackageHandleStandardArgs )
-
-SET (OPENCL_VERSION_STRING "0.1.0")
-SET (OPENCL_VERSION_MAJOR 0)
-SET (OPENCL_VERSION_MINOR 1)
-SET (OPENCL_VERSION_PATCH 0)
-
-IF (APPLE)
-
- FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX")
- FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX")
- FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX")
-
-ELSE (APPLE)
-
- IF (WIN32)
-
- FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h)
- FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp)
-
- # The AMD SDK currently installs both x86 and x86_64 libraries
- # This is only a hack to find out architecture
- IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
- SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86_64")
- SET(OPENCL_LIB_DIR "$ENV{ATIINTERNALSTREAMSDKROOT}/lib/x86_64")
- ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
- SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86")
- SET(OPENCL_LIB_DIR "$ENV{ATIINTERNALSTREAMSDKROOT}/lib/x86")
- ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
-
- # find out if the user asked for a 64-bit build, and use the corresponding
- # 64 or 32 bit NVIDIA library paths to the search:
- STRING(REGEX MATCH "Win64" ISWIN64 ${CMAKE_GENERATOR})
- IF("${ISWIN64}" STREQUAL "Win64")
- FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR} $ENV{CUDA_LIB_PATH} $ENV{CUDA_PATH}/lib/x64)
- ELSE("${ISWIN64}" STREQUAL "Win64")
- FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR} $ENV{CUDA_LIB_PATH} $ENV{CUDA_PATH}/lib/Win32)
- ENDIF("${ISWIN64}" STREQUAL "Win64")
-
- GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
-
- # On Win32 search relative to the library
- FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}" $ENV{CUDA_INC_PATH} $ENV{CUDA_PATH}/include)
- FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}" $ENV{CUDA_INC_PATH} $ENV{CUDA_PATH}/include)
-
- ELSE (WIN32)
-
- # Unix style platforms
- FIND_LIBRARY(OPENCL_LIBRARIES OpenCL
- ENV LD_LIBRARY_PATH
- )
-
- GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH)
- GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
-
- # The AMD SDK currently does not place its headers
- # in /usr/include, therefore also search relative
- # to the library
- FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include")
- FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include")
-
- ENDIF (WIN32)
-
-ENDIF (APPLE)
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS( OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS )
-
-IF( _OPENCL_CPP_INCLUDE_DIRS )
- SET( OPENCL_HAS_CPP_BINDINGS TRUE )
- LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} )
- # This is often the same, so clean up
- LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS )
-ENDIF( _OPENCL_CPP_INCLUDE_DIRS )
-
-MARK_AS_ADVANCED(
- OPENCL_INCLUDE_DIRS
-)
-
-IF( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES )
- SET( OPENCL_FOUND TRUE )
- add_definitions( -DOPENCL=1 )
-ELSE( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES )
- SET( OPENCL_FOUND FALSE )
- add_definitions( -DOPENCL=0 )
-ENDIF( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES )
diff --git a/cmake/Modules/FindPCAP.cmake b/cmake/Modules/FindPCAP.cmake
new file mode 100644
index 000000000..af746c852
--- /dev/null
+++ b/cmake/Modules/FindPCAP.cmake
@@ -0,0 +1,122 @@
+###################################################################
+#
+# Copyright (c) 2006 Frederic Heem,
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# * Neither the name of the Telsey nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+###################################################################
+# - Find pcap
+# Find the PCAP includes and library
+# http://www.tcpdump.org/
+#
+# The environment variable PCAPDIR allows to specficy where to find
+# libpcap in non standard location.
+#
+# PCAP_INCLUDE_DIRS - where to find pcap.h, etc.
+# PCAP_LIBRARIES - List of libraries when using pcap.
+# PCAP_FOUND - True if pcap found.
+
+
+if(EXISTS $ENV{PCAPDIR})
+ find_path(PCAP_INCLUDE_DIR
+ NAMES
+ pcap/pcap.h
+ pcap.h
+ PATHS
+ $ENV{PCAPDIR}
+ ${PCAP_ROOT}/include
+ $ENV{PCAP_ROOT}/include
+ NO_DEFAULT_PATH
+ )
+ find_library(PCAP_LIBRARY
+ NAMES
+ pcap
+ PATHS
+ $ENV{PCAPDIR}
+ ${PCAP_ROOT}/lib
+ $ENV{PCAP_ROOT}/lib
+ NO_DEFAULT_PATH
+ )
+else()
+ find_path(PCAP_INCLUDE_DIR
+ NAMES
+ pcap/pcap.h
+ pcap.h
+ HINTS
+ ${PCAP_ROOT}/include
+ $ENV{PCAP_ROOT}/include
+ )
+ find_library(PCAP_LIBRARY
+ NAMES
+ pcap
+ HINTS
+ ${PCAP_ROOT}/lib
+ $ENV{PCAP_ROOT}/lib
+ )
+endif()
+
+set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR})
+set(PCAP_LIBRARIES ${PCAP_LIBRARY})
+
+if(PCAP_INCLUDE_DIRS)
+ message(STATUS "Pcap include dirs set to ${PCAP_INCLUDE_DIRS}")
+else()
+ message(FATAL " Pcap include dirs cannot be found")
+endif()
+
+if(PCAP_LIBRARIES)
+ message(STATUS "Pcap library set to ${PCAP_LIBRARIES}")
+else()
+ message(FATAL "Pcap library cannot be found")
+endif()
+
+#Functions
+include(CheckFunctionExists)
+set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS})
+set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES})
+check_function_exists("pcap_breakloop" HAVE_PCAP_BREAKLOOP)
+check_function_exists("pcap_datalink_name_to_val" HAVE_PCAP_DATALINK_NAME_TO_VAL)
+check_function_exists("pcap_datalink_val_to_name" HAVE_PCAP_DATALINK_VAL_TO_NAME)
+check_function_exists("pcap_findalldevs" HAVE_PCAP_FINDALLDEVS)
+check_function_exists("pcap_freecode" HAVE_PCAP_FREECODE)
+check_function_exists("pcap_get_selectable_fd" HAVE_PCAP_GET_SELECTABLE_FD)
+check_function_exists("pcap_lib_version" HAVE_PCAP_LIB_VERSION)
+check_function_exists("pcap_list_datalinks" HAVE_PCAP_LIST_DATALINKS)
+check_function_exists("pcap_open_dead" HAVE_PCAP_OPEN_DEAD)
+check_function_exists("pcap_set_datalink" HAVE_PCAP_SET_DATALINK)
+
+mark_as_advanced(
+ PCAP_LIBRARIES
+ PCAP_INCLUDE_DIRS
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PCAP DEFAULT_MSG PCAP_INCLUDE_DIRS PCAP_LIBRARIES)
diff --git a/cmake/Modules/FindPUGIXML.cmake b/cmake/Modules/FindPUGIXML.cmake
new file mode 100644
index 000000000..236a4c95a
--- /dev/null
+++ b/cmake/Modules/FindPUGIXML.cmake
@@ -0,0 +1,75 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+# Find the pugixml XML parsing library.
+#
+# Sets the usual variables expected for find_package scripts:
+#
+# PUGIXML_INCLUDE_DIR - header location
+# PUGIXML_LIBRARIES - library to link against
+# PUGIXML_FOUND - true if pugixml was found.
+
+find_path(PUGIXML_INCLUDE_DIR
+ NAMES pugixml.hpp
+ PATHS ${PUGIXML_HOME}/include
+ /usr/include
+ /usr/local/include
+ /opt/local/include
+ ${PUGIXML_ROOT}/include
+ $ENV{PUGIXML_ROOT}/include
+)
+
+find_library(PUGIXML_LIBRARY
+ NAMES pugixml
+ PATHS ${PUGIXML_HOME}/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib/aarch64-linux-gnu
+ /usr/lib/arm-linux-gnueabi
+ /usr/lib/arm-linux-gnueabihf
+ /usr/lib/i386-linux-gnu
+ /usr/lib/mips-linux-gnu
+ /usr/lib/mips64el-linux-gnuabi64
+ /usr/lib/mipsel-linux-gnu
+ /usr/lib/powerpc64le-linux-gnu
+ /usr/lib/s390x-linux-gnu
+ /usr/local/lib
+ /opt/local/lib
+ /usr/lib
+ /usr/lib64
+ /usr/local/lib64
+ ${PUGIXML_ROOT}/lib
+ $ENV{PUGIXML_ROOT}/lib
+ ${PUGIXML_ROOT}/lib64
+ $ENV{PUGIXML_ROOT}/lib64
+)
+
+# Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found.
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PUGIXML DEFAULT_MSG PUGIXML_LIBRARY
+ PUGIXML_INCLUDE_DIR)
+
+if(PUGIXML_FOUND)
+ set(PUGIXML_LIBRARIES ${PUGIXML_LIBRARY})
+ if(NOT PUGIXML_FIND_QUIETLY)
+ message(STATUS "PugiXML include = ${PUGIXML_INCLUDE_DIR}")
+ message(STATUS "PugiXML library = ${PUGIXML_LIBRARY}")
+ endif()
+else()
+ message(STATUS "PugiXML not found.")
+endif()
+
+mark_as_advanced(PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR)
diff --git a/cmake/Modules/FindTeleorbit.cmake b/cmake/Modules/FindTeleorbit.cmake
deleted file mode 100644
index 0d2d3c505..000000000
--- a/cmake/Modules/FindTeleorbit.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_TELEORBIT teleorbit)
-
-FIND_PATH(
- TELEORBIT_INCLUDE_DIRS
- NAMES teleorbit/api.h
- HINTS $ENV{TELEORBIT_DIR}/include
- ${PC_TELEORBIT_INCLUDEDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/include
- /usr/local/include
- /usr/include
-)
-
-FIND_LIBRARY(
- TELEORBIT_LIBRARIES
- NAMES gnuradio-teleorbit
- HINTS $ENV{TELEORBIT_DIR}/lib
- ${PC_TELEORBIT_LIBDIR}
- PATHS ${CMAKE_INSTALL_PREFIX}/lib
- ${CMAKE_INSTALL_PREFIX}/lib64
- /usr/local/lib
- /usr/local/lib64
- /usr/lib
- /usr/lib64
-)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(TELEORBIT DEFAULT_MSG TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS)
-MARK_AS_ADVANCED(TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindUHD.cmake b/cmake/Modules/FindUHD.cmake
index 3534e6b87..31d299937 100644
--- a/cmake/Modules/FindUHD.cmake
+++ b/cmake/Modules/FindUHD.cmake
@@ -1,25 +1,42 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
########################################################################
# Find the library for the USRP Hardware Driver
########################################################################
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_UHD uhd)
+include(FindPkgConfig)
+pkg_check_modules(PC_UHD uhd)
-FIND_PATH(
- UHD_INCLUDE_DIRS
+find_path(UHD_INCLUDE_DIRS
NAMES uhd/config.hpp
HINTS $ENV{UHD_DIR}/include
- ${PC_UHD_INCLUDEDIR}
+ ${PC_UHD_INCLUDEDIR}
PATHS /usr/local/include
/usr/include
${GNURADIO_INSTALL_PREFIX}/include
+ ${UHD_ROOT}/include
+ $ENV{UHD_ROOT}/include
)
-FIND_LIBRARY(
- UHD_LIBRARIES
+find_library(UHD_LIBRARIES
NAMES uhd
HINTS $ENV{UHD_DIR}/lib
- ${PC_UHD_LIBDIR}
+ ${PC_UHD_LIBDIR}
PATHS /usr/local/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
@@ -47,8 +64,12 @@ FIND_LIBRARY(
/usr/lib64
/usr/lib
${GNURADIO_INSTALL_PREFIX}/lib
+ ${UHD_ROOT}/lib
+ $ENV{UHD_ROOT}/lib
+ ${UHD_ROOT}/lib64
+ $ENV{UHD_ROOT}/lib64
)
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
-MARK_AS_ADVANCED(UHD_LIBRARIES UHD_INCLUDE_DIRS)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
+mark_as_advanced(UHD_LIBRARIES UHD_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindVolk.cmake b/cmake/Modules/FindVOLK.cmake
similarity index 54%
rename from cmake/Modules/FindVolk.cmake
rename to cmake/Modules/FindVOLK.cmake
index 9621e16f7..97191179c 100644
--- a/cmake/Modules/FindVolk.cmake
+++ b/cmake/Modules/FindVOLK.cmake
@@ -1,22 +1,39 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
########################################################################
# Find VOLK (Vector-Optimized Library of Kernels)
########################################################################
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_VOLK volk)
+include(FindPkgConfig)
+pkg_check_modules(PC_VOLK volk)
-FIND_PATH(
- VOLK_INCLUDE_DIRS
+find_path(VOLK_INCLUDE_DIRS
NAMES volk/volk.h
HINTS $ENV{VOLK_DIR}/include
${PC_VOLK_INCLUDEDIR}
PATHS /usr/local/include
/usr/include
${CMAKE_INSTALL_PREFIX}/include
+ ${VOLK_ROOT}/include
+ $ENV{VOLK_ROOT}/include
)
-FIND_LIBRARY(
- VOLK_LIBRARIES
+find_library(VOLK_LIBRARIES
NAMES volk
HINTS $ENV{VOLK_DIR}/lib
${PC_VOLK_LIBDIR}
@@ -48,9 +65,12 @@ FIND_LIBRARY(
/usr/lib/alpha-linux-gnu
/usr/lib64
${CMAKE_INSTALL_PREFIX}/lib
+ ${VOLK_ROOT}/lib
+ $ENV{VOLK_ROOT}/lib
+ ${VOLK_ROOT}/lib64
+ $ENV{VOLK_ROOT}/lib64
)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)
-MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)
+mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION)
diff --git a/cmake/Modules/FindVolkGnssSdr.cmake b/cmake/Modules/FindVolkGnssSdr.cmake
deleted file mode 100644
index b5890966b..000000000
--- a/cmake/Modules/FindVolkGnssSdr.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
-########################################################################
-# Find VOLK (Vector-Optimized Library of Kernels) GNSS-SDR library
-########################################################################
-
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_VOLK_GNSSSDR volk_gnsssdr)
-
-FIND_PATH(
- VOLK_GNSSSDR_INCLUDE_DIRS
- NAMES volk_gnsssdr/volk_gnsssdr.h
- HINTS $ENV{VOLK_GNSSSDR_DIR}/include
- ${PC_VOLK_GNSSSDR_INCLUDEDIR}
- PATHS /usr/local/include
- /usr/include
- ${GNURADIO_INSTALL_PREFIX}/include
-)
-
-FIND_LIBRARY(
- VOLK_GNSSSDR_LIBRARIES
- NAMES volk_gnsssdr
- HINTS $ENV{VOLK_GNSSSDR_DIR}/lib
- ${PC_VOLK_GNSSSDR_LIBDIR}
- PATHS /usr/local/lib
- /usr/local/lib64
- /usr/lib
- /usr/lib64
- ${GNURADIO_INSTALL_PREFIX}/lib
-)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK_GNSSSDR DEFAULT_MSG VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS)
-MARK_AS_ADVANCED(VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS)
\ No newline at end of file
diff --git a/cmake/Modules/GnsssdrBuildTypes.cmake b/cmake/Modules/GnsssdrBuildTypes.cmake
new file mode 100644
index 000000000..a80cd0c6b
--- /dev/null
+++ b/cmake/Modules/GnsssdrBuildTypes.cmake
@@ -0,0 +1,219 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+if(DEFINED __INCLUDED_GNSSSDR_BUILD_TYPES_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GNSSSDR_BUILD_TYPES_CMAKE TRUE)
+
+# Standard CMake Build Types and their basic CFLAGS:
+# - None: nothing set
+# - Debug: -O2 -g
+# - Release: -O3
+# - RelWithDebInfo: -O3 -g
+# - MinSizeRel: -Os
+
+# Additional Build Types, defined below:
+# - NoOptWithASM: -O0 -g -save-temps
+# - O2WithASM: -O2 -g -save-temps
+# - O3WithASM: -O3 -g -save-temps
+
+# Defines the list of acceptable cmake build types. When adding a new
+# build type below, make sure to add it to this list.
+list(APPEND AVAIL_BUILDTYPES
+ None Debug Release RelWithDebInfo MinSizeRel
+ Coverage NoOptWithASM O2WithASM O3WithASM ASAN
+)
+
+########################################################################
+# GNSSSDR_CHECK_BUILD_TYPE(build type)
+#
+# Use this to check that the build type set in CMAKE_BUILD_TYPE on the
+# commandline is one of the valid build types used by this project. It
+# checks the value set in the cmake interface against the list of
+# known build types in AVAIL_BUILDTYPES. If the build type is found,
+# the function exits immediately. If nothing is found by the end of
+# checking all available build types, we exit with an error and list
+# the avialable build types.
+########################################################################
+function(GNSSSDR_CHECK_BUILD_TYPE settype)
+ string(TOUPPER ${settype} _settype)
+ foreach(btype ${AVAIL_BUILDTYPES})
+ string(TOUPPER ${btype} _btype)
+ if(${_settype} STREQUAL ${_btype})
+ return() # found it; exit cleanly
+ endif()
+ endforeach()
+ # Build type not found; error out
+ message(FATAL_ERROR "Build type '${settype}' not valid, must be one of: ${AVAIL_BUILDTYPES}")
+endfunction()
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=Coverage
+#
+# This type uses no optimization (-O0), outputs debug symbols (-g) and
+# outputs all intermediary files the build system produces, including
+# all assembly (.s) files. Look in the build directory for these
+# files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS_COVERAGE "-Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING
+ "Flags used by the C++ compiler during Coverage builds." FORCE)
+ set(CMAKE_C_FLAGS_COVERAGE "-Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING
+ "Flags used by the C compiler during Coverage builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
+ "-W" CACHE STRING
+ "Flags used for linking binaries during Coverage builds." FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
+ "-W" CACHE STRING
+ "Flags used by the shared lib linker during Coverage builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_COVERAGE
+ CMAKE_C_FLAGS_COVERAGE
+ CMAKE_EXE_LINKER_FLAGS_COVERAGE
+ CMAKE_SHARED_LINKER_FLAGS_COVERAGE)
+endif()
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=NoOptWithASM
+#
+# This type uses no optimization (-O0), outputs debug symbols (-g) and
+# outputs all intermediary files the build system produces, including
+# all assembly (.s) files. Look in the build directory for these
+# files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING
+ "Flags used by the C++ compiler during NoOptWithASM builds." FORCE)
+ set(CMAKE_C_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING
+ "Flags used by the C compiler during NoOptWithASM builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM
+ "-W" CACHE STRING
+ "Flags used for linking binaries during NoOptWithASM builds." FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM
+ "-W" CACHE STRING
+ "Flags used by the shared lib linker during NoOptWithASM builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_NOOPTWITHASM
+ CMAKE_C_FLAGS_NOOPTWITHASM
+ CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM
+ CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM)
+endif()
+
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=O2WithASM
+#
+# This type uses level 2 optimization (-O2), outputs debug symbols
+# (-g) and outputs all intermediary files the build system produces,
+# including all assembly (.s) files. Look in the build directory for
+# these files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+
+if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING
+ "Flags used by the C++ compiler during O2WithASM builds." FORCE)
+ set(CMAKE_C_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING
+ "Flags used by the C compiler during O2WithASM builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_O2WITHASM
+ "-W" CACHE STRING
+ "Flags used for linking binaries during O2WithASM builds." FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_O2WITHASM
+ "-W" CACHE STRING
+ "Flags used by the shared lib linker during O2WithASM builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_O2WITHASM
+ CMAKE_C_FLAGS_O2WITHASM
+ CMAKE_EXE_LINKER_FLAGS_O2WITHASM
+ CMAKE_SHARED_LINKER_FLAGS_O2WITHASM)
+endif()
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=O3WithASM
+#
+# This type uses level 3 optimization (-O3), outputs debug symbols
+# (-g) and outputs all intermediary files the build system produces,
+# including all assembly (.s) files. Look in the build directory for
+# these files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+
+if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING
+ "Flags used by the C++ compiler during O3WithASM builds." FORCE)
+ set(CMAKE_C_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING
+ "Flags used by the C compiler during O3WithASM builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_O3WITHASM
+ "-W" CACHE STRING
+ "Flags used for linking binaries during O3WithASM builds." FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_O3WITHASM
+ "-W" CACHE STRING
+ "Flags used by the shared lib linker during O3WithASM builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_O3WITHASM
+ CMAKE_C_FLAGS_O3WITHASM
+ CMAKE_EXE_LINKER_FLAGS_O3WITHASM
+ CMAKE_SHARED_LINKER_FLAGS_O3WITHASM)
+endif()
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=ASAN
+#
+# This type creates an address sanitized build (-fsanitize=address)
+# and defaults to the DebugParanoid linker flags.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS_ASAN "-Wall -Wextra -g -O2 -fsanitize=address -fno-omit-frame-pointer" CACHE STRING
+ "Flags used by the C++ compiler during Address Sanitized builds." FORCE)
+ set(CMAKE_C_FLAGS_ASAN "-Wall -Wextra -g -O2 -fsanitize=address -fno-omit-frame-pointer" CACHE STRING
+ "Flags used by the C compiler during Address Sanitized builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_ASAN
+ "-W" CACHE STRING
+ "Flags used for linking binaries during Address Sanitized builds." FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_ASAN
+ "-W" CACHE STRING
+ "Flags used by the shared lib linker during Address Sanitized builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_ASAN
+ CMAKE_C_FLAGS_ASAN
+ CMAKE_EXE_LINKER_FLAGS_ASAN
+ CMAKE_SHARED_LINKER_ASAN)
+endif()
diff --git a/cmake/Modules/SetupPython.cmake b/cmake/Modules/SetupPython.cmake
index d3c2b3a12..f3d59c900 100644
--- a/cmake/Modules/SetupPython.cmake
+++ b/cmake/Modules/SetupPython.cmake
@@ -1,51 +1,20 @@
-########################################################################
-# Setup the python interpreter:
-# This allows the user to specify a specific interpreter,
-# or finds the interpreter via the built-in cmake module.
-########################################################################
-#this allows the user to override PYTHON_EXECUTABLE
-if(PYTHON_EXECUTABLE)
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
- set(PYTHONINTERP_FOUND TRUE)
-
-#otherwise if not set, try to automatically find it
-else(PYTHON_EXECUTABLE)
-
- #use the built-in find script
- set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6)
- find_package(PythonInterp 2)
-
- #and if that fails use the find program routine
- if(NOT PYTHONINTERP_FOUND)
- find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python3)
- if(PYTHON_EXECUTABLE)
- set(PYTHONINTERP_FOUND TRUE)
- endif(PYTHON_EXECUTABLE)
- endif(NOT PYTHONINTERP_FOUND)
-
-endif(PYTHON_EXECUTABLE)
-
-if (CMAKE_CROSSCOMPILING)
- set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
-else (CMAKE_CROSSCOMPILING)
- set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
-endif(CMAKE_CROSSCOMPILING)
-
-#make the path to the executable appear in the cmake gui
-set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
-set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
-
-#make sure we can use -B with python (introduced in 2.6)
-if(PYTHON_EXECUTABLE)
- execute_process(
- COMMAND ${PYTHON_EXECUTABLE} -B -c ""
- OUTPUT_QUIET ERROR_QUIET
- RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
- )
- if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
- set(PYTHON_DASH_B "-B")
- endif()
-endif(PYTHON_EXECUTABLE)
########################################################################
# Check for the existence of a python module:
@@ -54,25 +23,97 @@ endif(PYTHON_EXECUTABLE)
# - cmd an additional command to run
# - have the result variable to set
########################################################################
-macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have)
- message(STATUS "Python checking for ${desc}")
+macro(GNSSSDR_PYTHON_CHECK_MODULE_RAW desc python_code have)
execute_process(
- COMMAND ${PYTHON_EXECUTABLE} -c "
-#########################################
-try: import ${mod}
-except:
- try: ${mod}
- except: exit(-1)
-try: assert ${cmd}
-except: exit(-1)
-#########################################"
- RESULT_VARIABLE ${have}
+ COMMAND ${PYTHON_EXECUTABLE} -c "${python_code}"
+ OUTPUT_QUIET ERROR_QUIET
+ RESULT_VARIABLE return_code
)
- if(${have} EQUAL 0)
+ if(return_code EQUAL 0)
message(STATUS "Python checking for ${desc} - found")
set(${have} TRUE)
- else(${have} EQUAL 0)
+ else()
message(STATUS "Python checking for ${desc} - not found")
set(${have} FALSE)
- endif(${have} EQUAL 0)
-endmacro(GNSSSDR_PYTHON_CHECK_MODULE)
+ endif()
+endmacro()
+
+macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have)
+ gnsssdr_python_check_module_raw(
+ "${desc}" "
+#########################################
+try:
+ import ${mod}
+ assert ${cmd}
+except (ImportError, AssertionError): exit(-1)
+except: pass
+#########################################"
+ "${have}")
+endmacro()
+
+
+########################################################################
+# Setup the python interpreter:
+# This allows the user to specify a specific interpreter,
+# or finds the interpreter via the built-in cmake module.
+########################################################################
+
+if(CMAKE_VERSION VERSION_LESS 3.12)
+ if(PYTHON_EXECUTABLE)
+ message(STATUS "User set python executable ${PYTHON_EXECUTABLE}")
+ string(FIND "${PYTHON_EXECUTABLE}" "python3" IS_PYTHON3)
+ if(IS_PYTHON3 EQUAL -1)
+ find_package(PythonInterp ${GNSSSDR_PYTHON_MIN_VERSION} REQUIRED)
+ else()
+ find_package(PythonInterp ${GNSSSDR_PYTHON3_MIN_VERSION} REQUIRED)
+ endif()
+ gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
+ gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
+ gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
+ else()
+ message(STATUS "PYTHON_EXECUTABLE not set - trying by default python2")
+ message(STATUS "Use -DPYTHON_EXECUTABLE=/path/to/python3 to build for python3.")
+ find_package(PythonInterp ${GNSSSDR_PYTHON_MIN_VERSION})
+ if(NOT PYTHONINTERP_FOUND)
+ message(STATUS "python2 not found - trying with python3")
+ find_package(PythonInterp ${GNSSSDR_PYTHON3_MIN_VERSION} REQUIRED)
+ endif()
+ gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
+ gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
+ gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
+ endif()
+ find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT)
+else()
+ find_package(Python3 COMPONENTS Interpreter)
+ if(Python3_FOUND)
+ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
+ set(PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR})
+ gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
+ gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
+ gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
+ endif()
+ if(NOT Python3_FOUND OR NOT MAKO_FOUND OR NOT SIX_FOUND)
+ find_package(Python2 COMPONENTS Interpreter)
+ if(Python2_FOUND)
+ set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE})
+ set(PYTHON_VERSION_MAJOR ${Python2_VERSION_MAJOR})
+ gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
+ gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
+ gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
+ endif()
+ endif()
+endif()
+
+if(${PYTHON_VERSION_MAJOR} VERSION_EQUAL 3)
+ set(PYTHON3 TRUE)
+endif()
+
+if(CMAKE_CROSSCOMPILING)
+ set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
+else()
+ set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
+endif()
+
+# make the path to the executable appear in the cmake gui
+set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
+set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
diff --git a/cmake/Modules/TestForARM.cmake b/cmake/Modules/TestForARM.cmake
index 437a75e1a..05a5c172e 100644
--- a/cmake/Modules/TestForARM.cmake
+++ b/cmake/Modules/TestForARM.cmake
@@ -1,12 +1,29 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
##############################################################################
-# check if the compiler defines the architecture as ARM and set the
+# check if the compiler defines the architecture as ARM and set the
# version, if found.
#
# - Anthony Arnold
##############################################################################
-if (__TEST_FOR_ARM_INCLUDED)
- return ()
+if(__TEST_FOR_ARM_INCLUDED)
+ return()
endif()
set(__TEST_FOR_ARM_INCLUDED TRUE)
@@ -14,27 +31,27 @@ set(__TEST_FOR_ARM_INCLUDED TRUE)
# output variable if found.
function(check_arm_version ppdef input_string version output_var)
string(REGEX MATCH "${ppdef}" _VERSION_MATCH "${input_string}")
- if (NOT _VERSION_MATCH STREQUAL "")
+ if(NOT _VERSION_MATCH STREQUAL "")
set(${output_var} "${version}" PARENT_SCOPE)
- endif(NOT _VERSION_MATCH STREQUAL "")
+ endif()
endfunction()
message(STATUS "Checking for ARM")
-set (IS_ARM NO)
-set (ARM_VERSION "")
+set(IS_ARM NO)
+set(ARM_VERSION "")
-if (CMAKE_COMPILER_IS_GNUCXX)
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
execute_process(COMMAND echo "int main(){}"
COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dM -E -
OUTPUT_VARIABLE TEST_FOR_ARM_RESULTS)
string(REGEX MATCH "__arm" ARM_FOUND "${TEST_FOR_ARM_RESULTS}")
if(ARM_FOUND STREQUAL "")
- string(REGEX MATCH "__aarch64" ARM_FOUND "${TEST_FOR_ARM_RESULTS}")
- endif(ARM_FOUND STREQUAL "")
+ string(REGEX MATCH "__aarch64" ARM_FOUND "${TEST_FOR_ARM_RESULTS}")
+ endif()
- if (NOT ARM_FOUND STREQUAL "")
+ if(NOT ARM_FOUND STREQUAL "")
set(IS_ARM YES)
message(STATUS "ARM system detected")
@@ -66,22 +83,21 @@ if (CMAKE_COMPILER_IS_GNUCXX)
check_arm_version("__ARM_ARCH_8A" ${TEST_FOR_ARM_RESULTS} "armv8-a" ARM_VERSION)
# anything else just define as arm
- if (ARM_VERSION STREQUAL "")
+ if(ARM_VERSION STREQUAL "")
message(STATUS "Couldn't detect ARM version. Setting to 'arm'")
set(ARM_VERSION "arm")
- else (ARM_VERSION STREQUAL "")
+ else()
message(STATUS "ARM version ${ARM_VERSION} detected")
- endif (ARM_VERSION STREQUAL "")
-
- else (NOT ARM_FOUND STREQUAL "")
- message(STATUS "System is not ARM")
- endif(NOT ARM_FOUND STREQUAL "")
+ endif()
+ else()
+ message(STATUS "System is not ARM")
+ endif()
-else (CMAKE_COMPILE_IS_GNUCXX)
+else()
# TODO: Other compilers
message(STATUS "Not detecting ARM on non-GNUCXX compiler. Defaulting to false")
message(STATUS "If you are compiling for ARM, set IS_ARM=ON manually")
-endif(CMAKE_COMPILER_IS_GNUCXX)
+endif()
set(IS_ARM ${IS_ARM} CACHE BOOL "Compiling for ARM")
set(ARM_VERSION ${ARM_VERSION} CACHE STRING "ARM version")
diff --git a/cmake/Modules/TestForSSE.cmake b/cmake/Modules/TestForSSE.cmake
index 1280f83b3..23b2d16a8 100644
--- a/cmake/Modules/TestForSSE.cmake
+++ b/cmake/Modules/TestForSSE.cmake
@@ -1,24 +1,41 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+
###############################################################################
# Test for availability of SSE
#
# - Anthony Arnold
###############################################################################
-
-function (test_for_sse h_file result_var name)
- if (NOT DEFINED ${result_var})
+function(test_for_sse h_file result_var name)
+ if(NOT DEFINED ${result_var})
execute_process(COMMAND echo "#include <${h_file}>"
- COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -c -x c++ -
- RESULT_VARIABLE COMPILE_RESULT
- OUTPUT_QUIET ERROR_QUIET)
+ COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -c -x c++ -
+ RESULT_VARIABLE COMPILE_RESULT
+ OUTPUT_QUIET ERROR_QUIET)
set(detected 0)
- if (COMPILE_RESULT EQUAL 0)
+ if(COMPILE_RESULT EQUAL 0)
message(STATUS "Detected ${name}")
set(detected 1)
- endif(COMPILE_RESULT EQUAL 0)
+ endif()
set(${result_var} ${detected} CACHE INTERNAL "${name} Available")
- endif (NOT DEFINED ${result_var})
-endfunction(test_for_sse)
+ endif()
+endfunction()
message(STATUS "Testing for SIMD extensions")
diff --git a/cmake/Toolchains/oe-sdk_cross.cmake b/cmake/Toolchains/oe-sdk_cross.cmake
index 06f589c34..dd7aedf5f 100644
--- a/cmake/Toolchains/oe-sdk_cross.cmake
+++ b/cmake/Toolchains/oe-sdk_cross.cmake
@@ -1,20 +1,37 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
##########################################################
# Toolchain file for Open Embedded
##########################################################
-set( CMAKE_SYSTEM_NAME Linux )
+set(CMAKE_SYSTEM_NAME Linux)
string(REGEX MATCH "sysroots/([a-zA-Z0-9]+)" CMAKE_SYSTEM_PROCESSOR $ENV{SDKTARGETSYSROOT})
string(REGEX REPLACE "sysroots/" "" CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
-set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE )
-set( CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE ) #same flags for C sources
-set( CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE ) #same flags for C sources
-set( CMAKE_LIBRARY_PATH $ENV{OECORE_TARGET_SYSROOT}/usr/lib )
+set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE)
+set(CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE) # same flags for C sources
+set(CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources
+set(CMAKE_LIBRARY_PATH $ENV{OECORE_TARGET_SYSROOT}/usr/lib)
-set( CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} $ENV{OECORE_NATIVE_SYSROOT} )
-set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
-set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
-set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+set(CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} $ENV{OECORE_NATIVE_SYSROOT})
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set ( ORC_INCLUDE_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/include/orc-0.4 )
-set ( ORC_LIBRARY_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/lib )
+set(ORC_INCLUDE_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/include/orc-0.4)
+set(ORC_LIBRARY_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/lib)
diff --git a/cmake/Toolchains/zynq-7000.cmake b/cmake/Toolchains/zynq-7000.cmake
index 9ce876e56..18cb416fa 100644
--- a/cmake/Toolchains/zynq-7000.cmake
+++ b/cmake/Toolchains/zynq-7000.cmake
@@ -1,3 +1,20 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
##########################################################
# Toolchain file for Zynq-7000 devices
##########################################################
@@ -23,4 +40,4 @@ set(CMAKE_CXX_FLAGS ${ZYNQ_FLAGS} CACHE STRING "" FORCE)
set(CMAKE_LIBRARY_PATH ${CMAKE_SYSROOT}/usr/lib
${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf)
-set(CMAKE_INSTALL_PREFIX ${CMAKE_SYSROOT}/usr CACHE STRING "" FORCE)
\ No newline at end of file
+set(CMAKE_INSTALL_PREFIX ${CMAKE_SYSROOT}/usr CACHE STRING "" FORCE)
diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in
index 2c34c8199..a0004acc5 100644
--- a/cmake/cmake_uninstall.cmake.in
+++ b/cmake/cmake_uninstall.cmake.in
@@ -1,21 +1,38 @@
+# Copyright (C) 2011-2018 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif()
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
- exec_program(
- "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ execute_process(
+ COMMAND @CMAKE_COMMAND@ -E remove \"$ENV{DESTDIR}${file}\"
OUTPUT_VARIABLE rm_out
- RETURN_VALUE rm_retval
- )
+ RESULT_VARIABLE rm_retval
+ )
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
- endif(NOT "${rm_retval}" STREQUAL 0)
- else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ endif()
+ else()
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
- endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
-endforeach(file)
\ No newline at end of file
+ endif()
+endforeach()
diff --git a/conf/front-end-cal.conf b/conf/front-end-cal.conf
index 6f9d898d4..8a2b55cb5 100644
--- a/conf/front-end-cal.conf
+++ b/conf/front-end-cal.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Default configuration file
; You can define your own front-end calibration tool configuration and invoke it by doing
; ./front-end-cal --config_file=my_GNSS_SDR_configuration.conf
@@ -18,13 +21,13 @@ GNSS-SDR.init_altitude_m=10
; Mozoncillo
;GNSS-SDR.init_latitude_deg=41.14534824586196
-;GNSS-SDR.init_longitude_deg=-4.187125019737464
+;GNSS-SDR.init_longitude_deg=-4.187125019737464
;GNSS-SDR.init_altitude_m=900
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
;######### SUPL RRLP GPS assistance configuration #####
; Check http://www.mcc-mnc.com/
@@ -36,41 +39,38 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=217
-GNSS-SDR.SUPL_MNS=7
+GNSS-SDR.SUPL_MNC=7
GNSS-SDR.SUPL_LAC=861
GNSS-SDR.SUPL_CI=40184
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Osmosdr_Signal_Source]
SignalSource.implementation=Osmosdr_Signal_Source
-
-SignalSource.AGC_enabled=false
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-;SignalSource.filename=/datalogger/signals/RTL-SDR/cap_-90dBm_IF15_RF40_EzCap.dat
-SignalSource.filename=/datalogger/signals/Agilent/New York/2msps.dat
-;SignalSource.filename=/datalogger/signals/RTL-SDR/geo/pmt4_no_amp.dat
-;SignalSource.filename=/datalogger/signals/RTL-SDR/geo/pmt4_no_amp_mini.dat
-;SignalSource.filename=/datalogger/signals/RTL-SDR/mozoncillo/cap_mozon_ezcap.dat
-
+;#freq: RF front-end center frequency in [Hz]
+SignalSource.freq=1575420000
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
+;#sampling_frequency: Original Signal sampling frequency in samples per second
SignalSource.sampling_frequency=2000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#gain: Front-end Gain in [dB]
-SignalSource.gain=40
+;#gain: Front-end Gain in [dB]
+SignalSource.gain=40
SignalSource.rf_gain=40
SignalSource.if_gain=30
+SignalSource.AGC_enabled=false
-;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
-SignalSource.subdevice=B:0
+;# Please note that the new RTL-SDR Blog V3 dongles ship a < 1 PPM
+;# temperature compensated oscillator (TCXO), which is well suited for GNSS
+;# signal processing, and a 4.5 V powered bias-tee to feed an active antenna.
+;# Whether the bias-tee is turned off before reception depends on which version
+;# of gr-osmosdr was used when compiling GNSS-SDR. With an old version
+;# (for example, v0.1.4-8), the utility rtl_biast may be used to switch the
+;# bias-tee, and then call gnss-sdr.
+;# See https://github.com/rtlsdrblog/rtl_biast
+;# After reception the bias-tee is switched off automatically by the program.
+;# With newer versions of gr-osmosdr (>= 0.1.4-13), the bias-tee can be
+;# activated by uncommenting the following line:
+;SignalSource.osmosdr_args=rtl,bias=1
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
+;#samples: Number of samples to be processed. Notice that 0 means infinite samples.
SignalSource.samples=0
;#repeat: Repeat the processing file.
@@ -82,7 +82,7 @@ SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
+;## It holds blocks to change data type, filter and resample input data.
;#implementation: Use [Pass_Through] or [Signal_Conditioner]
;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -90,7 +90,7 @@ SignalSource.dump_filename=../data/signal_source.dat
SignalConditioner.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
+;## Changes the type of input data.
;#implementation: Use [Ishort_To_Complex] or [Pass_Through]
DataTypeAdapter.implementation=Pass_Through
;#dump: Dump the filtered data to a file.
@@ -108,20 +108,15 @@ DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
InputFilter.implementation=Freq_Xlating_Fir_Filter
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
+;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
+;#the desired response on those bands, and the weight given to the error in those bands.
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+;#input_item_type: Type and resolution for input signal samples.
InputFilter.input_item_type=gr_complex
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+;#outut_item_type: Type and resolution for output filtered signal samples.
InputFilter.output_item_type=gr_complex
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
@@ -156,7 +151,7 @@ InputFilter.ampl2_end=0.0
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
;#grid_density: determines how accurately the filter will be constructed.
@@ -171,6 +166,12 @@ InputFilter.IF=0
InputFilter.decimation_factor=1
+;#dump: Dump the filtered data to a file.
+InputFilter.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter.dump_filename=../data/input_filter.dat
+
;######### RESAMPLER CONFIG ############
;## Resamples the input data.
;#implementation: Use [Pass_Through] or [Direct_Resampler]
@@ -178,15 +179,9 @@ InputFilter.decimation_factor=1
Resampler.implementation=Pass_Through
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition.dump=false
-;#filename: Log path and filename
-Acquisition.dump_filename=./acq_dump.dat
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Acquisition.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition.sampled_ms=1
;#threshold: Acquisition threshold
@@ -199,4 +194,7 @@ Acquisition.doppler_min=-100000
Acquisition.doppler_step=500
;#maximum dwells
Acquisition.max_dwells=15
-
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+Acquisition.dump=false
+;#filename: Log path and filename
+Acquisition.dump_filename=./acq_dump.dat
diff --git a/conf/gnss-sdr-kalman-bayes.conf b/conf/gnss-sdr-kalman-bayes.conf
new file mode 100644
index 000000000..051d080de
--- /dev/null
+++ b/conf/gnss-sdr-kalman-bayes.conf
@@ -0,0 +1,63 @@
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
+GNSS-SDR.internal_fs_hz=2000000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/home/glamountain/gnss-sdr/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
+SignalSource.item_type=ishort
+SignalSource.sampling_frequency=4000000
+SignalSource.freq=1575420000
+SignalSource.samples=0
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ishort_To_Complex
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Direct_Resampler
+Resampler.sample_freq_in=4000000
+Resampler.sample_freq_out=2000000
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+Channel.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=0.008
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=../data/kalman/acq_dump
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_KF_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=../data/kalman/epl_tracking_ch_
+Tracking_1C.bce_run = true;
+Tracking_1C.p_transient = 0;
+Tracking_1C.s_transient = 100;
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=GPS_L1_CA_Observables
+
+;######### PVT CONFIG ############
+PVT.implementation=GPS_L1_CA_PVT
+PVT.averaging_depth=100
+PVT.flag_averaging=true
+PVT.output_rate_ms=10
+PVT.display_rate_ms=500
diff --git a/conf/gnss-sdr.conf b/conf/gnss-sdr.conf
index 88a66f3ee..353bdb2fd 100644
--- a/conf/gnss-sdr.conf
+++ b/conf/gnss-sdr.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Default configuration file
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
@@ -6,8 +9,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,173 +23,68 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
SignalSource.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file.
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
-;SignalConditioner.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ishort_To_Complex
-;DataTypeAdapter.implementation=Pass_Through
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
+InputFilter.implementation=Pass_Through ; or Fir_Filter
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of GNU Radio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.44
InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter.sampling_frequency=4000000
InputFilter.IF=0
-
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resampled data to a file.
Resampler.dump=false
-;#dump_filename: Log path and filename.
Resampler.dump_filename=../data/resampler.dat
-;#item_type: Type and resolution for each of the signal samples.
-Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=2000000
-
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS L1 C/A satellite channels.
Channels_1C.count=6
-;#count: Number of available Galileo E1B satellite channels.
Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
-Channel.signal=1C
-
-
;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
;######### CHANNEL 0 CONFIG ############
;Channel0.signal=1C
-;#satellite: Satellite PRN ID for this channel. Disable this option for random search
;Channel0.satellite=11
;######### CHANNEL 1 CONFIG ############
@@ -194,115 +92,52 @@ Channel.signal=1C
;Channel1.satellite=18
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
-;#threshold: Acquisition threshold
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.005
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_1C.doppler_min=-10000
-;#doppler_step Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
-;#maximum dwells
Acquisition_1C.max_dwells=5
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm:
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=45.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=45.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=3.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm:
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.AR_GPS=PPP-AR ; options: OFF, Continuous, Instantaneous, Fix-and-Hold, PPP-AR
PVT.output_rate_ms=10
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms <= display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
-
-;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=true
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
-;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
PVT.flag_rtcm_server=true
-
-;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_rtcm_tty_port=false
-
-;#rtcm_dump_devname: serial device descriptor for RTCM logging
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
-
-
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf b/conf/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf
new file mode 100644
index 000000000..88c8741b6
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf
@@ -0,0 +1,140 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+Receiver.sources_count=2
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource0.implementation=File_Signal_Source
+SignalSource0.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource0.item_type=ibyte
+SignalSource0.sampling_frequency=6625000
+SignalSource0.samples=0
+SignalSource0.dump=false;
+SignalSource0.dump_filename=/archive/signal_glonass.bin
+
+SignalSource1.implementation=File_Signal_Source
+SignalSource1.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource1.item_type=ibyte
+SignalSource1.sampling_frequency=6625000
+SignalSource1.samples=0
+SignalSource1.dump=false;
+SignalSource1.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+DataTypeAdapter0.implementation=Ibyte_To_Complex
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.70
+InputFilter0.band2_begin=0.80
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.sampling_frequency=6625000
+InputFilter0.IF=60000
+Resampler0.implementation=Direct_Resampler
+Resampler0.sample_freq_in=6625000
+Resampler0.sample_freq_out=6625000
+Resampler0.item_type=gr_complex
+
+SignalConditioner1.implementation=Signal_Conditioner
+DataTypeAdapter1.implementation=Ibyte_To_Complex
+InputFilter1.implementation=Pass_Through
+InputFilter1.item_type=gr_complex
+Resampler1.implementation=Pass_Through
+Resampler1.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels.in_acquisition=1
+Channels_1G.count=5
+Channels_1C.count=5
+
+;# Defining GLONASS satellites
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=1
+Channel6.RF_channel_ID=1
+Channel7.RF_channel_ID=1
+Channel8.RF_channel_ID=1
+Channel9.RF_channel_ID=1
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=0.0
+Acquisition_1C.pfa=0.00001
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false;
+Acquisition_1C.dump_filename=/archive/gps_acquisition.dat
+;Acquisition_1C.coherent_integration_time_ms=10
+
+Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
+Acquisition_1G.item_type=gr_complex
+Acquisition_1G.threshold=0.0
+Acquisition_1G.pfa=0.00001
+Acquisition_1G.doppler_max=10000
+Acquisition_1G.doppler_step=250
+Acquisition_1G.dump=false;
+Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_1G.coherent_integration_time_ms=10
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.early_late_space_chips=0.5
+Tracking_1C.pll_bw_hz=20.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dump=false;
+Tracking_1C.dump_filename=/archive/gps_tracking_ch_
+
+Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
+Tracking_1G.item_type=gr_complex
+Tracking_1G.early_late_space_chips=0.5
+Tracking_1G.pll_bw_hz=25.0;
+Tracking_1G.dll_bw_hz=3.0;
+Tracking_1G.dump=false;
+Tracking_1G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false;
+Observables.dump_filename=/archive/gnss_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf b/conf/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf
new file mode 100644
index 000000000..435194b75
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf
@@ -0,0 +1,141 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+Receiver.sources_count=2
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource0.implementation=File_Signal_Source
+SignalSource0.filename=/archive/NT1065_L2_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource0.item_type=ibyte
+SignalSource0.sampling_frequency=6625000
+SignalSource0.samples=0
+SignalSource0.dump=false;
+SignalSource0.dump_filename=/archive/signal_glonass.bin
+
+SignalSource1.implementation=File_Signal_Source
+SignalSource1.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource1.item_type=ibyte
+SignalSource1.sampling_frequency=6625000
+SignalSource1.samples=0
+SignalSource1.dump=false;
+SignalSource1.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+DataTypeAdapter0.implementation=Ibyte_To_Complex
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.70
+InputFilter0.band2_begin=0.80
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.sampling_frequency=6625000
+InputFilter0.IF=60000
+Resampler0.implementation=Pass_Through
+Resampler0.item_type=gr_complex
+
+SignalConditioner1.implementation=Signal_Conditioner
+DataTypeAdapter1.implementation=Ibyte_To_Complex
+InputFilter1.implementation=Pass_Through
+InputFilter1.item_type=gr_complex
+Resampler1.implementation=Pass_Through
+Resampler1.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels.in_acquisition=5
+Channels_2S.count=5
+Channels_1G.count=5
+
+;# Defining GLONASS satellites
+Channel0.RF_channel_ID=0
+Channel0.signal=2S
+Channel1.RF_channel_ID=0
+Channel1.signal=2S
+Channel2.RF_channel_ID=0
+Channel2.signal=2S
+Channel3.RF_channel_ID=0
+Channel3.signal=2S
+Channel4.RF_channel_ID=0
+Channel4.signal=2S
+Channel5.RF_channel_ID=1
+Channel6.RF_channel_ID=1
+Channel7.RF_channel_ID=1
+Channel8.RF_channel_ID=1
+Channel9.RF_channel_ID=1
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.threshold=0.0
+Acquisition_2S.pfa=0.00001
+Acquisition_2S.doppler_max=10000
+Acquisition_2S.doppler_step=60
+Acquisition_2S.max_dwells=1
+
+Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
+Acquisition_1G.item_type=gr_complex
+Acquisition_1G.threshold=0.0
+Acquisition_1G.pfa=0.00001
+Acquisition_1G.doppler_max=10000
+Acquisition_1G.doppler_step=250
+Acquisition_1G.dump=false;
+Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.early_late_space_chips=0.5
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.250;
+Tracking_2S.order=2;
+Tracking_2S.dump=false;
+Tracking_2S.dump_filename=/archive/gps_tracking_ch_
+
+Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
+Tracking_1G.item_type=gr_complex
+Tracking_1G.early_late_space_chips=0.5
+Tracking_1G.pll_bw_hz=25.0;
+Tracking_1G.dll_bw_hz=3.0;
+Tracking_1G.dump=false;
+Tracking_1G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
+TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false;
+Observables.dump_filename=/archive/gnss_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=3
diff --git a/conf/gnss-sdr_GLONASS_L1_CA_ibyte.conf b/conf/gnss-sdr_GLONASS_L1_CA_ibyte.conf
new file mode 100644
index 000000000..1e4b6a24b
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L1_CA_ibyte.conf
@@ -0,0 +1,80 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ibyte
+SignalSource.sampling_frequency=6625000
+SignalSource.samples=0
+SignalSource.dump=false;
+SignalSource.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ibyte_To_Complex
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Pass_Through
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channel.signal=1G
+Channels.in_acquisition=1
+Channels_1G.count=5
+
+Channel0.satellite=24 ; k=
+Channel1.satellite=1 ; k=1
+Channel2.satellite=2 ; k=-4
+Channel3.satellite=20 ; k=-5
+Channel4.satellite=21 ; k=4
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
+Acquisition_1G.item_type=gr_complex
+Acquisition_1G.threshold=0.0
+Acquisition_1G.pfa=0.0001
+Acquisition_1G.doppler_max=10000
+Acquisition_1G.doppler_step=250
+Acquisition_1G.dump=true;
+Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_1G.coherent_integration_time_ms=1
+;Acquisition_1G.max_dwells = 5
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
+Tracking_1G.item_type=gr_complex
+Tracking_1G.early_late_space_chips=0.5
+Tracking_1G.pll_bw_hz=25.0;
+Tracking_1G.dll_bw_hz=3.0;
+Tracking_1G.dump=true;
+Tracking_1G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=true;
+Observables.dump_filename=/archive/glo_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf b/conf/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf
new file mode 100644
index 000000000..6e30d5566
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf
@@ -0,0 +1,84 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ibyte
+SignalSource.sampling_frequency=6625000
+SignalSource.samples=0
+SignalSource.dump=false;
+SignalSource.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ibyte_To_Complex
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Pass_Through
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channel.signal=1G
+Channels.in_acquisition=2
+Channels_1G.count=8
+
+;Channel0.satellite=24 ; k=2
+;Channel1.satellite=1 ; k=1
+;Channel2.satellite=2 ; k=-4
+;Channel3.satellite=20 ; k=-5
+;Channel4.satellite=21 ; k=4
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
+Acquisition_1G.item_type=gr_complex
+Acquisition_1G.threshold=0.0
+Acquisition_1G.pfa=0.0001
+Acquisition_1G.doppler_max=10000
+Acquisition_1G.doppler_step=250
+Acquisition_1G.dump=false;
+Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_1G.coherent_integration_time_ms=1
+;Acquisition_1G.max_dwells = 5
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking
+Tracking_1G.item_type=gr_complex
+Tracking_1G.early_late_space_chips=0.5
+Tracking_1G.pll_bw_hz=40.0;
+Tracking_1G.dll_bw_hz=3.0;
+Tracking_1G.pll_bw_narrow_hz = 25.0;
+Tracking_1G.dll_bw_narrow_hz = 2.0;
+Tracking_1G.extend_correlation_ms = 1;
+Tracking_1G.dump=false;
+Tracking_1G.dump_filename=/archive/glo_tracking_ch_
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=/archive/glo_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GLONASS_L2_CA_GPS_L1_CA_ibyte.conf b/conf/gnss-sdr_GLONASS_L2_CA_GPS_L1_CA_ibyte.conf
new file mode 100644
index 000000000..3c56e6132
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L2_CA_GPS_L1_CA_ibyte.conf
@@ -0,0 +1,141 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+Receiver.sources_count=2
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource0.implementation=File_Signal_Source
+SignalSource0.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource0.item_type=ibyte
+SignalSource0.sampling_frequency=6625000
+SignalSource0.samples=0
+SignalSource0.dump=false;
+SignalSource0.dump_filename=/archive/signal_glonass.bin
+
+SignalSource1.implementation=File_Signal_Source
+SignalSource1.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L2_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource1.item_type=ibyte
+SignalSource1.sampling_frequency=6625000
+SignalSource1.samples=0
+SignalSource1.dump=false;
+SignalSource1.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+DataTypeAdapter0.implementation=Ibyte_To_Complex
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.70
+InputFilter0.band2_begin=0.80
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.sampling_frequency=6625000
+InputFilter0.IF=60000
+Resampler0.implementation=Direct_Resampler
+Resampler0.sample_freq_in=6625000
+Resampler0.sample_freq_out=6625000
+Resampler0.item_type=gr_complex
+
+SignalConditioner1.implementation=Signal_Conditioner
+DataTypeAdapter1.implementation=Ibyte_To_Complex
+InputFilter1.implementation=Pass_Through
+InputFilter1.item_type=gr_complex
+Resampler1.implementation=Pass_Through
+Resampler1.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels.in_acquisition=1
+Channels_2G.count=5
+Channels_1C.count=5
+
+;# Defining GLONASS satellites
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=1
+Channel6.RF_channel_ID=1
+Channel7.RF_channel_ID=1
+Channel8.RF_channel_ID=1
+Channel9.RF_channel_ID=1
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=0.0
+Acquisition_1C.pfa=0.00001
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false;
+Acquisition_1C.dump_filename=/archive/gps_acquisition.dat
+;Acquisition_1C.coherent_integration_time_ms=10
+
+Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition
+Acquisition_2G.item_type=gr_complex
+Acquisition_2G.threshold=0.0
+Acquisition_2G.pfa=0.00001
+Acquisition_2G.doppler_max=10000
+Acquisition_2G.doppler_step=250
+Acquisition_2G.dump=false;
+Acquisition_2G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_2G.coherent_integration_time_ms=10
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.early_late_space_chips=0.5
+Tracking_1C.pll_bw_hz=20.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dump=false;
+Tracking_1C.dump_filename=/archive/gps_tracking_ch_
+
+Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking
+Tracking_2G.item_type=gr_complex
+Tracking_2G.early_late_space_chips=0.5
+Tracking_2G.pll_bw_hz=25.0;
+Tracking_2G.dll_bw_hz=2.0;
+Tracking_2G.dump=false;
+Tracking_2G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false;
+Observables.dump_filename=/archive/gnss_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GLONASS_L2_CA_GPS_L2C_ibyte.conf b/conf/gnss-sdr_GLONASS_L2_CA_GPS_L2C_ibyte.conf
new file mode 100644
index 000000000..10df72ae2
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L2_CA_GPS_L2C_ibyte.conf
@@ -0,0 +1,142 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+Receiver.sources_count=2
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource0.implementation=File_Signal_Source
+SignalSource0.filename=/archive/NT1065_L2_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource0.item_type=ibyte
+SignalSource0.sampling_frequency=6625000
+SignalSource0.samples=0
+SignalSource0.dump=false;
+SignalSource0.dump_filename=/archive/signal_glonass.bin
+
+SignalSource1.implementation=File_Signal_Source
+SignalSource1.filename=/archive/NT1065_GLONASS_L2_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource1.item_type=ibyte
+SignalSource1.sampling_frequency=6625000
+SignalSource1.samples=0
+SignalSource1.dump=false;
+SignalSource1.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+DataTypeAdapter0.implementation=Ibyte_To_Complex
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.70
+InputFilter0.band2_begin=0.80
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.sampling_frequency=6625000
+InputFilter0.IF=60000
+Resampler0.implementation=Pass_Through
+Resampler0.item_type=gr_complex
+
+SignalConditioner1.implementation=Signal_Conditioner
+DataTypeAdapter1.implementation=Ibyte_To_Complex
+InputFilter1.implementation=Pass_Through
+InputFilter1.item_type=gr_complex
+Resampler1.implementation=Pass_Through
+Resampler1.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels.in_acquisition=5
+Channels_2S.count=5
+Channels_2G.count=5
+
+;# Defining GLONASS satellites
+Channel0.RF_channel_ID=0
+Channel0.signal=2S
+Channel1.RF_channel_ID=0
+Channel1.signal=2S
+Channel2.RF_channel_ID=0
+Channel2.signal=2S
+Channel3.RF_channel_ID=0
+Channel3.signal=2S
+Channel4.RF_channel_ID=0
+Channel4.signal=2S
+Channel5.RF_channel_ID=1
+Channel6.RF_channel_ID=1
+Channel7.RF_channel_ID=1
+Channel8.RF_channel_ID=1
+Channel9.RF_channel_ID=1
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.threshold=0.0
+Acquisition_2S.pfa=0.00001
+Acquisition_2S.doppler_max=10000
+Acquisition_2S.doppler_step=60
+Acquisition_2S.max_dwells=1
+
+Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition
+Acquisition_2G.item_type=gr_complex
+Acquisition_2G.threshold=0.0
+Acquisition_2G.pfa=0.00001
+Acquisition_2G.doppler_max=10000
+Acquisition_2G.doppler_step=250
+Acquisition_2G.dump=false;
+Acquisition_2G.dump_filename=/archive/glo_acquisition.dat
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.early_late_space_chips=0.5
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.250;
+Tracking_2S.order=2;
+Tracking_2S.dump=false;
+Tracking_2S.dump_filename=/archive/gps_tracking_ch_
+
+Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking
+Tracking_2G.item_type=gr_complex
+Tracking_2G.early_late_space_chips=0.5
+Tracking_2G.pll_bw_hz=25.0;
+Tracking_2G.dll_bw_hz=3.0;
+Tracking_2G.dump=false;
+Tracking_2G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
+TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false;
+Observables.dump_filename=/archive/gnss_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=3
diff --git a/conf/gnss-sdr_GLONASS_L2_CA_ibyte.conf b/conf/gnss-sdr_GLONASS_L2_CA_ibyte.conf
new file mode 100644
index 000000000..39b6fa5ab
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L2_CA_ibyte.conf
@@ -0,0 +1,74 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L2_20160831_fs6625e6_60e3_schar_1m.bin ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ibyte
+SignalSource.sampling_frequency=6625000
+SignalSource.samples=0
+SignalSource.dump=false;
+SignalSource.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ibyte_To_Complex
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Pass_Through
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channel.signal=2G
+Channels.in_acquisition=1
+Channels_2G.count=5
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition
+Acquisition_2G.item_type=gr_complex
+Acquisition_2G.threshold=0.0
+Acquisition_2G.pfa=0.0001
+Acquisition_2G.doppler_max=10000
+Acquisition_2G.doppler_step=250
+Acquisition_2G.dump=true;
+Acquisition_2G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_2G.coherent_integration_time_ms=1
+;Acquisition_2G.max_dwells = 5
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking
+Tracking_2G.item_type=gr_complex
+Tracking_2G.early_late_space_chips=0.5
+Tracking_2G.pll_bw_hz=20.0;
+Tracking_2G.dll_bw_hz=2.0;
+Tracking_2G.dump=true;
+Tracking_2G.dump_filename=/archive/glo_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=true;
+Observables.dump_filename=/archive/glo_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GLONASS_L2_CA_ibyte_coh_trk.conf b/conf/gnss-sdr_GLONASS_L2_CA_ibyte_coh_trk.conf
new file mode 100644
index 000000000..6e30d5566
--- /dev/null
+++ b/conf/gnss-sdr_GLONASS_L2_CA_ibyte_coh_trk.conf
@@ -0,0 +1,84 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ibyte
+SignalSource.sampling_frequency=6625000
+SignalSource.samples=0
+SignalSource.dump=false;
+SignalSource.dump_filename=/archive/signal_glonass.bin
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ibyte_To_Complex
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Pass_Through
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channel.signal=1G
+Channels.in_acquisition=2
+Channels_1G.count=8
+
+;Channel0.satellite=24 ; k=2
+;Channel1.satellite=1 ; k=1
+;Channel2.satellite=2 ; k=-4
+;Channel3.satellite=20 ; k=-5
+;Channel4.satellite=21 ; k=4
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
+Acquisition_1G.item_type=gr_complex
+Acquisition_1G.threshold=0.0
+Acquisition_1G.pfa=0.0001
+Acquisition_1G.doppler_max=10000
+Acquisition_1G.doppler_step=250
+Acquisition_1G.dump=false;
+Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
+;Acquisition_1G.coherent_integration_time_ms=1
+;Acquisition_1G.max_dwells = 5
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking
+Tracking_1G.item_type=gr_complex
+Tracking_1G.early_late_space_chips=0.5
+Tracking_1G.pll_bw_hz=40.0;
+Tracking_1G.dll_bw_hz=3.0;
+Tracking_1G.pll_bw_narrow_hz = 25.0;
+Tracking_1G.dll_bw_narrow_hz = 2.0;
+Tracking_1G.extend_correlation_ms = 1;
+Tracking_1G.dump=false;
+Tracking_1G.dump_filename=/archive/glo_tracking_ch_
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=/archive/glo_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GPS_L1_2ch_fmcomms2_realtime.conf b/conf/gnss-sdr_GPS_L1_2ch_fmcomms2_realtime.conf
new file mode 100644
index 000000000..cd3345904
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_2ch_fmcomms2_realtime.conf
@@ -0,0 +1,115 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Sps].
+GNSS-SDR.internal_fs_sps=7000000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Fmcomms2_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.device_address=192.168.0.4
+SignalSource.sampling_frequency=7000000
+SignalSource.freq=1575420000
+SignalSource.bandwidth=4000000
+SignalSource.RF_channels=2
+SignalSource.rx1_enable=true
+SignalSource.rx2_enable=true
+SignalSource.gain_mode_rx1=slow_attack
+SignalSource.gain_mode_rx2=slow_attack
+SignalSource.rf_port_select=A_BALANCED
+SignalSource.gain_rx1=64
+SignalSource.gain_rx2=64
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=../data/signal_source.dat
+SignalSource.enable_throttle_control=false
+SignalSource.enable_dds_lo=false
+SignalSource.freq_rf_tx_hz=1260000000
+SignalSource.freq_dds_tx_hz=1000
+SignalSource.scale_dds_dbfs=0.0
+SignalSource.phase_dds_deg=0.0
+SignalSource.tx_attenuation_db=0.0
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner0.implementation=Pass_Through
+SignalConditioner1.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+
+;# CHANNEL CONNECTION
+Channel0.RF_channel_ID=0
+Channel0.signal=1C
+Channel1.RF_channel_ID=0
+Channel1.signal=1C
+Channel2.RF_channel_ID=0
+Channel2.signal=1C
+Channel3.RF_channel_ID=0
+Channel3.signal=1C
+Channel4.RF_channel_ID=1
+Channel4.signal=1C
+Channel5.RF_channel_ID=1
+Channel5.signal=1C
+Channel6.RF_channel_ID=1
+Channel6.signal=1C
+Channel7.RF_channel_ID=1
+Channel7.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=20
+Acquisition_1C.use_CFAR_algorithm=false
+Acquisition_1C.blocking=true
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
+Tracking_1C.pll_bw_hz=35.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.early_late_space_chips=0.5;
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_2ch_udp.conf b/conf/gnss-sdr_GPS_L1_2ch_udp.conf
new file mode 100644
index 000000000..6dd703fa6
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_2ch_udp.conf
@@ -0,0 +1,103 @@
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Sps].
+GNSS-SDR.internal_fs_sps=13250000 ;//66.25/5
+;GNSS-SDR.internal_fs_sps=6625000 ;//66.25/10
+;GNSS-SDR.internal_fs_sps=3312500 ;//66.25/20
+;GNSS-SDR.internal_fs_sps=2650000 ;//66.25/25
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Custom_UDP_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.origin_address=0.0.0.0
+SignalSource.capture_device=eth0
+SignalSource.port=1234
+SignalSource.payload_bytes=1472
+;SignalSource.sample_type=cbyte
+SignalSource.sample_type=c4bits
+SignalSource.IQ_swap=false
+SignalSource.RF_channels=1
+SignalSource.channels_in_udp=2
+SignalSource.dump=false
+SignalSource.dump_filename=./signal_source.dat
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Pass_Through
+;SignalConditioner0.implementation=Pass_Through
+;SignalConditioner1.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+
+;# CHANNEL CONNECTION
+Channel.signal=1C
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=0
+Channel6.RF_channel_ID=0
+Channel7.RF_channel_ID=0
+Channel8.RF_channel_ID=1
+Channel9.RF_channel_ID=1
+
+;Channel0.signal=1C
+;Channel1.RF_channel_ID=1
+;Channel1.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=17
+Acquisition_1C.use_CFAR_algorithm=false
+Acquisition_1C.blocking=false
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
+Tracking_1C.pll_bw_hz=35.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.early_late_space_chips=0.5;
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_CA_ibyte.conf b/conf/gnss-sdr_GPS_L1_CA_ibyte.conf
new file mode 100644
index 000000000..c4a38223d
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_CA_ibyte.conf
@@ -0,0 +1,92 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=6625000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ibyte
+;SignalSource.samples=66250000
+SignalSource.samples=0
+SignalSource.dump=false;
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+DataTypeAdapter.implementation=Ibyte_To_Complex
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+InputFilter.item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.taps_item_type=float
+InputFilter.number_of_taps=5
+InputFilter.number_of_bands=2
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.70
+InputFilter.band2_begin=0.80
+InputFilter.band2_end=1.0
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+InputFilter.filter_type=bandpass
+InputFilter.grid_density=16
+InputFilter.sampling_frequency=6625000
+InputFilter.IF=60000
+Resampler.implementation=Direct_Resampler
+Resampler.sample_freq_in=6625000
+Resampler.sample_freq_out=6625000
+Resampler.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channel.signal=1C
+Channels.in_acquisition=1
+Channels_1C.count=6
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=0.01
+;Acquisition_1C.pfa=0.00001
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false;
+Acquisition_1C.dump_filename=/archive/gps_acquisition.dat
+;Acquisition_1C.coherent_integration_time_ms=10
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.early_late_space_chips=0.5
+Tracking_1C.pll_bw_hz=25.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.dump=false;
+Tracking_1C.dump_filename=/archive/gps_tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=true;
+Observables.dump_filename=/archive/gps_observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1045_rate_ms=5000
+PVT.rtcm_MT1097_rate_ms=1000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=3
diff --git a/conf/gnss-sdr_GPS_L1_FPGA.conf b/conf/gnss-sdr_GPS_L1_FPGA.conf
new file mode 100644
index 000000000..70ec83ed5
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_FPGA.conf
@@ -0,0 +1,84 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
+
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Pass_Through
+SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ishort
+SignalSource.sampling_frequency=4000000
+SignalSource.freq=1575420000
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=../data/signal_source.dat
+SignalSource.enable_throttle_control=false
+SignalSource.enable_FPGA=true
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Pass_Through
+SignalConditioner.item_type=cshort
+SignalConditioner.enable_FPGA=true
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+Channel.signal=1C
+Channel.enable_FPGA=true
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fpga
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+Acquisition_1C.item_type=cshort
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.select_queue_Fpga=0;
+Acquisition_1C.threshold=0.005
+;Acquisition_1C.pfa=0.01
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking_Fpga
+Tracking_1C.item_type=cshort
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+Tracking_1C.pll_bw_hz=45.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=GPS_L1_CA_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=GPS_L1_CA_PVT
+PVT.averaging_depth=100
+PVT.flag_averaging=false
+PVT.output_rate_ms=10
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf b/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
index a1caf56c4..9982a1cbd 100644
--- a/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,16 +8,16 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2727933.33 ; 8183800/3
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+;#implementation:
;#Notes for GN3S source:
; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz).
; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block
-GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3
+GNSS-SDR.internal_fs_sps=2727933.33 ; 8183800/3
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=GN3S_Signal_Source
@@ -66,40 +69,38 @@ Channels.in_acquisition=1
Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.008
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=false
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=45.0;
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
@@ -110,4 +111,3 @@ PVT.dump=false
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
diff --git a/conf/gnss-sdr_GPS_L1_LimeSDR.conf b/conf/gnss-sdr_GPS_L1_LimeSDR.conf
new file mode 100644
index 000000000..c465a41ca
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_LimeSDR.conf
@@ -0,0 +1,109 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=2000000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Osmosdr_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.sampling_frequency=2000000
+;# LimeSDR RX1 antennas: NONE,LNAH,LNAL,LNAW
+SignalSource.antenna=LNAW
+SignalSource.freq=1575420000
+SignalSource.gain=40
+SignalSource.rf_gain=40
+SignalSource.if_gain=30
+SignalSource.AGC_enabled=false
+SignalSource.samples=0
+SignalSource.repeat=false
+;# Next line enables the LimeSDR
+SignalSource.osmosdr_args=driver=lime,soapy=0
+SignalSource.enable_throttle_control=false
+SignalSource.dump=false
+SignalSource.dump_filename=./signal_source.dat
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Pass_Through
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+InputFilter.decimation_factor=1
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.taps_item_type=float
+InputFilter.number_of_taps=5
+InputFilter.number_of_bands=2
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.85
+InputFilter.band2_begin=0.9
+InputFilter.band2_end=1.0
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+InputFilter.filter_type=bandpass
+InputFilter.grid_density=16
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
+;######### RESAMPLER CONFIG ############
+Resampler.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+Channel.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.sampled_ms=1
+Acquisition_1C.threshold=0.015
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_min=-10000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=GPS_L1_CA_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+;######### PVT CONFIG ############
+;PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.iono_model=Broadcast
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GPS_L1_SPIR.conf b/conf/gnss-sdr_GPS_L1_SPIR.conf
index 38a4ce838..f6fa9a076 100644
--- a/conf/gnss-sdr_GPS_L1_SPIR.conf
+++ b/conf/gnss-sdr_GPS_L1_SPIR.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,123 +8,48 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Spir_File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/dtalogger/signals/spir/data/20Secs/20Secs_L1.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=int
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=80000000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=float
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
InputFilter.implementation=Freq_Xlating_Fir_Filter
-;InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=float
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45
InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter.sampling_frequency=80000000
InputFilter.IF=10164
InputFilter.decimation_factor=20
@@ -130,182 +57,79 @@ InputFilter.decimation_factor=20
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=80000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=10
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "1B" Galileo E1B
Channel.signal=1C
-;Galileo FM3 -> PRN 19
-;Galileo FM4 -> PRN 20
;######### CHANNEL 0 CONFIG ############
-
-;Channel0.signal=1B
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
;Channel0.satellite=20
;######### CHANNEL 1 CONFIG ############
-;Channel1.signal=1B
;Channel1.satellite=12
;######### CHANNEL 2 CONFIG ############
-;Channel2.signal=1B
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
;Channel2.satellite=11
;######### CHANNEL 3 CONFIG ############
-;Channel3.signal=1B
;Channel3.satellite=19
;######### ACQUISITION GLOBAL CONFIG ############
-_1C
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
-;#threshold: Acquisition threshold
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.005
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_min=-10000
-;#doppler_step Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
-;#maximum dwells
Acquisition_1C.max_dwells=5
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
-;######### ACQUISITION CHANNELS CONFIG ######
-
-;######### ACQUISITION CH 0 CONFIG ############
-
-;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false
-;Acquisition0.repeat_satellite = true
-;Acquisition1.repeat_satellite = true
-;Acquisition2.repeat_satellite = true
-;Acquisition3.repeat_satellite = true
-
-;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
-;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000
-Acquisition0.cboc=false
-
-
-;######### ACQUISITION CH 1 CONFIG ############
-Acquisition1.cboc=false
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=20.0;
+Tracking_1C.order=3;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=20.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+;#implementation:
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+;#implementation: Position Velocity and Time (PVT) implementation algorithm
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=500
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# RINEX, KML, and NMEA output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=true;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
index 04e1d2786..f437366bf 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals.
; Set SignalSource.device_address to the IP address of your device
; and run:
@@ -7,8 +10,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -21,175 +24,71 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=UHD_Signal_Source
-
-; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
-
-; # item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-;SignalSource.item_type=gr_complex
SignalSource.item_type=cshort
-
-; # sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-; # freq: RF front-end center frequency in [Hz]
SignalSource.freq=1575420000
-
-; # gain: Front-end Gain in [dB]
SignalSource.gain=40
-
-; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
SignalSource.subdevice=A:0
-
-; # samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-; # repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-; # dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
-;SignalConditioner.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=cshort
-;DataTypeAdapter.item_type=cbyte
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-;InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=cshort
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=11
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.48
InputFilter.band2_begin=0.52
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter.sampling_frequency=4000000
InputFilter.IF=0
-
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resampled data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-;Channel.system=GPS
Channel.signal=1C
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
;Channel0.signal=1C
;Channel1.signal=1C
@@ -204,136 +103,54 @@ Channel.signal=1C
;Channel10.signal=1C
;Channel11.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-;######### CHANNEL 0 CONFIG ############
-
-;Channel0.system=GPS
-;Channel0.signal=1C
-
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
-;Channel0.satellite=11
-
-;######### CHANNEL 1 CONFIG ############
-
-;Channel1.system=GPS
-;Channel1.signal=1C
-;Channel1.satellite=18
-
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.01
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.00001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=8000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=30.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=30.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=4.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_USRP_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
index 8fcb655f8..323feec08 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Configuration file for using USRP 1 as a RF front-end for GPS L1 signals.
; Run:
; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_realtime.conf
@@ -6,8 +9,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,362 +23,95 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=UHD_Signal_Source
-
-;#When left empty, the device discovery routines will search all available transports on the system (ethernet, usb...)
;SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=2000000
-
-;#freq: RF front-end center frequency in [Hz]
SignalSource.freq=1575420000
-
-;#gain: Front-end Gain in [dB]
SignalSource.gain=60
-
-;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
SignalSource.subdevice=A:0
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false
-
SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;SignalConditioner.implementation=Signal_Conditioner
SignalConditioner.implementation=Pass_Through
-;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Pass_Through
-
-;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=2000000
-InputFilter.IF=0
-
-
-
-;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
-Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=8000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=2000000
-
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_GPS.count=6
-;#count: Number of available Galileo satellite channels.
-Channels_Galileo.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels_1C.count=6
+Channels_1B.count=0
Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-Channel.system=GPS
+
;#signal:
;# "1C" GPS L1 C/A
-;# "1P" GPS L1 P
-;# "1W" GPS L1 Z-tracking and similar (AS on)
-;# "1Y" GPS L1 Y
-;# "1M" GPS L1 M
-;# "1N" GPS L1 codeless
-;# "2C" GPS L2 C/A
-;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless
-;# "2S" GPS L2 L2C (M)
-;# "2L" GPS L2 L2C (L)
-;# "2X" GPS L2 L2C (M+L)
-;# "2P" GPS L2 P
-;# "2W" GPS L2 Z-tracking and similar (AS on)
-;# "2Y" GPS L2 Y
-;# "2M" GPS GPS L2 M
-;# "2N" GPS L2 codeless
-;# "5I" GPS L5 I
-;# "5Q" GPS L5 Q
-;# "5X" GPS L5 I+Q
-;# "1C" GLONASS G1 C/A
-;# "1P" GLONASS G1 P
-;# "2C" GLONASS G2 C/A (Glonass M)
-;# "2P" GLONASS G2 P
-;# "1A" GALILEO E1 A (PRS)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "1C" GALILEO E1 C (no data)
-;# "1X" GALILEO E1 B+C
-;# "1Z" GALILEO E1 A+B+C
-;# "5I" GALILEO E5a I (F/NAV OS)
-;# "5Q" GALILEO E5a Q (no data)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
-;# "7I" GALILEO E5b I
-;# "7Q" GALILEO E5b Q
-;# "7X" GALILEO E5b I+Q
-;# "8I" GALILEO E5 I
-;# "8Q" GALILEO E5 Q
-;# "8X" GALILEO E5 I+Q
-;# "6A" GALILEO E6 A
-;# "6B" GALILEO E6 B
-;# "6C" GALILEO E6 C
-;# "6X" GALILEO E6 B+C
-;# "6Z" GALILEO E6 A+B+C
-;# "1C" SBAS L1 C/A
-;# "5I" SBAS L5 I
-;# "5Q" SBAS L5 Q
-;# "5X" SBAS L5 I+Q
-;# "2I" COMPASS E2 I
-;# "2Q" COMPASS E2 Q
-;# "2X" COMPASS E2 IQ
-;# "7I" COMPASS E5b I
-;# "7Q" COMPASS E5b Q
-;# "7X" COMPASS E5b IQ
-;# "6I" COMPASS E6 I
-;# "6Q" COMPASS E6 Q
-;# "6X" COMPASS E6 IQ
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
+;# "L5" GPS L5
+
Channel.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-;######### CHANNEL 0 CONFIG ############
-
-Channel0.system=GPS
-Channel0.signal=1C
-
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
-Channel0.satellite=11
-
-;######### CHANNEL 1 CONFIG ############
-
-Channel1.system=GPS
-Channel1.signal=1C
-Channel1.satellite=18
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
-;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.01
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=500
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
-Acquisition_GPS.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
-Acquisition_GPS.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.01
+;Acquisition_1C.pfa=0.0001
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.bit_transition_flag=false
+Acquisition_1C.max_dwells=1
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=30.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
-Tracking_GPS.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=./tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=50.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_GPS.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
-;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=1;
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+;#implementation: Position Velocity and Time (PVT) implementation:
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf b/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
index cc3ba40a9..fd7b5d8ff 100644
--- a/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
+++ b/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,290 +8,99 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source]
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
-;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer.
-;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
-
SignalSource.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: Use [Ishort_To_Complex] or [Pass_Through]
DataTypeAdapter.implementation=Ishort_To_Complex
-;#dump: Dump the filtered data to a file.
DataTypeAdapter.dump=false
-;#dump_filename: Log path and filename.
DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-;InputFilter.band1_end=0.8
-InputFilter.band1_end=0.85
-InputFilter.band2_begin=0.90
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available satellite channels.
Channels_1C.count=5
-;#in_acquisition: Number of channels simultaneously acquiring
Channels.in_acquisition=1
-;######### CHANNEL 0 CONFIG ############
-Channel0.signal=1C
-Channel0.satellite=1
-Channel0.repeat_satellite=false
-
-;######### CHANNEL 1 CONFIG ############
-Channel1.signal=1C
-Channel1.satellite=11
-Channel1.repeat_satellite=false
-
-;######### CHANNEL 2 CONFIG ############
-Channel2.signal=1C
-Channel2.satellite=17
-Channel2.repeat_satellite=false
-
-;######### CHANNEL 3 CONFIG ############
-Channel3.signal=1C
-Channel3.satellite=20
-Channel3.repeat_satellite=false
-
-;######### CHANNEL 4 CONFIG ############
-Channel4.signal=1C
-Channel4.satellite=32
-Channel4.repeat_satellite=false
-
;######### ACQUISITION GLOBAL CONFIG ############_1C
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=true
-;#filename: Log path and filename
-;Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent-integration_time_ms=4
-
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent-integration_time_ms=4
+Acquisition_1C.dump=true
+;Acquisition_1C.dump_filename=./acq_dump.dat
+
;######### ACQUISITION CHANNELS CONFIG ######
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
-;#threshold: Acquisition threshold
Acquisition_1C.threshold=0.4
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#repeat_satellite: Use only jointly with the satellte PRN ID option.
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=50.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=50.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=4.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A.
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
PVT.flag_nmea_tty_port=true
PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_bladeRF.conf b/conf/gnss-sdr_GPS_L1_bladeRF.conf
new file mode 100644
index 000000000..80e9ddda8
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_bladeRF.conf
@@ -0,0 +1,108 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=2000000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Osmosdr_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.sampling_frequency=2000000
+SignalSource.freq=1575420000
+;# RF Gain: LNA Gain {0, 3, 6}
+SignalSource.gain=6
+;# IF Gain: N/A
+SignalSource.rf_gain=40
+;# BB Gain: RX VGA1 + VGA2 [5, 60]
+SignalSource.if_gain=48
+SignalSource.AGC_enabled=false
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.osmosdr_args=bladerf=0 ; This line enables the bladeRF
+SignalSource.enable_throttle_control=false
+SignalSource.dump=false
+SignalSource.dump_filename=./signal_source.dat
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Pass_Through
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+InputFilter.decimation_factor=1
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.taps_item_type=float
+InputFilter.number_of_taps=5
+InputFilter.number_of_bands=2
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.85
+InputFilter.band2_begin=0.9
+InputFilter.band2_end=1.0
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+InputFilter.filter_type=bandpass
+InputFilter.grid_density=16
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
+;######### RESAMPLER CONFIG ############
+Resampler.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=1
+Channel.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.015
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+;######### PVT CONFIG ############
+;PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.iono_model=Broadcast
+PVT.trop_model=Saastamoinen
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.rtcm_tcp_port=2101
+PVT.rtcm_MT1019_rate_ms=5000
+PVT.rtcm_MT1077_rate_ms=1000
+PVT.rinex_version=2
diff --git a/conf/gnss-sdr_GPS_L1_fmcomms2_realtime.conf b/conf/gnss-sdr_GPS_L1_fmcomms2_realtime.conf
new file mode 100644
index 000000000..b2d0604bb
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_fmcomms2_realtime.conf
@@ -0,0 +1,133 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=2000000
+
+
+;######### SUPL RRLP GPS assistance configuration #####
+; Check http://www.mcc-mnc.com/
+; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=false
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNC=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Fmcomms2_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.device_address=10.42.0.196
+SignalSource.sampling_frequency=2000000
+SignalSource.freq=1575420000
+SignalSource.bandwidth=2000000
+SignalSource.rx1_enable=true
+SignalSource.gain_mode_rx1=manual
+SignalSource.rf_port_select=A_BALANCED
+SignalSource.gain_rx1=64
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=../data/signal_source.dat
+SignalSource.enable_throttle_control=false
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Pass_Through
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.taps_item_type=float
+InputFilter.number_of_taps=5
+InputFilter.number_of_bands=2
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.45
+InputFilter.band2_begin=0.55
+InputFilter.band2_end=1.0
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+InputFilter.filter_type=bandpass
+InputFilter.grid_density=16
+InputFilter.sampling_frequency=2000000
+InputFilter.IF=0; IF deviation due to front-end LO inaccuracies [Hz]
+
+;######### RESAMPLER CONFIG ############
+Resampler.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=5
+Channels.in_acquisition=1
+Channel.signal=1C
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.015
+;Acquisition_1C.pfa=0.0001
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=./tracking_ch_
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex.conf b/conf/gnss-sdr_GPS_L1_gr_complex.conf
index 14b57ff0a..7f83c666c 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex.conf
@@ -1,76 +1,91 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
-;
+
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=File_Signal_Source
-SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE
-SignalSource.item_type=gr_complex
+SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
+SignalSource.item_type=ishort
SignalSource.sampling_frequency=4000000
SignalSource.freq=1575420000
-SignalSource.samples=250000000
+SignalSource.samples=0
SignalSource.repeat=false
-SignalSource.dump=false
-SignalSource.dump_filename=../data/signal_source.dat
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-SignalConditioner.implementation=Pass_Through
+SignalConditioner.implementation=Signal_Conditioner
+
+DataTypeAdapter.implementation=Ishort_To_Complex
+DataTypeAdapter.dump=false
+DataTypeAdapter.dump_filename=../data/DataTypeAdapter.dat
+
+InputFilter.implementation=Pass_Through
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+
+Resampler.implementation=Pass_Through
+Resampler.item_type=gr_complex
;######### CHANNELS GLOBAL CONFIG ############
-Channels_1C.count=8
+Channels_1C.count=5
Channels.in_acquisition=1
Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-Acquisition_1C.threshold=0.005
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.008
;Acquisition_1C.pfa=0.01
Acquisition_1C.doppler_max=10000
-Acquisition_1C.doppler_step=500
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
;######### TRACKING GLOBAL CONFIG ############
-Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=false
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
-Tracking_1C.pll_bw_hz=45.0;
-Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=epl_tracking_ch_
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=4.0;
Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_c
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
-PVT.output_rate_ms=10
-PVT.display_rate_ms=500
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=1
+PVT.display_rate_ms=100
PVT.dump_filename=./PVT
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
PVT.flag_nmea_tty_port=false;
@@ -79,4 +94,3 @@ PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=false
-
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
index 885bebd88..33c3a07b6 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,16 +8,14 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=File_Signal_Source
SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE
SignalSource.item_type=gr_complex
-SignalSource.sampling_frequency=4000000
-SignalSource.freq=1575420000
SignalSource.samples=250000000
SignalSource.repeat=false
SignalSource.dump=false
@@ -33,42 +34,43 @@ Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.005
;Acquisition_1C.pfa=0.01
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
Tracking_1C.dump=false
Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=45.0;
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
@@ -79,4 +81,3 @@ PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=false
-
diff --git a/conf/gnss-sdr_GPS_L1_ishort.conf b/conf/gnss-sdr_GPS_L1_ishort.conf
index 95abfc06b..373049a25 100644
--- a/conf/gnss-sdr_GPS_L1_ishort.conf
+++ b/conf/gnss-sdr_GPS_L1_ishort.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,18 +8,17 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
;######### CONTROL_THREAD CONFIG ############
ControlThread.wait_for_flowgraph=false
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=File_Signal_Source
-SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
+SignalSource.filename=/archive/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
SignalSource.item_type=ishort
SignalSource.sampling_frequency=4000000
-SignalSource.freq=1575420000
SignalSource.samples=0
SignalSource.repeat=false
SignalSource.dump=false
@@ -27,68 +29,59 @@ SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner
-;DataTypeAdapter.implementation=Ishort_To_Complex
DataTypeAdapter.implementation=Ishort_To_Cshort
InputFilter.implementation=Pass_Through
-;InputFilter.input_item_type=gr_complex
-;InputFilter.output_item_type=gr_complex
InputFilter.item_type=cshort
-;Resampler.implementation=Pass_Through
-;Resampler.item_type=gr_complex
Resampler.implementation=Direct_Resampler
Resampler.sample_freq_in=4000000
Resampler.sample_freq_out=2000000
-;Resampler.item_type=gr_complex
Resampler.item_type=cshort
;######### CHANNELS GLOBAL CONFIG ############
Channels_1C.count=8
Channels.in_acquisition=1
Channel.signal=1C
-;Channel.item_type=cshort
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=cshort
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=cshort
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.008
;Acquisition_1C.pfa=0.000001
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=250
-Acquisition_1C.tong_init_val=2
-Acquisition_1C.tong_max_val=10
-Acquisition_1C.tong_max_dwells=20
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+Acquisition_1C.blocking=false;
;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
Tracking_1C.item_type=cshort
-Tracking_1C.if=0
-Tracking_1C.dump=false
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.dll_bw_hz=4.0;
Tracking_1C.order=3;
+Tracking_1C.dump=false;
+Tracking_1C.dump_filename=./epl_tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
-Observables.dump=false
+Observables.implementation=Hybrid_Observables
+Observables.dump=true
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
-PVT.output_rate_ms=10
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
diff --git a/conf/gnss-sdr_GPS_L1_nsr.conf b/conf/gnss-sdr_GPS_L1_nsr.conf
index f7d4358d3..4b0b05ae2 100644
--- a/conf/gnss-sdr_GPS_L1_nsr.conf
+++ b/conf/gnss-sdr_GPS_L1_nsr.conf
@@ -1,5 +1,8 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Sample configuration file for IFEN SX-NSR software receiver front-end
-; http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html
+; https://www.ifen.com/products/sx3-gnss-software-receiver/
; This sample configuration is able to process directly .sream binary files
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
@@ -8,8 +11,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2560000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2560000
;######### SUPL RRLP GPS assistance configuration #####
@@ -22,16 +25,15 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=Nsr_File_Signal_Source
-SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
+SignalSource.filename=/home/javier/Descargas/RoofTop_FE0_Band1.stream ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
SignalSource.sampling_frequency=20480000
-SignalSource.freq=1575420000
SignalSource.samples=0
SignalSource.repeat=false
SignalSource.dump=false
@@ -68,7 +70,8 @@ InputFilter.band2_error=1.0
InputFilter.filter_type=bandpass
InputFilter.grid_density=16
InputFilter.sampling_frequency=20480000
-InputFilter.IF=5499998.47412109
+#InputFilter.IF=5499998.47412109
+InputFilter.IF=5679999.2370605494
InputFilter.decimation_factor=8
@@ -80,51 +83,74 @@ Resampler.item_type=gr_complex
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_1C.count=8
+Channels_1C.count=0
+Channels_2S.count=8
Channels.in_acquisition=1
-Channel.signal=1C
;######### GPS ACQUISITION CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.scoherent_integration_time_ms=1
Acquisition_1C.threshold=0.0075
;Acquisition_1C.pfa=0.01
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.coherent_integration_time_ms=20
+Acquisition_2S.threshold=0.00045
+Acquisition_2S.doppler_max=5000
+Acquisition_2S.doppler_step=100
+Acquisition_2S.bit_transition_flag=false
+Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
;######### TRACKING GPS CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=false
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=45.0;
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+;######### GPS L2C GENERIC TRACKING CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.pll_bw_hz=1.5;
+Tracking_2S.dll_bw_hz=0.4;
+Tracking_2S.order=2;
+Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=../data/epl_tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
+TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
+TelemetryDecoder_2S.dump=false
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
-PVT.output_rate_ms=10
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
@@ -134,4 +160,3 @@ PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=true
-
diff --git a/conf/gnss-sdr_GPS_L1_nsr_kf.conf b/conf/gnss-sdr_GPS_L1_nsr_kf.conf
new file mode 100644
index 000000000..d2a84cd9f
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_nsr_kf.conf
@@ -0,0 +1,211 @@
+; Default configuration file
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+;GNSS-SDR.internal_fs_sps=6826700
+GNSS-SDR.internal_fs_sps=2560000
+;GNSS-SDR.internal_fs_sps=4096000
+;GNSS-SDR.internal_fs_sps=5120000
+
+;######### SIGNAL_SOURCE CONFIG ############
+;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+SignalSource.implementation=Nsr_File_Signal_Source
+
+;#filename: path to file with the captured GNSS signal samples to be processed
+SignalSource.filename=/home/javier/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
+
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.item_type=byte
+
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
+SignalSource.sampling_frequency=20480000
+
+;#freq: RF front-end center frequency in [Hz]
+SignalSource.freq=1575420000
+
+;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
+SignalSource.samples=0
+
+;#repeat: Repeat the processing file. Disable this option in this version
+SignalSource.repeat=false
+
+;#dump: Dump the Signal source data to a file. Disable this option in this version
+SignalSource.dump=false
+
+SignalSource.dump_filename=../data/signal_source.dat
+
+
+;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
+; it helps to not overload the CPU, but the processing time will be longer.
+SignalSource.enable_throttle_control=false
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+;## It holds blocks to change data type, filter and resample input data.
+
+;#implementation: Use [Pass_Through] or [Signal_Conditioner]
+;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
+;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+;## Changes the type of input data.
+;#implementation: [Pass_Through] disables this block
+DataTypeAdapter.implementation=Pass_Through
+DataTypeAdapter.item_type=float
+
+;######### INPUT_FILTER CONFIG ############
+;## Filter the input data. Can be combined with frequency translation for IF signals
+
+;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
+;# that shifts IF down to zero Hz.
+
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+
+;#dump: Dump the filtered data to a file.
+InputFilter.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter.dump_filename=../data/input_filter.dat
+
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
+;#These options are based on parameters of gnuradio's function: gr_remez.
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
+;#and the weight given to the error in those bands.
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter.input_item_type=float
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter.output_item_type=gr_complex
+
+;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
+InputFilter.taps_item_type=float
+
+;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
+InputFilter.number_of_taps=5
+
+;#number_of _bands: Number of frequency bands in the filter.
+InputFilter.number_of_bands=2
+
+;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
+;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
+;#The number of band_begin and band_end elements must match the number of bands
+
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.45
+InputFilter.band2_begin=0.55
+InputFilter.band2_end=1.0
+
+;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
+;#The number of ampl_begin and ampl_end elements must match the number of bands
+
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+
+;#band_error: weighting applied to each band (usually 1).
+;#The number of band_error elements must match the number of bands
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
+InputFilter.filter_type=bandpass
+
+;#grid_density: determines how accurately the filter will be constructed.
+;The minimum value is 16; higher values are slower to compute the filter.
+InputFilter.grid_density=16
+
+;# Original sampling frequency stored in the signal file
+InputFilter.sampling_frequency=20480000
+
+;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
+;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
+
+InputFilter.IF=5499998.47412109
+
+;# Decimation factor after the frequency tranaslating block
+InputFilter.decimation_factor=8
+
+
+;######### RESAMPLER CONFIG ############
+;## Resamples the input data.
+
+;#implementation: Use [Pass_Through] or [Direct_Resampler]
+;#[Pass_Through] disables this block
+;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
+Resampler.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+;#count: Number of available GPS satellite channels.
+Channels_1C.count=8
+Channels.in_acquisition=1
+#Channel.signal=1C
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.if=0
+Acquisition_1C.sampled_ms=1
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
+;#notice that this affects the Acquisition threshold range!
+Acquisition_1C.use_CFAR_algorithm=false;
+;#threshold: Acquisition threshold
+Acquisition_1C.threshold=10
+;Acquisition_1C.pfa=0.01
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=100
+
+
+;######### TRACKING GPS CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_KF_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.if=0
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+Tracking_1C.pll_bw_hz=15.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+TelemetryDecoder_1C.decimation_factor=1;
+
+;######### OBSERVABLES CONFIG ############
+;#implementation:
+Observables.implementation=Hybrid_Observables
+
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.dump=false
+
+;#dump_filename: Log path and filename.
+Observables.dump_filename=./observables.dat
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=true
diff --git a/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf b/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
index 06cbb8e7d..dfe6e331a 100644
--- a/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
+++ b/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
@@ -1,5 +1,8 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Sample configuration file for IFEN SX-NSR software receiver front-end
-; http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html
+; https://www.ifen.com/products/sx3-gnss-software-receiver/
; This sample configuration is able to process directly .sream binary files
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
@@ -8,8 +11,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2560000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2560000
;######### SUPL RRLP GPS assistance configuration #####
@@ -22,7 +25,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
@@ -46,7 +49,6 @@ SignalSource.big_endian_bytes=false
; This setting specifies which of the three cases holds for this data file
SignalSource.sample_type=real
SignalSource.sampling_frequency=20480000
-SignalSource.freq=1575420000
SignalSource.samples=0
SignalSource.repeat=false
SignalSource.dump=false
@@ -95,50 +97,49 @@ Resampler.item_type=gr_complex
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
Channels.in_acquisition=1
Channel.signal=1C
;######### GPS ACQUISITION CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.sampled_ms=1
Acquisition_1C.threshold=0.0075
;Acquisition_1C.pfa=0.01
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GPS CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=false
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=45.0;
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
@@ -149,4 +150,3 @@ PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=true
-
diff --git a/conf/gnss-sdr_GPS_L1_plutosdr_realtime.conf b/conf/gnss-sdr_GPS_L1_plutosdr_realtime.conf
new file mode 100644
index 000000000..872f56bf4
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_plutosdr_realtime.conf
@@ -0,0 +1,102 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [sps].
+;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
+; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
+GNSS-SDR.internal_fs_sps=2000000
+
+
+;######### SUPL RRLP GPS assistance configuration #####
+; Check http://www.mcc-mnc.com/
+; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=false
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNC=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Plutosdr_Signal_Source
+SignalSource.item_type=gr_complex
+SignalSource.device_address=192.168.2.1
+SignalSource.sampling_frequency=3000000
+SignalSource.freq=1575420000
+SignalSource.bandwidth=2600000
+SignalSource.gain_mode=manual
+SignalSource.gain=30
+SignalSource.samples=0
+SignalSource.buffer_size=65000
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=./capture.dat
+SignalSource.enable_throttle_control=false
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+InputFilter.implementation=Pass_Through
+InputFilter.item_type=gr_complex
+Resampler.implementation=Direct_Resampler
+Resampler.sample_freq_in=4000000
+Resampler.sample_freq_out=2000000
+Resampler.item_type=gr_complex
+
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Pass_Through
+DataTypeAdapter.item_type=gr_complex
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=6
+Channels.in_acquisition=1
+Channel.signal=1C
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=0.008
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=250
+
+;######### TRACKING GLOBAL CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=4.0;
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_pulse_blanking_gr_complex.conf b/conf/gnss-sdr_GPS_L1_pulse_blanking_gr_complex.conf
new file mode 100644
index 000000000..618341f48
--- /dev/null
+++ b/conf/gnss-sdr_GPS_L1_pulse_blanking_gr_complex.conf
@@ -0,0 +1,110 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
+
+;######### CONTROL_THREAD CONFIG ############
+ControlThread.wait_for_flowgraph=false
+
+;######### SUPL RRLP GPS assistance configuration #####
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=true
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNC=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/home/javier/signals/signal_source_int.dat
+SignalSource.item_type=gr_complex
+SignalSource.sampling_frequency=2000000
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=dump.dat
+SignalSource.enable_throttle_control=false
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Pulse_Blanking_Filter
+InputFilter.Pfa=0.001
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=8
+Channels.in_acquisition=8
+Channel.signal=1C
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.use_CFAR_algorithm=false;
+Acquisition_1C.threshold=20
+;Acquisition_1C.pfa=0.01
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;######### TRACKING GPS CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.extend_correlation_ms=10
+Tracking_1C.pll_bw_hz=35;
+Tracking_1C.pll_bw_narrow_hz=30;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dll_bw_narrow_hz=1.5;
+Tracking_1C.fll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=true
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=1
+PVT.display_rate_ms=100
+PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
index 946176ce3..4b91a9344 100644
--- a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,10 +8,10 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
-GNSS-SDR.internal_fs_hz=1200000
+GNSS-SDR.internal_fs_sps=1200000
;######### SUPL RRLP GPS assistance configuration #####
@@ -22,137 +24,55 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5_1C
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Osmosdr_Signal_Source]
+;#implementation
SignalSource.implementation=RtlTcp_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-SignalSource.item_type=gr_complex
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
SignalSource.sampling_frequency=1200000
-
-;#freq: RF front-end center frequency in [Hz]
SignalSource.freq=1575420000
-
-;#gain: Front-end overall gain Gain in [dB]
SignalSource.gain=40
-
-;#rf_gain: Front-end RF stage gain in [dB]
SignalSource.rf_gain=40
-
-;#rf_gain: Front-end IF stage gain in [dB]
SignalSource.if_gain=30
-
-;#AGC_enabled: Front-end AGC enabled or disabled
SignalSource.AGC_enabled = false
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false
-
SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
-
-;#Address of the rtl_tcp server (IPv6 allowed)
SignalSource.address=127.0.0.1
-
-;#Port of the rtl_tcp server
SignalSource.port=1234
-
-;# Set to true if I/Q samples come swapped
SignalSource.swap_iq=false
-;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
+;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45
InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
@@ -160,133 +80,70 @@ InputFilter.grid_density=16
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter.sampling_frequency=1200000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter.IF=80558
+
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-;# DISABLED IN THE RTL-SDR REALTIME
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
Resampler.implementation=Pass_Through
+
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=4
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
-;#threshold: Acquisition threshold
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms =1
Acquisition_1C.threshold=0.015
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_min=-10000
-;#doppler_step Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
-;#maximum dwells
Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] [GPS_L1_CA_DLL_PLL_Optim_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+;#implementation:
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+;#implementation: Position Velocity and Time (PVT) implementation:
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=true
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf b/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
index 51f75907f..2cec70e8c 100644
--- a/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,10 +8,10 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
-GNSS-SDR.internal_fs_hz=1999898
+GNSS-SDR.internal_fs_sps=1999898
;######### SUPL RRLP GPS assistance configuration #####
@@ -21,15 +24,14 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=Osmosdr_Signal_Source
-;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4.dat
SignalSource.item_type=gr_complex
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
+; FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
SignalSource.sampling_frequency=2000000
SignalSource.freq=1575420000
@@ -43,6 +45,19 @@ SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat
SignalSource.enable_throttle_control=false
+;# Please note that the new RTL-SDR Blog V3 dongles ship a < 1 PPM
+;# temperature compensated oscillator (TCXO), which is well suited for GNSS
+;# signal processing, and a 4.5 V powered bias-tee to feed an active antenna.
+;# Whether the bias-tee is turned off before reception depends on which version
+;# of gr-osmosdr was used when compiling GNSS-SDR. With an old version
+;# (for example, v0.1.4-8), the utility rtl_biast may be used to switch the
+;# bias-tee, and then call gnss-sdr.
+;# See https://github.com/rtlsdrblog/rtl_biast
+;# After reception the bias-tee is switched off automatically by the program.
+;# With newer versions of gr-osmosdr (>= 0.1.4-13), the bias-tee can be
+;# activated by uncommenting the following line:
+;SignalSource.osmosdr_args=rtl,bias=1
+
;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner
@@ -76,10 +91,6 @@ InputFilter.sampling_frequency=1999898
InputFilter.IF=80558 ; IF deviation due to front-end LO inaccuracies [Hz]
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-;# DISABLED IN THE RTL-SDR REALTIME
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
Resampler.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
@@ -89,24 +100,22 @@ Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.015
;Acquisition_1C.pfa=0.0001
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_min=-10000
Acquisition_1C.doppler_step=500
Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
Tracking_1C.dump=false
Tracking_1C.dump_filename=./tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
@@ -114,26 +123,23 @@ Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf b/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
index 0f2521786..b58fc57ba 100644
--- a/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
+++ b/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=3200000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=3200000
;######### SUPL RRLP GPS assistance configuration #####
@@ -19,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
@@ -28,7 +31,6 @@ SignalSource.implementation=Two_Bit_Cpx_File_Signal_Source
SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
SignalSource.sampling_frequency=19200000
-SignalSource.freq=1575420000
SignalSource.samples=0
SignalSource.repeat=false
SignalSource.dump=false
@@ -45,8 +47,6 @@ DataTypeAdapter.item_type=gr_complex
;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.dump=false
-InputFilter.dump_filename=../data/input_filter.dat
InputFilter.input_item_type=gr_complex
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
@@ -67,6 +67,9 @@ InputFilter.grid_density=16
InputFilter.sampling_frequency=19200000
InputFilter.IF=4024000
InputFilter.decimation_factor=6
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
;######### RESAMPLER CONFIG ############
Resampler.implementation=Pass_Through
@@ -82,46 +85,45 @@ Channel.signal=1C
;######### GPS ACQUISITION CONFIG ############
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.sampled_ms=1
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.007
;Acquisition_1C.pfa=0.0001
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_min=-10000
Acquisition_1C.doppler_step=500
Acquisition_1C.max_dwells=15
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GPS CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=true
-Tracking_1C.dump_filename=./tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.dll_bw_hz=1.5;
Tracking_1C.order=3;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=./tracking_ch
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GPS_L1_CA_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf b/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
index 3b2629bdd..cce644be9 100644
--- a/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
+++ b/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
@@ -1,12 +1,16 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Configuration file for using USRP1 as a RF front-end for GPS L2C signals
; Run:
; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L2C_USRP1_realtime.conf
;
+
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -19,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
@@ -46,79 +50,30 @@ DataTypeAdapter.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45
InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter.sampling_frequency=20000000
-
InputFilter.IF=-1600000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter.decimation_factor=1
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
;######### RESAMPLER CONFIG ############
Resampler.implementation=Pass_Through
@@ -130,9 +85,7 @@ Resampler.sample_freq_out=2000000
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_2S.count=1
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
Channel.signal=2S
@@ -151,36 +104,33 @@ Channel7.signal=2S
;Channel11.signal=2S
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;# GPS L2C M
-Acquisition_2S.dump=false
-Acquisition_2S.dump_filename=./acq_dump.dat
-Acquisition_2S.item_type=gr_complex
-Acquisition_2S.if=0
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
Acquisition_2S.threshold=0.0013
;Acquisition_2S.pfa=0.001
Acquisition_2S.doppler_max=10000
-Acquisition_2S.doppler_min=-10000
Acquisition_2S.doppler_step=100
Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
+
+;######### TRACKING GLOBAL CONFIG ############
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
-Tracking_2S.if=0
-Tracking_2S.dump=true
-Tracking_2S.dump_filename=./tracking_ch_
Tracking_2S.pll_bw_hz=1.5;
Tracking_2S.dll_bw_hz=0.3;
Tracking_2S.order=3;
Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=./tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
TelemetryDecoder_2S.dump=false
-TelemetryDecoder_2S.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############.
Observables.implementation=Hybrid_Observables
@@ -189,9 +139,10 @@ Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=Hybrid_PVT
-PVT.averaging_depth=10
-PVT.flag_averaging=true
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
index 838b7d505..49868f37a 100644
--- a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Configuration file for using USRP X300 as a RF front-end for GPS L2C signals
; Set SignalSource.device_address to the IP address of your device
; and run:
@@ -7,8 +10,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SUPL RRLP GPS assistance configuration #####
; Check http://www.mcc-mnc.com/
@@ -20,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
@@ -50,8 +53,6 @@ DataTypeAdapter.item_type=cshort
;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Fir_Filter
-InputFilter.dump=false
-InputFilter.dump_filename=../data/input_filter.dat
InputFilter.input_item_type=cshort
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
@@ -76,6 +77,9 @@ InputFilter.grid_density=16
InputFilter.sampling_frequency=4000000
InputFilter.IF=0
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
;######### RESAMPLER CONFIG ############
Resampler.implementation=Pass_Through
Resampler.dump=false
@@ -86,9 +90,7 @@ Resampler.sample_freq_out=4000000
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_2S.count=1
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
Channel.signal=2S
@@ -106,37 +108,35 @@ Channel7.signal=2S
;Channel10.signal=2S
;Channel11.signal=2S
-
-
;######### ACQUISITION GLOBAL CONFIG ############
;# GPS L2C M
-Acquisition_2S.dump=false
-Acquisition_2S.dump_filename=./acq_dump.dat
-Acquisition_2S.item_type=gr_complex
-Acquisition_2S.if=0
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
Acquisition_2S.threshold=0.0015
;Acquisition_2S.pfa=0.001
Acquisition_2S.doppler_max=5000
Acquisition_2S.doppler_min=-5000
Acquisition_2S.doppler_step=60
Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
+
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
-Tracking_2S.if=0
-Tracking_2S.dump=true
-Tracking_2S.dump_filename=./tracking_ch_
Tracking_2S.pll_bw_hz=2.0;
Tracking_2S.dll_bw_hz=0.25;
Tracking_2S.order=2;
Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=./tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
TelemetryDecoder_2S.dump=true
-TelemetryDecoder_2S.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############.
Observables.implementation=Hybrid_Observables
@@ -145,12 +145,12 @@ Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=Hybrid_PVT
-PVT.averaging_depth=10
-PVT.flag_averaging=true
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
PVT.display_rate_ms=500
-PVT.dump_filename=./PVT
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
PVT.flag_nmea_tty_port=false;
PVT.nmea_dump_devname=/dev/pts/4
@@ -158,3 +158,4 @@ PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
index 5fbe59f95..2207039da 100644
--- a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; Configuration file for using USRP X300 as a RF front-end for Galileo E1 signals.
; Set SignalSource.device_address to the IP address of your device
; and run:
@@ -7,8 +10,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
@@ -24,59 +27,65 @@ SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat
SignalSource.enable_throttle_control=false
+
;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Pass_Through
+
;######### CHANNELS GLOBAL CONFIG ######
Channels_1B.count=4
Channels.in_acquisition=1
Channel.signal=1B
+
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1B.dump=false
-Acquisition_1B.dump_filename=./acq_dump.dat
-Acquisition_1B.item_type=gr_complex
-Acquisition_1B.if=0
-Acquisition_1B.sampled_ms=4
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=1
Acquisition_1B.pfa=0.000008
Acquisition_1B.doppler_max=6000
Acquisition_1B.doppler_step=250
Acquisition_1B.cboc=false
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GLOBAL CONFIG ############
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
Tracking_1B.item_type=gr_complex
-Tracking_1B.if=0
-Tracking_1B.dump=false
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
Tracking_1B.pll_bw_hz=20.0;
Tracking_1B.dll_bw_hz=2.0;
Tracking_1B.order=3;
Tracking_1B.early_late_space_chips=0.15;
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
;######### TELEMETRY DECODER CONFIG ############
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=Galileo_E1B_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
+
;######### PVT CONFIG ############
-PVT.implementation=GALILEO_E1_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
PVT.display_rate_ms=500;
-PVT.dump=false
-PVT.dump_filename=./PVT
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
PVT.flag_nmea_tty_port=true
PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf b/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
index 59059be2b..8ed21451f 100644
--- a/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
+++ b/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,288 +8,91 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source]
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
-;#Use gr_complex for 32 bits float I/Q or ishort for I/Q interleaved short integer.
-;#If ishort is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
SignalSource.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: Use [Ishort_To_Complex] or [Pass_Through]
DataTypeAdapter.implementation=Ishort_To_Complex
-;#dump: Dump the filtered data to a file.
DataTypeAdapter.dump=false
-;#dump_filename: Log path and filename.
DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-#used for gps
-InputFilter.band1_begin=0.0
-;InputFilter.band1_end=0.8
-InputFilter.band1_end=0.85
-InputFilter.band2_begin=0.90
-InputFilter.band2_end=1.0
-
-#used for galileo
-InputFilter.band1_begin=0.0
-;InputFilter.band1_end=0.8
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
-
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
Resampler.dump=false
-;#dump_filename: Log path and filename.
Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
-
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available satellite channels.
Channels_1B.count=4
-;#in_acquisition: Number of channels simultaneously acquiring
Channels.in_acquisition=1
Channel.signal=1B
;######### ACQUISITION GLOBAL CONFIG ############
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.coherent_integration_time_ms=4
-
Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition
-
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
Acquisition_1B.threshold=0.05
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms];
Acquisition_1B.coherent_integration_time_ms=8
-
Acquisition_1B.cboc=false
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
+Tracking_1B.pll_bw_hz=20.0;
+Tracking_1B.dll_bw_hz=2.0;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
Tracking_1B.dump_filename=../data/veml_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1B.pll_bw_hz=20.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
-Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
-Tracking_1B.very_early_late_space_chips=0.6;
-
;######### TELEMETRY DECODER CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
;######### OBSERVABLES CONFIG ############
-;#implementation:
-Observables.implementation=Galileo_E1B_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm:
-PVT.implementation=GALILEO_E1_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
PVT.dump_filename=./PVT
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=true;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
-;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
PVT.flag_rtcm_server=false;
-
-;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_rtcm_tty_port=false;
-
-;#rtcm_dump_devname: serial device descriptor for RTCM logging
PVT.rtcm_dump_devname=/dev/pts/1
diff --git a/conf/gnss-sdr_Galileo_E1_ishort.conf b/conf/gnss-sdr_Galileo_E1_ishort.conf
index e26cdf15f..ff0f52a5a 100644
--- a/conf/gnss-sdr_Galileo_E1_ishort.conf
+++ b/conf/gnss-sdr_Galileo_E1_ishort.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,291 +8,100 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
+SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
SignalSource.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
-SignalSource.enable_throttle_control=false
+SignalSource.enable_throttle_control=true
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ishort_To_Complex
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of GNU Radio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples.
InputFilter.output_item_type=gr_complex
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
-
-
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resampled data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
Channel.signal=1B
+
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_1B.pfa=0.000002
-;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_1B.pfa=0.00001
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
-
-;######### ACQUISITION CHANNELS CONFIG ######
-
-;######### ACQUISITION CH 0 CONFIG ############
-
-;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false
-;Acquisition_1B0.repeat_satellite = true
-;Acquisition_1B1.repeat_satellite = true
-;Acquisition_1B2.repeat_satellite = true
-;Acquisition_1B3.repeat_satellite = true
-
-;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
-;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000
Acquisition_1B.cboc=false
-
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+Acquisition_1B.blocking=false
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1B.dll_bw_hz=2.0;
-
-;#fll_bw_hz: FLL loop filter bandwidth [Hz]
-Tracking_1B.fll_bw_hz=10.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
+Tracking_1B.dump=true
+Tracking_1B.dump_filename=./veml_tracking_ch_
+Tracking_1B.pll_bw_hz=20.0;
+Tracking_1B.dll_bw_hz=3.0;
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.track_pilot=true
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=Galileo_E1B_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GALILEO_E1_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
-PVT.flag_nmea_tty_port=true;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
+PVT.flag_nmea_tty_port=true
PVT.nmea_dump_devname=/dev/pts/4
-
-;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
PVT.flag_rtcm_server=true;
PVT.rtcm_tcp_port=2101
PVT.rtcm_MT1045_rate_ms=5000
PVT.rtcm_MSM_rate_ms=1000
-
-;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_rtcm_tty_port=false;
-
-;#rtcm_dump_devname: serial device descriptor for RTCM logging
PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Galileo_E1_nsr.conf b/conf/gnss-sdr_Galileo_E1_nsr.conf
index a4b37d02e..b95b2a972 100644
--- a/conf/gnss-sdr_Galileo_E1_nsr.conf
+++ b/conf/gnss-sdr_Galileo_E1_nsr.conf
@@ -1,3 +1,6 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -5,11 +8,11 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-;GNSS-SDR.internal_fs_hz=6826700
-GNSS-SDR.internal_fs_hz=2560000
-;GNSS-SDR.internal_fs_hz=4096000
-;GNSS-SDR.internal_fs_hz=5120000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+;GNSS-SDR.internal_fs_sps=6826700
+GNSS-SDR.internal_fs_sps=2560000
+;GNSS-SDR.internal_fs_sps=4096000
+;GNSS-SDR.internal_fs_sps=5120000
;######### SIGNAL_SOURCE CONFIG ############
@@ -17,21 +20,14 @@ SignalSource.implementation=Nsr_File_Signal_Source
SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
SignalSource.sampling_frequency=20480000
-SignalSource.freq=1575420000
SignalSource.samples=0 ; 0 means the entire file
SignalSource.repeat=false
SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
@@ -40,8 +36,6 @@ DataTypeAdapter.item_type=float
;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.dump=false
-InputFilter.dump_filename=../data/input_filter.dat
InputFilter.input_item_type=float
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
@@ -65,6 +59,8 @@ InputFilter.grid_density=16
InputFilter.sampling_frequency=20480000
InputFilter.IF=5499998.47412109
InputFilter.decimation_factor=8
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
@@ -78,43 +74,45 @@ Channel.signal=1B
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_1B.dump=false
-Acquisition_1B.dump_filename=./acq_dump.dat
-Acquisition_1B.item_type=gr_complex
-Acquisition_1B.if=0
-Acquisition_1B.sampled_ms=4
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
Acquisition_1B.pfa=0.0000008
Acquisition_1B.doppler_max=15000
Acquisition_1B.doppler_step=125
-Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000
+Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GLOBAL CONFIG ############
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
Tracking_1B.item_type=gr_complex
-Tracking_1B.if=0
-Tracking_1B.dump=false
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
Tracking_1B.pll_bw_hz=20.0;
Tracking_1B.dll_bw_hz=2.0;
Tracking_1B.order=3;
Tracking_1B.early_late_space_chips=0.15;
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
;######### TELEMETRY DECODER CONFIG ############
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=Galileo_E1B_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=true
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GALILEO_E1_PVT
-PVT.averaging_depth=1
-PVT.flag_averaging=false
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.dump=true
diff --git a/conf/gnss-sdr_Galileo_E5a.conf b/conf/gnss-sdr_Galileo_E5a.conf
index fd4cfe55f..81dddd613 100644
--- a/conf/gnss-sdr_Galileo_E5a.conf
+++ b/conf/gnss-sdr_Galileo_E5a.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=32000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=32000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,184 +22,38 @@ GNSS-SDR.internal_fs_hz=32000000
;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
;GNSS-SDR.SUPL_gps_acquisition_port=7275
;GNSS-SDR.SUPL_MCC=244
-;GNSS-SDR.SUPL_MNS=5
+;GNSS-SDR.SUPL_MNC=5
;GNSS-SDR.SUPL_LAC=0x59e2
;GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/ifen/32MS_complex.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=32000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1176450000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;SignalConditioner.implementation=Signal_Conditioner
SignalConditioner.implementation=Pass_Through
-;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Pass_Through
-
-;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples.
-InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=32000000
-InputFilter.IF=0
-
-
-
-;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
-Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples.
-Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=8000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
-
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available satellite channels.
Channels_5X.count=1
-;#in_acquisition: Number of channels simultaneously acquiring
Channels.in_acquisition=1
-;#system: GPS, GLONASS, Galileo, SBAS or Compass
-;#if the option is disabled by default is assigned GPS
-Channel.signal=5X
;######### SPECIFIC CHANNELS CONFIG ######
;#The following options are specific to each channel and overwrite the generic options
;######### CHANNEL 0 CONFIG ############
-
-Channel0.signal=5X
-
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
-Channel0.satellite=19
-;Channel0.repeat_satellite=true
+;Channel0.satellite=19
;######### CHANNEL 1 CONFIG ############
-
-;Channel1.system=Galileo
-;Channel1.signal=5Q
;Channel1.satellite=12
;######### CHANNEL 2 CONFIG ############
-
-;Channel2.system=Galileo
-;Channel2.signal=5Q
;Channel2.satellite=11
;######### CHANNEL 3 CONFIG ############
@@ -207,129 +63,57 @@ Channel0.satellite=19
;Channel3.satellite=20
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_5X.dump=true
-;#filename: Log path and filename
-Acquisition_5X.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_5X.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_5X.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_5X.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_5X.item_type=gr_complex
+Acquisition_5X.coherent_integration_time_ms=1
Acquisition_5X.threshold=0.001
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_5X.pfa=0.0003
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_5X.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_5X.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_5X.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_5X.max_dwells=1
-
-;#CAF filter: **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
Acquisition_5X.CAF_window_hz=0
-;#Zero_padding: **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions.
-;#If set to 1 it is ON, if set to 0 it is OFF.
Acquisition_5X.Zero_padding=0
+Acquisition_5X.dump=false
+Acquisition_5X.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm:
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_5X.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_5X.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_5X.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
+Tracking_5X.pll_bw_hz=20.0;
+Tracking_5X.dll_bw_hz=20.0;
+Tracking_5X.pll_bw_narrow_hz=2.0;
+Tracking_5X.dll_bw_narrow_hz=5.0;
+Tracking_5X.order=2;
+Tracking_5X.early_late_space_chips=0.5;
+Tracking_5X.dump=false
Tracking_5X.dump_filename=./tracking_ch_
-;#pll_bw_hz_init: **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
-Tracking_5X.pll_bw_hz_init=20.0;
-;#dll_bw_hz_init: **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
-Tracking_5X.dll_bw_hz_init=20.0;
-;#dll_ti_ms: **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
-;Tracking_5X.ti_ms=3;
-Tracking_5X.ti_ms=1;
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-;Tracking.pll_bw_hz=5.0;
-Tracking_5X.pll_bw_hz=20.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-;Tracking.dll_bw_hz=2.0;
-Tracking_5X.dll_bw_hz=20.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_5X.order=2;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_5X.early_late_space_chips=0.5;
;######### TELEMETRY DECODER CONFIG ############
-;#implementation:
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
TelemetryDecoder_5X.dump=false
+
;######### OBSERVABLES CONFIG ############
-;#implementation:
-;Use [Galileo_E1B_Observables] for E5a also.
-Observables.implementation=Galileo_E1B_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm:
-;Use [GALILEO_E1_PVT] for E5a also.
-PVT.implementation=GALILEO_E1_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=true;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf b/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
index f5c045cc6..26d01617d 100644
--- a/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
+++ b/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=50000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=50000000
;######### SUPL RRLP GPS assistance configuration #####
; Check http://www.mcc-mnc.com/
@@ -19,7 +21,7 @@ GNSS-SDR.internal_fs_hz=50000000
;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
;GNSS-SDR.SUPL_gps_acquisition_port=7275
;GNSS-SDR.SUPL_MCC=244
-;GNSS-SDR.SUPL_MNS=5
+;GNSS-SDR.SUPL_MNC=5
;GNSS-SDR.SUPL_LAC=0x59e2
;GNSS-SDR.SUPL_CI=0x31b0
@@ -28,7 +30,6 @@ SignalSource.implementation=File_Signal_Source
SignalSource.filename=/datalogger/signals/ifen/Galileo_E5ab_IFEN_CTTC_run1.dat ; <- PUT YOUR FILE HERE
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=50000000
-SignalSource.freq=1176450000
SignalSource.samples=0
SignalSource.repeat=false
SignalSource.dump=false
@@ -44,8 +45,6 @@ DataTypeAdapter.implementation=Pass_Through
;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.dump=false
-InputFilter.dump_filename=../data/input_filter.dat
InputFilter.input_item_type=gr_complex
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
@@ -66,6 +65,8 @@ InputFilter.grid_density=16
InputFilter.sampling_frequency=50000000
InputFilter.IF=-15345000
InputFilter.decimation_factor=1
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
@@ -75,7 +76,7 @@ Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-Channels_5X.count=1
+Channels_5X.count=8
Channels.in_acquisition=1
Channel.signal=5X
@@ -84,28 +85,25 @@ Channel.signal=5X
;######### CHANNEL 0 CONFIG ############
Channel0.signal=5X
-Channel0.satellite=19
+;Channel0.satellite=19
;Channel0.repeat_satellite=true
;######### CHANNEL 1 CONFIG ############
Channel1.signal=5X
-Channel1.satellite=12
+;Channel1.satellite=12
;######### CHANNEL 2 CONFIG ############
Channel2.signal=5X
-Channel2.satellite=11
+;Channel2.satellite=11
;######### CHANNEL 3 CONFIG ############
Channel3.signal=5X
-Channel3.satellite=20
+;Channel3.satellite=20
;######### ACQUISITION GLOBAL CONFIG ############
-Acquisition_5X.dump=false
-Acquisition_5X.dump_filename=./acq_dump.dat
-Acquisition_5X.item_type=gr_complex
-Acquisition_5X.if=0
-Acquisition_5X.coherent_integration_time_ms=1
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
+Acquisition_5X.item_type=gr_complex
+Acquisition_5X.coherent_integration_time_ms=1
Acquisition_5X.threshold=0.002
Acquisition_5X.doppler_max=10000
Acquisition_5X.doppler_step=250
@@ -113,36 +111,39 @@ Acquisition_5X.bit_transition_flag=false
Acquisition_5X.max_dwells=1
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
+Acquisition_5X.dump=false
+Acquisition_5X.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
Tracking_5X.item_type=gr_complex
-Tracking_5X.if=0
-Tracking_5X.dump=false
-Tracking_5X.dump_filename=./tracking_ch_
-Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
-Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
-Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
Tracking_5X.pll_bw_hz=20.0;
Tracking_5X.dll_bw_hz=20.0;
+Tracking_5X.pll_bw_narrow_hz=20.0;
+Tracking_5X.dll_bw_narrow_hz=20.0;
Tracking_5X.order=2;
Tracking_5X.early_late_space_chips=0.5;
+Tracking_5X.dump=false
+Tracking_5X.dump_filename=./tracking_ch_
+
;######### TELEMETRY DECODER CONFIG ############
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
TelemetryDecoder_5X.dump=false
+
;######### OBSERVABLES CONFIG ############
-Observables.implementation=Galileo_E1B_Observables
+Observables.implementation=Hybrid_Observables
Observables.dump=false
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-PVT.implementation=GALILEO_E1_PVT
-PVT.averaging_depth=100
-PVT.flag_averaging=true
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=OFF ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=OFF ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
PVT.dump=false
PVT.dump_filename=./PVT
@@ -152,4 +153,3 @@ PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
diff --git a/conf/gnss-sdr_Hybrid_byte.conf b/conf/gnss-sdr_Hybrid_byte.conf
index d4b2a6a16..b7f4e58ff 100644
--- a/conf/gnss-sdr_Hybrid_byte.conf
+++ b/conf/gnss-sdr_Hybrid_byte.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,163 +8,58 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=20000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=20000000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-SignalSource.filename=/datalogger/signals/Fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.filename=/media/javier/Extreme 500/fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=20000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ibyte_To_Complex
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=20000000
-InputFilter.IF=0
-
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=20000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=20000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_1C.count=8
-;#count: Number of available Galileo satellite channels.
-Channels_1B.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels_1C.count=10
+Channels_1B.count=10
Channels.in_acquisition=1
;#signal:
+;# "1C" GPS L1 C/A
+;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
+;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
+
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
+Channel0.signal=1C
Channel1.signal=1C
Channel2.signal=1C
Channel3.signal=1C
@@ -178,158 +75,86 @@ Channel12.signal=1B
Channel13.signal=1B
Channel14.signal=1B
Channel15.signal=1B
-
+Channel16.signal=1B
+Channel17.signal=1B
+Channel18.signal=1B
+Channel19.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
-Acquisition_1C.threshold=0.0060
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_1C.doppler_step=500
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=18
+Acquisition_1C.use_CFAR_algorithm=false
+Acquisition_1C.blocking=true
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
-;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_1B.pfa=0.0000008
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.threshold=25
+Acquisition_1B.use_CFAR_algorithm=false
+Acquisition_1B.blocking=true
+Acquisition_1B.doppler_max=5000
Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.extend_correlation_ms=1
+Tracking_1C.pll_bw_hz=40;
+Tracking_1C.pll_bw_narrow_hz=30;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dll_bw_narrow_hz=1.5;
+Tracking_1C.order=2;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=45.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=4.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
+Tracking_1B.dll_bw_hz=3.0;
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=4;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
+;#implementation:
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
-PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=10;
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
+PVT.elevation_mask=15;
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump=false
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Hybrid_byte_sim.conf b/conf/gnss-sdr_Hybrid_byte_sim.conf
index df7ae450a..cd5ce2f3c 100644
--- a/conf/gnss-sdr_Hybrid_byte_sim.conf
+++ b/conf/gnss-sdr_Hybrid_byte_sim.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,170 +8,49 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2600000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-SignalSource.filename=/datalogger/signals/gnss-sim/signal_out.bin ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.filename=/Users/carlesfernandez/git/cttc/build/signal_out.bin ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false
-
SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Ibyte_To_Cshort
+DataTypeAdapter.implementation=Ibyte_To_Complex
DataTypeAdapter.dump=false
-;#dump_filename: Log path and filename.
DataTypeAdapter.dump_filename=../data/DataTypeAdapter.dat
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=cshort
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=cshort
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples.
-Resampler.item_type=cshort
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
+Resampler.item_type = gr_complex;
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_1C.count=12
-;#count: Number of available Galileo satellite channels.
+Channels_1C.count=11
Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-
-;#IMPORTANT: When cshort is used as input type for Acq and Trk, please set the Channel type to cshort here
-;#item_type: Type and resolution for each of the signal samples.
-Channel.item_type=cshort
;#signal:
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel1.signal=1C
Channel2.signal=1C
Channel3.signal=1C
@@ -188,158 +69,76 @@ Channel15.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=cshort
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
-;#notice that this affects the Acquisition threshold range!
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.use_CFAR_algorithm=false;
-;#threshold: Acquisition threshold
-Acquisition_1C.threshold=11
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+Acquisition_1C.threshold=15
;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=6000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=100
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=cshort
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.pfa=0.0000008
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_1C.item_type=cshort
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=20.0;
Tracking_1C.dll_bw_hz=1.5;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1C.order=3;
+
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples.
-Tracking_1B.item_type=cshort
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1B.item_type=gr_complex
Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
-TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump=false
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Hybrid_gr_complex.conf b/conf/gnss-sdr_Hybrid_gr_complex.conf
index a0f10bdb4..14fee756d 100644
--- a/conf/gnss-sdr_Hybrid_gr_complex.conf
+++ b/conf/gnss-sdr_Hybrid_gr_complex.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,154 +8,28 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4092000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4092000
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/sim/GPS_sim1.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4092000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Pass_Through
-;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Pass_Through
-DataTypeAdapter.item_type=gr_complex
-
-;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
-InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;# Original sampling frequency stored in the signal file
-InputFilter.sampling_frequency=4092000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
-InputFilter.decimation_factor=8
-
-
-;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-Resampler.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=1
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
-;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q
-
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel0.signal=1C
Channel1.signal=1B
@@ -174,171 +50,81 @@ Channel15.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.use_CFAR_algorithm=false;
-;#threshold: Acquisition threshold
Acquisition_1C.threshold=30
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=5000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=100
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.pfa=0.0000002
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1C.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
-
-;# Extended correlation after telemetry bit synchronization
-;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
-;# Longer integration period require more stable front-end LO
-
Tracking_1C.extend_correlation_ms=10
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1C.pll_bw_hz=40;
Tracking_1C.pll_bw_narrow_hz=25;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1C.dll_bw_hz=2.0;
-
Tracking_1C.dll_bw_narrow_hz=2.0;
-
-;#fll_bw_hz: FLL loop filter bandwidth [Hz]
-Tracking_1C.fll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1C.order=3;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1B.dll_bw_hz=2.0;
-
-;#fll_bw_hz: FLL loop filter bandwidth [Hz]
Tracking_1B.fll_bw_hz=10.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=4;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B_factor=4;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Hybrid_ishort.conf b/conf/gnss-sdr_Hybrid_ishort.conf
index e326d475f..c634009f3 100644
--- a/conf/gnss-sdr_Hybrid_ishort.conf
+++ b/conf/gnss-sdr_Hybrid_ishort.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,160 +22,44 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+;#implementation
SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
SignalSource.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource.dump=false
-
-SignalSource.dump_filename=../data/signal_source.dat
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ishort_To_Complex
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
-
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signalq
-Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
+Resampler.dump=false
+Resampler.dump_filename=../data/resampler.dat
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=0
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=5
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
;#signal:
@@ -191,155 +77,76 @@ Channel6.signal=1B
Channel7.signal=1B
-
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel:
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel:
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.pfa=0.0000008; 0.0000008
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
Acquisition_1B.cboc=false;
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=50.0;
+Tracking_1C.dll_bw_hz=5.0;
+Tracking_1C.order=3;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=50.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=5.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm:
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=20.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=4;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
@@ -348,6 +155,5 @@ PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of Galileo ephemeris messages. 0 m
PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of GPS ephemeris messages. 0 mutes this message
PVT.rtcm_MT1097_rate_ms=1000 ; Period (in ms) of Galileo observables. 0 mutes this message
PVT.rtcm_MT1077_rate_ms=1000 ; Period (in ms) of GPS observables. 0 mutes this message
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump=false
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_Hybrid_nsr.conf b/conf/gnss-sdr_Hybrid_nsr.conf
index a87f44cc3..9f65ead4b 100644
--- a/conf/gnss-sdr_Hybrid_nsr.conf
+++ b/conf/gnss-sdr_Hybrid_nsr.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,157 +8,70 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-;GNSS-SDR.internal_fs_hz=6826700
-GNSS-SDR.internal_fs_hz=2560000
-;GNSS-SDR.internal_fs_hz=4096000
-;GNSS-SDR.internal_fs_hz=5120000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2560000
+
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Nsr_File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.filename=/home/javier/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
SignalSource.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=20480000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false
-
SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=float
;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
InputFilter.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=float
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45
InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16
-
-;# Original sampling frequency stored in the signal file
InputFilter.sampling_frequency=20480000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
InputFilter.decimation_factor=8
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
Resampler.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_1C.count=8
-;#count: Number of available Galileo satellite channels.
-Channels_1B.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels_1C.count=10
+Channels_1B.count=10
Channels.in_acquisition=1
;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel0.signal=1C
@@ -167,175 +82,95 @@ Channel4.signal=1C
Channel5.signal=1C
Channel6.signal=1C
Channel7.signal=1C
-Channel8.signal=1B
-Channel9.signal=1B
+Channel8.signal=1C
+Channel9.signal=1C
Channel10.signal=1B
Channel11.signal=1B
Channel12.signal=1B
Channel13.signal=1B
Channel14.signal=1B
Channel15.signal=1B
+Channel16.signal=1B
+Channel17signal=1B
+Channel18.signal=1B
+Channel19.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
-Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.threshold=25
+Acquisition_1C.use_CFAR_algorithm=false
+Acquisition_1C.blocking=true
Acquisition_1C.doppler_max=5000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
-;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_1B.pfa=0.0000002
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_1B.doppler_step=125
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.threshold=25
+Acquisition_1B.use_CFAR_algorithm=false
+Acquisition_1B.blocking=true
+Acquisition_1B.doppler_max=5000
+Acquisition_1B.doppler_step=250
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1C.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
+Tracking_1C.extend_correlation_ms=1
+Tracking_1C.pll_bw_hz=40;
+Tracking_1C.pll_bw_narrow_hz=30;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dll_bw_narrow_hz=1.5;
+Tracking_1C.order=2;
+Tracking_1C.dump=false
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;# Extended correlation after telemetry bit synchronization
-;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
-;# Longer integration period require more stable front-end LO
-
-Tracking_1C.extend_correlation_ms=1
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-
-Tracking_1C.pll_bw_hz=40;
-Tracking_1C.pll_bw_narrow_hz=20;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=2.0;
-Tracking_1C.dll_bw_narrow_hz=1.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
+Tracking_1B.pll_bw_hz=20.0;
Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=4;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B_factor=4;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
+;#implementation:
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=10;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
+PVT.elevation_mask=20;
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump=false
PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_galileo_E1_extended_correlator_byte.conf b/conf/gnss-sdr_galileo_E1_extended_correlator_byte.conf
new file mode 100644
index 000000000..366299f74
--- /dev/null
+++ b/conf/gnss-sdr_galileo_E1_extended_correlator_byte.conf
@@ -0,0 +1,141 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=20000000
+
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=File_Signal_Source
+SignalSource.filename=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
+SignalSource.item_type=byte
+SignalSource.sampling_frequency=20000000
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.enable_throttle_control=false
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Ibyte_To_Complex
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Pass_Through
+
+;######### RESAMPLER CONFIG ############
+Resampler.implementation=Pass_Through
+
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=0
+Channels_1B.count=8
+
+Channels.in_acquisition=1
+
+Channel1.signal=1B
+Channel2.signal=1B
+Channel3.signal=1B
+Channel4.signal=1B
+Channel5.signal=1B
+Channel6.signal=1B
+Channel7.signal=1B
+Channel8.signal=1B
+Channel9.signal=1B
+Channel10.signal=1B
+Channel11.signal=1B
+Channel12.signal=1B
+Channel13.signal=1B
+Channel14.signal=1B
+Channel15.signal=1B
+
+
+;######### GPS ACQUISITION CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.scoherent_integration_time_ms=1
+Acquisition_1C.use_CFAR_algorithm=false;
+Acquisition_1C.threshold=18
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;######### GALILEO ACQUISITION CONFIG ############
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
+Acquisition_1B.acquire_pilot=true
+Acquisition_1B.use_CFAR_algorithm=false
+Acquisition_1B.threshold=21
+Acquisition_1B.doppler_max=5000
+Acquisition_1B.doppler_step=125
+Acquisition_1B.bit_transition_flag=true
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=../data/acq_dump.dat
+
+
+;######### TRACKING GPS CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=30.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+
+;######### TRACKING GALILEO CONFIG ############
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+Tracking_1B.item_type=gr_complex
+Tracking_1B.track_pilot=true
+Tracking_1B.pll_bw_hz=4.0;
+Tracking_1B.dll_bw_hz=0.5;
+Tracking_1B.pll_bw_narrow_hz=2.0;
+Tracking_1B.dll_bw_narrow_hz=0.25;
+Tracking_1B.extend_correlation_symbols=4;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.early_late_space_narrow_chips=0.06;
+Tracking_1B.very_early_late_space_narrow_chips=0.25;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+;######### TELEMETRY DECODER GALILEO CONFIG ############
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100;
+PVT.display_rate_ms=500;
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_galileo_E1_extended_correlator_labsat.conf b/conf/gnss-sdr_galileo_E1_extended_correlator_labsat.conf
new file mode 100644
index 000000000..2a63b36b6
--- /dev/null
+++ b/conf/gnss-sdr_galileo_E1_extended_correlator_labsat.conf
@@ -0,0 +1,169 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+GNSS-SDR.internal_fs_sps=5456000
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Labsat_Signal_Source
+SignalSource.selected_channel=1
+;#filename: path to file with the captured GNSS signal samples to be processed
+;# Labsat sile source automatically increments the file name when the signal is split in several files
+;# the adapter adds "_0000.LS3" to this base path and filename. Next file will be "_0001.LS3" and so on
+;# in this example, the first file complete path will be ../signals/GPS_025_0000.LS3
+SignalSource.filename=../signals/GPS_025 ; <- PUT YOUR FILE HERE
+SignalSource.item_type=gr_complex
+SignalSource.sampling_frequency=16368000
+SignalSource.samples=0
+SignalSource.repeat=false
+SignalSource.dump=false
+SignalSource.dump_filename=../data/signal_source.dat
+SignalSource.enable_throttle_control=false
+
+
+;######### SIGNAL_CONDITIONER CONFIG ############
+SignalConditioner.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER CONFIG ############
+DataTypeAdapter.implementation=Pass_Through
+DataTypeAdapter.item_type=gr_complex
+
+;######### INPUT_FILTER CONFIG ############
+InputFilter.implementation=Freq_Xlating_Fir_Filter
+InputFilter.dump=false
+InputFilter.dump_filename=../data/input_filter.dat
+
+InputFilter.input_item_type=gr_complex
+InputFilter.output_item_type=gr_complex
+InputFilter.taps_item_type=float
+InputFilter.number_of_taps=5
+InputFilter.number_of_bands=2
+
+InputFilter.band1_begin=0.0
+InputFilter.band1_end=0.45
+InputFilter.band2_begin=0.55
+InputFilter.band2_end=1.0
+
+InputFilter.ampl1_begin=1.0
+InputFilter.ampl1_end=1.0
+InputFilter.ampl2_begin=0.0
+InputFilter.ampl2_end=0.0
+
+InputFilter.band1_error=1.0
+InputFilter.band2_error=1.0
+
+InputFilter.filter_type=bandpass
+InputFilter.grid_density=16
+InputFilter.sampling_frequency=16368000
+InputFilter.IF=0
+InputFilter.decimation_factor=3
+
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=0
+Channels_1B.count=6
+Channels.in_acquisition=1
+
+Channel0.signal=1B
+Channel1.signal=1B
+Channel2.signal=1B
+Channel3.signal=1B
+Channel4.signal=1B
+Channel5.signal=1B
+Channel6.signal=1B
+Channel7.signal=1B
+Channel8.signal=1B
+Channel9.signal=1B
+Channel10.signal=1B
+Channel11.signal=1B
+Channel12.signal=1B
+Channel13.signal=1B
+Channel14.signal=1B
+Channel15.signal=1B
+
+
+;######### GPS ACQUISITION CONFIG ############
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.use_CFAR_algorithm=false;
+Acquisition_1C.threshold=22
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+;######### GALILEO ACQUISITION CONFIG ############
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
+Acquisition_1B.acquire_pilot=true
+Acquisition_1B.use_CFAR_algorithm=false
+Acquisition_1B.threshold=22
+Acquisition_1B.doppler_max=5000
+Acquisition_1B.doppler_step=125
+Acquisition_1B.bit_transition_flag=true
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=../data/acq_dump.dat
+
+
+;######### TRACKING GPS CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+;######### TRACKING GALILEO CONFIG ############
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+Tracking_1B.item_type=gr_complex
+Tracking_1B.track_pilot=true
+Tracking_1B.pll_bw_hz=7.5;
+Tracking_1B.dll_bw_hz=0.5;
+Tracking_1B.pll_bw_narrow_hz=2.5;
+Tracking_1B.dll_bw_narrow_hz=0.25;
+Tracking_1B.extend_correlation_symbols=4;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.early_late_space_narrow_chips=0.15;
+Tracking_1B.very_early_late_space_narrow_chips=0.30;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+;######### TELEMETRY DECODER GALILEO CONFIG ############
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100;
+PVT.display_rate_ms=500;
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
index 7879cb02c..c395a5f3c 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
; Check http://www.mcc-mnc.com/
@@ -19,39 +21,25 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
SignalSource.flag_read_file=true
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=1
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -59,88 +47,34 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=0;
-;#-205000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -149,25 +83,15 @@ DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 1 CONFIG ############
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -176,28 +100,17 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
;# CHANNEL CONNECTION
@@ -211,131 +124,61 @@ Channel6.RF_channel_ID=0
Channel7.RF_channel_ID=0
;#signal:
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.use_CFAR_algorithm=false;
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
Acquisition_1C.threshold=15
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1C.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
-
Tracking_1C.extend_correlation_ms=10
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.pll_bw_narrow_hz=35;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.dll_bw_narrow_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
index 2808b251d..134bfa457 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,36 +22,23 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1a.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=1
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -57,87 +46,34 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=-205000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -146,25 +82,15 @@ DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 1 CONFIG ############
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -173,37 +99,20 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
-;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q
-
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
Channel1.RF_channel_ID=0
@@ -226,123 +135,54 @@ Channel6.signal=1C
Channel7.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.012
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=3.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
index f7a56a6ff..9552ebabe 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,36 +22,24 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=1
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -57,87 +47,33 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
-InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=-205000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -146,25 +82,15 @@ DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 1 CONFIG ############
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -173,36 +99,19 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
-;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q
-
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
Channel1.RF_channel_ID=0
@@ -224,123 +133,55 @@ Channel5.signal=1C
Channel6.signal=1C
Channel7.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.012
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=3.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
index 9bd32b4ca..f1e5d264b 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,36 +22,23 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_II-3b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=1
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -57,87 +46,34 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=40000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=-205000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=16
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -146,25 +82,15 @@ DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 1 CONFIG ############
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -173,35 +99,26 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;# signal:
+;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
@@ -214,7 +131,6 @@ Channel6.RF_channel_ID=0
Channel7.RF_channel_ID=0
;#signal:
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel0.signal=1C
Channel1.signal=1C
Channel2.signal=1C
@@ -225,123 +141,54 @@ Channel6.signal=1C
Channel7.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.012
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=3.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
index 65cc26133..201fff1ab 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=5000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=5000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,36 +22,23 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_I-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=1
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -57,87 +46,34 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=40000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=-205000
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -146,25 +82,15 @@ DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 1 CONFIG ############
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -173,36 +99,19 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=4
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
-;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q
-
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
Channel1.RF_channel_ID=0
@@ -214,129 +123,60 @@ Channel3.RF_channel_ID=0
;Channel7.RF_channel_ID=0
;#signal:
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel0.signal=1C
Channel1.signal=1C
Channel2.signal=1C
Channel3.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.011
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=3.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
index 3f54ad14d..48eabee34 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,32 +22,20 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=2
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######################################################
@@ -53,7 +43,6 @@ SignalSource.usb_packet_buffer=128
;######################################################
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -61,85 +50,31 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
-;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS.
InputFilter0.IF=-205000
-;#InputFilter0.IF=0
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######################################################
@@ -147,7 +82,6 @@ Resampler0.implementation=Pass_Through
;######################################################
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -155,90 +89,35 @@ DataTypeAdapter1.implementation=Pass_Through
DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter1.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter_ch1.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter1.band1_begin=0.0
InputFilter1.band1_end=0.45
InputFilter1.band2_begin=0.55
InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter1.ampl1_begin=1.0
InputFilter1.ampl1_end=1.0
InputFilter1.ampl2_begin=0.0
InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter1.band1_error=1.0
InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter1.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter1.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
-;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS.
InputFilter1.IF=100000
-;#InputFilter1.IF=0
-
-;# Decimation factor after the frequency tranaslating block
InputFilter1.decimation_factor=8
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -247,38 +126,26 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
Channels_2S.count=8
-;#count: Number of available Galileo satellite channels.
-;Channels_Galileo.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-
;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;# CHANNEL CONNECTION
@@ -356,138 +223,82 @@ Channel15.RF_channel_ID=1
Channel15.signal=2S
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.008
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=5000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=true
-Tracking_1C.dump_filename=./tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.dll_bw_hz=3.0;
Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=true
+Tracking_1C.dump_filename=./tracking_ch_
+
;# GPS L2C M
-Acquisition_2S.dump=false
-Acquisition_2S.dump_filename=./acq_dump.dat
-Acquisition_2S.item_type=gr_complex
-Acquisition_2S.if=0
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
Acquisition_2S.threshold=0.0005
;Acquisition_2S.pfa=0.001
Acquisition_2S.doppler_max=5000
Acquisition_2S.doppler_min=-5000
Acquisition_2S.doppler_step=30
Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
-Tracking_2S.if=0
-Tracking_2S.dump=true
-Tracking_2S.dump_filename=./tracking_ch_
Tracking_2S.pll_bw_hz=1.5;
Tracking_2S.dll_bw_hz=0.3;
Tracking_2S.order=3;
Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=./tracking_ch_
+
;######### TELEMETRY DECODER GPS L1 CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=20;
;######### TELEMETRY DECODER GPS L2 CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
TelemetryDecoder_2S.dump=false
-TelemetryDecoder_2S.decimation_factor=1;
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_bin_file_III_1b.conf
index 6932bd009..7c19ebc2c 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_bin_file_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_bin_file_III_1b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2500000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=2500000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,35 +22,22 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
SignalSource.flag_read_file=true
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
SignalSource.RF_channels=2
-
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######################################################
@@ -56,7 +45,6 @@ SignalSource.usb_packet_buffer=128
;######################################################
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -64,85 +52,31 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
-;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS.
-;#InputFilter0.IF=-205000
InputFilter0.IF=0
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######################################################
@@ -150,7 +84,6 @@ Resampler0.implementation=Pass_Through
;######################################################
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -158,90 +91,35 @@ DataTypeAdapter1.implementation=Pass_Through
DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter1.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter_ch1.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter1.band1_begin=0.0
InputFilter1.band1_end=0.45
InputFilter1.band2_begin=0.55
InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter1.ampl1_begin=1.0
InputFilter1.ampl1_end=1.0
InputFilter1.ampl2_begin=0.0
InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter1.band1_error=1.0
InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter1.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter1.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
-;# WARNING: Fraunhofer front-end hardware configurations can differ. Signals available at http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS.
-;#InputFilter1.IF=100000
InputFilter1.IF=0
-
-;# Decimation factor after the frequency translating block
InputFilter1.decimation_factor=8
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner2.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -250,37 +128,28 @@ DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
Resampler2.implementation=Pass_Through
-;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
+;######### CHANNELS GLOBAL CONFIG ############.
Channels_1C.count=2
Channels_1B.count=4
Channels_2S.count=4
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;# CHANNEL CONNECTION
@@ -302,49 +171,23 @@ Channel14.RF_channel_ID=1
Channel15.RF_channel_ID=1
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.008
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.0001
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=5000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=250
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
Tracking_1C.dump=false
Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
@@ -353,148 +196,82 @@ Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
;# GPS L2C M
-Acquisition_2S.dump=false
-Acquisition_2S.dump_filename=./acq_dump.dat
-Acquisition_2S.item_type=gr_complex
-Acquisition_2S.if=0
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
Acquisition_2S.threshold=0.0005
;Acquisition_2S.pfa=0.001
Acquisition_2S.doppler_max=5000
Acquisition_2S.doppler_min=-5000
Acquisition_2S.doppler_step=30
Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
-Tracking_2S.if=0
-Tracking_2S.dump=true
-Tracking_2S.dump_filename=../data/epl_tracking_ch_
Tracking_2S.pll_bw_hz=1.5;
Tracking_2S.dll_bw_hz=0.3;
Tracking_2S.order=3;
Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=../data/epl_tracking_ch_
;# GALILEO E1B
-
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.pfa=0.0000005
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=5000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=./veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
-
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=./veml_tracking_ch_
;######### TELEMETRY DECODER GPS L1 CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=20;
;######### TELEMETRY DECODER GPS L2 CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
TelemetryDecoder_2S.dump=false
-TelemetryDecoder_2S.decimation_factor=1;
;######### TELEMETRY DECODER GALILEO E1B CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=5;
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=100
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
index b5e865ea8..63746aea4 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,265 +22,75 @@ GNSS-SDR.SUPL_1C_ephemeris_port=7275
GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com
GNSS-SDR.SUPL_1C_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+;#implementation
SignalSource.implementation=UHD_Signal_Source
-
-;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=gr_complex
-
-;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends)
SignalSource.RF_channels=2
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000
-
-;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0)
SignalSource.subdevice=A:0 B:0
;######### RF Channels specific settings ######
-
;## RF CHANNEL 0 ##
-;#freq: RF front-end center frequency in [Hz]
SignalSource.freq0=1575420000
-
-;#gain: Front-end Gain in [dB]
SignalSource.gain0=50
-
-;#samples: Number of samples to be processed. Notice that 0 indicates no limit
SignalSource.samples0=0
-;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version
-SignalSource.dump0=false
-
-SignalSource.dump_filename0=../data/signal_source0.dat
-
;## RF CHANNEL 1 ##
-;#freq: RF front-end center frequency in [Hz]
SignalSource.freq1=1575420000
-
-;#gain: Front-end Gain in [dB]
SignalSource.gain1=50
-
-;#samples: Number of samples to be processed. Notice that 0 indicates no limit
SignalSource.samples1=0
-;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version
-SignalSource.dump1=false
-
-SignalSource.dump_filename1=../data/signal_source1.dat
-
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner0.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
InputFilter0.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter0.band1_begin=0.0
-InputFilter0.band1_end=0.45
-InputFilter0.band2_begin=0.55
-InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter0.ampl1_begin=1.0
-InputFilter0.ampl1_end=1.0
-InputFilter0.ampl2_begin=0.0
-InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter0.band1_error=1.0
-InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter0.grid_density=16
-
-;# Original sampling frequency stored in the signal file
-InputFilter0.sampling_frequency=20480000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter0.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
-InputFilter0.decimation_factor=8
-
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
Resampler0.implementation=Pass_Through
-;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
+;######### SIGNAL_CONDITIONER 1 CONFIG ############
SignalConditioner1.implementation=Pass_Through
+
;######### INPUT_FILTER 1 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter1.band1_begin=0.0
-InputFilter1.band1_end=0.45
-InputFilter1.band2_begin=0.55
-InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter1.ampl1_begin=1.0
-InputFilter1.ampl1_end=1.0
-InputFilter1.ampl2_begin=0.0
-InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter1.band1_error=1.0
-InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter1.grid_density=16
-
-;# Original sampling frequency stored in the signal file
-InputFilter1.sampling_frequency=20480000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter1.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
-InputFilter1.decimation_factor=8
-
-
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
Resampler1.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=4
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
@@ -288,129 +100,60 @@ Channel3.RF_channel_ID=1
;#signal:
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel0.signal=1C
Channel1.signal=1C
Channel2.signal=1C
Channel3.signal=1C
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.01
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=8000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
-;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
-
-
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=40.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=4.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+Observables.implementation=Hybrid_Observables
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
index bfc6b40c9..9c2a86def 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,8 +8,8 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=5000000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=5000000
;######### SUPL RRLP GPS assistance configuration #####
@@ -20,35 +22,22 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275
GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
GNSS-SDR.SUPL_gps_acquisition_port=7275
GNSS-SDR.SUPL_MCC=244
-GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_MNC=5
GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source
-
SignalSource.flag_read_file=true
-SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
SignalSource.item_type=gr_complex
-
-;# FPGA firmware file
SignalSource.firmware_file=flexiband_III-1b.bit
-
-;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
-SignalSource.RF_channels=2
-
+SignalSource.RF_channels=1
;#frontend channels gain. Not usable yet!
SignalSource.gain1=0
SignalSource.gain2=0
SignalSource.gain3=0
-
-;#frontend channels AGC
SignalSource.AGC=true
-
-;# USB 3.0 packet buffer size (number of SuperSpeed packets)
SignalSource.usb_packet_buffer=128
;######################################################
@@ -56,7 +45,6 @@ SignalSource.usb_packet_buffer=128
;######################################################
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -64,84 +52,31 @@ DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter_ch0.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
-;#InputFilter0.IF=-205000
InputFilter0.IF=0
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=4
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
Resampler0.implementation=Pass_Through
;######################################################
@@ -149,7 +84,6 @@ Resampler0.implementation=Pass_Through
;######################################################
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
SignalConditioner1.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -157,276 +91,271 @@ DataTypeAdapter1.implementation=Pass_Through
DataTypeAdapter1.item_type=gr_complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter1.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter_ch1.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
-;#the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter1.band1_begin=0.0
InputFilter1.band1_end=0.45
InputFilter1.band2_begin=0.55
InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter1.ampl1_begin=1.0
InputFilter1.ampl1_end=1.0
InputFilter1.ampl2_begin=0.0
InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter1.band1_error=1.0
InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter1.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
-; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter1.sampling_frequency=20000000
-;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter1.IF=0
-
-;# Decimation factor after the frequency tranaslating block
InputFilter1.decimation_factor=4
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
Resampler1.implementation=Pass_Through
+
+;######################################################
+;######### RF CHANNEL 2 SIGNAL CONDITIONER ############
+;######################################################
+
;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-SignalConditioner2.implementation=Pass_Through
+SignalConditioner2.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
DataTypeAdapter2.implementation=Pass_Through
DataTypeAdapter2.item_type=gr_complex
;######### INPUT_FILTER 2 CONFIG ############
-InputFilter2.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
+InputFilter2.implementation=Freq_Xlating_Fir_Filter
InputFilter2.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter2.dump_filename=../data/input_filter.dat
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter2.dump_filename=../data/input_filter_ch2.dat
InputFilter2.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter2.output_item_type=gr_complex
+InputFilter2.taps_item_type=float
+InputFilter2.number_of_taps=5
+InputFilter2.number_of_bands=2
+InputFilter2.band1_begin=0.0
+InputFilter2.band1_end=0.45
+InputFilter2.band2_begin=0.55
+InputFilter2.band2_end=1.0
+InputFilter2.ampl1_begin=1.0
+InputFilter2.ampl1_end=1.0
+InputFilter2.ampl2_begin=0.0
+InputFilter2.ampl2_end=0.0
+InputFilter2.band1_error=1.0
+InputFilter2.band2_error=1.0
+InputFilter2.filter_type=bandpass
+InputFilter2.grid_density=16
+InputFilter2.sampling_frequency=40000000
+InputFilter2.IF=0
+InputFilter2.decimation_factor=8
-;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data.
+
+;######### RESAMPLER CONFIG 1 ############
Resampler2.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_1C.count=1
-Channels_2S.count=8
+Channels_1C.count=0
+Channels_1B.count=10
+Channels_2S.count=0
+Channels_5X.count=0
-;#GPS.prns=7,8
-
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;# signal:
+;#signal:
;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
;# CHANNEL CONNECTION
+
Channel0.RF_channel_ID=0
-Channel1.RF_channel_ID=1
-Channel2.RF_channel_ID=1
-Channel3.RF_channel_ID=1
-Channel4.RF_channel_ID=1
-Channel5.RF_channel_ID=1
-Channel6.RF_channel_ID=1
-Channel7.RF_channel_ID=1
-Channel8.RF_channel_ID=1
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=0
+Channel6.RF_channel_ID=0
+Channel7.RF_channel_ID=0
+Channel8.RF_channel_ID=0
+Channel9.RF_channel_ID=0
+Channel10.RF_channel_ID=0
+Channel11.RF_channel_ID=0
+Channel12.RF_channel_ID=0
+Channel13.RF_channel_ID=0
+Channel14.RF_channel_ID=0
+Channel15.RF_channel_ID=0
+Channel16.RF_channel_ID=0
+Channel17.RF_channel_ID=0
+Channel18.RF_channel_ID=0
+Channel19.RF_channel_ID=0
+Channel20.RF_channel_ID=0
+Channel21.RF_channel_ID=0
+Channel22.RF_channel_ID=0
+Channel23.RF_channel_ID=0
+Channel24.RF_channel_ID=0
+Channel25.RF_channel_ID=0
+Channel26.RF_channel_ID=0
+Channel27.RF_channel_ID=0
+Channel28.RF_channel_ID=0
+Channel29.RF_channel_ID=0
+Channel30.RF_channel_ID=2
+Channel31.RF_channel_ID=2
+Channel32.RF_channel_ID=2
+Channel33.RF_channel_ID=2
+Channel34.RF_channel_ID=2
+Channel35.RF_channel_ID=2
+Channel36.RF_channel_ID=2
+Channel37.RF_channel_ID=2
+Channel38.RF_channel_ID=2
+Channel39.RF_channel_ID=2
+;######### ACQUISITION CONFIG ######
-;######### ACQUISITION GENERIC CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-Acquisition_1C.dump=false
-Acquisition_1C.dump_filename=./acq_dump.dat
-Acquisition_1C.item_type=gr_complex
-Acquisition_1C.if=0
-Acquisition_1C.coherent_integration_time_ms=1
+;# GPS L1 CA
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
Acquisition_1C.threshold=0.005
Acquisition_1C.doppler_max=5000
Acquisition_1C.doppler_step=250
Acquisition_1C.bit_transition_flag=false
Acquisition_1C.max_dwells=1
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+;# Galileo E1
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
+;Acquisition_1B.threshold=0
+Acquisition_1B.pfa=0.0000002
+Acquisition_1B.doppler_max=5000
+Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
+
+;# GPS L2C M
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.threshold=0.00074
+;Acquisition_2S.pfa=0.001
+Acquisition_2S.doppler_max=5000
+Acquisition_2S.doppler_min=-5000
+Acquisition_2S.doppler_step=60
+Acquisition_2S.max_dwells=1
Acquisition_2S.dump=false
Acquisition_2S.dump_filename=./acq_dump.dat
-Acquisition_2S.item_type=gr_complex
-Acquisition_2S.if=0
-Acquisition_2S.coherent_integration_time_ms=1
-Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S.threshold=0.0005
-Acquisition_2S.doppler_max=5000
-Acquisition_2S.doppler_step=100
-Acquisition_2S.bit_transition_flag=false
-Acquisition_2S.max_dwells=1
-;# channel specific config
-Acquisition_2S1.dump=false
-Acquisition_2S1.dump_filename=./acq_dump.dat
-Acquisition_2S1.item_type=gr_complex
-Acquisition_2S1.if=0
-Acquisition_2S1.coherent_integration_time_ms=1
-Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S1.threshold=0.0005
-Acquisition_2S1.doppler_max=5000
-Acquisition_2S1.doppler_step=100
-Acquisition_2S1.bit_transition_flag=false
-Acquisition_2S1.max_dwells=1
+;# GALILEO E5a
+Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
+Acquisition_5X.item_type=gr_complex
+Acquisition_5X.coherent_integration_time_ms=1
+Acquisition_5X.threshold=0.009
+Acquisition_5X.doppler_max=5000
+Acquisition_5X.doppler_step=125
+Acquisition_5X.bit_transition_flag=false
+Acquisition_5X.max_dwells=1
+Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
+Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
+Acquisition_5X.dump=false
+Acquisition_5X.dump_filename=./acq_dump.dat
;######### TRACKING CONFIG ############
-
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0
-Tracking_1C.dump=true
-Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.dll_bw_hz=3.0;
Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+
+;######### GALILEO E1 TRK CONFIG ############
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+Tracking_1B.item_type=gr_complex
+Tracking_1B.pll_bw_hz=15.0;
+Tracking_1B.dll_bw_hz=2.0;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### GPS L2C GENERIC TRACKING CONFIG ############
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
-Tracking_2S.if=0
-Tracking_2S.dump=true
-Tracking_2S.dump_filename=../data/epl_tracking_ch_
Tracking_2S.pll_bw_hz=2.0;
-Tracking_2S.dll_bw_hz=0.5;
+Tracking_2S.dll_bw_hz=0.25;
Tracking_2S.order=2;
Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=false
+Tracking_2S.dump_filename=./tracking_ch_
-;######### GPS L2C SPECIFIC CHANNEL TRACKING CONFIG ############
-Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S1.item_type=gr_complex
-Tracking_2S1.if=0
-Tracking_2S1.dump=true
-Tracking_2S1.dump_filename=../data/epl_tracking_ch_
-Tracking_2S1.pll_bw_hz=2.0;
-Tracking_2S1.dll_bw_hz=0.5;
-Tracking_2S1.order=2;
-Tracking_2S1.early_late_space_chips=0.5;
+
+;######### GALILEO E5 TRK CONFIG ############
+Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
+Tracking_5X.item_type=gr_complex
+Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
+Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
+Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
+Tracking_5X.pll_bw_hz=20.0;
+Tracking_5X.dll_bw_hz=20.0;
+Tracking_5X.order=2;
+Tracking_5X.early_late_space_chips=0.5;
+Tracking_5X.dump=false
+Tracking_5X.dump_filename=./tracking_ch_
;######### TELEMETRY DECODER CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-TelemetryDecoder_1C.decimation_factor=20;
+
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
TelemetryDecoder_2S.dump=false
-TelemetryDecoder_2S.decimation_factor=1;
+
+TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
+TelemetryDecoder_5X.dump=false
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
PVT.output_rate_ms=100
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
-PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
+PVT.display_rate_ms=100
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b_real.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b_real.conf
new file mode 100644
index 000000000..a52349af1
--- /dev/null
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b_real.conf
@@ -0,0 +1,256 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=5000000
+
+
+;######### SUPL RRLP GPS assistance configuration #####
+; Check http://www.mcc-mnc.com/
+; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=true
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNC=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Flexiband_Signal_Source
+SignalSource.flag_read_file=true
+SignalSource.signal_file=/home/javier/signals/20140923_20-24-17_L125_roof_210s.usb ; <- PUT YOUR FILE HERE
+SignalSource.item_type=gr_complex
+SignalSource.firmware_file=flexiband_III-1b.bit
+SignalSource.RF_channels=2
+;#frontend channels gain. Not usable yet!
+SignalSource.gain1=0
+SignalSource.gain2=0
+SignalSource.gain3=0
+SignalSource.AGC=true
+SignalSource.usb_packet_buffer=128
+
+;######################################################
+;######### RF CHANNEL 0 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 0 CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 0 CONFIG ############
+DataTypeAdapter0.implementation=Pass_Through
+DataTypeAdapter0.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.dump=false
+InputFilter0.dump_filename=../data/input_filter_ch0.dat
+InputFilter0.input_item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.45
+InputFilter0.band2_begin=0.55
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.IF=0
+InputFilter0.decimation_factor=4
+
+;######### RESAMPLER CONFIG 0 ############
+Resampler0.implementation=Pass_Through
+
+;######################################################
+;######### RF CHANNEL 1 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 1 CONFIG ############
+SignalConditioner1.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 1 CONFIG ############
+DataTypeAdapter1.implementation=Pass_Through
+DataTypeAdapter1.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+InputFilter1.implementation=Freq_Xlating_Fir_Filter
+InputFilter1.dump=false
+InputFilter1.dump_filename=../data/input_filter_ch1.dat
+InputFilter1.input_item_type=gr_complex
+InputFilter1.output_item_type=gr_complex
+InputFilter1.taps_item_type=float
+InputFilter1.number_of_taps=5
+InputFilter1.number_of_bands=2
+InputFilter1.band1_begin=0.0
+InputFilter1.band1_end=0.45
+InputFilter1.band2_begin=0.55
+InputFilter1.band2_end=1.0
+InputFilter1.ampl1_begin=1.0
+InputFilter1.ampl1_end=1.0
+InputFilter1.ampl2_begin=0.0
+InputFilter1.ampl2_end=0.0
+InputFilter1.band1_error=1.0
+InputFilter1.band2_error=1.0
+InputFilter1.filter_type=bandpass
+InputFilter1.grid_density=16
+InputFilter1.sampling_frequency=20000000
+InputFilter1.IF=0
+InputFilter1.decimation_factor=4
+
+
+;######### RESAMPLER CONFIG 1 ############
+Resampler1.implementation=Pass_Through
+
+;######### SIGNAL_CONDITIONER 2 CONFIG ############
+SignalConditioner2.implementation=Pass_Through
+
+;######### DATA_TYPE_ADAPTER 2 CONFIG ############
+DataTypeAdapter2.implementation=Pass_Through
+DataTypeAdapter2.item_type=gr_complex
+
+;######### INPUT_FILTER 2 CONFIG ############
+InputFilter2.implementation=Pass_Through
+InputFilter2.dump=false
+InputFilter2.dump_filename=../data/input_filter.dat
+InputFilter2.input_item_type=gr_complex
+InputFilter2.output_item_type=gr_complex
+
+;######### RESAMPLER CONFIG 2 ############
+Resampler2.implementation=Pass_Through
+
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=10
+Channels_2S.count=4
+
+;#GPS.prns=7,8
+
+Channels.in_acquisition=1
+
+;#signal:
+;# "1C" GPS L1 C/A
+;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "1G" GLONASS L1 C/A
+;# "2S" GPS L2 L2C (M)
+;# "5X" GALILEO E5a I+Q
+;# "L5" GPS L5
+;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
+
+;# CHANNEL CONNECTION
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=0
+Channel6.RF_channel_ID=0
+Channel7.RF_channel_ID=0
+Channel8.RF_channel_ID=0
+Channel9.RF_channel_ID=0
+Channel10.RF_channel_ID=1
+Channel11.RF_channel_ID=1
+Channel12.RF_channel_ID=1
+Channel13.RF_channel_ID=1
+Channel14.RF_channel_ID=1
+Channel15.RF_channel_ID=1
+Channel16.RF_channel_ID=1
+Channel17.RF_channel_ID=1
+Channel18.RF_channel_ID=1
+Channel19.RF_channel_ID=1
+
+
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.005
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.bit_transition_flag=false
+Acquisition_1C.max_dwells=1
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;# GPS L2C M
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.threshold=0.00074
+;Acquisition_2S.pfa=0.001
+Acquisition_2S.doppler_max=5000
+Acquisition_2S.doppler_min=-5000
+Acquisition_2S.doppler_step=60
+Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
+
+
+;######### TRACKING CONFIG ############
+;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.dll_bw_hz=3.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+
+;######### GPS L2C GENERIC TRACKING CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.25;
+Tracking_2S.order=2;
+Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=false
+Tracking_2S.dump_filename=./tracking_ch_
+
+
+;######### TELEMETRY DECODER CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+
+TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
+TelemetryDecoder_2S.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=true
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=100
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf
new file mode 100644
index 000000000..a3e23b001
--- /dev/null
+++ b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf
@@ -0,0 +1,382 @@
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=5000000
+
+
+;######### SUPL RRLP GPS assistance configuration #####
+; Check http://www.mcc-mnc.com/
+; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=true
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNC=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+SignalSource.implementation=Flexiband_Signal_Source
+SignalSource.flag_read_file=true
+SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
+SignalSource.item_type=gr_complex
+SignalSource.firmware_file=flexiband_III-1b.bit
+SignalSource.RF_channels=3
+;#frontend channels gain. Not usable yet!
+SignalSource.gain1=0
+SignalSource.gain2=0
+SignalSource.gain3=0
+SignalSource.AGC=true
+SignalSource.usb_packet_buffer=128
+
+;######################################################
+;######### RF CHANNEL 0 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 0 CONFIG ############
+SignalConditioner0.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 0 CONFIG ############
+DataTypeAdapter0.implementation=Pass_Through
+DataTypeAdapter0.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+InputFilter0.dump=false
+InputFilter0.dump_filename=../data/input_filter_ch0.dat
+InputFilter0.input_item_type=gr_complex
+InputFilter0.output_item_type=gr_complex
+InputFilter0.taps_item_type=float
+InputFilter0.number_of_taps=5
+InputFilter0.number_of_bands=2
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.45
+InputFilter0.band2_begin=0.55
+InputFilter0.band2_end=1.0
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+InputFilter0.filter_type=bandpass
+InputFilter0.grid_density=16
+InputFilter0.IF=0
+InputFilter0.decimation_factor=4
+
+;######### RESAMPLER CONFIG 0 ############
+Resampler0.implementation=Pass_Through
+
+
+;######################################################
+;######### RF CHANNEL 1 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 1 CONFIG ############
+SignalConditioner1.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 1 CONFIG ############
+DataTypeAdapter1.implementation=Pass_Through
+DataTypeAdapter1.item_type=gr_complex
+
+;######### INPUT_FILTER 1 CONFIG ############
+InputFilter1.implementation=Freq_Xlating_Fir_Filter
+InputFilter1.dump=false
+InputFilter1.dump_filename=../data/input_filter_ch1.dat
+InputFilter1.input_item_type=gr_complex
+InputFilter1.output_item_type=gr_complex
+InputFilter1.taps_item_type=float
+InputFilter1.number_of_taps=5
+InputFilter1.number_of_bands=2
+InputFilter1.band1_begin=0.0
+InputFilter1.band1_end=0.45
+InputFilter1.band2_begin=0.55
+InputFilter1.band2_end=1.0
+InputFilter1.ampl1_begin=1.0
+InputFilter1.ampl1_end=1.0
+InputFilter1.ampl2_begin=0.0
+InputFilter1.ampl2_end=0.0
+InputFilter1.band1_error=1.0
+InputFilter1.band2_error=1.0
+InputFilter1.filter_type=bandpass
+InputFilter1.grid_density=16
+InputFilter1.IF=0
+InputFilter1.decimation_factor=4
+
+;######### RESAMPLER CONFIG 1 ############
+Resampler1.implementation=Pass_Through
+
+
+;######################################################
+;######### RF CHANNEL 2 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 2 CONFIG ############
+SignalConditioner2.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 2 CONFIG ############
+DataTypeAdapter2.implementation=Pass_Through
+DataTypeAdapter2.item_type=gr_complex
+
+;######### INPUT_FILTER 2 CONFIG ############
+InputFilter2.implementation=Freq_Xlating_Fir_Filter
+InputFilter2.dump=false
+InputFilter2.dump_filename=../data/input_filter_ch2.dat
+InputFilter2.input_item_type=gr_complex
+InputFilter2.output_item_type=gr_complex
+InputFilter2.taps_item_type=float
+InputFilter2.number_of_taps=5
+InputFilter2.number_of_bands=2
+InputFilter2.band1_begin=0.0
+InputFilter2.band1_end=0.45
+InputFilter2.band2_begin=0.55
+InputFilter2.band2_end=1.0
+InputFilter2.ampl1_begin=1.0
+InputFilter2.ampl1_end=1.0
+InputFilter2.ampl2_begin=0.0
+InputFilter2.ampl2_end=0.0
+InputFilter2.band1_error=1.0
+InputFilter2.band2_error=1.0
+InputFilter2.filter_type=bandpass
+InputFilter2.grid_density=16
+InputFilter2.IF=0
+InputFilter2.decimation_factor=8
+
+
+;######### RESAMPLER CONFIG 2 ############
+Resampler2.implementation=Pass_Through
+
+
+;######### CHANNELS GLOBAL CONFIG ############
+Channels_1C.count=10
+Channels_1B.count=10
+Channels_2S.count=10
+Channels_5X.count=2
+Channels_L5.count=2
+
+;#GPS.prns=7,8
+;Channels.in_acquisition=2
+
+;# CHANNEL CONNECTION
+
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=0
+Channel6.RF_channel_ID=0
+Channel7.RF_channel_ID=0
+Channel8.RF_channel_ID=0
+Channel9.RF_channel_ID=0
+Channel10.RF_channel_ID=1
+Channel11.RF_channel_ID=1
+Channel12.RF_channel_ID=1
+Channel13.RF_channel_ID=1
+Channel14.RF_channel_ID=1
+Channel15.RF_channel_ID=1
+Channel16.RF_channel_ID=1
+Channel17.RF_channel_ID=1
+Channel18.RF_channel_ID=1
+Channel19.RF_channel_ID=1
+Channel20.RF_channel_ID=0
+Channel21.RF_channel_ID=0
+Channel22.RF_channel_ID=0
+Channel23.RF_channel_ID=0
+Channel24.RF_channel_ID=0
+Channel25.RF_channel_ID=0
+Channel26.RF_channel_ID=0
+Channel27.RF_channel_ID=0
+Channel28.RF_channel_ID=0
+Channel29.RF_channel_ID=0
+Channel30.RF_channel_ID=2
+Channel31.RF_channel_ID=2
+Channel32.RF_channel_ID=2
+Channel33.RF_channel_ID=2
+Channel34.RF_channel_ID=2
+Channel35.RF_channel_ID=2
+Channel36.RF_channel_ID=2
+Channel37.RF_channel_ID=2
+Channel38.RF_channel_ID=2
+Channel39.RF_channel_ID=2
+Channel40.RF_channel_ID=2
+Channel41.RF_channel_ID=2
+Channel42.RF_channel_ID=2
+
+;Channel20.satellite=7
+
+
+;# GPS L1 CA
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.005
+Acquisition_1C.doppler_max=5000
+Acquisition_1C.doppler_step=250
+Acquisition_1C.bit_transition_flag=false
+Acquisition_1C.max_dwells=1
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+
+
+;# Galileo E1
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
+;Acquisition_1B.threshold=0
+Acquisition_1B.pfa=0.0000002
+Acquisition_1B.doppler_max=5000
+Acquisition_1B.doppler_step=125
+Acquisition_1B.dump_filename=./acq_dump.dat
+
+
+;# GPS L2C M
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.threshold=0.00074
+;Acquisition_2S.pfa=0.001
+Acquisition_2S.doppler_max=5000
+Acquisition_2S.doppler_min=-5000
+Acquisition_2S.doppler_step=60
+Acquisition_2S.max_dwells=1
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
+
+
+;# GALILEO E5a
+Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
+Acquisition_5X.item_type=gr_complex
+Acquisition_5X.coherent_integration_time_ms=1
+Acquisition_5X.threshold=0.009
+Acquisition_5X.doppler_max=5000
+Acquisition_5X.doppler_step=125
+Acquisition_5X.bit_transition_flag=false
+Acquisition_5X.max_dwells=1
+Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
+Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
+Acquisition_5X.dump=false
+Acquisition_5X.dump_filename=./acq_dump.dat
+
+
+;# GPS L5
+Acquisition_L5.implementation=GPS_L5i_PCPS_Acquisition
+Acquisition_L5.item_type=gr_complex
+Acquisition_L5.threshold=0.00074
+;Acquisition_L5.pfa=0.001
+Acquisition_L5.doppler_max=5000
+Acquisition_L5.doppler_min=-5000
+Acquisition_L5.doppler_step=125
+Acquisition_L5.max_dwells=1
+Acquisition_L5.dump=false
+Acquisition_L5.dump_filename=./acq_dump.dat
+
+
+
+;######### TRACKING CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=35.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
+Tracking_1C.early_late_space_chips=0.5;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+;######### GALILEO E1 TRK CONFIG ############
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+Tracking_1B.item_type=gr_complex
+Tracking_1B.pll_bw_hz=15.0;
+Tracking_1B.dll_bw_hz=2.0;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
+
+;######### GPS L2C GENERIC TRACKING CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.25;
+Tracking_2S.order=2;
+Tracking_2S.early_late_space_chips=0.5;
+Tracking_2S.dump=false
+Tracking_2S.dump_filename=./tracking_ch_
+
+;######### GALILEO E5 TRK CONFIG ############
+Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
+Tracking_5X.item_type=gr_complex
+Tracking_5X.track_pilot=true
+Tracking_5X.pll_bw_hz=15.0;
+Tracking_5X.dll_bw_hz=2.0;
+Tracking_5X.pll_bw_narrow_hz=5.0;
+Tracking_5X.dll_bw_narrow_hz=1.0;
+Tracking_5X.order=2;
+Tracking_5X.early_late_space_chips=0.5;
+Tracking_5X.dump=false
+Tracking_5X.dump_filename=./tracking_ch_
+
+;######### GALILEO E5 TRK CONFIG ############
+Tracking_L5.implementation=GPS_L5_DLL_PLL_Tracking
+Tracking_L5.item_type=gr_complex
+Tracking_L5.track_pilot=true
+Tracking_L5.pll_bw_hz=15.0;
+Tracking_L5.dll_bw_hz=2.0;
+Tracking_L5.pll_bw_narrow_hz=4.0;
+Tracking_L5.dll_bw_narrow_hz=1.0;
+Tracking_L5.order=2;
+Tracking_L5.early_late_space_chips=0.5;
+Tracking_L5.dump=false
+Tracking_L5.dump_filename=./tracking_ch_
+
+
+;######### TELEMETRY DECODER CONFIG ############
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
+
+TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
+TelemetryDecoder_2S.dump=false
+
+TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
+TelemetryDecoder_5X.dump=false
+
+TelemetryDecoder_L5.implementation=GPS_L5_Telemetry_Decoder
+TelemetryDecoder_L5.dump=false
+
+
+;######### OBSERVABLES CONFIG ############
+Observables.implementation=Hybrid_Observables
+Observables.dump=false
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=10
+PVT.display_rate_ms=100
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=false;
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+PVT.dump=false
+PVT.dump_filename=./PVT
diff --git a/conf/gnss-sdr_multisource_Hybrid_ishort.conf b/conf/gnss-sdr_multisource_Hybrid_ishort.conf
index 00d85930f..3394aff23 100644
--- a/conf/gnss-sdr_multisource_Hybrid_ishort.conf
+++ b/conf/gnss-sdr_multisource_Hybrid_ishort.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -6,291 +8,80 @@
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
-Receiver.sources_count=2
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
-SignalSource.enable_throttle_control=false
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+GNSS-SDR.internal_fs_sps=4000000
-;#repeat: Repeat the processing file. Disable this option in this version
+Receiver.sources_count=2
+
+SignalSource.enable_throttle_control=false
SignalSource.repeat=false
;######### SIGNAL_SOURCE 0 CONFIG ############
-
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource0.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource0.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
SignalSource0.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource0.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource0.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource0.samples=0
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource0.dump=false
-
-SignalSource0.dump_filename=../data/signal_source.dat
;######### SIGNAL_SOURCE 1 CONFIG ############
-
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource1.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource1.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples.
SignalSource1.item_type=ishort
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource1.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
SignalSource1.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource1.samples=0
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource1.dump=false
-
-SignalSource1.dump_filename=../data/signal_source.dat
-
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter0.implementation=Ishort_To_Complex
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter0.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of GNU Radio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter0.taps_item_type=float
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter0.band1_begin=0.0
-InputFilter0.band1_end=0.45
-InputFilter0.band2_begin=0.55
-InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter0.ampl1_begin=1.0
-InputFilter0.ampl1_end=1.0
-InputFilter0.ampl2_begin=0.0
-InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter0.band1_error=1.0
-InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter0.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter0.sampling_frequency=4000000
-InputFilter0.IF=0
;######### RESAMPLER 1 CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
-
Resampler1.implementation=Pass_Through
-
-;#dump: Dump the resampled data to a file.
Resampler1.dump=false
-;#dump_filename: Log path and filename.
Resampler1.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler1.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler1.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler1.sample_freq_out=4000000
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner1.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter1.implementation=Ishort_To_Complex
;######### INPUT_FILTER 1 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
InputFilter1.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-;#dump_filename: Log path and filename.
-InputFilter1.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of GNU Radio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter1.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter1.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter1.band1_begin=0.0
-InputFilter1.band1_end=0.45
-InputFilter1.band2_begin=0.55
-InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter1.ampl1_begin=1.0
-InputFilter1.ampl1_end=1.0
-InputFilter1.ampl2_begin=0.0
-InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter1.band1_error=1.0
-InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter1.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter1.sampling_frequency=4000000
-InputFilter1.IF=0
;######### RESAMPLER 1 CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
-
Resampler1.implementation=Pass_Through
-
-;#dump: Dump the resampled data to a file.
Resampler1.dump=false
-;#dump_filename: Log path and filename.
-Resampler1.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+Resampler1.dump_filename=../data/resampler.dat.
Resampler1.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
Resampler1.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
Resampler1.sample_freq_out=4000000
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_GPS.count=2
-;#count: Number of available Galileo satellite channels.
-Channels_Galileo.count=2
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels_1C.count=2
+Channels_1B.count=2
Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-Channel.system=GPS, Galileo
+
;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0
@@ -303,155 +94,74 @@ Channel.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
-;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
-Acquisition_GPS.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=500
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.threshold=0.0075
+;Acquisition_1C.pfa=0.01
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
+;Acquisition_1B.threshold=0
+Acquisition_1B.pfa=0.0000008
+Acquisition_1B.doppler_max=15000
+Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_Galileo.dump=false
-;#filename: Log path and filename
-Acquisition_Galileo.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_Galileo.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_Galileo.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_Galileo.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_Galileo.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
-;Acquisition_Galileo.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_Galileo.pfa=0.0000008
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_Galileo.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_Galileo.doppler_step=125
;######### TRACKING GPS CONFIG ############
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.item_type=gr_complex
+Tracking_1C.pll_bw_hz=45.0;
+Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.order=3;
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_GPS.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=../data/epl_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=45.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=4.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_Galileo.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_Galileo.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_Galileo.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_Galileo.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_Galileo.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_Galileo.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_Galileo.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_Galileo.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
-Tracking_Galileo.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
-Tracking_Galileo.very_early_late_space_chips=0.6;
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+Tracking_1B.item_type=gr_complex
+Tracking_1B.pll_bw_hz=15.0;
+Tracking_1B.dll_bw_hz=2.0;
+Tracking_1B.order=3;
+Tracking_1B.early_late_space_chips=0.15;
+Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
-;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=4;
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
-TelemetryDecoder_Galileo.implementation=Galileo_E1B_Telemetry_Decoder
-TelemetryDecoder_Galileo.dump=false
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
PVT.output_rate_ms=100;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
PVT.dump_filename=./PVT
+PVT.dump=false
diff --git a/conf/gnss-sdr_multisource_Hybrid_nsr.conf b/conf/gnss-sdr_multisource_Hybrid_nsr.conf
index 5ced6c5a5..aecb783a6 100644
--- a/conf/gnss-sdr_multisource_Hybrid_nsr.conf
+++ b/conf/gnss-sdr_multisource_Hybrid_nsr.conf
@@ -1,4 +1,6 @@
-; Default configuration file
+; This is a GNSS-SDR configuration file
+; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
+
; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
;
@@ -8,286 +10,108 @@
Receiver.sources_count=2
;######### GLOBAL OPTIONS ##################
-;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-;GNSS-SDR.internal_fs_hz=6826700
-GNSS-SDR.internal_fs_hz=2560000
-;GNSS-SDR.internal_fs_hz=4096000
-;GNSS-SDR.internal_fs_hz=5120000
+;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
+;GNSS-SDR.internal_fs_sps=6826700
+GNSS-SDR.internal_fs_sps=2560000
+;GNSS-SDR.internal_fs_sps=4096000
+;GNSS-SDR.internal_fs_sps=5120000
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false
-
-;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false
;######### SIGNAL_SOURCE 0 CONFIG ############
-;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource0.implementation=Nsr_File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource0.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource0.sampling_frequency=20480000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource0.freq=1575420000
-
-;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
-SignalSource0.subdevice=B:0
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource0.samples=0
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource0.dump=false
-
-SignalSource0.dump_filename=../data/signal_source.dat
;######### SIGNAL_SOURCE 1 CONFIG ############
-;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource1.implementation=Nsr_File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource1.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource1.sampling_frequency=20480000
-
-;#freq: RF front-end center frequency in [Hz]
-SignalSource1.freq=1575420000
-
-;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
-SignalSource1.subdevice=B:0
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource1.samples=0
-;#dump: Dump the Signal source data to a file. Disable this option in this version
-SignalSource1.dump=false
-
-SignalSource1.dump_filename=../data/signal_source.dat
-
;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner0.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 0 CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter0.implementation=Pass_Through
DataTypeAdapter0.item_type=float
;######### INPUT_FILTER 0 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
InputFilter0.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter0.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter0.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter0.input_item_type=float
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter0.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter0.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter0.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter0.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter0.band1_begin=0.0
InputFilter0.band1_end=0.45
InputFilter0.band2_begin=0.55
InputFilter0.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter0.ampl1_begin=1.0
InputFilter0.ampl1_end=1.0
InputFilter0.ampl2_begin=0.0
InputFilter0.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter0.band1_error=1.0
InputFilter0.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter0.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter0.grid_density=16
-
-;# Original sampling frequency stored in the signal file
InputFilter0.sampling_frequency=20480000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter0.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8
;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
Resampler0.implementation=Pass_Through
;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner1.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
-;## Changes the type of input data.
-;#implementation: [Pass_Through] disables this block
DataTypeAdapter1.implementation=Pass_Through
DataTypeAdapter1.item_type=float
;######### INPUT_FILTER 1 CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
-;# that shifts IF down to zero Hz.
-
InputFilter1.implementation=Freq_Xlating_Fir_Filter
-
-;#dump: Dump the filtered data to a file.
InputFilter1.dump=false
-
-;#dump_filename: Log path and filename.
InputFilter1.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
-;#reponse given a set of band edges, the desired reponse on those bands,
-;#and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter1.input_item_type=float
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter1.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter1.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter1.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
InputFilter1.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
InputFilter1.band1_begin=0.0
InputFilter1.band1_end=0.45
InputFilter1.band2_begin=0.55
InputFilter1.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
InputFilter1.ampl1_begin=1.0
InputFilter1.ampl1_end=1.0
InputFilter1.ampl2_begin=0.0
InputFilter1.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
InputFilter1.band1_error=1.0
InputFilter1.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter1.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
InputFilter1.grid_density=16
-
-;# Original sampling frequency stored in the signal file
InputFilter1.sampling_frequency=20480000
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
InputFilter1.IF=5499998.47412109
-
-;# Decimation factor after the frequency tranaslating block
InputFilter1.decimation_factor=8
;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
Resampler1.implementation=Pass_Through
;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
Channels_1C.count=8
-;#count: Number of available Galileo satellite channels.
Channels_1B.count=8
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1
-;#signal:
-;# "1C" GPS L1 C/A
-;# "2S" GPS L2 L2C (M)
-;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q
-
;# SOURCE CONNECTION
Channel0.RF_channel_ID=0
Channel1.RF_channel_ID=0
@@ -328,156 +152,78 @@ Channel15.signal=1B
;######### GPS ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1C.dump=false
-;#filename: Log path and filename
-Acquisition_1C.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1C.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.scoherent_integration_time_ms=1
Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_1C.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=10000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
;######### GALILEO ACQUISITION CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_1B.dump=false
-;#filename: Log path and filename
-Acquisition_1B.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_1B.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1B.sampled_ms=4
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
-;#threshold: Acquisition threshold
+Acquisition_1B.item_type=gr_complex
+Acquisition_1B.coherent_integration_time_ms=4
;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1B.pfa=0.0000002
-;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1B.doppler_max=15000
-;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
+Acquisition_1B.dump=false
+Acquisition_1B.dump_filename=./acq_dump.dat
+
;######### TRACKING GPS CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
Tracking_1C.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1C.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1C.pll_bw_hz=45.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
Tracking_1C.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=../data/epl_tracking_ch_
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=45.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_1C.order=3;
;######### TRACKING GALILEO CONFIG ############
-
-;#implementation: Selected tracking algorithm: [Galileo_E1_DLL_PLL_VEML_Tracking]
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
-;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1B.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_1B.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1B.dump=false
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1B.dump_filename=../data/veml_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1B.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1B.dll_bw_hz=2.0;
-
-;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1B.order=3;
-
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
Tracking_1B.early_late_space_chips=0.15;
-
-;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
Tracking_1B.very_early_late_space_chips=0.6;
+Tracking_1B.dump=false
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
-;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+
;######### TELEMETRY DECODER GALILEO CONFIG ############
-;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
-TelemetryDecoder_1B.dump=false
-TelemetryDecoder_1B.decimation_factor=4;
;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Hybrid_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
-
-;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=Hybrid_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
-PVT.averaging_depth=10
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
-PVT.output_rate_ms=10;
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
-PVT.display_rate_ms=500;
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
-
+PVT.implementation=RTKLIB_PVT
+PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
+PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
+PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
+PVT.output_rate_ms=100
+PVT.display_rate_ms=500
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+PVT.flag_nmea_tty_port=true;
+PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump=false
PVT.dump_filename=./PVT
diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md
index b4e04e2c1..a6cc9eef2 100644
--- a/docs/PULL_REQUEST_TEMPLATE.md
+++ b/docs/PULL_REQUEST_TEMPLATE.md
@@ -1,11 +1,12 @@
-:+1::tada: Hello, and thanks for contributing to [GNSS-SDR](http://gnss-sdr.org)! :tada::+1:
+:+1::tada: Hello, and thanks for contributing to [GNSS-SDR](https://gnss-sdr.org)! :tada::+1:
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/).
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](http://gnss-sdr.org/coding-style/).
- 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.
+ 4. You have read the [coding style guide](https://gnss-sdr.org/coding-style/).
+ 5. Specifically, you have read [about clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting) and you have applied it.
+ 6. 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).
+ 7. 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.**
\ No newline at end of file
+**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.**
diff --git a/docs/changelog b/docs/changelog
new file mode 100644
index 000000000..f9effa7d2
--- /dev/null
+++ b/docs/changelog
@@ -0,0 +1,417 @@
+## [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 library has been replaced by the more modern and portable (except for the interaction with RTKLIB).
+- Improvement in C++ usage: The library has been replaced by the more modern and portable for file handling.
+- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., instead of , instead of ).
+- 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 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 block’s 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 (http://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, Fraunhofer’s 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)
+- Adding a new data_type_adapter, from interleaved short to std::complex
+- Adding a filter for complex short streams.
+- Adding a fir_filter for std::complex (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!
diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
index ab11a667f..28b3c9d2a 100644
--- a/docs/doxygen/Doxyfile.in
+++ b/docs/doxygen/Doxyfile.in
@@ -21,7 +21,7 @@
# that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
+# https://www.gnu.org/software/libiconv for the list of possible encodings.
DOXYFILE_ENCODING = UTF-8
@@ -129,7 +129,7 @@ INLINE_INHERITED_MEMB = NO
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
-FULL_PATH_NAMES = YES
+FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
@@ -551,7 +551,7 @@ LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
@@ -623,7 +623,7 @@ INPUT = @top_srcdir@/src @top_srcdir@/docs/doxygen/other
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# into libc) for the transcoding. See https://www.gnu.org/software/libiconv for
# the list of possible encodings.
INPUT_ENCODING = UTF-8
@@ -703,7 +703,7 @@ EXAMPLE_RECURSIVE = NO
# directories that contain image that are included in the documentation (see
# the \image command).
-IMAGE_PATH = @top_srcdir@/docs/doxygen/images/
+IMAGE_PATH = @top_srcdir@/docs/doxygen/images/
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
@@ -791,12 +791,12 @@ REFERENCES_LINK_SOURCE = YES
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
-SOURCE_TOOLTIPS = YES
+SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
+# tagging system (see https://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.
USE_HTAGS = NO
@@ -875,7 +875,7 @@ HTML_STYLESHEET =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the stylesheet and background images
# according to this color. Hue is specified as an angle on a colorwheel,
-# see http://en.wikipedia.org/wiki/Hue for more information.
+# see https://en.wikipedia.org/wiki/Hue for more information.
# For instance the value 0 represents red, 60 is yellow, 120 is green,
# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
# The allowed range is 0 to 359.
@@ -901,7 +901,7 @@ HTML_COLORSTYLE_GAMMA = 80
# page will contain the date and time when the page was generated. Setting
# this to NO can help when comparing the output of multiple runs.
-HTML_TIMESTAMP = YES
+HTML_TIMESTAMP = NO
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
@@ -925,8 +925,6 @@ HTML_DYNAMIC_SECTIONS = NO
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
GENERATE_DOCSET = NO
@@ -1123,7 +1121,7 @@ FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-# (see http://www.mathjax.org) which uses client side Javascript for the
+# (see https://www.mathjax.org) which uses client side Javascript for the
# rendering instead of using prerendered bitmaps. Use this if you do not
# have LaTeX installed or if you want to formulas look prettier in the HTML
# output. When enabled you also need to install MathJax separately and
@@ -1133,7 +1131,7 @@ USE_MATHJAX = @GNSSSDR_USE_MATHJAX@
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
+# https://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
@@ -1149,7 +1147,7 @@ MATHJAX_FORMAT = HTML-CSS
# MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment.
-MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_RELPATH = https://cdnjs.com/libraries/mathjax/
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
@@ -1160,11 +1158,11 @@ MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# (see: https://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
-MATHJAX_CODEFILE =
+MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box
# for the HTML output. The underlying search engine uses javascript
@@ -1194,7 +1192,7 @@ SERVER_BASED_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
+# Xapian (see: https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
@@ -1207,7 +1205,7 @@ EXTERNAL_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Xapian (see: https://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
@@ -1358,7 +1356,7 @@ LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
@@ -1677,7 +1675,7 @@ DOT_FONTSIZE = 10
# different font using DOT_FONTNAME you can set the path where dot
# can find it using this tag.
-DOT_FONTPATH =
+DOT_FONTPATH =
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
diff --git a/docs/doxygen/other/main_page.dox b/docs/doxygen/other/main_page.dox
index edb07f998..324a98fac 100644
--- a/docs/doxygen/other/main_page.dox
+++ b/docs/doxygen/other/main_page.dox
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
/*! \mainpage
@@ -23,12 +23,12 @@
Welcome to GNSS-SDR!
-GNSS-SDR is an open-source GNSS software receiver freely available to the research community. This project provides a common framework for GNSS signal processing which can operate in a variety of computer platforms. This tool is intended to foster collaboration, increase awareness, and reduce development costs in the field of GNSS receiver design and customized use of GNSS signals.
+GNSS-SDR is an open-source GNSS software receiver freely available to the research community. This project provides a common framework for GNSS signal processing which can operate in a variety of computer platforms. This tool is intended to foster collaboration, increase awareness, and reduce development costs in the field of GNSS receiver design and customized use of GNSS signals.
For details about GNSS-SDR and using it, please see the main project page or browse the code at the Sourceforge project page. You could be also interested in
-subscribing to the mailing list.
+href="https://gnss-sdr.org" target="_blank">main project page or browse the code at the Sourceforge project page. You could be also interested in
+subscribing to the mailing list.
\section toc Contents
\li \ref overview
@@ -56,25 +56,25 @@ More details on GNSS-SDR signal processing blocks:
\section overview Overview
-GNSS-SDR provides an interface to different suitable RF front-ends and implements all the receiver chain up to the navigation solution.
-Its design allows any kind of customization, including interchangeability of signal sources, signal processing algorithms,
-interoperability with other systems, output formats, and offers interfaces to all the intermediate signals, parameters and variables.
-The goal is to write efficient and truly reusable code, easy to read and maintain, with fewer bugs, and producing highly optimized executables
-in a variety of hardware platforms and operating systems. In that sense, the challenge consists of defining a gentle balance within level
-of abstraction and performance. GNSS-SDR runs in a personal computer and provides interfaces through USB and Ethernet
+GNSS-SDR provides an interface to different suitable RF front-ends and implements all the receiver chain up to the navigation solution.
+Its design allows any kind of customization, including interchangeability of signal sources, signal processing algorithms,
+interoperability with other systems, output formats, and offers interfaces to all the intermediate signals, parameters and variables.
+The goal is to write efficient and truly reusable code, easy to read and maintain, with fewer bugs, and producing highly optimized executables
+in a variety of hardware platforms and operating systems. In that sense, the challenge consists of defining a gentle balance within level
+of abstraction and performance. GNSS-SDR runs in a personal computer and provides interfaces through USB and Ethernet
buses to a variety of either commercially available or custom-made RF front-ends, adapting the processing algorithms to different sampling frequencies, intermediate
- frequencies and sample resolutions. This makes possible rapid prototyping of specific receivers intended, for instance, to geodetic applications,
- observation of the ionospheric impact on navigation signals, GNSS reflectometry, signal quality monitoring, or carrier-phase based navigation techniques.
+ frequencies and sample resolutions. This makes possible rapid prototyping of specific receivers intended, for instance, to geodetic applications,
+ observation of the ionospheric impact on navigation signals, GNSS reflectometry, signal quality monitoring, or carrier-phase based navigation techniques.
\image html overview.png
\image latex overview.png "Overview" width=12cm
As signal inputs, it accepts:
\li Raw data file captured with a data grabber (digitized at some intermediate frequency or directly at baseband).
-\li Any suitable RF configuration that can be driven by the Universal Software Radio Peripheral Hardware Driver (UHD).
-This includes all current and future Ettus Research products. The USRP1 + DBSRX 2.2 daughterboard is an example of working configuration for GPS L1 C/A and Galileo E1B and E1C signals.
-\li The GN3S v2 USB dongle (GN3S v3 might work with small modifications).
-\li Experimentally, with some USB DVB-T dongles based on the Realtek RTL2832U chipset.
+\li Any suitable RF configuration that can be driven by the Universal Software Radio Peripheral Hardware Driver (UHD).
+This includes all current and future Ettus Research products. The USRP1 + DBSRX 2.2 daughterboard is an example of working configuration for GPS L1 C/A and Galileo E1B and E1C signals.
+\li The GN3S v2 USB dongle (GN3S v3 might work with small modifications).
+\li Experimentally, with some USB DVB-T dongles based on the Realtek RTL2832U chipset.
\li For mathematical representations of the targeted signals, check out the \ref the_signal_model page.
As outputs, it provides:
@@ -85,22 +85,22 @@ As outputs, it provides:
\li Position, Velocity and Time solution in KML format and NMEA
-\section build Building GNSS-SDR
+\section build Building GNSS-SDR
-In principle, GNSS-SDR can be built in any Unix-like system. In practice, it depends on being able to install all the required dependencies. See the building guide page for details about the project's
-dependencies and build process. Mainly, it consists on installing GNU Radio plus some few more libraries:
+In principle, GNSS-SDR can be built in any Unix-like system. In practice, it depends on being able to install all the required dependencies. See the building guide page for details about the project's
+dependencies and build process. Mainly, it consists on installing GNU Radio plus some few more libraries:
-\li Gflags, a library that implements commandline flags processing,
-\li Glog, a library that implements application-level logging,
+\li Gflags, a library that implements commandline flags processing,
+\li Glog, a library that implements application-level logging,
\li Armadillo, a C++ linear algebra library,
-\li Googletest, Google's framework for writing C++ tests (requires definition of the GTEST_DIR variable),
+\li Googletest, Google's framework for writing C++ tests (requires definition of the GTEST_DIR variable),
and, optionally,
-\li Gperftools, which provides fast, multi-threaded malloc() and performance analysis tools.
+\li Gperftools, which provides fast, multi-threaded malloc() and performance analysis tools.
After all dependencies are installed, clone the GNSS-SDR repository:
\verbatim
-$ git clone git://git.code.sf.net/p/gnss-sdr/cttc gnss-sdr
+$ git clone https://github.com/gnss-sdr/gnss-sdr
\endverbatim
This will create a folder named gnss-sdr with the following structure:
@@ -111,7 +111,7 @@ This will create a folder named gnss-sdr with the following structure:
|---conf <- Configuration files. Each file represents one receiver.
|---data <- Populate this folder with your captured data.
|---docs <- Contains documentation-related files
- |---install <- Executables
+ |---install <- Executables
|---src <- Source code folder
|-----algorithms
|-------PVT
@@ -136,7 +136,7 @@ This will create a folder named gnss-sdr with the following structure:
|-----utils <- some utilities (e.g. Matlab scripts)
\endverbatim
-You are now ready to build GNSS-SDR by using CMake as building tool:
+You are now ready to build GNSS-SDR by using CMake as building tool:
\verbatim
$ cd gnss-sdr/build
$ cmake ../
@@ -149,8 +149,8 @@ You can run them from that folder, but if you prefer to install gnss-sdr on your
$ sudo make install
\endverbatim
-This will make a copy of the conf/ folder into /usr/local/share/gnss-sdr/conf for your reference.
-We suggest to create a working directory at your preferred location and store your own configuration and data files there.
+This will make a copy of the conf/ folder into /usr/local/share/gnss-sdr/conf for your reference.
+We suggest to create a working directory at your preferred location and store your own configuration and data files there.
You can create the documentation by doing:
@@ -158,7 +158,7 @@ You can create the documentation by doing:
$ make doc
\endverbatim
-from the gnss-sdr/build folder. In both cases, Doxygen will generate HTML documentation that can be
+from the gnss-sdr/build folder. In both cases, Doxygen will generate HTML documentation that can be
retrieved pointing your browser of preference to gnss-sdr/docs/html/index.html.
There are two more extra targets available. From the gnss-sdr/build folder:
@@ -201,20 +201,20 @@ $ sudo make uninstall
$ rm -rf *
\endverbatim
-You can also check The Git Book for more information about Git usage.
+You can also check The Git Book for more information about Git usage.
\section using_gnss-sdr Using GNSS-SDR
With GNSS-SDR, you can define you own receiver, work with captured raw data or from a RF front-end, dump into files intermediate signals, or tune every single algorithm used in the \ref signal_processing. All the configuration
is done in a single file. Those configuration files reside at the gnss-sdr/conf folder. By default, the executable gnss-sdr will read the configuration
-available at gnss-sdr/conf/gnss-sdr.conf. You can edit that file to fit your needs, or even better, define a new my_receiver.conf file with your own configuration.
+available at gnss-sdr/conf/gnss-sdr.conf. You can edit that file to fit your needs, or even better, define a new my_receiver.conf file with your own configuration.
This new receiver can be done by invoking gnss-sdr with the --config_file flag pointing to your configuration file:
\verbatim
$ gnss-sdr --config_file=../conf/my_receiver.conf
\endverbatim
You can see a guide of available implementations at gnss-sdr/conf/master.conf. That folder contains other working examples as well. If you have a working
-configuration and want to share it will others, please email it to the GNSS-SDR developers mailing list
+configuration and want to share it will others, please email it to the GNSS-SDR developers mailing list
and we will be happy to upload it to the server.
You can use a single configuration file for processing
@@ -224,41 +224,41 @@ $ gnss-sdr --config_file=../conf/my_receiver.conf --signal_source=../data/my_cap
\endverbatim
This will override the SignalSource.filename specified in the configuration file.
-You can get a complete list of available commandline flags by doing:
+You can get a complete list of available commandline flags by doing:
\verbatim
$ gnss-sdr --help
\endverbatim
-For general usage of commandline flags, see how to use Google Commandline Flags.
+
\section control_plane Control plane
-GNSS-SDR's main method initializes the logging library, processes the command line flags, if any, provided by the user and instantiates a ControlThread object.
-Its constructor reads the configuration file, creates a control queue and creates a flowgraph according to the configuration. Then, the program's main method
-calls the run() method of the instantiated object, an action that connects the flowgraph and starts running it. After that, and until a stop message is received,
-it reads control messages sent by the receiver's modules through a safe-thread queue and processes them. Finally, when a stop message is received, the main
+GNSS-SDR's main method initializes the logging library, processes the command line flags, if any, provided by the user and instantiates a ControlThread object.
+Its constructor reads the configuration file, creates a control queue and creates a flowgraph according to the configuration. Then, the program's main method
+calls the run() method of the instantiated object, an action that connects the flowgraph and starts running it. After that, and until a stop message is received,
+it reads control messages sent by the receiver's modules through a safe-thread queue and processes them. Finally, when a stop message is received, the main
method executes the destructor of the ControlThread object, which deallocates memory, does other cleanup and exits the program.
-The GNSSFlowgraph class is responsible for preparing the graph of blocks according to the configuration, running it, modifying it during run-time and stopping it.
-Blocks are identified by its role. This class knows which roles it has to instantiate and how to connect them.
-It relies on the configuration to get the correct instances of the roles it needs and then it applies the connections between GNU Radio blocks to make the
-graph ready to be started. The complexity related to managing the blocks and the data stream is handled by GNU Radio's gr::top_block class. GNSSFlowgraph wraps
-the gr::top_block instance so we can take advantage of the \ref gnss_block_factory, the configuration system and the processing blocks. This class is also responsible
-for applying changes to the configuration of the flowgraph during run-time, dynamically reconfiguring channels: it selects the strategy for selecting satellites.
-This can range from a sequential search over all the satellites' ID to smarter approaches that determine what are the satellites most likely in-view based on rough
+The GNSSFlowgraph class is responsible for preparing the graph of blocks according to the configuration, running it, modifying it during run-time and stopping it.
+Blocks are identified by its role. This class knows which roles it has to instantiate and how to connect them.
+It relies on the configuration to get the correct instances of the roles it needs and then it applies the connections between GNU Radio blocks to make the
+graph ready to be started. The complexity related to managing the blocks and the data stream is handled by GNU Radio's gr::top_block class. GNSSFlowgraph wraps
+the gr::top_block instance so we can take advantage of the \ref gnss_block_factory, the configuration system and the processing blocks. This class is also responsible
+for applying changes to the configuration of the flowgraph during run-time, dynamically reconfiguring channels: it selects the strategy for selecting satellites.
+This can range from a sequential search over all the satellites' ID to smarter approaches that determine what are the satellites most likely in-view based on rough
estimations of the receiver position in order to avoid searching satellites in the other side of the Earth.
The Control Plane is in charge of creating a flowgraph according to the configuration and then managing the modules. Configuration allows users to define in an easy way their own
-custom receiver by specifying the flowgraph (type of signal source, number of channels, algorithms to be used for each channel and each module, strategies for
-satellite selection, type of output format, etc.). Since it is difficult to foresee what future module implementations will be needed in terms of configuration,
-we used a very simple approach that can be extended without a major impact in the code. This can be achieved by simply mapping the names of the variables in the
+custom receiver by specifying the flowgraph (type of signal source, number of channels, algorithms to be used for each channel and each module, strategies for
+satellite selection, type of output format, etc.). Since it is difficult to foresee what future module implementations will be needed in terms of configuration,
+we used a very simple approach that can be extended without a major impact in the code. This can be achieved by simply mapping the names of the variables in the
modules with the names of the parameters in the configuration.
\subsection configuration Configuration
-Properties are passed around within the program using the ConfigurationInterface class. There are two implementations of this interface: FileConfiguration and
-InMemoryConfiguration. FileConfiguration reads the properties (pairs of property name and value) from a file and stores them internally. InMemoryConfiguration does
-not read from a file; it remains empty after instantiation and property values and names are set using the set property method. FileConfiguration is intended to be
-used in the actual GNSS-SDR application whereas InMemoryConfiguration is intended to be used in tests to avoid file-dependency in the file system. Classes that
-need to read configuration parameters will receive instances of ConfigurationInterface from where they will fetch the values. For instance, parameters related
+Properties are passed around within the program using the ConfigurationInterface class. There are two implementations of this interface: FileConfiguration and
+InMemoryConfiguration. FileConfiguration reads the properties (pairs of property name and value) from a file and stores them internally. InMemoryConfiguration does
+not read from a file; it remains empty after instantiation and property values and names are set using the set property method. FileConfiguration is intended to be
+used in the actual GNSS-SDR application whereas InMemoryConfiguration is intended to be used in tests to avoid file-dependency in the file system. Classes that
+need to read configuration parameters will receive instances of ConfigurationInterface from where they will fetch the values. For instance, parameters related
to SignalSource should look like this:
\verbatim
@@ -266,80 +266,80 @@ SignalSource.parameter1=value1
SignalSource.parameter2=value2
\endverbatim
-The name of these parameters can be anything but one reserved word: implementation. This parameter indicates in its value the name of the class that has to be instantiated
-by the factory for that role. For instance, if our signal source is providing data already at baseband and thus we want to use the implementation Pass_Through for module SignalConditioner, the corresponding line in the
+The name of these parameters can be anything but one reserved word: implementation. This parameter indicates in its value the name of the class that has to be instantiated
+by the factory for that role. For instance, if our signal source is providing data already at baseband and thus we want to use the implementation Pass_Through for module SignalConditioner, the corresponding line in the
configuration file would be
\verbatim
SignalConditioner.implementation=Pass_Through
\endverbatim
-Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new
-properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked
-against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in INI format).
+Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new
+properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked
+against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in INI format).
\subsection gnss_block_factory GNSS block factory
-Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called GNSSBlockFactory.
-This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory
-encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block
-class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration
-enables extending the application capacities in a high degree. It also allows to produce fully customized receivers, for instance a testbed for acquisition
+Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called GNSSBlockFactory.
+This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory
+encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block
+class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration
+enables extending the application capacities in a high degree. It also allows to produce fully customized receivers, for instance a testbed for acquisition
algorithms, and to place observers at any point of the receiver chain.
\section signal_processing Signal Processing plane
-GNU Radio's class gr::basic_block is the abstract base class for all signal processing blocks, a bare abstraction of an entity that has a name and a set of
-inputs and outputs. It is never instantiated directly; rather, this is the abstract parent class of both gr::hier_block2, which is a recursive container that
-adds or removes processing or hierarchical blocks to the internal graph, and gr::block, which is the abstract base class for all the processing blocks.
+GNU Radio's class gr::basic_block is the abstract base class for all signal processing blocks, a bare abstraction of an entity that has a name and a set of
+inputs and outputs. It is never instantiated directly; rather, this is the abstract parent class of both gr::hier_block2, which is a recursive container that
+adds or removes processing or hierarchical blocks to the internal graph, and gr::block, which is the abstract base class for all the processing blocks.
\image html ClassHierarchy.png
\image latex ClassHierarchy.png "Class hierarchy of signal processing blocks" width=12cm
-A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal
+A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal
processing functions.
-Class gr::top_block is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the
-program: run(), start(), stop(), wait(), etc. A a subclass called GNSSBlockInterface is the common interface for all the GNSS-SDR modules. It defines pure virtual
+Class gr::top_block is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the
+program: run(), start(), stop(), wait(), etc. A a subclass called GNSSBlockInterface is the common interface for all the GNSS-SDR modules. It defines pure virtual
methods, that are required to be implemented by a derived class.
-Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different
-algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows
-multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one,
+Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different
+algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows
+multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one,
and makes them interchangeable. Hence, we let the algorithm vary independently from the program that uses it.
\subsection signal_source Signal Source
-The input of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC).
-Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses.
+The input of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC).
+Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses.
-The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives
-the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized
-implementation of the whole receiver, this module also allows to read samples from a file stored in a hard disk, and thus processing without time constraints.
-Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be
+The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives
+the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized
+implementation of the whole receiver, this module also allows to read samples from a file stored in a hard disk, and thus processing without time constraints.
+Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be
specified by the user in the configuration file.
This module also performs bit-depth adaptation, since most of the existing RF front-ends provide samples quantized with 2 or 3 bits, while operations inside
- the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational
- processes (mainly correlation) that take advantage of specific data types and architectures for the sake of
- efficiency, the approach is processor-specific and hardly portable. We suggest to keep signal samples in standard data types and letting the compiler
+ the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational
+ processes (mainly correlation) that take advantage of specific data types and architectures for the sake of
+ efficiency, the approach is processor-specific and hardly portable. We suggest to keep signal samples in standard data types and letting the compiler
select the best library version (implemented using SIMD or any other processor-specific technology) of the required routines for a given processor.
-
+
Example: FileSignalSource
-The user can configure the receiver for reading from a file, setting in the configuration file the data file location, sample format,
+The user can configure the receiver for reading from a file, setting in the configuration file the data file location, sample format,
and the sampling frequency and intermediate frequency at what the signal was originally captured.
-
+
\verbatim
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=File_Signal_Source
SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz]
-SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
-\endverbatim
+SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
+\endverbatim
Example: UhdSignalSource
@@ -349,7 +349,7 @@ The user may prefer to use a UHD-compatible RF front-end and try real-time proce
SignalSource.implementation=UHD_Signal_Source
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz]
-SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
+SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
SignalSource.gain=60 ; Front-end gain in dB
SignalSource.subdevice=B:0 ; UHD subdevice specification (for USRP1 use A:0 or B:0)
\endverbatim
@@ -358,8 +358,8 @@ Other examples are available at gnss-sdr/conf.
\subsection signal_conditioner Signal Conditioner
The signal conditioner is in charge of resampling the signal and delivering a reference sample rate to the downstream processing blocks, acting as
- a facade between the signal source and the synchronization channels, providing a simplified interface to the input signal.
- In case of multiband front-ends, this module would be in charge of providing a separated data stream for each band.
+ a facade between the signal source and the synchronization channels, providing a simplified interface to the input signal.
+ In case of multiband front-ends, this module would be in charge of providing a separated data stream for each band.
\subsection channel Channel
@@ -368,31 +368,28 @@ A channel encapsulates all signal processing devoted to a single satellite. Thus
channels is selectable by the user in the configuration file, this approach helps improving the scalability and maintainability of the receiver.
This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on
-the prior information available (called cold start when the receiver has no information about its position nor the satellites almanac; warm start when
-a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver
+the prior information available (called cold start when the receiver has no information about its position nor the satellites almanac; warm start when
+a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver
was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information
-is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to
+is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to
confirm the presence of the satellite, or declaring the satellite present. In the latter case, acquisition process should stop and trigger the tracking module
-with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as finite state machine (FSM), that is
-a behavior model composed of a finite number of states, transitions between those states, and actions. For the implementation, we used the
-Boost.Statechart library,
-which provides desirable features such as support for asynchronous state machines, multi-threading, type-safety, error handling and compile-time validation.
-
+with coarse estimations of the synchronization parameters.
+
The abstract class ChannelInterface represents an interface to a channel GNSS block. Check Channel for an actual implementation.
-
+
\subsubsection acquisition Acquisition
-The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift
+The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift
with respect to the nominal IF frequency, and a delay term which allows the receiver to create a local code aligned with the incoming code.
-AcquisitionInterface is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary
-depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as adapters.
-These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks
-derived from gr::block, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications.
+AcquisitionInterface is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary
+depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as adapters.
+These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks
+derived from gr::block, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications.
Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using
different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface.
Check GpsL1CaPcpsAcquisition and GalileoE1PcpsAmbiguousAcquisition for examples of adapters from a Parallel Code Phase Search (PCPS) acquisition block, and
pcps_acquisition_cc for an example of a block implementation. The source code of all the available acquisition algorithms is located at:
-
+
\verbatim
|-gnss-sdr
|---src
@@ -406,13 +403,13 @@ The user can select a given implementation for the algorithm to be used in each
\verbatim
;######### ACQUISITION GLOBAL CONFIG ############
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
Acquisition.dump=false
;#filename: Log path and filename
Acquisition.dump_filename=./acq_dump.dat
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Acquisition.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
+;#if: Signal intermediate frequency in [Hz]
Acquisition.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition.sampled_ms=1
@@ -420,8 +417,8 @@ Acquisition.sampled_ms=1
Acquisition.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold
Acquisition.threshold=0.005
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option.
-;Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option.
+;Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition.doppler_max=10000
@@ -429,7 +426,7 @@ Acquisition.doppler_max=10000
Acquisition.doppler_step=500
;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+;#The following options are specific to each channel and overwrite the generic options
;######### ACQUISITION CH 0 CONFIG ############
@@ -455,12 +452,12 @@ Acquisition.doppler_step=500
\subsubsection tracking Tracking
When a satellite is declared present, the parameters estimated by the acquisition module are then fed to the receiver tracking module, which represents the
second stage of the signal processing unit, aiming to perform a local search for accurate estimates of code delay and carrier phase, and following their eventual
- variations.
+ variations.
-Again, a class hierarchy consisting of a TrackingInterface class and subclasses implementing algorithms provides a way of testing different approaches,
-with full access to their parameters. Check GpsL1CaDllPllTracking or GalileoE1DllPllVemlTracking for examples of adapters, and Gps_L1_Ca_Dll_Pll_Tracking_cc for an example
+Again, a class hierarchy consisting of a TrackingInterface class and subclasses implementing algorithms provides a way of testing different approaches,
+with full access to their parameters. Check GpsL1CaDllPllTracking or GalileoE1DllPllVemlTracking for examples of adapters, and Gps_L1_Ca_Dll_Pll_Tracking_cc for an example
of a signal processing block implementation. There are also available some useful classes and functions for signal tracking; take a look at Correlator, lock_detectors.h, tracking_discriminators.h or
-tracking_2nd_DLL_filter.h.
+tracking_2nd_DLL_filter.h.
The source code of all the available tracking algorithms is located at:
\verbatim
@@ -482,10 +479,10 @@ Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking.item_type=gr_complex
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
Tracking.if=0
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
Tracking.dump=false
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -508,12 +505,12 @@ Tracking.early_late_space_chips=0.5;
\endverbatim
\subsubsection decoding Decoding of the navigation message
-Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites
-(also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to
-error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are
-spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for
-error control an others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and
-interleaving, depending on the system. All this decoding complexity is managed by a finite state machine implemented with the Boost.Statechart library.
+Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites
+(also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to
+error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are
+spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for
+error control an others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and
+interleaving, depending on the system.
The common interface is TelemetryDecoderInterface. Check GpsL1CaTelemetryDecoder for an example of the GPS L1 NAV message decoding adapter, and gps_l1_ca_telemetry_decoder_cc
for an actual implementation of a signal processing block. Configuration example:
@@ -527,13 +524,13 @@ TelemetryDecoder.dump=false
See the \ref reference_docs for more information about the signal format.
\subsection observables Observables
-GNSS systems provide different kinds of observations. The most commonly used are the code observations, also called pseudoranges. The pseudo comes from
+GNSS systems provide different kinds of observations. The most commonly used are the code observations, also called pseudoranges. The pseudo comes from
the fact that on the receiver side the clock error is unknown and thus the measurement is not a pure range observation. High accuracy applications also use the
carrier phase observations, which are based on measuring the difference between the carrier phase transmitted by the GNSS satellites and the phase of the carrier
generated in the receiver. Both observables are computed from the outputs of the tracking module and the decoding of the navigation message.
This module collects all the data provided by every tracked channel, aligns all received data into a coherent set, and computes the observables.
-The common interface is ObservablesInterface.
+The common interface is ObservablesInterface.
Configuration example:
\verbatim
@@ -541,7 +538,7 @@ Configuration example:
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=GPS_L1_CA_Observables
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false
;#dump_filename: Log path and filename.
@@ -567,24 +564,24 @@ PVT.flag_nmea_tty_port=true;
;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
\endverbatim
This implementation allows tuning of the following parameters:
\verbatim
PVT.averaging_depth=10 ; Number of PVT observations in the moving average algorithm
-PVT.flag_averaging=true ; Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
+PVT.flag_averaging=true ; Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs
PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms].
-PVT.dump=false ; Enable or disable the PVT internal binary data file logging [true] or [false]
+PVT.dump=false ; Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump_filename=./PVT ; Log path and filename without extension.
\endverbatim
\section license About the software license
-GNSS-SDR is released under the General Public License (GPL) v3, thus securing practical usability, inspection,
-and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals.
+GNSS-SDR is released under the General Public License (GPL) v3, thus securing practical usability, inspection,
+and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals.
The GPL implies that:
\li Copies may be distributed free of charge or for money, but the source code has to be shipped or provided free of charge (or at cost price) on demand. The receiver of the source code has the same rights meaning he can share copies free of charge or resell.
@@ -600,8 +597,8 @@ If you use GNSS-SDR to produce a research paper or Thesis, we would appreciate i
\li \anchor Navitec2012 C. Fernández-Prades, J. Arribas, L. Esteve, D. Pubill, P. Closas, An Open Source Galileo E1 Software Receiver, in Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC 2012), ESTEC, Noordwijk, The Netherlands, Dec. 2012.
\li J. Arribas, GNSS Array-based Acquisition: Theory and Implementation, PhD Thesis, Universitat Politècnica de Catalunya, Barcelona, Spain, June 2012.
-\li C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, GNSS-SDR: an open source tool for researchers and developers, in Proc. of the ION GNSS 2011 Conference, Portland, Oregon, Sept. 19-23, 2011.
-\li C. Fernández-Prades, C. Avilés, L. Esteve, J. Arribas, and P. Closas, Design patterns for GNSS software receivers, in Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010), ESTEC, Noordwijk, The Netherlands, Dec. 2010. DOI:10.1109/NAVITEC.2010.5707981
+\li C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, GNSS-SDR: an open source tool for researchers and developers, in Proc. of the ION GNSS 2011 Conference, Portland, Oregon, Sept. 19-23, 2011.
+\li C. Fernández-Prades, C. Avilés, L. Esteve, J. Arribas, and P. Closas, Design patterns for GNSS software receivers, in Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010), ESTEC, Noordwijk, The Netherlands, Dec. 2010. DOI:10.1109/NAVITEC.2010.5707981
For LaTeX users, these are the BibTeX cites for your convenience:
@@ -609,12 +606,12 @@ For LaTeX users, these are the BibTeX cites for your convenience:
@INPROCEEDINGS{GNSS-SDR12
author = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and L.~Esteve and D.~Pubill and P.~Closas},
title = {An Open Source {G}alileo {E1} Software Receiver},
- booktitle = {Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2012)},
- year = {2012},
- address = {ESTEC, Noordwijk, The Netherlands},
+ booktitle = {Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2012)},
+ year = {2012},
+ address = {ESTEC, Noordwijk, The Netherlands},
month = {Dec.} }
\endverbatim
-
+
\verbatim
@PHDTHESIS{Arribas12,
author = {J.~Arribas},
@@ -624,48 +621,45 @@ For LaTeX users, these are the BibTeX cites for your convenience:
address = {Barcelona, Spain},
month = {June} }
\endverbatim
-
+
\verbatim
-@INPROCEEDINGS{GNSS-SDR11,
- AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve},
- TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers},
- BOOKTITLE = {Proc. of the ION GNSS 2011 Conference},
- YEAR = {2011},
- address = {Portland, Oregon},
- month = {Sept.} }
+@INPROCEEDINGS{GNSS-SDR11,
+ AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve},
+ TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers},
+ BOOKTITLE = {Proc. of the ION GNSS 2011 Conference},
+ YEAR = {2011},
+ address = {Portland, Oregon},
+ month = {Sept.} }
\endverbatim
-
+
\verbatim
-@INPROCEEDINGS{GNSS-SDR10,
- AUTHOR = {C.~{Fern\'{a}ndez--Prades} and C.~Avil\'{e}s and L.~Esteve and J.~Arribas and P.~Closas},
- TITLE = {Design patterns for {GNSS} software receivers},
- BOOKTITLE = {Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010)},
- YEAR = {2010},
- address = {ESTEC, Noordwijk, The Netherlands},
- month = {Dec.},
- note = {DOI:10.1109/NAVITEC.2010.5707981} }
+@INPROCEEDINGS{GNSS-SDR10,
+ AUTHOR = {C.~{Fern\'{a}ndez--Prades} and C.~Avil\'{e}s and L.~Esteve and J.~Arribas and P.~Closas},
+ TITLE = {Design patterns for {GNSS} software receivers},
+ BOOKTITLE = {Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010)},
+ YEAR = {2010},
+ address = {ESTEC, Noordwijk, The Netherlands},
+ month = {Dec.},
+ note = {DOI:10.1109/NAVITEC.2010.5707981} }
\endverbatim
\section now_what Ok, now what?
-In order to start using GNSS-SDR, you may want to populate gnss-sdr/data folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output
-of a Radio Frequency front-end's Analog-to_Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intemediate frequency (on the order of MHz).
+In order to start using GNSS-SDR, you may want to populate gnss-sdr/data folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output
+of a Radio Frequency front-end's Analog-to_Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intemediate frequency (on the order of MHz).
Prepare your configuration file, and then you are ready for going to the gnss-sdr/install folder, running ./gnss-sdr, and see how the file is processed.
Please ask the Developer Team for a signal sample if you need one, and they will do their best ;-)
Another interesting option is working in real-time with a RF front-end. We provide drivers for UHD-compatible hardware (see \ref signal_source), for the GN3S v2 USB dongle
and for some DVB-T USB dongles. Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time.
-You can find more information at the GNSS-SDR Documentation page or directly asking to the
-GNSS-SDR Developers mailing list.
-
-You are also very welcome to contribute to the project, there are many ways to participate in GNSS-SDR.
-If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it.
-Please do not hesitate to contact them.
+You can find more information at the GNSS-SDR Documentation page or directly asking to the
+GNSS-SDR Developers mailing list.
-Enjoy GNSS-SDR!
+You are also very welcome to contribute to the project, there are many ways to participate in GNSS-SDR.
+If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it.
+Please do not hesitate to contact them.
+
+Enjoy GNSS-SDR!
The Developer Team.
*/
-
-
-
diff --git a/docs/doxygen/other/reference_docs.dox b/docs/doxygen/other/reference_docs.dox
index 3759c876a..8b3f8564d 100644
--- a/docs/doxygen/other/reference_docs.dox
+++ b/docs/doxygen/other/reference_docs.dox
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
/*! \page reference_docs Reference Documents
@@ -21,32 +21,32 @@
\section icd Interface Control Documents
\subsection gps GPS
-All the current GPS Interface Control Documents can be downloaded from GPS.gov, the official U.S. Government webpage for GPS.
+All the current GPS Interface Control Documents can be downloaded from GPS.gov, the official U.S. Government webpage for GPS.
-\li GPS L1 and L2C: Global Positioning System Directorate, Interface Specification IS-GPS-200 Revision H. September, 2013.
-\li GPS L1C (available with first Block III launch): Global Positioning System Directorate, Interface Specification IS-GPS-800 Revision D. September, 2013.
-\li GPS L5 (first Block IIF satellite launched on May, 2010): Global Positioning System Directorate, Interface Specification IS-GPS-705 Revision D. September, 2013.
+\li GPS L1 and L2C: Global Positioning System Directorate, Interface Specification IS-GPS-200 Revision H. September, 2013.
+\li GPS L1C (available with first Block III launch): Global Positioning System Directorate, Interface Specification IS-GPS-800 Revision D. September, 2013.
+\li GPS L5 (first Block IIF satellite launched on May, 2010): Global Positioning System Directorate, Interface Specification IS-GPS-705 Revision D. September, 2013.
\subsection glonass GLONASS
-Official GLONASS webpage: Information-analytical centre official website.
+Official GLONASS webpage: Information-analytical centre official website.
\li Standard Accuracy (ST) signals at L1 and L2: Russian Institute of Space Device Engineering, Global Navigation Satellite System GLONASS. Interface Control Document. Navigational radiosignal in bands L1, L2. Edition 5.1, Moscow, Russia, 2008
\subsection galileo Galileo
-Check the Galileo website of the European Commission and the
-Galileo website of the European Space Agency.
+Check the Galileo website of the European Commission and the
+Galileo website of the European Space Agency.
There is a website with Galileo constellation status information from the International GNSS Service.
-\li Galileo E5, E6, and E1: European GNSS (Galileo) Open Service. Signal In Space Interface Control Document. Ref: OS SIS ICD, Issue 1.2, European Commission, Nov. 2015.
+\li Galileo E5, E6, and E1: European GNSS (Galileo) Open Service. Signal In Space Interface Control Document. Ref: OS SIS ICD, Issue 1.2, European Commission, Nov. 2015.
\li European GNSS (Galileo) Open Service Signal-In-Space Operational Status Definition, European Commission, Sept. 2015.
-The European Commission is granting free access to the technical information on the future Galileo open service signal, i.e. the specifications manufacturers
-and developers need to process data received from satellites. This document informs receiver manufacturers, application developers and service providers on how
+The European Commission is granting free access to the technical information on the future Galileo open service signal, i.e. the specifications manufacturers
+and developers need to process data received from satellites. This document informs receiver manufacturers, application developers and service providers on how
to use the future Galileo system and what they can expect in terms of performance.
\subsection beidou BeiDou
@@ -65,20 +65,20 @@ Open Service Signal (Version 2.0). China Satellite Navigation Office, December 2
\li EGNOS Open Service (OS) Service Definition Document. Ref: EGN-SDD OS, Revision 2.2, European GNSS Agency (GSA), Feb. 12, 2015. This is a complementary document to the RTCA DO229D, mentioned above. It describes the scope of services provided by the EGNOS Open Service to be used by end-users or Application Specific Service Providers. It details the general conditions relating to the use of the EGNOS service, a technical description of the Signal-in-Space (SIS), the reference receiver, environmental conditions, the service performance achieved and aspects relating to service provision.
-\li EGNOS Safety of Life Service Definition Document. Ref: EGN-SDD SoL, Revision 3.0, European GNSS Agency (GSA), Sep. 22, 2015. The EGNOS Safety of Life (SoL) Service is provided openly and is freely accessible without any direct charge and is tailored to safety-critical transport applications in various domains, in particular for aviation applications. The service is thus compliant with the aviation APV-I (Approach with Vertical Guidance) requirements, as defined by ICAO in Annex 10, but may support also applications in other SoL domains.
+\li EGNOS Safety of Life Service Definition Document. Ref: EGN-SDD SoL, Revision 3.0, European GNSS Agency (GSA), Sep. 22, 2015. The EGNOS Safety of Life (SoL) Service is provided openly and is freely accessible without any direct charge and is tailored to safety-critical transport applications in various domains, in particular for aviation applications. The service is thus compliant with the aviation APV-I (Approach with Vertical Guidance) requirements, as defined by ICAO in Annex 10, but may support also applications in other SoL domains.
\li EGNOS Data Access Service (EDAS) Service Definition Document, Rf: EGN-SDD EDAS, V2.1, European GNSS Agency (GSA), Dec. 19, 2014.
-More information about EGNOS can be found through the EGNOS Portal.
+More information about EGNOS can be found through the EGNOS Portal.
\section standards Other Standards
\subsection rinex RINEX
-The final output of a navigation receiver is usually its position, speed or other related physical quantities. However, the calculation of those quantities
-are based on a series of measurements from one or more satellite constellations. Although receivers calculate positions in real time, in many cases it is
-interesting to store intermediate measures for later post-processing. RINEX is the standard format that allows the management and disposal of the measures
+The final output of a navigation receiver is usually its position, speed or other related physical quantities. However, the calculation of those quantities
+are based on a series of measurements from one or more satellite constellations. Although receivers calculate positions in real time, in many cases it is
+interesting to store intermediate measures for later post-processing. RINEX is the standard format that allows the management and disposal of the measures
generated by a receiver, as well as their off-line processing by a multitude of applications.
-\li The most common version at present is RINEX: The Receiver Independent Exchange Format Version 2.11, which enables storage of measurements from pseudorange, carrier-phase and Doppler systems for GPS or GLONASS,
+\li The most common version at present is RINEX: The Receiver Independent Exchange Format Version 2.11, which enables storage of measurements from pseudorange, carrier-phase and Doppler systems for GPS or GLONASS,
along with data from EGNOS and WAAS satellite based augmentation systems (SBAS).
\li The most recent version is RINEX: The Receiver Independent Exchange Format Version 3.01 published in June, 2009.
@@ -88,11 +88,11 @@ It includes Galileo and improves the handling of multi-constellation data files.
\subsection nmea NMEA
-The National Marine Electronics Association released the NMEA 0183 Interface Standard, which defines electrical signal requirements, data transmission protocol and time,
+The National Marine Electronics Association released the NMEA 0183 Interface Standard, which defines electrical signal requirements, data transmission protocol and time,
and specific sentence formats for a 4800-baud serial data bus. The standard is available for purchase.
\subsection kml KML
-KML is an XML language focused on geographic visualization, including annotation of maps and images. Geographic visualization includes not only the presentation of graphical data on the globe, but also the control of the user's navigation in the sense of where to go and where to look.
+KML is an XML language focused on geographic visualization, including annotation of maps and images. Geographic visualization includes not only the presentation of graphical data on the globe, but also the control of the user's navigation in the sense of where to go and where to look.
Google submitted KML (formerly Keyhole Markup Language) to the Open Geospatial Consortium (OGC) to be evolved within the OGC consensus process with the following goal: KML Version 2.2 has been adopted as an OGC implementation standard.
\li Open Geospatial Consortium, Inc., OGC KML Version 2.2.0, April 2008.
@@ -100,33 +100,33 @@ Google submitted KML (formerly Keyhole Markup Language) to the Open Geospatial C
\subsection cxx C++ Standards
-In 1998, the C++ standards committee (the ISO/IEC JTC1/SC22/WG21 working group)
-standardized C++ and published the international standard ISO/IEC 14882:1998 (informally known as C++98). A technical corrigendum was approved in 2003,
+In 1998, the C++ standards committee (the ISO/IEC JTC1/SC22/WG21 working group)
+standardized C++ and published the international standard ISO/IEC 14882:1998 (informally known as C++98). A technical corrigendum was approved in 2003,
and the standard was published again as the ISO/IEC 14882:2003.
-Published ISO and IEC standards can be purchased from a member body of ISO or IEC. Free copies of the C++ standard Committee Drafts
-were made public before the official standard was released.
+Published ISO and IEC standards can be purchased from a member body of ISO or IEC. Free copies of the C++ standard Committee Drafts
+were made public before the official standard was released.
-In 2005, a technical report, called the Library Technical Report 1
-(often known as TR1 for short), was released. While not an official part of the standard, it specified a number of extensions to the standard library,
-which were expected to be included in the next version of C++. The linked document is officially a draft, but that is due only to procedural issues;
+In 2005, a technical report, called the Library Technical Report 1
+(often known as TR1 for short), was released. While not an official part of the standard, it specified a number of extensions to the standard library,
+which were expected to be included in the next version of C++. The linked document is officially a draft, but that is due only to procedural issues;
the content did not change. Scott Meyers provides more TR1 information.
Some ISO/IEC standards are publicly available, for instance: ISO/IEC TR 18015:2006 Technical Report on C++ Performance.
-The standard for the next version of the language (previously known as C++0x) was finally
-published with the name of C++11 in September, 2011, as the ISO/IEC 14882:2011 Standard. GCC, the GNU Compiler Collection,
-provides partial C++11 support. Bjarne Stroustrup maintains a C++11 FAQ.
+The standard for the next version of the language (previously known as C++0x) was finally
+published with the name of C++11 in September, 2011, as the ISO/IEC 14882:2011 Standard. GCC, the GNU Compiler Collection,
+provides partial C++11 support. Bjarne Stroustrup maintains a C++11 FAQ.
\li The most recent public draft of the Standard for Programming Language C++ was published in Feb. 2011.
\subsection protocols Positioning protocols in wireless communication networks
-Cellular industry location standards first appeared in the late 1990s, with the 3rd generation partnership project (3GPP) radio resource location services protocol (RRLP) technical specification 44.031 positioning protocol for GSM networks.
-Today, RRLP is the de facto standardized protocol to carry GNSS assistance data to GNSS-enabled mobile devices, and the term "3GPP specification" now covers all GSM (including GPRS and EDGE),
-W-CDMA and LTE (including LTE-A) specifications. Precisely, the label "LTE-A" is applied to networks compliant with LTE Release 10 and beyond, which fulfill the requirements issued by
-the International Telecommunication Union Radiocommunication Sector (ITU-R) in the global standard for international mobile telecommunications (IMT Advanced, also referred to as 4G)
+Cellular industry location standards first appeared in the late 1990s, with the 3rd generation partnership project (3GPP) radio resource location services protocol (RRLP) technical specification 44.031 positioning protocol for GSM networks.
+Today, RRLP is the de facto standardized protocol to carry GNSS assistance data to GNSS-enabled mobile devices, and the term "3GPP specification" now covers all GSM (including GPRS and EDGE),
+W-CDMA and LTE (including LTE-A) specifications. Precisely, the label "LTE-A" is applied to networks compliant with LTE Release 10 and beyond, which fulfill the requirements issued by
+the International Telecommunication Union Radiocommunication Sector (ITU-R) in the global standard for international mobile telecommunications (IMT Advanced, also referred to as 4G)
access technologies.
Control plane protocols:
@@ -139,12 +139,12 @@ User plane protocols:
\li Open Mobile Alliance (OMA), Secure User Plane Location Architecture Version 1 (SUPL 1.0), June 2007.
\li Open Mobile Alliance (OMA), Secure User Plane Location Architecture Version 2 (SUPL 2.0), April 2012.
-LTE Release 9 introduced extension hooks in LPP messages, so that the bodies external to 3GPP could extend the LPP feature set. OMA LPP extensions (LPPe), supported in SUPL 3.0, build on top of the 3GPP LPP reusing its procedures and data types.
+LTE Release 9 introduced extension hooks in LPP messages, so that the bodies external to 3GPP could extend the LPP feature set. OMA LPP extensions (LPPe), supported in SUPL 3.0, build on top of the 3GPP LPP reusing its procedures and data types.
Check the OMA Location Working Group (WG) webpage for updated information about LPP Extensions (LPPe) Specification.
-\li The OMA Mobile Location Protocol (MLP) V3.1 is an application-level protocol for getting the position of mobile stations (mobile phones, wireless personal digital assistants, etc.) independent
-of underlying network technology. The MLP serves as the interface between a Location Server and a Location Services (LCS) Client.
+\li The OMA Mobile Location Protocol (MLP) V3.1 is an application-level protocol for getting the position of mobile stations (mobile phones, wireless personal digital assistants, etc.) independent
+of underlying network technology. The MLP serves as the interface between a Location Server and a Location Services (LCS) Client.
This specification defines the core set of operations that a Location Server should be able to perform.
-*/
\ No newline at end of file
+*/
diff --git a/docs/doxygen/other/signal_model.dox b/docs/doxygen/other/signal_model.dox
index 5d40b7f65..de02c8e19 100644
--- a/docs/doxygen/other/signal_model.dox
+++ b/docs/doxygen/other/signal_model.dox
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
/*! \page the_signal_model Signal model
@@ -21,46 +21,46 @@
\section gnss_signal_model GNSS signal model
This page describes signals transmitted by GNSS space vehicles. Signal models are mathematical representations
-of the electromagnetic waves that are exciting the receiver's antenna. The current induced by those waves is then amplified, filtered and downconverted to a suitable frequency (can be at some intermediate frequency or
+of the electromagnetic waves that are exciting the receiver's antenna. The current induced by those waves is then amplified, filtered and downconverted to a suitable frequency (can be at some intermediate frequency or
directly to baseband), and then converted to 0s and 1s by the Analog-to-Digital Converter (ADC). That is the job of the Radio Frequency front-end, which at its output delivers a stream of
-digital samples. Those samples constitute the input of a software receiver, so for GNSS-SDR the signal models described below can be seen as the rules of the game.
+digital samples. Those samples constitute the input of a software receiver, so for GNSS-SDR the signal models described below can be seen as the rules of the game.
-GNSS' space vehicles are modern versions of lighthouses, but with better visibility. Each satellite is a reference point, and if we know our distance to several reference points,
+GNSS' space vehicles are modern versions of lighthouses, but with better visibility. Each satellite is a reference point, and if we know our distance to several reference points,
we can compute our location, just as mariners do when they see a couple of lighthouses. For each in-view satellite \f$i\f$ of system \f$s\f$, we can write:
\f{equation}{\label{eq:pseudorange}
\rho_i = \sqrt{ \left(x^{\text{Tx}}_i - x \right)^2 + \left(y^{\text{Tx}}_i - y \right)^2 + \left(z^{\text{Tx}}_i - z \right)^2}+c\Delta t^{(s)}+\sigma_{e},
\f}
- where \f$\left(x^{\text{Tx}}_i, y^{\text{Tx}}_i, z^{\text{Tx}}_i\right)\f$ is the satellite's position (known from the navigation message), \f$(x,y,z)\f$ the receiver's position,
- and \f$\sigma_e\f$ gathers other sources of error. Since the receiver needs to estimate its own 3D position (three spatial unknowns) and its clock deviation with respect to
- the satellites' time basis, at least \f$3+N_s\f$ satellites must be seen by the receiver at the same time, where \f$N_s\f$ is the number of different navigation systems available
- (in-view) at a given time. Each received satellite signal, once synchronized and demodulated at the receiver, defines one equation such as the one defined above,
- forming a set of nonlinear equations that can be solved algebraically by means of the Bancroft algorithm or
- numerically, resorting to multidimensional Newton-Raphson and weighted least square methods. When a priori information is added we resort to Bayesian estimation, a problem
- that can be solved recursively by a Kalman filter or any of its variants. The problem can be further expanded by adding other unknowns (for instance, parameters of ionospheric and
- tropospheric models), sources of information from other systems, mapping information, and even motion models of the receiver. In the design of multi-constellation GNSS receivers,
- the vector of unknowns can also include the receiver clock offset with respect to each system in order to take advantage of a higher number of in-view satellites and using them
+ where \f$\left(x^{\text{Tx}}_i, y^{\text{Tx}}_i, z^{\text{Tx}}_i\right)\f$ is the satellite's position (known from the navigation message), \f$(x,y,z)\f$ the receiver's position,
+ and \f$\sigma_e\f$ gathers other sources of error. Since the receiver needs to estimate its own 3D position (three spatial unknowns) and its clock deviation with respect to
+ the satellites' time basis, at least \f$3+N_s\f$ satellites must be seen by the receiver at the same time, where \f$N_s\f$ is the number of different navigation systems available
+ (in-view) at a given time. Each received satellite signal, once synchronized and demodulated at the receiver, defines one equation such as the one defined above,
+ forming a set of nonlinear equations that can be solved algebraically by means of the Bancroft algorithm or
+ numerically, resorting to multidimensional Newton-Raphson and weighted least square methods. When a priori information is added we resort to Bayesian estimation, a problem
+ that can be solved recursively by a Kalman filter or any of its variants. The problem can be further expanded by adding other unknowns (for instance, parameters of ionospheric and
+ tropospheric models), sources of information from other systems, mapping information, and even motion models of the receiver. In the design of multi-constellation GNSS receivers,
+ the vector of unknowns can also include the receiver clock offset with respect to each system in order to take advantage of a higher number of in-view satellites and using them
jointly in the navigation solution, therefore increasing accuracy.
-The analytic representation of a signal received from a GNSS satellite can be generically expressed as
+The analytic representation of a signal received from a GNSS satellite can be generically expressed as
\f{equation}{\label{eq:analytic}
r(t)=\alpha(t) s_{T} \left(t-\tau(t)\right)e^{-j2 \pi f_d(t) }e^{j 2 \pi f_c t}+n(t)~,
\f}
- where \f$\alpha(t)\f$ is the amplitude, \f$s_{T}(t)\f$ is the complex baseband transmitted signal, \f$\tau(t)\f$ is the time-varying delay, \f$f_d(t)=f_c \tau(t)\f$ is the Doppler shift, \f$f_c\f$ is
- the carrier frequency, and \f$n(t)\f$ is a noise term. These signals arrive to the Earth's surface at extremely low power (e.g. \f$-158.5\f$ dBW for GPS L1 C/A-code, \f$-157\f$ dBW
- for Galileo E1), well below the noise floor. In order to estimate its distances to satellites, the receiver must correlate time-aligned replicas of the corresponding pseudorandom
- code with the incoming signal, in a process called despreading that provides processing gain only to the signal of interest. After a coarse and fine estimation stages of the
- synchronization parameters (usually known as acquisition and tracking, respectively), signal processing output is in form of observables:
-
- i) the pseudorange (code) measurement,
+ where \f$\alpha(t)\f$ is the amplitude, \f$s_{T}(t)\f$ is the complex baseband transmitted signal, \f$\tau(t)\f$ is the time-varying delay, \f$f_d(t)=f_c \tau(t)\f$ is the Doppler shift, \f$f_c\f$ is
+ the carrier frequency, and \f$n(t)\f$ is a noise term. These signals arrive to the Earth's surface at extremely low power (e.g. \f$-158.5\f$ dBW for GPS L1 C/A-code, \f$-157\f$ dBW
+ for Galileo E1), well below the noise floor. In order to estimate its distances to satellites, the receiver must correlate time-aligned replicas of the corresponding pseudorandom
+ code with the incoming signal, in a process called despreading that provides processing gain only to the signal of interest. After a coarse and fine estimation stages of the
+ synchronization parameters (usually known as acquisition and tracking, respectively), signal processing output is in form of observables:
+
+ i) the pseudorange (code) measurement,
equivalent to the difference of the time of reception (expressed
-in the time frame of the receiver) and the time of transmission (expressed in the time frame of the satellite) of a distinct satellite signal; and optionally
+in the time frame of the receiver) and the time of transmission (expressed in the time frame of the satellite) of a distinct satellite signal; and optionally
-ii) the carrier-phase measurement, actually being a measurement on the beat frequency between the received carrier of the satellite signal and a receiver-generated reference frequency.
-Carrier phase measurements are ambiguous, in the sense that the integer number of carrier wavelengths between satellite and the receiver's antenna is unknown.
-Techniques such as Least-square AMBiguity Decorrelation Approach (LAMBDA) or
-Multi Carrier Ambiguity Resolution (MCAR) can be applied to resolve such ambiguity and provide an accurate estimation of the distance between the satellite and the receiver.
+ii) the carrier-phase measurement, actually being a measurement on the beat frequency between the received carrier of the satellite signal and a receiver-generated reference frequency.
+Carrier phase measurements are ambiguous, in the sense that the integer number of carrier wavelengths between satellite and the receiver's antenna is unknown.
+Techniques such as Least-square AMBiguity Decorrelation Approach (LAMBDA) or
+Multi Carrier Ambiguity Resolution (MCAR) can be applied to resolve such ambiguity and provide an accurate estimation of the distance between the satellite and the receiver.
-Then, depending on the required accuracy, the navigation solution can range from pseudorange-only, computationally low demanding, and limited accuracy least squares methods to sophisticated combinations of code and
+Then, depending on the required accuracy, the navigation solution can range from pseudorange-only, computationally low demanding, and limited accuracy least squares methods to sophisticated combinations of code and
phase observables at different frequencies for high demanding applications such as surveying, geodesy, and geophysics.
@@ -74,7 +74,7 @@ and civilian users on a continuous, worldwide basis. Two GPS services are provid
the Precise Positioning Service (PPS), available primarily to the military of the United
States and its allies, and the Standard Positioning Service (SPS) open to civilian users.
-\li GPS L1. Defined at Interface Specification IS-GPS-200 Revision F, this band is centered at \f$f_{\text{GPS L1}}=1575.42\f$ MHz. The complex baseband transmitted signal can be written as
+\li GPS L1. Defined at Interface Specification IS-GPS-200 Revision F, this band is centered at \f$f_{\text{GPS L1}}=1575.42\f$ MHz. The complex baseband transmitted signal can be written as
\f{equation}{
s^{\text{(GPS L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~,
\f}
@@ -83,30 +83,30 @@ s^{\text{(GPS L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~,
e_{L1I}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}}\Big[ [l]_{204600}\Big] \oplus C_{\text{P(Y)}}\Big[ |l|_{L_{\text{P(Y)}}} \Big] p(t - lT_{c,\text{P(Y)}})~,\label{eq:L1CAI}\\
e_{L1Q}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}}\Big[ [l]_{20460} \Big] \oplus C_{\text{C/A}} \Big[ |l|_{1023} \Big] p(t - lT_{c,\text{C/A}})~,\label{eq:L1CA}
\f}
- where \f$\oplus\f$ is the exclusive-or operation (modulo-2 addition), \f$|l|_{L}\f$ means \f$l\f$ modulo \f$L\f$, \f$[l]_{L}\f$ means the integer part of \f$\frac{l}{L}\f$,
- \f$D_{\text{NAV}}\f$ is the GPS navigation message bit sequence, transmitted at \f$50\f$ bps, \f$T_{c,\text{P(Y)}}=\frac{1}{10.23}\f$ \f$\mu\f$s, \f$T_{c,\text{C/A}}=\frac{1}{1.023}\f$ \f$\mu\f$s,
- \f$L_{\text{P(Y)}}=6.1871 \cdot 10^{12}\f$, and \f$p(t)\f$ is a rectangular pulse of a chip-period duration centered at \f$t=0\f$ and filtered at the transmitter.
- According to the chip rate, the binary phase-shift keying modulations in the equations above are denoted as BPSK(10) and BPSK(1), respectively. The precision P codes (named Y codes whenever
- the anti-spoofing mode is activated, encrypting the code and thus denying non-U.S. military users) are sequences of \f$7\f$ days in length. Regarding the modernization plans for GPS, it
- is worthwhile to mention that there is a new civilian-use signal planned, called L1C and defined at Interface Specification IS-GPS-800 Revision B,
- to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C will be available with first Block III launch, currently scheduled for 2013. The implementation will
+ where \f$\oplus\f$ is the exclusive-or operation (modulo-2 addition), \f$|l|_{L}\f$ means \f$l\f$ modulo \f$L\f$, \f$[l]_{L}\f$ means the integer part of \f$\frac{l}{L}\f$,
+ \f$D_{\text{NAV}}\f$ is the GPS navigation message bit sequence, transmitted at \f$50\f$ bps, \f$T_{c,\text{P(Y)}}=\frac{1}{10.23}\f$ \f$\mu\f$s, \f$T_{c,\text{C/A}}=\frac{1}{1.023}\f$ \f$\mu\f$s,
+ \f$L_{\text{P(Y)}}=6.1871 \cdot 10^{12}\f$, and \f$p(t)\f$ is a rectangular pulse of a chip-period duration centered at \f$t=0\f$ and filtered at the transmitter.
+ According to the chip rate, the binary phase-shift keying modulations in the equations above are denoted as BPSK(10) and BPSK(1), respectively. The precision P codes (named Y codes whenever
+ the anti-spoofing mode is activated, encrypting the code and thus denying non-U.S. military users) are sequences of \f$7\f$ days in length. Regarding the modernization plans for GPS, it
+ is worthwhile to mention that there is a new civilian-use signal planned, called L1C and defined at Interface Specification IS-GPS-800 Revision B,
+ to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C will be available with first Block III launch, currently scheduled for 2013. The implementation will
provide C/A code to ensure backward compatibility.
-\li GPS L2C. Defined at Interface Specification IS-GPS-200 Revision F, is only available on
-Block IIR-M and subsequent satellite blocks. Centered at \f$f_{\text{GPS L2}}=1227.60\f$ MHz, the signal structure is the same than in (\ref{eq:GPSL1}), with the precision code in the In-phase
+\li GPS L2C. Defined at Interface Specification IS-GPS-200 Revision F, is only available on
+Block IIR-M and subsequent satellite blocks. Centered at \f$f_{\text{GPS L2}}=1227.60\f$ MHz, the signal structure is the same than in (\ref{eq:GPSL1}), with the precision code in the In-phase
component, just as in (\ref{eq:L1CAI}) but with an optional presence of the navigation message \f$D_{\text{NAV}}\f$. For the Quadrature-phase component, three options are defined:
\f{align}{ e_{L2CQ}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{CNAV}} \Big[ [l]_{10230} \Big] \oplus \left( C_{\text{CL}} \Big[ |l|_{L_{\text{CL}}} \Big] p_{\text{\tiny{1/2}}} \left( t - lT_{c,L2C} \right) + \right.\\ {} &+ \left. C_{\text{CM}} \Big[ |l|_{L_{\text{CM}}} \Big] p_{\text{\tiny{1/2}}}\left(t - \left(l+\frac{3}{4}\right)T_{c,L2C}\right) \right),\\
e_{L2CQ}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}} \Big[ [l]_{20460} \Big] \oplus C_{\text{C/A}} \Big[ |l|_{1023} \Big] p \left(t - lT_{c,\text{C/A}}\right) \text{, or}\\
e_{L2CQ}(t)=& \sum_{l=-\infty}^{\infty}C_{\text{C/A}} \Big[ |l|_{1023} \Big] p(t - lT_{c,\text{C/A}})~,
\f}
- where \f$T_{c,L2C}=\frac{1}{511.5}\f$ ms and \f$p_{\text{\tiny{1/2}}}(t)\f$ is a rectangular pulse of half chip-period duration, thus time-multiplexing both codes. The civilian long
- code \f$C_{\text{CL}}\f$ is \f$L_{\text{CL}}=767250\f$ chips long, repeating every \f$1.5\f$ s, while the civilian moderate code \f$C_{\text{CM}}\f$ is \f$L_{\text{CL}}=10230\f$ chips
- long and its repeats every \f$20\f$ ms. The CNAV data is an upgraded version of the original NAV navigation message, containing higher precision representation and nominally more accurate
+ where \f$T_{c,L2C}=\frac{1}{511.5}\f$ ms and \f$p_{\text{\tiny{1/2}}}(t)\f$ is a rectangular pulse of half chip-period duration, thus time-multiplexing both codes. The civilian long
+ code \f$C_{\text{CL}}\f$ is \f$L_{\text{CL}}=767250\f$ chips long, repeating every \f$1.5\f$ s, while the civilian moderate code \f$C_{\text{CM}}\f$ is \f$L_{\text{CL}}=10230\f$ chips
+ long and its repeats every \f$20\f$ ms. The CNAV data is an upgraded version of the original NAV navigation message, containing higher precision representation and nominally more accurate
data than the NAV data. It is transmitted at \f$25\f$ bps with forward error correction (FEC) encoding, resulting in \f$50\f$ sps.
-\li GPS L5. The GPS L5 link, defined at Interface Specification IS-GPS-705 Revision B, is only available
+\li GPS L5. The GPS L5 link, defined at Interface Specification IS-GPS-705 Revision B, is only available
in Block IIF (first satellite launched on May, 2010) and subsequent satellite blocks. Centered at \f$f_{\text{GPS L5}}=1176.45\f$ MHz, this signal in space can be written as:
\f{equation}{
s^{\text{(GPS L5)}}_{T}(t)=e_{L5I}(t) +j e_{L5Q}(t)~,
@@ -129,9 +129,9 @@ Eight satellites are equally spaced in each plane with \f$45^o\f$ argument of la
the orbital planes have an argument of latitude displacement of \f$15^o\f$ relative to each other.
-GLONASS civil signal-in-space is defined at Interface Control Document. Navigational radiosignal in bands L1, L2. Edition 5.1.
-This system makes use of a frequency-division multiple access (FDMA) signal structure, transmitting in two bands: \f$f^{(k)}_{GLO L1}=1602+k \cdot 0.5625\f$ MHz and \f$f^{(k)}_{GLO L2}=1246+k \cdot 0.4375\f$ MHz,
-where \f$k\in \left\{ -7,-6,\cdots,5,6\right\}\f$ is the channel number. Satellites in opposite points of an orbit plane transmit signals on equal frequencies, as these satellites will never be
+GLONASS civil signal-in-space is defined at Interface Control Document. Navigational radiosignal in bands L1, L2. Edition 5.1.
+This system makes use of a frequency-division multiple access (FDMA) signal structure, transmitting in two bands: \f$f^{(k)}_{GLO L1}=1602+k \cdot 0.5625\f$ MHz and \f$f^{(k)}_{GLO L2}=1246+k \cdot 0.4375\f$ MHz,
+where \f$k\in \left\{ -7,-6,\cdots,5,6\right\}\f$ is the channel number. Satellites in opposite points of an orbit plane transmit signals on equal frequencies, as these satellites will never be
in view simultaneously by a ground-based user.
@@ -144,18 +144,18 @@ s^{\text{(GLO L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~,
e_{L1I}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{GNAV}}\Big[ [l]_{102200}\Big] \oplus C_{\text{HP}} \Big[ |l|_{L_{\text{HP}}} \Big] p(t - lT_{c,\text{HP}})~,\\
e_{L1Q}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{GNAV}}\Big[ [l]_{10220} \Big] \oplus C_{\text{SP}} \Big[ |l|_{511} \Big] p(t - lT_{c,\text{SP}})~,
\f}
- where \f$T_{c,\text{HP}}=\frac{1}{5.11}\f$ \f$\mu\f$s, \f$T_{c,\text{SP}}=\frac{1}{0.511}\f$ \f$\mu\f$s, and \f$L_{\text{HP}}=3.3554\cdot 10^7\f$. The navigation
- message \f$D_{\text{GNAV}}\f$ is transmitted at \f$50\f$ bps. Details of its content and structure, as well as the generation of the \f$C_{\text{SP}}\f$ code, can be found at
- the ICD. The usage of the HP signal should be agreed with the Russian Federation Defense
+ where \f$T_{c,\text{HP}}=\frac{1}{5.11}\f$ \f$\mu\f$s, \f$T_{c,\text{SP}}=\frac{1}{0.511}\f$ \f$\mu\f$s, and \f$L_{\text{HP}}=3.3554\cdot 10^7\f$. The navigation
+ message \f$D_{\text{GNAV}}\f$ is transmitted at \f$50\f$ bps. Details of its content and structure, as well as the generation of the \f$C_{\text{SP}}\f$ code, can be found at
+ the ICD. The usage of the HP signal should be agreed with the Russian Federation Defense
Ministry, and no more details have been disclosed.
\li GLONASS L2. Beginning with the second generation of satellites, called GLONASS-M and first launched in 2001, a second civil signal is available using the same SP code than the one in the L1 band.
-The use of FDMA techniques, in which the same code is used to broadcast navigation signals on different frequencies, and the placement of civil GLONASS transmissions on frequencies close to \f$1600\f$ MHz,
-well above the GPS L1 band, have complicated the design of combined GLONASS/GPS receivers, particularly low-cost equipment for mass-market applications. Future plans of modernization are
-intended to increase compatibility and interoperability with other GNSS, and include the addition of a code-division multiple access (CDMA) structure, and possibly binary offset carrier (BOC)
-modulation, beginning with the third civil signal in the L3 band (\f$1197.648 - 1212.255\f$ MHz). Russia is implementing the new signals on the next-generation GLONASS-K satellites, with a
+The use of FDMA techniques, in which the same code is used to broadcast navigation signals on different frequencies, and the placement of civil GLONASS transmissions on frequencies close to \f$1600\f$ MHz,
+well above the GPS L1 band, have complicated the design of combined GLONASS/GPS receivers, particularly low-cost equipment for mass-market applications. Future plans of modernization are
+intended to increase compatibility and interoperability with other GNSS, and include the addition of a code-division multiple access (CDMA) structure, and possibly binary offset carrier (BOC)
+modulation, beginning with the third civil signal in the L3 band (\f$1197.648 - 1212.255\f$ MHz). Russia is implementing the new signals on the next-generation GLONASS-K satellites, with a
first prototype successfully launched into orbit on February 26, 2011.
@@ -173,9 +173,9 @@ period of \f$14\f$ hours. The Control segment full infrastructure will be compos
Galileo's Open Service is defined at Signal In Space Interface Control Document. Ref: OS SIS ICD, Issue 1.1, where the following signal structures are specified:
-\li Galileo E1. This band, centered at \f$f_{\text{Gal E1}}=1575.420\f$ MHz and with a reference bandwidth of \f$24.5520\f$ MHz, uses the so-called composite binary offset carrier
+\li Galileo E1. This band, centered at \f$f_{\text{Gal E1}}=1575.420\f$ MHz and with a reference bandwidth of \f$24.5520\f$ MHz, uses the so-called composite binary offset carrier
CBOC(6,1,\f$\frac{1}{11}\f$) modulation, defined in baseband as:
-\f{align}{
+\f{align}{
s^{\text{(Gal E1)}}_{T}(t)=&\frac{1}{\sqrt{2}} \Big( e_{E1B}(t)\left( \alpha sc_A(t)+ \beta sc_B(t) \right)+ \\
{}& - e_{E1C}(t) \left( \alpha sc_A(t)- \beta sc_B(t) \right) \Big)~,\label{eq:CBOC}
\f}
@@ -192,8 +192,8 @@ In case of channel \f$C\f$, it is a pilot (dataless) channel with a secondary co
\f{align}{
\nonumber e_{E1C}(t)&= \sum_{m=-\infty}^{+\infty}C_{E1Cs}\Big[|m|_{25}\Big] \oplus \sum_{l=1}^{4092}C_{E1Cp}\Big[ l \Big] \cdot \\ {}& \; \; \cdot p(t-mT_{c,E1Cs}-lT_{c,E1Cp})~,\label{eq:E1C}
\f}
- with \f$T_{c,E1B}=T_{c,E1Cp}=\frac{1}{1.023}\f$ \f$\mu\f$s and \f$T_{c,E1Cs}=4\f$ ms. The \f$C_{E1B}\f$ and \f$C_{E1Cp}\f$ primary codes are pseudorandom memory code sequences defined at
- Annex C.7 and C.8 of OS SIS ICD. The binary
+ with \f$T_{c,E1B}=T_{c,E1Cp}=\frac{1}{1.023}\f$ \f$\mu\f$s and \f$T_{c,E1Cs}=4\f$ ms. The \f$C_{E1B}\f$ and \f$C_{E1Cp}\f$ primary codes are pseudorandom memory code sequences defined at
+ Annex C.7 and C.8 of OS SIS ICD. The binary
sequence of the secondary code \f$C_{E1Cs}\f$ is 0011100000001010110110010. This band also contains another component, Galileo E1A, intended for the Public Regulated Service (PRS).
It uses a BOC(15,2.5) modulation with cosine-shaped subcarrier \f$f_{s,E1A}=15.345\f$ MHz and \f$T_{c, E1A}=\frac{1}{2.5575}\f$ \f$\mu\f$s.
The PRS spreading codes and the structure of the navigation message have not been made public.
@@ -207,19 +207,19 @@ s_{T}^{\text{(Gal E6)}}(t) = \frac{1}{\sqrt{2}}\left(e_{E6B}(t)-e_{E6C}(t)\right
\nonumber e_{E6B}(t) =& \sum_{m=-\infty}^{+\infty} D_{\text{C/NAV}} \Big[ [l]_{5115}\Big] \oplus C_{E6B}\Big[|l|_{L_{E6B}}\Big] \cdot \\ {}& \cdot p(t - lT_{c,E6}),\\
\nonumber e_{E6C}(t) =& \sum_{m=-\infty}^{+\infty}C_{E6Cs}\Big[|m|_{100}\Big] \oplus \sum_{l=1}^{L_{E6C}}C_{E6Cp}\Big[ l \Big] \cdot \\ {}& \cdot p(t-mT_{c,E6s} -lT_{c,E6p}),
\f}
- where \f$D_{\text{C/NAV}}\f$ is the C/NAV navigation data stream, which is modulated with the encrypted ranging code \f$C_{E6B}\f$ with chip period \f$T_{c,E6}=\frac{1}{5.115}\f$ \f$\mu\f$s, thus
- being a BPSK(5) modulation. Codes \f$C_{E6B}\f$ and primary codes \f$C_{E6Cs}\f$ and their respective lengths, \f$L_{E6B}\f$ and \f$L_{E6C}\f$, have not been published. The secondary codes
- for the pilot component, \f$C_{E6Cs}\f$, are available at the OS SIS ICD.
+ where \f$D_{\text{C/NAV}}\f$ is the C/NAV navigation data stream, which is modulated with the encrypted ranging code \f$C_{E6B}\f$ with chip period \f$T_{c,E6}=\frac{1}{5.115}\f$ \f$\mu\f$s, thus
+ being a BPSK(5) modulation. Codes \f$C_{E6B}\f$ and primary codes \f$C_{E6Cs}\f$ and their respective lengths, \f$L_{E6B}\f$ and \f$L_{E6C}\f$, have not been published. The secondary codes
+ for the pilot component, \f$C_{E6Cs}\f$, are available at the OS SIS ICD.
The receiver reference bandwidth for this signal is \f$40.920\f$ MHz. This band also contains another component, Galileo E6A, intended for PRS.
\li Galileo E5. Centered at \f$f_{\text{Gal E5}}=1191.795\f$ MHz and with a total bandwidth of \f$51.150\f$ MHz, its signal structure deserves some analysis. The AltBOC modulation can be generically expressed as
\f{equation}{\label{AltBOC}
s^{\text{AltBOC}}(t)=x_1(t)v^{*}(t)+x_2(t)v(t)~,
\f}
- where \f$v(t)=\frac{1}{\sqrt{2}}\left( \text{sign}\left( \cos (2 \pi f_s t)\right)+j \text{sign}\left( \sin (2 \pi f_s t)\right)\right)\f$ is the single side-band
- subcarrier, \f$f_s\f$ is the subcarrier frequency, \f$(\cdot)^{*}\f$ stands for the conjugate operation, and \f$x_1(t)\f$ and \f$x_2(t)\f$ are QPSK signals.
- The resulting waveform does not exhibit constant envelope. In case of Galileo, the need for high efficiency of the satellites' onboard High Power Amplifier (HPA) has pushed
- a modification on the signal in order to make it envelope-constant and thus use the HPA at saturation. This can be done by adding some inter-modulation products to the expression
+ where \f$v(t)=\frac{1}{\sqrt{2}}\left( \text{sign}\left( \cos (2 \pi f_s t)\right)+j \text{sign}\left( \sin (2 \pi f_s t)\right)\right)\f$ is the single side-band
+ subcarrier, \f$f_s\f$ is the subcarrier frequency, \f$(\cdot)^{*}\f$ stands for the conjugate operation, and \f$x_1(t)\f$ and \f$x_2(t)\f$ are QPSK signals.
+ The resulting waveform does not exhibit constant envelope. In case of Galileo, the need for high efficiency of the satellites' onboard High Power Amplifier (HPA) has pushed
+ a modification on the signal in order to make it envelope-constant and thus use the HPA at saturation. This can be done by adding some inter-modulation products to the expression
above, coming up with the following definition:
\f{align}{
@@ -260,9 +260,9 @@ receiver. The single subcarrier \f$sc_s(t)\f$ and the product subcarrier \f$sc_p
sc_p(t)=& -\frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t - \frac{\pi}{4}\right) \right)+\\ \nonumber {}&+ \frac{1}{2}\text{sign} \Big( \cos \left( 2 \pi f_s t \right) \Big)+\\
{} &-\frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t + \frac{\pi}{4}\right) \right)~,
\f}
- with a subcarrier frequency of \f$f_s=15.345\f$ MHz, thus defining an AltBOC(15,10) modulation. The QPSK(10) signal \f$e_{E5a}(t)\f$ defined above is shifted
+ with a subcarrier frequency of \f$f_s=15.345\f$ MHz, thus defining an AltBOC(15,10) modulation. The QPSK(10) signal \f$e_{E5a}(t)\f$ defined above is shifted
to \f$f_{\text{Gal E5a}}\doteq f_{\text{Gal E5}}-f_s=1176.450\f$ MHz, while \f$e_{E5b}(t)\f$ is shifted to \f$f_{\text{Gal E5b}}\doteq f_{\text{Gal E5}}+f_s=1207.140\f$ MHz.
- Thus, we can bandpass filter around \f$f_{\text{Gal E5a}}\f$ and get a good approximation of a QPSK(10) signal, with very low energy components of \f$e_{E5b}(t)\f$, \f$ \bar{e}_{E5a}(t)\f$,
+ Thus, we can bandpass filter around \f$f_{\text{Gal E5a}}\f$ and get a good approximation of a QPSK(10) signal, with very low energy components of \f$e_{E5b}(t)\f$, \f$ \bar{e}_{E5a}(t)\f$,
and \f$ \bar{e}_{E5b}(t)\f$:
\f{equation}{
s_{T}^{\text{(Gal E5a)}}(t) \simeq e_{E5aI}(t)+je_{E5aQ}(t).
@@ -273,9 +273,9 @@ The same applies to \f$e_{E5b}(t)\f$, allowing an independent reception of two Q
This text is an except of the following paper:
-\li C. Fernández-Prades, L. Lo Presti, E. Falleti, Satellite Radiolocalization From GPS to GNSS and Beyond: Novel Technologies and Applications for Civil Mass-Market.
+\li C. Fernández-Prades, L. Lo Presti, E. Falleti, Satellite Radiolocalization From GPS to GNSS and Beyond: Novel Technologies and Applications for Civil Mass-Market.
Proceedings of the IEEE. Vol 99, No. 11, pp. 1882-1904. November, 2011. DOI: 10.1109/JPROC.2011.2158032
-
-
-*/
\ No newline at end of file
+
+
+*/
diff --git a/docs/manpage/front-end-cal-manpage b/docs/manpage/front-end-cal-manpage
index 13d639c57..940a4b0ee 100644
--- a/docs/manpage/front-end-cal-manpage
+++ b/docs/manpage/front-end-cal-manpage
@@ -17,9 +17,9 @@ The crystal oscillator that ships with the RTL2832U family devices exhibits limi
\fBfront\-end\-cal\fR takes the following options:
.TP
\fB\-config_file=\fR\fI\fR Set the configuration file.
-.TP
+.TP
\fB\-signal_source=\fR\fI\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file).
-.TP
+.TP
\fB\-log_dir=\fR\fI\fR If defined, overrides the default directory where logs are saved.
.TP
\fB\-version\fR Print program version and exit.
@@ -32,10 +32,10 @@ Example of configuration file available at: ${prefix}/share/gnss\-sdr/conf/front
\.TP
[1] C. Fernandez\-Prades, J. Arribas, P. Closas, \fITurning a Television into a GNSS Receiver\fR, in Proceedings of ION GNSS+, 15\-16 September 2013, Nashville, Tennessee (USA). A draft copy is freely available at http://www.cttc.es/publication/turning\-a\-television\-into\-a\-gnss\-receiver/
\.TP
-Check http://gnss\\-sdr.org for more information.
+Check https://gnss\-sdr.org for more information.
.SH BUGS
No known bugs.
.SH AUTHOR
Javier Arribas (javier.arribas@cttc.es)
\.TP
-This software has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.
\ No newline at end of file
+This software has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.
diff --git a/docs/manpage/gnss-sdr-manpage b/docs/manpage/gnss-sdr-manpage
index 668b6bf3d..90f7d1a8e 100644
--- a/docs/manpage/gnss-sdr-manpage
+++ b/docs/manpage/gnss-sdr-manpage
@@ -1,37 +1,79 @@
.\" Manpage for gnss\-sdr.
.\" Contact carles.fernandez@cttc.es to correct errors or typos.
-.TH gnss\-sdr 1 "05 Feb 2017" "0.0.9" "gnss\-sdr man page"
+.TH gnss\-sdr 1 "12 Dec 2018" "0.0.10" "gnss\-sdr man page"
.SH NAME
\fBgnss\-sdr\fR \- GNSS Software Defined Receiver.
.SH SYNOPSIS
-\fBgnss\-sdr \-config_file=\fR\fI\fR [OPTION]...
+\fBgnss\-sdr \-c=\fR\fI\fR [OPTION]...
.SH DESCRIPTION
-\fBgnss\-sdr\fR is a Global Navigation Satellite Systems Software Defined Receiver written in C++. It implements all the signal processing chain, taking as input raw samples coming from the output of an Analog\-to\-Digital Converter, and processing them up to the computation of the Position\-Velocity\-Time solution, including the generation of code and phase measurements.
+\fBgnss\-sdr\fR is a Global Navigation Satellite Systems Software Defined Receiver written in C++. It implements all the signal processing chain, taking as input raw samples coming from the output of an Analog\-to\-Digital Converter, and processing them up to the computation of the Position\-Velocity\-Time solution, including the generation of code and phase measurements.
\.TP
\fBgnss\-sdr\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front\-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs.
+\.TP
+There is some flexibility in how flags may be specified. The following examples are equivalent:
+\.RS 8
+\.TP
+gnss\-sdr \-c=/home/user/rx.conf
+\.TP
+gnss\-sdr \-\-c=/home/user/rx.conf
+\.TP
+gnss\-sdr \-c /home/user/rx.conf
+\.TP
+gnss\-sdr \-\-c /home/user/rx.conf
+\.RE
.SH OPTIONS
\fBgnss\-sdr\fR takes the following options:
.TP
-\fB\-config_file=\fR\fI\fR Set the configuration file.
-.TP
-\fB\-signal_source=\fR\fI\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file).
-.TP
-\fB\-log_dir=\fR\fI\fR If defined, overrides the default directory where logs are saved.
+\fB\-c=\fR\fI\fR or \fB\-config_file=\fR\fI\fR
+Set the configuration file. This flag is mandatory.
.TP
-\fB\-RINEX_version=\fI\fR Specifies the RINEX version (2.11 or 3.02). Default: "3.02".
+\fB\-s=\fR\fI\fR or \fB\-signal_source=\fR\fI\fR
+If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file).
.TP
-\fB\-version\fR Print program version and exit.
+\fB\-log_dir=\fR\fI\fR
+If defined, overrides the default directory where logs are saved.
.TP
-\fB\-help\fR Print all the available commandline flags and exit.
+\fB\-doppler_max=\fR\fI\fR
+If defined, maximum Doppler value in the search grid, in Hz (overrides the configuration file).
+.TP
+\fB\-doppler_step=\fR\fI\fR
+If defined, sets the frequency step in the search grid, in Hz (overrides the configuration file).
+.TP
+\fB\-cn0_samples=\fR\fI\fR
+Number of correlators outputs (one per integration time) used for CN0 estimation. It defaults to 20 outputs.
+.TP
+\fB\-cn0_min=\fR\fI\fR
+Minimum valid CN0 (in dB-Hz). It defaults to 25 dB-Hz. If set, it overrides the configuration file.
+.TP
+\fB\-max_lock_fail=\fR\fI\fR
+Maximum number of lock failures before dropping a satellite. It defaults to 50 failures. If set, it overrides the configuration file.
+.TP
+\fB\-carrier_lock_th=\fR\fI\fR
+Carrier lock error threshold (in rad). It defaults to 0.85 rad (48.7 degrees). If set, it overrides the configuration file.
+.TP
+\fB\-dll_bw_hz=\fR\fI\fR
+If defined, bandwidth of the DLL low pass filter, in Hz (overrides the configuration file).
+.TP
+\fB\-pll_bw_hz=\fR\fI\fR
+If defined, bandwidth of the PLL low pass filter, in Hz (overrides the configuration file).
+.TP
+\fB\-RINEX_version=\fI\fR
+If defined, specifies the RINEX version (2.11 or 3.02). Default: "3.02". Overrides the configuration file.
+.TP
+\fB\-version\fR
+Print program version and exit.
+.TP
+\fB\-help\fR
+Print all the available commandline flags and exit.
.SH SEE ALSO
.BR volk_gnsssdr_profile (1)
\.TP
Examples of configuration files available at: ${prefix}/share/gnss\-sdr/conf, where ${prefix} uses to be /usr or /usr/local.
\.TP
-Check http://gnss\-sdr.org for more information.
+Check https://gnss\-sdr.org for more information.
.SH BUGS
Please report bugs at https://github.com/gnss-sdr/gnss-sdr/issues
.SH AUTHOR
Carles Fernandez\-Prades (carles.fernandez@cttc.es)
\.TP
-This software package has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.
\ No newline at end of file
+This software package has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.
diff --git a/docs/xml-schemas/README.md b/docs/xml-schemas/README.md
new file mode 100644
index 000000000..007d520c0
--- /dev/null
+++ b/docs/xml-schemas/README.md
@@ -0,0 +1,35 @@
+# XML Schemas for Assisted GNSS-SDR
+
+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.
+
+
+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 parameters.
+ - [utc_model.xsd](./utc_model.xsd) - GPS NAV message UTC model parameters.
+ - [gps_almanac_map.xsd](./gps_almanac_map.xsd) - GPS NAV message almanac.
+
+
+GPS L2C and L5
+--------------
+
+ - [cnav_ephemeris_map.xsd](./cnav_ephemeris_map.xsd) - GPS CNAV message ephemeris parameters.
+
+
+Galileo
+-------
+
+ - [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_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.
+
+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.
diff --git a/docs/xml-schemas/cnav_ephemeris_map.xsd b/docs/xml-schemas/cnav_ephemeris_map.xsd
new file mode 100644
index 000000000..2ada62f13
--- /dev/null
+++ b/docs/xml-schemas/cnav_ephemeris_map.xsd
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/ephemeris_map.xsd b/docs/xml-schemas/ephemeris_map.xsd
new file mode 100644
index 000000000..4290bbed5
--- /dev/null
+++ b/docs/xml-schemas/ephemeris_map.xsd
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/gal_almanac_map.xsd b/docs/xml-schemas/gal_almanac_map.xsd
new file mode 100644
index 000000000..8512bfc64
--- /dev/null
+++ b/docs/xml-schemas/gal_almanac_map.xsd
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/gal_ephemeris_map.xsd b/docs/xml-schemas/gal_ephemeris_map.xsd
new file mode 100644
index 000000000..fe307412e
--- /dev/null
+++ b/docs/xml-schemas/gal_ephemeris_map.xsd
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/gal_iono_model.xsd b/docs/xml-schemas/gal_iono_model.xsd
new file mode 100644
index 000000000..69b22aad4
--- /dev/null
+++ b/docs/xml-schemas/gal_iono_model.xsd
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/gal_utc_model.xsd b/docs/xml-schemas/gal_utc_model.xsd
new file mode 100644
index 000000000..3cc38107c
--- /dev/null
+++ b/docs/xml-schemas/gal_utc_model.xsd
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/gps_almanac_map.xsd b/docs/xml-schemas/gps_almanac_map.xsd
new file mode 100644
index 000000000..86b9d2a2d
--- /dev/null
+++ b/docs/xml-schemas/gps_almanac_map.xsd
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/iono_model.xsd b/docs/xml-schemas/iono_model.xsd
new file mode 100644
index 000000000..26cda74bd
--- /dev/null
+++ b/docs/xml-schemas/iono_model.xsd
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml-schemas/utc_model.xsd b/docs/xml-schemas/utc_model.xsd
new file mode 100644
index 000000000..c02015ead
--- /dev/null
+++ b/docs/xml-schemas/utc_model.xsd
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fbce5e499..83c519fd5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
add_subdirectory(algorithms)
@@ -21,5 +21,5 @@ add_subdirectory(core)
add_subdirectory(main)
if(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING)
add_subdirectory(tests)
-endif(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING)
+endif()
add_subdirectory(utils)
diff --git a/src/algorithms/CMakeLists.txt b/src/algorithms/CMakeLists.txt
index d6f0521dc..2b10446e8 100644
--- a/src/algorithms/CMakeLists.txt
+++ b/src/algorithms/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2012-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
add_subdirectory(acquisition)
diff --git a/src/algorithms/PVT/CMakeLists.txt b/src/algorithms/PVT/CMakeLists.txt
index 763852ca2..96259341c 100644
--- a/src/algorithms/PVT/CMakeLists.txt
+++ b/src/algorithms/PVT/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2012-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,7 +13,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
add_subdirectory(adapters)
diff --git a/src/algorithms/PVT/adapters/CMakeLists.txt b/src/algorithms/PVT/adapters/CMakeLists.txt
index 3a7e524dd..d8c055506 100644
--- a/src/algorithms/PVT/adapters/CMakeLists.txt
+++ b/src/algorithms/PVT/adapters/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2012-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,31 +13,44 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
-set(PVT_ADAPTER_SOURCES
- gps_l1_ca_pvt.cc
- galileo_e1_pvt.cc
- hybrid_pvt.cc
+
+if(Boost_VERSION LESS 105800)
+ add_definitions(-DOLD_BOOST=1)
+endif()
+
+set(PVT_ADAPTER_SOURCES
+ rtklib_pvt.cc
+)
+
+set(PVT_ADAPTER_HEADERS
+ rtklib_pvt.h
)
include_directories(
- $(CMAKE_CURRENT_SOURCE_DIR)
- ${CMAKE_SOURCE_DIR}/src/core/system_parameters
- ${CMAKE_SOURCE_DIR}/src/core/interfaces
- ${CMAKE_SOURCE_DIR}/src/core/receiver
- ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/gnuradio_blocks
- ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
- ${ARMADILLO_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
- ${GLOG_INCLUDE_DIRS}
- ${GFlags_INCLUDE_DIRS}
- ${GNURADIO_RUNTIME_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/src/core/system_parameters
+ ${CMAKE_SOURCE_DIR}/src/core/interfaces
+ ${CMAKE_SOURCE_DIR}/src/core/receiver
+ ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/gnuradio_blocks
+ ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
+ ${CMAKE_SOURCE_DIR}/src/algorithms/libs/rtklib
+ ${CMAKE_SOURCE_DIR}/src/algorithms/libs
+ ${ARMADILLO_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${GLOG_INCLUDE_DIRS}
+ ${GFlags_INCLUDE_DIRS}
+ ${GNURADIO_RUNTIME_INCLUDE_DIRS}
)
-file(GLOB PVT_ADAPTER_HEADERS "*.h")
-list(SORT PVT_ADAPTER_HEADERS)
add_library(pvt_adapters ${PVT_ADAPTER_SOURCES} ${PVT_ADAPTER_HEADERS})
+
source_group(Headers FILES ${PVT_ADAPTER_HEADERS})
-target_link_libraries(pvt_adapters pvt_gr_blocks ${ARMADILLO_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES})
+
+target_link_libraries(pvt_adapters
+ pvt_gr_blocks
+ ${ARMADILLO_LIBRARIES}
+ ${GNURADIO_RUNTIME_LIBRARIES}
+)
diff --git a/src/algorithms/PVT/adapters/galileo_e1_pvt.cc b/src/algorithms/PVT/adapters/galileo_e1_pvt.cc
deleted file mode 100644
index e2c75df27..000000000
--- a/src/algorithms/PVT/adapters/galileo_e1_pvt.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-/*!
- * \file galileo_e1_pvt.cc
- * \brief Implementation of an adapter of a GALILEO E1 PVT solver block to a
- * PvtInterface
- * \author Javier Arribas, 2011. jarribas(at)cttc.es
- *
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- * Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see .
- *
- * -------------------------------------------------------------------------
- */
-
-
-#include "galileo_e1_pvt.h"
-#include
-#include
-#include "configuration_interface.h"
-
-
-using google::LogMessage;
-
-GalileoE1Pvt::GalileoE1Pvt(ConfigurationInterface* configuration,
- std::string role,
- unsigned int in_streams,
- unsigned int out_streams) :
- role_(role),
- in_streams_(in_streams),
- out_streams_(out_streams)
-{
- // dump parameters
- std::string default_dump_filename = "./pvt.dat";
- std::string default_nmea_dump_filename = "./nmea_pvt.nmea";
- std::string default_nmea_dump_devname = "/dev/tty1";
- std::string default_rtcm_dump_devname = "/dev/pts/1";
- DLOG(INFO) << "role " << role;
-
- dump_ = configuration->property(role + ".dump", false);
- dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
-
- // moving average depth parameters
- int averaging_depth = configuration->property(role + ".averaging_depth", 10);
- bool flag_averaging = configuration->property(role + ".flag_averaging", false);
-
- // output rate
- int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
-
- // display rate
- int display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
-
- // NMEA Printer settings
- bool flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
- std::string nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
- std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
-
- // RTCM Printer settings
- bool flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
- std::string rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
- bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
- unsigned short rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101);
- unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
- // RTCM message rates: least common multiple with output_rate_ms
- int rtcm_MT1045_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms);
- int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
- std::map rtcm_msg_rate_ms;
- rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
- for (int k = 1091; k < 1098; k++) // All Galileo MSM
- {
- rtcm_msg_rate_ms[k] = rtcm_MSM_rate_ms;
- }
-
- // make PVT object
- pvt_ = galileo_e1_make_pvt_cc(in_streams_,
- dump_,
- dump_filename_,
- averaging_depth,
- flag_averaging,
- output_rate_ms,
- display_rate_ms,
- flag_nmea_tty_port,
- nmea_dump_filename,
- nmea_dump_devname,
- flag_rtcm_server,
- flag_rtcm_tty_port,
- rtcm_tcp_port,
- rtcm_station_id,
- rtcm_msg_rate_ms,
- rtcm_dump_devname);
-
- DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
-}
-
-
-GalileoE1Pvt::~GalileoE1Pvt()
-{}
-
-
-void GalileoE1Pvt::connect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to connect internally
- DLOG(INFO) << "nothing to connect internally";
-}
-
-
-void GalileoE1Pvt::disconnect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to disconnect
-}
-
-gr::basic_block_sptr GalileoE1Pvt::get_left_block()
-{
- return pvt_;
-}
-
-
-gr::basic_block_sptr GalileoE1Pvt::get_right_block()
-{
- return pvt_;
-}
-
diff --git a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc b/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc
deleted file mode 100644
index ba244b5ae..000000000
--- a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc
+++ /dev/null
@@ -1,250 +0,0 @@
-/*!
- * \file gps_l1_ca_pvt.cc
- * \brief Implementation of an adapter of a GPS L1 C/A PVT solver block to a
- * PvtInterface
- * \author Javier Arribas, 2011. jarribas(at)cttc.es
- *
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- * Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see .
- *
- * -------------------------------------------------------------------------
- */
-
-
-#include "gps_l1_ca_pvt.h"
-#include
-#include
-#include
-#include
-#include
-#include "configuration_interface.h"
-
-using google::LogMessage;
-
-GpsL1CaPvt::GpsL1CaPvt(ConfigurationInterface* configuration,
- std::string role,
- unsigned int in_streams,
- unsigned int out_streams) :
- role_(role),
- in_streams_(in_streams),
- out_streams_(out_streams)
-{
- // dump parameters
- std::string default_dump_filename = "./pvt.dat";
- std::string default_nmea_dump_filename = "./nmea_pvt.nmea";
- std::string default_nmea_dump_devname = "/dev/tty1";
- std::string default_rtcm_dump_devname = "/dev/pts/1";
- DLOG(INFO) << "role " << role;
- dump_ = configuration->property(role + ".dump", false);
- dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
- // moving average depth parameters
- int averaging_depth = configuration->property(role + ".averaging_depth", 10);
- bool flag_averaging = configuration->property(role + ".flag_averaging", false);
-
- // output rate
- int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
-
- // display rate
- int display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
-
- // NMEA Printer settings
- bool flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
- std::string nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
- std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
-
- // RTCM Printer settings
- bool flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
- std::string rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
- bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
- unsigned short rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101);
- unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
- // RTCM message rates: least common multiple with output_rate_ms
- int rtcm_MT1019_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), output_rate_ms);
- int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
- std::map rtcm_msg_rate_ms;
- rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms;
- for (int k = 1071; k < 1078; k++) // All GPS MSM
- {
- rtcm_msg_rate_ms[k] = rtcm_MSM_rate_ms;
- }
-
- // getting names from the config file, if available
- // default filename for assistance data
- const std::string eph_default_xml_filename = "./gps_ephemeris.xml";
- eph_xml_filename_= configuration->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
-
- //const std::string utc_default_xml_filename = "./gps_utc_model.xml";
- //const std::string iono_default_xml_filename = "./gps_iono.xml";
- //const std::string ref_time_default_xml_filename = "./gps_ref_time.xml";
- //const std::string ref_location_default_xml_filename = "./gps_ref_location.xml";
-
- //std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
- //std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
- //std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
- //std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
-
- // RINEX version
- int conf_rinex_version;
- conf_rinex_version = configuration->property(role + ".rinex_version", 0);
-
- // make PVT object
- pvt_ = gps_l1_ca_make_pvt_cc(in_streams_,
- dump_,
- dump_filename_,
- averaging_depth,
- flag_averaging,
- output_rate_ms,
- display_rate_ms,
- flag_nmea_tty_port,
- nmea_dump_filename,
- nmea_dump_devname,
- flag_rtcm_server,
- flag_rtcm_tty_port,
- rtcm_tcp_port,
- rtcm_station_id,
- rtcm_msg_rate_ms,
- rtcm_dump_devname,
- conf_rinex_version );
-
- DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
-}
-
-
-bool GpsL1CaPvt::save_assistance_to_XML()
-{
- // return variable (true == succeeded)
- bool ret = false;
-
- LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename_;
- std::map eph_map = pvt_->get_GPS_L1_ephemeris_map();
-
- if (eph_map.size() > 0)
- {
- try
- {
- std::ofstream ofs(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out);
- boost::archive::xml_oarchive xml(ofs);
- xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
- ofs.close();
- LOG(INFO) << "Saved GPS L1 Ephemeris map data";
- }
- catch (std::exception& e)
- {
- LOG(WARNING) << e.what();
- return false;
- }
- return true;
- }
- else
- {
- LOG(WARNING) << "Failed to save Ephemeris, map is empty";
- return false;
- }
- // Only try to save {utc, iono, ref time, ref location} if SUPL is enabled
- // bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
- // if (enable_gps_supl_assistance == true)
- // {
- // // try to save utc model xml file
- // std::map utc_copy = global_gps_utc_model_map.get_map_copy();
- // if (supl_client_acquisition_.save_utc_map_xml(utc_xml_filename, utc_copy) == true)
- // {
- // LOG(INFO) << "SUPL: Successfully saved UTC Model XML file";
- // //ret = true;
- // }
- // else
- // {
- // LOG(INFO) << "SUPL: Error while trying to save utc XML file";
- // //ret = false;
- // }
- // // try to save iono model xml file
- // std::map iono_copy = global_gps_iono_map.get_map_copy();
- // if (supl_client_acquisition_.save_iono_map_xml(iono_xml_filename, iono_copy) == true)
- // {
- // LOG(INFO) << "SUPL: Successfully saved IONO Model XML file";
- // //ret = true;
- // }
- // else
- // {
- // LOG(INFO) << "SUPL: Error while trying to save iono XML file";
- // //ret = false;
- // }
- // // try to save ref time xml file
- // std::map ref_time_copy = global_gps_ref_time_map.get_map_copy();
- // if (supl_client_acquisition_.save_ref_time_map_xml(ref_time_xml_filename, ref_time_copy) == true)
- // {
- // LOG(INFO) << "SUPL: Successfully saved Ref Time XML file";
- // //ret = true;
- // }
- // else
- // {
- // LOG(INFO) << "SUPL: Error while trying to save ref time XML file";
- // //ref = false;
- // }
- // // try to save ref location xml file
- // std::map ref_location_copy = global_gps_ref_location_map.get_map_copy();
- // if (supl_client_acquisition_.save_ref_location_map_xml(ref_location_xml_filename, ref_location_copy) == true)
- // {
- // LOG(INFO) << "SUPL: Successfully saved Ref Location XML file";
- // //ref = true;
- // }
- // else
- // {
- // LOG(INFO) << "SUPL: Error while trying to save ref location XML file";
- // //ret = false;
- // }
- // }
- return ret;
-}
-
-
-GpsL1CaPvt::~GpsL1CaPvt()
-{
- save_assistance_to_XML();
-}
-
-
-void GpsL1CaPvt::connect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to connect internally
- DLOG(INFO) << "nothing to connect internally";
-}
-
-
-void GpsL1CaPvt::disconnect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to disconnect
-}
-
-
-gr::basic_block_sptr GpsL1CaPvt::get_left_block()
-{
- return pvt_;
-}
-
-
-gr::basic_block_sptr GpsL1CaPvt::get_right_block()
-{
- return pvt_;
-}
diff --git a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.h b/src/algorithms/PVT/adapters/gps_l1_ca_pvt.h
deleted file mode 100644
index 4787f94bd..000000000
--- a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*!
- * \file gps_l1_ca_pvt.h
- * \brief Interface of an adapter of a GPS L1 C/A PVT solver block to a
- * PvtInterface
- * Position Velocity and Time
- * \author Javier Arribas, 2011. jarribas(at)cttc.es
- *
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- * Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see .
- *
- * -------------------------------------------------------------------------
- */
-
-
-
-#ifndef GNSS_SDR_GPS_L1_CA_PVT_H_
-#define GNSS_SDR_GPS_L1_CA_PVT_H_
-
-#include
-#include "pvt_interface.h"
-#include "gps_l1_ca_pvt_cc.h"
-
-
-class ConfigurationInterface;
-
-/*!
- * \brief This class implements a PvtInterface for GPS L1 C/A
- */
-class GpsL1CaPvt : public PvtInterface
-{
-public:
- GpsL1CaPvt(ConfigurationInterface* configuration,
- std::string role,
- unsigned int in_streams,
- unsigned int out_streams);
-
- virtual ~GpsL1CaPvt();
-
- std::string role()
- {
- return role_;
- }
-
- //! Returns "GPS_L1_CA_PVT"
- std::string implementation()
- {
- return "GPS_L1_CA_PVT";
- }
-
- void connect(gr::top_block_sptr top_block);
- void disconnect(gr::top_block_sptr top_block);
- gr::basic_block_sptr get_left_block();
- gr::basic_block_sptr get_right_block();
-
- void reset()
- {
- return;
- }
-
- //! All blocks must have an item_size() function implementation. Returns sizeof(gr_complex)
- size_t item_size()
- {
- return sizeof(gr_complex);
- }
-
-private:
- gps_l1_ca_pvt_cc_sptr pvt_;
- bool dump_;
- std::string dump_filename_;
- std::string role_;
- unsigned int in_streams_;
- unsigned int out_streams_;
-
- std::string eph_xml_filename_;
- bool save_assistance_to_XML();
-};
-
-#endif
diff --git a/src/algorithms/PVT/adapters/hybrid_pvt.cc b/src/algorithms/PVT/adapters/hybrid_pvt.cc
deleted file mode 100644
index 98b7a3836..000000000
--- a/src/algorithms/PVT/adapters/hybrid_pvt.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-/*!
- * \file hybrid_pvt.cc
- * \brief Implementation of an adapter of a GALILEO E1 PVT solver block to a
- * PvtInterface
- * \author Javier Arribas, 2011. jarribas(at)cttc.es
- *
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- * Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see .
- *
- * -------------------------------------------------------------------------
- */
-
-
-#include "hybrid_pvt.h"
-#include
-#include
-#include
-#include
-#include
-#include "configuration_interface.h"
-
-
-using google::LogMessage;
-
-HybridPvt::HybridPvt(ConfigurationInterface* configuration,
- std::string role,
- unsigned int in_streams,
- unsigned int out_streams) :
- role_(role),
- in_streams_(in_streams),
- out_streams_(out_streams)
-{
- // dump parameters
- std::string default_dump_filename = "./pvt.dat";
- std::string default_nmea_dump_filename = "./nmea_pvt.nmea";
- std::string default_nmea_dump_devname = "/dev/tty1";
- std::string default_rtcm_dump_devname = "/dev/pts/1";
- DLOG(INFO) << "role " << role;
- dump_ = configuration->property(role + ".dump", false);
- dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
-
- // moving average depth parameters
- int averaging_depth = configuration->property(role + ".averaging_depth", 10);
- bool flag_averaging = configuration->property(role + ".flag_averaging", false);
-
- // output rate
- int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
-
- // display rate
- int display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
-
- // NMEA Printer settings
- bool flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
- std::string nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
- std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
-
- // RTCM Printer settings
- bool flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
- std::string rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
- bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
- unsigned short rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101);
- unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
- // RTCM message rates: least common multiple with output_rate_ms
- int rtcm_MT1019_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), output_rate_ms);
- int rtcm_MT1045_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms);
- int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
- int rtcm_MT1077_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
- int rtcm_MT1097_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
- std::map rtcm_msg_rate_ms;
- rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms;
- rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
- for (int k = 1071; k < 1078; k++) // All GPS MSM
- {
- rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms;
- }
- for (int k = 1091; k < 1098; k++) // All Galileo MSM
- {
- rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms;
- }
- // getting names from the config file, if available
- // default filename for assistance data
- const std::string eph_default_xml_filename = "./gps_ephemeris.xml";
- const std::string utc_default_xml_filename = "./gps_utc_model.xml";
- const std::string iono_default_xml_filename = "./gps_iono.xml";
- const std::string ref_time_default_xml_filename = "./gps_ref_time.xml";
- const std::string ref_location_default_xml_filename = "./gps_ref_location.xml";
- eph_xml_filename_ = configuration->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
- //std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
- //std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
- //std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
- //std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
-
- // Infer the type of receiver
- /*
- * TYPE | RECEIVER
- * 0 | Unknown
- * 1 | GPS L1 C/A
- * 2 | GPS L2C
- * 3 | GPS L5
- * 4 | Galileo E1B
- * 5 | Galileo E5a
- * 6 | Galileo E5b
- * 7 | GPS L1 C/A + GPS L2C
- * 8 | GPS L1 C/A + GPS L5
- * 9 | GPS L1 C/A + Galileo E1B
- * 10 | GPS L1 C/A + Galileo E5a
- * 11 | GPS L1 C/A + Galileo E5b
- * 12 | Galileo E1B + GPS L2C
- * 13 | Galileo E1B + GPS L5
- * 14 | Galileo E1B + Galileo E5a
- * 15 | Galileo E1B + Galileo E5b
- * 16 | GPS L2C + GPS L5
- * 17 | GPS L2C + Galileo E5a
- * 18 | GPS L2C + Galileo E5b
- * 19 | GPS L5 + Galileo E5a
- * 20 | GPS L5 + Galileo E5b
- * 21 | GPS L1 C/A + Galileo E1B + GPS L2C
- * 22 | GPS L1 C/A + Galileo E1B + GPS L5
- */
- int gps_1C_count = configuration->property("Channels_1C.count", 0);
- int gps_2S_count = configuration->property("Channels_2S.count", 0);
- int gal_1B_count = configuration->property("Channels_1B.count", 0);
- int gal_E5a_count = configuration->property("Channels_5X.count", 0); // GPS L5 or Galileo E5a ?
- int gal_E5b_count = configuration->property("Channels_7X.count", 0);
-
- unsigned int type_of_receiver = 0;
- if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 1;
- if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 2;
-
- if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 4;
- if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 5;
- if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 6;
-
- if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 7;
- //if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 8;
- if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 9;
- if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 10;
- if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 11;
- if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 12;
- //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 13;
- if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 14;
- if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 15;
- //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 16;
- if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 17;
- if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 18;
- //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 19;
- //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 20;
- if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 21;
- //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) type_of_receiver = 22;
-
- // make PVT object
- pvt_ = hybrid_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, rtcm_dump_devname, type_of_receiver);
- DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
-}
-
-
-bool HybridPvt::save_assistance_to_XML()
-{
- LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename_;
- std::map eph_map = pvt_->get_GPS_L1_ephemeris_map();
-
- if (eph_map.size() > 0)
- {
- try
- {
- std::ofstream ofs(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out);
- boost::archive::xml_oarchive xml(ofs);
- xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
- ofs.close();
- LOG(INFO) << "Saved GPS L1 Ephemeris map data";
- }
- catch (std::exception& e)
- {
- LOG(WARNING) << e.what();
- return false;
- }
- return true; // return variable (true == succeeded)
- }
- else
- {
- LOG(WARNING) << "Failed to save Ephemeris, map is empty";
- return false;
- }
-}
-
-
-HybridPvt::~HybridPvt()
-{
- save_assistance_to_XML();
-}
-
-
-void HybridPvt::connect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to connect internally
- DLOG(INFO) << "nothing to connect internally";
-}
-
-
-void HybridPvt::disconnect(gr::top_block_sptr top_block)
-{
- if(top_block) { /* top_block is not null */};
- // Nothing to disconnect
-}
-
-
-gr::basic_block_sptr HybridPvt::get_left_block()
-{
- return pvt_;
-}
-
-
-gr::basic_block_sptr HybridPvt::get_right_block()
-{
- return pvt_; // this is a sink, nothing downstream
-}
diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.cc b/src/algorithms/PVT/adapters/rtklib_pvt.cc
new file mode 100644
index 000000000..cd9ecbd26
--- /dev/null
+++ b/src/algorithms/PVT/adapters/rtklib_pvt.cc
@@ -0,0 +1,595 @@
+/*!
+ * \file rtklib_pvt.cc
+ * \brief Interface of a Position Velocity and Time computation block
+ * \author Javier Arribas, 2017. jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ * Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see .
+ *
+ * -------------------------------------------------------------------------
+ */
+
+
+#include "rtklib_pvt.h"
+#include "configuration_interface.h"
+#include "gnss_sdr_flags.h"
+#include "pvt_conf.h"
+#include
+#include
+#include
+#include
+#if OLD_BOOST
+#include
+namespace bc = boost::math;
+#else
+#include
+namespace bc = boost::integer;
+#endif
+
+
+using google::LogMessage;
+
+
+RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
+ const std::string& role,
+ unsigned int in_streams,
+ unsigned int out_streams) : role_(std::move(role)),
+ in_streams_(in_streams),
+ out_streams_(out_streams)
+{
+ Pvt_Conf pvt_output_parameters = Pvt_Conf();
+ // dump parameters
+ std::string default_dump_filename = "./pvt.dat";
+ std::string default_nmea_dump_filename = "./nmea_pvt.nmea";
+ std::string default_nmea_dump_devname = "/dev/tty1";
+ std::string default_rtcm_dump_devname = "/dev/pts/1";
+ DLOG(INFO) << "role " << role;
+ pvt_output_parameters.dump = configuration->property(role + ".dump", false);
+ pvt_output_parameters.dump_filename = configuration->property(role + ".dump_filename", default_dump_filename);
+ pvt_output_parameters.dump_mat = configuration->property(role + ".dump_mat", true);
+
+ // output rate
+ pvt_output_parameters.output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
+
+ // display rate
+ pvt_output_parameters.display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
+
+ // NMEA Printer settings
+ pvt_output_parameters.flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
+ pvt_output_parameters.nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
+ std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
+
+ // RINEX version
+ pvt_output_parameters.rinex_version = configuration->property(role + ".rinex_version", 3);
+ if (FLAGS_RINEX_version == "3.01")
+ {
+ pvt_output_parameters.rinex_version = 3;
+ }
+ else if (FLAGS_RINEX_version == "3.02")
+ {
+ pvt_output_parameters.rinex_version = 3;
+ }
+ else if (FLAGS_RINEX_version == "3")
+ {
+ pvt_output_parameters.rinex_version = 3;
+ }
+ else if (FLAGS_RINEX_version == "2.11")
+ {
+ pvt_output_parameters.rinex_version = 2;
+ }
+ else if (FLAGS_RINEX_version == "2.10")
+ {
+ pvt_output_parameters.rinex_version = 2;
+ }
+ else if (FLAGS_RINEX_version == "2")
+ {
+ pvt_output_parameters.rinex_version = 2;
+ }
+ pvt_output_parameters.rinexobs_rate_ms = bc::lcm(configuration->property(role + ".rinexobs_rate_ms", 1000), pvt_output_parameters.output_rate_ms);
+ pvt_output_parameters.rinexnav_rate_ms = bc::lcm(configuration->property(role + ".rinexnav_rate_ms", 6000), pvt_output_parameters.output_rate_ms);
+
+ // RTCM Printer settings
+ pvt_output_parameters.flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
+ pvt_output_parameters.rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
+ pvt_output_parameters.flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
+ pvt_output_parameters.rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101);
+ pvt_output_parameters.rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
+ // RTCM message rates: least common multiple with output_rate_ms
+ int rtcm_MT1019_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), pvt_output_parameters.output_rate_ms);
+ int rtcm_MT1020_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1020_rate_ms", 5000), pvt_output_parameters.output_rate_ms);
+ int rtcm_MT1045_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), pvt_output_parameters.output_rate_ms);
+ int rtcm_MSM_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), pvt_output_parameters.output_rate_ms);
+ int rtcm_MT1077_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms);
+ int rtcm_MT1087_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1087_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms);
+ int rtcm_MT1097_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms);
+ //std::map rtcm_msg_rate_ms;
+ pvt_output_parameters.rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms;
+ pvt_output_parameters.rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms;
+ pvt_output_parameters.rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
+ for (int k = 1071; k < 1078; k++) // All GPS MSM
+ {
+ pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms;
+ }
+ for (int k = 1081; k < 1088; k++) // All GLONASS MSM
+ {
+ pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1087_rate_ms;
+ }
+ for (int k = 1091; k < 1098; k++) // All Galileo MSM
+ {
+ pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms;
+ }
+
+ // Infer the type of receiver
+ /*
+ * TYPE | RECEIVER
+ * 0 | Unknown
+ * 1 | GPS L1 C/A
+ * 2 | GPS L2C
+ * 3 | GPS L5
+ * 4 | Galileo E1B
+ * 5 | Galileo E5a
+ * 6 | Galileo E5b
+ * 7 | GPS L1 C/A + GPS L2C
+ * 8 | GPS L1 C/A + GPS L5
+ * 9 | GPS L1 C/A + Galileo E1B
+ * 10 | GPS L1 C/A + Galileo E5a
+ * 11 | GPS L1 C/A + Galileo E5b
+ * 12 | Galileo E1B + GPS L2C
+ * 13 | Galileo E1B + GPS L5
+ * 14 | Galileo E1B + Galileo E5a
+ * 15 | Galileo E1B + Galileo E5b
+ * 16 | GPS L2C + GPS L5
+ * 17 | GPS L2C + Galileo E5a
+ * 18 | GPS L2C + Galileo E5b
+ * 19 | GPS L5 + Galileo E5a
+ * 20 | GPS L5 + Galileo E5b
+ * 21 | GPS L1 C/A + Galileo E1B + GPS L2C
+ * 22 | GPS L1 C/A + Galileo E1B + GPS L5
+ * 23 | GLONASS L1 C/A
+ * 24 | GLONASS L2 C/A
+ * 25 | GLONASS L1 C/A + GLONASS L2 C/A
+ * 26 | GPS L1 C/A + GLONASS L1 C/A
+ * 27 | Galileo E1B + GLONASS L1 C/A
+ * 28 | GPS L2C + GLONASS L1 C/A
+ */
+ int gps_1C_count = configuration->property("Channels_1C.count", 0);
+ int gps_2S_count = configuration->property("Channels_2S.count", 0);
+ int gps_L5_count = configuration->property("Channels_L5.count", 0);
+ int gal_1B_count = configuration->property("Channels_1B.count", 0);
+ int gal_E5a_count = configuration->property("Channels_5X.count", 0);
+ int gal_E5b_count = configuration->property("Channels_7X.count", 0);
+ int glo_1G_count = configuration->property("Channels_1G.count", 0);
+ int glo_2G_count = configuration->property("Channels_2G.count", 0);
+
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 1; // L1
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 2;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 3; // L5
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 4; // E1
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 5; // E5a
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 6;
+
+ if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 7;
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 8; // L1+L5
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 9; // L1+E1
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 10;
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 11;
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 12;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 13; // L5+E5a
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 14;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 15;
+ //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 16;
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 17;
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 18;
+ //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 19;
+ //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 20;
+ if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 21;
+ //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) pvt_output_parameters.type_of_receiver = 22;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) pvt_output_parameters.type_of_receiver = 23;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 24;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 25;
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 26;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 27;
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 28;
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 29;
+ if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 30;
+ if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 31;
+
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 32; // L1+E1+L5+E5a
+ if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 33; // L1+E1+E5a
+
+ // RTKLIB PVT solver options
+ // Settings 1
+ int positioning_mode = -1;
+ std::string default_pos_mode("Single");
+ std::string positioning_mode_str = configuration->property(role + ".positioning_mode", default_pos_mode); // (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h
+ if (positioning_mode_str == "Single") positioning_mode = PMODE_SINGLE;
+ if (positioning_mode_str == "Static") positioning_mode = PMODE_STATIC;
+ if (positioning_mode_str == "Kinematic") positioning_mode = PMODE_KINEMA;
+ if (positioning_mode_str == "PPP_Static") positioning_mode = PMODE_PPP_STATIC;
+ if (positioning_mode_str == "PPP_Kinematic") positioning_mode = PMODE_PPP_KINEMA;
+
+ if (positioning_mode == -1)
+ {
+ //warn user and set the default
+ std::cout << "WARNING: Bad specification of positioning mode." << std::endl;
+ std::cout << "positioning_mode possible values: Single / Static / Kinematic / PPP_Static / PPP_Kinematic" << std::endl;
+ std::cout << "positioning_mode specified value: " << positioning_mode_str << std::endl;
+ std::cout << "Setting positioning_mode to Single" << std::endl;
+ positioning_mode = PMODE_SINGLE;
+ }
+
+ int num_bands = 0;
+
+ if ((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) num_bands = 1;
+ if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gps_2S_count > 0) || (glo_2G_count > 0))) num_bands = 2;
+ if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 2;
+ if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gps_2S_count > 0) || (glo_2G_count > 0)) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 3;
+
+ int number_of_frequencies = configuration->property(role + ".num_bands", num_bands); /* (1:L1, 2:L1+L2, 3:L1+L2+L5) */
+ if ((number_of_frequencies < 1) || (number_of_frequencies > 3))
+ {
+ //warn user and set the default
+ number_of_frequencies = num_bands;
+ }
+
+ double elevation_mask = configuration->property(role + ".elevation_mask", 15.0);
+ if ((elevation_mask < 0.0) || (elevation_mask > 90.0))
+ {
+ //warn user and set the default
+ LOG(WARNING) << "Erroneous Elevation Mask. Setting to default value of 15.0 degrees";
+ elevation_mask = 15.0;
+ }
+
+ int dynamics_model = configuration->property(role + ".dynamics_model", 0); /* dynamics model (0:none, 1:velocity, 2:accel) */
+ if ((dynamics_model < 0) || (dynamics_model > 2))
+ {
+ //warn user and set the default
+ LOG(WARNING) << "Erroneous Dynamics Model configuration. Setting to default value of (0:none)";
+ dynamics_model = 0;
+ }
+
+ std::string default_iono_model("OFF");
+ std::string iono_model_str = configuration->property(role + ".iono_model", default_iono_model); /* (IONOOPT_XXX) see src/algorithms/libs/rtklib/rtklib.h */
+ int iono_model = -1;
+ if (iono_model_str == "OFF") iono_model = IONOOPT_OFF;
+ if (iono_model_str == "Broadcast") iono_model = IONOOPT_BRDC;
+ if (iono_model_str == "SBAS") iono_model = IONOOPT_SBAS;
+ if (iono_model_str == "Iono-Free-LC") iono_model = IONOOPT_IFLC;
+ if (iono_model_str == "Estimate_STEC") iono_model = IONOOPT_EST;
+ if (iono_model_str == "IONEX") iono_model = IONOOPT_TEC;
+ if (iono_model == -1)
+ {
+ //warn user and set the default
+ std::cout << "WARNING: Bad specification of ionospheric model." << std::endl;
+ std::cout << "iono_model possible values: OFF / Broadcast / SBAS / Iono-Free-LC / Estimate_STEC / IONEX" << std::endl;
+ std::cout << "iono_model specified value: " << iono_model_str << std::endl;
+ std::cout << "Setting iono_model to OFF" << std::endl;
+ iono_model = IONOOPT_OFF; /* 0: ionosphere option: correction off */
+ }
+
+ std::string default_trop_model("OFF");
+ int trop_model = -1;
+ std::string trop_model_str = configuration->property(role + ".trop_model", default_trop_model); /* (TROPOPT_XXX) see src/algorithms/libs/rtklib/rtklib.h */
+ if (trop_model_str == "OFF") trop_model = TROPOPT_OFF;
+ if (trop_model_str == "Saastamoinen") trop_model = TROPOPT_SAAS;
+ if (trop_model_str == "SBAS") trop_model = TROPOPT_SBAS;
+ if (trop_model_str == "Estimate_ZTD") trop_model = TROPOPT_EST;
+ if (trop_model_str == "Estimate_ZTD_Grad") trop_model = TROPOPT_ESTG;
+ if (trop_model == -1)
+ {
+ //warn user and set the default
+ std::cout << "WARNING: Bad specification of tropospheric model." << std::endl;
+ std::cout << "trop_model possible values: OFF / Saastamoinen / SBAS / Estimate_ZTD / Estimate_ZTD_Grad" << std::endl;
+ std::cout << "trop_model specified value: " << trop_model_str << std::endl;
+ std::cout << "Setting trop_model to OFF" << std::endl;
+ trop_model = TROPOPT_OFF;
+ }
+
+ /* RTKLIB positioning options */
+ int sat_PCV = 0; /* Set whether the satellite antenna PCV (phase center variation) model is used or not. This feature requires a Satellite Antenna PCV File. */
+ int rec_PCV = 0; /* Set whether the receiver antenna PCV (phase center variation) model is used or not. This feature requires a Receiver Antenna PCV File. */
+
+ /* Set whether the phase windup correction for PPP modes is applied or not. Only applicable to PPP‐* modes.*/
+ int phwindup = configuration->property(role + ".phwindup", 0);
+
+ /* Set whether the GPS Block IIA satellites in eclipse are excluded or not.
+ The eclipsing Block IIA satellites often degrade the PPP solutions due to unpredicted behavior of yaw‐attitude. Only applicable to PPP‐* modes.*/
+ int reject_GPS_IIA = configuration->property(role + ".reject_GPS_IIA", 0);
+
+ /* Set whether RAIM (receiver autonomous integrity monitoring) FDE (fault detection and exclusion) feature is enabled or not.
+ In case of RAIM FDE enabled, a satellite is excluded if SSE (sum of squared errors) of residuals is over a threshold.
+ The excluded satellite is selected to indicate the minimum SSE. */
+ int raim_fde = configuration->property(role + ".raim_fde", 0);
+
+ int earth_tide = configuration->property(role + ".earth_tide", 0);
+
+ int nsys = 0;
+ if ((gps_1C_count > 0) || (gps_2S_count > 0) || (gps_L5_count > 0)) nsys += SYS_GPS;
+ if ((gal_1B_count > 0) || (gal_E5a_count > 0) || (gal_E5b_count > 0)) nsys += SYS_GAL;
+ if ((glo_1G_count > 0) || (glo_2G_count > 0)) nsys += SYS_GLO;
+ int navigation_system = configuration->property(role + ".navigation_system", nsys); /* (SYS_XXX) see src/algorithms/libs/rtklib/rtklib.h */
+ if ((navigation_system < 1) || (navigation_system > 255)) /* GPS: 1 SBAS: 2 GPS+SBAS: 3 Galileo: 8 Galileo+GPS: 9 GPS+SBAS+Galileo: 11 All: 255 */
+ {
+ //warn user and set the default
+ LOG(WARNING) << "Erroneous Navigation System. Setting to default value of (0:none)";
+ navigation_system = nsys;
+ }
+
+ // Settings 2
+ std::string default_gps_ar("Continuous");
+ std::string integer_ambiguity_resolution_gps_str = configuration->property(role + ".AR_GPS", default_gps_ar); /* Integer Ambiguity Resolution mode for GPS (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */
+ int integer_ambiguity_resolution_gps = -1;
+ if (integer_ambiguity_resolution_gps_str == "OFF") integer_ambiguity_resolution_gps = ARMODE_OFF;
+ if (integer_ambiguity_resolution_gps_str == "Continuous") integer_ambiguity_resolution_gps = ARMODE_CONT;
+ if (integer_ambiguity_resolution_gps_str == "Instantaneous") integer_ambiguity_resolution_gps = ARMODE_INST;
+ if (integer_ambiguity_resolution_gps_str == "Fix-and-Hold") integer_ambiguity_resolution_gps = ARMODE_FIXHOLD;
+ if (integer_ambiguity_resolution_gps_str == "PPP-AR") integer_ambiguity_resolution_gps = ARMODE_PPPAR;
+ if (integer_ambiguity_resolution_gps == -1)
+ {
+ //warn user and set the default
+ std::cout << "WARNING: Bad specification of GPS ambiguity resolution method." << std::endl;
+ std::cout << "AR_GPS possible values: OFF / Continuous / Instantaneous / Fix-and-Hold / PPP-AR" << std::endl;
+ std::cout << "AR_GPS specified value: " << integer_ambiguity_resolution_gps_str << std::endl;
+ std::cout << "Setting AR_GPS to OFF" << std::endl;
+ integer_ambiguity_resolution_gps = ARMODE_OFF;
+ }
+
+ int integer_ambiguity_resolution_glo = configuration->property(role + ".AR_GLO", 1); /* Integer Ambiguity Resolution mode for GLONASS (0:off,1:on,2:auto cal,3:ext cal) */
+ if ((integer_ambiguity_resolution_glo < 0) || (integer_ambiguity_resolution_glo > 3))
+ {
+ //warn user and set the default
+ LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for GLONASS . Setting to default value of (1:on)";
+ integer_ambiguity_resolution_glo = 1;
+ }
+
+ int integer_ambiguity_resolution_bds = configuration->property(role + ".AR_DBS", 1); /* Integer Ambiguity Resolution mode for BEIDOU (0:off,1:on) */
+ if ((integer_ambiguity_resolution_bds < 0) || (integer_ambiguity_resolution_bds > 1))
+ {
+ //warn user and set the default
+ LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for BEIDOU . Setting to default value of (1:on)";
+ integer_ambiguity_resolution_bds = 1;
+ }
+
+ double min_ratio_to_fix_ambiguity = configuration->property(role + ".min_ratio_to_fix_ambiguity", 3.0); /* Set the integer ambiguity validation threshold for ratio‐test,
+ which uses the ratio of squared residuals of the best integer vector to the second‐best vector. */
+
+ int min_lock_to_fix_ambiguity = configuration->property(role + ".min_lock_to_fix_ambiguity", 0); /* Set the minimum lock count to fix integer ambiguity.FLAGS_RINEX_version.
+ If the lock count is less than the value, the ambiguity is excluded from the fixed integer vector. */
+
+ double min_elevation_to_fix_ambiguity = configuration->property(role + ".min_elevation_to_fix_ambiguity", 0.0); /* Set the minimum elevation (deg) to fix integer ambiguity.
+ If the elevation of the satellite is less than the value, the ambiguity is excluded from the fixed integer vector. */
+
+ int outage_reset_ambiguity = configuration->property(role + ".outage_reset_ambiguity", 5); /* Set the outage count to reset ambiguity. If the data outage count is over the value, the estimated ambiguity is reset to the initial value. */
+
+ double slip_threshold = configuration->property(role + ".slip_threshold", 0.05); /* set the cycle‐slip threshold (m) of geometry‐free LC carrier‐phase difference between epochs */
+
+ double threshold_reject_gdop = configuration->property(role + ".threshold_reject_gdop", 30.0); /* reject threshold of GDOP. If the GDOP is over the value, the observable is excluded for the estimation process as an outlier. */
+
+ double threshold_reject_innovation = configuration->property(role + ".threshold_reject_innovation", 30.0); /* reject threshold of innovation (m). If the innovation is over the value, the observable is excluded for the estimation process as an outlier. */
+
+ int number_filter_iter = configuration->property(role + ".number_filter_iter", 1); /* Set the number of iteration in the measurement update of the estimation filter.
+ If the baseline length is very short like 1 m, the iteration may be effective to handle
+ the nonlinearity of measurement equation. */
+
+ /// Statistics
+ double bias_0 = configuration->property(role + ".bias_0", 30.0);
+
+ double iono_0 = configuration->property(role + ".iono_0", 0.03);
+
+ double trop_0 = configuration->property(role + ".trop_0", 0.3);
+
+ double sigma_bias = configuration->property(role + ".sigma_bias", 1e-4); /* Set the process noise standard deviation of carrier‐phase
+ bias (ambiguity) (cycle/sqrt(s)) */
+
+ double sigma_iono = configuration->property(role + ".sigma_iono", 1e-3); /* Set the process noise standard deviation of vertical ionospheric delay per 10 km baseline (m/sqrt(s)). */
+
+ double sigma_trop = configuration->property(role + ".sigma_trop", 1e-4); /* Set the process noise standard deviation of zenith tropospheric delay (m/sqrt(s)). */
+
+ double sigma_acch = configuration->property(role + ".sigma_acch", 1e-1); /* Set the process noise standard deviation of the receiver acceleration as
+ the horizontal component. (m/s2/sqrt(s)). If Receiver Dynamics is set to OFF, they are not used. */
+
+ double sigma_accv = configuration->property(role + ".sigma_accv", 1e-2); /* Set the process noise standard deviation of the receiver acceleration as
+ the vertical component. (m/s2/sqrt(s)). If Receiver Dynamics is set to OFF, they are not used. */
+
+ double sigma_pos = configuration->property(role + ".sigma_pos", 0.0);
+
+ double code_phase_error_ratio_l1 = configuration->property(role + ".code_phase_error_ratio_l1", 100.0);
+ double code_phase_error_ratio_l2 = configuration->property(role + ".code_phase_error_ratio_l2", 100.0);
+ double code_phase_error_ratio_l5 = configuration->property(role + ".code_phase_error_ratio_l5", 100.0);
+ double carrier_phase_error_factor_a = configuration->property(role + ".carrier_phase_error_factor_a", 0.003);
+ double carrier_phase_error_factor_b = configuration->property(role + ".carrier_phase_error_factor_b", 0.003);
+
+ snrmask_t snrmask = {{}, {{}, {}}};
+
+ prcopt_t rtklib_configuration_options = {
+ positioning_mode, /* positioning mode (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h */
+ 0, /* solution type (0:forward,1:backward,2:combined) */
+ number_of_frequencies, /* number of frequencies (1:L1, 2:L1+L2, 3:L1+L2+L5)*/
+ navigation_system, /* navigation system */
+ elevation_mask * D2R, /* elevation mask angle (degrees) */
+ snrmask, /* snrmask_t snrmask SNR mask */
+ 0, /* satellite ephemeris/clock (EPHOPT_XXX) */
+ integer_ambiguity_resolution_gps, /* AR mode (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */
+ integer_ambiguity_resolution_glo, /* GLONASS AR mode (0:off,1:on,2:auto cal,3:ext cal) */
+ integer_ambiguity_resolution_bds, /* BeiDou AR mode (0:off,1:on) */
+ outage_reset_ambiguity, /* obs outage count to reset bias */
+ min_lock_to_fix_ambiguity, /* min lock count to fix ambiguity */
+ 10, /* min fix count to hold ambiguity */
+ 1, /* max iteration to resolve ambiguity */
+ iono_model, /* ionosphere option (IONOOPT_XXX) */
+ trop_model, /* troposphere option (TROPOPT_XXX) */
+ dynamics_model, /* dynamics model (0:none, 1:velocity, 2:accel) */
+ earth_tide, /* earth tide correction (0:off,1:solid,2:solid+otl+pole) */
+ number_filter_iter, /* number of filter iteration */
+ 0, /* code smoothing window size (0:none) */
+ 0, /* interpolate reference obs (for post mission) */
+ 0, /* sbssat_t sbssat SBAS correction options */
+ 0, /* sbsion_t sbsion[MAXBAND+1] SBAS satellite selection (0:all) */
+ 0, /* rover position for fixed mode */
+ 0, /* base position for relative mode */
+ /* 0:pos in prcopt, 1:average of single pos, */
+ /* 2:read from file, 3:rinex header, 4:rtcm pos */
+ {code_phase_error_ratio_l1, code_phase_error_ratio_l2, code_phase_error_ratio_l5}, /* eratio[NFREQ] code/phase error ratio */
+ {100.0, carrier_phase_error_factor_a, carrier_phase_error_factor_b, 0.0, 1.0}, /* err[5]: measurement error factor [0]:reserved, [1-3]:error factor a/b/c of phase (m) , [4]:doppler frequency (hz) */
+ {bias_0, iono_0, trop_0}, /* std[3]: initial-state std [0]bias,[1]iono [2]trop*/
+ {sigma_bias, sigma_iono, sigma_trop, sigma_acch, sigma_accv, sigma_pos}, /* prn[6] process-noise std */
+ 5e-12, /* sclkstab: satellite clock stability (sec/sec) */
+ {min_ratio_to_fix_ambiguity, 0.9999, 0.25, 0.1, 0.05, 0.0, 0.0, 0.0}, /* thresar[8]: AR validation threshold */
+ min_elevation_to_fix_ambiguity, /* elevation mask of AR for rising satellite (deg) */
+ 0.0, /* elevation mask to hold ambiguity (deg) */
+ slip_threshold, /* slip threshold of geometry-free phase (m) */
+ 30.0, /* max difference of time (sec) */
+ threshold_reject_innovation, /* reject threshold of innovation (m) */
+ threshold_reject_gdop, /* reject threshold of gdop */
+ {}, /* double baseline[2] baseline length constraint {const,sigma} (m) */
+ {}, /* double ru[3] rover position for fixed mode {x,y,z} (ecef) (m) */
+ {}, /* double rb[3] base position for relative mode {x,y,z} (ecef) (m) */
+ {"", ""}, /* char anttype[2][MAXANT] antenna types {rover,base} */
+ {{}, {}}, /* double antdel[2][3] antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */
+ {}, /* pcv_t pcvr[2] receiver antenna parameters {rov,base} */
+ {}, /* unsigned char exsats[MAXSAT] excluded satellites (1:excluded, 2:included) */
+ 0, /* max averaging epoches */
+ 0, /* initialize by restart */
+ 1, /* output single by dgps/float/fix/ppp outage */
+ {"", ""}, /* char rnxopt[2][256] rinex options {rover,base} */
+ {sat_PCV, rec_PCV, phwindup, reject_GPS_IIA, raim_fde}, /* posopt[6] positioning options [0]: satellite and receiver antenna PCV model; [1]: interpolate antenna parameters; [2]: apply phase wind-up correction for PPP modes; [3]: exclude measurements of GPS Block IIA satellites satellite [4]: RAIM FDE (fault detection and exclusion) [5]: handle day-boundary clock jump */
+ 0, /* solution sync mode (0:off,1:on) */
+ {{}, {}}, /* odisp[2][6*11] ocean tide loading parameters {rov,base} */
+ {{}, {{}, {}}, {{}, {}}, {}, {}}, /* exterr_t exterr extended receiver error model */
+ 0, /* disable L2-AR */
+ {} /* char pppopt[256] ppp option "-GAP_RESION=" default gap to reset iono parameters (ep) */
+ };
+
+ rtkinit(&rtk, &rtklib_configuration_options);
+
+ // Outputs
+ bool default_output_enabled = configuration->property(role + ".output_enabled", true);
+ pvt_output_parameters.output_enabled = default_output_enabled;
+ pvt_output_parameters.rinex_output_enabled = configuration->property(role + ".rinex_output_enabled", default_output_enabled);
+ pvt_output_parameters.gpx_output_enabled = configuration->property(role + ".gpx_output_enabled", default_output_enabled);
+ pvt_output_parameters.geojson_output_enabled = configuration->property(role + ".geojson_output_enabled", default_output_enabled);
+ pvt_output_parameters.kml_output_enabled = configuration->property(role + ".kml_output_enabled", default_output_enabled);
+ pvt_output_parameters.xml_output_enabled = configuration->property(role + ".xml_output_enabled", default_output_enabled);
+ pvt_output_parameters.nmea_output_file_enabled = configuration->property(role + ".nmea_output_file_enabled", default_output_enabled);
+ pvt_output_parameters.rtcm_output_file_enabled = configuration->property(role + ".rtcm_output_file_enabled", default_output_enabled);
+
+ std::string default_output_path = configuration->property(role + ".output_path", std::string("."));
+ pvt_output_parameters.output_path = default_output_path;
+ pvt_output_parameters.rinex_output_path = configuration->property(role + ".rinex_output_path", default_output_path);
+ pvt_output_parameters.gpx_output_path = configuration->property(role + ".gpx_output_path", default_output_path);
+ pvt_output_parameters.geojson_output_path = configuration->property(role + ".geojson_output_path", default_output_path);
+ pvt_output_parameters.kml_output_path = configuration->property(role + ".kml_output_path", default_output_path);
+ pvt_output_parameters.xml_output_path = configuration->property(role + ".xml_output_path", default_output_path);
+ pvt_output_parameters.nmea_output_file_path = configuration->property(role + ".nmea_output_file_path", default_output_path);
+ pvt_output_parameters.rtcm_output_file_path = configuration->property(role + ".rtcm_output_file_path", default_output_path);
+
+ // make PVT object
+ pvt_ = rtklib_make_pvt_cc(in_streams_, pvt_output_parameters, rtk);
+ DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
+ if (out_streams_ > 0)
+ {
+ LOG(ERROR) << "The PVT block does not have an output stream";
+ }
+}
+
+
+RtklibPvt::~RtklibPvt()
+{
+ rtkfree(&rtk);
+}
+
+
+bool RtklibPvt::get_latest_PVT(double* longitude_deg,
+ double* latitude_deg,
+ double* height_m,
+ double* ground_speed_kmh,
+ double* course_over_ground_deg,
+ time_t* UTC_time)
+{
+ return pvt_->get_latest_PVT(longitude_deg,
+ latitude_deg,
+ height_m,
+ ground_speed_kmh,
+ course_over_ground_deg,
+ UTC_time);
+}
+
+
+void RtklibPvt::clear_ephemeris()
+{
+ pvt_->clear_ephemeris();
+}
+
+
+std::map RtklibPvt::get_gps_ephemeris() const
+{
+ return pvt_->get_gps_ephemeris_map();
+}
+
+
+std::map RtklibPvt::get_galileo_ephemeris() const
+{
+ return pvt_->get_galileo_ephemeris_map();
+}
+
+
+std::map RtklibPvt::get_gps_almanac() const
+{
+ return pvt_->get_gps_almanac_map();
+}
+
+
+std::map RtklibPvt::get_galileo_almanac() const
+{
+ return pvt_->get_galileo_almanac_map();
+}
+
+
+void RtklibPvt::connect(gr::top_block_sptr top_block)
+{
+ if (top_block)
+ { /* top_block is not null */
+ };
+ // Nothing to connect internally
+ DLOG(INFO) << "nothing to connect internally";
+}
+
+
+void RtklibPvt::disconnect(gr::top_block_sptr top_block)
+{
+ if (top_block)
+ { /* top_block is not null */
+ };
+ // Nothing to disconnect
+}
+
+
+gr::basic_block_sptr RtklibPvt::get_left_block()
+{
+ return pvt_;
+}
+
+
+gr::basic_block_sptr RtklibPvt::get_right_block()
+{
+ return pvt_; // this is a sink, nothing downstream
+}
diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.h b/src/algorithms/PVT/adapters/rtklib_pvt.h
new file mode 100644
index 000000000..41235471b
--- /dev/null
+++ b/src/algorithms/PVT/adapters/rtklib_pvt.h
@@ -0,0 +1,103 @@
+/*!
+ * \file rtklib_pvt.h
+ * \brief Interface of a Position Velocity and Time computation block
+ * \author Javier Arribas, 2017. jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ * Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see .
+ *
+ * -------------------------------------------------------------------------
+ */
+
+
+#ifndef GNSS_SDR_RTKLIB_PVT_H_
+#define GNSS_SDR_RTKLIB_PVT_H_
+
+#include "pvt_interface.h"
+#include "rtklib_pvt_cc.h"
+#include
+
+
+class ConfigurationInterface;
+
+/*!
+ * \brief This class implements a PvtInterface for the RTKLIB PVT block
+ */
+class RtklibPvt : public PvtInterface
+{
+public:
+ RtklibPvt(ConfigurationInterface* configuration,
+ const std::string& role,
+ unsigned int in_streams,
+ unsigned int out_streams);
+
+ virtual ~RtklibPvt();
+
+ inline std::string role() override
+ {
+ return role_;
+ }
+
+ //! Returns "RTKLIB_PVT"
+ inline std::string implementation() override
+ {
+ return "RTKLIB_PVT";
+ }
+
+ void clear_ephemeris() override;
+ std::map get_gps_ephemeris() const override;
+ std::map get_galileo_ephemeris() const override;
+ std::map get_gps_almanac() const override;
+ std::map get_galileo_almanac() const override;
+
+ void connect(gr::top_block_sptr top_block) override;
+ void disconnect(gr::top_block_sptr top_block) override;
+ gr::basic_block_sptr get_left_block() override;
+ gr::basic_block_sptr get_right_block() override;
+
+ inline void reset() override
+ {
+ return;
+ }
+
+ //! All blocks must have an item_size() function implementation. Returns sizeof(gr_complex)
+ inline size_t item_size() override
+ {
+ return sizeof(gr_complex);
+ }
+
+ bool get_latest_PVT(double* longitude_deg,
+ double* latitude_deg,
+ double* height_m,
+ double* ground_speed_kmh,
+ double* course_over_ground_deg,
+ time_t* UTC_time) override;
+
+private:
+ rtklib_pvt_cc_sptr pvt_;
+ rtk_t rtk{};
+ std::string role_;
+ unsigned int in_streams_;
+ unsigned int out_streams_;
+};
+
+#endif
diff --git a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
index 1eb1eaf1c..eb58c0894 100644
--- a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors)
+# Copyright (C) 2012-2018 (see AUTHORS file for a list of contributors)
#
# This file is part of GNSS-SDR.
#
@@ -13,30 +13,37 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNSS-SDR. If not, see .
+# along with GNSS-SDR. If not, see .
#
-set(PVT_GR_BLOCKS_SOURCES
- gps_l1_ca_pvt_cc.cc
- galileo_e1_pvt_cc.cc
- hybrid_pvt_cc.cc
+
+if(Boost_VERSION LESS 105800)
+ add_definitions(-DOLD_BOOST=1)
+endif()
+
+set(PVT_GR_BLOCKS_SOURCES
+ rtklib_pvt_cc.cc
+)
+
+set(PVT_GR_BLOCKS_HEADERS
+ rtklib_pvt_cc.h
)
include_directories(
- $(CMAKE_CURRENT_SOURCE_DIR)
- ${CMAKE_SOURCE_DIR}/src/core/system_parameters
- ${CMAKE_SOURCE_DIR}/src/core/interfaces
- ${CMAKE_SOURCE_DIR}/src/core/receiver
- ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
- ${ARMADILLO_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
- ${GLOG_INCLUDE_DIRS}
- ${GFlags_INCLUDE_DIRS}
- ${GNURADIO_RUNTIME_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/src/core/system_parameters
+ ${CMAKE_SOURCE_DIR}/src/core/interfaces
+ ${CMAKE_SOURCE_DIR}/src/core/receiver
+ ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
+ ${CMAKE_SOURCE_DIR}/src/algorithms/libs/rtklib
+ ${CMAKE_SOURCE_DIR}/src/algorithms/libs
+ ${ARMADILLO_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${GLOG_INCLUDE_DIRS}
+ ${GFlags_INCLUDE_DIRS}
+ ${GNURADIO_RUNTIME_INCLUDE_DIRS}
)
-file(GLOB PVT_GR_BLOCKS_HEADERS "*.h")
-list(SORT PVT_GR_BLOCKS_HEADERS)
add_library(pvt_gr_blocks ${PVT_GR_BLOCKS_SOURCES} ${PVT_GR_BLOCKS_HEADERS})
source_group(Headers FILES ${PVT_GR_BLOCKS_HEADERS})
target_link_libraries(pvt_gr_blocks pvt_lib ${ARMADILLO_LIBRARIES})
diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
deleted file mode 100644
index e7c1f9813..000000000
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
+++ /dev/null
@@ -1,424 +0,0 @@
-/*!
- * \file galileo_e1_pvt_cc.cc
- * \brief Implementation of a Position Velocity and Time computation block for GPS L1 C/A
- * \author Javier Arribas, 2013. jarribas(at)cttc.es
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- * Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see .
- *
- * -------------------------------------------------------------------------
- */
-
-#include "galileo_e1_pvt_cc.h"
-#include
-#include
-#include