diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc index 77bdcd4d4..786cf7198 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc @@ -40,7 +40,7 @@ #include #include #include -#include "gnss_signal_processing.h" +#include #include "control_message_factory.h" using google::LogMessage; @@ -277,6 +277,7 @@ void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init() d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; + const double GALILEO_TWO_PI = 6.283185307179600; // Count the number of bins d_num_doppler_bins = 0; @@ -293,7 +294,10 @@ void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init() { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); + float phase_step_rad = GALILEO_TWO_PI * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + 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 diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc index eb44a9121..c4fbb93ac 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc @@ -34,7 +34,7 @@ #include #include #include -#include "gnss_signal_processing.h" +#include #include "control_message_factory.h" using google::LogMessage; @@ -157,7 +157,7 @@ void galileo_pcps_8ms_acquisition_cc::init() d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; - + const double GALILEO_TWO_PI = 6.283185307179600; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); @@ -169,11 +169,14 @@ void galileo_pcps_8ms_acquisition_cc::init() // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; - for (unsigned int doppler_index=0; doppler_index < d_num_doppler_bins; doppler_index++) + for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); + float phase_step_rad = static_cast(GALILEO_TWO_PI) * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); } } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc index e99760c25..07f3e6b4e 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc @@ -38,9 +38,9 @@ #include #include #include +#include #include "gnss_signal_processing.h" #include "control_message_factory.h" -#include // fixed point sine and cosine #include "GPS_L1_CA.h" //GPS_TWO_PI @@ -174,18 +174,10 @@ void pcps_acquisition_cc::set_local_code(std::complex * code) void pcps_acquisition_cc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq) { - float sin_f, cos_f; - float phase_step_rad= GPS_TWO_PI * freq/ static_cast(d_fs_in); - - int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); - int phase_rad_i = 0; - - for(int i = 0; i < correlator_length_samples; i++) - { - gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); - carrier_vector[i] = gr_complex(cos_f, -sin_f); - phase_rad_i += phase_step_rad_i; - } + float phase_step_rad = GPS_TWO_PI * freq / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(carrier_vector, - phase_step_rad, _phase, correlator_length_samples); } void pcps_acquisition_cc::init() diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc index 9be375cba..9d63da86d 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc @@ -36,7 +36,7 @@ #include #include #include -#include "nco_lib.h" +#include #include "concurrent_map.h" #include "gnss_signal_processing.h" #include "gps_sdr_signal_processing.h" @@ -184,14 +184,16 @@ void pcps_acquisition_fine_doppler_cc::forecast (int noutput_items, void pcps_acquisition_fine_doppler_cc::reset_grid() { d_well_count = 0; - for (int i=0; i(GPS_TWO_PI) * ( d_freq + doppler_hz ) / static_cast(d_fs_in); d_grid_doppler_wipeoffs[doppler_index] = new gr_complex[d_fft_size]; - fxp_nco(d_grid_doppler_wipeoffs[doppler_index], d_fft_size,0, phase_step_rad); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); } } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc index 7c917c96c..3ad935a38 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc @@ -41,7 +41,6 @@ #include "gnss_signal_processing.h" #include "control_message_factory.h" #include -#include // fixed point sine and cosine #include "GPS_L1_CA.h" //GPS_TWO_PI using google::LogMessage; @@ -177,18 +176,10 @@ void pcps_acquisition_sc::set_local_code(std::complex * code) void pcps_acquisition_sc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq) { - float sin_f, cos_f; - float phase_step_rad= GPS_TWO_PI * freq/ static_cast(d_fs_in); - - int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); - int phase_rad_i = 0; - - for(int i = 0; i < correlator_length_samples; i++) - { - gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); - carrier_vector[i] = gr_complex(cos_f, -sin_f); - phase_rad_i += phase_step_rad_i; - } + float phase_step_rad = GPS_TWO_PI * freq / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(carrier_vector, - phase_step_rad, _phase, correlator_length_samples); } void pcps_acquisition_sc::init() diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc index b1ecea8af..d8eef0288 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc @@ -35,7 +35,7 @@ #include #include #include -#include "nco_lib.h" +#include #include "concurrent_map.h" #include "gnss_signal_processing.h" #include "control_message_factory.h" @@ -252,7 +252,9 @@ void pcps_assisted_acquisition_cc::redefine_grid() // compute the carrier doppler wipe-off signal and store it phase_step_rad = static_cast(GPS_TWO_PI) * doppler_hz / static_cast(d_fs_in); d_grid_doppler_wipeoffs[doppler_index] = new gr_complex[d_fft_size]; - fxp_nco(d_grid_doppler_wipeoffs[doppler_index], d_fft_size, 0, phase_step_rad); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); } } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc index 20b491529..808c8110a 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc @@ -39,8 +39,9 @@ #include #include #include -#include "gnss_signal_processing.h" +#include #include "control_message_factory.h" +#include "GPS_L1_CA.h" //GPS_TWO_PI using google::LogMessage; @@ -188,8 +189,10 @@ void pcps_cccwsr_acquisition_cc::init() d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], - d_freq + doppler, d_fs_in, d_fft_size); + float phase_step_rad = GPS_TWO_PI * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); } } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc index 6aa66c880..2cb97e602 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc @@ -39,8 +39,9 @@ #include #include #include -#include "gnss_signal_processing.h" +#include #include "control_message_factory.h" +#include "GPS_L1_CA.h" //GPS_TWO_PI using google::LogMessage; @@ -169,13 +170,14 @@ void pcps_multithread_acquisition_cc::init() // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; - for (unsigned int doppler_index=0;doppler_index(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); - int doppler = -(int)d_doppler_max + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], - d_freq + doppler, d_fs_in, d_fft_size); + float phase_step_rad = static_cast(GPS_TWO_PI) * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); } } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc index 81dea6d07..ef42c3f5e 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc @@ -56,11 +56,11 @@ #include #include #include -#include "gnss_signal_processing.h" +#include #include "control_message_factory.h" #include "fft_base_kernels.h" #include "fft_internal.h" - +#include "GPS_L1_CA.h" //GPS_TWO_PI using google::LogMessage; @@ -315,9 +315,11 @@ void pcps_opencl_acquisition_cc::init() { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); - int doppler= -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], - d_freq + doppler, d_fs_in, d_fft_size); + int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; + float phase_step_rad = static_cast(GPS_TWO_PI) * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], - phase_step_rad, _phase, d_fft_size); if (d_opencl == 0) { diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc index 44a9a09fa..55f8f16d3 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc @@ -34,9 +34,9 @@ #include #include #include +#include #include "control_message_factory.h" -#include "gnss_signal_processing.h" - +#include "GPS_L1_CA.h" using google::LogMessage; @@ -220,9 +220,10 @@ void pcps_quicksync_acquisition_cc::init() { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], - d_freq + doppler, d_fs_in, - d_samples_per_code * d_folding_factor); + float phase_step_rad = GPS_TWO_PI * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + 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"; } diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc index 82c99f3ee..8c0fec7c9 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc @@ -53,8 +53,9 @@ #include #include #include +#include #include "control_message_factory.h" -#include "gnss_signal_processing.h" +#include "GPS_L1_CA.h" //GPS_TWO_PI using google::LogMessage; @@ -185,9 +186,10 @@ void pcps_tong_acquisition_cc::init() d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; - - complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], - d_freq + doppler, d_fs_in, d_fft_size); + float phase_step_rad = GPS_TWO_PI * (d_freq + doppler) / static_cast(d_fs_in); + float _phase[1]; + _phase[0] = 0; + 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(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); diff --git a/src/algorithms/signal_generator/gnuradio_blocks/CMakeLists.txt b/src/algorithms/signal_generator/gnuradio_blocks/CMakeLists.txt index 375a0141d..9fdfca2d4 100644 --- a/src/algorithms/signal_generator/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/signal_generator/gnuradio_blocks/CMakeLists.txt @@ -27,13 +27,20 @@ include_directories( ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} + ${VOLK_GNSSSDR_INCLUDE_DIRS} ) file(GLOB SIGNAL_GENERATOR_BLOCK_HEADERS "*.h") add_library(signal_generator_blocks ${SIGNAL_GENERATOR_BLOCK_SOURCES} ${SIGNAL_GENERATOR_BLOCK_HEADERS}) source_group(Headers FILES ${SIGNAL_GENERATOR_BLOCK_HEADERS}) -target_link_libraries(signal_generator_blocks gnss_system_parameters +target_link_libraries(signal_generator_blocks gnss_system_parameters gnss_sp_libs ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} - ${VOLK_LIBRARIES} ${ORC_LIBRARIES} + ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) + +if(VOLK_GNSSSDR_FOUND) + # add_dependencies(signal_generator_blocks glog-${glog_RELEASE}) +else(VOLK_GNSSSDR_FOUND) + add_dependencies(signal_generator_blocks volk_gnsssdr_module) +endif() \ No newline at end of file diff --git a/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.cc b/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.cc index 8ac39f7b8..8c95cb55b 100644 --- a/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.cc +++ b/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.cc @@ -34,9 +34,9 @@ #include #include #include +#include #include "gps_sdr_signal_processing.h" #include "galileo_e1_signal_processing.h" -#include "nco_lib.h" #include "galileo_e5_signal_processing.h" #include "Galileo_E1.h" #include "Galileo_E5a.h" @@ -271,7 +271,9 @@ gr_vector_void_star &output_items) for (unsigned int sat = 0; sat < num_sats_; sat++) { float phase_step_rad = -static_cast(GPS_TWO_PI) * doppler_Hz_[sat] / static_cast(fs_in_); - fxp_nco(complex_phase_, vector_length_, start_phase_rad_[sat], phase_step_rad); + float _phase[1]; + _phase[0] = -start_phase_rad_[sat]; + volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_); start_phase_rad_[sat] += vector_length_ * phase_step_rad; out_idx = 0;