mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-08-30 13:02:40 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
commit
6264a3cbd6
@ -401,7 +401,7 @@ set(GNSSSDR_ARMADILLO_LOCAL_VERSION "9.600.x")
|
|||||||
set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1")
|
set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1")
|
||||||
set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master")
|
set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master")
|
||||||
set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6")
|
set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6")
|
||||||
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.16")
|
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.17")
|
||||||
set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.9")
|
set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.9")
|
||||||
set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "3.9.0")
|
set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "3.9.0")
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ Cloning the GNSS-SDR repository as in the line above will create a folder named
|
|||||||
|-----utils <- some utilities (e.g. Matlab scripts).
|
|-----utils <- some utilities (e.g. Matlab scripts).
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
By default, you will be in the 'master' branch of the Git repository, which corresponds to the lastest stable release. If you want to try the latest developments, you can use the 'next' branch by going to the newly created gnss-sdr folder doing:
|
By default, you will be in the 'master' branch of the Git repository, which corresponds to the latest stable release. If you want to try the latest developments, you can use the 'next' branch by going to the newly created gnss-sdr folder doing:
|
||||||
|
|
||||||
~~~~~~
|
~~~~~~
|
||||||
$ git checkout next
|
$ git checkout next
|
||||||
|
@ -48,7 +48,7 @@ list(APPEND AVAIL_BUILDTYPES
|
|||||||
# known build types in AVAIL_BUILDTYPES. If the build type is found,
|
# known build types in AVAIL_BUILDTYPES. If the build type is found,
|
||||||
# the function exits immediately. If nothing is found by the end of
|
# the function exits immediately. If nothing is found by the end of
|
||||||
# checking all available build types, we exit with an error and list
|
# checking all available build types, we exit with an error and list
|
||||||
# the avialable build types.
|
# the available build types.
|
||||||
########################################################################
|
########################################################################
|
||||||
function(GNSSSDR_CHECK_BUILD_TYPE settype)
|
function(GNSSSDR_CHECK_BUILD_TYPE settype)
|
||||||
string(TOUPPER ${settype} _settype)
|
string(TOUPPER ${settype} _settype)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
### Improvements in Flexibility:
|
### Improvements in Flexibility:
|
||||||
|
|
||||||
|
- Rewritten Control Thread and GNSS Flowgraph for increased control of channels' status and smarter assignation of satellites in multi-band configurations.
|
||||||
- New Tracking parameters allow the configuration of PLL and DLL filters order.
|
- New Tracking parameters allow the configuration of PLL and DLL filters order.
|
||||||
- Added parameter to enable FLL during pull-in time.
|
- Added parameter to enable FLL during pull-in time.
|
||||||
- Configurable pull-in time in the Tracking loops.
|
- Configurable pull-in time in the Tracking loops.
|
||||||
@ -28,7 +29,7 @@
|
|||||||
|
|
||||||
### Improvements in Interoperability:
|
### Improvements in Interoperability:
|
||||||
|
|
||||||
- Added the BeiDou B1I receiver chain.
|
- Added the BeiDou B1I and B3I receiver chains.
|
||||||
- Fix bug in GLONASS dual frequency receiver.
|
- Fix bug in GLONASS dual frequency receiver.
|
||||||
- Added a custom UDP/IP output for PVT data streaming.
|
- Added a custom UDP/IP output for PVT data streaming.
|
||||||
- Improved Monitor block with UDP/IP output for internal receiver's data streaming.
|
- Improved Monitor block with UDP/IP output for internal receiver's data streaming.
|
||||||
@ -43,6 +44,7 @@
|
|||||||
- Applied clang-tidy checks and fixes related to readability: readability-container-size-empty, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-named-parameter, readability-non-const-parameter, readability-string-compare.
|
- Applied clang-tidy checks and fixes related to readability: readability-container-size-empty, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-named-parameter, readability-non-const-parameter, readability-string-compare.
|
||||||
- Improved includes selection following suggestions by include-what-you-use (see https://include-what-you-use.org/), allowing faster compiles, fewer recompiles and making refactoring easier.
|
- Improved includes selection following suggestions by include-what-you-use (see https://include-what-you-use.org/), allowing faster compiles, fewer recompiles and making refactoring easier.
|
||||||
- Deprecated boost::asio::io_service replaced by boost::asio::io_context if Boost > 1.65
|
- Deprecated boost::asio::io_service replaced by boost::asio::io_context if Boost > 1.65
|
||||||
|
- The internal communication mechanism based on gr::msg_queue has been replaced by asynchronous message passing.
|
||||||
|
|
||||||
|
|
||||||
### Improvements in Portability:
|
### Improvements in Portability:
|
||||||
|
@ -126,9 +126,12 @@ rtklib_pvt_gs::rtklib_pvt_gs(uint32_t nchannels,
|
|||||||
{
|
{
|
||||||
// Send feedback message to observables block with the receiver clock offset
|
// Send feedback message to observables block with the receiver clock offset
|
||||||
this->message_port_register_out(pmt::mp("pvt_to_observables"));
|
this->message_port_register_out(pmt::mp("pvt_to_observables"));
|
||||||
|
// Send PVT status to gnss_flowgraph
|
||||||
|
this->message_port_register_out(pmt::mp("status"));
|
||||||
|
|
||||||
d_output_rate_ms = conf_.output_rate_ms;
|
d_output_rate_ms = conf_.output_rate_ms;
|
||||||
d_display_rate_ms = conf_.display_rate_ms;
|
d_display_rate_ms = conf_.display_rate_ms;
|
||||||
|
d_report_rate_ms = 1000; //report every second PVT to gnss_synchro
|
||||||
d_dump = conf_.dump;
|
d_dump = conf_.dump;
|
||||||
d_dump_mat = conf_.dump_mat and d_dump;
|
d_dump_mat = conf_.dump_mat and d_dump;
|
||||||
d_dump_filename = conf_.dump_filename;
|
d_dump_filename = conf_.dump_filename;
|
||||||
@ -3729,10 +3732,19 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PVT MONITOR
|
// PVT MONITOR
|
||||||
if (d_pvt_solver->is_valid_position() and flag_monitor_pvt_enabled)
|
if (d_pvt_solver->is_valid_position())
|
||||||
{
|
{
|
||||||
Monitor_Pvt monitor_pvt = d_pvt_solver->get_monitor_pvt();
|
std::shared_ptr<Monitor_Pvt> monitor_pvt = std::make_shared<Monitor_Pvt>(d_pvt_solver->get_monitor_pvt());
|
||||||
udp_sink_ptr->write_monitor_pvt(monitor_pvt);
|
|
||||||
|
//publish new position to the gnss_flowgraph channel status monitor
|
||||||
|
if (current_RX_time_ms % d_report_rate_ms == 0)
|
||||||
|
{
|
||||||
|
this->message_port_pub(pmt::mp("status"), pmt::make_any(monitor_pvt));
|
||||||
|
}
|
||||||
|
if (flag_monitor_pvt_enabled)
|
||||||
|
{
|
||||||
|
udp_sink_ptr->write_monitor_pvt(monitor_pvt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,6 +169,7 @@ private:
|
|||||||
|
|
||||||
int32_t d_output_rate_ms;
|
int32_t d_output_rate_ms;
|
||||||
int32_t d_display_rate_ms;
|
int32_t d_display_rate_ms;
|
||||||
|
int32_t d_report_rate_ms;
|
||||||
|
|
||||||
std::shared_ptr<Rinex_Printer> rp;
|
std::shared_ptr<Rinex_Printer> rp;
|
||||||
std::shared_ptr<Kml_Printer> d_kml_dump;
|
std::shared_ptr<Kml_Printer> d_kml_dump;
|
||||||
|
@ -51,14 +51,14 @@ Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addre
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(const Monitor_Pvt& monitor_pvt)
|
bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(const std::shared_ptr<Monitor_Pvt>& monitor_pvt)
|
||||||
{
|
{
|
||||||
std::string outbound_data;
|
std::string outbound_data;
|
||||||
if (use_protobuf == false)
|
if (use_protobuf == false)
|
||||||
{
|
{
|
||||||
std::ostringstream archive_stream;
|
std::ostringstream archive_stream;
|
||||||
boost::archive::binary_oarchive oa{archive_stream};
|
boost::archive::binary_oarchive oa{archive_stream};
|
||||||
oa << monitor_pvt;
|
oa << *monitor_pvt.get();
|
||||||
outbound_data = archive_stream.str();
|
outbound_data = archive_stream.str();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -45,8 +45,8 @@ using b_io_context = boost::asio::io_service;
|
|||||||
class Monitor_Pvt_Udp_Sink
|
class Monitor_Pvt_Udp_Sink
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t &port, bool protobuf_enabled);
|
Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t& port, bool protobuf_enabled);
|
||||||
bool write_monitor_pvt(const Monitor_Pvt &monitor_pvt);
|
bool write_monitor_pvt(const std::shared_ptr<Monitor_Pvt>& monitor_pvt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
b_io_context io_context;
|
b_io_context io_context;
|
||||||
|
@ -6217,7 +6217,7 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph
|
|||||||
|
|
||||||
if (version == 2)
|
if (version == 2)
|
||||||
{
|
{
|
||||||
// --------- WAVELENGHT FACTOR
|
// --------- WAVELENGTH FACTOR
|
||||||
// put here real data!
|
// put here real data!
|
||||||
line.clear();
|
line.clear();
|
||||||
line += Rinex_Printer::rightJustify("1", 6);
|
line += Rinex_Printer::rightJustify("1", 6);
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <pmt/pmt.h>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <cstddef> // for size_t
|
#include <cstddef> // for size_t
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
@ -384,7 +384,7 @@ int Rtcm_Printer::init_serial(const std::string& serial_device)
|
|||||||
* Opens the serial device and sets the default baud rate for a RTCM transmission (9600,8,N,1)
|
* Opens the serial device and sets the default baud rate for a RTCM transmission (9600,8,N,1)
|
||||||
*/
|
*/
|
||||||
int32_t fd = 0;
|
int32_t fd = 0;
|
||||||
struct termios options;
|
struct termios options{};
|
||||||
int64_t BAUD;
|
int64_t BAUD;
|
||||||
int64_t DATABITS;
|
int64_t DATABITS;
|
||||||
int64_t STOPBITS;
|
int64_t STOPBITS;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
#include "monitor_pvt.h"
|
#include "monitor_pvt.h"
|
||||||
#include "monitor_pvt.pb.h" // file created by Protocol Buffers at compile time
|
#include "monitor_pvt.pb.h" // file created by Protocol Buffers at compile time
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief This class implements serialization and deserialization of
|
* \brief This class implements serialization and deserialization of
|
||||||
@ -80,40 +80,40 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string createProtobuffer(const Monitor_Pvt& monitor) //!< Serialization into a string
|
inline std::string createProtobuffer(std::shared_ptr<Monitor_Pvt> monitor) //!< Serialization into a string
|
||||||
{
|
{
|
||||||
monitor_.Clear();
|
monitor_.Clear();
|
||||||
|
|
||||||
std::string data;
|
std::string data;
|
||||||
|
|
||||||
monitor_.set_tow_at_current_symbol_ms(monitor.TOW_at_current_symbol_ms);
|
monitor_.set_tow_at_current_symbol_ms(monitor->TOW_at_current_symbol_ms);
|
||||||
monitor_.set_week(monitor.week);
|
monitor_.set_week(monitor->week);
|
||||||
monitor_.set_rx_time(monitor.RX_time);
|
monitor_.set_rx_time(monitor->RX_time);
|
||||||
monitor_.set_user_clk_offset(monitor.user_clk_offset);
|
monitor_.set_user_clk_offset(monitor->user_clk_offset);
|
||||||
monitor_.set_pos_x(monitor.pos_x);
|
monitor_.set_pos_x(monitor->pos_x);
|
||||||
monitor_.set_pos_y(monitor.pos_y);
|
monitor_.set_pos_y(monitor->pos_y);
|
||||||
monitor_.set_pos_z(monitor.pos_z);
|
monitor_.set_pos_z(monitor->pos_z);
|
||||||
monitor_.set_vel_x(monitor.vel_x);
|
monitor_.set_vel_x(monitor->vel_x);
|
||||||
monitor_.set_vel_y(monitor.vel_y);
|
monitor_.set_vel_y(monitor->vel_y);
|
||||||
monitor_.set_vel_z(monitor.vel_z);
|
monitor_.set_vel_z(monitor->vel_z);
|
||||||
monitor_.set_cov_xx(monitor.cov_xx);
|
monitor_.set_cov_xx(monitor->cov_xx);
|
||||||
monitor_.set_cov_yy(monitor.cov_yy);
|
monitor_.set_cov_yy(monitor->cov_yy);
|
||||||
monitor_.set_cov_zz(monitor.cov_zz);
|
monitor_.set_cov_zz(monitor->cov_zz);
|
||||||
monitor_.set_cov_xy(monitor.cov_xy);
|
monitor_.set_cov_xy(monitor->cov_xy);
|
||||||
monitor_.set_cov_yz(monitor.cov_yz);
|
monitor_.set_cov_yz(monitor->cov_yz);
|
||||||
monitor_.set_cov_zx(monitor.cov_zx);
|
monitor_.set_cov_zx(monitor->cov_zx);
|
||||||
monitor_.set_latitude(monitor.latitude);
|
monitor_.set_latitude(monitor->latitude);
|
||||||
monitor_.set_longitude(monitor.longitude);
|
monitor_.set_longitude(monitor->longitude);
|
||||||
monitor_.set_height(monitor.height);
|
monitor_.set_height(monitor->height);
|
||||||
monitor_.set_valid_sats(monitor.valid_sats);
|
monitor_.set_valid_sats(monitor->valid_sats);
|
||||||
monitor_.set_solution_status(monitor.solution_status);
|
monitor_.set_solution_status(monitor->solution_status);
|
||||||
monitor_.set_solution_type(monitor.solution_type);
|
monitor_.set_solution_type(monitor->solution_type);
|
||||||
monitor_.set_ar_ratio_factor(monitor.AR_ratio_factor);
|
monitor_.set_ar_ratio_factor(monitor->AR_ratio_factor);
|
||||||
monitor_.set_ar_ratio_threshold(monitor.AR_ratio_threshold);
|
monitor_.set_ar_ratio_threshold(monitor->AR_ratio_threshold);
|
||||||
monitor_.set_gdop(monitor.gdop);
|
monitor_.set_gdop(monitor->gdop);
|
||||||
monitor_.set_pdop(monitor.pdop);
|
monitor_.set_pdop(monitor->pdop);
|
||||||
monitor_.set_hdop(monitor.hdop);
|
monitor_.set_hdop(monitor->hdop);
|
||||||
monitor_.set_vdop(monitor.vdop);
|
monitor_.set_vdop(monitor->vdop);
|
||||||
|
|
||||||
monitor_.SerializeToString(&data);
|
monitor_.SerializeToString(&data);
|
||||||
return data;
|
return data;
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
|
|
||||||
galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc(
|
galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc(
|
||||||
@ -310,9 +310,8 @@ void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init()
|
|||||||
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = GALILEO_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = GALILEO_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CAF Filtering to resolve doppler ambiguity. Phase and quadrature must be processed
|
/* CAF Filtering to resolve doppler ambiguity. Phase and quadrature must be processed
|
||||||
|
@ -34,9 +34,9 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
|
|
||||||
galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc(
|
galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc(
|
||||||
@ -192,9 +192,8 @@ void galileo_pcps_8ms_acquisition_cc::init()
|
|||||||
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = static_cast<float>(GALILEO_TWO_PI) * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = static_cast<float>(GALILEO_TWO_PI) * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +357,7 @@ int galileo_pcps_8ms_acquisition_cc::general_work(int noutput_items,
|
|||||||
std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write
|
std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write
|
||||||
filename.str("");
|
filename.str("");
|
||||||
filename << "../data/test_statistics_" << d_gnss_synchro->System
|
filename << "../data/test_statistics_" << d_gnss_synchro->System
|
||||||
<< "_" << d_gnss_synchro->Signal << "_sat_"
|
<< "_" << d_gnss_synchro->Signal[0] << d_gnss_synchro->Signal[1] << "_sat_"
|
||||||
<< d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat";
|
<< d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat";
|
||||||
d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary);
|
d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary);
|
||||||
d_dump_file.write(reinterpret_cast<char *>(d_ifft->get_outbuf()), n); //write directly |abs(x)|^2 in this Doppler bin?
|
d_dump_file.write(reinterpret_cast<char *>(d_ifft->get_outbuf()), n); //write directly |abs(x)|^2 in this Doppler bin?
|
||||||
|
@ -284,9 +284,8 @@ void pcps_acquisition::update_local_carrier(gsl::span<gr_complex> carrier_vector
|
|||||||
{
|
{
|
||||||
phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(acq_parameters.fs_in);
|
phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(acq_parameters.fs_in);
|
||||||
}
|
}
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0.0;
|
volk_gnsssdr_s32f_sincos_32fc(carrier_vector.data(), -phase_step_rad, _phase.data(), carrier_vector.length());
|
||||||
volk_gnsssdr_s32f_sincos_32fc(carrier_vector.data(), -phase_step_rad, _phase, carrier_vector.length());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,11 +158,11 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(const Acq_Con
|
|||||||
unsigned int pcps_acquisition_fine_doppler_cc::nextPowerOf2(unsigned int n)
|
unsigned int pcps_acquisition_fine_doppler_cc::nextPowerOf2(unsigned int n)
|
||||||
{
|
{
|
||||||
n--;
|
n--;
|
||||||
n |= n >> 1;
|
n |= n >> 1U;
|
||||||
n |= n >> 2;
|
n |= n >> 2U;
|
||||||
n |= n >> 4;
|
n |= n >> 4U;
|
||||||
n |= n >> 8;
|
n |= n >> 8U;
|
||||||
n |= n >> 16;
|
n |= n >> 16U;
|
||||||
n++;
|
n++;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -233,9 +234,8 @@ void pcps_assisted_acquisition_cc::redefine_grid()
|
|||||||
// doppler search steps
|
// doppler search steps
|
||||||
// compute the carrier doppler wipe-off signal and store it
|
// compute the carrier doppler wipe-off signal and store it
|
||||||
phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler_hz / static_cast<float>(d_fs_in);
|
phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler_hz / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index].data(), -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index].data(), -phase_step_rad, _phase, d_fft_size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,9 +206,8 @@ void pcps_cccwsr_acquisition_cc::init()
|
|||||||
|
|
||||||
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,11 +57,11 @@
|
|||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
|
|
||||||
pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc(
|
pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc(
|
||||||
@ -324,9 +324,8 @@ void pcps_opencl_acquisition_cc::init()
|
|||||||
|
|
||||||
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size);
|
|
||||||
|
|
||||||
if (d_opencl == 0)
|
if (d_opencl == 0)
|
||||||
{
|
{
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
|
|
||||||
pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc(
|
pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc(
|
||||||
@ -235,9 +234,8 @@ void pcps_quicksync_acquisition_cc::init()
|
|||||||
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_samples_per_code * d_folding_factor);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_samples_per_code * d_folding_factor);
|
|
||||||
}
|
}
|
||||||
// DLOG(INFO) << "end init";
|
// DLOG(INFO) << "end init";
|
||||||
}
|
}
|
||||||
|
@ -54,9 +54,9 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
|
|
||||||
pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc(
|
pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc(
|
||||||
@ -211,9 +211,8 @@ void pcps_tong_acquisition_cc::init()
|
|||||||
|
|
||||||
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = 0;
|
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size);
|
||||||
volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size);
|
|
||||||
|
|
||||||
d_grid_data[doppler_index] = static_cast<float *>(volk_gnsssdr_malloc(d_fft_size * sizeof(float), volk_gnsssdr_get_alignment()));
|
d_grid_data[doppler_index] = static_cast<float *>(volk_gnsssdr_malloc(d_fft_size * sizeof(float), volk_gnsssdr_get_alignment()));
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ target_link_libraries(channel_adapters
|
|||||||
Gnuradio::runtime
|
Gnuradio::runtime
|
||||||
channel_libs
|
channel_libs
|
||||||
core_system_parameters
|
core_system_parameters
|
||||||
|
core_receiver
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
Glog::glog
|
Glog::glog
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
Channel::Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq,
|
Channel::Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq,
|
||||||
std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav,
|
std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav,
|
||||||
std::string role, std::string implementation, gr::msg_queue::sptr queue)
|
std::string role, std::string implementation, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue)
|
||||||
{
|
{
|
||||||
acq_ = std::move(acq);
|
acq_ = std::move(acq);
|
||||||
trk_ = std::move(trk);
|
trk_ = std::move(trk);
|
||||||
|
@ -38,10 +38,11 @@
|
|||||||
#include "channel_fsm.h"
|
#include "channel_fsm.h"
|
||||||
#include "channel_interface.h"
|
#include "channel_interface.h"
|
||||||
#include "channel_msg_receiver_cc.h"
|
#include "channel_msg_receiver_cc.h"
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_signal.h"
|
#include "gnss_signal.h"
|
||||||
#include "gnss_synchro.h"
|
#include "gnss_synchro.h"
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -66,7 +67,7 @@ public:
|
|||||||
//! Constructor
|
//! Constructor
|
||||||
Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq,
|
Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq,
|
||||||
std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav,
|
std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav,
|
||||||
std::string role, std::string implementation, gr::msg_queue::sptr queue);
|
std::string role, std::string implementation, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~Channel(); //!< Virtual destructor
|
virtual ~Channel(); //!< Virtual destructor
|
||||||
|
|
||||||
@ -100,12 +101,12 @@ private:
|
|||||||
std::string implementation_;
|
std::string implementation_;
|
||||||
bool flag_enable_fpga;
|
bool flag_enable_fpga;
|
||||||
uint32_t channel_;
|
uint32_t channel_;
|
||||||
Gnss_Synchro gnss_synchro_;
|
Gnss_Synchro gnss_synchro_{};
|
||||||
Gnss_Signal gnss_signal_;
|
Gnss_Signal gnss_signal_;
|
||||||
bool connected_;
|
bool connected_;
|
||||||
bool repeat_;
|
bool repeat_;
|
||||||
std::shared_ptr<ChannelFsm> channel_fsm_;
|
std::shared_ptr<ChannelFsm> channel_fsm_;
|
||||||
gr::msg_queue::sptr queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
std::mutex mx;
|
std::mutex mx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@ add_library(channel_libs ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS})
|
|||||||
|
|
||||||
target_link_libraries(channel_libs
|
target_link_libraries(channel_libs
|
||||||
PUBLIC
|
PUBLIC
|
||||||
|
core_libs
|
||||||
|
core_system_parameters
|
||||||
Gnuradio::runtime
|
Gnuradio::runtime
|
||||||
Gnuradio::pmt
|
Gnuradio::pmt
|
||||||
core_system_parameters
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Boost::boost
|
Boost::boost
|
||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
Glog::glog
|
Glog::glog
|
||||||
core_receiver
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(ENABLE_CLANG_TIDY)
|
if(ENABLE_CLANG_TIDY)
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "channel_fsm.h"
|
#include "channel_fsm.h"
|
||||||
#include "control_message_factory.h"
|
#include "channel_event.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ void ChannelFsm::set_telemetry(std::shared_ptr<TelemetryDecoderInterface> teleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ChannelFsm::set_queue(gr::msg_queue::sptr queue)
|
void ChannelFsm::set_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lk(mx);
|
std::lock_guard<std::mutex> lk(mx);
|
||||||
queue_ = std::move(queue);
|
queue_ = std::move(queue);
|
||||||
@ -215,29 +215,17 @@ void ChannelFsm::start_acquisition()
|
|||||||
void ChannelFsm::start_tracking()
|
void ChannelFsm::start_tracking()
|
||||||
{
|
{
|
||||||
trk_->start_tracking();
|
trk_->start_tracking();
|
||||||
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
|
queue_->push(pmt::make_any(channel_event_make(channel_, 1)));
|
||||||
if (queue_ != gr::msg_queue::make())
|
|
||||||
{
|
|
||||||
queue_->handle(cmf->GetQueueMessage(channel_, 1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ChannelFsm::request_satellite()
|
void ChannelFsm::request_satellite()
|
||||||
{
|
{
|
||||||
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
|
queue_->push(pmt::make_any(channel_event_make(channel_, 0)));
|
||||||
if (queue_ != gr::msg_queue::make())
|
|
||||||
{
|
|
||||||
queue_->handle(cmf->GetQueueMessage(channel_, 0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ChannelFsm::notify_stop_tracking()
|
void ChannelFsm::notify_stop_tracking()
|
||||||
{
|
{
|
||||||
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
|
queue_->push(pmt::make_any(channel_event_make(channel_, 2)));
|
||||||
if (queue_ != gr::msg_queue::make())
|
|
||||||
{
|
|
||||||
queue_->handle(cmf->GetQueueMessage(channel_, 2));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,10 @@
|
|||||||
#define GNSS_SDR_CHANNEL_FSM_H
|
#define GNSS_SDR_CHANNEL_FSM_H
|
||||||
|
|
||||||
#include "acquisition_interface.h"
|
#include "acquisition_interface.h"
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "telemetry_decoder_interface.h"
|
#include "telemetry_decoder_interface.h"
|
||||||
#include "tracking_interface.h"
|
#include "tracking_interface.h"
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
@ -54,7 +55,7 @@ public:
|
|||||||
void set_acquisition(std::shared_ptr<AcquisitionInterface> acquisition);
|
void set_acquisition(std::shared_ptr<AcquisitionInterface> acquisition);
|
||||||
void set_tracking(std::shared_ptr<TrackingInterface> tracking);
|
void set_tracking(std::shared_ptr<TrackingInterface> tracking);
|
||||||
void set_telemetry(std::shared_ptr<TelemetryDecoderInterface> telemetry);
|
void set_telemetry(std::shared_ptr<TelemetryDecoderInterface> telemetry);
|
||||||
void set_queue(gr::msg_queue::sptr queue);
|
void set_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
void set_channel(uint32_t channel);
|
void set_channel(uint32_t channel);
|
||||||
void start_acquisition();
|
void start_acquisition();
|
||||||
// FSM EVENTS
|
// FSM EVENTS
|
||||||
@ -76,7 +77,7 @@ private:
|
|||||||
std::shared_ptr<AcquisitionInterface> acq_;
|
std::shared_ptr<AcquisitionInterface> acq_;
|
||||||
std::shared_ptr<TrackingInterface> trk_;
|
std::shared_ptr<TrackingInterface> trk_;
|
||||||
std::shared_ptr<TelemetryDecoderInterface> nav_;
|
std::shared_ptr<TelemetryDecoderInterface> nav_;
|
||||||
gr::msg_queue::sptr queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
uint32_t channel_;
|
uint32_t channel_;
|
||||||
uint32_t d_state;
|
uint32_t d_state;
|
||||||
std::mutex mx;
|
std::mutex mx;
|
||||||
|
@ -109,6 +109,12 @@ Pass_Through::Pass_Through(ConfigurationInterface* configuration, const std::str
|
|||||||
}
|
}
|
||||||
|
|
||||||
kludge_copy_ = gr::blocks::copy::make(item_size_);
|
kludge_copy_ = gr::blocks::copy::make(item_size_);
|
||||||
|
unsigned long int max_source_buffer_samples = configuration->property("GNSS-SDR.max_source_buffer_samples", 0);
|
||||||
|
if (max_source_buffer_samples > 0)
|
||||||
|
{
|
||||||
|
kludge_copy_->set_max_output_buffer(max_source_buffer_samples);
|
||||||
|
LOG(INFO) << "Set signal conditioner max output buffer to " << max_source_buffer_samples;
|
||||||
|
}
|
||||||
DLOG(INFO) << "kludge_copy(" << kludge_copy_->unique_id() << ")";
|
DLOG(INFO) << "kludge_copy(" << kludge_copy_->unique_id() << ")";
|
||||||
if (in_streams_ > 1)
|
if (in_streams_ > 1)
|
||||||
{
|
{
|
||||||
|
@ -577,7 +577,7 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{ /* SBAS message type */
|
{ /* SBAS message type */
|
||||||
int week, tow; /* receiption time */
|
int week, tow; /* reception time */
|
||||||
int prn; /* SBAS satellite PRN number */
|
int prn; /* SBAS satellite PRN number */
|
||||||
unsigned char msg[29]; /* SBAS message (226bit) padded by 0 */
|
unsigned char msg[29]; /* SBAS message (226bit) padded by 0 */
|
||||||
} sbsmsg_t;
|
} sbsmsg_t;
|
||||||
@ -912,7 +912,7 @@ typedef struct
|
|||||||
unsigned char buff[1200]; /* message buffer */
|
unsigned char buff[1200]; /* message buffer */
|
||||||
unsigned int word; /* word buffer for rtcm 2 */
|
unsigned int word; /* word buffer for rtcm 2 */
|
||||||
unsigned int nmsg2[100]; /* message count of RTCM 2 (1-99:1-99,0:other) */
|
unsigned int nmsg2[100]; /* message count of RTCM 2 (1-99:1-99,0:other) */
|
||||||
unsigned int nmsg3[400]; /* message count of RTCM 3 (1-299:1001-1299,300-399:2000-2099,0:ohter) */
|
unsigned int nmsg3[400]; /* message count of RTCM 3 (1-299:1001-1299,300-399:2000-2099,0:other) */
|
||||||
char opt[256]; /* RTCM dependent options */
|
char opt[256]; /* RTCM dependent options */
|
||||||
} rtcm_t;
|
} rtcm_t;
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ const double ERREPH_GLO = 5.0; /* error of glonass ephemeris (m) */
|
|||||||
const double TSTEP = 60.0; /* integration step glonass ephemeris (s) */
|
const double TSTEP = 60.0; /* integration step glonass ephemeris (s) */
|
||||||
const double RTOL_KEPLER = 1e-13; /* relative tolerance for Kepler equation */
|
const double RTOL_KEPLER = 1e-13; /* relative tolerance for Kepler equation */
|
||||||
|
|
||||||
const double DEFURASSR = 0.15; /* default accurary of ssr corr (m) */
|
const double DEFURASSR = 0.15; /* default accuracy of ssr corr (m) */
|
||||||
const double MAXECORSSR = 10.0; /* max orbit correction of ssr (m) */
|
const double MAXECORSSR = 10.0; /* max orbit correction of ssr (m) */
|
||||||
const double MAXCCORSSR = 1e-6 * SPEED_OF_LIGHT; /* max clock correction of ssr (m) */
|
const double MAXCCORSSR = 1e-6 * SPEED_OF_LIGHT; /* max clock correction of ssr (m) */
|
||||||
const double MAXAGESSR = 90.0; /* max age of ssr orbit and clock (s) */
|
const double MAXAGESSR = 90.0; /* max age of ssr orbit and clock (s) */
|
||||||
@ -473,7 +473,7 @@ void seph2pos(gtime_t time, const seph_t *seph, double *rs, double *dts,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* select ephememeris --------------------------------------------------------*/
|
/* select ephemeris --------------------------------------------------------*/
|
||||||
eph_t *seleph(gtime_t time, int sat, int iode, const nav_t *nav)
|
eph_t *seleph(gtime_t time, int sat, int iode, const nav_t *nav)
|
||||||
{
|
{
|
||||||
double t, tmax, tmin;
|
double t, tmax, tmin;
|
||||||
@ -532,7 +532,7 @@ eph_t *seleph(gtime_t time, int sat, int iode, const nav_t *nav)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* select glonass ephememeris ------------------------------------------------*/
|
/* select glonass ephemeris ------------------------------------------------*/
|
||||||
geph_t *selgeph(gtime_t time, int sat, int iode, const nav_t *nav)
|
geph_t *selgeph(gtime_t time, int sat, int iode, const nav_t *nav)
|
||||||
{
|
{
|
||||||
double t, tmax = MAXDTOE_GLO, tmin = tmax + 1.0;
|
double t, tmax = MAXDTOE_GLO, tmin = tmax + 1.0;
|
||||||
@ -574,7 +574,7 @@ geph_t *selgeph(gtime_t time, int sat, int iode, const nav_t *nav)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* select sbas ephememeris ---------------------------------------------------*/
|
/* select sbas ephemeris ---------------------------------------------------*/
|
||||||
seph_t *selseph(gtime_t time, int sat, const nav_t *nav)
|
seph_t *selseph(gtime_t time, int sat, const nav_t *nav)
|
||||||
{
|
{
|
||||||
double t, tmax = MAXDTOE_SBS, tmin = tmax + 1.0;
|
double t, tmax = MAXDTOE_SBS, tmin = tmax + 1.0;
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
* [1] S.Schear, W.Gurtner and J.Feltens, IONEX: The IONosphere Map EXchange
|
* [1] S.Schear, W.Gurtner and J.Feltens, IONEX: The IONosphere Map EXchange
|
||||||
* Format Version 1, February 25, 1998
|
* Format Version 1, February 25, 1998
|
||||||
* [2] S.Schaer, R.Markus, B.Gerhard and A.S.Timon, Daily Global Ionosphere
|
* [2] S.Schaer, R.Markus, B.Gerhard and A.S.Timon, Daily Global Ionosphere
|
||||||
* Maps based on GPS Carrier Phase Data Routinely producted by CODE
|
* Maps based on GPS Carrier Phase Data Routinely produced by CODE
|
||||||
* Analysis Center, Proceeding of the IGS Analysis Center Workshop, 1996
|
* Analysis Center, Proceeding of the IGS Analysis Center Workshop, 1996
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
* [1] S.Schear, W.Gurtner and J.Feltens, IONEX: The IONosphere Map EXchange
|
* [1] S.Schear, W.Gurtner and J.Feltens, IONEX: The IONosphere Map EXchange
|
||||||
* Format Version 1, February 25, 1998
|
* Format Version 1, February 25, 1998
|
||||||
* [2] S.Schaer, R.Markus, B.Gerhard and A.S.Timon, Daily Global Ionosphere
|
* [2] S.Schaer, R.Markus, B.Gerhard and A.S.Timon, Daily Global Ionosphere
|
||||||
* Maps based on GPS Carrier Phase Data Routinely producted by CODE
|
* Maps based on GPS Carrier Phase Data Routinely produced by CODE
|
||||||
* Analysis Center, Proceeding of the IGS Analysis Center Workshop, 1996
|
* Analysis Center, Proceeding of the IGS Analysis Center Workshop, 1996
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
@ -296,7 +296,7 @@ int search(int n, int m, const double *L, const double *D,
|
|||||||
* double *F O fixed solutions (n x m)
|
* double *F O fixed solutions (n x m)
|
||||||
* double *s O sum of squared residulas of fixed solutions (1 x m)
|
* double *s O sum of squared residulas of fixed solutions (1 x m)
|
||||||
* return : status (0:ok,other:error)
|
* return : status (0:ok,other:error)
|
||||||
* notes : matrix stored by column-major order (fortran convension)
|
* notes : matrix stored by column-major order (fortran convention)
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
int lambda(int n, int m, const double *a, const double *Q, double *F,
|
int lambda(int n, int m, const double *a, const double *Q, double *F,
|
||||||
double *s)
|
double *s)
|
||||||
|
@ -331,7 +331,7 @@ int is_depend(int sat1, int sat2, int *flgs, int *max_flg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0; /* linear depenent */
|
return 0; /* linear dependent */
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -546,7 +546,7 @@ int readdcbf(const char *file, nav_t *nav, const sta_t *sta)
|
|||||||
* read differential code bias (dcb) parameters
|
* read differential code bias (dcb) parameters
|
||||||
* args : char *file I dcb parameters file (wild-card * expanded)
|
* args : char *file I dcb parameters file (wild-card * expanded)
|
||||||
* nav_t *nav IO navigation data
|
* nav_t *nav IO navigation data
|
||||||
* sta_t *sta I station info data to inport receiver dcb
|
* sta_t *sta I station info data to import receiver dcb
|
||||||
* (NULL: no use)
|
* (NULL: no use)
|
||||||
* return : status (1:ok,0:error)
|
* return : status (1:ok,0:error)
|
||||||
* notes : currently only p1-c1 bias of code *.dcb file
|
* notes : currently only p1-c1 bias of code *.dcb file
|
||||||
|
@ -223,11 +223,12 @@ const unsigned int TBL_CR_C24_Q[] = {
|
|||||||
0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9, 0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538};
|
0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9, 0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538};
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C"
|
||||||
void dgemm_(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
{
|
||||||
extern void dgetrf_(int *, int *, double *, int *, int *, int *);
|
void dgemm_(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||||
extern void dgetri_(int *, double *, int *, int *, double *, int *, int *);
|
extern void dgetrf_(int *, int *, double *, int *, int *, int *);
|
||||||
extern void dgetrs_(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
extern void dgetri_(int *, double *, int *, int *, double *, int *, int *);
|
||||||
|
extern void dgetrs_(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3619,7 +3620,7 @@ void freeobs(obs_t *obs)
|
|||||||
/* free navigation data ---------------------------------------------------------
|
/* free navigation data ---------------------------------------------------------
|
||||||
* free memory for navigation data
|
* free memory for navigation data
|
||||||
* args : nav_t *nav IO navigation data
|
* args : nav_t *nav IO navigation data
|
||||||
* int opt I option (or of followings)
|
* int opt I option (one of the following)
|
||||||
* (0x01: gps/qzs ephmeris, 0x02: glonass ephemeris,
|
* (0x01: gps/qzs ephmeris, 0x02: glonass ephemeris,
|
||||||
* 0x04: sbas ephemeris, 0x08: precise ephemeris,
|
* 0x04: sbas ephemeris, 0x08: precise ephemeris,
|
||||||
* 0x10: precise clock 0x20: almanac,
|
* 0x10: precise clock 0x20: almanac,
|
||||||
|
@ -922,7 +922,7 @@ void searchigp(gtime_t time __attribute__((unused)), const double *pos, const sb
|
|||||||
* double *var O variance of ionospheric delay (m^2)
|
* double *var O variance of ionospheric delay (m^2)
|
||||||
* return : status (1:ok, 0:no correction)
|
* return : status (1:ok, 0:no correction)
|
||||||
* notes : before calling the function, sbas ionosphere correction parameters
|
* notes : before calling the function, sbas ionosphere correction parameters
|
||||||
* in navigation data (nav->sbsion) must be set by callig
|
* in navigation data (nav->sbsion) must be set by calling
|
||||||
* sbsupdatecorr()
|
* sbsupdatecorr()
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
int sbsioncorr(gtime_t time, const nav_t *nav, const double *pos,
|
int sbsioncorr(gtime_t time, const nav_t *nav, const double *pos,
|
||||||
@ -1206,7 +1206,7 @@ int sbsfastcorr(gtime_t time, int sat, const sbssat_t *sbssat,
|
|||||||
* double *var O sat position and clock variance (m^2)
|
* double *var O sat position and clock variance (m^2)
|
||||||
* return : status (1:ok,0:no correction)
|
* return : status (1:ok,0:no correction)
|
||||||
* notes : before calling the function, sbas satellite correction parameters
|
* notes : before calling the function, sbas satellite correction parameters
|
||||||
* in navigation data (nav->sbssat) must be set by callig
|
* in navigation data (nav->sbssat) must be set by calling
|
||||||
* sbsupdatecorr().
|
* sbsupdatecorr().
|
||||||
* satellite clock correction include long-term correction and fast
|
* satellite clock correction include long-term correction and fast
|
||||||
* correction.
|
* correction.
|
||||||
|
@ -2132,7 +2132,7 @@ int outsols(unsigned char *buff, const sol_t *sol, const double *rb,
|
|||||||
|
|
||||||
|
|
||||||
/* output solution extended ----------------------------------------------------
|
/* output solution extended ----------------------------------------------------
|
||||||
* output solution exteneded information
|
* output solution extended information
|
||||||
* args : unsigned char *buff IO output buffer
|
* args : unsigned char *buff IO output buffer
|
||||||
* sol_t *sol I solution
|
* sol_t *sol I solution
|
||||||
* ssat_t *ssat I satellite status
|
* ssat_t *ssat I satellite status
|
||||||
@ -2232,7 +2232,7 @@ void outsol(FILE *fp, const sol_t *sol, const double *rb,
|
|||||||
|
|
||||||
|
|
||||||
/* output solution extended ----------------------------------------------------
|
/* output solution extended ----------------------------------------------------
|
||||||
* output solution exteneded information to file
|
* output solution extended information to file
|
||||||
* args : FILE *fp I output file pointer
|
* args : FILE *fp I output file pointer
|
||||||
* sol_t *sol I solution
|
* sol_t *sol I solution
|
||||||
* ssat_t *ssat I satellite status
|
* ssat_t *ssat I satellite status
|
||||||
|
@ -257,7 +257,7 @@ void tide_pole(gtime_t tut, const double *pos, const double *erpv,
|
|||||||
* displacements by earth tides
|
* displacements by earth tides
|
||||||
* args : gtime_t tutc I time in utc
|
* args : gtime_t tutc I time in utc
|
||||||
* double *rr I site position (ecef) (m)
|
* double *rr I site position (ecef) (m)
|
||||||
* int opt I options (or of the followings)
|
* int opt I options (one of the following)
|
||||||
* 1: solid earth tide
|
* 1: solid earth tide
|
||||||
* 2: ocean tide loading
|
* 2: ocean tide loading
|
||||||
* 4: pole tide
|
* 4: pole tide
|
||||||
|
@ -84,6 +84,9 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in,
|
|||||||
this->message_port_register_in(pmt::mp("pvt_to_observables"));
|
this->message_port_register_in(pmt::mp("pvt_to_observables"));
|
||||||
this->set_msg_handler(pmt::mp("pvt_to_observables"), boost::bind(&hybrid_observables_gs::msg_handler_pvt_to_observables, this, _1));
|
this->set_msg_handler(pmt::mp("pvt_to_observables"), boost::bind(&hybrid_observables_gs::msg_handler_pvt_to_observables, this, _1));
|
||||||
|
|
||||||
|
// Send Channel status to gnss_flowgraph
|
||||||
|
this->message_port_register_out(pmt::mp("status"));
|
||||||
|
|
||||||
d_dump = dump;
|
d_dump = dump;
|
||||||
d_dump_mat = dump_mat and d_dump;
|
d_dump_mat = dump_mat and d_dump;
|
||||||
d_dump_filename = std::move(dump_filename);
|
d_dump_filename = std::move(dump_filename);
|
||||||
@ -140,7 +143,7 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in,
|
|||||||
T_rx_remnant_to_20ms = 0;
|
T_rx_remnant_to_20ms = 0;
|
||||||
T_rx_step_ms = 20; //read from config at the adapter GNSS-SDR.observable_interval_ms!!
|
T_rx_step_ms = 20; //read from config at the adapter GNSS-SDR.observable_interval_ms!!
|
||||||
T_rx_TOW_set = false;
|
T_rx_TOW_set = false;
|
||||||
|
T_status_report_timer_ms = 0;
|
||||||
// rework
|
// rework
|
||||||
d_Rx_clock_buffer.set_capacity(10); // 10*20 ms = 200 ms of data in buffer
|
d_Rx_clock_buffer.set_capacity(10); // 10*20 ms = 200 ms of data in buffer
|
||||||
d_Rx_clock_buffer.clear(); // Clear all the elements in the buffer
|
d_Rx_clock_buffer.clear(); // Clear all the elements in the buffer
|
||||||
@ -618,6 +621,20 @@ int hybrid_observables_gs::general_work(int noutput_items __attribute__((unused)
|
|||||||
{
|
{
|
||||||
out[n][0] = epoch_data.at(n);
|
out[n][0] = epoch_data.at(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//report channel status every second
|
||||||
|
T_status_report_timer_ms += T_rx_step_ms;
|
||||||
|
if (T_status_report_timer_ms >= 1000)
|
||||||
|
{
|
||||||
|
for (uint32_t n = 0; n < d_nchannels_out; n++)
|
||||||
|
{
|
||||||
|
std::shared_ptr<Gnss_Synchro> gnss_synchro_sptr = std::make_shared<Gnss_Synchro>(epoch_data.at(n));
|
||||||
|
//publish valid gnss_synchro to the gnss_flowgraph channel status monitor
|
||||||
|
this->message_port_pub(pmt::mp("status"), pmt::make_any(gnss_synchro_sptr));
|
||||||
|
}
|
||||||
|
T_status_report_timer_ms = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (d_dump)
|
if (d_dump)
|
||||||
{
|
{
|
||||||
// MULTIPLEXED FILE RECORDING - Record results to file
|
// MULTIPLEXED FILE RECORDING - Record results to file
|
||||||
|
@ -90,6 +90,7 @@ private:
|
|||||||
uint32_t T_rx_TOW_ms;
|
uint32_t T_rx_TOW_ms;
|
||||||
uint32_t T_rx_remnant_to_20ms;
|
uint32_t T_rx_remnant_to_20ms;
|
||||||
uint32_t T_rx_step_ms;
|
uint32_t T_rx_step_ms;
|
||||||
|
uint32_t T_status_report_timer_ms;
|
||||||
uint32_t d_nchannels_in;
|
uint32_t d_nchannels_in;
|
||||||
uint32_t d_nchannels_out;
|
uint32_t d_nchannels_out;
|
||||||
double T_rx_offset_ms;
|
double T_rx_offset_ms;
|
||||||
|
@ -34,6 +34,7 @@ target_link_libraries(signal_generator_adapters
|
|||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
Glog::glog
|
Glog::glog
|
||||||
algorithms_libs
|
algorithms_libs
|
||||||
|
core_receiver
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(signal_generator_adapters
|
target_include_directories(signal_generator_adapters
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
SignalGenerator::SignalGenerator(ConfigurationInterface* configuration,
|
SignalGenerator::SignalGenerator(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./data/gen_source.dat";
|
std::string default_dump_file = "./data/gen_source.dat";
|
||||||
|
@ -33,12 +33,13 @@
|
|||||||
#ifndef GNSS_SDR_SIGNAL_GENERATOR_H_
|
#ifndef GNSS_SDR_SIGNAL_GENERATOR_H_
|
||||||
#define GNSS_SDR_SIGNAL_GENERATOR_H_
|
#define GNSS_SDR_SIGNAL_GENERATOR_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "signal_generator_c.h"
|
#include "signal_generator_c.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/vector_to_stream.h>
|
#include <gnuradio/blocks/vector_to_stream.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ class SignalGenerator : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
SignalGenerator(ConfigurationInterface* configuration,
|
SignalGenerator(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue);
|
||||||
|
|
||||||
virtual ~SignalGenerator();
|
virtual ~SignalGenerator();
|
||||||
|
|
||||||
@ -91,6 +92,6 @@ private:
|
|||||||
boost::shared_ptr<gr::block> gen_source_;
|
boost::shared_ptr<gr::block> gen_source_;
|
||||||
gr::blocks::vector_to_stream::sptr vector_to_stream_;
|
gr::blocks::vector_to_stream::sptr vector_to_stream_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue_;
|
||||||
};
|
};
|
||||||
#endif /*GNSS_SDR_SIGNAL_GENERATOR_H_*/
|
#endif /*GNSS_SDR_SIGNAL_GENERATOR_H_*/
|
||||||
|
@ -28,7 +28,6 @@ add_library(signal_generator_gr_blocks
|
|||||||
|
|
||||||
target_link_libraries(signal_generator_gr_blocks
|
target_link_libraries(signal_generator_gr_blocks
|
||||||
PUBLIC
|
PUBLIC
|
||||||
Boost::boost
|
|
||||||
Gnuradio::runtime
|
Gnuradio::runtime
|
||||||
core_system_parameters
|
core_system_parameters
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
@ -97,7 +97,7 @@ void signal_generator_c::init()
|
|||||||
{
|
{
|
||||||
work_counter_ = 0;
|
work_counter_ = 0;
|
||||||
|
|
||||||
complex_phase_ = static_cast<gr_complex *>(volk_gnsssdr_malloc(vector_length_ * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
complex_phase_.reserve(vector_length_);
|
||||||
|
|
||||||
// True if Galileo satellites are present
|
// True if Galileo satellites are present
|
||||||
bool galileo_signal = std::find(system_.begin(), system_.end(), "E") != system_.end();
|
bool galileo_signal = std::find(system_.begin(), system_.end(), "E") != system_.end();
|
||||||
@ -152,13 +152,13 @@ void signal_generator_c::init()
|
|||||||
|
|
||||||
void signal_generator_c::generate_codes()
|
void signal_generator_c::generate_codes()
|
||||||
{
|
{
|
||||||
sampled_code_data_.reset(new gr_complex *[num_sats_]);
|
//sampled_code_data_.reset(new gr_complex *[num_sats_]);
|
||||||
sampled_code_pilot_.reset(new gr_complex *[num_sats_]);
|
//sampled_code_pilot_.reset(new gr_complex *[num_sats_]);
|
||||||
|
sampled_code_data_ = std::vector<std::vector<gr_complex>>(num_sats_, std::vector<gr_complex>(vector_length_));
|
||||||
|
sampled_code_pilot_ = std::vector<std::vector<gr_complex>>(num_sats_, std::vector<gr_complex>(vector_length_));
|
||||||
|
|
||||||
for (unsigned int sat = 0; sat < num_sats_; sat++)
|
for (unsigned int sat = 0; sat < num_sats_; sat++)
|
||||||
{
|
{
|
||||||
sampled_code_data_[sat] = static_cast<gr_complex *>(std::malloc(vector_length_ * sizeof(gr_complex)));
|
|
||||||
|
|
||||||
std::array<gr_complex, 64000> code{}; //[samples_per_code_[sat]];
|
std::array<gr_complex, 64000> code{}; //[samples_per_code_[sat]];
|
||||||
|
|
||||||
if (system_[sat] == "G")
|
if (system_[sat] == "G")
|
||||||
@ -211,7 +211,7 @@ void signal_generator_c::generate_codes()
|
|||||||
{
|
{
|
||||||
std::array<char, 3> signal = {{'5', 'X', '\0'}};
|
std::array<char, 3> signal = {{'5', 'X', '\0'}};
|
||||||
|
|
||||||
galileo_e5_a_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_data_[sat], vector_length_), signal, PRN_[sat], fs_in_,
|
galileo_e5_a_code_gen_complex_sampled(sampled_code_data_[sat], signal, PRN_[sat], fs_in_,
|
||||||
static_cast<int>(GALILEO_E5A_CODE_LENGTH_CHIPS) - delay_chips_[sat]);
|
static_cast<int>(GALILEO_E5A_CODE_LENGTH_CHIPS) - delay_chips_[sat]);
|
||||||
//noise
|
//noise
|
||||||
if (noise_flag_)
|
if (noise_flag_)
|
||||||
@ -248,11 +248,10 @@ void signal_generator_c::generate_codes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate E1C signal (25 code-periods, with secondary code)
|
// Generate E1C signal (25 code-periods, with secondary code)
|
||||||
sampled_code_pilot_[sat] = static_cast<gr_complex *>(std::malloc(vector_length_ * sizeof(gr_complex)));
|
|
||||||
|
|
||||||
std::array<char, 3> signal_1C = {{'1', 'C', '\0'}};
|
std::array<char, 3> signal_1C = {{'1', 'C', '\0'}};
|
||||||
|
|
||||||
galileo_e1_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_pilot_[sat], vector_length_), signal_1C, cboc, PRN_[sat], fs_in_,
|
galileo_e1_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_pilot_[sat].data(), vector_length_), signal_1C, cboc, PRN_[sat], fs_in_,
|
||||||
static_cast<int>(GALILEO_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true);
|
static_cast<int>(GALILEO_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true);
|
||||||
|
|
||||||
// Obtain the desired CN0 assuming that Pn = 1.
|
// Obtain the desired CN0 assuming that Pn = 1.
|
||||||
@ -269,20 +268,6 @@ void signal_generator_c::generate_codes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
signal_generator_c::~signal_generator_c()
|
|
||||||
{
|
|
||||||
/* for (unsigned int sat = 0; sat < num_sats_; sat++)
|
|
||||||
{
|
|
||||||
std::free(sampled_code_data_[sat]);
|
|
||||||
if (system_[sat] == "E" && signal_[sat].at(0) != '5')
|
|
||||||
{
|
|
||||||
std::free(sampled_code_pilot_[sat]);
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
volk_gnsssdr_free(complex_phase_);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int signal_generator_c::general_work(int noutput_items __attribute__((unused)),
|
int signal_generator_c::general_work(int noutput_items __attribute__((unused)),
|
||||||
gr_vector_int &ninput_items __attribute__((unused)),
|
gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
gr_vector_const_void_star &input_items __attribute__((unused)),
|
gr_vector_const_void_star &input_items __attribute__((unused)),
|
||||||
@ -306,9 +291,9 @@ int signal_generator_c::general_work(int noutput_items __attribute__((unused)),
|
|||||||
for (unsigned int sat = 0; sat < num_sats_; sat++)
|
for (unsigned int sat = 0; sat < num_sats_; sat++)
|
||||||
{
|
{
|
||||||
float phase_step_rad = -static_cast<float>(GPS_TWO_PI) * doppler_Hz_[sat] / static_cast<float>(fs_in_);
|
float phase_step_rad = -static_cast<float>(GPS_TWO_PI) * doppler_Hz_[sat] / static_cast<float>(fs_in_);
|
||||||
float _phase[1];
|
std::array<float, 1> _phase{};
|
||||||
_phase[0] = -start_phase_rad_[sat];
|
_phase[0] = -start_phase_rad_[sat];
|
||||||
volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_);
|
volk_gnsssdr_s32f_sincos_32fc(complex_phase_.data(), -phase_step_rad, _phase.data(), vector_length_);
|
||||||
start_phase_rad_[sat] += vector_length_ * phase_step_rad;
|
start_phase_rad_[sat] += vector_length_ * phase_step_rad;
|
||||||
|
|
||||||
out_idx = 0;
|
out_idx = 0;
|
||||||
@ -346,7 +331,7 @@ int signal_generator_c::general_work(int noutput_items __attribute__((unused)),
|
|||||||
phase_step_rad = -static_cast<float>(GPS_TWO_PI) * (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat])) + doppler_Hz_[sat]) / static_cast<float>(fs_in_);
|
phase_step_rad = -static_cast<float>(GPS_TWO_PI) * (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat])) + doppler_Hz_[sat]) / static_cast<float>(fs_in_);
|
||||||
// std::cout << "sat " << PRN_[sat] << " SG - Freq = " << (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat]))) << " Doppler = " << doppler_Hz_[sat] << std::endl;
|
// std::cout << "sat " << PRN_[sat] << " SG - Freq = " << (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat]))) << " Doppler = " << doppler_Hz_[sat] << std::endl;
|
||||||
_phase[0] = -start_phase_rad_[sat];
|
_phase[0] = -start_phase_rad_[sat];
|
||||||
volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_);
|
volk_gnsssdr_s32f_sincos_32fc(complex_phase_.data(), -phase_step_rad, _phase.data(), vector_length_);
|
||||||
|
|
||||||
unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)) * samples_per_code_[sat] / GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)) * samples_per_code_[sat] / GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#define GNSS_SDR_SIGNAL_GENERATOR_C_H
|
#define GNSS_SDR_SIGNAL_GENERATOR_C_H
|
||||||
|
|
||||||
#include "gnss_signal.h"
|
#include "gnss_signal.h"
|
||||||
#include <boost/scoped_array.hpp>
|
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -83,7 +82,7 @@ signal_generator_c_sptr signal_make_generator_c(
|
|||||||
class signal_generator_c : public gr::block
|
class signal_generator_c : public gr::block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~signal_generator_c(); // public destructor
|
~signal_generator_c() = default; // public destructor
|
||||||
|
|
||||||
// Where all the action really happens
|
// Where all the action really happens
|
||||||
int general_work(int noutput_items,
|
int general_work(int noutput_items,
|
||||||
@ -146,9 +145,9 @@ private:
|
|||||||
std::vector<signed int> current_data_bit_int_;
|
std::vector<signed int> current_data_bit_int_;
|
||||||
std::vector<signed int> data_modulation_;
|
std::vector<signed int> data_modulation_;
|
||||||
std::vector<signed int> pilot_modulation_;
|
std::vector<signed int> pilot_modulation_;
|
||||||
boost::scoped_array<gr_complex *> sampled_code_data_;
|
std::vector<std::vector<gr_complex>> sampled_code_data_;
|
||||||
boost::scoped_array<gr_complex *> sampled_code_pilot_;
|
std::vector<std::vector<gr_complex>> sampled_code_pilot_;
|
||||||
gr_complex *complex_phase_;
|
std::vector<gr_complex> complex_phase_;
|
||||||
unsigned int work_counter_;
|
unsigned int work_counter_;
|
||||||
std::random_device r;
|
std::random_device r;
|
||||||
std::default_random_engine e1;
|
std::default_random_engine e1;
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(ConfigurationInterface* configuration,
|
Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./data/signal_source.dat";
|
std::string default_dump_file = "./data/signal_source.dat";
|
||||||
|
@ -32,10 +32,11 @@
|
|||||||
#ifndef GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "fpga_switch.h"
|
#include "fpga_switch.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ class Ad9361FpgaSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
Ad9361FpgaSignalSource(ConfigurationInterface* configuration,
|
Ad9361FpgaSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
~Ad9361FpgaSignalSource();
|
~Ad9361FpgaSignalSource();
|
||||||
|
|
||||||
@ -112,7 +113,7 @@ private:
|
|||||||
bool dump_;
|
bool dump_;
|
||||||
std::string dump_filename_;
|
std::string dump_filename_;
|
||||||
|
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
|
|
||||||
std::shared_ptr<Fpga_Switch> switch_fpga;
|
std::shared_ptr<Fpga_Switch> switch_fpga;
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
CustomUDPSignalSource::CustomUDPSignalSource(ConfigurationInterface* configuration,
|
CustomUDPSignalSource::CustomUDPSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
// DUMP PARAMETERS
|
// DUMP PARAMETERS
|
||||||
std::string empty = "";
|
std::string empty = "";
|
||||||
|
@ -32,12 +32,13 @@
|
|||||||
#ifndef GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H
|
#ifndef GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H
|
||||||
#define GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H
|
#define GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "gr_complex_ip_packet_source.h"
|
#include "gr_complex_ip_packet_source.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/null_sink.h>
|
#include <gnuradio/blocks/null_sink.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -54,7 +55,7 @@ class CustomUDPSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
CustomUDPSignalSource(ConfigurationInterface* configuration,
|
CustomUDPSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~CustomUDPSignalSource();
|
virtual ~CustomUDPSignalSource();
|
||||||
|
|
||||||
@ -98,7 +99,7 @@ private:
|
|||||||
std::vector<boost::shared_ptr<gr::block>> null_sinks_;
|
std::vector<boost::shared_ptr<gr::block>> null_sinks_;
|
||||||
Gr_Complex_Ip_Packet_Source::sptr udp_gnss_rx_source_;
|
Gr_Complex_Ip_Packet_Source::sptr udp_gnss_rx_source_;
|
||||||
std::vector<boost::shared_ptr<gr::block>> file_sink_;
|
std::vector<boost::shared_ptr<gr::block>> file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H */
|
#endif /*GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H */
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
FileSignalSource::FileSignalSource(ConfigurationInterface* configuration,
|
FileSignalSource::FileSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_filename = "./example_capture.dat";
|
std::string default_filename = "./example_capture.dat";
|
||||||
std::string default_item_type = "short";
|
std::string default_item_type = "short";
|
||||||
|
@ -35,13 +35,15 @@
|
|||||||
#ifndef GNSS_SDR_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/file_source.h>
|
#include <gnuradio/blocks/file_source.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigurationInterface;
|
class ConfigurationInterface;
|
||||||
@ -55,7 +57,7 @@ class FileSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
FileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
FileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
unsigned int in_streams, unsigned int out_streams,
|
unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~FileSignalSource();
|
virtual ~FileSignalSource();
|
||||||
|
|
||||||
@ -122,7 +124,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
gr::blocks::throttle::sptr throttle_;
|
gr::blocks::throttle::sptr throttle_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
// Throttle control
|
// Throttle control
|
||||||
bool enable_throttle_control_;
|
bool enable_throttle_control_;
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#include "configuration_interface.h"
|
#include "configuration_interface.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
|
||||||
#include <teleorbit/frontend.h>
|
#include <teleorbit/frontend.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
@ -43,10 +42,10 @@ FlexibandSignalSource::FlexibandSignalSource(ConfigurationInterface* configurati
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_stream,
|
unsigned int in_stream,
|
||||||
unsigned int out_stream,
|
unsigned int out_stream,
|
||||||
gr::msg_queue::sptr queue) : role_(role),
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role),
|
||||||
in_stream_(in_stream),
|
in_stream_(in_stream),
|
||||||
out_stream_(out_stream),
|
out_stream_(out_stream),
|
||||||
queue_(std::move(queue))
|
queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "byte";
|
std::string default_item_type = "byte";
|
||||||
item_type_ = configuration->property(role + ".item_type", default_item_type);
|
item_type_ = configuration->property(role + ".item_type", default_item_type);
|
||||||
|
@ -34,13 +34,14 @@
|
|||||||
#ifndef GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/char_to_float.h>
|
#include <gnuradio/blocks/char_to_float.h>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/float_to_complex.h>
|
#include <gnuradio/blocks/float_to_complex.h>
|
||||||
#include <gnuradio/blocks/null_sink.h>
|
#include <gnuradio/blocks/null_sink.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -56,7 +57,7 @@ class FlexibandSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
FlexibandSignalSource(ConfigurationInterface* configuration,
|
FlexibandSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, gr::msg_queue::sptr queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~FlexibandSignalSource();
|
virtual ~FlexibandSignalSource();
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ private:
|
|||||||
std::vector<boost::shared_ptr<gr::block>> float_to_complex_;
|
std::vector<boost::shared_ptr<gr::block>> float_to_complex_;
|
||||||
std::vector<gr::blocks::null_sink::sptr> null_sinks_;
|
std::vector<gr::blocks::null_sink::sptr> null_sinks_;
|
||||||
|
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
#endif // GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
Fmcomms2SignalSource::Fmcomms2SignalSource(ConfigurationInterface* configuration,
|
Fmcomms2SignalSource::Fmcomms2SignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./data/signal_source.dat";
|
std::string default_dump_file = "./data/signal_source.dat";
|
||||||
|
@ -41,7 +41,8 @@
|
|||||||
#else
|
#else
|
||||||
#include <iio/fmcomms2_source.h>
|
#include <iio/fmcomms2_source.h>
|
||||||
#endif
|
#endif
|
||||||
#include <gnuradio/msg_queue.h>
|
#include "concurrent_queue.h"
|
||||||
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigurationInterface;
|
class ConfigurationInterface;
|
||||||
@ -51,7 +52,7 @@ class Fmcomms2SignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
Fmcomms2SignalSource(ConfigurationInterface* configuration,
|
Fmcomms2SignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~Fmcomms2SignalSource();
|
virtual ~Fmcomms2SignalSource();
|
||||||
|
|
||||||
@ -122,7 +123,7 @@ private:
|
|||||||
|
|
||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_FMCOMMS2_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_FMCOMMS2_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
GenSignalSource::GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter,
|
GenSignalSource::GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter,
|
||||||
std::string role, boost::shared_ptr<gr::msg_queue> queue) : signal_generator_(signal_generator),
|
std::string role, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : signal_generator_(signal_generator),
|
||||||
filter_(filter),
|
filter_(filter),
|
||||||
role_(std::move(role)),
|
role_(std::move(role)),
|
||||||
queue_(std::move(queue))
|
queue_(std::move(queue))
|
||||||
|
@ -34,8 +34,9 @@
|
|||||||
#define GNSS_SDR_GEN_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_GEN_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -47,7 +48,7 @@ class GenSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter,
|
GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter,
|
||||||
std::string role, boost::shared_ptr<gr::msg_queue> queue);
|
std::string role, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
//! Virtual destructor
|
//! Virtual destructor
|
||||||
virtual ~GenSignalSource();
|
virtual ~GenSignalSource();
|
||||||
@ -58,20 +59,17 @@ public:
|
|||||||
gr::basic_block_sptr get_right_block() override;
|
gr::basic_block_sptr get_right_block() override;
|
||||||
|
|
||||||
inline std::string role() override { return role_; }
|
inline std::string role() override { return role_; }
|
||||||
|
|
||||||
//! Returns "Signal Source"
|
//! Returns "Signal Source"
|
||||||
inline std::string implementation() override { return "Signal Source"; }
|
inline std::string implementation() override { return "Signal Source"; }
|
||||||
inline size_t item_size() override { return 0; }
|
inline size_t item_size() override { return 0; }
|
||||||
|
|
||||||
inline GNSSBlockInterface *signal_generator() const { return signal_generator_; }
|
inline GNSSBlockInterface *signal_generator() const { return signal_generator_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GNSSBlockInterface *signal_generator_;
|
GNSSBlockInterface *signal_generator_;
|
||||||
GNSSBlockInterface *filter_;
|
GNSSBlockInterface *filter_;
|
||||||
std::string role_;
|
std::string role_;
|
||||||
std::string implementation_;
|
std::string implementation_;
|
||||||
bool connected_;
|
bool connected_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_GEN_SIGNAL_SOURCE_H*/
|
#endif /*GNSS_SDR_GEN_SIGNAL_SOURCE_H*/
|
||||||
|
@ -32,12 +32,11 @@
|
|||||||
#include "configuration_interface.h"
|
#include "configuration_interface.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
|
||||||
#include <gn3s/gn3s_source_cc.h>
|
#include <gn3s/gn3s_source_cc.h>
|
||||||
|
|
||||||
|
|
||||||
Gn3sSignalSource::Gn3sSignalSource(ConfigurationInterface* configuration,
|
Gn3sSignalSource::Gn3sSignalSource(ConfigurationInterface* configuration,
|
||||||
std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue)
|
std::string role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue)
|
||||||
{
|
{
|
||||||
std::string default_item_type = "short";
|
std::string default_item_type = "short";
|
||||||
std::string default_dump_file = "./data/gn3s_source.dat";
|
std::string default_dump_file = "./data/gn3s_source.dat";
|
||||||
|
@ -32,10 +32,11 @@
|
|||||||
#ifndef GNSS_SDR_GN3S_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_GN3S_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_GN3S_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_GN3S_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ class Gn3sSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
Gn3sSignalSource(ConfigurationInterface* configuration,
|
Gn3sSignalSource(ConfigurationInterface* configuration,
|
||||||
std::string role, unsigned int in_stream,
|
std::string role, unsigned int in_stream,
|
||||||
unsigned int out_stream, gr::msg_queue::sptr queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~Gn3sSignalSource();
|
virtual ~Gn3sSignalSource();
|
||||||
|
|
||||||
@ -87,7 +88,7 @@ private:
|
|||||||
std::string dump_filename_;
|
std::string dump_filename_;
|
||||||
gr::block_sptr gn3s_source_;
|
gr::block_sptr gn3s_source_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_GN3S_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_GN3S_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
|
|
||||||
LabsatSignalSource::LabsatSignalSource(ConfigurationInterface* configuration,
|
LabsatSignalSource::LabsatSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
const std::string& role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./labsat_output.dat";
|
std::string default_dump_file = "./labsat_output.dat";
|
||||||
|
@ -32,10 +32,11 @@
|
|||||||
#ifndef GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigurationInterface;
|
class ConfigurationInterface;
|
||||||
@ -48,7 +49,7 @@ class LabsatSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
LabsatSignalSource(ConfigurationInterface* configuration,
|
LabsatSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, gr::msg_queue::sptr queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~LabsatSignalSource();
|
virtual ~LabsatSignalSource();
|
||||||
|
|
||||||
@ -86,7 +87,7 @@ private:
|
|||||||
std::string dump_filename_;
|
std::string dump_filename_;
|
||||||
gr::block_sptr labsat23_source_;
|
gr::block_sptr labsat23_source_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
MultichannelFileSignalSource::MultichannelFileSignalSource(ConfigurationInterface* configuration,
|
MultichannelFileSignalSource::MultichannelFileSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_filename = "./example_capture.dat";
|
std::string default_filename = "./example_capture.dat";
|
||||||
std::string default_item_type = "short";
|
std::string default_item_type = "short";
|
||||||
|
@ -35,12 +35,13 @@
|
|||||||
#ifndef GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/file_source.h>
|
#include <gnuradio/blocks/file_source.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -56,7 +57,7 @@ class MultichannelFileSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
MultichannelFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
MultichannelFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
unsigned int in_streams, unsigned int out_streams,
|
unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~MultichannelFileSignalSource();
|
virtual ~MultichannelFileSignalSource();
|
||||||
|
|
||||||
@ -122,7 +123,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
std::vector<gr::blocks::throttle::sptr> throttle_vec_;
|
std::vector<gr::blocks::throttle::sptr> throttle_vec_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
// Throttle control
|
// Throttle control
|
||||||
bool enable_throttle_control_;
|
bool enable_throttle_control_;
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
NsrFileSignalSource::NsrFileSignalSource(ConfigurationInterface* configuration,
|
NsrFileSignalSource::NsrFileSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_filename = "../data/my_capture.dat";
|
std::string default_filename = "../data/my_capture.dat";
|
||||||
std::string default_item_type = "byte";
|
std::string default_item_type = "byte";
|
||||||
|
@ -35,13 +35,14 @@
|
|||||||
#ifndef GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "unpack_byte_2bit_samples.h"
|
#include "unpack_byte_2bit_samples.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/file_source.h>
|
#include <gnuradio/blocks/file_source.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigurationInterface;
|
class ConfigurationInterface;
|
||||||
@ -55,7 +56,7 @@ class NsrFileSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
NsrFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
NsrFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
unsigned int in_streams, unsigned int out_streams,
|
unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~NsrFileSignalSource();
|
virtual ~NsrFileSignalSource();
|
||||||
inline std::string role() override
|
inline std::string role() override
|
||||||
@ -122,7 +123,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
gr::blocks::throttle::sptr throttle_;
|
gr::blocks::throttle::sptr throttle_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
// Throttle control
|
// Throttle control
|
||||||
bool enable_throttle_control_;
|
bool enable_throttle_control_;
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
OsmosdrSignalSource::OsmosdrSignalSource(ConfigurationInterface* configuration,
|
OsmosdrSignalSource::OsmosdrSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
// DUMP PARAMETERS
|
// DUMP PARAMETERS
|
||||||
std::string empty = "";
|
std::string empty = "";
|
||||||
|
@ -33,10 +33,11 @@
|
|||||||
#ifndef GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <osmosdr/source.h>
|
#include <osmosdr/source.h>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
@ -54,7 +55,7 @@ class OsmosdrSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
OsmosdrSignalSource(ConfigurationInterface* configuration,
|
OsmosdrSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~OsmosdrSignalSource();
|
virtual ~OsmosdrSignalSource();
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ private:
|
|||||||
|
|
||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
PlutosdrSignalSource::PlutosdrSignalSource(ConfigurationInterface* configuration,
|
PlutosdrSignalSource::PlutosdrSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./data/signal_source.dat";
|
std::string default_dump_file = "./data/signal_source.dat";
|
||||||
|
@ -40,7 +40,8 @@
|
|||||||
#else
|
#else
|
||||||
#include <iio/pluto_source.h>
|
#include <iio/pluto_source.h>
|
||||||
#endif
|
#endif
|
||||||
#include <gnuradio/msg_queue.h>
|
#include "concurrent_queue.h"
|
||||||
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ class PlutosdrSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
PlutosdrSignalSource(ConfigurationInterface* configuration,
|
PlutosdrSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~PlutosdrSignalSource();
|
virtual ~PlutosdrSignalSource();
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ private:
|
|||||||
|
|
||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_PLUTOSDR_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_PLUTOSDR_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -29,15 +29,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "raw_array_signal_source.h"
|
#include "raw_array_signal_source.h"
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "configuration_interface.h"
|
#include "configuration_interface.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <dbfcttc/raw_array.h>
|
#include <dbfcttc/raw_array.h>
|
||||||
|
|
||||||
|
|
||||||
RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration,
|
RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration,
|
||||||
std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue)
|
std::string role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue)
|
||||||
{
|
{
|
||||||
std::string default_item_type = "gr_complex";
|
std::string default_item_type = "gr_complex";
|
||||||
std::string default_dump_file = "./data/raw_array_source.dat";
|
std::string default_dump_file = "./data/raw_array_source.dat";
|
||||||
|
@ -32,10 +32,11 @@
|
|||||||
#ifndef GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigurationInterface;
|
class ConfigurationInterface;
|
||||||
@ -48,7 +49,7 @@ class RawArraySignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
RawArraySignalSource(ConfigurationInterface* configuration,
|
RawArraySignalSource(ConfigurationInterface* configuration,
|
||||||
std::string role, unsigned int in_stream,
|
std::string role, unsigned int in_stream,
|
||||||
unsigned int out_stream, gr::msg_queue::sptr queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~RawArraySignalSource();
|
virtual ~RawArraySignalSource();
|
||||||
|
|
||||||
@ -87,7 +88,7 @@ private:
|
|||||||
std::string eth_device_;
|
std::string eth_device_;
|
||||||
gr::block_sptr raw_array_source_;
|
gr::block_sptr raw_array_source_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -45,7 +45,7 @@ RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface* configuration,
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_stream,
|
unsigned int in_stream,
|
||||||
unsigned int out_stream,
|
unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role),
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role),
|
||||||
in_stream_(in_stream),
|
in_stream_(in_stream),
|
||||||
out_stream_(out_stream),
|
out_stream_(out_stream),
|
||||||
queue_(std::move(queue))
|
queue_(std::move(queue))
|
||||||
|
@ -32,13 +32,14 @@
|
|||||||
#ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H
|
#ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H
|
||||||
#define GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H
|
#define GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "rtl_tcp_signal_source_c.h"
|
#include "rtl_tcp_signal_source_c.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/blocks/deinterleave.h>
|
#include <gnuradio/blocks/deinterleave.h>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/float_to_complex.h>
|
#include <gnuradio/blocks/float_to_complex.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ public:
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_stream,
|
unsigned int in_stream,
|
||||||
unsigned int out_stream,
|
unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~RtlTcpSignalSource();
|
virtual ~RtlTcpSignalSource();
|
||||||
|
|
||||||
@ -113,7 +114,7 @@ private:
|
|||||||
|
|
||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H */
|
#endif /*GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H */
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
SpirFileSignalSource::SpirFileSignalSource(ConfigurationInterface* configuration,
|
SpirFileSignalSource::SpirFileSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
const std::string& role, unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_filename = "../data/my_capture.dat";
|
std::string default_filename = "../data/my_capture.dat";
|
||||||
std::string default_item_type = "int";
|
std::string default_item_type = "int";
|
||||||
|
@ -32,13 +32,14 @@
|
|||||||
#ifndef GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "unpack_intspir_1bit_samples.h"
|
#include "unpack_intspir_1bit_samples.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/blocks/file_source.h>
|
#include <gnuradio/blocks/file_source.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ class SpirFileSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
SpirFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
SpirFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
unsigned int in_streams, unsigned int out_streams,
|
unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~SpirFileSignalSource();
|
virtual ~SpirFileSignalSource();
|
||||||
inline std::string role() override
|
inline std::string role() override
|
||||||
@ -120,7 +121,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
gr::blocks::throttle::sptr throttle_;
|
gr::blocks::throttle::sptr throttle_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
// Throttle control
|
// Throttle control
|
||||||
bool enable_throttle_control_;
|
bool enable_throttle_control_;
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
|
|
||||||
SpirGSS6450FileSignalSource::SpirGSS6450FileSignalSource(ConfigurationInterface* configuration,
|
SpirGSS6450FileSignalSource::SpirGSS6450FileSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, uint32_t in_streams, uint32_t out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
const std::string& role, uint32_t in_streams, uint32_t out_streams, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
std::string default_filename = "../data/my_capture.dat";
|
std::string default_filename = "../data/my_capture.dat";
|
||||||
std::string default_dump_filename = "../data/my_capture_dump.dat";
|
std::string default_dump_filename = "../data/my_capture_dump.dat";
|
||||||
@ -148,7 +148,7 @@ SpirGSS6450FileSignalSource::SpirGSS6450FileSignalSource(ConfigurationInterface*
|
|||||||
|
|
||||||
for (uint32_t i = 0; i < (n_channels_); i++)
|
for (uint32_t i = 0; i < (n_channels_); i++)
|
||||||
{
|
{
|
||||||
valve_vec_.push_back(gnss_sdr_make_valve(sizeof(gr_complex), samples_, queue_));
|
valve_vec_.emplace_back(gnss_sdr_make_valve(sizeof(gr_complex), samples_, queue_));
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
std::string tmp_str = dump_filename_ + "_ch" + std::to_string(i);
|
std::string tmp_str = dump_filename_ + "_ch" + std::to_string(i);
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#ifndef GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "gnss_sdr_valve.h"
|
#include "gnss_sdr_valve.h"
|
||||||
#include "unpack_spir_gss6450_samples.h"
|
#include "unpack_spir_gss6450_samples.h"
|
||||||
@ -42,7 +43,7 @@
|
|||||||
#include <gnuradio/blocks/null_sink.h>
|
#include <gnuradio/blocks/null_sink.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -58,7 +59,7 @@ class SpirGSS6450FileSignalSource : public GNSSBlockInterface
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SpirGSS6450FileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
SpirGSS6450FileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
uint32_t in_streams, uint32_t out_streams, gr::msg_queue::sptr queue);
|
uint32_t in_streams, uint32_t out_streams, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~SpirGSS6450FileSignalSource();
|
virtual ~SpirGSS6450FileSignalSource();
|
||||||
inline std::string role() override
|
inline std::string role() override
|
||||||
@ -131,7 +132,7 @@ private:
|
|||||||
std::vector<boost::shared_ptr<gr::block>> valve_vec_;
|
std::vector<boost::shared_ptr<gr::block>> valve_vec_;
|
||||||
std::vector<gr::blocks::file_sink::sptr> sink_vec_;
|
std::vector<gr::blocks::file_sink::sptr> sink_vec_;
|
||||||
std::vector<gr::blocks::throttle::sptr> throttle_vec_;
|
std::vector<gr::blocks::throttle::sptr> throttle_vec_;
|
||||||
gr::msg_queue::sptr queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* con
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_streams,
|
unsigned int in_streams,
|
||||||
unsigned int out_streams,
|
unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role),
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role),
|
||||||
in_streams_(in_streams),
|
in_streams_(in_streams),
|
||||||
out_streams_(out_streams),
|
out_streams_(out_streams),
|
||||||
queue_(std::move(queue))
|
queue_(std::move(queue))
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#ifndef GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "unpack_byte_2bit_cpx_samples.h"
|
#include "unpack_byte_2bit_cpx_samples.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
@ -41,7 +42,7 @@
|
|||||||
#include <gnuradio/blocks/interleaved_short_to_complex.h>
|
#include <gnuradio/blocks/interleaved_short_to_complex.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ public:
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_streams,
|
unsigned int in_streams,
|
||||||
unsigned int out_streams,
|
unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~TwoBitCpxFileSignalSource();
|
virtual ~TwoBitCpxFileSignalSource();
|
||||||
inline std::string role() override
|
inline std::string role() override
|
||||||
@ -127,7 +128,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
gr::blocks::throttle::sptr throttle_;
|
gr::blocks::throttle::sptr throttle_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
// Throttle control
|
// Throttle control
|
||||||
bool enable_throttle_control_;
|
bool enable_throttle_control_;
|
||||||
|
@ -47,7 +47,7 @@ TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource(ConfigurationInterfac
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
unsigned int in_streams,
|
unsigned int in_streams,
|
||||||
unsigned int out_streams,
|
unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role),
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role),
|
||||||
in_streams_(in_streams),
|
in_streams_(in_streams),
|
||||||
out_streams_(out_streams),
|
out_streams_(out_streams),
|
||||||
queue_(std::move(queue))
|
queue_(std::move(queue))
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#ifndef GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "unpack_2bit_samples.h"
|
#include "unpack_2bit_samples.h"
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
@ -42,7 +43,7 @@
|
|||||||
#include <gnuradio/blocks/interleaved_char_to_complex.h>
|
#include <gnuradio/blocks/interleaved_char_to_complex.h>
|
||||||
#include <gnuradio/blocks/throttle.h>
|
#include <gnuradio/blocks/throttle.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -58,7 +59,7 @@ class TwoBitPackedFileSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
TwoBitPackedFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
TwoBitPackedFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
|
||||||
unsigned int in_streams, unsigned int out_streams,
|
unsigned int in_streams, unsigned int out_streams,
|
||||||
boost::shared_ptr<gr::msg_queue> queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~TwoBitPackedFileSignalSource();
|
virtual ~TwoBitPackedFileSignalSource();
|
||||||
inline std::string role() override
|
inline std::string role() override
|
||||||
@ -146,7 +147,7 @@ private:
|
|||||||
boost::shared_ptr<gr::block> valve_;
|
boost::shared_ptr<gr::block> valve_;
|
||||||
gr::blocks::file_sink::sptr sink_;
|
gr::blocks::file_sink::sptr sink_;
|
||||||
gr::blocks::throttle::sptr throttle_;
|
gr::blocks::throttle::sptr throttle_;
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
size_t item_size_;
|
size_t item_size_;
|
||||||
bool big_endian_items_;
|
bool big_endian_items_;
|
||||||
bool big_endian_bytes_;
|
bool big_endian_bytes_;
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
UhdSignalSource::UhdSignalSource(ConfigurationInterface* configuration,
|
UhdSignalSource::UhdSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
const std::string& role, unsigned int in_stream, unsigned int out_stream,
|
||||||
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue))
|
||||||
{
|
{
|
||||||
// DUMP PARAMETERS
|
// DUMP PARAMETERS
|
||||||
std::string empty = "";
|
std::string empty = "";
|
||||||
@ -216,7 +216,7 @@ UhdSignalSource::UhdSignalSource(ConfigurationInterface* configuration,
|
|||||||
if (samples_.at(i) != 0ULL)
|
if (samples_.at(i) != 0ULL)
|
||||||
{
|
{
|
||||||
LOG(INFO) << "RF_channel " << i << " Send STOP signal after " << samples_.at(i) << " samples";
|
LOG(INFO) << "RF_channel " << i << " Send STOP signal after " << samples_.at(i) << " samples";
|
||||||
valve_.push_back(gnss_sdr_make_valve(item_size_, samples_.at(i), queue_));
|
valve_.emplace_back(gnss_sdr_make_valve(item_size_, samples_.at(i), queue_));
|
||||||
DLOG(INFO) << "valve(" << valve_.at(i)->unique_id() << ")";
|
DLOG(INFO) << "valve(" << valve_.at(i)->unique_id() << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,12 +31,13 @@
|
|||||||
#ifndef GNSS_SDR_UHD_SIGNAL_SOURCE_H_
|
#ifndef GNSS_SDR_UHD_SIGNAL_SOURCE_H_
|
||||||
#define GNSS_SDR_UHD_SIGNAL_SOURCE_H_
|
#define GNSS_SDR_UHD_SIGNAL_SOURCE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/blocks/file_sink.h>
|
#include <gnuradio/blocks/file_sink.h>
|
||||||
#include <gnuradio/hier_block2.h>
|
#include <gnuradio/hier_block2.h>
|
||||||
#include <gnuradio/msg_queue.h>
|
|
||||||
#include <gnuradio/uhd/usrp_source.h>
|
#include <gnuradio/uhd/usrp_source.h>
|
||||||
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -52,7 +53,7 @@ class UhdSignalSource : public GNSSBlockInterface
|
|||||||
public:
|
public:
|
||||||
UhdSignalSource(ConfigurationInterface* configuration,
|
UhdSignalSource(ConfigurationInterface* configuration,
|
||||||
const std::string& role, unsigned int in_stream,
|
const std::string& role, unsigned int in_stream,
|
||||||
unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue);
|
unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
virtual ~UhdSignalSource();
|
virtual ~UhdSignalSource();
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ private:
|
|||||||
std::vector<boost::shared_ptr<gr::block>> valve_;
|
std::vector<boost::shared_ptr<gr::block>> valve_;
|
||||||
std::vector<gr::blocks::file_sink::sptr> file_sink_;
|
std::vector<gr::blocks::file_sink::sptr> file_sink_;
|
||||||
|
|
||||||
boost::shared_ptr<gr::msg_queue> queue_;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_UHD_SIGNAL_SOURCE_H_*/
|
#endif /*GNSS_SDR_UHD_SIGNAL_SOURCE_H_*/
|
||||||
|
@ -85,7 +85,7 @@ private:
|
|||||||
int fifo_items;
|
int fifo_items;
|
||||||
int d_sock_raw;
|
int d_sock_raw;
|
||||||
int d_udp_port;
|
int d_udp_port;
|
||||||
struct sockaddr_in si_me;
|
struct sockaddr_in si_me{};
|
||||||
std::string d_src_device;
|
std::string d_src_device;
|
||||||
std::string d_origin_address;
|
std::string d_origin_address;
|
||||||
int d_udp_payload_size;
|
int d_udp_payload_size;
|
||||||
|
@ -30,7 +30,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "labsat23_source.h"
|
#include "labsat23_source.h"
|
||||||
#include "control_message_factory.h"
|
#include "command_event.h"
|
||||||
|
#include <boost/any.hpp>
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
@ -39,7 +40,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename, int channel_selector, gr::msg_queue::sptr queue)
|
labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename, int channel_selector, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue)
|
||||||
{
|
{
|
||||||
return labsat23_source_sptr(new labsat23_source(signal_file_basename, channel_selector, std::move(queue)));
|
return labsat23_source_sptr(new labsat23_source(signal_file_basename, channel_selector, std::move(queue)));
|
||||||
}
|
}
|
||||||
@ -47,10 +48,10 @@ labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename,
|
|||||||
|
|
||||||
labsat23_source::labsat23_source(const char *signal_file_basename,
|
labsat23_source::labsat23_source(const char *signal_file_basename,
|
||||||
int channel_selector,
|
int channel_selector,
|
||||||
gr::msg_queue::sptr queue) : gr::block("labsat23_source",
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : gr::block("labsat23_source",
|
||||||
gr::io_signature::make(0, 0, 0),
|
gr::io_signature::make(0, 0, 0),
|
||||||
gr::io_signature::make(1, 1, sizeof(gr_complex))),
|
gr::io_signature::make(1, 1, sizeof(gr_complex))),
|
||||||
d_queue(std::move(queue))
|
d_queue(std::move(queue))
|
||||||
{
|
{
|
||||||
if (channel_selector < 1 or channel_selector > 2)
|
if (channel_selector < 1 or channel_selector > 2)
|
||||||
{
|
{
|
||||||
@ -467,9 +468,8 @@ int labsat23_source::general_work(int noutput_items,
|
|||||||
{
|
{
|
||||||
std::cout << "End of file reached, LabSat source stop" << std::endl;
|
std::cout << "End of file reached, LabSat source stop" << std::endl;
|
||||||
}
|
}
|
||||||
auto *cmf = new ControlMessageFactory();
|
|
||||||
d_queue->handle(cmf->GetQueueMessage(200, 0));
|
d_queue->push(pmt::make_any(command_event_make(200, 0)));
|
||||||
delete cmf;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -528,9 +528,7 @@ int labsat23_source::general_work(int noutput_items,
|
|||||||
{
|
{
|
||||||
std::cout << "End of file reached, LabSat source stop" << std::endl;
|
std::cout << "End of file reached, LabSat source stop" << std::endl;
|
||||||
}
|
}
|
||||||
auto *cmf = new ControlMessageFactory();
|
d_queue->push(pmt::make_any(command_event_make(200, 0)));
|
||||||
d_queue->handle(cmf->GetQueueMessage(200, 0));
|
|
||||||
delete cmf;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,8 +31,9 @@
|
|||||||
#ifndef GNSS_SDR_LABSAT23_SOURCE_H
|
#ifndef GNSS_SDR_LABSAT23_SOURCE_H
|
||||||
#define GNSS_SDR_LABSAT23_SOURCE_H
|
#define GNSS_SDR_LABSAT23_SOURCE_H
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include <gnuradio/block.h>
|
#include <gnuradio/block.h>
|
||||||
#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr
|
#include <pmt/pmt.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -45,7 +46,7 @@ using labsat23_source_sptr = boost::shared_ptr<labsat23_source>;
|
|||||||
labsat23_source_sptr labsat23_make_source_sptr(
|
labsat23_source_sptr labsat23_make_source_sptr(
|
||||||
const char *signal_file_basename,
|
const char *signal_file_basename,
|
||||||
int channel_selector,
|
int channel_selector,
|
||||||
gr::msg_queue::sptr queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief This class implements conversion between Labsat2 and 3 format byte packet samples to gr_complex
|
* \brief This class implements conversion between Labsat2 and 3 format byte packet samples to gr_complex
|
||||||
@ -64,11 +65,11 @@ private:
|
|||||||
friend labsat23_source_sptr labsat23_make_source_sptr(
|
friend labsat23_source_sptr labsat23_make_source_sptr(
|
||||||
const char *signal_file_basename,
|
const char *signal_file_basename,
|
||||||
int channel_selector,
|
int channel_selector,
|
||||||
gr::msg_queue::sptr queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
labsat23_source(const char *signal_file_basename,
|
labsat23_source(const char *signal_file_basename,
|
||||||
int channel_selector,
|
int channel_selector,
|
||||||
gr::msg_queue::sptr queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
std::string generate_filename();
|
std::string generate_filename();
|
||||||
void decode_samples_one_channel(int16_t input_short, gr_complex *out, int type);
|
void decode_samples_one_channel(int16_t input_short, gr_complex *out, int type);
|
||||||
@ -82,7 +83,7 @@ private:
|
|||||||
std::ifstream *binary_input_file;
|
std::ifstream *binary_input_file;
|
||||||
uint8_t d_ref_clock;
|
uint8_t d_ref_clock;
|
||||||
uint8_t d_bits_per_sample;
|
uint8_t d_bits_per_sample;
|
||||||
gr::msg_queue::sptr d_queue;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> d_queue;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -110,7 +110,7 @@ private:
|
|||||||
size_t unread_;
|
size_t unread_;
|
||||||
|
|
||||||
// lookup for scaling data
|
// lookup for scaling data
|
||||||
boost::array<float, 0xff> lookup_;
|
boost::array<float, 0xff> lookup_{};
|
||||||
|
|
||||||
// async read callback
|
// async read callback
|
||||||
void handle_read(const boost::system::error_code &ec,
|
void handle_read(const boost::system::error_code &ec,
|
||||||
|
@ -71,10 +71,10 @@ target_link_libraries(signal_source_libs
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
Boost::boost
|
Boost::boost
|
||||||
Gnuradio::runtime
|
Gnuradio::runtime
|
||||||
|
core_receiver
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
Glog::glog
|
Glog::glog
|
||||||
core_receiver
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
|
if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
|
||||||
|
@ -32,17 +32,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gnss_sdr_valve.h"
|
#include "gnss_sdr_valve.h"
|
||||||
#include "control_message_factory.h" // for ControlMessageFactory
|
#include "command_event.h"
|
||||||
#include <glog/logging.h> // for LOG
|
#include <glog/logging.h> // for LOG
|
||||||
#include <gnuradio/io_signature.h> // for io_signature
|
#include <gnuradio/io_signature.h> // for io_signature
|
||||||
#include <algorithm> // for min
|
#include <algorithm> // for min
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <unistd.h> // for usleep
|
#include <unistd.h> // for usleep
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item,
|
Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue,
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue,
|
||||||
bool stop_flowgraph) : gr::sync_block("valve",
|
bool stop_flowgraph) : gr::sync_block("valve",
|
||||||
gr::io_signature::make(1, 20, sizeof_stream_item),
|
gr::io_signature::make(1, 20, sizeof_stream_item),
|
||||||
gr::io_signature::make(1, 20, sizeof_stream_item)),
|
gr::io_signature::make(1, 20, sizeof_stream_item)),
|
||||||
@ -55,14 +55,14 @@ Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, gr::msg_queue::sptr queue, bool stop_flowgraph)
|
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), stop_flowgraph));
|
boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), stop_flowgraph));
|
||||||
return valve_;
|
return valve_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, gr::msg_queue::sptr queue)
|
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), true));
|
boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), true));
|
||||||
return valve_;
|
return valve_;
|
||||||
@ -83,10 +83,8 @@ int Gnss_Sdr_Valve::work(int noutput_items,
|
|||||||
{
|
{
|
||||||
if (d_ncopied_items >= d_nitems)
|
if (d_ncopied_items >= d_nitems)
|
||||||
{
|
{
|
||||||
auto *cmf = new ControlMessageFactory();
|
|
||||||
d_queue->handle(cmf->GetQueueMessage(200, 0));
|
|
||||||
LOG(INFO) << "Stopping receiver, " << d_ncopied_items << " samples processed";
|
LOG(INFO) << "Stopping receiver, " << d_ncopied_items << " samples processed";
|
||||||
delete cmf;
|
d_queue->push(pmt::make_any(command_event_make(200, 0)));
|
||||||
if (d_stop_flowgraph)
|
if (d_stop_flowgraph)
|
||||||
{
|
{
|
||||||
return -1; // Done!
|
return -1; // Done!
|
||||||
|
@ -34,11 +34,12 @@
|
|||||||
#ifndef GNSS_SDR_GNSS_SDR_VALVE_H_
|
#ifndef GNSS_SDR_GNSS_SDR_VALVE_H_
|
||||||
#define GNSS_SDR_GNSS_SDR_VALVE_H_
|
#define GNSS_SDR_GNSS_SDR_VALVE_H_
|
||||||
|
|
||||||
|
#include "concurrent_queue.h"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr
|
|
||||||
#include <gnuradio/sync_block.h> // for sync_block
|
#include <gnuradio/sync_block.h> // for sync_block
|
||||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||||
#include <cstddef> // for size_t
|
#include <pmt/pmt.h>
|
||||||
|
#include <cstddef> // for size_t
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
class Gnss_Sdr_Valve;
|
class Gnss_Sdr_Valve;
|
||||||
@ -46,12 +47,12 @@ class Gnss_Sdr_Valve;
|
|||||||
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
||||||
size_t sizeof_stream_item,
|
size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
||||||
size_t sizeof_stream_item,
|
size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue,
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue,
|
||||||
bool stop_flowgraph);
|
bool stop_flowgraph);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -71,21 +72,21 @@ private:
|
|||||||
friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
||||||
size_t sizeof_stream_item,
|
size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue);
|
||||||
|
|
||||||
friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(
|
||||||
size_t sizeof_stream_item,
|
size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue,
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue,
|
||||||
bool stop_flowgraph);
|
bool stop_flowgraph);
|
||||||
|
|
||||||
Gnss_Sdr_Valve(size_t sizeof_stream_item,
|
Gnss_Sdr_Valve(size_t sizeof_stream_item,
|
||||||
uint64_t nitems,
|
uint64_t nitems,
|
||||||
gr::msg_queue::sptr queue, bool stop_flowgraph);
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph);
|
||||||
|
|
||||||
uint64_t d_nitems;
|
uint64_t d_nitems;
|
||||||
uint64_t d_ncopied_items;
|
uint64_t d_ncopied_items;
|
||||||
gr::msg_queue::sptr d_queue;
|
std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> d_queue;
|
||||||
bool d_stop_flowgraph;
|
bool d_stop_flowgraph;
|
||||||
bool d_open_valve;
|
bool d_open_valve;
|
||||||
};
|
};
|
||||||
|
@ -56,7 +56,6 @@ target_link_libraries(telemetry_decoder_gr_blocks
|
|||||||
telemetry_decoder_libs
|
telemetry_decoder_libs
|
||||||
core_system_parameters
|
core_system_parameters
|
||||||
Gnuradio::runtime
|
Gnuradio::runtime
|
||||||
Volkgnsssdr::volkgnsssdr
|
|
||||||
Boost::boost
|
Boost::boost
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
|
@ -42,12 +42,10 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <cstdlib> // for abs
|
||||||
#include <array>
|
#include <exception> // for exception
|
||||||
#include <cstdlib> // for abs
|
#include <iostream> // for cout
|
||||||
#include <exception> // for exception
|
#include <memory> // for shared_ptr, make_shared
|
||||||
#include <iostream> // for cout
|
|
||||||
#include <memory> // for shared_ptr, make_shared
|
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 8
|
#define CRC_ERROR_LIMIT 8
|
||||||
|
|
||||||
@ -64,7 +62,7 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
|||||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
{
|
{
|
||||||
//prevent telemetry symbols accumulation in output buffers
|
// prevent telemetry symbols accumulation in output buffers
|
||||||
this->set_max_noutput_items(1);
|
this->set_max_noutput_items(1);
|
||||||
// Ephemeris data port out
|
// Ephemeris data port out
|
||||||
this->message_port_register_out(pmt::mp("telemetry"));
|
this->message_port_register_out(pmt::mp("telemetry"));
|
||||||
@ -78,7 +76,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
|||||||
d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -94,7 +91,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
|
|
||||||
@ -118,9 +114,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
|||||||
|
|
||||||
beidou_b1i_telemetry_decoder_gs::~beidou_b1i_telemetry_decoder_gs()
|
beidou_b1i_telemetry_decoder_gs::~beidou_b1i_telemetry_decoder_gs()
|
||||||
{
|
{
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
|
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -299,13 +292,8 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell
|
|||||||
// Update tel dec parameters for D2 NAV Messages
|
// Update tel dec parameters for D2 NAV Messages
|
||||||
if (sat_prn > 0 and sat_prn < 6)
|
if (sat_prn > 0 and sat_prn < 6)
|
||||||
{
|
{
|
||||||
// Clear values from previous declaration
|
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
|
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -322,20 +310,15 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell
|
|||||||
}
|
}
|
||||||
|
|
||||||
d_symbol_duration_ms = BEIDOU_B1I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B1I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Clear values from previous declaration
|
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
//back to normal satellites
|
//back to normal satellites
|
||||||
d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -351,7 +334,6 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
}
|
}
|
||||||
@ -403,7 +385,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_
|
|||||||
auto **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]); // Get the output buffer pointer
|
auto **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]); // Get the output buffer pointer
|
||||||
const auto **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
const auto **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
||||||
|
|
||||||
Gnss_Synchro current_symbol; // structure to save the synchronization information and send the output object to the next block
|
Gnss_Synchro current_symbol{}; // structure to save the synchronization information and send the output object to the next block
|
||||||
// 1. Copy the current tracking output
|
// 1. Copy the current tracking output
|
||||||
current_symbol = in[0][0];
|
current_symbol = in[0][0];
|
||||||
d_symbol_history.push_back(current_symbol.Prompt_I); // add new symbol to the symbol queue
|
d_symbol_history.push_back(current_symbol.Prompt_I); // add new symbol to the symbol queue
|
||||||
@ -470,7 +452,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call the decoder
|
// call the decoder
|
||||||
decode_subframe(d_subframe_symbols);
|
decode_subframe(d_subframe_symbols.data());
|
||||||
|
|
||||||
if (d_nav.flag_crc_test == true)
|
if (d_nav.flag_crc_test == true)
|
||||||
{
|
{
|
||||||
@ -527,7 +509,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call the decoder
|
// call the decoder
|
||||||
decode_subframe(d_subframe_symbols);
|
decode_subframe(d_subframe_symbols.data());
|
||||||
|
|
||||||
if (d_nav.flag_crc_test == true)
|
if (d_nav.flag_crc_test == true)
|
||||||
{
|
{
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||||
#include <gnuradio/block.h> // for block
|
#include <gnuradio/block.h> // for block
|
||||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||||
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -49,7 +50,9 @@ class beidou_b1i_telemetry_decoder_gs;
|
|||||||
|
|
||||||
using beidou_b1i_telemetry_decoder_gs_sptr = boost::shared_ptr<beidou_b1i_telemetry_decoder_gs>;
|
using beidou_b1i_telemetry_decoder_gs_sptr = boost::shared_ptr<beidou_b1i_telemetry_decoder_gs>;
|
||||||
|
|
||||||
beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(
|
||||||
|
const Gnss_Satellite &satellite,
|
||||||
|
bool dump);
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -71,21 +74,22 @@ public:
|
|||||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend beidou_b1i_telemetry_decoder_gs_sptr
|
friend beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(
|
||||||
beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
const Gnss_Satellite &satellite,
|
||||||
|
bool dump);
|
||||||
|
|
||||||
beidou_b1i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
beidou_b1i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||||
|
|
||||||
void decode_subframe(float *symbols);
|
void decode_subframe(float *symbols);
|
||||||
void decode_word(int32_t word_counter, const float *enc_word_symbols, int32_t *dec_word_symbols);
|
void decode_word(int32_t word_counter, const float *enc_word_symbols, int32_t *dec_word_symbols);
|
||||||
void decode_bch15_11_01(const int32_t *bits, int32_t *decbits);
|
void decode_bch15_11_01(const int32_t *bits, int32_t *decbits);
|
||||||
|
|
||||||
|
|
||||||
// Preamble decoding
|
// Preamble decoding
|
||||||
int32_t *d_preamble_samples;
|
std::array<int32_t, BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS> d_preamble_samples{};
|
||||||
int32_t d_symbols_per_preamble;
|
int32_t d_symbols_per_preamble;
|
||||||
int32_t d_samples_per_preamble;
|
int32_t d_samples_per_preamble;
|
||||||
int32_t d_preamble_period_samples;
|
int32_t d_preamble_period_samples;
|
||||||
float *d_subframe_symbols;
|
std::array<float, BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS> d_subframe_symbols{};
|
||||||
uint32_t d_required_symbols;
|
uint32_t d_required_symbols;
|
||||||
|
|
||||||
// Storage for incoming data
|
// Storage for incoming data
|
||||||
@ -100,7 +104,7 @@ private:
|
|||||||
int32_t d_CRC_error_counter; // Number of failed CRC operations
|
int32_t d_CRC_error_counter; // Number of failed CRC operations
|
||||||
bool flag_SOW_set; // Indicates when time of week is set
|
bool flag_SOW_set; // Indicates when time of week is set
|
||||||
|
|
||||||
//!< Navigation Message variable
|
// Navigation Message variable
|
||||||
Beidou_Dnav_Navigation_Message d_nav;
|
Beidou_Dnav_Navigation_Message d_nav;
|
||||||
|
|
||||||
// Values to populate gnss synchronization structure
|
// Values to populate gnss synchronization structure
|
||||||
|
@ -41,12 +41,10 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <cstdlib> // for abs
|
||||||
#include <array>
|
#include <exception> // for exception
|
||||||
#include <cstdlib> // for abs
|
#include <iostream> // for cout
|
||||||
#include <exception> // for exception
|
#include <memory> // for shared_ptr, make_shared
|
||||||
#include <iostream> // for cout
|
|
||||||
#include <memory> // for shared_ptr, make_shared
|
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 8
|
#define CRC_ERROR_LIMIT 8
|
||||||
|
|
||||||
@ -64,7 +62,7 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
|
|||||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
{
|
{
|
||||||
//prevent telemetry symbols accumulation in output buffers
|
// prevent telemetry symbols accumulation in output buffers
|
||||||
this->set_max_noutput_items(1);
|
this->set_max_noutput_items(1);
|
||||||
// Ephemeris data port out
|
// Ephemeris data port out
|
||||||
this->message_port_register_out(pmt::mp("telemetry"));
|
this->message_port_register_out(pmt::mp("telemetry"));
|
||||||
@ -78,7 +76,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
|
|||||||
d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -94,7 +91,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
|
|
||||||
@ -118,9 +114,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
|
|||||||
|
|
||||||
beidou_b3i_telemetry_decoder_gs::~beidou_b3i_telemetry_decoder_gs()
|
beidou_b3i_telemetry_decoder_gs::~beidou_b3i_telemetry_decoder_gs()
|
||||||
{
|
{
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
|
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -317,15 +310,8 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite(
|
|||||||
// Update tel dec parameters for D2 NAV Messages
|
// Update tel dec parameters for D2 NAV Messages
|
||||||
if (sat_prn > 0 and sat_prn < 6)
|
if (sat_prn > 0 and sat_prn < 6)
|
||||||
{
|
{
|
||||||
// Clear values from previous declaration
|
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
|
|
||||||
|
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -341,22 +327,15 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
d_symbol_duration_ms = BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(
|
|
||||||
BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float),
|
|
||||||
volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Clear values from previous declaration
|
// back to normal satellites
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_subframe_symbols);
|
|
||||||
//back to normal satellites
|
|
||||||
d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
|
||||||
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
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_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
|
|
||||||
// Setting samples of preamble code
|
// Setting samples of preamble code
|
||||||
@ -372,7 +351,6 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment()));
|
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble;
|
||||||
d_symbol_history.set_capacity(d_required_symbols);
|
d_symbol_history.set_capacity(d_required_symbols);
|
||||||
}
|
}
|
||||||
@ -430,7 +408,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work(
|
|||||||
auto **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]); // Get the output buffer pointer
|
auto **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]); // Get the output buffer pointer
|
||||||
const auto **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
const auto **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
||||||
|
|
||||||
Gnss_Synchro current_symbol; // structure to save the synchronization
|
Gnss_Synchro current_symbol{}; // structure to save the synchronization
|
||||||
// information and send the output object to the
|
// information and send the output object to the
|
||||||
// next block
|
// next block
|
||||||
// 1. Copy the current tracking output
|
// 1. Copy the current tracking output
|
||||||
@ -498,7 +476,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call the decoder
|
// call the decoder
|
||||||
decode_subframe(d_subframe_symbols);
|
decode_subframe(d_subframe_symbols.data());
|
||||||
|
|
||||||
if (d_nav.flag_crc_test == true)
|
if (d_nav.flag_crc_test == true)
|
||||||
{
|
{
|
||||||
@ -558,7 +536,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call the decoder
|
// call the decoder
|
||||||
decode_subframe(d_subframe_symbols);
|
decode_subframe(d_subframe_symbols.data());
|
||||||
|
|
||||||
if (d_nav.flag_crc_test == true)
|
if (d_nav.flag_crc_test == true)
|
||||||
{
|
{
|
||||||
|
@ -40,19 +40,19 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
class beidou_b3i_telemetry_decoder_gs;
|
class beidou_b3i_telemetry_decoder_gs;
|
||||||
|
|
||||||
using beidou_b3i_telemetry_decoder_gs_sptr =
|
using beidou_b3i_telemetry_decoder_gs_sptr =
|
||||||
boost::shared_ptr<beidou_b3i_telemetry_decoder_gs>;
|
boost::shared_ptr<beidou_b3i_telemetry_decoder_gs>;
|
||||||
|
|
||||||
beidou_b3i_telemetry_decoder_gs_sptr
|
beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(
|
||||||
beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite,
|
const Gnss_Satellite &satellite,
|
||||||
bool dump);
|
bool dump);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief This class implements a block that decodes the BeiDou DNAV data.
|
* \brief This class implements a block that decodes the BeiDou DNAV data.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
class beidou_b3i_telemetry_decoder_gs : public gr::block
|
class beidou_b3i_telemetry_decoder_gs : public gr::block
|
||||||
{
|
{
|
||||||
@ -70,9 +70,10 @@ public:
|
|||||||
gr_vector_void_star &output_items);
|
gr_vector_void_star &output_items);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend beidou_b3i_telemetry_decoder_gs_sptr
|
friend beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(
|
||||||
beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite,
|
const Gnss_Satellite &satellite,
|
||||||
bool dump);
|
bool dump);
|
||||||
|
|
||||||
beidou_b3i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
beidou_b3i_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
|
||||||
|
|
||||||
void decode_subframe(float *symbols);
|
void decode_subframe(float *symbols);
|
||||||
@ -81,11 +82,11 @@ private:
|
|||||||
void decode_bch15_11_01(const int32_t *bits, int32_t *decbits);
|
void decode_bch15_11_01(const int32_t *bits, int32_t *decbits);
|
||||||
|
|
||||||
// Preamble decoding
|
// Preamble decoding
|
||||||
int32_t *d_preamble_samples;
|
std::array<int32_t, BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS> d_preamble_samples{};
|
||||||
int32_t d_symbols_per_preamble;
|
int32_t d_symbols_per_preamble;
|
||||||
int32_t d_samples_per_preamble;
|
int32_t d_samples_per_preamble;
|
||||||
int32_t d_preamble_period_samples;
|
int32_t d_preamble_period_samples;
|
||||||
float *d_subframe_symbols;
|
std::array<float, BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS> d_subframe_symbols{};
|
||||||
uint32_t d_required_symbols;
|
uint32_t d_required_symbols;
|
||||||
|
|
||||||
// Storage for incoming data
|
// Storage for incoming data
|
||||||
|
@ -43,12 +43,11 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <cmath> // for fmod
|
||||||
#include <cmath> // for fmod
|
#include <cstdlib> // for abs
|
||||||
#include <cstdlib> // for abs
|
#include <exception> // for exception
|
||||||
#include <exception> // for exception
|
#include <iostream> // for cout
|
||||||
#include <iostream> // for cout
|
#include <memory> // for shared_ptr, make_shared
|
||||||
#include <memory> // for shared_ptr, make_shared
|
|
||||||
|
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 6
|
#define CRC_ERROR_LIMIT 6
|
||||||
@ -66,7 +65,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
bool dump) : gr::block("galileo_telemetry_decoder_gs", 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)))
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
{
|
{
|
||||||
//prevent telemetry symbols accumulation in output buffers
|
// prevent telemetry symbols accumulation in output buffers
|
||||||
this->set_max_noutput_items(1);
|
this->set_max_noutput_items(1);
|
||||||
// Ephemeris data port out
|
// Ephemeris data port out
|
||||||
this->message_port_register_out(pmt::mp("telemetry"));
|
this->message_port_register_out(pmt::mp("telemetry"));
|
||||||
@ -75,7 +74,6 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
d_last_valid_preamble = 0;
|
d_last_valid_preamble = 0;
|
||||||
d_sent_tlm_failed_msg = false;
|
d_sent_tlm_failed_msg = false;
|
||||||
|
|
||||||
|
|
||||||
// initialize internal vars
|
// initialize internal vars
|
||||||
d_dump = dump;
|
d_dump = dump;
|
||||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||||
@ -93,7 +91,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
d_preamble_period_symbols = GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS;
|
d_preamble_period_symbols = GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS;
|
||||||
d_required_symbols = static_cast<uint32_t>(GALILEO_INAV_PAGE_SYMBOLS) + d_samples_per_preamble;
|
d_required_symbols = static_cast<uint32_t>(GALILEO_INAV_PAGE_SYMBOLS) + d_samples_per_preamble;
|
||||||
// preamble bits to sampled symbols
|
// preamble bits to sampled symbols
|
||||||
d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
d_preamble_samples.reserve(d_samples_per_preamble);
|
||||||
d_frame_length_symbols = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS;
|
d_frame_length_symbols = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS;
|
||||||
CodeLength = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS;
|
CodeLength = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS;
|
||||||
DataLength = (CodeLength / nn) - mm;
|
DataLength = (CodeLength / nn) - mm;
|
||||||
@ -110,7 +108,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
d_preamble_period_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE;
|
d_preamble_period_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE;
|
||||||
d_required_symbols = static_cast<uint32_t>(GALILEO_FNAV_SYMBOLS_PER_PAGE) + d_samples_per_preamble;
|
d_required_symbols = static_cast<uint32_t>(GALILEO_FNAV_SYMBOLS_PER_PAGE) + d_samples_per_preamble;
|
||||||
// preamble bits to sampled symbols
|
// preamble bits to sampled symbols
|
||||||
d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
d_preamble_samples.reserve(d_samples_per_preamble);
|
||||||
d_frame_length_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS;
|
d_frame_length_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS;
|
||||||
CodeLength = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS;
|
CodeLength = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS;
|
||||||
DataLength = (CodeLength / nn) - mm;
|
DataLength = (CodeLength / nn) - mm;
|
||||||
@ -121,7 +119,6 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
d_bits_per_preamble = 0;
|
d_bits_per_preamble = 0;
|
||||||
d_samples_per_preamble = 0;
|
d_samples_per_preamble = 0;
|
||||||
d_preamble_period_symbols = 0;
|
d_preamble_period_symbols = 0;
|
||||||
d_preamble_samples = nullptr;
|
|
||||||
d_PRN_code_period_ms = 0U;
|
d_PRN_code_period_ms = 0U;
|
||||||
d_required_symbols = 0U;
|
d_required_symbols = 0U;
|
||||||
d_frame_length_symbols = 0U;
|
d_frame_length_symbols = 0U;
|
||||||
@ -131,7 +128,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
std::cout << "Galileo unified telemetry decoder error: Unknown frame type " << std::endl;
|
std::cout << "Galileo unified telemetry decoder error: Unknown frame type " << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_page_part_symbols = static_cast<double *>(volk_gnsssdr_malloc(d_frame_length_symbols * sizeof(double), volk_gnsssdr_get_alignment()));
|
d_page_part_symbols.reserve(d_frame_length_symbols);
|
||||||
for (int32_t i = 0; i < d_bits_per_preamble; i++)
|
for (int32_t i = 0; i < d_bits_per_preamble; i++)
|
||||||
{
|
{
|
||||||
switch (d_frame_type)
|
switch (d_frame_type)
|
||||||
@ -184,24 +181,18 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
int32_t max_states = 1U << static_cast<uint32_t>(mm); // 2^mm
|
int32_t max_states = 1U << static_cast<uint32_t>(mm); // 2^mm
|
||||||
g_encoder[0] = 121; // Polynomial G1
|
g_encoder[0] = 121; // Polynomial G1
|
||||||
g_encoder[1] = 91; // Polynomial G2
|
g_encoder[1] = 91; // Polynomial G2
|
||||||
out0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
out0.reserve(max_states);
|
||||||
out1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
out1.reserve(max_states);
|
||||||
state0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
state0.reserve(max_states);
|
||||||
state1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
state1.reserve(max_states);
|
||||||
// create appropriate transition matrices
|
// create appropriate transition matrices
|
||||||
nsc_transit(out0, state0, 0, g_encoder, KK, nn);
|
nsc_transit(out0.data(), state0.data(), 0, g_encoder.data(), KK, nn);
|
||||||
nsc_transit(out1, state1, 1, g_encoder, KK, nn);
|
nsc_transit(out1.data(), state1.data(), 1, g_encoder.data(), KK, nn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs()
|
galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs()
|
||||||
{
|
{
|
||||||
volk_gnsssdr_free(d_preamble_samples);
|
|
||||||
volk_gnsssdr_free(d_page_part_symbols);
|
|
||||||
volk_gnsssdr_free(out0);
|
|
||||||
volk_gnsssdr_free(out1);
|
|
||||||
volk_gnsssdr_free(state0);
|
|
||||||
volk_gnsssdr_free(state1);
|
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -218,7 +209,7 @@ galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs()
|
|||||||
|
|
||||||
void galileo_telemetry_decoder_gs::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,
|
Viterbi(page_part_bits, out0.data(), state0.data(), out1.data(), state1.data(),
|
||||||
page_part_symbols, KK, nn, DataLength);
|
page_part_symbols, KK, nn, DataLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,8 +229,8 @@ void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, con
|
|||||||
void galileo_telemetry_decoder_gs::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
|
// 1. De-interleave
|
||||||
auto *page_part_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
std::vector<double> page_part_symbols_deint(frame_length);
|
||||||
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint);
|
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint.data());
|
||||||
|
|
||||||
// 2. Viterbi decoder
|
// 2. Viterbi decoder
|
||||||
// 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder)
|
// 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder)
|
||||||
@ -252,9 +243,8 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto *page_part_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
std::vector<int32_t> page_part_bits(frame_length / 2);
|
||||||
viterbi_decoder(page_part_symbols_deint, page_part_bits);
|
viterbi_decoder(page_part_symbols_deint.data(), page_part_bits.data());
|
||||||
volk_gnsssdr_free(page_part_symbols_deint);
|
|
||||||
|
|
||||||
// 3. Call the Galileo page decoder
|
// 3. Call the Galileo page decoder
|
||||||
std::string page_String;
|
std::string page_String;
|
||||||
@ -290,7 +280,6 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i
|
|||||||
d_inav_nav.split_page(page_String, flag_even_word_arrived);
|
d_inav_nav.split_page(page_String, flag_even_word_arrived);
|
||||||
flag_even_word_arrived = 1;
|
flag_even_word_arrived = 1;
|
||||||
}
|
}
|
||||||
volk_gnsssdr_free(page_part_bits);
|
|
||||||
|
|
||||||
// 4. Push the new navigation data to the queues
|
// 4. Push the new navigation data to the queues
|
||||||
if (d_inav_nav.have_new_ephemeris() == true)
|
if (d_inav_nav.have_new_ephemeris() == true)
|
||||||
@ -332,8 +321,8 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i
|
|||||||
void galileo_telemetry_decoder_gs::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
|
// 1. De-interleave
|
||||||
auto *page_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
std::vector<double> page_symbols_deint(frame_length);
|
||||||
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint);
|
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint.data());
|
||||||
|
|
||||||
// 2. Viterbi decoder
|
// 2. Viterbi decoder
|
||||||
// 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder)
|
// 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder)
|
||||||
@ -345,9 +334,8 @@ void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_
|
|||||||
page_symbols_deint[i] = -page_symbols_deint[i];
|
page_symbols_deint[i] = -page_symbols_deint[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto *page_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
std::vector<int32_t> page_bits(frame_length / 2);
|
||||||
viterbi_decoder(page_symbols_deint, page_bits);
|
viterbi_decoder(page_symbols_deint.data(), page_bits.data());
|
||||||
volk_gnsssdr_free(page_symbols_deint);
|
|
||||||
|
|
||||||
// 3. Call the Galileo page decoder
|
// 3. Call the Galileo page decoder
|
||||||
std::string page_String;
|
std::string page_String;
|
||||||
@ -362,7 +350,6 @@ void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_
|
|||||||
page_String.push_back('0');
|
page_String.push_back('0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
volk_gnsssdr_free(page_bits);
|
|
||||||
|
|
||||||
// DECODE COMPLETE WORD (even + odd) and TEST CRC
|
// DECODE COMPLETE WORD (even + odd) and TEST CRC
|
||||||
d_fnav_nav.split_page(page_String);
|
d_fnav_nav.split_page(page_String);
|
||||||
@ -462,7 +449,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
|
|||||||
d_symbol_history.push_back(current_symbol.Prompt_I);
|
d_symbol_history.push_back(current_symbol.Prompt_I);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: //FNAV
|
case 2: // FNAV
|
||||||
{
|
{
|
||||||
d_symbol_history.push_back(current_symbol.Prompt_Q);
|
d_symbol_history.push_back(current_symbol.Prompt_Q);
|
||||||
break;
|
break;
|
||||||
@ -494,7 +481,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
|
|||||||
{
|
{
|
||||||
case 0: // no preamble information
|
case 0: // no preamble information
|
||||||
{
|
{
|
||||||
//correlate with preamble
|
// correlate with preamble
|
||||||
int32_t corr_value = 0;
|
int32_t corr_value = 0;
|
||||||
if (d_symbol_history.size() > d_required_symbols)
|
if (d_symbol_history.size() > d_required_symbols)
|
||||||
{
|
{
|
||||||
@ -522,7 +509,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
|
|||||||
}
|
}
|
||||||
case 1: // possible preamble lock
|
case 1: // possible preamble lock
|
||||||
{
|
{
|
||||||
//correlate with preamble
|
// correlate with preamble
|
||||||
int32_t corr_value = 0;
|
int32_t corr_value = 0;
|
||||||
int32_t preamble_diff = 0;
|
int32_t preamble_diff = 0;
|
||||||
if (d_symbol_history.size() > d_required_symbols)
|
if (d_symbol_history.size() > d_required_symbols)
|
||||||
@ -594,7 +581,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
|
|||||||
d_page_part_symbols[i] = -d_symbol_history.at(i + d_samples_per_preamble); // because last symbol of the preamble is just received now!
|
d_page_part_symbols[i] = -d_symbol_history.at(i + d_samples_per_preamble); // because last symbol of the preamble is just received now!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
decode_INAV_word(d_page_part_symbols, d_frame_length_symbols);
|
decode_INAV_word(d_page_part_symbols.data(), d_frame_length_symbols);
|
||||||
break;
|
break;
|
||||||
case 2: // FNAV
|
case 2: // FNAV
|
||||||
// NEW Galileo page part is received
|
// NEW Galileo page part is received
|
||||||
@ -619,7 +606,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
decode_FNAV_word(d_page_part_symbols, d_frame_length_symbols);
|
decode_FNAV_word(d_page_part_symbols.data(), d_frame_length_symbols);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -40,15 +40,20 @@
|
|||||||
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
#include <boost/shared_ptr.hpp> // for boost::shared_ptr
|
||||||
#include <gnuradio/block.h> // for block
|
#include <gnuradio/block.h> // for block
|
||||||
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
#include <gnuradio/types.h> // for gr_vector_const_void_star
|
||||||
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class galileo_telemetry_decoder_gs;
|
class galileo_telemetry_decoder_gs;
|
||||||
|
|
||||||
using galileo_telemetry_decoder_gs_sptr = boost::shared_ptr<galileo_telemetry_decoder_gs>;
|
using galileo_telemetry_decoder_gs_sptr = boost::shared_ptr<galileo_telemetry_decoder_gs>;
|
||||||
|
|
||||||
galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(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
|
* \brief This class implements a block that decodes the INAV and FNAV data defined in Galileo ICD
|
||||||
@ -69,8 +74,11 @@ public:
|
|||||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend galileo_telemetry_decoder_gs_sptr
|
friend galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(
|
||||||
galileo_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
const Gnss_Satellite &satellite,
|
||||||
|
int frame_type,
|
||||||
|
bool dump);
|
||||||
|
|
||||||
galileo_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);
|
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits);
|
||||||
@ -84,11 +92,11 @@ private:
|
|||||||
int32_t d_bits_per_preamble;
|
int32_t d_bits_per_preamble;
|
||||||
int32_t d_samples_per_preamble;
|
int32_t d_samples_per_preamble;
|
||||||
int32_t d_preamble_period_symbols;
|
int32_t d_preamble_period_symbols;
|
||||||
int32_t *d_preamble_samples;
|
std::vector<int32_t> d_preamble_samples;
|
||||||
uint32_t d_PRN_code_period_ms;
|
uint32_t d_PRN_code_period_ms;
|
||||||
uint32_t d_required_symbols;
|
uint32_t d_required_symbols;
|
||||||
uint32_t d_frame_length_symbols;
|
uint32_t d_frame_length_symbols;
|
||||||
double *d_page_part_symbols;
|
std::vector<double> d_page_part_symbols;
|
||||||
|
|
||||||
boost::circular_buffer<float> d_symbol_history;
|
boost::circular_buffer<float> d_symbol_history;
|
||||||
|
|
||||||
@ -118,14 +126,17 @@ private:
|
|||||||
uint32_t d_TOW_at_current_symbol_ms;
|
uint32_t d_TOW_at_current_symbol_ms;
|
||||||
|
|
||||||
bool flag_TOW_set;
|
bool flag_TOW_set;
|
||||||
double delta_t; //GPS-GALILEO time offset
|
double delta_t; // GPS-GALILEO time offset
|
||||||
|
|
||||||
std::string d_dump_filename;
|
std::string d_dump_filename;
|
||||||
std::ofstream d_dump_file;
|
std::ofstream d_dump_file;
|
||||||
|
|
||||||
// vars for Viterbi decoder
|
// vars for Viterbi decoder
|
||||||
int32_t *out0, *out1, *state0, *state1;
|
std::vector<int32_t> out0;
|
||||||
int32_t g_encoder[2]{};
|
std::vector<int32_t> out1;
|
||||||
|
std::vector<int32_t> state0;
|
||||||
|
std::vector<int32_t> state1;
|
||||||
|
std::array<int32_t, 2> g_encoder{};
|
||||||
const int32_t nn = 2; // Coding rate 1/n
|
const int32_t nn = 2; // Coding rate 1/n
|
||||||
const int32_t KK = 7; // Constraint Length
|
const int32_t KK = 7; // Constraint Length
|
||||||
int32_t mm = KK - 1;
|
int32_t mm = KK - 1;
|
||||||
|
@ -38,13 +38,11 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <array>
|
#include <cmath> // for floor, round
|
||||||
#include <cmath> // for floor, round
|
#include <cstdlib> // for abs
|
||||||
#include <cstdlib> // for abs, malloc
|
#include <exception> // for exception
|
||||||
#include <cstring> // for memcpy
|
#include <iostream> // for cout
|
||||||
#include <exception> // for exception
|
#include <memory> // for shared_ptr, make_shared
|
||||||
#include <iostream> // for cout
|
|
||||||
#include <memory> // for shared_ptr, make_shared
|
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 6
|
#define CRC_ERROR_LIMIT 6
|
||||||
|
|
||||||
@ -61,7 +59,7 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
|
|||||||
bool dump) : gr::block("glonass_l1_ca_telemetry_decoder_gs", 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)))
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
{
|
{
|
||||||
//prevent telemetry symbols accumulation in output buffers
|
// prevent telemetry symbols accumulation in output buffers
|
||||||
this->set_max_noutput_items(1);
|
this->set_max_noutput_items(1);
|
||||||
// Ephemeris data port out
|
// Ephemeris data port out
|
||||||
this->message_port_register_out(pmt::mp("telemetry"));
|
this->message_port_register_out(pmt::mp("telemetry"));
|
||||||
@ -71,19 +69,8 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
|
|||||||
d_dump = dump;
|
d_dump = dump;
|
||||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||||
LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING";
|
LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING";
|
||||||
// Define the number of sampes per symbol. Notice that GLONASS has 2 rates,
|
|
||||||
// one for the navigation data and the other for the preamble information
|
|
||||||
d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS;
|
|
||||||
|
|
||||||
// Set the preamble information
|
|
||||||
std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> preambles_bits{GLONASS_GNAV_PREAMBLE};
|
|
||||||
// Since preamble rate is different than navigation data rate we use a constant
|
|
||||||
d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
|
||||||
|
|
||||||
memcpy(static_cast<uint16_t *>(this->d_preambles_bits), preambles_bits.data(), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t));
|
|
||||||
|
|
||||||
// preamble bits to sampled symbols
|
// preamble bits to sampled symbols
|
||||||
d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble));
|
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
for (uint16_t d_preambles_bit : d_preambles_bits)
|
for (uint16_t d_preambles_bit : d_preambles_bits)
|
||||||
{
|
{
|
||||||
@ -120,7 +107,6 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
|
|||||||
|
|
||||||
glonass_l1_ca_telemetry_decoder_gs::~glonass_l1_ca_telemetry_decoder_gs()
|
glonass_l1_ca_telemetry_decoder_gs::~glonass_l1_ca_telemetry_decoder_gs()
|
||||||
{
|
{
|
||||||
delete d_preambles_symbols;
|
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user