mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 04:30:33 +00:00
Merge branch 'next' of https://github.com/mmajoral/gnss-sdr into fpga_extended_coherent_integration
This commit is contained in:
commit
694c5d9dcb
@ -53,7 +53,6 @@ private:
|
|||||||
boost::asio::ip::udp::socket socket;
|
boost::asio::ip::udp::socket socket;
|
||||||
boost::system::error_code error;
|
boost::system::error_code error;
|
||||||
std::vector<boost::asio::ip::udp::endpoint> endpoints;
|
std::vector<boost::asio::ip::udp::endpoint> endpoints;
|
||||||
Monitor_Pvt monitor_pvt{};
|
|
||||||
Serdes_Monitor_Pvt serdes;
|
Serdes_Monitor_Pvt serdes;
|
||||||
bool use_protobuf;
|
bool use_protobuf;
|
||||||
};
|
};
|
||||||
|
@ -199,14 +199,14 @@ void BeidouB1iPcpsAcquisition::init()
|
|||||||
|
|
||||||
void BeidouB1iPcpsAcquisition::set_local_code()
|
void BeidouB1iPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
beidou_b1i_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
beidou_b1i_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < num_codes_; i++)
|
for (unsigned int i = 0; i < num_codes_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -200,14 +200,14 @@ void BeidouB3iPcpsAcquisition::init()
|
|||||||
|
|
||||||
void BeidouB3iPcpsAcquisition::set_local_code()
|
void BeidouB3iPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
beidou_b3i_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < num_codes_; i++)
|
for (unsigned int i = 0; i < num_codes_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -210,19 +210,19 @@ void GalileoE1Pcps8msAmbiguousAcquisition::set_local_code()
|
|||||||
bool cboc = configuration_->property(
|
bool cboc = configuration_->property(
|
||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
std::array<char, 3> Signal_{};
|
std::array<char, 3> Signal_{};
|
||||||
Signal_[0] = gnss_synchro_->Signal[0];
|
Signal_[0] = gnss_synchro_->Signal[0];
|
||||||
Signal_[1] = gnss_synchro_->Signal[1];
|
Signal_[1] = gnss_synchro_->Signal[1];
|
||||||
Signal_[2] = '\0';
|
Signal_[2] = '\0';
|
||||||
|
|
||||||
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), Signal_,
|
galileo_e1_code_gen_complex_sampled(code, Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -245,8 +245,7 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
bool cboc = configuration_->property(
|
bool cboc = configuration_->property(
|
||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
gsl::span<std::complex<float>> code_span(code.get(), code_length_);
|
|
||||||
|
|
||||||
if (acquire_pilot_ == true)
|
if (acquire_pilot_ == true)
|
||||||
{
|
{
|
||||||
@ -254,12 +253,12 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
std::array<char, 3> pilot_signal = {{'1', 'C', '\0'}};
|
std::array<char, 3> pilot_signal = {{'1', 'C', '\0'}};
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_complex_sampled(code_span, pilot_signal,
|
galileo_e1_code_gen_complex_sampled(code, pilot_signal,
|
||||||
cboc, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0, false);
|
cboc, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_complex_sampled(code_span, pilot_signal,
|
galileo_e1_code_gen_complex_sampled(code, pilot_signal,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,12 +270,12 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
Signal_[2] = '\0';
|
Signal_[2] = '\0';
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_complex_sampled(code_span, Signal_,
|
galileo_e1_code_gen_complex_sampled(code, Signal_,
|
||||||
cboc, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0, false);
|
cboc, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_complex_sampled(code_span, Signal_,
|
galileo_e1_code_gen_complex_sampled(code, Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,7 +283,7 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
gsl::span<gr_complex> code__span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code__span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code__span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code__span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -244,19 +244,19 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_local_code()
|
|||||||
bool cboc = configuration_->property(
|
bool cboc = configuration_->property(
|
||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
std::array<char, 3> Signal_{};
|
std::array<char, 3> Signal_{};
|
||||||
Signal_[0] = gnss_synchro_->Signal[0];
|
Signal_[0] = gnss_synchro_->Signal[0];
|
||||||
Signal_[1] = gnss_synchro_->Signal[1];
|
Signal_[1] = gnss_synchro_->Signal[1];
|
||||||
Signal_[2] = '\0';
|
Signal_[2] = '\0';
|
||||||
|
|
||||||
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_,
|
galileo_e1_code_gen_complex_sampled(code, Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < (sampled_ms_ / (folding_factor_ * 4)); i++)
|
for (unsigned int i = 0; i < (sampled_ms_ / (folding_factor_ * 4)); i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -214,18 +214,18 @@ void GalileoE1PcpsTongAmbiguousAcquisition::set_local_code()
|
|||||||
bool cboc = configuration_->property(
|
bool cboc = configuration_->property(
|
||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
std::array<char, 3> Signal_{};
|
std::array<char, 3> Signal_{};
|
||||||
Signal_[0] = gnss_synchro_->Signal[0];
|
Signal_[0] = gnss_synchro_->Signal[0];
|
||||||
Signal_[1] = gnss_synchro_->Signal[1];
|
Signal_[1] = gnss_synchro_->Signal[1];
|
||||||
Signal_[2] = '\0';
|
Signal_[2] = '\0';
|
||||||
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_,
|
galileo_e1_code_gen_complex_sampled(code, Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
for (unsigned int i = 0; i < sampled_ms_ / 4; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -209,6 +209,7 @@ void GalileoE5aPcpsAcquisition::set_doppler_step(unsigned int doppler_step)
|
|||||||
acquisition_->set_doppler_step(doppler_step_);
|
acquisition_->set_doppler_step(doppler_step_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GalileoE5aPcpsAcquisition::set_doppler_center(int doppler_center)
|
void GalileoE5aPcpsAcquisition::set_doppler_center(int doppler_center)
|
||||||
{
|
{
|
||||||
doppler_center_ = doppler_center;
|
doppler_center_ = doppler_center;
|
||||||
@ -216,6 +217,7 @@ void GalileoE5aPcpsAcquisition::set_doppler_center(int doppler_center)
|
|||||||
acquisition_->set_doppler_center(doppler_center_);
|
acquisition_->set_doppler_center(doppler_center_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GalileoE5aPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
|
void GalileoE5aPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
|
||||||
{
|
{
|
||||||
gnss_synchro_ = gnss_synchro;
|
gnss_synchro_ = gnss_synchro;
|
||||||
@ -237,7 +239,7 @@ void GalileoE5aPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GalileoE5aPcpsAcquisition::set_local_code()
|
void GalileoE5aPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
std::array<char, 3> signal_{};
|
std::array<char, 3> signal_{};
|
||||||
signal_[0] = '5';
|
signal_[0] = '5';
|
||||||
signal_[2] = '\0';
|
signal_[2] = '\0';
|
||||||
@ -257,16 +259,16 @@ void GalileoE5aPcpsAcquisition::set_local_code()
|
|||||||
|
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
galileo_e5_a_code_gen_complex_sampled(gsl::span<gr_complex>(code.get(), code_length_), signal_, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0);
|
galileo_e5_a_code_gen_complex_sampled(code, signal_, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
galileo_e5_a_code_gen_complex_sampled(gsl::span<gr_complex>(code.get(), code_length_), signal_, gnss_synchro_->PRN, fs_in_, 0);
|
galileo_e5_a_code_gen_complex_sampled(code, signal_, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
}
|
}
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -202,14 +202,14 @@ void GlonassL1CaPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GlonassL1CaPcpsAcquisition::set_local_code()
|
void GlonassL1CaPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), /* gnss_synchro_->PRN,*/ fs_in_, 0);
|
glonass_l1_ca_code_gen_complex_sampled(code, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -201,14 +201,14 @@ void GlonassL2CaPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GlonassL2CaPcpsAcquisition::set_local_code()
|
void GlonassL2CaPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), /* gnss_synchro_->PRN,*/ fs_in_, 0);
|
glonass_l2_ca_code_gen_complex_sampled(code, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -201,6 +201,7 @@ void GpsL1CaPcpsAcquisition::set_doppler_step(unsigned int doppler_step)
|
|||||||
acquisition_->set_doppler_step(doppler_step_);
|
acquisition_->set_doppler_step(doppler_step_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GpsL1CaPcpsAcquisition::set_doppler_center(int doppler_center)
|
void GpsL1CaPcpsAcquisition::set_doppler_center(int doppler_center)
|
||||||
{
|
{
|
||||||
doppler_center_ = doppler_center;
|
doppler_center_ = doppler_center;
|
||||||
@ -208,6 +209,7 @@ void GpsL1CaPcpsAcquisition::set_doppler_center(int doppler_center)
|
|||||||
acquisition_->set_doppler_center(doppler_center_);
|
acquisition_->set_doppler_center(doppler_center_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GpsL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
|
void GpsL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
|
||||||
{
|
{
|
||||||
gnss_synchro_ = gnss_synchro;
|
gnss_synchro_ = gnss_synchro;
|
||||||
@ -230,20 +232,20 @@ void GpsL1CaPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GpsL1CaPcpsAcquisition::set_local_code()
|
void GpsL1CaPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0);
|
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, acq_parameters_.resampled_fs, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
}
|
}
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
@ -264,7 +266,7 @@ void GpsL1CaPcpsAcquisition::set_state(int state)
|
|||||||
|
|
||||||
float GpsL1CaPcpsAcquisition::calculate_threshold(float pfa)
|
float GpsL1CaPcpsAcquisition::calculate_threshold(float pfa)
|
||||||
{
|
{
|
||||||
//Calculate the threshold
|
// Calculate the threshold
|
||||||
unsigned int frequency_bins = 0;
|
unsigned int frequency_bins = 0;
|
||||||
for (int doppler = static_cast<int>(-doppler_max_); doppler <= static_cast<int>(doppler_max_); doppler += doppler_step_)
|
for (int doppler = static_cast<int>(-doppler_max_); doppler <= static_cast<int>(doppler_max_); doppler += doppler_step_)
|
||||||
{
|
{
|
||||||
@ -355,6 +357,7 @@ gr::basic_block_sptr GpsL1CaPcpsAcquisition::get_right_block()
|
|||||||
return acquisition_;
|
return acquisition_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GpsL1CaPcpsAcquisition::set_resampler_latency(uint32_t latency_samples)
|
void GpsL1CaPcpsAcquisition::set_resampler_latency(uint32_t latency_samples)
|
||||||
{
|
{
|
||||||
acquisition_->set_resampler_latency(latency_samples);
|
acquisition_->set_resampler_latency(latency_samples);
|
||||||
|
@ -206,14 +206,14 @@ void GpsL1CaPcpsOpenClAcquisition::set_local_code()
|
|||||||
{
|
{
|
||||||
if (item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -232,14 +232,14 @@ void GpsL1CaPcpsQuickSyncAcquisition::set_local_code()
|
|||||||
{
|
{
|
||||||
if (item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < (sampled_ms_ / folding_factor_); i++)
|
for (unsigned int i = 0; i < (sampled_ms_ / folding_factor_); i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -194,14 +194,14 @@ void GpsL1CaPcpsTongAcquisition::set_local_code()
|
|||||||
{
|
{
|
||||||
if (item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), gnss_synchro_->PRN, fs_in_, 0);
|
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < sampled_ms_; i++)
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_cc_->set_local_code(code_.data());
|
acquisition_cc_->set_local_code(code_.data());
|
||||||
|
@ -241,21 +241,21 @@ void GpsL2MPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GpsL2MPcpsAcquisition::set_local_code()
|
void GpsL2MPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
gps_l2c_m_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), gnss_synchro_->PRN, acq_parameters_.resampled_fs);
|
gps_l2c_m_code_gen_complex_sampled(code, gnss_synchro_->PRN, acq_parameters_.resampled_fs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gps_l2c_m_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), gnss_synchro_->PRN, fs_in_);
|
gps_l2c_m_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_);
|
||||||
}
|
}
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < num_codes_; i++)
|
for (unsigned int i = 0; i < num_codes_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -235,21 +235,21 @@ void GpsL5iPcpsAcquisition::init()
|
|||||||
|
|
||||||
void GpsL5iPcpsAcquisition::set_local_code()
|
void GpsL5iPcpsAcquisition::set_local_code()
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::vector<std::complex<float>> code(code_length_);
|
||||||
|
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
gps_l5i_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), gnss_synchro_->PRN, acq_parameters_.resampled_fs);
|
gps_l5i_code_gen_complex_sampled(code, gnss_synchro_->PRN, acq_parameters_.resampled_fs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gps_l5i_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), gnss_synchro_->PRN, fs_in_);
|
gps_l5i_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_);
|
||||||
}
|
}
|
||||||
|
|
||||||
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
gsl::span<gr_complex> code_span(code_.data(), vector_length_);
|
||||||
for (unsigned int i = 0; i < num_codes_; i++)
|
for (unsigned int i = 0; i < num_codes_; i++)
|
||||||
{
|
{
|
||||||
std::copy_n(code.get(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
std::copy_n(code.data(), code_length_, code_span.subspan(i * code_length_, code_length_).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
acquisition_->set_local_code(code_.data());
|
acquisition_->set_local_code(code_.data());
|
||||||
|
@ -35,11 +35,11 @@
|
|||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
||||||
|
|
||||||
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift)
|
void beidou_b3i_code_gen_int(gsl::span<int> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const unsigned int _code_length = 10230;
|
const uint32_t _code_length = 10230;
|
||||||
std::bitset<_code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
std::bitset<_code_length> G2{};
|
std::bitset<_code_length> G2{};
|
||||||
auto G1_register = std::bitset<13>{}.set(); // All true
|
auto G1_register = std::bitset<13>{}.set(); // All true
|
||||||
@ -175,54 +175,54 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void beidou_b3i_code_gen_float(gsl::span<float> _dest, signed int _prn, unsigned int _chip_shift)
|
void beidou_b3i_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const unsigned int _code_length = 10230;
|
const uint32_t _code_length = 10230;
|
||||||
std::array<int, _code_length> b3i_code_int{};
|
std::array<int, _code_length> b3i_code_int{};
|
||||||
|
|
||||||
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
||||||
|
|
||||||
for (unsigned int ii = 0; ii < _code_length; ++ii)
|
for (uint32_t ii = 0; ii < _code_length; ++ii)
|
||||||
{
|
{
|
||||||
_dest[ii] = static_cast<float>(b3i_code_int[ii]);
|
_dest[ii] = static_cast<float>(b3i_code_int[ii]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, signed int _prn, unsigned int _chip_shift)
|
void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const unsigned int _code_length = 10230;
|
const uint32_t _code_length = 10230;
|
||||||
std::array<int, _code_length> b3i_code_int{};
|
std::array<int, _code_length> b3i_code_int{};
|
||||||
|
|
||||||
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
||||||
|
|
||||||
for (unsigned int ii = 0; ii < _code_length; ++ii)
|
for (uint32_t ii = 0; ii < _code_length; ++ii)
|
||||||
{
|
{
|
||||||
_dest[ii] = std::complex<float>(static_cast<float>(b3i_code_int[ii]), 0.0F);
|
_dest[ii] = std::complex<float>(static_cast<float>(b3i_code_int[ii]), 0.0F);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, unsigned int _prn, int _fs, unsigned int _chip_shift)
|
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint32_t _prn, int _fs, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
||||||
std::array<std::complex<float>, 10230> _code{};
|
std::array<std::complex<float>, 10230> _code{};
|
||||||
signed int _samplesPerCode, _codeValueIndex;
|
int32_t _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const signed int _codeFreqBasis = 10230000; // Hz
|
const int32_t _codeFreqBasis = 10230000; // Hz
|
||||||
const signed int _codeLength = 10230;
|
const int32_t _codeLength = 10230;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
_samplesPerCode = static_cast<signed int>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
||||||
|
|
||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
||||||
beidou_b3i_code_gen_complex(_code, _prn, _chip_shift); // generate C/A code 1 sample per chip
|
beidou_b3i_code_gen_complex(_code, _prn, _chip_shift); // generate C/A code 1 sample per chip
|
||||||
|
|
||||||
for (signed int i = 0; i < _samplesPerCode; i++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
//=== Digitizing =======================================================
|
//=== Digitizing =======================================================
|
||||||
|
|
||||||
@ -231,7 +231,6 @@ void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, u
|
|||||||
// number of samples per millisecond (because one C/A code period is one
|
// number of samples per millisecond (because one C/A code period is one
|
||||||
// millisecond).
|
// millisecond).
|
||||||
|
|
||||||
// _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1;
|
|
||||||
aux = (_ts * (i + 1)) / _tc;
|
aux = (_ts * (i + 1)) / _tc;
|
||||||
_codeValueIndex = auxCeil(aux) - 1;
|
_codeValueIndex = auxCeil(aux) - 1;
|
||||||
|
|
||||||
@ -245,7 +244,7 @@ void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, u
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_dest[i] = _code[_codeValueIndex]; //repeat the chip -> upsample
|
_dest[i] = _code[_codeValueIndex]; // repeat the chip -> upsample
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,7 @@
|
|||||||
#define GNSS_SDR_BEIDOU_B3I_SIGNAL_PROCESSING_H_
|
#define GNSS_SDR_BEIDOU_B3I_SIGNAL_PROCESSING_H_
|
||||||
|
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <iostream>
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <array>
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#if HAS_SPAN
|
#if HAS_SPAN
|
||||||
#include <span>
|
#include <span>
|
||||||
@ -47,18 +44,18 @@ namespace gsl = std;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Generates int BeiDou B3I code for the desired SV ID and code shift
|
//! Generates int BeiDou B3I code for the desired SV ID and code shift
|
||||||
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift);
|
void beidou_b3i_code_gen_int(gsl::span<int> _dest, int32_t _prn, uint32_t _chip_shift);
|
||||||
|
|
||||||
//! Generates float BeiDou B3I code for the desired SV ID and code shift
|
//! Generates float BeiDou B3I code for the desired SV ID and code shift
|
||||||
void beidou_b3i_code_gen_float(gsl::span<float> _dest, signed int _prn, unsigned int _chip_shift);
|
void beidou_b3i_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift);
|
||||||
|
|
||||||
//! Generates complex BeiDou B3I code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
//! Generates complex BeiDou B3I code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
||||||
void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, signed int _prn, unsigned int _chip_shift);
|
void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _prn, uint32_t _chip_shift);
|
||||||
|
|
||||||
//! Generates N complex BeiDou B3I codes for the desired SV ID and code shift
|
//! Generates N complex BeiDou B3I codes for the desired SV ID and code shift
|
||||||
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, unsigned int _prn, int _fs, unsigned int _chip_shift, unsigned int _ncodes);
|
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint32_t _prn, int _fs, uint32_t _chip_shift, uint32_t _ncodes);
|
||||||
|
|
||||||
//! Generates complex BeiDou B3I code for the desired SV ID and code shift
|
//! Generates complex BeiDou B3I code for the desired SV ID and code shift
|
||||||
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, unsigned int _prn, int _fs, unsigned int _chip_shift);
|
void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint32_t _prn, int _fs, uint32_t _chip_shift);
|
||||||
|
|
||||||
#endif /* GNSS_SDR_BEIDOU_B3I_SIGNAL_PROCESSING_H_ */
|
#endif /* GNSS_SDR_BEIDOU_B3I_SIGNAL_PROCESSING_H_ */
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
#include "galileo_e1_signal_processing.h"
|
#include "galileo_e1_signal_processing.h"
|
||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
#include "gnss_signal_processing.h"
|
#include "gnss_signal_processing.h"
|
||||||
#include <array>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
#include "Galileo_E5a.h"
|
#include "Galileo_E5a.h"
|
||||||
#include "gnss_signal_processing.h"
|
#include "gnss_signal_processing.h"
|
||||||
#include <gnuradio/gr_complex.h>
|
#include <gnuradio/gr_complex.h>
|
||||||
#include <array>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#ifndef GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_
|
#ifndef GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_
|
||||||
#define GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_
|
#define GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#if HAS_SPAN
|
#if HAS_SPAN
|
||||||
|
@ -232,7 +232,7 @@ int togeod(double *dphi, double *dlambda, double *h, double a, double finv, doub
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
arma::mat Gravity_ECEF(const arma::vec &r_eb_e)
|
arma::vec Gravity_ECEF(const arma::vec &r_eb_e)
|
||||||
{
|
{
|
||||||
// Parameters
|
// Parameters
|
||||||
const double R_0 = 6378137.0; // WGS84 Equatorial radius in meters
|
const double R_0 = 6378137.0; // WGS84 Equatorial radius in meters
|
||||||
|
@ -79,7 +79,7 @@ int topocent(double *Az, double *El, double *D, const arma::vec &x, const arma::
|
|||||||
*/
|
*/
|
||||||
int togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z);
|
int togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z);
|
||||||
|
|
||||||
arma::mat Gravity_ECEF(const arma::vec &r_eb_e); //!< Calculates acceleration due to gravity resolved about ECEF-frame
|
arma::vec Gravity_ECEF(const arma::vec &r_eb_e); //!< Calculates acceleration due to gravity resolved about ECEF-frame
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Conversion of Cartesian coordinates (X,Y,Z) to geographical
|
* \brief Conversion of Cartesian coordinates (X,Y,Z) to geographical
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
||||||
|
|
||||||
void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int32_t _prn,*/ uint32_t _chip_shift)
|
void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 511;
|
const uint32_t _code_length = 511;
|
||||||
std::bitset<_code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
@ -101,7 +101,7 @@ void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int
|
|||||||
/*
|
/*
|
||||||
* Generates complex GLONASS L1 C/A code for the desired SV ID and sampled to specific sampling frequency
|
* Generates complex GLONASS L1 C/A code for the desired SV ID and sampled to specific sampling frequency
|
||||||
*/
|
*/
|
||||||
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift)
|
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
||||||
std::array<std::complex<float>, 511> _code{};
|
std::array<std::complex<float>, 511> _code{};
|
||||||
|
@ -43,13 +43,13 @@ namespace gsl = std;
|
|||||||
#include <gsl/gsl>
|
#include <gsl/gsl>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//!Generates complex GLONASS L1 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
//! Generates complex GLONASS L1 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
||||||
void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /*int32_t _prn,*/ uint32_t _chip_shift);
|
void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, uint32_t _chip_shift);
|
||||||
|
|
||||||
//! Generates N complex GLONASS L1 C/A codes for the desired SV ID and code shift
|
//! Generates N complex GLONASS L1 C/A codes for the desired SV ID and code shift
|
||||||
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift, uint32_t _ncodes);
|
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift, uint32_t _ncodes);
|
||||||
|
|
||||||
//! Generates complex GLONASS L1 C/A code for the desired SV ID and code shift
|
//! Generates complex GLONASS L1 C/A code for the desired SV ID and code shift
|
||||||
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift);
|
void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift);
|
||||||
|
|
||||||
#endif /* GNSS_SDR_GLONASS_SDR_SIGNAL_PROCESSING_H_ */
|
#endif /* GNSS_SDR_GLONASS_SDR_SIGNAL_PROCESSING_H_ */
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
||||||
|
|
||||||
void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int32_t _prn,*/ uint32_t _chip_shift)
|
void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 511;
|
const uint32_t _code_length = 511;
|
||||||
std::bitset<_code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
@ -101,7 +101,7 @@ void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int
|
|||||||
/*
|
/*
|
||||||
* Generates complex GLONASS L2 C/A code for the desired SV ID and sampled to specific sampling frequency
|
* Generates complex GLONASS L2 C/A code for the desired SV ID and sampled to specific sampling frequency
|
||||||
*/
|
*/
|
||||||
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift)
|
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
||||||
std::array<std::complex<float>, 511> _code{};
|
std::array<std::complex<float>, 511> _code{};
|
||||||
|
@ -43,13 +43,13 @@ namespace gsl = std;
|
|||||||
#include <gsl/gsl>
|
#include <gsl/gsl>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//!Generates complex GLONASS L2 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
//! Generates complex GLONASS L2 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
||||||
void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /*int32_t _prn,*/ uint32_t _chip_shift);
|
void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, uint32_t _chip_shift);
|
||||||
|
|
||||||
//! Generates N complex GLONASS L2 C/A codes for the desired SV ID and code shift
|
//! Generates N complex GLONASS L2 C/A codes for the desired SV ID and code shift
|
||||||
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift, uint32_t _ncodes);
|
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift, uint32_t _ncodes);
|
||||||
|
|
||||||
//! Generates complex GLONASS L2 C/A code for the desired SV ID and code shift
|
//! Generates complex GLONASS L2 C/A code for the desired SV ID and code shift
|
||||||
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift);
|
void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, int32_t _fs, uint32_t _chip_shift);
|
||||||
|
|
||||||
#endif /* GNSS_SDR_GLONASS_L2_SIGNAL_PROCESSING_H_ */
|
#endif /* GNSS_SDR_GLONASS_L2_SIGNAL_PROCESSING_H_ */
|
||||||
|
@ -106,7 +106,7 @@ void gps_l2c_m_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, ui
|
|||||||
|
|
||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(GPS_L2_M_CODE_RATE_HZ); // C/A chip period in sec
|
_tc = 1.0 / static_cast<float>(GPS_L2_M_CODE_RATE_HZ); // L2C chip period in sec
|
||||||
|
|
||||||
for (int32_t i = 0; i < _samplesPerCode; i++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
@ -123,7 +123,7 @@ void gps_l2c_m_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, ui
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_dest[i] = std::complex<float>(1.0 - 2.0 * _code[_codeValueIndex], 0); //repeat the chip -> upsample
|
_dest[i] = std::complex<float>(1.0 - 2.0 * _code[_codeValueIndex], 0); // repeat the chip -> upsample
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "gps_l5_signal.h"
|
#include "gps_l5_signal.h"
|
||||||
#include "GPS_L5.h"
|
#include "GPS_L5.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <cmath>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
std::deque<bool> l5i_xa_shift(std::deque<bool> xa) // GPS-IS-705E Figure 3-4 pp. 15
|
std::deque<bool> l5i_xa_shift(std::deque<bool> xa) // GPS-IS-705E Figure 3-4 pp. 15
|
||||||
@ -298,7 +299,6 @@ void gps_l5q_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint
|
|||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(GPS_L5Q_CODE_RATE_HZ); // L5Q chip period in sec
|
_tc = 1.0 / static_cast<float>(GPS_L5Q_CODE_RATE_HZ); // L5Q chip period in sec
|
||||||
|
|
||||||
//float aux;
|
|
||||||
for (int32_t i = 0; i < _samplesPerCode; i++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
//=== Digitizing =======================================================
|
//=== Digitizing =======================================================
|
||||||
|
@ -975,9 +975,8 @@ void discontcp(tcp_t *tcp, int tcon)
|
|||||||
/* open tcp server -----------------------------------------------------------*/
|
/* open tcp server -----------------------------------------------------------*/
|
||||||
tcpsvr_t *opentcpsvr(const char *path, char *msg)
|
tcpsvr_t *opentcpsvr(const char *path, char *msg)
|
||||||
{
|
{
|
||||||
tcpsvr_t *tcpsvr, tcpsvr0; // = {{0}};
|
tcpsvr_t *tcpsvr, tcpsvr0{};
|
||||||
char port[256] = "";
|
char port[256] = "";
|
||||||
tcpsvr0 = {{0, {0}, 0, {0, 0, 0, {0}}, 0, 0, 0, 0}, {{0, {0}, 0, {0, 0, 0, {0}}, 0, 0, 0, 0}}};
|
|
||||||
tracet(3, "opentcpsvr: path=%s\n", path);
|
tracet(3, "opentcpsvr: path=%s\n", path);
|
||||||
|
|
||||||
if (!(tcpsvr = static_cast<tcpsvr_t *>(malloc(sizeof(tcpsvr_t)))))
|
if (!(tcpsvr = static_cast<tcpsvr_t *>(malloc(sizeof(tcpsvr_t)))))
|
||||||
@ -1265,9 +1264,8 @@ int consock(tcpcli_t *tcpcli, char *msg)
|
|||||||
/* open tcp client -----------------------------------------------------------*/
|
/* open tcp client -----------------------------------------------------------*/
|
||||||
tcpcli_t *opentcpcli(const char *path, char *msg)
|
tcpcli_t *opentcpcli(const char *path, char *msg)
|
||||||
{
|
{
|
||||||
tcpcli_t *tcpcli, tcpcli0; // = {{0}};
|
tcpcli_t *tcpcli, tcpcli0{};
|
||||||
char port[256] = "";
|
char port[256] = "";
|
||||||
tcpcli0 = {{0, {0}, 0, {0, 0, 0, {0}}, 0, 0, 0, 0}, 0, 0};
|
|
||||||
|
|
||||||
tracet(3, "opentcpcli: path=%s\n", path);
|
tracet(3, "opentcpcli: path=%s\n", path);
|
||||||
|
|
||||||
|
@ -92,7 +92,6 @@ private:
|
|||||||
// Preamble decoding
|
// Preamble decoding
|
||||||
const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE};
|
const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE};
|
||||||
std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{};
|
std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{};
|
||||||
uint32_t d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS;
|
|
||||||
const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
|
|
||||||
// Storage for incoming data
|
// Storage for incoming data
|
||||||
|
@ -90,7 +90,6 @@ private:
|
|||||||
// Preamble decoding
|
// Preamble decoding
|
||||||
const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE};
|
const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE};
|
||||||
std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{};
|
std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{};
|
||||||
uint32_t d_samples_per_symbol = (GLONASS_L2_CA_CODE_RATE_HZ / GLONASS_L2_CA_CODE_LENGTH_CHIPS) / GLONASS_L2_CA_SYMBOL_RATE_BPS;
|
|
||||||
const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
|
|
||||||
// Storage for incoming data
|
// Storage for incoming data
|
||||||
|
@ -194,6 +194,7 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking(
|
|||||||
|
|
||||||
void GalileoE1DllPllVemlTracking::stop_tracking()
|
void GalileoE1DllPllVemlTracking::stop_tracking()
|
||||||
{
|
{
|
||||||
|
tracking_->stop_tracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,6 +190,7 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking(
|
|||||||
|
|
||||||
void GalileoE5aDllPllTracking::stop_tracking()
|
void GalileoE5aDllPllTracking::stop_tracking()
|
||||||
{
|
{
|
||||||
|
tracking_->stop_tracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,6 +172,7 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking(
|
|||||||
|
|
||||||
void GpsL2MDllPllTracking::stop_tracking()
|
void GpsL2MDllPllTracking::stop_tracking()
|
||||||
{
|
{
|
||||||
|
tracking_->stop_tracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ void GpsL2MDllPllTrackingFpga::start_tracking()
|
|||||||
|
|
||||||
void GpsL2MDllPllTrackingFpga::stop_tracking()
|
void GpsL2MDllPllTrackingFpga::stop_tracking()
|
||||||
{
|
{
|
||||||
|
tracking_fpga_sc->stop_tracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,6 +192,7 @@ GpsL5DllPllTracking::GpsL5DllPllTracking(
|
|||||||
|
|
||||||
void GpsL5DllPllTracking::stop_tracking()
|
void GpsL5DllPllTracking::stop_tracking()
|
||||||
{
|
{
|
||||||
|
tracking_->stop_tracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -676,7 +676,6 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at
|
|||||||
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
// UPDATE ACCUMULATED CARRIER PHASE
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
|
||||||
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
// disable tracking loop and inform telemetry decoder
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
@ -667,7 +667,6 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at
|
|||||||
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
// UPDATE ACCUMULATED CARRIER PHASE
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
|
||||||
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
// disable tracking loop and inform telemetry decoder
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
@ -674,7 +674,6 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at
|
|||||||
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
// UPDATE ACCUMULATED CARRIER PHASE
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
|
||||||
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
// disable tracking loop and inform telemetry decoder
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
@ -666,7 +666,6 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at
|
|||||||
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
// UPDATE ACCUMULATED CARRIER PHASE
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
|
||||||
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
// disable tracking loop and inform telemetry decoder
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
@ -76,7 +76,7 @@ void Exponential_Smoother::set_samples_for_initialization(int num_samples)
|
|||||||
{
|
{
|
||||||
ns = 1;
|
ns = 1;
|
||||||
}
|
}
|
||||||
samples_for_initialization_ = num_samples;
|
samples_for_initialization_ = ns;
|
||||||
init_buffer_.reserve(samples_for_initialization_);
|
init_buffer_.reserve(samples_for_initialization_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,6 +194,8 @@ void ControlThread::init()
|
|||||||
agnss_ref_time_.valid = false;
|
agnss_ref_time_.valid = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
receiver_on_standby_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -234,11 +236,14 @@ void ControlThread::event_dispatcher(bool &valid_event, pmt::pmt_t &msg)
|
|||||||
processed_control_messages_++;
|
processed_control_messages_++;
|
||||||
if (pmt::any_ref(msg).type() == typeid(channel_event_sptr))
|
if (pmt::any_ref(msg).type() == typeid(channel_event_sptr))
|
||||||
{
|
{
|
||||||
channel_event_sptr new_event;
|
if (receiver_on_standby_ == false)
|
||||||
new_event = boost::any_cast<channel_event_sptr>(pmt::any_ref(msg));
|
{
|
||||||
DLOG(INFO) << "New channel event rx from ch id: " << new_event->channel_id
|
channel_event_sptr new_event;
|
||||||
<< " what: " << new_event->event_type;
|
new_event = boost::any_cast<channel_event_sptr>(pmt::any_ref(msg));
|
||||||
flowgraph_->apply_action(new_event->channel_id, new_event->event_type);
|
DLOG(INFO) << "New channel event rx from ch id: " << new_event->channel_id
|
||||||
|
<< " what: " << new_event->event_type;
|
||||||
|
flowgraph_->apply_action(new_event->channel_id, new_event->event_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (pmt::any_ref(msg).type() == typeid(command_event_sptr))
|
else if (pmt::any_ref(msg).type() == typeid(command_event_sptr))
|
||||||
{
|
{
|
||||||
@ -267,8 +272,11 @@ void ControlThread::event_dispatcher(bool &valid_event, pmt::pmt_t &msg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//perform non-priority tasks
|
if (receiver_on_standby_ == false)
|
||||||
flowgraph_->acquisition_manager(0); //start acquisition of untracked satellites
|
{
|
||||||
|
//perform non-priority tasks
|
||||||
|
flowgraph_->acquisition_manager(0); //start acquisition of untracked satellites
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -852,6 +860,10 @@ void ControlThread::apply_action(unsigned int what)
|
|||||||
stop_ = true;
|
stop_ = true;
|
||||||
restart_ = true;
|
restart_ = true;
|
||||||
break;
|
break;
|
||||||
|
case 10: // request standby mode
|
||||||
|
LOG(INFO) << "TC request standby mode";
|
||||||
|
receiver_on_standby_ = true;
|
||||||
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
LOG(INFO) << "Receiver action COLDSTART";
|
LOG(INFO) << "Receiver action COLDSTART";
|
||||||
// delete all ephemeris and almanac information from maps (also the PVT map queue)
|
// delete all ephemeris and almanac information from maps (also the PVT map queue)
|
||||||
@ -859,13 +871,16 @@ void ControlThread::apply_action(unsigned int what)
|
|||||||
pvt_ptr->clear_ephemeris();
|
pvt_ptr->clear_ephemeris();
|
||||||
// todo: reorder the satellite queues to the receiver default startup order.
|
// todo: reorder the satellite queues to the receiver default startup order.
|
||||||
// This is required to allow repeatability. Otherwise the satellite search order will depend on the last tracked satellites
|
// This is required to allow repeatability. Otherwise the satellite search order will depend on the last tracked satellites
|
||||||
|
// start again the satellite acquisitions
|
||||||
|
receiver_on_standby_ = false;
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
LOG(INFO) << "Receiver action HOTSTART";
|
LOG(INFO) << "Receiver action HOTSTART";
|
||||||
visible_satellites = get_visible_sats(cmd_interface_.get_utc_time(), cmd_interface_.get_LLH());
|
visible_satellites = get_visible_sats(cmd_interface_.get_utc_time(), cmd_interface_.get_LLH());
|
||||||
// reorder the satellite queue to acquire first those visible satellites
|
// reorder the satellite queue to acquire first those visible satellites
|
||||||
flowgraph_->priorize_satellites(visible_satellites);
|
flowgraph_->priorize_satellites(visible_satellites);
|
||||||
// start again the satellite acquisitions (done in chained apply_action to flowgraph)
|
// start again the satellite acquisitions
|
||||||
|
receiver_on_standby_ = false;
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
LOG(INFO) << "Receiver action WARMSTART";
|
LOG(INFO) << "Receiver action WARMSTART";
|
||||||
@ -879,7 +894,8 @@ void ControlThread::apply_action(unsigned int what)
|
|||||||
get_visible_sats(cmd_interface_.get_utc_time(), cmd_interface_.get_LLH());
|
get_visible_sats(cmd_interface_.get_utc_time(), cmd_interface_.get_LLH());
|
||||||
// reorder the satellite queue to acquire first those visible satellites
|
// reorder the satellite queue to acquire first those visible satellites
|
||||||
flowgraph_->priorize_satellites(visible_satellites);
|
flowgraph_->priorize_satellites(visible_satellites);
|
||||||
// start again the satellite acquisitions (done in chained apply_action to flowgraph)
|
// start again the satellite acquisitions
|
||||||
|
receiver_on_standby_ = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG(INFO) << "Unrecognized action.";
|
LOG(INFO) << "Unrecognized action.";
|
||||||
|
@ -129,6 +129,7 @@ private:
|
|||||||
/*
|
/*
|
||||||
* New receiver event dispatcher
|
* New receiver event dispatcher
|
||||||
*/
|
*/
|
||||||
|
bool receiver_on_standby_;
|
||||||
void event_dispatcher(bool &valid_event, pmt::pmt_t &msg);
|
void event_dispatcher(bool &valid_event, pmt::pmt_t &msg);
|
||||||
|
|
||||||
std::thread cmd_interface_thread_;
|
std::thread cmd_interface_thread_;
|
||||||
|
@ -1288,8 +1288,8 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
|
|
||||||
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
||||||
DLOG(INFO) << "Received " << what << " from " << who;
|
DLOG(INFO) << "Received " << what << " from " << who;
|
||||||
Gnss_Signal gs = channels_[who]->get_signal();
|
|
||||||
unsigned int sat = 0;
|
unsigned int sat = 0;
|
||||||
|
Gnss_Signal gs;
|
||||||
if (who < 200)
|
if (who < 200)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -1304,6 +1304,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
gs = channels_[who]->get_signal();
|
||||||
DLOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << gs.get_satellite() << ", Signal " << gs.get_signal_str();
|
DLOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << gs.get_satellite() << ", Signal " << gs.get_signal_str();
|
||||||
channels_state_[who] = 0;
|
channels_state_[who] = 0;
|
||||||
if (acq_channels_count_ > 0)
|
if (acq_channels_count_ > 0)
|
||||||
@ -1319,6 +1320,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
gs = channels_[who]->get_signal();
|
||||||
DLOG(INFO) << "Channel " << who << " ACQ SUCCESS satellite " << gs.get_satellite();
|
DLOG(INFO) << "Channel " << who << " ACQ SUCCESS satellite " << gs.get_satellite();
|
||||||
// If the satellite is in the list of available ones, remove it.
|
// If the satellite is in the list of available ones, remove it.
|
||||||
remove_signal(gs);
|
remove_signal(gs);
|
||||||
@ -1333,6 +1335,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
gs = channels_[who]->get_signal();
|
||||||
DLOG(INFO) << "Channel " << who << " TRK FAILED satellite " << gs.get_satellite();
|
DLOG(INFO) << "Channel " << who << " TRK FAILED satellite " << gs.get_satellite();
|
||||||
if (acq_channels_count_ < max_acq_channels_)
|
if (acq_channels_count_ < max_acq_channels_)
|
||||||
{
|
{
|
||||||
@ -1359,7 +1362,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 10: // request standby mode
|
case 10: // request standby mode
|
||||||
LOG(INFO) << "TC request standby mode";
|
|
||||||
for (size_t n = 0; n < channels_.size(); n++)
|
for (size_t n = 0; n < channels_.size(); n++)
|
||||||
{
|
{
|
||||||
if (channels_state_[n] == 1 or channels_state_[n] == 2) // channel in acquisition or in tracking
|
if (channels_state_[n] == 1 or channels_state_[n] == 2) // channel in acquisition or in tracking
|
||||||
@ -1372,22 +1374,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
|||||||
channels_state_[n] = 0;
|
channels_state_[n] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
acq_channels_count_ = 0; // all channels are in standby now
|
acq_channels_count_ = 0; // all channels are in standby now and no new acquisition should be started
|
||||||
break;
|
|
||||||
case 11: // request coldstart mode
|
|
||||||
LOG(INFO) << "TC request flowgraph coldstart";
|
|
||||||
// call the acquisition manager to assign new satellite and start next acquisition (if required)
|
|
||||||
acquisition_manager(who);
|
|
||||||
break;
|
|
||||||
case 12: // request hotstart mode
|
|
||||||
LOG(INFO) << "TC request flowgraph hotstart";
|
|
||||||
// call the acquisition manager to assign new satellite and start next acquisition (if required)
|
|
||||||
acquisition_manager(who);
|
|
||||||
break;
|
|
||||||
case 13: // request warmstart mode
|
|
||||||
LOG(INFO) << "TC request flowgraph warmstart";
|
|
||||||
// call the acquisition manager to assign new satellite and start next acquisition (if required)
|
|
||||||
acquisition_manager(who);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -124,9 +124,9 @@ Gnss_Satellite& Gnss_Satellite::operator=(Gnss_Satellite&& other) noexcept
|
|||||||
{
|
{
|
||||||
if (this != &other)
|
if (this != &other)
|
||||||
{
|
{
|
||||||
this->system = std::move(other.get_system());
|
this->system = other.get_system();
|
||||||
this->PRN = other.get_PRN();
|
this->PRN = other.get_PRN();
|
||||||
this->block = std::move(other.get_block());
|
this->block = other.get_block();
|
||||||
this->rf_link = other.get_rf_link();
|
this->rf_link = other.get_rf_link();
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
|
Loading…
Reference in New Issue
Block a user