mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-11-26 03:54:55 +00:00
bds_b3i: merging new changes, fixing D2 decoding bug
This commit is contained in:
@@ -17,27 +17,27 @@
|
||||
#
|
||||
|
||||
set(TELEMETRY_DECODER_GR_BLOCKS_SOURCES
|
||||
gps_l1_ca_telemetry_decoder_cc.cc
|
||||
gps_l2c_telemetry_decoder_cc.cc
|
||||
gps_l5_telemetry_decoder_cc.cc
|
||||
sbas_l1_telemetry_decoder_cc.cc
|
||||
glonass_l1_ca_telemetry_decoder_cc.cc
|
||||
glonass_l2_ca_telemetry_decoder_cc.cc
|
||||
galileo_telemetry_decoder_cc.cc
|
||||
beidou_b1i_telemetry_decoder_cc.cc
|
||||
beidou_b3i_telemetry_decoder_cc.cc
|
||||
gps_l1_ca_telemetry_decoder_gs.cc
|
||||
gps_l2c_telemetry_decoder_gs.cc
|
||||
gps_l5_telemetry_decoder_gs.cc
|
||||
sbas_l1_telemetry_decoder_gs.cc
|
||||
glonass_l1_ca_telemetry_decoder_gs.cc
|
||||
glonass_l2_ca_telemetry_decoder_gs.cc
|
||||
galileo_telemetry_decoder_gs.cc
|
||||
beidou_b1i_telemetry_decoder_gs.cc
|
||||
beidou_b3i_telemetry_decoder_gs.cc
|
||||
)
|
||||
|
||||
set(TELEMETRY_DECODER_GR_BLOCKS_HEADERS
|
||||
gps_l1_ca_telemetry_decoder_cc.h
|
||||
gps_l2c_telemetry_decoder_cc.h
|
||||
gps_l5_telemetry_decoder_cc.h
|
||||
sbas_l1_telemetry_decoder_cc.h
|
||||
glonass_l1_ca_telemetry_decoder_cc.h
|
||||
glonass_l2_ca_telemetry_decoder_cc.h
|
||||
galileo_telemetry_decoder_cc.h
|
||||
beidou_b1i_telemetry_decoder_cc.h
|
||||
beidou_b3i_telemetry_decoder_cc.h
|
||||
gps_l1_ca_telemetry_decoder_gs.h
|
||||
gps_l2c_telemetry_decoder_gs.h
|
||||
gps_l5_telemetry_decoder_gs.h
|
||||
sbas_l1_telemetry_decoder_gs.h
|
||||
glonass_l1_ca_telemetry_decoder_gs.h
|
||||
glonass_l2_ca_telemetry_decoder_gs.h
|
||||
galileo_telemetry_decoder_gs.h
|
||||
beidou_b1i_telemetry_decoder_gs.h
|
||||
beidou_b3i_telemetry_decoder_gs.h
|
||||
)
|
||||
|
||||
list(SORT TELEMETRY_DECODER_GR_BLOCKS_HEADERS)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file beidou_b1i_telemetry_decoder_cc.cc
|
||||
* \brief Implementation of an adapter of a BEIDOU BI1 DNAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file beidou_b1i_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a BEIDOU BI1 DNAV data decoder block
|
||||
* \note Code added as part of GSoC 2018 program
|
||||
* \author Damian Miralles, 2018. dmiralles2009(at)gmail.com
|
||||
* \author Sergi Segura, 2018. sergi.segura.munoz(at)gmail.es
|
||||
@@ -32,31 +31,37 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "beidou_b1i_telemetry_decoder_cc.h"
|
||||
#include "beidou_b1i_telemetry_decoder_gs.h"
|
||||
#include "Beidou_B1I.h"
|
||||
#include "beidou_dnav_almanac.h"
|
||||
#include "beidou_dnav_ephemeris.h"
|
||||
#include "beidou_dnav_utc_model.h"
|
||||
#include "convolutional.h"
|
||||
#include "display.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||
#include <iostream>
|
||||
#include <cstdlib> // for abs
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
#define CRC_ERROR_LIMIT 8
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
|
||||
beidou_b1i_telemetry_decoder_cc_sptr
|
||||
beidou_b1i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
beidou_b1i_telemetry_decoder_gs_sptr
|
||||
beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return beidou_b1i_telemetry_decoder_cc_sptr(new beidou_b1i_telemetry_decoder_cc(satellite, dump));
|
||||
return beidou_b1i_telemetry_decoder_gs_sptr(new beidou_b1i_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
beidou_b1i_telemetry_decoder_cc::beidou_b1i_telemetry_decoder_cc(
|
||||
beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("beidou_b1i_telemetry_decoder_cc",
|
||||
bool dump) : gr::block("beidou_b1i_telemetry_decoder_gs",
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
@@ -65,7 +70,7 @@ beidou_b1i_telemetry_decoder_cc::beidou_b1i_telemetry_decoder_cc(
|
||||
// initialize internal vars
|
||||
d_dump = dump;
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
LOG(INFO) << "Initializing BeiDou B1i Telemetry Decoding for satellite " << this->d_satellite;
|
||||
LOG(INFO) << "Initializing BeiDou B1I Telemetry Decoding for satellite " << this->d_satellite;
|
||||
|
||||
d_samples_per_symbol = (BEIDOU_B1I_CODE_RATE_HZ / BEIDOU_B1I_CODE_LENGTH_CHIPS) / BEIDOU_D1NAV_SYMBOL_RATE_SPS;
|
||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||
@@ -133,7 +138,7 @@ beidou_b1i_telemetry_decoder_cc::beidou_b1i_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
beidou_b1i_telemetry_decoder_cc::~beidou_b1i_telemetry_decoder_cc()
|
||||
beidou_b1i_telemetry_decoder_gs::~beidou_b1i_telemetry_decoder_gs()
|
||||
{
|
||||
volk_gnsssdr_free(d_preamble_samples);
|
||||
volk_gnsssdr_free(d_secondary_code_symbols);
|
||||
@@ -153,7 +158,7 @@ beidou_b1i_telemetry_decoder_cc::~beidou_b1i_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void beidou_b1i_telemetry_decoder_cc::decode_bch15_11_01(const int32_t *bits, int32_t *decbits)
|
||||
void beidou_b1i_telemetry_decoder_gs::decode_bch15_11_01(const int32_t *bits, int32_t *decbits)
|
||||
{
|
||||
int32_t bit, err, reg[4] = {1, 1, 1, 1};
|
||||
int32_t errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2};
|
||||
@@ -182,7 +187,7 @@ void beidou_b1i_telemetry_decoder_cc::decode_bch15_11_01(const int32_t *bits, in
|
||||
}
|
||||
|
||||
|
||||
void beidou_b1i_telemetry_decoder_cc::decode_word(
|
||||
void beidou_b1i_telemetry_decoder_gs::decode_word(
|
||||
int32_t word_counter,
|
||||
const double *enc_word_symbols,
|
||||
int32_t *dec_word_symbols)
|
||||
@@ -224,7 +229,7 @@ void beidou_b1i_telemetry_decoder_cc::decode_word(
|
||||
}
|
||||
|
||||
|
||||
void beidou_b1i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int32_t frame_length)
|
||||
void beidou_b1i_telemetry_decoder_gs::decode_subframe(double *frame_symbols)
|
||||
{
|
||||
// 1. Transform from symbols to bits
|
||||
std::string data_bits;
|
||||
@@ -252,7 +257,6 @@ void beidou_b1i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int
|
||||
d_nav.d1_subframe_decoder(data_bits);
|
||||
}
|
||||
|
||||
|
||||
// 3. Check operation executed correctly
|
||||
if (d_nav.flag_crc_test == true)
|
||||
{
|
||||
@@ -298,7 +302,7 @@ void beidou_b1i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int
|
||||
}
|
||||
|
||||
|
||||
void beidou_b1i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
uint32_t sat_prn = 0;
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
@@ -323,8 +327,7 @@ void beidou_b1i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satell
|
||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS * d_samples_per_symbol;
|
||||
d_secondary_code_symbols = nullptr;
|
||||
d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||
d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS*d_samples_per_symbol;
|
||||
d_subframe_length_symbols = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||
d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * d_samples_per_symbol;
|
||||
|
||||
// Setting samples of preamble code
|
||||
int32_t n = 0;
|
||||
@@ -354,7 +357,7 @@ void beidou_b1i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satell
|
||||
}
|
||||
|
||||
|
||||
void beidou_b1i_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void beidou_b1i_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "Navigation channel set to " << channel;
|
||||
@@ -381,7 +384,7 @@ void beidou_b1i_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
int beidou_b1i_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t corr_value = 0;
|
||||
@@ -505,7 +508,7 @@ int beidou_b1i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
}
|
||||
|
||||
// call the decoder
|
||||
decode_subframe(d_subframe_symbols, d_subframe_length_symbols);
|
||||
decode_subframe(d_subframe_symbols);
|
||||
|
||||
if (d_nav.flag_crc_test == true)
|
||||
{
|
||||
@@ -1,9 +1,8 @@
|
||||
/*!
|
||||
* \file beidou_b1i_telemetry_decoder_cc.h
|
||||
* \brief Implementation of an adapter of a BEIDOU BI1 DNAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \details Code added as part of GSoC 2018 program. However new modifications included to mimic
|
||||
* decoding of existing signals
|
||||
* \file beidou_b1i_telemetry_decoder_gs.h
|
||||
* \brief Implementation of a BEIDOU BI1 DNAV data decoder block
|
||||
* \details Code added as part of GSoC 2018 program. However new modifications
|
||||
* included to mimic decoding of existing signals
|
||||
* \author Damian Miralles, 2018. dmiralles2009(at)gmail.com
|
||||
* \author Sergi Segura, 2018. sergi.segura.munoz(at)gmail.es
|
||||
*
|
||||
@@ -27,45 +26,41 @@
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_BEIDOU_B1I_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_BEIDOU_B1I_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_BEIDOU_B1I_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_BEIDOU_B1I_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "Beidou_DNAV.h"
|
||||
#include "Beidou_B1I.h"
|
||||
#include "beidou_dnav_almanac.h"
|
||||
#include "beidou_dnav_ephemeris.h"
|
||||
#include "beidou_dnav_navigation_message.h"
|
||||
#include "beidou_dnav_utc_model.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include "beidou_dnav_navigation_message.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <gnuradio/block.h>
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <cstdint>
|
||||
|
||||
|
||||
class beidou_b1i_telemetry_decoder_cc;
|
||||
class beidou_b1i_telemetry_decoder_gs;
|
||||
|
||||
using beidou_b1i_telemetry_decoder_cc_sptr = boost::shared_ptr<beidou_b1i_telemetry_decoder_cc>;
|
||||
using beidou_b1i_telemetry_decoder_gs_sptr = boost::shared_ptr<beidou_b1i_telemetry_decoder_gs>;
|
||||
|
||||
beidou_b1i_telemetry_decoder_cc_sptr beidou_b1i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
//!!!! edit
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the GNAV data defined in BEIDOU ICD v5.1
|
||||
* \brief This class implements a block that decodes the BeiDou DNAV data.
|
||||
* \note Code added as part of GSoC 2018 program
|
||||
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||
*
|
||||
*/
|
||||
class beidou_b1i_telemetry_decoder_cc : public gr::block
|
||||
class beidou_b1i_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~beidou_b1i_telemetry_decoder_cc(); //!< Class destructor
|
||||
~beidou_b1i_telemetry_decoder_gs(); //!< Class destructor
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int channel); //!< Set receiver's channel
|
||||
|
||||
@@ -76,17 +71,16 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend beidou_b1i_telemetry_decoder_cc_sptr
|
||||
beidou_b1i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b1i_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend beidou_b1i_telemetry_decoder_gs_sptr
|
||||
beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b1i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
void decode_subframe(double *symbols, int32_t frame_length);
|
||||
void decode_subframe(double *symbols);
|
||||
void decode_word(int32_t word_counter, const double *enc_word_symbols, int32_t *dec_word_symbols);
|
||||
void decode_bch15_11_01(const int32_t *bits, int32_t *decbits);
|
||||
|
||||
|
||||
// Preamble decoding
|
||||
uint16_t d_preambles_symbols[BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS];
|
||||
int32_t *d_preamble_samples;
|
||||
int32_t *d_secondary_code_symbols;
|
||||
uint32_t d_samples_per_symbol;
|
||||
@@ -94,7 +88,6 @@ private:
|
||||
int32_t d_samples_per_preamble;
|
||||
int32_t d_preamble_period_samples;
|
||||
double *d_subframe_symbols;
|
||||
uint32_t d_subframe_length_symbols;
|
||||
uint32_t d_required_symbols;
|
||||
|
||||
// Storage for incoming data
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file beidou_b3i_telemetry_decoder_cc.cc
|
||||
* \file beidou_b3i_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of an adapter of a BEIDOU B31 DNAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \author Damian Miralles, 2019. dmiralles2009(at)gmail.com
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@@ -30,31 +29,38 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "beidou_b3i_telemetry_decoder_cc.h"
|
||||
#include "beidou_b3i_telemetry_decoder_gs.h"
|
||||
#include "Beidou_B3I.h"
|
||||
#include "Beidou_DNAV.h"
|
||||
#include "beidou_dnav_almanac.h"
|
||||
#include "beidou_dnav_ephemeris.h"
|
||||
#include "beidou_dnav_utc_model.h"
|
||||
#include "convolutional.h"
|
||||
#include "display.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||
#include <iostream>
|
||||
#include <cstdlib> // for abs
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
#define CRC_ERROR_LIMIT 8
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
|
||||
beidou_b3i_telemetry_decoder_cc_sptr
|
||||
beidou_b3i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
beidou_b3i_telemetry_decoder_gs_sptr
|
||||
beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return beidou_b3i_telemetry_decoder_cc_sptr(new beidou_b3i_telemetry_decoder_cc(satellite, dump));
|
||||
return beidou_b3i_telemetry_decoder_gs_sptr(new beidou_b3i_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
beidou_b3i_telemetry_decoder_cc::beidou_b3i_telemetry_decoder_cc(
|
||||
beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("beidou_b3i_telemetry_decoder_cc",
|
||||
bool dump) : gr::block("beidou_b3i_telemetry_decoder_gs",
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
@@ -63,7 +69,7 @@ beidou_b3i_telemetry_decoder_cc::beidou_b3i_telemetry_decoder_cc(
|
||||
// initialize internal vars
|
||||
d_dump = dump;
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
LOG(INFO) << "Initializing BeiDou B1i Telemetry Decoding for satellite "<< this->d_satellite;
|
||||
LOG(INFO) << "Initializing BeiDou B3I Telemetry Decoding for satellite "<< this->d_satellite;
|
||||
|
||||
d_samples_per_symbol = (BEIDOU_B3I_CODE_RATE_HZ / BEIDOU_B3I_CODE_LENGTH_CHIPS) / BEIDOU_D1NAV_SYMBOL_RATE_SPS;
|
||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||
@@ -71,7 +77,6 @@ beidou_b3i_telemetry_decoder_cc::beidou_b3i_telemetry_decoder_cc(
|
||||
d_secondary_code_symbols = static_cast<int32_t *>(volk_gnsssdr_malloc(BEIDOU_B3I_SECONDARY_CODE_LENGTH * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||
d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||
d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS*d_samples_per_symbol;
|
||||
d_subframe_length_symbols = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||
|
||||
// Setting samples of secondary code
|
||||
for (int32_t i = 0; i < BEIDOU_B3I_SECONDARY_CODE_LENGTH; i++)
|
||||
@@ -113,8 +118,9 @@ beidou_b3i_telemetry_decoder_cc::beidou_b3i_telemetry_decoder_cc(
|
||||
}
|
||||
}
|
||||
|
||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(d_subframe_length_symbols * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS*d_samples_per_symbol + d_samples_per_preamble;
|
||||
d_symbol_history.set_capacity(d_required_symbols + 1);
|
||||
|
||||
// Generic settings
|
||||
d_sample_counter = 0;
|
||||
@@ -131,7 +137,7 @@ beidou_b3i_telemetry_decoder_cc::beidou_b3i_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
beidou_b3i_telemetry_decoder_cc::~beidou_b3i_telemetry_decoder_cc()
|
||||
beidou_b3i_telemetry_decoder_gs::~beidou_b3i_telemetry_decoder_gs()
|
||||
{
|
||||
volk_gnsssdr_free(d_preamble_samples);
|
||||
volk_gnsssdr_free(d_secondary_code_symbols);
|
||||
@@ -151,7 +157,7 @@ beidou_b3i_telemetry_decoder_cc::~beidou_b3i_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void beidou_b3i_telemetry_decoder_cc::decode_bch15_11_01(int32_t *bits, int32_t *decbits)
|
||||
void beidou_b3i_telemetry_decoder_gs::decode_bch15_11_01(int32_t *bits, int32_t *decbits)
|
||||
{
|
||||
int bit, err, reg[4] = {1, 1, 1, 1};
|
||||
int errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2};
|
||||
@@ -179,7 +185,8 @@ void beidou_b3i_telemetry_decoder_cc::decode_bch15_11_01(int32_t *bits, int32_t
|
||||
}
|
||||
}
|
||||
|
||||
void beidou_b3i_telemetry_decoder_cc::decode_word(
|
||||
|
||||
void beidou_b3i_telemetry_decoder_gs::decode_word(
|
||||
int32_t word_counter,
|
||||
double* enc_word_symbols,
|
||||
int32_t* dec_word_symbols)
|
||||
@@ -223,7 +230,7 @@ void beidou_b3i_telemetry_decoder_cc::decode_word(
|
||||
}
|
||||
|
||||
|
||||
void beidou_b3i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int32_t frame_length)
|
||||
void beidou_b3i_telemetry_decoder_gs::decode_subframe(double *frame_symbols)
|
||||
{
|
||||
// 1. Transform from symbols to bits
|
||||
std::string data_bits;
|
||||
@@ -297,7 +304,7 @@ void beidou_b3i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int
|
||||
}
|
||||
|
||||
|
||||
void beidou_b3i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void beidou_b3i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
uint32_t sat_prn = 0;
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
@@ -323,7 +330,6 @@ void beidou_b3i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satell
|
||||
d_secondary_code_symbols = nullptr;
|
||||
d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||
d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS*d_samples_per_symbol;
|
||||
d_subframe_length_symbols = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||
|
||||
// Setting samples of preamble code
|
||||
int32_t n = 0;
|
||||
@@ -347,13 +353,13 @@ void beidou_b3i_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satell
|
||||
}
|
||||
}
|
||||
|
||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(d_subframe_length_symbols * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS*d_samples_per_symbol + d_samples_per_preamble;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void beidou_b3i_telemetry_decoder_cc::set_channel(int channel)
|
||||
void beidou_b3i_telemetry_decoder_gs::set_channel(int channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "Navigation channel set to " << channel;
|
||||
@@ -365,7 +371,7 @@ void beidou_b3i_telemetry_decoder_cc::set_channel(int channel)
|
||||
try
|
||||
{
|
||||
d_dump_filename = "telemetry";
|
||||
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
|
||||
d_dump_filename.append(std::to_string(d_channel));
|
||||
d_dump_filename.append(".dat");
|
||||
d_dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
||||
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
|
||||
@@ -380,7 +386,7 @@ void beidou_b3i_telemetry_decoder_cc::set_channel(int channel)
|
||||
}
|
||||
|
||||
|
||||
int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int beidou_b3i_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t corr_value = 0;
|
||||
@@ -403,7 +409,7 @@ int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
//******* preamble correlation ********
|
||||
for (int i = 0; i < d_samples_per_preamble; i++)
|
||||
{
|
||||
if (d_symbol_history.at(i) < 0) // symbols clipping
|
||||
if (d_symbol_history[i] < 0) // symbols clipping
|
||||
{
|
||||
corr_value -= d_preamble_samples[i];
|
||||
}
|
||||
@@ -457,7 +463,7 @@ int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
if (corr_value > 0) //normal PLL lock
|
||||
{
|
||||
int k = 0;
|
||||
for (uint32_t i = 0; i < d_subframe_length_symbols; i++)
|
||||
for (uint32_t i = 0; i < BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; i++)
|
||||
{
|
||||
d_subframe_symbols[i] = 0;
|
||||
//integrate samples into symbols
|
||||
@@ -481,7 +487,7 @@ int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
else //180 deg. inverted carrier phase PLL lock
|
||||
{
|
||||
int k = 0;
|
||||
for (uint32_t i = 0; i < d_subframe_length_symbols; i++)
|
||||
for (uint32_t i = 0; i < BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; i++)
|
||||
{
|
||||
d_subframe_symbols[i] = 0;
|
||||
//integrate samples into symbols
|
||||
@@ -504,7 +510,7 @@ int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
}
|
||||
|
||||
//call the decoder
|
||||
decode_subframe(d_subframe_symbols, d_subframe_length_symbols);
|
||||
decode_subframe(d_subframe_symbols);
|
||||
|
||||
if (d_nav.flag_crc_test == true)
|
||||
{
|
||||
@@ -581,11 +587,6 @@ int beidou_b3i_telemetry_decoder_cc::general_work(int noutput_items __attribute_
|
||||
}
|
||||
}
|
||||
|
||||
// remove used symbols from history
|
||||
if (d_symbol_history.size() > d_required_symbols)
|
||||
{
|
||||
d_symbol_history.pop_front();
|
||||
}
|
||||
//3. Make the output (copy the object contents to the GNURadio reserved memory)
|
||||
*out[0] = current_symbol;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file beidou_b3i_telemetry_decoder_cc.h
|
||||
* \brief Implementation of an adapter of a BEIDOU BI1 DNAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file beidou_b3i_telemetry_decoder_gs.h
|
||||
* \brief Implementation of a BEIDOU B3I DNAV data decoder block
|
||||
* \author Damian Miralles, 2019. dmiralles2009(at)gmail.com
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@@ -29,39 +28,34 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_BEIDOU_B3I_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_BEIDOU_B3I_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_BEIDOU_B3I_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_BEIDOU_B3I_TELEMETRY_DECODER_GS_H
|
||||
|
||||
#include "beidou_dnav_navigation_message.h"
|
||||
#include "beidou_dnav_ephemeris.h"
|
||||
#include "beidou_dnav_almanac.h"
|
||||
#include "beidou_dnav_utc_model.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include "Beidou_B3I.h"
|
||||
#include "Beidou_DNAV.h"
|
||||
#include "beidou_dnav_navigation_message.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <gnuradio/block.h>
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <cstdint>
|
||||
|
||||
|
||||
class beidou_b3i_telemetry_decoder_cc;
|
||||
class beidou_b3i_telemetry_decoder_gs;
|
||||
|
||||
using beidou_b3i_telemetry_decoder_cc_sptr = boost::shared_ptr<beidou_b3i_telemetry_decoder_cc>;
|
||||
using beidou_b3i_telemetry_decoder_gs_sptr = boost::shared_ptr<beidou_b3i_telemetry_decoder_gs>;
|
||||
|
||||
beidou_b3i_telemetry_decoder_cc_sptr beidou_b3i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
//!!!! edit
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the GNAV data defined in BEIDOU ICD v5.1
|
||||
* \note Code added as part of GSoC 2018 program
|
||||
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||
* \brief This class implements a block that decodes the BeiDou DNAV data.
|
||||
*
|
||||
*/
|
||||
class beidou_b3i_telemetry_decoder_cc : public gr::block
|
||||
class beidou_b3i_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~beidou_b3i_telemetry_decoder_cc(); //!< Class destructor
|
||||
~beidou_b3i_telemetry_decoder_gs(); //!< Class destructor
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int channel); //!< Set receiver's channel
|
||||
|
||||
@@ -72,17 +66,16 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend beidou_b3i_telemetry_decoder_cc_sptr
|
||||
beidou_b3i_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b3i_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend beidou_b3i_telemetry_decoder_gs_sptr
|
||||
beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
beidou_b3i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
void decode_subframe(double *symbols, int32_t frame_length);
|
||||
void decode_subframe(double *symbols);
|
||||
void decode_word(int32_t word_counter, double* enc_word_symbols, int32_t* dec_word_symbols);
|
||||
void decode_bch15_11_01(int32_t *bits, int32_t *decbits);
|
||||
|
||||
|
||||
//!< Preamble decoding
|
||||
uint16_t d_preambles_symbols[BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS];
|
||||
// Preamble decoding
|
||||
int32_t *d_preamble_samples;
|
||||
int32_t *d_secondary_code_symbols;
|
||||
uint32_t d_samples_per_symbol;
|
||||
@@ -90,30 +83,29 @@ private:
|
||||
int32_t d_samples_per_preamble;
|
||||
int32_t d_preamble_period_samples;
|
||||
double *d_subframe_symbols;
|
||||
uint32_t d_subframe_length_symbols;
|
||||
uint32_t d_required_symbols;
|
||||
|
||||
//!< Storage for incoming data
|
||||
std::deque<float> d_symbol_history;
|
||||
// Storage for incoming data
|
||||
boost::circular_buffer<float> d_symbol_history;
|
||||
|
||||
//!< Variables for internal functionality
|
||||
uint64_t d_sample_counter; //!< Sample counter as an index (1,2,3,..etc) indicating number of samples processed
|
||||
uint64_t d_preamble_index; //!< Index of sample number where preamble was found
|
||||
uint32_t d_stat; //!< Status of decoder
|
||||
bool d_flag_frame_sync; //!< Indicate when a frame sync is achieved
|
||||
bool d_flag_preamble; //!< Flag indicating when preamble was found
|
||||
int32_t d_CRC_error_counter; //!< Number of failed CRC operations
|
||||
bool flag_SOW_set; //!< Indicates when time of week is set
|
||||
// Variables for internal functionality
|
||||
uint64_t d_sample_counter; // Sample counter as an index (1,2,3,..etc) indicating number of samples processed
|
||||
uint64_t d_preamble_index; // Index of sample number where preamble was found
|
||||
uint32_t d_stat; // Status of decoder
|
||||
bool d_flag_frame_sync; // Indicate when a frame sync is achieved
|
||||
bool d_flag_preamble; // Flag indicating when preamble was found
|
||||
int32_t d_CRC_error_counter; // Number of failed CRC operations
|
||||
bool flag_SOW_set; // Indicates when time of week is set
|
||||
|
||||
//!< Navigation Message variable
|
||||
// Navigation Message variable
|
||||
Beidou_Dnav_Navigation_Message d_nav;
|
||||
|
||||
//!< Values to populate gnss synchronization structure
|
||||
// Values to populate gnss synchronization structure
|
||||
uint32_t d_TOW_at_Preamble_ms;
|
||||
uint32_t d_TOW_at_current_symbol_ms;
|
||||
bool Flag_valid_word;
|
||||
|
||||
//!< Satellite Information and logging capacity
|
||||
// Satellite Information and logging capacity
|
||||
Gnss_Satellite d_satellite;
|
||||
int32_t d_channel;
|
||||
bool d_dump;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file galileo_telemetry_decoder_cc.cc
|
||||
* \file galileo_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a Galileo unified INAV and FNAV message demodulator block
|
||||
* \author Javier Arribas 2018. jarribas(at)cttc.es
|
||||
*
|
||||
@@ -29,32 +29,41 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "galileo_telemetry_decoder_cc.h"
|
||||
#include "galileo_telemetry_decoder_gs.h"
|
||||
#include "Galileo_E1.h" // for GALILEO_E1_CODE_PERIOD_MS
|
||||
#include "Galileo_E5a.h" // for GALILEO_E5A_CODE_PERIO...
|
||||
#include "convolutional.h"
|
||||
#include "display.h"
|
||||
#include "galileo_almanac_helper.h" // for Galileo_Almanac_Helper
|
||||
#include "galileo_ephemeris.h" // for Galileo_Ephemeris
|
||||
#include "galileo_iono.h" // for Galileo_Iono
|
||||
#include "galileo_utc_model.h" // for Galileo_Utc_Model
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||
#include <iostream>
|
||||
#include <cmath> // for fmod
|
||||
#include <cstdlib> // for abs
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
|
||||
#define CRC_ERROR_LIMIT 6
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
|
||||
galileo_telemetry_decoder_cc_sptr
|
||||
galileo_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, int frame_type, bool dump)
|
||||
galileo_telemetry_decoder_gs_sptr
|
||||
galileo_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump)
|
||||
{
|
||||
return galileo_telemetry_decoder_cc_sptr(new galileo_telemetry_decoder_cc(satellite, frame_type, dump));
|
||||
return galileo_telemetry_decoder_gs_sptr(new galileo_telemetry_decoder_gs(satellite, frame_type, dump));
|
||||
}
|
||||
|
||||
|
||||
galileo_telemetry_decoder_cc::galileo_telemetry_decoder_cc(
|
||||
galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite, int frame_type,
|
||||
bool dump) : gr::block("galileo_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
bool dump) : gr::block("galileo_telemetry_decoder_gs", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
// Ephemeris data port out
|
||||
@@ -213,7 +222,7 @@ galileo_telemetry_decoder_cc::galileo_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
galileo_telemetry_decoder_cc::~galileo_telemetry_decoder_cc()
|
||||
galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs()
|
||||
{
|
||||
volk_gnsssdr_free(d_preamble_samples);
|
||||
if (d_frame_type == 2)
|
||||
@@ -239,14 +248,14 @@ galileo_telemetry_decoder_cc::~galileo_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits)
|
||||
void galileo_telemetry_decoder_gs::viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits)
|
||||
{
|
||||
Viterbi(page_part_bits, out0, state0, out1, state1,
|
||||
page_part_symbols, KK, nn, DataLength);
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::deinterleaver(int32_t rows, int32_t cols, const double *in, double *out)
|
||||
void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, const double *in, double *out)
|
||||
{
|
||||
for (int32_t r = 0; r < rows; r++)
|
||||
{
|
||||
@@ -258,7 +267,7 @@ void galileo_telemetry_decoder_cc::deinterleaver(int32_t rows, int32_t cols, con
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::decode_INAV_word(double *page_part_symbols, int32_t frame_length)
|
||||
void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
auto *page_part_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
@@ -352,7 +361,7 @@ void galileo_telemetry_decoder_cc::decode_INAV_word(double *page_part_symbols, i
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::decode_FNAV_word(double *page_symbols, int32_t frame_length)
|
||||
void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
auto *page_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
@@ -420,7 +429,7 @@ void galileo_telemetry_decoder_cc::decode_FNAV_word(double *page_symbols, int32_
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void galileo_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite;
|
||||
@@ -428,7 +437,7 @@ void galileo_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void galileo_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
DLOG(INFO) << "Navigation channel set to " << channel;
|
||||
@@ -455,7 +464,7 @@ void galileo_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
int galileo_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t corr_value = 0;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file galileo_telemetry_decoder_cc.h
|
||||
* \file galileo_telemetry_decoder_gs.h
|
||||
* \brief Implementation of a Galileo unified INAV and FNAV message demodulator block
|
||||
* \author Javier Arribas 2018. jarribas(at)cttc.es
|
||||
*
|
||||
@@ -29,38 +29,34 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GNSS_SDR_GALILEO_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GALILEO_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GALILEO_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GALILEO_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "Galileo_E1.h"
|
||||
#include "Galileo_E5a.h"
|
||||
#include "galileo_almanac_helper.h"
|
||||
#include "galileo_ephemeris.h"
|
||||
#include "galileo_fnav_message.h"
|
||||
#include "galileo_iono.h"
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include "galileo_navigation_message.h"
|
||||
#include "galileo_utc_model.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <gnuradio/block.h>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <cstdint>
|
||||
|
||||
class galileo_telemetry_decoder_cc;
|
||||
class galileo_telemetry_decoder_gs;
|
||||
|
||||
using galileo_telemetry_decoder_cc_sptr = boost::shared_ptr<galileo_telemetry_decoder_cc>;
|
||||
using galileo_telemetry_decoder_gs_sptr = boost::shared_ptr<galileo_telemetry_decoder_gs>;
|
||||
|
||||
galileo_telemetry_decoder_cc_sptr galileo_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the INAV and FNAV data defined in Galileo ICD
|
||||
*/
|
||||
class galileo_telemetry_decoder_cc : public gr::block
|
||||
class galileo_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~galileo_telemetry_decoder_cc();
|
||||
~galileo_telemetry_decoder_gs();
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
int32_t flag_even_word_arrived;
|
||||
@@ -72,9 +68,9 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend galileo_telemetry_decoder_cc_sptr
|
||||
galileo_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
galileo_telemetry_decoder_cc(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
friend galileo_telemetry_decoder_gs_sptr
|
||||
galileo_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
galileo_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
|
||||
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file glonass_l1_ca_telemetry_decoder_cc.cc
|
||||
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file glonass_l1_ca_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a GLONASS L1 C/A NAV data decoder block
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||
*
|
||||
@@ -31,27 +30,34 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "glonass_l1_ca_telemetry_decoder_cc.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "glonass_l1_ca_telemetry_decoder_gs.h"
|
||||
#include "glonass_gnav_almanac.h"
|
||||
#include "glonass_gnav_ephemeris.h"
|
||||
#include "glonass_gnav_utc_model.h"
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <cmath> // for floor, round
|
||||
#include <cstdlib> // for abs, malloc
|
||||
#include <cstring> // for memcpy
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
#define CRC_ERROR_LIMIT 6
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
|
||||
glonass_l1_ca_telemetry_decoder_cc_sptr
|
||||
glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
glonass_l1_ca_telemetry_decoder_gs_sptr
|
||||
glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return glonass_l1_ca_telemetry_decoder_cc_sptr(new glonass_l1_ca_telemetry_decoder_cc(satellite, dump));
|
||||
return glonass_l1_ca_telemetry_decoder_gs_sptr(new glonass_l1_ca_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
glonass_l1_ca_telemetry_decoder_cc::glonass_l1_ca_telemetry_decoder_cc(
|
||||
glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("glonass_l1_ca_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
bool dump) : gr::block("glonass_l1_ca_telemetry_decoder_gs", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
// Ephemeris data port out
|
||||
@@ -109,7 +115,7 @@ glonass_l1_ca_telemetry_decoder_cc::glonass_l1_ca_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
glonass_l1_ca_telemetry_decoder_cc::~glonass_l1_ca_telemetry_decoder_cc()
|
||||
glonass_l1_ca_telemetry_decoder_gs::~glonass_l1_ca_telemetry_decoder_gs()
|
||||
{
|
||||
delete d_preambles_symbols;
|
||||
if (d_dump_file.is_open() == true)
|
||||
@@ -126,7 +132,7 @@ glonass_l1_ca_telemetry_decoder_cc::~glonass_l1_ca_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void glonass_l1_ca_telemetry_decoder_cc::decode_string(const double *frame_symbols, int32_t frame_length)
|
||||
void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length)
|
||||
{
|
||||
double chip_acc = 0.0;
|
||||
int32_t chip_acc_counter = 0;
|
||||
@@ -226,7 +232,7 @@ void glonass_l1_ca_telemetry_decoder_cc::decode_string(const double *frame_symbo
|
||||
}
|
||||
|
||||
|
||||
void glonass_l1_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void glonass_l1_ca_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite;
|
||||
@@ -234,7 +240,7 @@ void glonass_l1_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &sat
|
||||
}
|
||||
|
||||
|
||||
void glonass_l1_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void glonass_l1_ca_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "Navigation channel set to " << channel;
|
||||
@@ -261,7 +267,7 @@ void glonass_l1_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int glonass_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t corr_value = 0;
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file glonass_l1_ca_telemetry_decoder_cc.h
|
||||
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file glonass_l1_ca_telemetry_decoder_gs.h
|
||||
* \brief Implementation of a GLONASS L1 C/A NAV data decoder block
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||
*
|
||||
@@ -30,28 +29,28 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "GLONASS_L1_L2_CA.h"
|
||||
#include "glonass_gnav_almanac.h"
|
||||
#include "glonass_gnav_ephemeris.h"
|
||||
#include "glonass_gnav_navigation_message.h"
|
||||
#include "glonass_gnav_utc_model.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <gnuradio/block.h>
|
||||
#include <fstream>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h> // for block
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstdint>
|
||||
#include <fstream> // for ofstream
|
||||
#include <string>
|
||||
|
||||
|
||||
class glonass_l1_ca_telemetry_decoder_cc;
|
||||
class glonass_l1_ca_telemetry_decoder_gs;
|
||||
|
||||
using glonass_l1_ca_telemetry_decoder_cc_sptr = boost::shared_ptr<glonass_l1_ca_telemetry_decoder_cc>;
|
||||
using glonass_l1_ca_telemetry_decoder_gs_sptr = boost::shared_ptr<glonass_l1_ca_telemetry_decoder_gs>;
|
||||
|
||||
glonass_l1_ca_telemetry_decoder_cc_sptr glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
|
||||
@@ -59,10 +58,10 @@ glonass_l1_ca_telemetry_decoder_cc_sptr glonass_l1_ca_make_telemetry_decoder_cc(
|
||||
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||
*
|
||||
*/
|
||||
class glonass_l1_ca_telemetry_decoder_cc : public gr::block
|
||||
class glonass_l1_ca_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~glonass_l1_ca_telemetry_decoder_cc(); //!< Class destructor
|
||||
~glonass_l1_ca_telemetry_decoder_gs(); //!< Class destructor
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
|
||||
@@ -73,9 +72,9 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend glonass_l1_ca_telemetry_decoder_cc_sptr
|
||||
glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l1_ca_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend glonass_l1_ca_telemetry_decoder_gs_sptr
|
||||
glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
void decode_string(const double *symbols, int32_t frame_length);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file glonass_l2_ca_telemetry_decoder_cc.cc
|
||||
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file glonass_l2_ca_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a GLONASS L2 C/A NAV data decoder block
|
||||
* \author Damian Miralles, 2018. dmiralles2009(at)gmail.com
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@@ -30,28 +29,35 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "glonass_l2_ca_telemetry_decoder_cc.h"
|
||||
#include "glonass_l2_ca_telemetry_decoder_gs.h"
|
||||
#include "display.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "glonass_gnav_almanac.h"
|
||||
#include "glonass_gnav_ephemeris.h"
|
||||
#include "glonass_gnav_utc_model.h"
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <cmath> // for floor, round
|
||||
#include <cstdlib> // for abs, malloc
|
||||
#include <cstring> // for memcpy
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
#define CRC_ERROR_LIMIT 6
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
|
||||
glonass_l2_ca_telemetry_decoder_cc_sptr
|
||||
glonass_l2_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
glonass_l2_ca_telemetry_decoder_gs_sptr
|
||||
glonass_l2_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return glonass_l2_ca_telemetry_decoder_cc_sptr(new glonass_l2_ca_telemetry_decoder_cc(satellite, dump));
|
||||
return glonass_l2_ca_telemetry_decoder_gs_sptr(new glonass_l2_ca_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
glonass_l2_ca_telemetry_decoder_cc::glonass_l2_ca_telemetry_decoder_cc(
|
||||
glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("glonass_l2_ca_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
bool dump) : gr::block("glonass_l2_ca_telemetry_decoder_gs", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
// Ephemeris data port out
|
||||
@@ -109,7 +115,7 @@ glonass_l2_ca_telemetry_decoder_cc::glonass_l2_ca_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
glonass_l2_ca_telemetry_decoder_cc::~glonass_l2_ca_telemetry_decoder_cc()
|
||||
glonass_l2_ca_telemetry_decoder_gs::~glonass_l2_ca_telemetry_decoder_gs()
|
||||
{
|
||||
delete d_preambles_symbols;
|
||||
if (d_dump_file.is_open() == true)
|
||||
@@ -126,7 +132,7 @@ glonass_l2_ca_telemetry_decoder_cc::~glonass_l2_ca_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void glonass_l2_ca_telemetry_decoder_cc::decode_string(const double *frame_symbols, int32_t frame_length)
|
||||
void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length)
|
||||
{
|
||||
double chip_acc = 0.0;
|
||||
int32_t chip_acc_counter = 0;
|
||||
@@ -226,7 +232,7 @@ void glonass_l2_ca_telemetry_decoder_cc::decode_string(const double *frame_symbo
|
||||
}
|
||||
|
||||
|
||||
void glonass_l2_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void glonass_l2_ca_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite;
|
||||
@@ -234,7 +240,7 @@ void glonass_l2_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &sat
|
||||
}
|
||||
|
||||
|
||||
void glonass_l2_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void glonass_l2_ca_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "Navigation channel set to " << channel;
|
||||
@@ -261,7 +267,7 @@ void glonass_l2_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int glonass_l2_ca_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t corr_value = 0;
|
||||
@@ -1,7 +1,6 @@
|
||||
/*!
|
||||
* \file glonass_l2_ca_telemetry_decoder_cc.h
|
||||
* \brief Implementation of an adapter of a GLONASS L2 C/A NAV data decoder block
|
||||
* to a TelemetryDecoderInterface
|
||||
* \file glonass_l2_ca_telemetry_decoder_gs.h
|
||||
* \brief Implementation of a GLONASS L2 C/A NAV data decoder block
|
||||
* \author Damian Miralles, 2018. dmiralles2009(at)gmail.com
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@@ -29,51 +28,51 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_GLONASS_L2_CA_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GLONASS_L2_CA_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GLONASS_L2_CA_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GLONASS_L2_CA_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "GLONASS_L1_L2_CA.h"
|
||||
#include "glonass_gnav_almanac.h"
|
||||
#include "glonass_gnav_ephemeris.h"
|
||||
#include "glonass_gnav_navigation_message.h"
|
||||
#include "glonass_gnav_utc_model.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h>
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstdint>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
|
||||
class glonass_l2_ca_telemetry_decoder_cc;
|
||||
class glonass_l2_ca_telemetry_decoder_gs;
|
||||
|
||||
using glonass_l2_ca_telemetry_decoder_cc_sptr = boost::shared_ptr<glonass_l2_ca_telemetry_decoder_cc>;
|
||||
using glonass_l2_ca_telemetry_decoder_gs_sptr = boost::shared_ptr<glonass_l2_ca_telemetry_decoder_gs>;
|
||||
|
||||
glonass_l2_ca_telemetry_decoder_cc_sptr glonass_l2_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
|
||||
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||
*
|
||||
*/
|
||||
class glonass_l2_ca_telemetry_decoder_cc : public gr::block
|
||||
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
|
||||
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||
*
|
||||
*/
|
||||
class glonass_l2_ca_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~glonass_l2_ca_telemetry_decoder_cc(); //!< Class destructor
|
||||
~glonass_l2_ca_telemetry_decoder_gs(); //!< Class destructor
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
|
||||
/*!
|
||||
* \brief This is where all signal processing takes place
|
||||
*/
|
||||
* \brief This is where all signal processing takes place
|
||||
*/
|
||||
int general_work(int noutput_items, gr_vector_int &ninput_items,
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend glonass_l2_ca_telemetry_decoder_cc_sptr
|
||||
glonass_l2_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l2_ca_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend glonass_l2_ca_telemetry_decoder_gs_sptr
|
||||
glonass_l2_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
glonass_l2_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
void decode_string(const double *symbols, int32_t frame_length);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l1_ca_telemetry_decoder_cc.cc
|
||||
* \file gps_l1_ca_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a NAV message demodulator block based on
|
||||
* Kay Borre book MATLAB-based GPS receiver
|
||||
* \author Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
@@ -29,29 +29,37 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "gps_l1_ca_telemetry_decoder_cc.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "gps_l1_ca_telemetry_decoder_gs.h"
|
||||
#include "gps_ephemeris.h" // for Gps_Ephemeris
|
||||
#include "gps_iono.h" // for Gps_Iono
|
||||
#include "gps_utc_model.h" // for Gps_Utc_Model
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||
#include <cmath> // for round
|
||||
#include <cstring> // for memcpy
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr
|
||||
|
||||
|
||||
#ifndef _rotl
|
||||
#define _rotl(X, N) (((X) << (N)) ^ ((X) >> (32 - (N)))) // Used in the parity check algorithm
|
||||
#endif
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
gps_l1_ca_telemetry_decoder_cc_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
gps_l1_ca_telemetry_decoder_gs_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return gps_l1_ca_telemetry_decoder_cc_sptr(new gps_l1_ca_telemetry_decoder_cc(satellite, dump));
|
||||
return gps_l1_ca_telemetry_decoder_gs_sptr(new gps_l1_ca_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
|
||||
gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("gps_navigation_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
bool dump) : gr::block("gps_navigation_gs", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
// Ephemeris data port out
|
||||
@@ -98,7 +106,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
gps_l1_ca_telemetry_decoder_cc::~gps_l1_ca_telemetry_decoder_cc()
|
||||
gps_l1_ca_telemetry_decoder_gs::~gps_l1_ca_telemetry_decoder_gs()
|
||||
{
|
||||
volk_gnsssdr_free(d_preambles_symbols);
|
||||
d_symbol_history.clear();
|
||||
@@ -116,7 +124,7 @@ gps_l1_ca_telemetry_decoder_cc::~gps_l1_ca_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
bool gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(uint32_t gpsword)
|
||||
bool gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(uint32_t gpsword)
|
||||
{
|
||||
uint32_t d1, d2, d3, d4, d5, d6, d7, t, parity;
|
||||
// XOR as many bits in parallel as possible. The magic constants pick
|
||||
@@ -143,7 +151,7 @@ bool gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(uint32_t gpsword)
|
||||
}
|
||||
|
||||
|
||||
void gps_l1_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void gps_l1_ca_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_nav.reset();
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
@@ -153,7 +161,7 @@ void gps_l1_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satelli
|
||||
}
|
||||
|
||||
|
||||
void gps_l1_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void gps_l1_ca_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
d_nav.i_channel_ID = channel;
|
||||
@@ -182,7 +190,7 @@ void gps_l1_ca_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
bool gps_l1_ca_telemetry_decoder_cc::decode_subframe()
|
||||
bool gps_l1_ca_telemetry_decoder_gs::decode_subframe()
|
||||
{
|
||||
char subframe[GPS_SUBFRAME_LENGTH];
|
||||
|
||||
@@ -234,7 +242,7 @@ bool gps_l1_ca_telemetry_decoder_cc::decode_subframe()
|
||||
{
|
||||
GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR)
|
||||
}
|
||||
if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(GPS_frame_4bytes))
|
||||
if (gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(GPS_frame_4bytes))
|
||||
{
|
||||
subframe_synchro_confirmation = true;
|
||||
}
|
||||
@@ -310,7 +318,7 @@ bool gps_l1_ca_telemetry_decoder_cc::decode_subframe()
|
||||
}
|
||||
|
||||
|
||||
int gps_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int gps_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
int32_t preamble_diff_ms = 0;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l1_ca_telemetry_decoder_cc.h
|
||||
* \file gps_l1_ca_telemetry_decoder_gs.h
|
||||
* \brief Interface of a NAV message demodulator block based on
|
||||
* Kay Borre book MATLAB-based GPS receiver
|
||||
* \author Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
@@ -28,33 +28,37 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_GS_H
|
||||
|
||||
#include "GPS_L1_CA.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include "gps_navigation_message.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <gnuradio/block.h>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h> // for block
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstdint> // for int32_t
|
||||
#include <fstream> // for ofstream
|
||||
#include <string> // for string
|
||||
|
||||
class gps_l1_ca_telemetry_decoder_cc;
|
||||
|
||||
using gps_l1_ca_telemetry_decoder_cc_sptr = boost::shared_ptr<gps_l1_ca_telemetry_decoder_cc>;
|
||||
class gps_l1_ca_telemetry_decoder_gs;
|
||||
|
||||
gps_l1_ca_telemetry_decoder_cc_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
using gps_l1_ca_telemetry_decoder_gs_sptr = boost::shared_ptr<gps_l1_ca_telemetry_decoder_gs>;
|
||||
|
||||
gps_l1_ca_telemetry_decoder_gs_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the NAV data defined in IS-GPS-200E
|
||||
*
|
||||
*/
|
||||
class gps_l1_ca_telemetry_decoder_cc : public gr::block
|
||||
class gps_l1_ca_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~gps_l1_ca_telemetry_decoder_cc();
|
||||
~gps_l1_ca_telemetry_decoder_gs();
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int channel); //!< Set receiver's channel
|
||||
|
||||
@@ -65,10 +69,10 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend gps_l1_ca_telemetry_decoder_cc_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend gps_l1_ca_telemetry_decoder_gs_sptr
|
||||
gps_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
gps_l1_ca_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
bool gps_word_parityCheck(uint32_t gpsword);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l2c_telemetry_decoder_cc.cc
|
||||
* \file gps_l2c_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a NAV message demodulator block based on
|
||||
* Kay Borre book MATLAB-based GPS receiver
|
||||
* \author Javier Arribas, 2015. jarribas(at)cttc.es
|
||||
@@ -30,28 +30,33 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "gps_l2c_telemetry_decoder_cc.h"
|
||||
#include "gps_l2c_telemetry_decoder_gs.h"
|
||||
#include "GPS_L2C.h" // for GPS_L2_CNAV_DATA_PAGE_BITS, GPS_L...
|
||||
#include "display.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "gps_cnav_ephemeris.h" // for Gps_CNAV_Ephemeris
|
||||
#include "gps_cnav_iono.h" // for Gps_CNAV_Iono
|
||||
#include "gps_cnav_utc_model.h" // for Gps_CNAV_Utc_Model
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <bitset>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <bitset> // for bitset
|
||||
#include <cmath> // for round
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
gps_l2c_telemetry_decoder_cc_sptr
|
||||
gps_l2c_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
gps_l2c_telemetry_decoder_gs_sptr
|
||||
gps_l2c_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return gps_l2c_telemetry_decoder_cc_sptr(new gps_l2c_telemetry_decoder_cc(satellite, dump));
|
||||
return gps_l2c_telemetry_decoder_gs_sptr(new gps_l2c_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
gps_l2c_telemetry_decoder_cc::gps_l2c_telemetry_decoder_cc(
|
||||
const Gnss_Satellite &satellite, bool dump) : gr::block("gps_l2c_telemetry_decoder_cc",
|
||||
gps_l2c_telemetry_decoder_gs::gps_l2c_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite, bool dump) : gr::block("gps_l2c_telemetry_decoder_gs",
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
@@ -74,7 +79,7 @@ gps_l2c_telemetry_decoder_cc::gps_l2c_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
gps_l2c_telemetry_decoder_cc::~gps_l2c_telemetry_decoder_cc()
|
||||
gps_l2c_telemetry_decoder_gs::~gps_l2c_telemetry_decoder_gs()
|
||||
{
|
||||
if (d_dump_file.is_open() == true)
|
||||
{
|
||||
@@ -90,14 +95,14 @@ gps_l2c_telemetry_decoder_cc::~gps_l2c_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void gps_l2c_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void gps_l2c_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
DLOG(INFO) << "GPS L2C CNAV telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite;
|
||||
}
|
||||
|
||||
|
||||
void gps_l2c_telemetry_decoder_cc::set_channel(int channel)
|
||||
void gps_l2c_telemetry_decoder_gs::set_channel(int channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "GPS L2C CNAV channel set to " << channel;
|
||||
@@ -125,7 +130,7 @@ void gps_l2c_telemetry_decoder_cc::set_channel(int channel)
|
||||
}
|
||||
|
||||
|
||||
int gps_l2c_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int gps_l2c_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
// get pointers on in- and output gnss-synchro objects
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l2c_telemetry_decoder_cc.h
|
||||
* \file gps_l2c_telemetry_decoder_gs.h
|
||||
* \brief Interface of a CNAV message demodulator block based on
|
||||
* Kay Borre book MATLAB-based GPS receiver
|
||||
* \author Javier Arribas, 2015. jarribas(at)cttc.es
|
||||
@@ -28,46 +28,40 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_GPS_L2C_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GPS_L2C_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GPS_L2C_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GPS_L2C_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "GPS_L2C.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gps_cnav_ephemeris.h"
|
||||
#include "gps_cnav_iono.h"
|
||||
#include "gps_cnav_navigation_message.h"
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h>
|
||||
#include <algorithm> // for copy
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstdint>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <utility> // for pair
|
||||
#include <vector>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "bits.h"
|
||||
#include "cnav_msg.h"
|
||||
#include "edc.h"
|
||||
}
|
||||
|
||||
|
||||
class gps_l2c_telemetry_decoder_cc;
|
||||
class gps_l2c_telemetry_decoder_gs;
|
||||
|
||||
using gps_l2c_telemetry_decoder_cc_sptr = boost::shared_ptr<gps_l2c_telemetry_decoder_cc>;
|
||||
using gps_l2c_telemetry_decoder_gs_sptr = boost::shared_ptr<gps_l2c_telemetry_decoder_gs>;
|
||||
|
||||
gps_l2c_telemetry_decoder_cc_sptr
|
||||
gps_l2c_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l2c_telemetry_decoder_gs_sptr
|
||||
gps_l2c_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the SBAS integrity and corrections data defined in RTCA MOPS DO-229
|
||||
*
|
||||
*/
|
||||
class gps_l2c_telemetry_decoder_cc : public gr::block
|
||||
class gps_l2c_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~gps_l2c_telemetry_decoder_cc();
|
||||
~gps_l2c_telemetry_decoder_gs();
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
|
||||
@@ -78,9 +72,9 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend gps_l2c_telemetry_decoder_cc_sptr
|
||||
gps_l2c_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l2c_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend gps_l2c_telemetry_decoder_gs_sptr
|
||||
gps_l2c_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l2c_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
bool d_dump;
|
||||
Gnss_Satellite d_satellite;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l5_telemetry_decoder_cc.cc
|
||||
* \file gps_l5_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a CNAV message demodulator block
|
||||
* \author Antonio Ramos, 2017. antonio.ramos(at)cttc.es
|
||||
*
|
||||
@@ -29,30 +29,32 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "gps_l5_telemetry_decoder_cc.h"
|
||||
#include "gps_l5_telemetry_decoder_gs.h"
|
||||
#include "display.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include "gps_cnav_ephemeris.h"
|
||||
#include "gps_cnav_iono.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "gps_cnav_utc_model.h" // for Gps_CNAV_Utc_Model
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <pmt/pmt.h> // for make_any
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <bitset>
|
||||
#include <cstdlib> // for abs
|
||||
#include <exception> // for exception
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
gps_l5_telemetry_decoder_cc_sptr
|
||||
gps_l5_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
gps_l5_telemetry_decoder_gs_sptr
|
||||
gps_l5_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return gps_l5_telemetry_decoder_cc_sptr(new gps_l5_telemetry_decoder_cc(satellite, dump));
|
||||
return gps_l5_telemetry_decoder_gs_sptr(new gps_l5_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
gps_l5_telemetry_decoder_cc::gps_l5_telemetry_decoder_cc(
|
||||
const Gnss_Satellite &satellite, bool dump) : gr::block("gps_l5_telemetry_decoder_cc",
|
||||
gps_l5_telemetry_decoder_gs::gps_l5_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite, bool dump) : gr::block("gps_l5_telemetry_decoder_gs",
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
@@ -86,7 +88,7 @@ gps_l5_telemetry_decoder_cc::gps_l5_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
gps_l5_telemetry_decoder_cc::~gps_l5_telemetry_decoder_cc()
|
||||
gps_l5_telemetry_decoder_gs::~gps_l5_telemetry_decoder_gs()
|
||||
{
|
||||
if (d_dump_file.is_open() == true)
|
||||
{
|
||||
@@ -102,7 +104,7 @@ gps_l5_telemetry_decoder_cc::~gps_l5_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void gps_l5_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void gps_l5_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
DLOG(INFO) << "GPS L5 CNAV telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite;
|
||||
@@ -110,7 +112,7 @@ void gps_l5_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
}
|
||||
|
||||
|
||||
void gps_l5_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void gps_l5_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
d_CNAV_Message.reset();
|
||||
@@ -139,7 +141,7 @@ void gps_l5_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
}
|
||||
|
||||
|
||||
int gps_l5_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int gps_l5_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
// get pointers on in- and output gnss-synchro objects
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file gps_l5_telemetry_decoder_cc.h
|
||||
* \file gps_l5_telemetry_decoder_gs.h
|
||||
* \brief Interface of a CNAV message demodulator block
|
||||
* \author Antonio Ramos, 2017. antonio.ramos(at)cttc.es
|
||||
* -------------------------------------------------------------------------
|
||||
@@ -27,54 +27,51 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_GPS_L5_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_GPS_L5_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_GPS_L5_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_GPS_L5_TELEMETRY_DECODER_GS_H
|
||||
|
||||
|
||||
#include "GPS_L5.h"
|
||||
#include "gnss_satellite.h"
|
||||
#include "gps_cnav_navigation_message.h"
|
||||
#include "GPS_L5.h" // for GPS_L5I_NH_CODE_LENGTH
|
||||
#include "gnss_satellite.h" // for Gnss_Satellite
|
||||
#include "gps_cnav_navigation_message.h" // for Gps_CNAV_Navigation_Message
|
||||
#include <boost/circular_buffer.hpp>
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h>
|
||||
#include <algorithm>
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstdint>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "bits.h"
|
||||
#include "cnav_msg.h"
|
||||
#include "edc.h"
|
||||
}
|
||||
|
||||
|
||||
class gps_l5_telemetry_decoder_cc;
|
||||
class gps_l5_telemetry_decoder_gs;
|
||||
|
||||
using gps_l5_telemetry_decoder_cc_sptr = boost::shared_ptr<gps_l5_telemetry_decoder_cc>;
|
||||
using gps_l5_telemetry_decoder_gs_sptr = boost::shared_ptr<gps_l5_telemetry_decoder_gs>;
|
||||
|
||||
gps_l5_telemetry_decoder_cc_sptr
|
||||
gps_l5_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l5_telemetry_decoder_gs_sptr
|
||||
gps_l5_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a GPS L5 Telemetry decoder
|
||||
*
|
||||
*/
|
||||
class gps_l5_telemetry_decoder_cc : public gr::block
|
||||
class gps_l5_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~gps_l5_telemetry_decoder_cc();
|
||||
~gps_l5_telemetry_decoder_gs();
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
int general_work(int noutput_items, gr_vector_int &ninput_items,
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend gps_l5_telemetry_decoder_cc_sptr
|
||||
gps_l5_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l5_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend gps_l5_telemetry_decoder_gs_sptr
|
||||
gps_l5_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
gps_l5_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
bool d_dump;
|
||||
Gnss_Satellite d_satellite;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file sbas_l1_telemetry_decoder_cc.cc
|
||||
* \file sbas_l1_telemetry_decoder_gs.cc
|
||||
* \brief Implementation of a SBAS telemetry data decoder block
|
||||
* \author Daniel Fehr 2013. daniel.co(at)bluewin.ch
|
||||
*
|
||||
@@ -28,15 +28,15 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "sbas_l1_telemetry_decoder_cc.h"
|
||||
#include "sbas_l1_telemetry_decoder_gs.h"
|
||||
#include "gnss_synchro.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "viterbi_decoder.h"
|
||||
#include <glog/logging.h>
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
using google::LogMessage;
|
||||
#include <pmt/pmt_sugar.h> // for mp
|
||||
#include <cmath> // for abs
|
||||
#include <exception> // for exception
|
||||
#include <iomanip> // for operator<<, setw
|
||||
|
||||
// logging levels
|
||||
#define EVENT 2 // logs important events which don't occur every block
|
||||
@@ -45,16 +45,16 @@ using google::LogMessage;
|
||||
#define LMORE 5 //
|
||||
|
||||
|
||||
sbas_l1_telemetry_decoder_cc_sptr
|
||||
sbas_l1_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump)
|
||||
sbas_l1_telemetry_decoder_gs_sptr
|
||||
sbas_l1_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump)
|
||||
{
|
||||
return sbas_l1_telemetry_decoder_cc_sptr(new sbas_l1_telemetry_decoder_cc(satellite, dump));
|
||||
return sbas_l1_telemetry_decoder_gs_sptr(new sbas_l1_telemetry_decoder_gs(satellite, dump));
|
||||
}
|
||||
|
||||
|
||||
sbas_l1_telemetry_decoder_cc::sbas_l1_telemetry_decoder_cc(
|
||||
sbas_l1_telemetry_decoder_gs::sbas_l1_telemetry_decoder_gs(
|
||||
const Gnss_Satellite &satellite,
|
||||
bool dump) : gr::block("sbas_l1_telemetry_decoder_cc",
|
||||
bool dump) : gr::block("sbas_l1_telemetry_decoder_gs",
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||
{
|
||||
@@ -70,7 +70,7 @@ sbas_l1_telemetry_decoder_cc::sbas_l1_telemetry_decoder_cc(
|
||||
}
|
||||
|
||||
|
||||
sbas_l1_telemetry_decoder_cc::~sbas_l1_telemetry_decoder_cc()
|
||||
sbas_l1_telemetry_decoder_gs::~sbas_l1_telemetry_decoder_gs()
|
||||
{
|
||||
if (d_dump_file.is_open() == true)
|
||||
{
|
||||
@@ -86,14 +86,14 @@ sbas_l1_telemetry_decoder_cc::~sbas_l1_telemetry_decoder_cc()
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::set_satellite(const Gnss_Satellite &satellite)
|
||||
void sbas_l1_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
LOG(INFO) << "SBAS telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite;
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
void sbas_l1_telemetry_decoder_gs::set_channel(int32_t channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
LOG(INFO) << "SBAS channel set to " << channel;
|
||||
@@ -101,7 +101,7 @@ void sbas_l1_telemetry_decoder_cc::set_channel(int32_t channel)
|
||||
|
||||
|
||||
// ### helper class for sample alignment ###
|
||||
sbas_l1_telemetry_decoder_cc::Sample_Aligner::Sample_Aligner()
|
||||
sbas_l1_telemetry_decoder_gs::Sample_Aligner::Sample_Aligner()
|
||||
{
|
||||
d_n_smpls_in_history = 3;
|
||||
d_iir_par = 0.05;
|
||||
@@ -109,10 +109,10 @@ sbas_l1_telemetry_decoder_cc::Sample_Aligner::Sample_Aligner()
|
||||
}
|
||||
|
||||
|
||||
sbas_l1_telemetry_decoder_cc::Sample_Aligner::~Sample_Aligner() = default;
|
||||
sbas_l1_telemetry_decoder_gs::Sample_Aligner::~Sample_Aligner() = default;
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Sample_Aligner::reset()
|
||||
void sbas_l1_telemetry_decoder_gs::Sample_Aligner::reset()
|
||||
{
|
||||
d_past_sample = 0;
|
||||
d_corr_paired = 0;
|
||||
@@ -124,7 +124,7 @@ void sbas_l1_telemetry_decoder_cc::Sample_Aligner::reset()
|
||||
/*
|
||||
* samples length must be a multiple of two
|
||||
*/
|
||||
bool sbas_l1_telemetry_decoder_cc::Sample_Aligner::get_symbols(const std::vector<double> &samples, std::vector<double> &symbols)
|
||||
bool sbas_l1_telemetry_decoder_gs::Sample_Aligner::get_symbols(const std::vector<double> &samples, std::vector<double> &symbols)
|
||||
{
|
||||
double smpls[3] = {};
|
||||
double corr_diff;
|
||||
@@ -134,12 +134,12 @@ bool sbas_l1_telemetry_decoder_cc::Sample_Aligner::get_symbols(const std::vector
|
||||
VLOG(FLOW) << "get_symbols(): "
|
||||
<< "d_past_sample=" << d_past_sample << "\tsamples size=" << samples.size();
|
||||
|
||||
for (uint32_t i_sym = 0; i_sym < samples.size() / sbas_l1_telemetry_decoder_cc::D_SAMPLES_PER_SYMBOL; i_sym++)
|
||||
for (uint32_t i_sym = 0; i_sym < samples.size() / sbas_l1_telemetry_decoder_gs::D_SAMPLES_PER_SYMBOL; i_sym++)
|
||||
{
|
||||
// get the next samples
|
||||
for (int32_t i = 0; i < d_n_smpls_in_history; i++)
|
||||
{
|
||||
smpls[i] = static_cast<int32_t>(i_sym) * sbas_l1_telemetry_decoder_cc::D_SAMPLES_PER_SYMBOL + i - 1 == -1 ? d_past_sample : samples[i_sym * sbas_l1_telemetry_decoder_cc::D_SAMPLES_PER_SYMBOL + i - 1];
|
||||
smpls[i] = static_cast<int32_t>(i_sym) * sbas_l1_telemetry_decoder_gs::D_SAMPLES_PER_SYMBOL + i - 1 == -1 ? d_past_sample : samples[i_sym * sbas_l1_telemetry_decoder_gs::D_SAMPLES_PER_SYMBOL + i - 1];
|
||||
}
|
||||
|
||||
// update the pseudo correlations (IIR method) of the two possible alignments
|
||||
@@ -182,7 +182,7 @@ bool sbas_l1_telemetry_decoder_cc::Sample_Aligner::get_symbols(const std::vector
|
||||
|
||||
|
||||
// ### helper class for symbol alignment and viterbi decoding ###
|
||||
sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::Symbol_Aligner_And_Decoder()
|
||||
sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::Symbol_Aligner_And_Decoder()
|
||||
{
|
||||
// convolutional code properties
|
||||
d_KK = 7;
|
||||
@@ -197,14 +197,14 @@ sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::Symbol_Aligner_And_Dec
|
||||
}
|
||||
|
||||
|
||||
sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::~Symbol_Aligner_And_Decoder()
|
||||
sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::~Symbol_Aligner_And_Decoder()
|
||||
{
|
||||
delete d_vd1;
|
||||
delete d_vd2;
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::reset()
|
||||
void sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::reset()
|
||||
{
|
||||
d_past_symbol = 0;
|
||||
d_vd1->reset();
|
||||
@@ -212,7 +212,7 @@ void sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::reset()
|
||||
}
|
||||
|
||||
|
||||
bool sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::get_bits(const std::vector<double> &symbols, std::vector<int32_t> &bits)
|
||||
bool sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::get_bits(const std::vector<double> &symbols, std::vector<int32_t> &bits)
|
||||
{
|
||||
const int32_t traceback_depth = 5 * d_KK;
|
||||
int32_t nbits_requested = symbols.size() / D_SYMBOLS_PER_BIT;
|
||||
@@ -251,13 +251,13 @@ bool sbas_l1_telemetry_decoder_cc::Symbol_Aligner_And_Decoder::get_bits(const st
|
||||
|
||||
|
||||
// ### helper class for detecting the preamble and collect the corresponding message candidates ###
|
||||
void sbas_l1_telemetry_decoder_cc::Frame_Detector::reset()
|
||||
void sbas_l1_telemetry_decoder_gs::Frame_Detector::reset()
|
||||
{
|
||||
d_buffer.clear();
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Frame_Detector::get_frame_candidates(const std::vector<int32_t> &bits, std::vector<std::pair<int32_t, std::vector<int32_t>>> &msg_candidates)
|
||||
void sbas_l1_telemetry_decoder_gs::Frame_Detector::get_frame_candidates(const std::vector<int32_t> &bits, std::vector<std::pair<int32_t, std::vector<int32_t>>> &msg_candidates)
|
||||
{
|
||||
std::stringstream ss;
|
||||
uint32_t sbas_msg_length = 250;
|
||||
@@ -321,12 +321,12 @@ void sbas_l1_telemetry_decoder_cc::Frame_Detector::get_frame_candidates(const st
|
||||
|
||||
|
||||
// ### helper class for checking the CRC of the message candidates ###
|
||||
void sbas_l1_telemetry_decoder_cc::Crc_Verifier::reset()
|
||||
void sbas_l1_telemetry_decoder_gs::Crc_Verifier::reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Crc_Verifier::get_valid_frames(const std::vector<msg_candiate_int_t> &msg_candidates, std::vector<msg_candiate_char_t> &valid_msgs)
|
||||
void sbas_l1_telemetry_decoder_gs::Crc_Verifier::get_valid_frames(const std::vector<msg_candiate_int_t> &msg_candidates, std::vector<msg_candiate_char_t> &valid_msgs)
|
||||
{
|
||||
std::stringstream ss;
|
||||
VLOG(FLOW) << "get_valid_frames(): "
|
||||
@@ -364,7 +364,7 @@ void sbas_l1_telemetry_decoder_cc::Crc_Verifier::get_valid_frames(const std::vec
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Crc_Verifier::zerropad_back_and_convert_to_bytes(const std::vector<int> &msg_candidate, std::vector<uint8_t> &bytes)
|
||||
void sbas_l1_telemetry_decoder_gs::Crc_Verifier::zerropad_back_and_convert_to_bytes(const std::vector<int> &msg_candidate, std::vector<uint8_t> &bytes)
|
||||
{
|
||||
std::stringstream ss;
|
||||
const size_t bits_per_byte = 8;
|
||||
@@ -391,7 +391,7 @@ void sbas_l1_telemetry_decoder_cc::Crc_Verifier::zerropad_back_and_convert_to_by
|
||||
}
|
||||
|
||||
|
||||
void sbas_l1_telemetry_decoder_cc::Crc_Verifier::zerropad_front_and_convert_to_bytes(const std::vector<int32_t> &msg_candidate, std::vector<uint8_t> &bytes)
|
||||
void sbas_l1_telemetry_decoder_gs::Crc_Verifier::zerropad_front_and_convert_to_bytes(const std::vector<int32_t> &msg_candidate, std::vector<uint8_t> &bytes)
|
||||
{
|
||||
std::stringstream ss;
|
||||
const size_t bits_per_byte = 8;
|
||||
@@ -419,7 +419,7 @@ void sbas_l1_telemetry_decoder_cc::Crc_Verifier::zerropad_front_and_convert_to_b
|
||||
}
|
||||
|
||||
|
||||
int sbas_l1_telemetry_decoder_cc::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
int sbas_l1_telemetry_decoder_gs::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||
{
|
||||
VLOG(FLOW) << "general_work(): "
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* \file sbas_l1_telemetry_decoder_cc.h
|
||||
* \file sbas_l1_telemetry_decoder_gs.h
|
||||
* \brief Interface of a SBAS telemetry data decoder block
|
||||
* \author Daniel Fehr 2013. daniel.co(at)bluewin.ch
|
||||
*
|
||||
@@ -28,14 +28,15 @@
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_CC_H
|
||||
#define GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_CC_H
|
||||
#ifndef GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_GS_H
|
||||
#define GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_GS_H
|
||||
|
||||
#include "gnss_satellite.h"
|
||||
#include "viterbi_decoder.h"
|
||||
#include <boost/crc.hpp>
|
||||
#include <boost/crc.hpp> // for crc_optimal
|
||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||
#include <gnuradio/block.h>
|
||||
#include <algorithm> // for copy
|
||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||
#include <cstddef> // for size_t
|
||||
#include <cstdint>
|
||||
#include <deque>
|
||||
#include <fstream>
|
||||
@@ -43,22 +44,23 @@
|
||||
#include <utility> // for pair
|
||||
#include <vector>
|
||||
|
||||
class Viterbi_Decoder;
|
||||
|
||||
class sbas_l1_telemetry_decoder_cc;
|
||||
class sbas_l1_telemetry_decoder_gs;
|
||||
|
||||
using sbas_l1_telemetry_decoder_cc_sptr = boost::shared_ptr<sbas_l1_telemetry_decoder_cc>;
|
||||
using sbas_l1_telemetry_decoder_gs_sptr = boost::shared_ptr<sbas_l1_telemetry_decoder_gs>;
|
||||
|
||||
sbas_l1_telemetry_decoder_cc_sptr
|
||||
sbas_l1_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
sbas_l1_telemetry_decoder_gs_sptr
|
||||
sbas_l1_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the SBAS integrity and corrections data defined in RTCA MOPS DO-229
|
||||
*
|
||||
*/
|
||||
class sbas_l1_telemetry_decoder_cc : public gr::block
|
||||
class sbas_l1_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
public:
|
||||
~sbas_l1_telemetry_decoder_cc();
|
||||
~sbas_l1_telemetry_decoder_gs();
|
||||
void set_satellite(const Gnss_Satellite &satellite); //!< Set satellite PRN
|
||||
void set_channel(int32_t channel); //!< Set receiver's channel
|
||||
|
||||
@@ -69,9 +71,9 @@ public:
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
|
||||
private:
|
||||
friend sbas_l1_telemetry_decoder_cc_sptr
|
||||
sbas_l1_make_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
sbas_l1_telemetry_decoder_cc(const Gnss_Satellite &satellite, bool dump);
|
||||
friend sbas_l1_telemetry_decoder_gs_sptr
|
||||
sbas_l1_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
sbas_l1_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||
|
||||
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits);
|
||||
void align_samples();
|
||||
Reference in New Issue
Block a user