mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +00:00 
			
		
		
		
	Remove tabs from the source code
This commit is contained in:
		| @@ -207,7 +207,7 @@ void galileo_e1_pvt_cc::print_receiver_status(Gnss_Synchro** channels_synchroniz | ||||
|  | ||||
|  | ||||
| int galileo_e1_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items  __attribute__((unused))) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items  __attribute__((unused))) | ||||
| { | ||||
|     d_sample_counter++; | ||||
|  | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GALILEO_E1_PVT_CC_H | ||||
| #define	GNSS_SDR_GALILEO_E1_PVT_CC_H | ||||
| #define GNSS_SDR_GALILEO_E1_PVT_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <string> | ||||
|   | ||||
| @@ -255,7 +255,7 @@ void gps_l1_ca_pvt_cc::print_receiver_status(Gnss_Synchro** channels_synchroniza | ||||
|  | ||||
|  | ||||
| int gps_l1_ca_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items __attribute__((unused))) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items __attribute__((unused))) | ||||
| { | ||||
|     gnss_pseudoranges_map.clear(); | ||||
|     d_sample_counter++; | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_PVT_CC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_PVT_CC_H | ||||
| #define GNSS_SDR_GPS_L1_CA_PVT_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <string> | ||||
|   | ||||
| @@ -235,7 +235,7 @@ void hybrid_pvt_cc::print_receiver_status(Gnss_Synchro** channels_synchronizatio | ||||
|  | ||||
|  | ||||
| int hybrid_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items __attribute__((unused))) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items __attribute__((unused))) | ||||
| { | ||||
|     d_sample_counter++; | ||||
|     bool arrived_galileo_almanac = false; | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_HYBRID_PVT_CC_H | ||||
| #define	GNSS_SDR_HYBRID_PVT_CC_H | ||||
| #define GNSS_SDR_HYBRID_PVT_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <utility> | ||||
|   | ||||
| @@ -96,17 +96,17 @@ bool Kml_Printer::set_headers(std::string filename,  bool time_tag_name) | ||||
|             kml_file << std::setprecision(14); | ||||
|             kml_file << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl | ||||
|                     << "<kml xmlns=\"http://www.opengis.net/kml/2.2\">" << std::endl | ||||
|                     << "	<Document>" << std::endl | ||||
|                     << "	<name>GNSS Track</name>" << std::endl | ||||
|                     << "	<description>GNSS-SDR Receiver position log file created at " << asctime (timeinfo) | ||||
|                     << "	</description>" << std::endl | ||||
|                     << "    <Document>" << std::endl | ||||
|                     << "    <name>GNSS Track</name>" << std::endl | ||||
|                     << "    <description>GNSS-SDR Receiver position log file created at " << asctime (timeinfo) | ||||
|                     << "    </description>" << std::endl | ||||
|                     << "<Style id=\"yellowLineGreenPoly\">" << std::endl | ||||
|                     << " <LineStyle>" << std::endl | ||||
|                     << " 	<color>7f00ffff</color>" << std::endl | ||||
|                     << "		<width>1</width>" << std::endl | ||||
|                     << "	</LineStyle>" << std::endl | ||||
|                     << "     <color>7f00ffff</color>" << std::endl | ||||
|                     << "        <width>1</width>" << std::endl | ||||
|                     << "    </LineStyle>" << std::endl | ||||
|                     << "<PolyStyle>" << std::endl | ||||
|                     << "	<color>7f00ff00</color>" << std::endl | ||||
|                     << "    <color>7f00ff00</color>" << std::endl | ||||
|                     << "</PolyStyle>" << std::endl | ||||
|                     << "</Style>" << std::endl | ||||
|                     << "<Placemark>" << std::endl | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_NMEA_PRINTER_H_ | ||||
| #define	GNSS_SDR_NMEA_PRINTER_H_ | ||||
| #define GNSS_SDR_NMEA_PRINTER_H_ | ||||
|  | ||||
|  | ||||
| #include <iostream> | ||||
|   | ||||
| @@ -1312,8 +1312,8 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int,Gps_Ephe | ||||
|     std::map<int,Gps_Ephemeris>::const_iterator gps_ephemeris_iter; | ||||
|  | ||||
|     for(gps_ephemeris_iter = eph_map.begin(); | ||||
|     		gps_ephemeris_iter != eph_map.end(); | ||||
|     		gps_ephemeris_iter++) | ||||
|             gps_ephemeris_iter != eph_map.end(); | ||||
|             gps_ephemeris_iter++) | ||||
|     { | ||||
|             // -------- SV / EPOCH / SV CLK | ||||
|             boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_GPS_time(gps_ephemeris_iter->second, gps_ephemeris_iter->second.d_Toc); | ||||
| @@ -2815,7 +2815,7 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, c | ||||
|             // Add extra 0 if seconds are < 10 | ||||
|             if (seconds < 10) | ||||
|             { | ||||
|             	line +=std::string(1, '0'); | ||||
|                 line += std::string(1, '0'); | ||||
|             } | ||||
|             line += Rinex_Printer::asString(seconds, 7); | ||||
|             line += std::string(2, ' '); | ||||
|   | ||||
| @@ -49,7 +49,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_RINEX_PRINTER_H_ | ||||
| #define	GNSS_SDR_RINEX_PRINTER_H_ | ||||
| #define GNSS_SDR_RINEX_PRINTER_H_ | ||||
|  | ||||
| #include <string> | ||||
| #include <fstream> | ||||
|   | ||||
| @@ -117,8 +117,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::~GalileoE1Pcps8msAmbiguousAcquisition() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| { | ||||
|     channel_ = channel; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -128,34 +127,31 @@ GalileoE1Pcps8msAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_threshold(float threshold) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_threshold(float threshold) | ||||
| { | ||||
|     float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|  | ||||
| 	float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|     if(pfa == 0.0) pfa = configuration_->property(role_ + ".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa==0.0) | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|             threshold_ = threshold; | ||||
|         } | ||||
| 	else | ||||
|     else | ||||
|         { | ||||
|             threshold_ = calculate_threshold(pfa); | ||||
|         } | ||||
|  | ||||
| 	DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|     DLOG(INFO) << "Channel " << channel_ << " Threshold = " << threshold_; | ||||
|  | ||||
| 	if (item_type_.compare("gr_complex") == 0) | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|             acquisition_cc_->set_threshold(threshold_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| { | ||||
|     doppler_max_ = doppler_max; | ||||
|  | ||||
| @@ -166,8 +162,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| { | ||||
|     doppler_step_ = doppler_step; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -177,8 +172,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_gnss_synchro( | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_gnss_synchro( | ||||
|         Gnss_Synchro* gnss_synchro) | ||||
| { | ||||
|     gnss_synchro_ = gnss_synchro; | ||||
| @@ -189,8 +183,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::set_gnss_synchro( | ||||
| } | ||||
|  | ||||
|  | ||||
| signed int | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::mag() | ||||
| signed int GalileoE1Pcps8msAmbiguousAcquisition::mag() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -203,16 +196,14 @@ GalileoE1Pcps8msAmbiguousAcquisition::mag() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::init() | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::set_local_code() | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::set_local_code() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -238,8 +229,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::set_local_code() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::reset() | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::reset() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -268,8 +258,7 @@ float GalileoE1Pcps8msAmbiguousAcquisition::calculate_threshold(float pfa) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -278,8 +267,7 @@ GalileoE1Pcps8msAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|   | ||||
| @@ -51,8 +51,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition | ||||
|  | ||||
|     DLOG(INFO) << "role " << role; | ||||
|  | ||||
|     item_type_ = configuration_->property(role + ".item_type", | ||||
|             default_item_type); | ||||
|     item_type_ = configuration_->property(role + ".item_type", default_item_type); | ||||
|  | ||||
|     fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); | ||||
|     if_ = configuration_->property(role + ".ifreq", 0); | ||||
| @@ -119,8 +118,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::~GalileoE1PcpsCccwsrAmbiguousAcquisitio | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| { | ||||
|     channel_ = channel; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -130,36 +128,33 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_threshold(float threshold) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_threshold(float threshold) | ||||
| { | ||||
|     //    float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|  | ||||
| //    float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|     //    if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|  | ||||
| //    if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|  | ||||
| //    if(pfa==0.0) | ||||
| //        { | ||||
| //            threshold_ = threshold; | ||||
| //        } | ||||
| //    else | ||||
| //        { | ||||
| //            threshold_ = calculate_threshold(pfa); | ||||
| //        } | ||||
|     //    if(pfa==0.0) | ||||
|     //        { | ||||
|     //            threshold_ = threshold; | ||||
|     //        } | ||||
|     //    else | ||||
|     //        { | ||||
|     //            threshold_ = calculate_threshold(pfa); | ||||
|     //        } | ||||
|  | ||||
|     threshold_ = threshold; | ||||
|  | ||||
| 	DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|     DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|  | ||||
| 	if (item_type_.compare("gr_complex") == 0) | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|             acquisition_cc_->set_threshold(threshold_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| { | ||||
|     doppler_max_ = doppler_max; | ||||
|  | ||||
| @@ -170,8 +165,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_max(unsigned int doppler_ma | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| { | ||||
|     doppler_step_ = doppler_step; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -180,8 +174,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_step(unsigned int doppler_s | ||||
|         } | ||||
| } | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_gnss_synchro( | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_gnss_synchro( | ||||
|         Gnss_Synchro* gnss_synchro) | ||||
| { | ||||
|     gnss_synchro_ = gnss_synchro; | ||||
| @@ -192,8 +185,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_gnss_synchro( | ||||
| } | ||||
|  | ||||
|  | ||||
| signed int | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::mag() | ||||
| signed int GalileoE1PcpsCccwsrAmbiguousAcquisition::mag() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -206,22 +198,20 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::mag() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::init() | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_local_code() | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_local_code() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|             bool cboc = configuration_->property( | ||||
|                     "Acquisition" + boost::lexical_cast<std::string>(channel_) | ||||
|                             + ".cboc", false); | ||||
|                     + ".cboc", false); | ||||
|  | ||||
|             char signal[3]; | ||||
|  | ||||
| @@ -240,8 +230,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_local_code() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::reset() | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::reset() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -249,10 +238,9 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::reset() | ||||
|         } | ||||
| } | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::set_state(int state) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_state(int state) | ||||
| { | ||||
|         acquisition_cc_->set_state(state); | ||||
|     acquisition_cc_->set_state(state); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -260,12 +248,11 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::set_state(int state) | ||||
| float GalileoE1PcpsCccwsrAmbiguousAcquisition::calculate_threshold(float pfa) | ||||
| { | ||||
|     if(pfa){ /* Not implemented*/}; | ||||
| 	return 0.0; | ||||
|     return 0.0; | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -275,8 +262,7 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|   | ||||
| @@ -121,8 +121,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::~GalileoE1PcpsTongAmbiguousAcquisition() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| { | ||||
|     channel_ = channel; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -132,34 +131,32 @@ GalileoE1PcpsTongAmbiguousAcquisition::set_channel(unsigned int channel) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_threshold(float threshold) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_threshold(float threshold) | ||||
| { | ||||
|  | ||||
| 	float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|     float pfa = configuration_->property(role_+ boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa == 0.0) pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|     if(pfa == 0.0) pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa == 0.0) | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|             threshold_ = threshold; | ||||
|         } | ||||
| 	else | ||||
|     else | ||||
|         { | ||||
|             threshold_ = calculate_threshold(pfa); | ||||
|         } | ||||
|  | ||||
| 	DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|     DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|  | ||||
| 	if (item_type_.compare("gr_complex") == 0) | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|             acquisition_cc_->set_threshold(threshold_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| { | ||||
|     doppler_max_ = doppler_max; | ||||
|  | ||||
| @@ -170,8 +167,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) | ||||
| { | ||||
|     doppler_step_ = doppler_step; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
| @@ -182,8 +178,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_step(unsigned int doppler_ste | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_gnss_synchro( | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_gnss_synchro( | ||||
|         Gnss_Synchro* gnss_synchro) | ||||
| { | ||||
|     gnss_synchro_ = gnss_synchro; | ||||
| @@ -194,8 +189,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::set_gnss_synchro( | ||||
| } | ||||
|  | ||||
|  | ||||
| signed int | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::mag() | ||||
| signed int GalileoE1PcpsTongAmbiguousAcquisition::mag() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -208,16 +202,14 @@ GalileoE1PcpsTongAmbiguousAcquisition::mag() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::init() | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_local_code() | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_local_code() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -243,8 +235,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::set_local_code() | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::reset() | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::reset() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -252,36 +243,34 @@ GalileoE1PcpsTongAmbiguousAcquisition::reset() | ||||
|         } | ||||
| } | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::set_state(int state) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::set_state(int state) | ||||
| { | ||||
|         acquisition_cc_->set_state(state); | ||||
|     acquisition_cc_->set_state(state); | ||||
| } | ||||
|  | ||||
|  | ||||
| float GalileoE1PcpsTongAmbiguousAcquisition::calculate_threshold(float pfa) | ||||
| { | ||||
| 	unsigned int frequency_bins = 0; | ||||
| 	for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
| 	{ | ||||
| 	 	frequency_bins++; | ||||
| 	} | ||||
|     unsigned int frequency_bins = 0; | ||||
|     for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
|         { | ||||
|             frequency_bins++; | ||||
|         } | ||||
|  | ||||
| 	DLOG(INFO) << "Channel " << channel_ << "  Pfa = " << pfa; | ||||
|     DLOG(INFO) << "Channel " << channel_ << "  Pfa = " << pfa; | ||||
|  | ||||
| 	unsigned int ncells = vector_length_ * frequency_bins; | ||||
| 	double exponent = 1 / static_cast<double>(ncells); | ||||
| 	double val = pow(1.0-pfa,exponent); | ||||
| 	double lambda = double(vector_length_); | ||||
| 	boost::math::exponential_distribution<double> mydist (lambda); | ||||
| 	float threshold = (float)quantile(mydist,val); | ||||
|     unsigned int ncells = vector_length_ * frequency_bins; | ||||
|     double exponent = 1 / static_cast<double>(ncells); | ||||
|     double val = pow(1.0-pfa,exponent); | ||||
|     double lambda = double(vector_length_); | ||||
|     boost::math::exponential_distribution<double> mydist (lambda); | ||||
|     float threshold = (float)quantile(mydist,val); | ||||
|  | ||||
| 	return threshold; | ||||
|     return threshold; | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
| @@ -290,8 +279,7 @@ GalileoE1PcpsTongAmbiguousAcquisition::connect(gr::top_block_sptr top_block) | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *         <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          <li> Marc Molina, 2013. marc.molina.pena@gmail.com | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|   * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          <li> Marc Molina, 2013. marc.molina.pena@gmail.com | ||||
|   | ||||
| @@ -51,7 +51,7 @@ class ConfigurationInterface; | ||||
| class GpsL1CaPcpsAcquisitionFineDoppler: public AcquisitionInterface | ||||
| { | ||||
| public: | ||||
| 	GpsL1CaPcpsAcquisitionFineDoppler(ConfigurationInterface* configuration, | ||||
|     GpsL1CaPcpsAcquisitionFineDoppler(ConfigurationInterface* configuration, | ||||
|             std::string role, unsigned int in_streams, | ||||
|             unsigned int out_streams, boost::shared_ptr<gr::msg_queue> queue); | ||||
|  | ||||
|   | ||||
| @@ -119,35 +119,35 @@ void GpsL1CaPcpsMultithreadAcquisition::set_channel(unsigned int channel) | ||||
| { | ||||
|     channel_ = channel; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_channel(channel_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_channel(channel_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void GpsL1CaPcpsMultithreadAcquisition::set_threshold(float threshold) | ||||
| { | ||||
| 	float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|     float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa == 0.0) | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|                  pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|             pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|         } | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|             threshold_ = threshold; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             threshold_ = calculate_threshold(pfa); | ||||
|         } | ||||
| 	if(pfa == 0.0) | ||||
| 		{ | ||||
| 			threshold_ = threshold; | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 			threshold_ = calculate_threshold(pfa); | ||||
| 		} | ||||
|  | ||||
| 	DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|     DLOG(INFO) << "Channel " << channel_ << " Threshold = " << threshold_; | ||||
|  | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_threshold(threshold_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_threshold(threshold_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -155,9 +155,9 @@ void GpsL1CaPcpsMultithreadAcquisition::set_doppler_max(unsigned int doppler_max | ||||
| { | ||||
|     doppler_max_ = doppler_max; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_doppler_max(doppler_max_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_doppler_max(doppler_max_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -205,53 +205,53 @@ void GpsL1CaPcpsMultithreadAcquisition::init() | ||||
| void GpsL1CaPcpsMultithreadAcquisition::set_local_code() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         std::complex<float>* code = new std::complex<float>[code_length_]; | ||||
|         { | ||||
|             std::complex<float>* code = new std::complex<float>[code_length_]; | ||||
|  | ||||
|         gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); | ||||
|             gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); | ||||
|  | ||||
|         for (unsigned int i = 0; i < sampled_ms_; i++) | ||||
|             { | ||||
|                 memcpy(&(code_[i*code_length_]), code, | ||||
|                        sizeof(gr_complex)*code_length_); | ||||
|             } | ||||
|             for (unsigned int i = 0; i < sampled_ms_; i++) | ||||
|                 { | ||||
|                     memcpy(&(code_[i*code_length_]), code, | ||||
|                             sizeof(gr_complex)*code_length_); | ||||
|                 } | ||||
|  | ||||
|         acquisition_cc_->set_local_code(code_); | ||||
|             acquisition_cc_->set_local_code(code_); | ||||
|  | ||||
|         delete[] code; | ||||
|     } | ||||
|             delete[] code; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void GpsL1CaPcpsMultithreadAcquisition::reset() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_active(true); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_active(true); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| float GpsL1CaPcpsMultithreadAcquisition::calculate_threshold(float pfa) | ||||
| { | ||||
| 	//Calculate the threshold | ||||
|     //Calculate the threshold | ||||
|  | ||||
| 	unsigned int frequency_bins = 0; | ||||
| 	for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
| 	{ | ||||
| 	 	frequency_bins++; | ||||
| 	} | ||||
|     unsigned int frequency_bins = 0; | ||||
|     for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
|         { | ||||
|             frequency_bins++; | ||||
|         } | ||||
|  | ||||
| 	DLOG(INFO) << "Channel "<< channel_ << "  Pfa = " << pfa; | ||||
|     DLOG(INFO) << "Channel "<< channel_ << "  Pfa = " << pfa; | ||||
|  | ||||
| 	unsigned int ncells = vector_length_ * frequency_bins; | ||||
| 	double exponent = 1 / static_cast<double>(ncells); | ||||
| 	double val = pow(1.0 - pfa, exponent); | ||||
| 	double lambda = double(vector_length_); | ||||
| 	boost::math::exponential_distribution<double> mydist (lambda); | ||||
| 	float threshold = (float)quantile(mydist,val); | ||||
|     unsigned int ncells = vector_length_ * frequency_bins; | ||||
|     double exponent = 1 / static_cast<double>(ncells); | ||||
|     double val = pow(1.0 - pfa, exponent); | ||||
|     double lambda = double(vector_length_); | ||||
|     boost::math::exponential_distribution<double> mydist (lambda); | ||||
|     float threshold = (float)quantile(mydist,val); | ||||
|  | ||||
| 	return threshold; | ||||
|     return threshold; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -268,9 +268,9 @@ void GpsL1CaPcpsMultithreadAcquisition::connect(gr::top_block_sptr top_block) | ||||
| void GpsL1CaPcpsMultithreadAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); | ||||
|     } | ||||
|         { | ||||
|             top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -116,35 +116,35 @@ void GpsL1CaPcpsOpenClAcquisition::set_channel(unsigned int channel) | ||||
| { | ||||
|     channel_ = channel; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_channel(channel_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_channel(channel_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void GpsL1CaPcpsOpenClAcquisition::set_threshold(float threshold) | ||||
| { | ||||
| 	float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|     float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); | ||||
|  | ||||
| 	if(pfa==0.0) | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|                  pfa = configuration_->property(role_+".pfa", 0.0); | ||||
|             pfa = configuration_->property(role_ + ".pfa", 0.0); | ||||
|         } | ||||
|     if(pfa == 0.0) | ||||
|         { | ||||
|             threshold_ = threshold; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             threshold_ = calculate_threshold(pfa); | ||||
|         } | ||||
| 	if(pfa==0.0) | ||||
| 		{ | ||||
| 			threshold_ = threshold; | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 			threshold_ = calculate_threshold(pfa); | ||||
| 		} | ||||
|  | ||||
| 	DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; | ||||
|     DLOG(INFO) << "Channel " << channel_ << " Threshold = " << threshold_; | ||||
|  | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_threshold(threshold_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_threshold(threshold_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -152,9 +152,9 @@ void GpsL1CaPcpsOpenClAcquisition::set_doppler_max(unsigned int doppler_max) | ||||
| { | ||||
|     doppler_max_ = doppler_max; | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_doppler_max(doppler_max_); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_doppler_max(doppler_max_); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -202,53 +202,53 @@ void GpsL1CaPcpsOpenClAcquisition::init() | ||||
| void GpsL1CaPcpsOpenClAcquisition::set_local_code() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         std::complex<float>* code = new std::complex<float>[code_length_]; | ||||
|         { | ||||
|             std::complex<float>* code = new std::complex<float>[code_length_]; | ||||
|  | ||||
|         gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); | ||||
|             gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); | ||||
|  | ||||
|         for (unsigned int i = 0; i < sampled_ms_; i++) | ||||
|             { | ||||
|                 memcpy(&(code_[i*code_length_]), code, | ||||
|                        sizeof(gr_complex)*code_length_); | ||||
|             } | ||||
|             for (unsigned int i = 0; i < sampled_ms_; i++) | ||||
|                 { | ||||
|                     memcpy(&(code_[i*code_length_]), code, | ||||
|                             sizeof(gr_complex)*code_length_); | ||||
|                 } | ||||
|  | ||||
|         acquisition_cc_->set_local_code(code_); | ||||
|             acquisition_cc_->set_local_code(code_); | ||||
|  | ||||
|         delete[] code; | ||||
|     } | ||||
|             delete[] code; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void GpsL1CaPcpsOpenClAcquisition::reset() | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         acquisition_cc_->set_active(true); | ||||
|     } | ||||
|         { | ||||
|             acquisition_cc_->set_active(true); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| float GpsL1CaPcpsOpenClAcquisition::calculate_threshold(float pfa) | ||||
| { | ||||
| 	//Calculate the threshold | ||||
|     //Calculate the threshold | ||||
|  | ||||
| 	unsigned int frequency_bins = 0; | ||||
| 	for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
| 	{ | ||||
| 	 	frequency_bins++; | ||||
| 	} | ||||
|     unsigned int frequency_bins = 0; | ||||
|     for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) | ||||
|         { | ||||
|             frequency_bins++; | ||||
|         } | ||||
|  | ||||
| 	DLOG(INFO) << "Channel " << channel_ << "  Pfa = " << pfa; | ||||
|     DLOG(INFO) << "Channel " << channel_ << "  Pfa = " << pfa; | ||||
|  | ||||
| 	unsigned int ncells = vector_length_ * frequency_bins; | ||||
| 	double exponent = 1 / static_cast<double>(ncells); | ||||
| 	double val = pow(1.0 - pfa, exponent); | ||||
| 	double lambda = double(vector_length_); | ||||
| 	boost::math::exponential_distribution<double> mydist (lambda); | ||||
| 	float threshold = (float)quantile(mydist,val); | ||||
|     unsigned int ncells = vector_length_ * frequency_bins; | ||||
|     double exponent = 1 / static_cast<double>(ncells); | ||||
|     double val = pow(1.0 - pfa, exponent); | ||||
|     double lambda = double(vector_length_); | ||||
|     boost::math::exponential_distribution<double> mydist (lambda); | ||||
|     float threshold = (float)quantile(mydist,val); | ||||
|  | ||||
| 	return threshold; | ||||
|     return threshold; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -258,16 +258,15 @@ void GpsL1CaPcpsOpenClAcquisition::connect(gr::top_block_sptr top_block) | ||||
|         { | ||||
|             top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); | ||||
|         } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| void GpsL1CaPcpsOpenClAcquisition::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|     { | ||||
|         top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); | ||||
|     } | ||||
|         { | ||||
|             top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          <li> Marc Molina, 2013. marc.molina.pena@gmail.com | ||||
| @@ -363,11 +363,11 @@ int galileo_e5a_noncoherentIQ_acquisition_caf_cc::general_work(int noutput_items | ||||
|      */ | ||||
|  | ||||
|     int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL | ||||
|     /* States: 	0 Stop Channel | ||||
|      * 		1 Load the buffer until it reaches fft_size | ||||
|      * 		2 Acquisition algorithm | ||||
|      * 		3 Positive acquisition | ||||
|      * 		4 Negative acquisition | ||||
|     /* States:     0 Stop Channel | ||||
|      *         1 Load the buffer until it reaches fft_size | ||||
|      *         2 Acquisition algorithm | ||||
|      *         3 Positive acquisition | ||||
|      *         4 Negative acquisition | ||||
|      */ | ||||
|     switch (d_state) | ||||
|     { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          <li> Marc Molina, 2013. marc.molina.pena@gmail.com | ||||
| @@ -53,7 +53,7 @@ typedef boost::shared_ptr<galileo_e5a_noncoherentIQ_acquisition_caf_cc> galileo_ | ||||
|  | ||||
| galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr | ||||
| galileo_e5a_noncoherentIQ_make_acquisition_caf_cc(unsigned int sampled_ms, | ||||
| 			 unsigned int max_dwells, | ||||
|              unsigned int max_dwells, | ||||
|                          unsigned int doppler_max, long freq, long fs_in, | ||||
|                          int samples_per_ms, int samples_per_code, | ||||
|                          bool bit_transition_flag, | ||||
| @@ -74,8 +74,8 @@ class galileo_e5a_noncoherentIQ_acquisition_caf_cc: public gr::block | ||||
| private: | ||||
|     friend galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr | ||||
|     galileo_e5a_noncoherentIQ_make_acquisition_caf_cc( | ||||
| 	    unsigned int sampled_ms, | ||||
| 	    unsigned int max_dwells, | ||||
|             unsigned int sampled_ms, | ||||
|             unsigned int max_dwells, | ||||
|             unsigned int doppler_max, long freq, long fs_in, | ||||
|             int samples_per_ms, int samples_per_code, | ||||
|             bool bit_transition_flag, | ||||
| @@ -86,8 +86,8 @@ private: | ||||
|             int Zero_padding_); | ||||
|  | ||||
|     galileo_e5a_noncoherentIQ_acquisition_caf_cc( | ||||
| 	    unsigned int sampled_ms, | ||||
| 	    unsigned int max_dwells, | ||||
|             unsigned int sampled_ms, | ||||
|             unsigned int max_dwells, | ||||
|             unsigned int doppler_max, long freq, long fs_in, | ||||
|             int samples_per_ms, int samples_per_code, | ||||
|             bool bit_transition_flag, | ||||
|   | ||||
| @@ -192,13 +192,13 @@ void galileo_pcps_8ms_acquisition_cc::set_state(int state) | ||||
|     d_state = state; | ||||
|     if (d_state == 1) | ||||
|         { | ||||
| 			d_gnss_synchro->Acq_delay_samples = 0.0; | ||||
| 			d_gnss_synchro->Acq_doppler_hz = 0.0; | ||||
| 			d_gnss_synchro->Acq_samplestamp_samples = 0; | ||||
| 			d_well_count = 0; | ||||
| 			d_mag = 0.0; | ||||
| 			d_input_power = 0.0; | ||||
| 			d_test_statistics = 0.0; | ||||
|             d_gnss_synchro->Acq_delay_samples = 0.0; | ||||
|             d_gnss_synchro->Acq_doppler_hz = 0.0; | ||||
|             d_gnss_synchro->Acq_samplestamp_samples = 0; | ||||
|             d_well_count = 0; | ||||
|             d_mag = 0.0; | ||||
|             d_input_power = 0.0; | ||||
|             d_test_statistics = 0.0; | ||||
|         } | ||||
|     else if (d_state == 0) | ||||
|         {} | ||||
|   | ||||
| @@ -76,41 +76,40 @@ private: | ||||
|     void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, | ||||
|             int doppler_offset); | ||||
|  | ||||
|  | ||||
| 	long d_fs_in; | ||||
| 	long d_freq; | ||||
| 	int d_samples_per_ms; | ||||
|     long d_fs_in; | ||||
|     long d_freq; | ||||
|     int d_samples_per_ms; | ||||
|     int d_samples_per_code; | ||||
| 	unsigned int d_doppler_resolution; | ||||
| 	float d_threshold; | ||||
|     unsigned int d_doppler_resolution; | ||||
|     float d_threshold; | ||||
|     std::string d_satellite_str; | ||||
| 	unsigned int d_doppler_max; | ||||
| 	unsigned int d_doppler_step; | ||||
| 	unsigned int d_sampled_ms; | ||||
|     unsigned int d_doppler_max; | ||||
|     unsigned int d_doppler_step; | ||||
|     unsigned int d_sampled_ms; | ||||
|     unsigned int d_max_dwells; | ||||
|     unsigned int d_well_count; | ||||
| 	unsigned int d_fft_size; | ||||
| 	unsigned long int d_sample_counter; | ||||
|     unsigned int d_fft_size; | ||||
|     unsigned long int d_sample_counter; | ||||
|     gr_complex** d_grid_doppler_wipeoffs; | ||||
|     unsigned int d_num_doppler_bins; | ||||
|     gr_complex* d_fft_code_A; | ||||
|     gr_complex* d_fft_code_B; | ||||
| 	gr::fft::fft_complex* d_fft_if; | ||||
| 	gr::fft::fft_complex* d_ifft; | ||||
|     gr::fft::fft_complex* d_fft_if; | ||||
|     gr::fft::fft_complex* d_ifft; | ||||
|     Gnss_Synchro *d_gnss_synchro; | ||||
| 	unsigned int d_code_phase; | ||||
| 	float d_doppler_freq; | ||||
| 	float d_mag; | ||||
|     unsigned int d_code_phase; | ||||
|     float d_doppler_freq; | ||||
|     float d_mag; | ||||
|     float* d_magnitude; | ||||
| 	float d_input_power; | ||||
| 	float d_test_statistics; | ||||
|     float d_input_power; | ||||
|     float d_test_statistics; | ||||
|     gr::msg_queue::sptr d_queue; | ||||
| 	std::ofstream d_dump_file; | ||||
| 	bool d_active; | ||||
|     std::ofstream d_dump_file; | ||||
|     bool d_active; | ||||
|     int d_state; | ||||
| 	bool d_dump; | ||||
| 	unsigned int d_channel; | ||||
| 	std::string d_dump_filename; | ||||
|     bool d_dump; | ||||
|     unsigned int d_channel; | ||||
|     std::string d_dump_filename; | ||||
|  | ||||
| public: | ||||
|     /*! | ||||
|   | ||||
| @@ -61,9 +61,9 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc( | ||||
|         int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, | ||||
|         long fs_in, int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump, | ||||
|         std::string dump_filename) : | ||||
| 		        gr::block("pcps_acquisition_fine_doppler_cc", | ||||
| 		                gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
| 		                gr::io_signature::make(0, 0, sizeof(gr_complex))) | ||||
|                 gr::block("pcps_acquisition_fine_doppler_cc", | ||||
|                         gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                         gr::io_signature::make(0, 0, sizeof(gr_complex))) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0;    // SAMPLE COUNTER | ||||
| @@ -393,32 +393,32 @@ int pcps_acquisition_fine_doppler_cc::estimate_Doppler(gr_vector_const_void_star | ||||
|             DLOG(INFO) <<  "Error estimating fine frequency Doppler"; | ||||
|             //debug log | ||||
|             // | ||||
|             //		std::cout<<"FFT maximum present at "<<fftFreqBins[tmp_index_freq]<<" [Hz]"<<std::endl; | ||||
|             //		std::stringstream filename; | ||||
|             //		std::streamsize n = sizeof(gr_complex) * (d_fft_size); | ||||
|             //        std::cout<<"FFT maximum present at "<<fftFreqBins[tmp_index_freq]<<" [Hz]"<<std::endl; | ||||
|             //        std::stringstream filename; | ||||
|             //        std::streamsize n = sizeof(gr_complex) * (d_fft_size); | ||||
|             // | ||||
|             //		filename.str(""); | ||||
|             //		filename << "../data/code_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //		d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //				| std::ios::binary); | ||||
|             //		d_dump_file.write((char*)code_replica, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //		d_dump_file.close(); | ||||
|             //        filename.str(""); | ||||
|             //        filename << "../data/code_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //        d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //                | std::ios::binary); | ||||
|             //        d_dump_file.write((char*)code_replica, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //        d_dump_file.close(); | ||||
|             // | ||||
|             //		filename.str(""); | ||||
|             //		filename << "../data/signal_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //		d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //				| std::ios::binary); | ||||
|             //		d_dump_file.write((char*)in, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //		d_dump_file.close(); | ||||
|             //        filename.str(""); | ||||
|             //        filename << "../data/signal_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //        d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //                | std::ios::binary); | ||||
|             //        d_dump_file.write((char*)in, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //        d_dump_file.close(); | ||||
|             // | ||||
|             // | ||||
|             //		n = sizeof(float) * (fft_size_extended); | ||||
|             //		filename.str(""); | ||||
|             //		filename << "../data/fft_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //		d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //				| std::ios::binary); | ||||
|             //		d_dump_file.write((char*)p_tmp_vector, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //		d_dump_file.close(); | ||||
|             //        n = sizeof(float) * (fft_size_extended); | ||||
|             //        filename.str(""); | ||||
|             //        filename << "../data/fft_prn_" << d_gnss_synchro->PRN << ".dat"; | ||||
|             //        d_dump_file.open(filename.str().c_str(), std::ios::out | ||||
|             //                | std::ios::binary); | ||||
|             //        d_dump_file.write((char*)p_tmp_vector, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|             //        d_dump_file.close(); | ||||
|         } | ||||
|  | ||||
|  | ||||
| @@ -436,17 +436,17 @@ int pcps_acquisition_fine_doppler_cc::general_work(int noutput_items, | ||||
| { | ||||
|  | ||||
|     /*! | ||||
|      * TODO: 	High sensitivity acquisition algorithm: | ||||
|      * 			State Mechine: | ||||
|      * 			S0. StandBy. If d_active==1 -> S1 | ||||
|      * 			S1. ComputeGrid. Perform the FFT acqusition doppler and delay grid. | ||||
|      * 				Accumulate the search grid matrix (#doppler_bins x #fft_size) | ||||
|      * 				Compare maximum to threshold and decide positive or negative | ||||
|      * 				If T>=gamma -> S4 else | ||||
|      * 				If d_well_count<max_dwells -> S2 | ||||
|      * 				else -> S5. | ||||
|      * 			S4. Positive_Acq: Send message and stop acq -> S0 | ||||
|      * 			S5. Negative_Acq: Send message and stop acq -> S0 | ||||
|      * TODO:     High sensitivity acquisition algorithm: | ||||
|      *             State Mechine: | ||||
|      *             S0. StandBy. If d_active==1 -> S1 | ||||
|      *             S1. ComputeGrid. Perform the FFT acqusition doppler and delay grid. | ||||
|      *                 Accumulate the search grid matrix (#doppler_bins x #fft_size) | ||||
|      *                 Compare maximum to threshold and decide positive or negative | ||||
|      *                 If T>=gamma -> S4 else | ||||
|      *                 If d_well_count<max_dwells -> S2 | ||||
|      *                 else -> S5. | ||||
|      *             S4. Positive_Acq: Send message and stop acq -> S0 | ||||
|      *             S5. Negative_Acq: Send message and stop acq -> S0 | ||||
|      */ | ||||
|  | ||||
|     switch (d_state) | ||||
|   | ||||
| @@ -95,9 +95,8 @@ private: | ||||
|             std::string dump_filename); | ||||
|  | ||||
|     void update_local_carrier(gr_complex* carrier_vector, | ||||
|     		int correlator_length_samples, | ||||
|     		float freq); | ||||
|  | ||||
|             int correlator_length_samples, | ||||
|             float freq); | ||||
|  | ||||
|     long d_fs_in; | ||||
|     long d_freq; | ||||
|   | ||||
| @@ -50,7 +50,6 @@ pcps_assisted_acquisition_cc_sptr pcps_make_assisted_acquisition_cc( | ||||
|         long fs_in, int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump, | ||||
|         std::string dump_filename) | ||||
| { | ||||
|  | ||||
|     return pcps_assisted_acquisition_cc_sptr( | ||||
|             new pcps_assisted_acquisition_cc(max_dwells, sampled_ms, doppler_max, doppler_min, freq, | ||||
|                     fs_in, samples_per_ms, queue, dump, dump_filename)); | ||||
| @@ -62,9 +61,9 @@ pcps_assisted_acquisition_cc::pcps_assisted_acquisition_cc( | ||||
|         int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, | ||||
|         long fs_in, int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump, | ||||
|         std::string dump_filename) : | ||||
| 		        gr::block("pcps_assisted_acquisition_cc", | ||||
| 		                gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
| 		                gr::io_signature::make(0, 0, sizeof(gr_complex))) | ||||
|                 gr::block("pcps_assisted_acquisition_cc", | ||||
|                         gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                         gr::io_signature::make(0, 0, sizeof(gr_complex))) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0;    // SAMPLE COUNTER | ||||
| @@ -379,20 +378,20 @@ int pcps_assisted_acquisition_cc::general_work(int noutput_items, | ||||
|         gr_vector_void_star &output_items __attribute__((unused))) | ||||
| { | ||||
|     /*! | ||||
|      * TODO: 	High sensitivity acquisition algorithm: | ||||
|      * 			State Mechine: | ||||
|      * 			S0. StandBy. If d_active==1 -> S1 | ||||
|      * 			S1. GetAssist. Define search grid with assistance information. Reset grid matrix -> S2 | ||||
|      * 			S2. ComputeGrid. Perform the FFT acqusition doppler and delay grid. | ||||
|      * 				Accumulate the search grid matrix (#doppler_bins x #fft_size) | ||||
|      * 				Compare maximum to threshold and decide positive or negative | ||||
|      * 				If T>=gamma -> S4 else | ||||
|      * 				If d_well_count<max_dwells -> S2 | ||||
|      * 				else if !disable_assist -> S3 | ||||
|      * 				else -> S5. | ||||
|      * 			S3. RedefineGrid. Open the grid search to unasisted acquisition. Reset counters and grid. -> S2 | ||||
|      * 			S4. Positive_Acq: Send message and stop acq -> S0 | ||||
|      * 			S5. Negative_Acq: Send message and stop acq -> S0 | ||||
|      * TODO:     High sensitivity acquisition algorithm: | ||||
|      *             State Mechine: | ||||
|      *             S0. StandBy. If d_active==1 -> S1 | ||||
|      *             S1. GetAssist. Define search grid with assistance information. Reset grid matrix -> S2 | ||||
|      *             S2. ComputeGrid. Perform the FFT acqusition doppler and delay grid. | ||||
|      *                 Accumulate the search grid matrix (#doppler_bins x #fft_size) | ||||
|      *                 Compare maximum to threshold and decide positive or negative | ||||
|      *                 If T>=gamma -> S4 else | ||||
|      *                 If d_well_count<max_dwells -> S2 | ||||
|      *                 else if !disable_assist -> S3 | ||||
|      *                 else -> S5. | ||||
|      *             S3. RedefineGrid. Open the grid search to unasisted acquisition. Reset counters and grid. -> S2 | ||||
|      *             S4. Positive_Acq: Send message and stop acq -> S0 | ||||
|      *             S5. Negative_Acq: Send message and stop acq -> S0 | ||||
|      */ | ||||
|  | ||||
|     switch (d_state) | ||||
|   | ||||
| @@ -102,41 +102,41 @@ private: | ||||
|             int doppler_offset); | ||||
|  | ||||
|  | ||||
| 	long d_fs_in; | ||||
| 	long d_freq; | ||||
| 	int d_samples_per_ms; | ||||
|     long d_fs_in; | ||||
|     long d_freq; | ||||
|     int d_samples_per_ms; | ||||
|     int d_samples_per_code; | ||||
| 	unsigned int d_doppler_resolution; | ||||
| 	float d_threshold; | ||||
|     unsigned int d_doppler_resolution; | ||||
|     float d_threshold; | ||||
|     std::string d_satellite_str; | ||||
| 	unsigned int d_doppler_max; | ||||
| 	unsigned int d_doppler_step; | ||||
| 	unsigned int d_sampled_ms; | ||||
|     unsigned int d_doppler_max; | ||||
|     unsigned int d_doppler_step; | ||||
|     unsigned int d_sampled_ms; | ||||
|     unsigned int d_max_dwells; | ||||
|     unsigned int d_well_count; | ||||
| 	unsigned int d_fft_size; | ||||
| 	unsigned long int d_sample_counter; | ||||
|     unsigned int d_fft_size; | ||||
|     unsigned long int d_sample_counter; | ||||
|     gr_complex** d_grid_doppler_wipeoffs; | ||||
|     unsigned int d_num_doppler_bins; | ||||
| 	gr_complex* d_fft_codes; | ||||
| 	gr::fft::fft_complex* d_fft_if; | ||||
| 	gr::fft::fft_complex* d_ifft; | ||||
|     gr_complex* d_fft_codes; | ||||
|     gr::fft::fft_complex* d_fft_if; | ||||
|     gr::fft::fft_complex* d_ifft; | ||||
|     Gnss_Synchro *d_gnss_synchro; | ||||
| 	unsigned int d_code_phase; | ||||
| 	float d_doppler_freq; | ||||
| 	float d_mag; | ||||
|     unsigned int d_code_phase; | ||||
|     float d_doppler_freq; | ||||
|     float d_mag; | ||||
|     float* d_magnitude; | ||||
| 	float d_input_power; | ||||
| 	float d_test_statistics; | ||||
|     float d_input_power; | ||||
|     float d_test_statistics; | ||||
|     bool d_bit_transition_flag; | ||||
|     gr::msg_queue::sptr d_queue; | ||||
| 	std::ofstream d_dump_file; | ||||
| 	bool d_active; | ||||
|     std::ofstream d_dump_file; | ||||
|     bool d_active; | ||||
|     int d_state; | ||||
|     bool d_core_working; | ||||
| 	bool d_dump; | ||||
| 	unsigned int d_channel; | ||||
| 	std::string d_dump_filename; | ||||
|     bool d_dump; | ||||
|     unsigned int d_channel; | ||||
|     std::string d_dump_filename; | ||||
|     gr_complex** d_in_buffer; | ||||
|     std::vector<unsigned long int> d_sample_counter_buffer; | ||||
|     unsigned int d_in_dwell_count; | ||||
|   | ||||
| @@ -134,6 +134,7 @@ pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc( | ||||
|     // DLOG(INFO) << "END CONSTRUCTOR"; | ||||
| } | ||||
|  | ||||
|  | ||||
| pcps_quicksync_acquisition_cc::~pcps_quicksync_acquisition_cc() | ||||
| { | ||||
|     //DLOG(INFO) << "START DESTROYER"; | ||||
| @@ -478,8 +479,8 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                             std::streamsize n =  sizeof(float) * (d_fft_size); // complex file write | ||||
|                             filename.str(""); | ||||
|                             filename << "../data/test_statistics_" << d_gnss_synchro->System | ||||
|                                      << "_" << d_gnss_synchro->Signal << "_sat_" | ||||
|                                      << d_gnss_synchro->PRN << "_doppler_" <<  doppler << ".dat"; | ||||
|                                     << "_" << d_gnss_synchro->Signal << "_sat_" | ||||
|                                     << d_gnss_synchro->PRN << "_doppler_" <<  doppler << ".dat"; | ||||
|                             d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); | ||||
|                             d_dump_file.write((char*)d_magnitude_folded, n); //write directly |abs(x)|^2 in this Doppler bin? | ||||
|                             d_dump_file.close(); | ||||
| @@ -562,7 +563,7 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|             DLOG(INFO) << "test statistics value " << d_test_statistics; | ||||
|             DLOG(INFO) << "test statistics threshold " << d_threshold; | ||||
|             DLOG(INFO) << "folding factor "<<d_folding_factor; | ||||
|             DLOG(INFO) << "possible delay	corr output"; | ||||
|             DLOG(INFO) << "possible delay    corr output"; | ||||
|             for (int i = 0; i < static_cast<int>(d_folding_factor); i++) DLOG(INFO) << d_possible_delay[i] << "\t\t\t" << d_corr_output_f[i]; | ||||
|             DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; | ||||
|             DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; | ||||
|   | ||||
| @@ -137,7 +137,7 @@ ChannelFsm::ChannelFsm() | ||||
|  | ||||
|  | ||||
| ChannelFsm::ChannelFsm(std::shared_ptr<AcquisitionInterface> acquisition) : | ||||
| 	        acq_(acquisition) | ||||
|             acq_(acquisition) | ||||
| { | ||||
|     trk_ = nullptr; | ||||
|     channel_ = 0; | ||||
| @@ -177,7 +177,7 @@ void ChannelFsm::Event_failed_tracking_standby() | ||||
| } | ||||
|  | ||||
| //void ChannelFsm::Event_failed_tracking_reacq() { | ||||
| //	this->process_event(Ev_channel_failed_tracking_reacq()); | ||||
| //    this->process_event(Ev_channel_failed_tracking_reacq()); | ||||
| //} | ||||
|  | ||||
| void ChannelFsm::set_acquisition(std::shared_ptr<AcquisitionInterface> acquisition) | ||||
|   | ||||
| @@ -202,16 +202,16 @@ void FirFilter::connect(gr::top_block_sptr top_block) | ||||
|                 } | ||||
|         } | ||||
|     else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) | ||||
|     		&& (output_item_type_.compare("gr_complex") == 0)) | ||||
|             && (output_item_type_.compare("gr_complex") == 0)) | ||||
|         { | ||||
|             top_block->connect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); | ||||
|     	    top_block->connect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); | ||||
|     	    top_block->connect(fir_filter_fff_1_, 0, float_to_complex_, 0); | ||||
|     	    top_block->connect(fir_filter_fff_2_, 0, float_to_complex_, 1); | ||||
|     	    if (dump_) | ||||
|     	        { | ||||
|     		        top_block->connect(float_to_complex_, 0, file_sink_, 0); | ||||
|     	        } | ||||
|             top_block->connect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); | ||||
|             top_block->connect(fir_filter_fff_1_, 0, float_to_complex_, 0); | ||||
|             top_block->connect(fir_filter_fff_2_, 0, float_to_complex_, 1); | ||||
|             if (dump_) | ||||
|                 { | ||||
|                     top_block->connect(float_to_complex_, 0, file_sink_, 0); | ||||
|                 } | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -272,16 +272,16 @@ void FirFilter::disconnect(gr::top_block_sptr top_block) | ||||
|                 } | ||||
|         } | ||||
|     else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) | ||||
|     		&& (output_item_type_.compare("gr_complex") == 0)) | ||||
|             && (output_item_type_.compare("gr_complex") == 0)) | ||||
|         { | ||||
|             top_block->disconnect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); | ||||
|     	    top_block->disconnect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); | ||||
|     	    top_block->disconnect(fir_filter_fff_1_, 0, float_to_complex_, 0); | ||||
|     	    top_block->disconnect(fir_filter_fff_2_, 0, float_to_complex_, 1); | ||||
|     	    if (dump_) | ||||
|     	        { | ||||
|     		        top_block->disconnect(float_to_complex_, 0, file_sink_, 0); | ||||
|     	        } | ||||
|             top_block->disconnect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); | ||||
|             top_block->disconnect(fir_filter_fff_1_, 0, float_to_complex_, 0); | ||||
|             top_block->disconnect(fir_filter_fff_2_, 0, float_to_complex_, 1); | ||||
|             if (dump_) | ||||
|                 { | ||||
|                     top_block->disconnect(float_to_complex_, 0, file_sink_, 0); | ||||
|                 } | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -314,7 +314,7 @@ gr::basic_block_sptr FirFilter::get_left_block() | ||||
|             return cbyte_to_float_x2_; | ||||
|         } | ||||
|     else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) | ||||
|     		&& (output_item_type_.compare("gr_complex") == 0)) | ||||
|             && (output_item_type_.compare("gr_complex") == 0)) | ||||
|         { | ||||
|             return cshort_to_float_x2_; | ||||
|         } | ||||
| @@ -350,7 +350,7 @@ gr::basic_block_sptr FirFilter::get_right_block() | ||||
|             return char_x2_cbyte_; | ||||
|         } | ||||
|     else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) | ||||
|       		&& (output_item_type_.compare("gr_complex") == 0)) | ||||
|               && (output_item_type_.compare("gr_complex") == 0)) | ||||
|         { | ||||
|             return float_to_complex_; | ||||
|         } | ||||
|   | ||||
| @@ -41,53 +41,55 @@ beamformer_sptr make_beamformer() | ||||
|     return beamformer_sptr(new beamformer()); | ||||
| } | ||||
|  | ||||
| beamformer::beamformer() | ||||
| 	: gr::sync_block("beamformer", | ||||
|             		gr::io_signature::make(GNSS_SDR_BEAMFORMER_CHANNELS, GNSS_SDR_BEAMFORMER_CHANNELS,sizeof(gr_complex)), | ||||
|             		gr::io_signature::make(1, 1,sizeof(gr_complex))) | ||||
| { | ||||
|  | ||||
| 	//initialize weight vector | ||||
| beamformer::beamformer() | ||||
| : gr::sync_block("beamformer", | ||||
|         gr::io_signature::make(GNSS_SDR_BEAMFORMER_CHANNELS, GNSS_SDR_BEAMFORMER_CHANNELS,sizeof(gr_complex)), | ||||
|         gr::io_signature::make(1, 1,sizeof(gr_complex))) | ||||
| { | ||||
|     //initialize weight vector | ||||
|  | ||||
|     if (posix_memalign((void**)&weight_vector, 16, GNSS_SDR_BEAMFORMER_CHANNELS * sizeof(gr_complex)) == 0){}; | ||||
|  | ||||
|     for (int i=0;i<GNSS_SDR_BEAMFORMER_CHANNELS;i++) | ||||
|     { | ||||
|     	weight_vector[i]=gr_complex(1,0); | ||||
|     } | ||||
|     for (int i = 0; i< GNSS_SDR_BEAMFORMER_CHANNELS; i++) | ||||
|         { | ||||
|             weight_vector[i]=gr_complex(1,0); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| beamformer::~beamformer() | ||||
| { | ||||
| 	free(weight_vector); | ||||
|     free(weight_vector); | ||||
| } | ||||
|  | ||||
|  | ||||
| int beamformer::work(int noutput_items,gr_vector_const_void_star &input_items, | ||||
|         gr_vector_void_star &output_items) | ||||
| { | ||||
|     gr_complex *out = (gr_complex *) output_items[0]; | ||||
| 	  // channel output buffers | ||||
| 	//  gr_complex *ch1 = (gr_complex *) input_items[0]; | ||||
| 	//  gr_complex *ch2 = (gr_complex *) input_items[1]; | ||||
| 	//  gr_complex *ch3 = (gr_complex *) input_items[2]; | ||||
| 	//  gr_complex *ch4 = (gr_complex *) input_items[3]; | ||||
| 	//  gr_complex *ch5 = (gr_complex *) input_items[4]; | ||||
| 	//  gr_complex *ch6 = (gr_complex *) input_items[5]; | ||||
| 	//  gr_complex *ch7 = (gr_complex *) input_items[6]; | ||||
| 	//  gr_complex *ch8 = (gr_complex *) input_items[7]; | ||||
|     // channel output buffers | ||||
|     //  gr_complex *ch1 = (gr_complex *) input_items[0]; | ||||
|     //  gr_complex *ch2 = (gr_complex *) input_items[1]; | ||||
|     //  gr_complex *ch3 = (gr_complex *) input_items[2]; | ||||
|     //  gr_complex *ch4 = (gr_complex *) input_items[3]; | ||||
|     //  gr_complex *ch5 = (gr_complex *) input_items[4]; | ||||
|     //  gr_complex *ch6 = (gr_complex *) input_items[5]; | ||||
|     //  gr_complex *ch7 = (gr_complex *) input_items[6]; | ||||
|     //  gr_complex *ch8 = (gr_complex *) input_items[7]; | ||||
|  | ||||
| 	// NON-VOLK beamforming operation | ||||
|     // NON-VOLK beamforming operation | ||||
|     //TODO: Implement VOLK SIMD-accelerated beamformer! | ||||
| 	gr_complex sum; | ||||
| 	for(int n=0;n<noutput_items;n++) | ||||
| 	{ | ||||
| 		sum=gr_complex(0,0); | ||||
| 		for (int i=0;i<GNSS_SDR_BEAMFORMER_CHANNELS;i++) | ||||
| 		{ | ||||
| 			sum=sum+((gr_complex *) input_items[i])[n]*weight_vector[i]; | ||||
| 		} | ||||
| 		out[n]=sum; | ||||
| 	} | ||||
|     gr_complex sum; | ||||
|     for(int n = 0; n < noutput_items; n++) | ||||
|         { | ||||
|             sum = gr_complex(0,0); | ||||
|             for (int i = 0; i < GNSS_SDR_BEAMFORMER_CHANNELS; i++) | ||||
|                 { | ||||
|                     sum = sum + ((gr_complex*)input_items[i])[n] * weight_vector[i]; | ||||
|                 } | ||||
|             out[n] = sum; | ||||
|         } | ||||
|  | ||||
|     return noutput_items; | ||||
| } | ||||
|   | ||||
| @@ -44,64 +44,64 @@ void galileo_e5_a_code_gen_complex_primary(std::complex<float>* _dest, signed in | ||||
|     unsigned int index = 0; | ||||
|     int a[4]; | ||||
|     if ((_prn < 1) || (_prn > 50)) | ||||
| 	{ | ||||
| 	    return; | ||||
| 	} | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|     if (_Signal[0] == '5' && _Signal[1] == 'Q') | ||||
| 	{ | ||||
| 	    for (size_t i = 0; i < Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1; i++) | ||||
| 		{ | ||||
| 		    hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); | ||||
| 		    _dest[index] = std::complex<float>(0.0, float(a[0])); | ||||
| 		    _dest[index + 1] = std::complex<float>(0.0, float(a[1])); | ||||
| 		    _dest[index + 2] = std::complex<float>(0.0, float(a[2])); | ||||
| 		    _dest[index + 3] = std::complex<float>(0.0, float(a[3])); | ||||
| 		    index = index + 4; | ||||
| 		} | ||||
| 	    // last 2 bits are filled up zeros | ||||
| 	    hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); | ||||
| 	    _dest[index] = std::complex<float>(float(0.0), a[0]); | ||||
| 	    _dest[index + 1] = std::complex<float>(float(0.0), a[1]); | ||||
| 	} | ||||
|         { | ||||
|             for (size_t i = 0; i < Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1; i++) | ||||
|                 { | ||||
|                     hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); | ||||
|                     _dest[index] = std::complex<float>(0.0, float(a[0])); | ||||
|                     _dest[index + 1] = std::complex<float>(0.0, float(a[1])); | ||||
|                     _dest[index + 2] = std::complex<float>(0.0, float(a[2])); | ||||
|                     _dest[index + 3] = std::complex<float>(0.0, float(a[3])); | ||||
|                     index = index + 4; | ||||
|                 } | ||||
|             // last 2 bits are filled up zeros | ||||
|             hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); | ||||
|             _dest[index] = std::complex<float>(float(0.0), a[0]); | ||||
|             _dest[index + 1] = std::complex<float>(float(0.0), a[1]); | ||||
|         } | ||||
|     else if (_Signal[0] == '5' && _Signal[1] == 'I') | ||||
| 	{ | ||||
| 	    for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) | ||||
| 		{ | ||||
| 		    hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); | ||||
| 		    _dest[index] = std::complex<float>(float(a[0]), 0.0); | ||||
| 		    _dest[index + 1] = std::complex<float>(float(a[1]), 0.0); | ||||
| 		    _dest[index + 2] = std::complex<float>(float(a[2]), 0.0); | ||||
| 		    _dest[index + 3] = std::complex<float>(float(a[3]), 0.0); | ||||
| 		    index = index + 4; | ||||
| 		} | ||||
| 	    // last 2 bits are filled up zeros | ||||
| 	    hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); | ||||
| 	    _dest[index] = std::complex<float>(float(a[0]), 0.0); | ||||
| 	    _dest[index + 1] = std::complex<float>(float(a[1]), 0.0); | ||||
| 	} | ||||
|         { | ||||
|             for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) | ||||
|                 { | ||||
|                     hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); | ||||
|                     _dest[index] = std::complex<float>(float(a[0]), 0.0); | ||||
|                     _dest[index + 1] = std::complex<float>(float(a[1]), 0.0); | ||||
|                     _dest[index + 2] = std::complex<float>(float(a[2]), 0.0); | ||||
|                     _dest[index + 3] = std::complex<float>(float(a[3]), 0.0); | ||||
|                     index = index + 4; | ||||
|                 } | ||||
|             // last 2 bits are filled up zeros | ||||
|             hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); | ||||
|             _dest[index] = std::complex<float>(float(a[0]), 0.0); | ||||
|             _dest[index + 1] = std::complex<float>(float(a[1]), 0.0); | ||||
|         } | ||||
|     else if (_Signal[0] == '5' && _Signal[1] == 'X') | ||||
| 	{ | ||||
| 	    int b[4]; | ||||
| 	    for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) | ||||
| 		{ | ||||
| 		    hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); | ||||
| 		    hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); | ||||
| 		    _dest[index] = std::complex<float>(float(a[0]),float(b[0])); | ||||
| 		    _dest[index + 1] = std::complex<float>(float(a[1]),float(b[1])); | ||||
| 		    _dest[index + 2] = std::complex<float>(float(a[2]),float(b[2])); | ||||
| 		    _dest[index + 3] = std::complex<float>(float(a[3]),float(b[3])); | ||||
| 		    index = index + 4; | ||||
| 		} | ||||
| 	    // last 2 bits are filled up zeros | ||||
| 	    hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); | ||||
| 	    hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); | ||||
| 	    _dest[index] = std::complex<float>(float(a[0]), float(b[0])); | ||||
| 	    _dest[index + 1] = std::complex<float>(float(a[1]), float(b[1])); | ||||
| 	} | ||||
|         { | ||||
|             int b[4]; | ||||
|             for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) | ||||
|                 { | ||||
|                     hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); | ||||
|                     hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); | ||||
|                     _dest[index] = std::complex<float>(float(a[0]),float(b[0])); | ||||
|                     _dest[index + 1] = std::complex<float>(float(a[1]),float(b[1])); | ||||
|                     _dest[index + 2] = std::complex<float>(float(a[2]),float(b[2])); | ||||
|                     _dest[index + 3] = std::complex<float>(float(a[3]),float(b[3])); | ||||
|                     index = index + 4; | ||||
|                 } | ||||
|             // last 2 bits are filled up zeros | ||||
|             hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); | ||||
|             hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); | ||||
|             _dest[index] = std::complex<float>(float(a[0]), float(b[0])); | ||||
|             _dest[index + 1] = std::complex<float>(float(a[1]), float(b[1])); | ||||
|         } | ||||
| } | ||||
|  | ||||
| void galileo_e5_a_code_gen_complex_sampled(std::complex<float>* _dest, char _Signal[3], | ||||
| 		unsigned int _prn, signed int _fs, unsigned int _chip_shift) | ||||
|         unsigned int _prn, signed int _fs, unsigned int _chip_shift) | ||||
| { | ||||
|     unsigned int _samplesPerCode; | ||||
|     unsigned int delay; | ||||
|   | ||||
| @@ -51,7 +51,7 @@ void galileo_e5_a_code_gen_tiered(std::complex<float>* _dest,std::complex<float> | ||||
|  * bool _pilot generates E5aQ code if true and E5aI (data signal) if false. | ||||
|  */ | ||||
| void galileo_e5_a_code_gen_complex_sampled(std::complex<float>* _dest, | ||||
| 		char _Signal[3], unsigned int _prn, signed int _fs, unsigned int _chip_shift); | ||||
|         char _Signal[3], unsigned int _prn, signed int _fs, unsigned int _chip_shift); | ||||
|  | ||||
|  | ||||
| #endif /* GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_ */ | ||||
|   | ||||
| @@ -44,10 +44,7 @@ gnss_sdr_valve::gnss_sdr_valve (size_t sizeof_stream_item, | ||||
| {} | ||||
|  | ||||
|  | ||||
|  | ||||
| boost::shared_ptr<gr::block> gnss_sdr_make_valve (size_t sizeof_stream_item, | ||||
|         unsigned long long nitems, | ||||
|         gr::msg_queue::sptr queue) | ||||
| boost::shared_ptr<gr::block> gnss_sdr_make_valve (size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue) | ||||
| { | ||||
|     boost::shared_ptr<gnss_sdr_valve> valve_(new gnss_sdr_valve(sizeof_stream_item, nitems, queue)); | ||||
|     return valve_; | ||||
| @@ -61,11 +58,10 @@ int gnss_sdr_valve::work (int noutput_items, | ||||
| { | ||||
|     if (d_ncopied_items >= d_nitems) | ||||
|         { | ||||
|  | ||||
|             ControlMessageFactory* cmf = new ControlMessageFactory(); | ||||
|             d_queue->handle(cmf->GetQueueMessage(200,0)); | ||||
|             delete cmf; | ||||
|             return -1;	// Done! | ||||
|             return -1;    // Done! | ||||
|         } | ||||
|     unsigned long long n = std::min(d_nitems - d_ncopied_items, (long long unsigned int)noutput_items); | ||||
|     if (n == 0) return 0; | ||||
|   | ||||
| @@ -54,8 +54,8 @@ class gnss_sdr_valve : public gr::sync_block | ||||
|     gnss_sdr_valve (size_t sizeof_stream_item, | ||||
|             unsigned long long nitems, | ||||
|             gr::msg_queue::sptr queue); | ||||
|     unsigned long long	d_nitems; | ||||
|     unsigned long long	d_ncopied_items; | ||||
|     unsigned long long    d_nitems; | ||||
|     unsigned long long    d_ncopied_items; | ||||
|     gr::msg_queue::sptr d_queue; | ||||
|  | ||||
| public: | ||||
|   | ||||
| @@ -55,105 +55,105 @@ void complex_exp_gen_conj(std::complex<float>* _dest, double _f, double _fs, uns | ||||
|  | ||||
| void hex_to_binary_converter(int * _dest, char _from) | ||||
| { | ||||
| 	switch(_from) | ||||
| 	{ | ||||
| 		case '0': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case '1': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case '2': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case '3': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case '4': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case '5': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case '6': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case '7': | ||||
| 			*(_dest) = 1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case '8': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case '9': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case 'A': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case 'B': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = 1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case 'C': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case 'D': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = 1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 		case 'E': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = 1; | ||||
| 			break; | ||||
| 		case 'F': | ||||
| 			*(_dest) = -1; | ||||
| 			*(_dest+1) = -1; | ||||
| 			*(_dest+2) = -1; | ||||
| 			*(_dest+3) = -1; | ||||
| 			break; | ||||
| 	} | ||||
|     switch(_from) | ||||
|     { | ||||
|     case '0': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case '1': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case '2': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case '3': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case '4': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case '5': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case '6': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case '7': | ||||
|         *(_dest) = 1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case '8': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case '9': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case 'A': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case 'B': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = 1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case 'C': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case 'D': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = 1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     case 'E': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = 1; | ||||
|         break; | ||||
|     case 'F': | ||||
|         *(_dest) = -1; | ||||
|         *(_dest+1) = -1; | ||||
|         *(_dest+2) = -1; | ||||
|         *(_dest+3) = -1; | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -54,14 +54,13 @@ void gps_l1_ca_code_gen_complex(std::complex<float>* _dest, signed int _prn, uns | ||||
|  | ||||
|     // compute delay array index for given PRN number | ||||
|     if(120 <= _prn && _prn <= 138) | ||||
|     { | ||||
|     	prn_idx = _prn - 88;	// SBAS PRNs are at array indices 31 to 50 (offset: -120+33-1 =-88) | ||||
|     	//prn_idx = _prn - 87;	// SBAS PRNs are at array indices 31 to 50 (offset: -120+33 =-87) | ||||
|     } | ||||
|         { | ||||
|             prn_idx = _prn - 88;    // SBAS PRNs are at array indices 31 to 50 (offset: -120+33-1 =-88) | ||||
|         } | ||||
|     else | ||||
|     { | ||||
|     	prn_idx = _prn - 1; | ||||
|     } | ||||
|         { | ||||
|             prn_idx = _prn - 1; | ||||
|         } | ||||
|  | ||||
|     /* A simple error check */ | ||||
|     if((prn_idx < 0) || (prn_idx > 51)) | ||||
|   | ||||
| @@ -109,16 +109,16 @@ Pass_Through::~Pass_Through() | ||||
|  | ||||
| void Pass_Through::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	DLOG(INFO) << "nothing to connect internally"; | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     DLOG(INFO) << "nothing to connect internally"; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void Pass_Through::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	// Nothing to disconnect | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     // Nothing to disconnect | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -47,10 +47,10 @@ class ConfigurationInterface; | ||||
| class GalileoE1Observables : public ObservablesInterface | ||||
| { | ||||
| public: | ||||
| 	GalileoE1Observables(ConfigurationInterface* configuration, | ||||
|                        std::string role, | ||||
|                        unsigned int in_streams, | ||||
|                        unsigned int out_streams); | ||||
|     GalileoE1Observables(ConfigurationInterface* configuration, | ||||
|             std::string role, | ||||
|             unsigned int in_streams, | ||||
|             unsigned int out_streams); | ||||
|     virtual ~GalileoE1Observables(); | ||||
|     std::string role() | ||||
|     { | ||||
|   | ||||
| @@ -47,10 +47,10 @@ class ConfigurationInterface; | ||||
| class HybridObservables : public ObservablesInterface | ||||
| { | ||||
| public: | ||||
| 	HybridObservables(ConfigurationInterface* configuration, | ||||
|                        std::string role, | ||||
|                        unsigned int in_streams, | ||||
|                        unsigned int out_streams); | ||||
|     HybridObservables(ConfigurationInterface* configuration, | ||||
|             std::string role, | ||||
|             unsigned int in_streams, | ||||
|             unsigned int out_streams); | ||||
|     virtual ~HybridObservables(); | ||||
|     std::string role() | ||||
|     { | ||||
|   | ||||
| @@ -57,8 +57,8 @@ galileo_e1_make_observables_cc(unsigned int nchannels, bool dump, std::string du | ||||
|  | ||||
|  | ||||
| galileo_e1_observables_cc::galileo_e1_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : | ||||
| 		                        gr::block("galileo_e1_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
| 		                        gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
|      gr::block("galileo_e1_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
|      gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
| { | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
| @@ -117,7 +117,7 @@ bool Galileo_pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<in | ||||
|  | ||||
|  | ||||
| int galileo_e1_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, | ||||
|         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) | ||||
| { | ||||
|     Gnss_Synchro **in = (Gnss_Synchro **)  &input_items[0];   // Get the input pointer | ||||
|     Gnss_Synchro **out = (Gnss_Synchro **)  &output_items[0]; // Get the output pointer | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
|  | ||||
| #ifndef GNSS_SDR_GALILEO_E1_OBSERVABLES_CC_H | ||||
| #define	GNSS_SDR_GALILEO_E1_OBSERVABLES_CC_H | ||||
| #define    GNSS_SDR_GALILEO_E1_OBSERVABLES_CC_H | ||||
|  | ||||
|  | ||||
| #include <fstream> | ||||
|   | ||||
| @@ -54,8 +54,8 @@ gps_l1_ca_make_observables_cc(unsigned int nchannels, bool dump, std::string dum | ||||
|  | ||||
|  | ||||
| gps_l1_ca_observables_cc::gps_l1_ca_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : | ||||
| 		                        gr::block("gps_l1_ca_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
| 		                        gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
|                                 gr::block("gps_l1_ca_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
|                                 gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
| { | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
| @@ -111,7 +111,7 @@ bool pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<int,Gnss_S | ||||
|  | ||||
|  | ||||
| int gps_l1_ca_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, | ||||
|         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) | ||||
| { | ||||
|     Gnss_Synchro **in = (Gnss_Synchro **)  &input_items[0];   // Get the input pointer | ||||
|     Gnss_Synchro **out = (Gnss_Synchro **)  &output_items[0]; // Get the output pointer | ||||
| @@ -219,8 +219,8 @@ int gps_l1_ca_observables_cc::general_work (int noutput_items, gr_vector_int &ni | ||||
|                             dopper_vec_hz = arma::vec(std::vector<double>(d_carrier_doppler_queue_hz[gnss_synchro_iter->second.Channel_ID].begin(), d_carrier_doppler_queue_hz[gnss_synchro_iter->second.Channel_ID].end())); | ||||
|  | ||||
|                             desired_symbol_TOW[0] = symbol_TOW_vec_s[GPS_L1_CA_HISTORY_DEEP - 1] + delta_rx_time_ms / 1000.0; | ||||
|                             //	arma::interp1(symbol_TOW_vec_s,dopper_vec_hz,desired_symbol_TOW,dopper_vec_interp_hz); | ||||
|                             //	arma::interp1(symbol_TOW_vec_s,acc_phase_vec_rads,desired_symbol_TOW,acc_phase_vec_interp_rads); | ||||
|                             //    arma::interp1(symbol_TOW_vec_s,dopper_vec_hz,desired_symbol_TOW,dopper_vec_interp_hz); | ||||
|                             //    arma::interp1(symbol_TOW_vec_s,acc_phase_vec_rads,desired_symbol_TOW,acc_phase_vec_interp_rads); | ||||
|  | ||||
|                             // Curve fitting to cuadratic function | ||||
|                             arma::mat A = arma::ones<arma::mat> (GPS_L1_CA_HISTORY_DEEP, 2); | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_OBSERVABLES_CC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_OBSERVABLES_CC_H | ||||
| #define    GNSS_SDR_GPS_L1_CA_OBSERVABLES_CC_H | ||||
|  | ||||
| #include <deque> | ||||
| #include <fstream> | ||||
|   | ||||
| @@ -55,8 +55,8 @@ hybrid_make_observables_cc(unsigned int nchannels, bool dump, std::string dump_f | ||||
|  | ||||
|  | ||||
| hybrid_observables_cc::hybrid_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : | ||||
| 		                        gr::block("hybrid_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
| 		                        gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
|                                 gr::block("hybrid_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), | ||||
|                                 gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) | ||||
| { | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
| @@ -111,7 +111,7 @@ bool Hybrid_pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<int | ||||
|  | ||||
|  | ||||
| int hybrid_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, | ||||
|         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) | ||||
| { | ||||
|     Gnss_Synchro **in = (Gnss_Synchro **)  &input_items[0];   // Get the input pointer | ||||
|     Gnss_Synchro **out = (Gnss_Synchro **)  &output_items[0]; // Get the output pointer | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
|  | ||||
| #ifndef GNSS_SDR_HYBRID_OBSERVABLES_CC_H | ||||
| #define	GNSS_SDR_HYBRID_OBSERVABLES_CC_H | ||||
| #define    GNSS_SDR_HYBRID_OBSERVABLES_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <string> | ||||
|   | ||||
| @@ -37,7 +37,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H | ||||
| #define	GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H | ||||
| #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H | ||||
|  | ||||
| #include <gnuradio/block.h> | ||||
| #include <volk/volk.h> | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H | ||||
| #define	GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H | ||||
| #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H | ||||
|  | ||||
| #include <gnuradio/block.h> | ||||
| #include <volk/volk.h> | ||||
|   | ||||
| @@ -41,9 +41,9 @@ | ||||
| using google::LogMessage; | ||||
|  | ||||
| SignalGenerator::SignalGenerator(ConfigurationInterface* configuration, | ||||
|             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_(queue) | ||||
|         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_(queue) | ||||
| { | ||||
|     std::string default_item_type = "gr_complex"; | ||||
|     std::string default_dump_file = "./data/gen_source.dat"; | ||||
| @@ -84,31 +84,31 @@ SignalGenerator::SignalGenerator(ConfigurationInterface* configuration, | ||||
|     // If there is only GPS signal (Galileo signal not present) -> vector duration = 1 ms | ||||
|     unsigned int vector_length = 0; | ||||
|     if (std::find(system.begin(), system.end(), "E") != system.end()) | ||||
|     { | ||||
| 	if (signal1[0].at(0)=='5') | ||||
| 	    { | ||||
| 		vector_length = round((float) fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ | ||||
| 			/ Galileo_E5a_CODE_LENGTH_CHIPS)); | ||||
| 	    } | ||||
| 	else | ||||
| 	    { | ||||
| 		vector_length = round((float)fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ | ||||
| 			/ Galileo_E1_B_CODE_LENGTH_CHIPS)) | ||||
|                                 	  * Galileo_E1_C_SECONDARY_CODE_LENGTH; | ||||
| 	    } | ||||
|     } | ||||
|         { | ||||
|             if (signal1[0].at(0)=='5') | ||||
|                 { | ||||
|                     vector_length = round((float) fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ | ||||
|                             / Galileo_E5a_CODE_LENGTH_CHIPS)); | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     vector_length = round((float)fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ | ||||
|                             / Galileo_E1_B_CODE_LENGTH_CHIPS)) | ||||
|                                               * Galileo_E1_C_SECONDARY_CODE_LENGTH; | ||||
|                 } | ||||
|         } | ||||
|     else if (std::find(system.begin(), system.end(), "G") != system.end()) | ||||
|     { | ||||
|         vector_length = round((float)fs_in | ||||
|                  / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     } | ||||
|         { | ||||
|             vector_length = round((float)fs_in | ||||
|                     / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|         } | ||||
|  | ||||
|     if (item_type_.compare("gr_complex") == 0) | ||||
|         { | ||||
|             item_size_ = sizeof(gr_complex); | ||||
|             DLOG(INFO) << "Item size " << item_size_; | ||||
|             gen_source_ = signal_make_generator_c(signal1, system, PRN, CN0_dB, doppler_Hz, delay_chips, delay_sec, | ||||
|                                              data_flag, noise_flag, fs_in, vector_length, BW_BB); | ||||
|                     data_flag, noise_flag, fs_in, vector_length, BW_BB); | ||||
|  | ||||
|             vector_to_stream_ = gr::blocks::vector_to_stream::make(item_size_, vector_length); | ||||
|  | ||||
| @@ -146,10 +146,10 @@ void SignalGenerator::connect(gr::top_block_sptr top_block) | ||||
|             DLOG(INFO) << "connected gen_source to vector_to_stream"; | ||||
|  | ||||
|             if (dump_) | ||||
|             { | ||||
|                 top_block->connect(vector_to_stream_, 0, file_sink_, 0); | ||||
|                 DLOG(INFO) << "connected vector_to_stream_ to file sink"; | ||||
|             } | ||||
|                 { | ||||
|                     top_block->connect(vector_to_stream_, 0, file_sink_, 0); | ||||
|                     DLOG(INFO) << "connected vector_to_stream_ to file sink"; | ||||
|                 } | ||||
|  | ||||
|         } | ||||
| } | ||||
| @@ -161,9 +161,9 @@ void SignalGenerator::disconnect(gr::top_block_sptr top_block) | ||||
|         { | ||||
|             top_block->disconnect(gen_source_, 0, vector_to_stream_, 0); | ||||
|             if (dump_) | ||||
|             { | ||||
|                 top_block->disconnect(vector_to_stream_, 0, file_sink_, 0); | ||||
|             } | ||||
|                 { | ||||
|                     top_block->disconnect(vector_to_stream_, 0, file_sink_, 0); | ||||
|                 } | ||||
|         } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -63,8 +63,7 @@ signal_generator_c::signal_generator_c (std::vector<std::string> signal1, std::v | ||||
|         const std::vector<float> &CN0_dB, const std::vector<float> &doppler_Hz, | ||||
|         const std::vector<unsigned int> &delay_chips,const std::vector<unsigned int> &delay_sec ,bool data_flag, bool noise_flag, | ||||
|         unsigned int fs_in, unsigned int vector_length, float BW_BB) : | ||||
|  | ||||
|           gr::block ("signal_gen_cc", gr::io_signature::make(0, 0, sizeof(gr_complex)), | ||||
|              gr::block ("signal_gen_cc", gr::io_signature::make(0, 0, sizeof(gr_complex)), | ||||
|                   gr::io_signature::make(1, 1, sizeof(gr_complex) * vector_length)), | ||||
|                   signal_(signal1), | ||||
|                   system_(system), | ||||
| @@ -112,23 +111,23 @@ void signal_generator_c::init() | ||||
|                 } | ||||
|             else if (system_[sat] == "E") | ||||
|                 { | ||||
|         	    if (signal_[sat].at(0) == '5') | ||||
|         		{ | ||||
|         		    int codelen = static_cast<int>(Galileo_E5a_CODE_LENGTH_CHIPS); | ||||
|         		    samples_per_code_.push_back(round(static_cast<float>(fs_in_) / (Galileo_E5a_CODE_CHIP_RATE_HZ | ||||
|         			    / codelen))); | ||||
|         		    num_of_codes_per_vector_.push_back(1); | ||||
|                     if (signal_[sat].at(0) == '5') | ||||
|                         { | ||||
|                             int codelen = static_cast<int>(Galileo_E5a_CODE_LENGTH_CHIPS); | ||||
|                             samples_per_code_.push_back(round(static_cast<float>(fs_in_) / (Galileo_E5a_CODE_CHIP_RATE_HZ | ||||
|                                     / codelen))); | ||||
|                             num_of_codes_per_vector_.push_back(1); | ||||
|  | ||||
|         		    data_bit_duration_ms_.push_back(1e3/Galileo_E5a_SYMBOL_RATE_BPS); | ||||
|         		} | ||||
|         	    else | ||||
|         		{ | ||||
|         		    samples_per_code_.push_back(round(static_cast<float>(fs_in_) / (Galileo_E1_CODE_CHIP_RATE_HZ | ||||
|         			    / Galileo_E1_B_CODE_LENGTH_CHIPS))); | ||||
|                             data_bit_duration_ms_.push_back(1e3/Galileo_E5a_SYMBOL_RATE_BPS); | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             samples_per_code_.push_back(round(static_cast<float>(fs_in_) / (Galileo_E1_CODE_CHIP_RATE_HZ | ||||
|                                     / Galileo_E1_B_CODE_LENGTH_CHIPS))); | ||||
|  | ||||
|         		    num_of_codes_per_vector_.push_back(static_cast<int>(Galileo_E1_C_SECONDARY_CODE_LENGTH)); | ||||
|         		    data_bit_duration_ms_.push_back(1e3 / Galileo_E1_B_SYMBOL_RATE_BPS); | ||||
|         		} | ||||
|                             num_of_codes_per_vector_.push_back(static_cast<int>(Galileo_E1_C_SECONDARY_CODE_LENGTH)); | ||||
|                             data_bit_duration_ms_.push_back(1e3 / Galileo_E1_B_SYMBOL_RATE_BPS); | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
|     random_ = new gr::random(); | ||||
| @@ -150,7 +149,7 @@ void signal_generator_c::generate_codes() | ||||
|                 { | ||||
|                     // Generate one code-period of 1C signal | ||||
|                     gps_l1_ca_code_gen_complex_sampled(code, PRN_[sat], fs_in_, | ||||
|                                     static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|                             static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|  | ||||
|                     // Obtain the desired CN0 assuming that Pn = 1. | ||||
|                     if (noise_flag_) | ||||
| @@ -165,70 +164,70 @@ void signal_generator_c::generate_codes() | ||||
|                     for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                         { | ||||
|                             memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|                                    code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                     code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                         } | ||||
|                 } | ||||
|             else if (system_[sat] == "E") | ||||
|                 { | ||||
|         	    if(signal_[sat].at(0) == '5') | ||||
|         		{ | ||||
|         		    char signal[3]; | ||||
|         		    strcpy(signal, "5X"); | ||||
|                     if(signal_[sat].at(0) == '5') | ||||
|                         { | ||||
|                             char signal[3]; | ||||
|                             strcpy(signal, "5X"); | ||||
|  | ||||
|         		    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]); | ||||
|         		    //noise | ||||
|         		    if (noise_flag_) | ||||
|         			{ | ||||
|         			    for (unsigned int i = 0; i < vector_length_; i++) | ||||
|         				{ | ||||
|         				    sampled_code_data_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|         				} | ||||
|         			} | ||||
|         		} | ||||
|         	    else | ||||
|         		{ | ||||
|         		    // Generate one code-period of E1B signal | ||||
|         		    bool cboc = true; | ||||
|         		    char signal[3]; | ||||
|         		    strcpy(signal, "1B"); | ||||
|                             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]); | ||||
|                             //noise | ||||
|                             if (noise_flag_) | ||||
|                                 { | ||||
|                                     for (unsigned int i = 0; i < vector_length_; i++) | ||||
|                                         { | ||||
|                                             sampled_code_data_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|                                         } | ||||
|                                 } | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             // Generate one code-period of E1B signal | ||||
|                             bool cboc = true; | ||||
|                             char signal[3]; | ||||
|                             strcpy(signal, "1B"); | ||||
|  | ||||
|         		    galileo_e1_code_gen_complex_sampled(code, signal, cboc, PRN_[sat], fs_in_, | ||||
|         		                                        static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|                             galileo_e1_code_gen_complex_sampled(code, signal, cboc, PRN_[sat], fs_in_, | ||||
|                                     static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|  | ||||
|         		    // Obtain the desired CN0 assuming that Pn = 1. | ||||
|         		    if (noise_flag_) | ||||
|         			{ | ||||
|         			    for (unsigned int i = 0; i < samples_per_code_[sat]; i++) | ||||
|         				{ | ||||
|         				    code[i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|         				} | ||||
|         			} | ||||
|                             // Obtain the desired CN0 assuming that Pn = 1. | ||||
|                             if (noise_flag_) | ||||
|                                 { | ||||
|                                     for (unsigned int i = 0; i < samples_per_code_[sat]; i++) | ||||
|                                         { | ||||
|                                             code[i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|                                         } | ||||
|                                 } | ||||
|  | ||||
|         		    // Concatenate "num_of_codes_per_vector_" codes | ||||
|         		    for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|         			{ | ||||
|         			    memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|         			           code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|         			} | ||||
|                             // Concatenate "num_of_codes_per_vector_" codes | ||||
|                             for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                                 { | ||||
|                                     memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|                                             code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                 } | ||||
|  | ||||
|         		    // Generate E1C signal (25 code-periods, with secondary code) | ||||
|         		    sampled_code_pilot_[sat] = static_cast<gr_complex*>(std::malloc(vector_length_ * sizeof(gr_complex))); | ||||
|                             // Generate E1C signal (25 code-periods, with secondary code) | ||||
|                             sampled_code_pilot_[sat] = static_cast<gr_complex*>(std::malloc(vector_length_ * sizeof(gr_complex))); | ||||
|  | ||||
|         		    strcpy(signal, "1C"); | ||||
|                             strcpy(signal, "1C"); | ||||
|  | ||||
|         		    galileo_e1_code_gen_complex_sampled(sampled_code_pilot_[sat], signal, cboc, PRN_[sat], fs_in_, | ||||
|         		                                        static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true); | ||||
|                             galileo_e1_code_gen_complex_sampled(sampled_code_pilot_[sat], signal, cboc, PRN_[sat], fs_in_, | ||||
|                                     static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true); | ||||
|  | ||||
|         		    // Obtain the desired CN0 assuming that Pn = 1. | ||||
|         		    if (noise_flag_) | ||||
|         			{ | ||||
|         			    for (unsigned int i = 0; i < vector_length_; i++) | ||||
|         				{ | ||||
|         				    sampled_code_pilot_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|         				} | ||||
|         			} | ||||
|         		} | ||||
|                             // Obtain the desired CN0 assuming that Pn = 1. | ||||
|                             if (noise_flag_) | ||||
|                                 { | ||||
|                                     for (unsigned int i = 0; i < vector_length_; i++) | ||||
|                                         { | ||||
|                                             sampled_code_pilot_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); | ||||
|                                         } | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
| } | ||||
| @@ -237,7 +236,7 @@ void signal_generator_c::generate_codes() | ||||
|  | ||||
| signal_generator_c::~signal_generator_c() | ||||
| { | ||||
|   /*  for (unsigned int sat = 0; sat < num_sats_; sat++) | ||||
|     /*  for (unsigned int sat = 0; sat < num_sats_; sat++) | ||||
|         { | ||||
|             std::free(sampled_code_data_[sat]); | ||||
|             if (system_[sat] == "E" && signal_[sat].at(0) != '5') | ||||
| @@ -251,9 +250,9 @@ signal_generator_c::~signal_generator_c() | ||||
|  | ||||
|  | ||||
| int signal_generator_c::general_work (int noutput_items __attribute__((unused)), | ||||
|                    gr_vector_int &ninput_items __attribute__((unused)), | ||||
| gr_vector_const_void_star &input_items __attribute__((unused)), | ||||
| gr_vector_void_star &output_items) | ||||
|         gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items __attribute__((unused)), | ||||
|         gr_vector_void_star &output_items) | ||||
| { | ||||
|     gr_complex *out = (gr_complex *) output_items[0]; | ||||
|  | ||||
| @@ -281,102 +280,102 @@ gr_vector_void_star &output_items) | ||||
|             if (system_[sat] == "G") | ||||
|                 { | ||||
|                     unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS)) | ||||
|                                                     * samples_per_code_[sat] / GPS_L1_CA_CODE_LENGTH_CHIPS; | ||||
|                                                             * samples_per_code_[sat] / GPS_L1_CA_CODE_LENGTH_CHIPS; | ||||
|  | ||||
|                     for (i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                         { | ||||
|                             for (k = 0; k < delay_samples; k++) | ||||
|                                 { | ||||
|                                     out[out_idx] += sampled_code_data_[sat][out_idx] | ||||
|                                                     * current_data_bits_[sat] | ||||
|                                                     * complex_phase_[out_idx]; | ||||
|                                                                             * current_data_bits_[sat] | ||||
|                                                                                                  * complex_phase_[out_idx]; | ||||
|                                     out_idx++; | ||||
|                                 } | ||||
|  | ||||
|                             if (ms_counter_[sat] == 0 && data_flag_) | ||||
|                                  { | ||||
|                                      // New random data bit | ||||
|                                      current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); | ||||
|                                  } | ||||
|                                 { | ||||
|                                     // New random data bit | ||||
|                                     current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); | ||||
|                                 } | ||||
|  | ||||
|                             for (k = delay_samples; k < samples_per_code_[sat]; k++) | ||||
|                                 { | ||||
|                                     out[out_idx] += sampled_code_data_[sat][out_idx] | ||||
|                                                     * current_data_bits_[sat] | ||||
|                                                     * complex_phase_[out_idx]; | ||||
|                                                                             * current_data_bits_[sat] | ||||
|                                                                                                  * complex_phase_[out_idx]; | ||||
|                                     out_idx++; | ||||
|                                 } | ||||
|  | ||||
|                             ms_counter_[sat] = (ms_counter_[sat] + static_cast<int>(round(1e3*GPS_L1_CA_CODE_PERIOD))) | ||||
|                                                 % data_bit_duration_ms_[sat]; | ||||
|                                                         % data_bit_duration_ms_[sat]; | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             else if (system_[sat] == "E") | ||||
|                 { | ||||
|         	    if(signal_[sat].at(0)=='5') | ||||
|         		{ | ||||
|         		    // EACH WORK outputs 1 modulated primary code | ||||
|         		    int codelen = static_cast<int>(Galileo_E5a_CODE_LENGTH_CHIPS); | ||||
|         		    unsigned int delay_samples = (delay_chips_[sat] % codelen) | ||||
|         		                	      * samples_per_code_[sat] / codelen; | ||||
| 			    for (k = 0; k < delay_samples; k++) | ||||
| 				{ | ||||
| 				    out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real()*data_modulation_[sat], | ||||
| 				                                sampled_code_data_[sat][out_idx].imag()*pilot_modulation_[sat]) ) | ||||
| 					    * complex_phase_[out_idx]; | ||||
| 				    out_idx++; | ||||
| 				} | ||||
|                     if(signal_[sat].at(0)=='5') | ||||
|                         { | ||||
|                             // EACH WORK outputs 1 modulated primary code | ||||
|                             int codelen = static_cast<int>(Galileo_E5a_CODE_LENGTH_CHIPS); | ||||
|                             unsigned int delay_samples = (delay_chips_[sat] % codelen) | ||||
|                                                   * samples_per_code_[sat] / codelen; | ||||
|                             for (k = 0; k < delay_samples; k++) | ||||
|                                 { | ||||
|                                     out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real()*data_modulation_[sat], | ||||
|                                             sampled_code_data_[sat][out_idx].imag()*pilot_modulation_[sat]) ) | ||||
|                                             * complex_phase_[out_idx]; | ||||
|                                     out_idx++; | ||||
|                                 } | ||||
|  | ||||
| 			    if (ms_counter_[sat]%data_bit_duration_ms_[sat] == 0 && data_flag_) | ||||
| 				{ | ||||
| 				    // New random data bit | ||||
| 				    current_data_bit_int_[sat] = (rand()%2) == 0 ? 1 : -1; | ||||
| 				} | ||||
|         		    data_modulation_[sat] = current_data_bit_int_[sat] * (Galileo_E5a_I_SECONDARY_CODE.at((ms_counter_[sat]+delay_sec_[sat]) % 20) == '0' ? 1 : -1); | ||||
|         		    pilot_modulation_[sat] = (Galileo_E5a_Q_SECONDARY_CODE[PRN_[sat] - 1].at((ms_counter_[sat] + delay_sec_[sat]) % 100) == '0' ? 1 : -1); | ||||
|                             if (ms_counter_[sat]%data_bit_duration_ms_[sat] == 0 && data_flag_) | ||||
|                                 { | ||||
|                                     // New random data bit | ||||
|                                     current_data_bit_int_[sat] = (rand()%2) == 0 ? 1 : -1; | ||||
|                                 } | ||||
|                             data_modulation_[sat] = current_data_bit_int_[sat] * (Galileo_E5a_I_SECONDARY_CODE.at((ms_counter_[sat]+delay_sec_[sat]) % 20) == '0' ? 1 : -1); | ||||
|                             pilot_modulation_[sat] = (Galileo_E5a_Q_SECONDARY_CODE[PRN_[sat] - 1].at((ms_counter_[sat] + delay_sec_[sat]) % 100) == '0' ? 1 : -1); | ||||
|  | ||||
|         		    ms_counter_[sat] = ms_counter_[sat] + static_cast<int>(round(1e3*GALILEO_E5a_CODE_PERIOD)); | ||||
|                             ms_counter_[sat] = ms_counter_[sat] + static_cast<int>(round(1e3*GALILEO_E5a_CODE_PERIOD)); | ||||
|  | ||||
| 			    for (k = delay_samples; k < samples_per_code_[sat]; k++) | ||||
| 				{ | ||||
| 				    out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real() * data_modulation_[sat] , | ||||
| 				                                sampled_code_data_[sat][out_idx].imag() * pilot_modulation_[sat]) ) | ||||
| 					             * complex_phase_[out_idx]; | ||||
| 				    out_idx++; | ||||
| 				} | ||||
|         		} | ||||
|         	    else | ||||
|         		{ | ||||
|         		    unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS)) | ||||
|         		                	      * samples_per_code_[sat] / Galileo_E1_B_CODE_LENGTH_CHIPS; | ||||
|                             for (k = delay_samples; k < samples_per_code_[sat]; k++) | ||||
|                                 { | ||||
|                                     out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real() * data_modulation_[sat] , | ||||
|                                             sampled_code_data_[sat][out_idx].imag() * pilot_modulation_[sat]) ) | ||||
|                                             * complex_phase_[out_idx]; | ||||
|                                     out_idx++; | ||||
|                                 } | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(Galileo_E1_B_CODE_LENGTH_CHIPS)) | ||||
|                                                   * samples_per_code_[sat] / Galileo_E1_B_CODE_LENGTH_CHIPS; | ||||
|  | ||||
|         		    for (i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|         			{ | ||||
|         			    for (k = 0; k < delay_samples; k++) | ||||
|         				{ | ||||
|         				    out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] | ||||
|         				                    - sampled_code_pilot_[sat][out_idx]) * complex_phase_[out_idx]; | ||||
|         				    out_idx++; | ||||
|         				} | ||||
|                             for (i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                                 { | ||||
|                                     for (k = 0; k < delay_samples; k++) | ||||
|                                         { | ||||
|                                             out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] | ||||
|                                                                                                                    - sampled_code_pilot_[sat][out_idx]) * complex_phase_[out_idx]; | ||||
|                                             out_idx++; | ||||
|                                         } | ||||
|  | ||||
|         			    if (ms_counter_[sat] == 0 && data_flag_) | ||||
|         				{ | ||||
|         				    // New random data bit | ||||
|         				    current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); | ||||
|         				} | ||||
|                                     if (ms_counter_[sat] == 0 && data_flag_) | ||||
|                                         { | ||||
|                                             // New random data bit | ||||
|                                             current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); | ||||
|                                         } | ||||
|  | ||||
|         			    for (k = delay_samples; k < samples_per_code_[sat]; k++) | ||||
|         				{ | ||||
|         				    out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] | ||||
|         				                    - sampled_code_pilot_[sat][out_idx]) | ||||
|         				                    * complex_phase_[out_idx]; | ||||
|         				    out_idx++; | ||||
|         				} | ||||
|                                     for (k = delay_samples; k < samples_per_code_[sat]; k++) | ||||
|                                         { | ||||
|                                             out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] | ||||
|                                                                                                                    - sampled_code_pilot_[sat][out_idx]) | ||||
|                                                                                                                    * complex_phase_[out_idx]; | ||||
|                                             out_idx++; | ||||
|                                         } | ||||
|  | ||||
|         			    ms_counter_[sat] = (ms_counter_[sat] + static_cast<int>(round(1e3 * Galileo_E1_CODE_PERIOD))) % data_bit_duration_ms_[sat]; | ||||
|         			} | ||||
|         		} | ||||
|                                     ms_counter_[sat] = (ms_counter_[sat] + static_cast<int>(round(1e3 * Galileo_E1_CODE_PERIOD))) % data_bit_duration_ms_[sat]; | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -124,7 +124,7 @@ private: | ||||
|     unsigned int work_counter_; | ||||
|  | ||||
| public: | ||||
|     ~signal_generator_c ();	// public destructor | ||||
|     ~signal_generator_c();    // public destructor | ||||
|  | ||||
|     // Where all the action really happens | ||||
|  | ||||
|   | ||||
| @@ -46,13 +46,13 @@ using google::LogMessage; | ||||
|  | ||||
|  | ||||
| DEFINE_string(signal_source, "-", | ||||
| 		"If defined, path to the file containing the signal samples (overrides the configuration file)"); | ||||
|         "If defined, path to the file containing the signal samples (overrides the configuration file)"); | ||||
|  | ||||
|  | ||||
| FileSignalSource::FileSignalSource(ConfigurationInterface* configuration, | ||||
|         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_(queue) | ||||
|                         role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) | ||||
| { | ||||
|     std::string default_filename = "./example_capture.dat"; | ||||
|     std::string default_item_type = "short"; | ||||
| @@ -99,11 +99,11 @@ FileSignalSource::FileSignalSource(ConfigurationInterface* configuration, | ||||
|         } | ||||
|     else if (item_type_.compare("byte") == 0) | ||||
|         { | ||||
|     		item_size_ = sizeof(int8_t); | ||||
|             item_size_ = sizeof(int8_t); | ||||
|         } | ||||
|     else if (item_type_.compare("ibyte") == 0) | ||||
|         { | ||||
|     		item_size_ = sizeof(int8_t); | ||||
|             item_size_ = sizeof(int8_t); | ||||
|             is_complex = true; | ||||
|         } | ||||
|     else | ||||
|   | ||||
| @@ -47,7 +47,7 @@ class ConfigurationInterface; | ||||
| class Gn3sSignalSource: public GNSSBlockInterface | ||||
| { | ||||
| public: | ||||
| 	Gn3sSignalSource(ConfigurationInterface* configuration, | ||||
|     Gn3sSignalSource(ConfigurationInterface* configuration, | ||||
|             std::string role, unsigned int in_stream, | ||||
|             unsigned int out_stream, gr::msg_queue::sptr queue); | ||||
|  | ||||
|   | ||||
| @@ -45,13 +45,13 @@ | ||||
| using google::LogMessage; | ||||
|  | ||||
| DEFINE_string(nsr_signal_source, "-", | ||||
| 		"If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
|         "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
|  | ||||
|  | ||||
| NsrFileSignalSource::NsrFileSignalSource(ConfigurationInterface* configuration, | ||||
|         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_(queue) | ||||
|                         role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) | ||||
| { | ||||
|     std::string default_filename = "../data/my_capture.dat"; | ||||
|     std::string default_item_type = "byte"; | ||||
|   | ||||
| @@ -50,7 +50,7 @@ class ConfigurationInterface; | ||||
| class OsmosdrSignalSource: public GNSSBlockInterface | ||||
| { | ||||
| public: | ||||
| 	OsmosdrSignalSource(ConfigurationInterface* configuration, | ||||
|     OsmosdrSignalSource(ConfigurationInterface* configuration, | ||||
|             std::string role, unsigned int in_stream, | ||||
|             unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); | ||||
|  | ||||
|   | ||||
| @@ -50,7 +50,7 @@ RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration | ||||
|     //dump_ = configuration->property(role + ".dump", false); | ||||
|     //dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); | ||||
|  | ||||
|     dump_=false; | ||||
|     dump_ = false; | ||||
|  | ||||
|     std::string default_ethernet_dev = "eth0"; | ||||
|     eth_device_ = configuration->property(role + ".ethernet_dev", default_ethernet_dev); | ||||
| @@ -88,7 +88,7 @@ RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration | ||||
|         } | ||||
|     if (dump_) | ||||
|         { | ||||
|     	//TODO: multichannel recorder | ||||
|             //TODO: multichannel recorder | ||||
|             DLOG(INFO) << "Dumping output into file " << dump_filename_; | ||||
|             file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); | ||||
|         } | ||||
| @@ -109,7 +109,7 @@ void RawArraySignalSource::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (dump_) | ||||
|         { | ||||
|     	//TODO: multichannel recorder | ||||
|             //TODO: multichannel recorder | ||||
|             top_block->connect(raw_array_source_, 0, file_sink_, 0); | ||||
|             DLOG(INFO) << "connected raw_array_source_ to file sink"; | ||||
|         } | ||||
| @@ -125,7 +125,7 @@ void RawArraySignalSource::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (dump_) | ||||
|         { | ||||
|     	//TODO: multichannel recorder | ||||
|             //TODO: multichannel recorder | ||||
|             top_block->disconnect(raw_array_source_, 0, file_sink_, 0); | ||||
|         } | ||||
| } | ||||
|   | ||||
| @@ -47,7 +47,7 @@ class ConfigurationInterface; | ||||
| class RawArraySignalSource: public GNSSBlockInterface | ||||
| { | ||||
| public: | ||||
| 	RawArraySignalSource(ConfigurationInterface* configuration, | ||||
|     RawArraySignalSource(ConfigurationInterface* configuration, | ||||
|             std::string role, unsigned int in_stream, | ||||
|             unsigned int out_stream, gr::msg_queue::sptr queue); | ||||
|  | ||||
|   | ||||
| @@ -80,13 +80,13 @@ RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface* configuration, | ||||
|             // 1. Make the gr block | ||||
|             try | ||||
|             { | ||||
| 	       std::cout << "Connecting to " << address_ << ":" << port_ << std::endl; | ||||
| 	       LOG (INFO) << "Connecting to " << address_ << ":" << port_; | ||||
| 	       signal_source_ = rtl_tcp_make_signal_source_c (address_, port_, flip_iq_); | ||||
|                     std::cout << "Connecting to " << address_ << ":" << port_ << std::endl; | ||||
|                     LOG (INFO) << "Connecting to " << address_ << ":" << port_; | ||||
|                     signal_source_ = rtl_tcp_make_signal_source_c (address_, port_, flip_iq_); | ||||
|             } | ||||
|             catch( boost::exception & e ) | ||||
|             { | ||||
| 	       DLOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); | ||||
|                     DLOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); | ||||
|             } | ||||
|  | ||||
|             // 2 set sampling rate | ||||
| @@ -99,25 +99,25 @@ RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface* configuration, | ||||
|             signal_source_->set_agc_mode(true); | ||||
|  | ||||
|             if (this->AGC_enabled_ == true) | ||||
|             { | ||||
|                 std::cout << "AGC enabled" << std::endl; | ||||
|                 LOG(INFO) << "AGC enabled"; | ||||
|                 signal_source_->set_agc_mode(true); | ||||
|             } | ||||
|                 { | ||||
|                     std::cout << "AGC enabled" << std::endl; | ||||
|                     LOG(INFO) << "AGC enabled"; | ||||
|                     signal_source_->set_agc_mode(true); | ||||
|                 } | ||||
|             else | ||||
|             { | ||||
|                 std::cout << "AGC disabled" << std::endl; | ||||
|                 LOG(INFO) << "AGC disabled"; | ||||
|                 signal_source_->set_agc_mode(false); | ||||
|                 { | ||||
|                     std::cout << "AGC disabled" << std::endl; | ||||
|                     LOG(INFO) << "AGC disabled"; | ||||
|                     signal_source_->set_agc_mode(false); | ||||
|  | ||||
|                 std::cout << "Setting gain to " << gain_ << std::endl; | ||||
|                 LOG(INFO) << "Setting gain to " << gain_; | ||||
|                 signal_source_->set_gain(gain_); | ||||
|                     std::cout << "Setting gain to " << gain_ << std::endl; | ||||
|                     LOG(INFO) << "Setting gain to " << gain_; | ||||
|                     signal_source_->set_gain(gain_); | ||||
|  | ||||
|                 std::cout << "Setting IF gain to " << if_gain_ << std::endl; | ||||
|                 LOG(INFO) << "Setting IF gain to " << if_gain_; | ||||
|                 signal_source_->set_if_gain(if_gain_); | ||||
|             } | ||||
|                     std::cout << "Setting IF gain to " << if_gain_ << std::endl; | ||||
|                     LOG(INFO) << "Setting IF gain to " << if_gain_; | ||||
|                     signal_source_->set_if_gain(if_gain_); | ||||
|                 } | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -145,43 +145,58 @@ RtlTcpSignalSource::~RtlTcpSignalSource() | ||||
| {} | ||||
|  | ||||
|  | ||||
| void RtlTcpSignalSource::connect(gr::top_block_sptr top_block) { | ||||
|    if ( samples_ ) { | ||||
|       top_block->connect (signal_source_, 0, valve_, 0); | ||||
|       DLOG(INFO) << "connected rtl tcp source to valve"; | ||||
|       if ( dump_ ) { | ||||
| 	 top_block->connect(valve_, 0, file_sink_, 0); | ||||
| 	 DLOG(INFO) << "connected valve to file sink"; | ||||
|       } | ||||
|    } | ||||
|    else if ( dump_ ) { | ||||
| 	 top_block->connect(signal_source_, 0, file_sink_, 0); | ||||
| 	 DLOG(INFO) << "connected rtl tcp source to file sink"; | ||||
|    } | ||||
| void RtlTcpSignalSource::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if ( samples_ ) | ||||
|         { | ||||
|             top_block->connect (signal_source_, 0, valve_, 0); | ||||
|             DLOG(INFO) << "connected rtl tcp source to valve"; | ||||
|             if ( dump_ ) | ||||
|                 { | ||||
|                     top_block->connect(valve_, 0, file_sink_, 0); | ||||
|                     DLOG(INFO) << "connected valve to file sink"; | ||||
|                 } | ||||
|         } | ||||
|     else if ( dump_ ) | ||||
|         { | ||||
|             top_block->connect(signal_source_, 0, file_sink_, 0); | ||||
|             DLOG(INFO) << "connected rtl tcp source to file sink"; | ||||
|         } | ||||
| } | ||||
|  | ||||
| void RtlTcpSignalSource::disconnect(gr::top_block_sptr top_block) { | ||||
|    if ( samples_ ) { | ||||
|       top_block->disconnect (signal_source_, 0, valve_, 0); | ||||
|       if ( dump_ ) { | ||||
| 	 top_block->disconnect(valve_, 0, file_sink_, 0); | ||||
|       } | ||||
|    } | ||||
|    else if ( dump_ ) { | ||||
| 	 top_block->disconnect(signal_source_, 0, file_sink_, 0); | ||||
|    } | ||||
|  | ||||
| void RtlTcpSignalSource::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if ( samples_ ) | ||||
|         { | ||||
|             top_block->disconnect (signal_source_, 0, valve_, 0); | ||||
|             if ( dump_ ) | ||||
|                 { | ||||
|                     top_block->disconnect(valve_, 0, file_sink_, 0); | ||||
|                 } | ||||
|         } | ||||
|     else if ( dump_ ) | ||||
|         { | ||||
|             top_block->disconnect(signal_source_, 0, file_sink_, 0); | ||||
|         } | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr RtlTcpSignalSource::get_left_block() { | ||||
|  | ||||
| gr::basic_block_sptr RtlTcpSignalSource::get_left_block() | ||||
| { | ||||
|     LOG(WARNING) << "Trying to get signal source left block."; | ||||
|     return gr::basic_block_sptr(); | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr RtlTcpSignalSource::get_right_block() { | ||||
|    if (samples_ != 0) { | ||||
|       return valve_; | ||||
|    } | ||||
|    else { | ||||
|      return signal_source_; | ||||
|    } | ||||
|  | ||||
| gr::basic_block_sptr RtlTcpSignalSource::get_right_block() | ||||
| { | ||||
|     if (samples_ != 0) | ||||
|         { | ||||
|             return valve_; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             return signal_source_; | ||||
|         } | ||||
| } | ||||
|   | ||||
| @@ -51,7 +51,7 @@ class ConfigurationInterface; | ||||
| class RtlTcpSignalSource: public GNSSBlockInterface | ||||
| { | ||||
| public: | ||||
| 	RtlTcpSignalSource(ConfigurationInterface* configuration, | ||||
|     RtlTcpSignalSource(ConfigurationInterface* configuration, | ||||
|             std::string role, unsigned int in_stream, | ||||
|             unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); | ||||
|  | ||||
|   | ||||
| @@ -50,7 +50,7 @@ DEFINE_string(spir_signal_source, "-", | ||||
| SpirFileSignalSource::SpirFileSignalSource(ConfigurationInterface* configuration, | ||||
|         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_(queue) | ||||
|     role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) | ||||
| { | ||||
|     std::string default_filename = "../data/my_capture.dat"; | ||||
|     std::string default_item_type = "int"; | ||||
|   | ||||
| @@ -44,13 +44,13 @@ | ||||
| using google::LogMessage; | ||||
|  | ||||
| //DEFINE_string(two_bit_cpx_signal_source, "-", | ||||
| //		"If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
| //        "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
|  | ||||
|  | ||||
| TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* configuration, | ||||
|         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_(queue) | ||||
|                         role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) | ||||
| { | ||||
|     std::string default_filename = "../data/my_capture.dat"; | ||||
|     std::string default_item_type = "byte"; | ||||
| @@ -104,7 +104,7 @@ TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* con | ||||
|             << std::endl; | ||||
|  | ||||
|             LOG(WARNING) << "file_signal_source: Unable to open the samples file " | ||||
|                          << filename_.c_str() << ", exiting the program."; | ||||
|                     << filename_.c_str() << ", exiting the program."; | ||||
|             throw(e); | ||||
|     } | ||||
|  | ||||
| @@ -172,14 +172,10 @@ TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* con | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| TwoBitCpxFileSignalSource::~TwoBitCpxFileSignalSource() | ||||
| {} | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| void TwoBitCpxFileSignalSource::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     if (samples_ > 0) | ||||
| @@ -302,9 +298,6 @@ void TwoBitCpxFileSignalSource::disconnect(gr::top_block_sptr top_block) | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| gr::basic_block_sptr TwoBitCpxFileSignalSource::get_left_block() | ||||
| { | ||||
|     LOG(WARNING) << "Left block of a signal source should not be retrieved"; | ||||
| @@ -313,9 +306,6 @@ gr::basic_block_sptr TwoBitCpxFileSignalSource::get_left_block() | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| gr::basic_block_sptr TwoBitCpxFileSignalSource::get_right_block() | ||||
| { | ||||
|     if (samples_ > 0) | ||||
|   | ||||
| @@ -46,13 +46,13 @@ | ||||
| using google::LogMessage; | ||||
|  | ||||
| //DEFINE_string(two_bit_packed_signal_source, "-", | ||||
| //		"If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
| //        "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); | ||||
|  | ||||
|  | ||||
| TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource(ConfigurationInterface* configuration, | ||||
|         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_(queue) | ||||
|                         role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) | ||||
| { | ||||
|     std::string default_filename = "../data/my_capture.dat"; | ||||
|     std::string default_item_type = "byte"; | ||||
| @@ -101,7 +101,6 @@ TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource(ConfigurationInterfac | ||||
|             item_size_ = sizeof(char); | ||||
|         } | ||||
|  | ||||
|  | ||||
|     if( sample_type_.compare("real") == 0 ) | ||||
|     { | ||||
|         is_complex_ = false; | ||||
| @@ -236,14 +235,10 @@ TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource(ConfigurationInterfac | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| TwoBitPackedFileSignalSource::~TwoBitPackedFileSignalSource() | ||||
| {} | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| void TwoBitPackedFileSignalSource::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     gr::basic_block_sptr left_block = file_source_; | ||||
| @@ -276,10 +271,6 @@ void TwoBitPackedFileSignalSource::connect(gr::top_block_sptr top_block) | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| void TwoBitPackedFileSignalSource::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
|     gr::basic_block_sptr left_block = file_source_; | ||||
| @@ -321,9 +312,6 @@ gr::basic_block_sptr TwoBitPackedFileSignalSource::get_left_block() | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| gr::basic_block_sptr TwoBitPackedFileSignalSource::get_right_block() | ||||
| { | ||||
|     return valve_; | ||||
|   | ||||
| @@ -44,278 +44,318 @@ using boost::asio::ip::tcp; | ||||
| // Buffer constants | ||||
| // TODO: Make these configurable | ||||
| enum { | ||||
|   RTL_TCP_BUFFER_SIZE = 1024 * 16, // 16 KB | ||||
|   RTL_TCP_PAYLOAD_SIZE = 1024 * 4  //  4 KB | ||||
|     RTL_TCP_BUFFER_SIZE = 1024 * 16, // 16 KB | ||||
|     RTL_TCP_PAYLOAD_SIZE = 1024 * 4  //  4 KB | ||||
| }; | ||||
|  | ||||
| rtl_tcp_signal_source_c_sptr | ||||
| rtl_tcp_make_signal_source_c(const std::string &address, | ||||
|                              short port, | ||||
|                              bool flip_iq) | ||||
|         short port, | ||||
|         bool flip_iq) | ||||
| { | ||||
|     return gnuradio::get_initial_sptr (new rtl_tcp_signal_source_c (address, | ||||
|                                                                     port, | ||||
|                                                                     flip_iq)); | ||||
|             port, | ||||
|             flip_iq)); | ||||
| } | ||||
|  | ||||
|  | ||||
| rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string &address, | ||||
|                                                  short port, | ||||
|                                                  bool flip_iq) | ||||
|    : gr::sync_block ("rtl_tcp_signal_source_c", | ||||
|                    gr::io_signature::make(0, 0, 0), | ||||
|                    gr::io_signature::make(1, 1, sizeof(gr_complex))), | ||||
|      socket_ (io_service_), | ||||
|      data_ (RTL_TCP_PAYLOAD_SIZE), | ||||
|      flip_iq_(flip_iq), | ||||
|      buffer_ (RTL_TCP_BUFFER_SIZE), | ||||
|      unread_ (0) | ||||
|         short port, | ||||
|         bool flip_iq) | ||||
| : gr::sync_block ("rtl_tcp_signal_source_c", | ||||
|         gr::io_signature::make(0, 0, 0), | ||||
|         gr::io_signature::make(1, 1, sizeof(gr_complex))), | ||||
|         socket_ (io_service_), | ||||
|         data_ (RTL_TCP_PAYLOAD_SIZE), | ||||
|         flip_iq_(flip_iq), | ||||
|         buffer_ (RTL_TCP_BUFFER_SIZE), | ||||
|         unread_ (0) | ||||
| { | ||||
|    boost::system::error_code ec; | ||||
|     boost::system::error_code ec; | ||||
|  | ||||
|    // 1. Setup lookup table | ||||
|    for (unsigned i = 0; i < 0xff; i++) { | ||||
|        lookup_[i] = ((float)(i & 0xff) - 127.4f) * (1.0f / 128.0f); | ||||
|    } | ||||
|     // 1. Setup lookup table | ||||
|     for (unsigned i = 0; i < 0xff; i++) | ||||
|         { | ||||
|             lookup_[i] = ((float)(i & 0xff) - 127.4f) * (1.0f / 128.0f); | ||||
|         } | ||||
|  | ||||
|    // 2. Set socket options | ||||
|    ip::address addr = ip::address::from_string (address, ec); | ||||
|    if (ec) { | ||||
|       std::cout << address << " is not an IP address" << std::endl; | ||||
|       LOG (ERROR) << address << " is not an IP address"; | ||||
|       return; | ||||
|    } | ||||
|    ip::tcp::endpoint ep (addr, port); | ||||
|    socket_.open (ep.protocol( ), ec); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to open socket." << std::endl; | ||||
|        LOG (ERROR)  << "Failed to open socket."; | ||||
|    } | ||||
|     // 2. Set socket options | ||||
|     ip::address addr = ip::address::from_string (address, ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << address << " is not an IP address" << std::endl; | ||||
|             LOG (ERROR) << address << " is not an IP address"; | ||||
|             return; | ||||
|         } | ||||
|     ip::tcp::endpoint ep (addr, port); | ||||
|     socket_.open (ep.protocol( ), ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to open socket." << std::endl; | ||||
|             LOG (ERROR)  << "Failed to open socket."; | ||||
|         } | ||||
|  | ||||
|    socket_.set_option (boost::asio::socket_base::reuse_address (true), ec); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to set reuse address option: " << ec << std::endl; | ||||
|        LOG (WARNING)  << "Failed to set reuse address option"; | ||||
|    } | ||||
|    socket_.set_option (boost::asio::socket_base::linger (true, 0), ec); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to set linger option: " << ec << std::endl; | ||||
|        LOG (WARNING)  << "Failed to set linger option"; | ||||
|    } | ||||
|     socket_.set_option (boost::asio::socket_base::reuse_address (true), ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set reuse address option: " << ec << std::endl; | ||||
|             LOG (WARNING)  << "Failed to set reuse address option"; | ||||
|         } | ||||
|     socket_.set_option (boost::asio::socket_base::linger (true, 0), ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set linger option: " << ec << std::endl; | ||||
|             LOG (WARNING)  << "Failed to set linger option"; | ||||
|         } | ||||
|  | ||||
|    // 3. Connect socket | ||||
|     // 3. Connect socket | ||||
|  | ||||
|    socket_.connect(ep, ec); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to connect to " << addr << ":" << port | ||||
|                  << "(" << ec << ")" << std::endl; | ||||
|        LOG (ERROR)  << "Failed to connect to " << addr << ":" << port | ||||
|                       << "(" << ec << ")"; | ||||
|        return; | ||||
|    } | ||||
|    std::cout << "Connected to " << addr << ":" << port << std::endl; | ||||
|    LOG (INFO)  << "Connected to " << addr << ":" << port; | ||||
|     socket_.connect(ep, ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to connect to " << addr << ":" << port | ||||
|                     << "(" << ec << ")" << std::endl; | ||||
|             LOG (ERROR)  << "Failed to connect to " << addr << ":" << port | ||||
|                     << "(" << ec << ")"; | ||||
|             return; | ||||
|         } | ||||
|     std::cout << "Connected to " << addr << ":" << port << std::endl; | ||||
|     LOG (INFO)  << "Connected to " << addr << ":" << port; | ||||
|  | ||||
|    // 4. Set nodelay | ||||
|    socket_.set_option (tcp::no_delay (true), ec); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to set no delay option." << std::endl; | ||||
|        LOG (WARNING)  << "Failed to set no delay option"; | ||||
|    } | ||||
|     // 4. Set nodelay | ||||
|     socket_.set_option (tcp::no_delay (true), ec); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set no delay option." << std::endl; | ||||
|             LOG (WARNING)  << "Failed to set no delay option"; | ||||
|         } | ||||
|  | ||||
|    // 5. Receive dongle info | ||||
|    ec = info_.read (socket_); | ||||
|    if (ec) { | ||||
|        std::cout << "Failed to read dongle info." << std::endl; | ||||
|        LOG (WARNING)  << "Failed to read dongle info"; | ||||
|    } | ||||
|    else if (info_.is_valid ()) { | ||||
|        std::cout << "Found " << info_.get_type_name() << " tuner."  << std::endl; | ||||
|        LOG (INFO)  << "Found " << info_.get_type_name() << " tuner."; | ||||
|    } | ||||
|     // 5. Receive dongle info | ||||
|     ec = info_.read (socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to read dongle info." << std::endl; | ||||
|             LOG (WARNING)  << "Failed to read dongle info"; | ||||
|         } | ||||
|     else if (info_.is_valid ()) | ||||
|         { | ||||
|             std::cout << "Found " << info_.get_type_name() << " tuner."  << std::endl; | ||||
|             LOG (INFO)  << "Found " << info_.get_type_name() << " tuner."; | ||||
|         } | ||||
|  | ||||
|    // 6. Start reading | ||||
|    boost::asio::async_read (socket_, boost::asio::buffer (data_), | ||||
| 			    boost::bind (&rtl_tcp_signal_source_c::handle_read, | ||||
| 					 this, _1, _2)); | ||||
|    boost::thread (boost::bind (&boost::asio::io_service::run, &io_service_)); | ||||
|     // 6. Start reading | ||||
|     boost::asio::async_read (socket_, boost::asio::buffer (data_), | ||||
|             boost::bind (&rtl_tcp_signal_source_c::handle_read, | ||||
|                     this, _1, _2)); | ||||
|     boost::thread (boost::bind (&boost::asio::io_service::run, &io_service_)); | ||||
| } | ||||
|  | ||||
|  | ||||
| rtl_tcp_signal_source_c::~rtl_tcp_signal_source_c() | ||||
| { | ||||
|    io_service_.stop (); | ||||
| } | ||||
|  | ||||
|  | ||||
| int rtl_tcp_signal_source_c::work (int noutput_items, | ||||
|                                    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) | ||||
| { | ||||
|   gr_complex *out = reinterpret_cast <gr_complex *>( output_items[0] ); | ||||
|   int i = 0; | ||||
|   if (io_service_.stopped ()) { | ||||
|       return -1; | ||||
|   } | ||||
|     gr_complex *out = reinterpret_cast <gr_complex *>( output_items[0] ); | ||||
|     int i = 0; | ||||
|     if (io_service_.stopped ()) | ||||
|         { | ||||
|             return -1; | ||||
|         } | ||||
|  | ||||
|   { | ||||
|     boost::mutex::scoped_lock lock (mutex_); | ||||
|     not_empty_.wait (lock, boost::bind (&rtl_tcp_signal_source_c::not_empty, | ||||
|                                         this)); | ||||
|     { | ||||
|         boost::mutex::scoped_lock lock (mutex_); | ||||
|         not_empty_.wait (lock, boost::bind (&rtl_tcp_signal_source_c::not_empty, | ||||
|                 this)); | ||||
|  | ||||
|     for ( ; i < noutput_items && unread_ > 1; i++ ) { | ||||
|       float re = buffer_[--unread_]; | ||||
|       float im = buffer_[--unread_]; | ||||
|       if (flip_iq_) { | ||||
|           out[i] = gr_complex (im, re); | ||||
|       } | ||||
|       else { | ||||
|           out[i] = gr_complex (re, im); | ||||
|       } | ||||
|         for ( ; i < noutput_items && unread_ > 1; i++ ) | ||||
|             { | ||||
|                 float re = buffer_[--unread_]; | ||||
|                 float im = buffer_[--unread_]; | ||||
|                 if (flip_iq_) | ||||
|                     { | ||||
|                         out[i] = gr_complex (im, re); | ||||
|                     } | ||||
|                 else | ||||
|                     { | ||||
|                         out[i] = gr_complex (re, im); | ||||
|                     } | ||||
|             } | ||||
|     } | ||||
|   } | ||||
|   not_full_.notify_one (); | ||||
|   return i == 0 ? -1 : i; | ||||
|     not_full_.notify_one (); | ||||
|     return i == 0 ? -1 : i; | ||||
| } | ||||
|  | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_frequency (int frequency) { | ||||
|    boost::system::error_code ec = | ||||
|       rtl_tcp_command (RTL_TCP_SET_FREQUENCY, frequency, socket_); | ||||
|    if (ec) { | ||||
|       std::cout << "Failed to set frequency" << std::endl; | ||||
|       LOG (WARNING) << "Failed to set frequency"; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_sample_rate (int sample_rate) { | ||||
|    boost::system::error_code ec = | ||||
|       rtl_tcp_command (RTL_TCP_SET_SAMPLE_RATE, sample_rate, socket_); | ||||
|    if (ec) { | ||||
|       std::cout << "Failed to set sample rate" << std::endl; | ||||
|       LOG (WARNING) << "Failed to set sample rate"; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_agc_mode (bool agc) { | ||||
| void rtl_tcp_signal_source_c::set_frequency (int frequency) | ||||
| { | ||||
|     boost::system::error_code ec = | ||||
|        rtl_tcp_command (RTL_TCP_SET_GAIN_MODE, !agc, socket_); | ||||
|     if (ec) { | ||||
|         std::cout << "Failed to set gain mode" << std::endl; | ||||
|         LOG (WARNING) << "Failed to set gain mode"; | ||||
|     } | ||||
|     ec = | ||||
|        rtl_tcp_command (RTL_TCP_SET_AGC_MODE, agc, socket_); | ||||
|     if (ec) { | ||||
|         std::cout << "Failed to set gain mode" << std::endl; | ||||
|         LOG (WARNING) << "Failed to set gain mode"; | ||||
|     } | ||||
|             rtl_tcp_command (RTL_TCP_SET_FREQUENCY, frequency, socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set frequency" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set frequency"; | ||||
|         } | ||||
| } | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_gain (int gain) { | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_sample_rate (int sample_rate) | ||||
| { | ||||
|     boost::system::error_code ec = | ||||
|             rtl_tcp_command (RTL_TCP_SET_SAMPLE_RATE, sample_rate, socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set sample rate" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set sample rate"; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_agc_mode (bool agc) | ||||
| { | ||||
|     boost::system::error_code ec = | ||||
|             rtl_tcp_command (RTL_TCP_SET_GAIN_MODE, !agc, socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set gain mode" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set gain mode"; | ||||
|         } | ||||
|     ec = rtl_tcp_command (RTL_TCP_SET_AGC_MODE, agc, socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set gain mode" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set gain mode"; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_gain (int gain) | ||||
| { | ||||
|     unsigned clipped = static_cast<unsigned> (info_.clip_gain (gain) * 10.0); | ||||
|     boost::system::error_code ec = | ||||
|        rtl_tcp_command (RTL_TCP_SET_GAIN, clipped, socket_); | ||||
|     if (ec) { | ||||
|         std::cout << "Failed to set gain" << std::endl; | ||||
|         LOG (WARNING) << "Failed to set gain"; | ||||
|     } | ||||
|     boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_GAIN, clipped, socket_); | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Failed to set gain" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set gain"; | ||||
|         } | ||||
| } | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_if_gain (int gain) { | ||||
|  | ||||
| void rtl_tcp_signal_source_c::set_if_gain (int gain) | ||||
| { | ||||
|     // from gr-osmosdr | ||||
|     struct range { | ||||
|        double start, stop, step; | ||||
|         double start, stop, step; | ||||
|     }; | ||||
|     if (info_.get_tuner_type () != rtl_tcp_dongle_info::TUNER_E4000) { | ||||
|         return; | ||||
|     } | ||||
|     if (info_.get_tuner_type () != rtl_tcp_dongle_info::TUNER_E4000) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|     std::vector<range> ranges = { | ||||
|         { -3, 6, 9 }, | ||||
|         { 0, 9, 3 }, | ||||
|         { 0, 9, 3 }, | ||||
|         { 0, 2, 1 }, | ||||
|         { 3, 15, 3}, | ||||
|         { 3, 15, 3} | ||||
|             { -3, 6, 9 }, | ||||
|             { 0, 9, 3 }, | ||||
|             { 0, 9, 3 }, | ||||
|             { 0, 2, 1 }, | ||||
|             { 3, 15, 3}, | ||||
|             { 3, 15, 3} | ||||
|     }; | ||||
|  | ||||
|     std::map <int, double> gains; | ||||
|     for (int i = 0; i < static_cast<int>(ranges.size ()); i++) { | ||||
|         gains[i+1] = ranges[i].start; | ||||
|     } | ||||
|  | ||||
|     for (int i = ranges.size() - 1; i >= 0; i--) { | ||||
|         const range &r = ranges[i]; | ||||
|         double error = gain; | ||||
|  | ||||
|         for (double g = r.start; g < r.stop; g += r.step) { | ||||
|             double sum = 0; | ||||
|             for (int j = 0; j < static_cast<int> ( gains.size() ); j++) { | ||||
|                 if (i == j) { | ||||
|                     sum += g; | ||||
|                 } | ||||
|                 else { | ||||
|                     sum += gains[j + 1]; | ||||
|                 } | ||||
|             } | ||||
|             double err = std::abs (gain - sum); | ||||
|             if (err < error) { | ||||
|                 error = err; | ||||
|                 gains[i+1] = g; | ||||
|             } | ||||
|     for (int i = 0; i < static_cast<int>(ranges.size ()); i++) | ||||
|         { | ||||
|             gains[i+1] = ranges[i].start; | ||||
|         } | ||||
|     } | ||||
|     for (unsigned stage = 1; stage <= gains.size(); stage++) { | ||||
|         int stage_gain = static_cast<int>( gains[stage] * 10 ); | ||||
|         unsigned param = (stage << 16) | (stage_gain & 0xffff); | ||||
|         boost::system::error_code ec = | ||||
|            rtl_tcp_command (RTL_TCP_SET_IF_GAIN, param, socket_); | ||||
|         if (ec) { | ||||
|             std::cout << "Failed to set if gain" << std::endl; | ||||
|             LOG (WARNING) << "Failed to set if gain"; | ||||
|  | ||||
|     for (int i = ranges.size() - 1; i >= 0; i--) | ||||
|         { | ||||
|             const range &r = ranges[i]; | ||||
|             double error = gain; | ||||
|  | ||||
|             for (double g = r.start; g < r.stop; g += r.step) | ||||
|                 { | ||||
|                     double sum = 0; | ||||
|                     for (int j = 0; j < static_cast<int> ( gains.size() ); j++) | ||||
|                         { | ||||
|                             if (i == j) | ||||
|                                 { | ||||
|                                     sum += g; | ||||
|                                 } | ||||
|                             else | ||||
|                                 { | ||||
|                                     sum += gains[j + 1]; | ||||
|                                 } | ||||
|                         } | ||||
|                     double err = std::abs (gain - sum); | ||||
|                     if (err < error) | ||||
|                         { | ||||
|                             error = err; | ||||
|                             gains[i+1] = g; | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
|     for (unsigned stage = 1; stage <= gains.size(); stage++) | ||||
|         { | ||||
|             int stage_gain = static_cast<int>( gains[stage] * 10 ); | ||||
|             unsigned param = (stage << 16) | (stage_gain & 0xffff); | ||||
|             boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_IF_GAIN, param, socket_); | ||||
|             if (ec) | ||||
|                 { | ||||
|                     std::cout << "Failed to set if gain" << std::endl; | ||||
|                     LOG (WARNING) << "Failed to set if gain"; | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| rtl_tcp_signal_source_c::handle_read (const boost::system::error_code &ec, | ||||
|                                        size_t bytes_transferred) | ||||
|  | ||||
|  | ||||
| void rtl_tcp_signal_source_c::handle_read (const boost::system::error_code &ec, | ||||
|         size_t bytes_transferred) | ||||
| { | ||||
|    if (ec) { | ||||
|       std::cout << "Error during read: " << ec << std::endl; | ||||
|       LOG (WARNING) << "Error during read: " << ec; | ||||
|       boost::mutex::scoped_lock lock (mutex_); | ||||
|       io_service_.stop (); | ||||
|       not_empty_.notify_one (); | ||||
|    } | ||||
|    else { | ||||
|      { | ||||
|         // Unpack read data | ||||
|         boost::mutex::scoped_lock lock (mutex_); | ||||
|         not_full_.wait (lock, | ||||
|                         boost::bind (&rtl_tcp_signal_source_c::not_full, | ||||
|                                      this)); | ||||
|  | ||||
|         for (size_t i = 0; i < bytes_transferred; i++) { | ||||
|           while (!not_full( )) { | ||||
|             // uh-oh, buffer overflow | ||||
|             // wait until there's space for more | ||||
|             not_empty_.notify_one (); // needed? | ||||
|             not_full_.wait (lock, | ||||
|                             boost::bind (&rtl_tcp_signal_source_c::not_full, | ||||
|                                          this)); | ||||
|           } | ||||
|  | ||||
|           buffer_.push_front (lookup_[data_[i]]); | ||||
|           unread_++; | ||||
|     if (ec) | ||||
|         { | ||||
|             std::cout << "Error during read: " << ec << std::endl; | ||||
|             LOG (WARNING) << "Error during read: " << ec; | ||||
|             boost::mutex::scoped_lock lock (mutex_); | ||||
|             io_service_.stop (); | ||||
|             not_empty_.notify_one (); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             { | ||||
|                 // Unpack read data | ||||
|                 boost::mutex::scoped_lock lock (mutex_); | ||||
|                 not_full_.wait (lock, | ||||
|                         boost::bind (&rtl_tcp_signal_source_c::not_full, | ||||
|                                 this)); | ||||
|  | ||||
|                 for (size_t i = 0; i < bytes_transferred; i++) | ||||
|                     { | ||||
|                         while (!not_full( )) | ||||
|                             { | ||||
|                                 // uh-oh, buffer overflow | ||||
|                                 // wait until there's space for more | ||||
|                                 not_empty_.notify_one (); // needed? | ||||
|                                 not_full_.wait (lock, | ||||
|                                         boost::bind (&rtl_tcp_signal_source_c::not_full, | ||||
|                                                 this)); | ||||
|                             } | ||||
|  | ||||
|                         buffer_.push_front (lookup_[data_[i]]); | ||||
|                         unread_++; | ||||
|                     } | ||||
|             } | ||||
|             // let woker know that more data is available | ||||
|             not_empty_.notify_one (); | ||||
|             // Read some more | ||||
|             boost::asio::async_read (socket_, | ||||
|                     boost::asio::buffer (data_), | ||||
|                     boost::bind (&rtl_tcp_signal_source_c::handle_read, | ||||
|                             this, _1, _2)); | ||||
|         } | ||||
|       } | ||||
|       // let woker know that more data is available | ||||
|       not_empty_.notify_one (); | ||||
|       // Read some more | ||||
|       boost::asio::async_read (socket_, | ||||
|                                boost::asio::buffer (data_), | ||||
| 			       boost::bind (&rtl_tcp_signal_source_c::handle_read, | ||||
| 					    this, _1, _2)); | ||||
|    } | ||||
| } | ||||
|   | ||||
| @@ -36,7 +36,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H | ||||
| #define	GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H | ||||
| #define    GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H | ||||
|  | ||||
| #include "rtl_tcp_dongle_info.h" | ||||
| #include <boost/asio.hpp> | ||||
| @@ -67,8 +67,8 @@ public: | ||||
|     ~rtl_tcp_signal_source_c(); | ||||
|  | ||||
|     int work (int noutput_items, | ||||
| 	      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); | ||||
|  | ||||
|     void set_frequency (int frequency); | ||||
|     void set_sample_rate (int sample_rate); | ||||
| @@ -80,13 +80,13 @@ private: | ||||
|     typedef boost::circular_buffer_space_optimized<float> buffer_type; | ||||
|  | ||||
|     friend rtl_tcp_signal_source_c_sptr | ||||
|        rtl_tcp_make_signal_source_c(const std::string &address, | ||||
|                                     short port, | ||||
|                                     bool flip_iq); | ||||
|     rtl_tcp_make_signal_source_c(const std::string &address, | ||||
|             short port, | ||||
|             bool flip_iq); | ||||
|  | ||||
|     rtl_tcp_signal_source_c(const std::string &address, | ||||
|                             short port, | ||||
|                             bool flip_iq); | ||||
|             short port, | ||||
|             bool flip_iq); | ||||
|  | ||||
|     rtl_tcp_dongle_info info_; | ||||
|  | ||||
| @@ -108,16 +108,15 @@ private: | ||||
|  | ||||
|     // async read callback | ||||
|     void handle_read (const boost::system::error_code &ec, | ||||
| 		      size_t bytes_transferred); | ||||
|             size_t bytes_transferred); | ||||
|  | ||||
|     inline bool not_full ( ) const { | ||||
|        return unread_ < buffer_.capacity( ); | ||||
|         return unread_ < buffer_.capacity( ); | ||||
|     } | ||||
|  | ||||
|     inline bool not_empty ( ) const { | ||||
|         return unread_ > 0 || io_service_.stopped (); | ||||
|     } | ||||
|  | ||||
| }; | ||||
|  | ||||
| #endif //GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H | ||||
|   | ||||
| @@ -104,7 +104,7 @@ unpack_2bit_samples::unpack_2bit_samples( bool big_endian_bytes, | ||||
|     : sync_interpolator("unpack_2bit_samples", | ||||
|                         gr::io_signature::make(1, 1, item_size), | ||||
|                         gr::io_signature::make(1, 1, sizeof(char)), | ||||
|             	        4*item_size ), // we make 4 bytes out for every byte in | ||||
|                         4*item_size ), // we make 4 bytes out for every byte in | ||||
|       big_endian_bytes_(big_endian_bytes), | ||||
|       item_size_(item_size), | ||||
|       big_endian_items_(big_endian_items), | ||||
|   | ||||
| @@ -38,7 +38,7 @@ | ||||
|  | ||||
| struct byte_2bit_struct | ||||
| { | ||||
|   signed two_bit_sample:2;  // <- 2 bits wide only | ||||
|     signed two_bit_sample:2;  // <- 2 bits wide only | ||||
| }; | ||||
|  | ||||
|  | ||||
| @@ -48,9 +48,9 @@ unpack_byte_2bit_cpx_samples_sptr make_unpack_byte_2bit_cpx_samples() | ||||
| } | ||||
|  | ||||
| unpack_byte_2bit_cpx_samples::unpack_byte_2bit_cpx_samples() : sync_interpolator("unpack_byte_2bit_cpx_samples", | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(signed char)), | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(short)), | ||||
|             	                                                         4) | ||||
|         gr::io_signature::make(1, 1, sizeof(signed char)), | ||||
|         gr::io_signature::make(1, 1, sizeof(short)), | ||||
|         4) | ||||
| {} | ||||
|  | ||||
| unpack_byte_2bit_cpx_samples::~unpack_byte_2bit_cpx_samples() | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
|  | ||||
| struct byte_2bit_struct | ||||
| { | ||||
|   signed two_bit_sample:2;  // <- 2 bits wide only | ||||
|     signed two_bit_sample:2;  // <- 2 bits wide only | ||||
| }; | ||||
|  | ||||
|  | ||||
| @@ -43,18 +43,21 @@ unpack_byte_2bit_samples_sptr make_unpack_byte_2bit_samples() | ||||
|     return unpack_byte_2bit_samples_sptr(new unpack_byte_2bit_samples()); | ||||
| } | ||||
|  | ||||
|  | ||||
| unpack_byte_2bit_samples::unpack_byte_2bit_samples() : sync_interpolator("unpack_byte_2bit_samples", | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(signed char)), | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(float)), | ||||
|             	                                                         4) | ||||
|         gr::io_signature::make(1, 1, sizeof(signed char)), | ||||
|         gr::io_signature::make(1, 1, sizeof(float)), | ||||
|         4) | ||||
| {} | ||||
|  | ||||
|  | ||||
| unpack_byte_2bit_samples::~unpack_byte_2bit_samples() | ||||
| {} | ||||
|  | ||||
|  | ||||
| int unpack_byte_2bit_samples::work(int noutput_items, | ||||
|                                    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) | ||||
| { | ||||
|     const signed char *in = (const signed char *)input_items[0]; | ||||
|     float *out = (float*)output_items[0]; | ||||
|   | ||||
| @@ -39,18 +39,21 @@ unpack_intspir_1bit_samples_sptr make_unpack_intspir_1bit_samples() | ||||
|     return unpack_intspir_1bit_samples_sptr(new unpack_intspir_1bit_samples()); | ||||
| } | ||||
|  | ||||
|  | ||||
| unpack_intspir_1bit_samples::unpack_intspir_1bit_samples() : sync_interpolator("unpack_intspir_1bit_samples", | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(int)), | ||||
|                                                                          gr::io_signature::make(1, 1, sizeof(float)), | ||||
|             	                                                         2) | ||||
|         gr::io_signature::make(1, 1, sizeof(int)), | ||||
|         gr::io_signature::make(1, 1, sizeof(float)), | ||||
|         2) | ||||
| {} | ||||
|  | ||||
|  | ||||
| unpack_intspir_1bit_samples::~unpack_intspir_1bit_samples() | ||||
| {} | ||||
|  | ||||
|  | ||||
| int unpack_intspir_1bit_samples::work(int noutput_items, | ||||
|                                    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) | ||||
| { | ||||
|     const signed int *in = (const signed int *)input_items[0]; | ||||
|     float *out = (float*)output_items[0]; | ||||
| @@ -62,22 +65,22 @@ int unpack_intspir_1bit_samples::work(int noutput_items, | ||||
|             // Read packed input sample (1 byte = 1 complex sample) | ||||
|             // For historical reasons, values are float versions of short int limits (32767) | ||||
|             signed int val = in[i]; | ||||
| 	    if(((val >> ((channel - 1)*2)) & 1) == 1) | ||||
| 	        { | ||||
| 	            out[n++] = static_cast<float>(32767.0); | ||||
| 	        } | ||||
| 	    else | ||||
| 	        { | ||||
| 	            out[n++] = static_cast<float>(-32767.0); | ||||
| 	        } | ||||
| 	    if(((val >> (2*channel - 1)) & 1) == 1) | ||||
| 	        { | ||||
| 	            out[n++] = static_cast<float>(32767.0); | ||||
| 	        } | ||||
| 	    else | ||||
| 	        { | ||||
| 	            out[n++] = static_cast<float>(-32767.0); | ||||
| 	        } | ||||
|             if(((val >> ((channel - 1)*2)) & 1) == 1) | ||||
|                 { | ||||
|                     out[n++] = static_cast<float>(32767.0); | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     out[n++] = static_cast<float>(-32767.0); | ||||
|                 } | ||||
|             if(((val >> (2*channel - 1)) & 1) == 1) | ||||
|                 { | ||||
|                     out[n++] = static_cast<float>(32767.0); | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     out[n++] = static_cast<float>(-32767.0); | ||||
|                 } | ||||
|         } | ||||
|     return noutput_items; | ||||
| } | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  * to a TelemetryDecoderInterface | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *         <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          </ul> | ||||
|  * | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  * to a TelemetryDecoderInterface | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *         <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          </ul> | ||||
|  * | ||||
|   | ||||
| @@ -77,16 +77,16 @@ void SbasL1TelemetryDecoder::set_satellite(Gnss_Satellite satellite) | ||||
|  | ||||
| void SbasL1TelemetryDecoder::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	// Nothing to connect internally | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     // Nothing to connect internally | ||||
|     DLOG(INFO) << "nothing to connect internally"; | ||||
| } | ||||
|  | ||||
|  | ||||
| void SbasL1TelemetryDecoder::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	// Nothing to disconnect | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     // Nothing to disconnect | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -116,8 +116,8 @@ void galileo_e1b_telemetry_decoder_cc::deinterleaver(int rows, int cols, double | ||||
| galileo_e1b_telemetry_decoder_cc::galileo_e1b_telemetry_decoder_cc( | ||||
|         Gnss_Satellite satellite, | ||||
|         bool dump) : | ||||
|            gr::block("galileo_e1b_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), | ||||
| 	   gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|                    gr::block("galileo_e1b_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), | ||||
|                            gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
| { | ||||
|     // Telemetry Bit transition synchronization port out | ||||
|     this->message_port_register_out(pmt::mp("preamble_timestamp_s")); | ||||
| @@ -176,8 +176,6 @@ galileo_e1b_telemetry_decoder_cc::galileo_e1b_telemetry_decoder_cc( | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| galileo_e1b_telemetry_decoder_cc::~galileo_e1b_telemetry_decoder_cc() | ||||
| { | ||||
|     delete d_preambles_symbols; | ||||
| @@ -185,8 +183,6 @@ galileo_e1b_telemetry_decoder_cc::~galileo_e1b_telemetry_decoder_cc() | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols,int frame_length) | ||||
| { | ||||
|     double page_part_symbols_deint[frame_length]; | ||||
| @@ -288,7 +284,7 @@ void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols,int | ||||
|  | ||||
|  | ||||
| int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) | ||||
| { | ||||
|     int corr_value = 0; | ||||
|     int preamble_diff = 0; | ||||
| @@ -303,7 +299,7 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut | ||||
|     //******* preamble correlation ******** | ||||
|     for (int i = 0; i < d_symbols_per_preamble; i++) | ||||
|         { | ||||
|             if (in[0][i].Prompt_I < 0)	// symbols clipping | ||||
|             if (in[0][i].Prompt_I < 0)    // symbols clipping | ||||
|                 { | ||||
|                     corr_value -= d_preambles_symbols[i]; | ||||
|                 } | ||||
| @@ -439,7 +435,6 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut | ||||
|                     //this page has no timing information | ||||
|                     d_TOW_at_Preamble = d_TOW_at_Preamble + GALILEO_INAV_PAGE_SECONDS; | ||||
|                     d_TOW_at_current_symbol = d_TOW_at_current_symbol + GALILEO_E1_CODE_PERIOD;// + GALILEO_INAV_PAGE_PART_SYMBOLS*GALILEO_E1_CODE_PERIOD; | ||||
|  | ||||
|                 } | ||||
|         } | ||||
|     else //if there is not a new preamble, we define the TOW of the current symbol | ||||
| @@ -512,6 +507,7 @@ void galileo_e1b_telemetry_decoder_cc::set_decimation(int decimation) | ||||
|     d_decimation_output_factor = decimation; | ||||
| } | ||||
|  | ||||
|  | ||||
| void galileo_e1b_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite) | ||||
| { | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  * \brief Implementation of a Galileo FNAV message demodulator block | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          </ul> | ||||
|  * | ||||
| @@ -267,18 +267,18 @@ galileo_e5a_telemetry_decoder_cc::~galileo_e5a_telemetry_decoder_cc() | ||||
|  | ||||
|  | ||||
| int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items) | ||||
|         gr_vector_const_void_star &input_items,    gr_vector_void_star &output_items) | ||||
| { | ||||
|     // | ||||
|     const Gnss_Synchro **in = (const Gnss_Synchro **)  &input_items[0]; //Get the input samples pointer | ||||
|     Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; | ||||
|  | ||||
|     /* Terminology: 	Prompt: output from tracking Prompt correlator (Prompt samples) | ||||
|      * 			Symbol: encoded navigation bits. 1 symbol = 20 samples in E5a | ||||
|      * 			Bit: decoded navigation bits forming words as described in Galileo ICD | ||||
|      * States: 	0 Receiving dummy samples. | ||||
|      * 		1 Preamble not locked | ||||
|      * 		3 Preamble lock | ||||
|     /* Terminology:     Prompt: output from tracking Prompt correlator (Prompt samples) | ||||
|      *             Symbol: encoded navigation bits. 1 symbol = 20 samples in E5a | ||||
|      *             Bit: decoded navigation bits forming words as described in Galileo ICD | ||||
|      * States:     0 Receiving dummy samples. | ||||
|      *         1 Preamble not locked | ||||
|      *         3 Preamble lock | ||||
|      */ | ||||
|     switch (d_state) | ||||
|     { | ||||
| @@ -325,7 +325,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut | ||||
|                         { | ||||
|                             d_page_symbols[d_symbol_counter] = -1; | ||||
|                         } | ||||
|                     //			d_page_symbols[d_symbol_counter] = d_current_symbol_float/(float)GALILEO_FNAV_CODES_PER_SYMBOL; | ||||
|                     //            d_page_symbols[d_symbol_counter] = d_current_symbol_float/(float)GALILEO_FNAV_CODES_PER_SYMBOL; | ||||
|                     d_current_symbol = 0; | ||||
|                     d_symbol_counter++; | ||||
|                     d_prompt_counter = 0; | ||||
| @@ -333,7 +333,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut | ||||
|                     bool corr_flag=true; | ||||
|                     int corr_sign = 0; // sequence can be found inverted | ||||
|                     // check if the preamble starts positive correlated or negative correlated | ||||
|                     if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0)	// symbols clipping | ||||
|                     if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0)    // symbols clipping | ||||
|                         { | ||||
|                             corr_sign=-d_preamble_bits[0]; | ||||
|                         } | ||||
| @@ -399,18 +399,18 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut | ||||
|                             // **** Attempt Preamble correlation **** | ||||
|                             bool corr_flag = true; | ||||
|                             int corr_sign = 0; // sequence can be found inverted | ||||
|                             //	corr_sign = d_preamble_bits[0] * d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; | ||||
|                             //	for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) | ||||
|                             //	   { | ||||
|                             //	      if ((d_preamble_bits[i] * d_page_symbols[i + d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]) != corr_sign) | ||||
|                             //	          { | ||||
|                             //	              //exit for if one bit doesn't correlate | ||||
|                             //    corr_sign = d_preamble_bits[0] * d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; | ||||
|                             //    for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) | ||||
|                             //       { | ||||
|                             //          if ((d_preamble_bits[i] * d_page_symbols[i + d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]) != corr_sign) | ||||
|                             //              { | ||||
|                             //                  //exit for if one bit doesn't correlate | ||||
|                             //                corr_flag = false; | ||||
|                             //	              break; | ||||
|                             //	          } | ||||
|                             //                  break; | ||||
|                             //              } | ||||
|                             //     } | ||||
|                             // check if the preamble starts positive correlated or negative correlated | ||||
|                             if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0)	// symbols clipping | ||||
|                             if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0)    // symbols clipping | ||||
|                                 { | ||||
|                                     corr_sign=-d_preamble_bits[0]; | ||||
|                                 } | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  * \brief Implementation of a Galileo FNAV message demodulator block | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          </ul> | ||||
|  * | ||||
|   | ||||
| @@ -143,7 +143,7 @@ bool gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(unsigned int gpsword) | ||||
|  | ||||
|  | ||||
| int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) | ||||
| { | ||||
|     int corr_value = 0; | ||||
|     int preamble_diff_ms = 0; | ||||
| @@ -180,7 +180,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ | ||||
|                     d_GPS_FSM.Event_gps_word_preamble(); | ||||
|                     //record the preamble sample stamp | ||||
|                     d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the preamble sample stamp | ||||
|  					DLOG(INFO)  << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); | ||||
|                     DLOG(INFO)  << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); | ||||
|                     //sync the symbol to bits integrator | ||||
|                     d_symbol_accumulator = 0;                    d_symbol_accumulator_counter = 0; | ||||
|                     d_frame_bit_index = 0; | ||||
| @@ -191,7 +191,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ | ||||
|                     preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0); | ||||
|                     if (abs(preamble_diff_ms - GPS_SUBFRAME_MS) < 1) | ||||
|                         { | ||||
|                         	DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite  << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); | ||||
|                             DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite  << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); | ||||
|                             d_GPS_FSM.Event_gps_word_preamble(); | ||||
|                             d_flag_preamble = true; | ||||
|                             d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs;// - d_preamble_duration_seconds; //record the PRN start sample index associated to the preamble | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H | ||||
| #define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| @@ -130,7 +130,6 @@ private: | ||||
|  | ||||
|     std::string d_dump_filename; | ||||
|     std::ofstream d_dump_file; | ||||
|  | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -110,7 +110,7 @@ void gps_l2_m_telemetry_decoder_cc::set_decimation(int decimation) | ||||
|  | ||||
|  | ||||
| int gps_l2_m_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items) | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) | ||||
| { | ||||
|     // get pointers on in- and output gnss-synchro objects | ||||
|     const Gnss_Synchro *in = (const Gnss_Synchro *)  input_items[0]; // input | ||||
| @@ -128,7 +128,7 @@ int gps_l2_m_telemetry_decoder_cc::general_work (int noutput_items __attribute__ | ||||
|         { | ||||
|             if (in[0].Flag_valid_symbol_output == false) // check if the tracking is locked | ||||
|                 { | ||||
|                     LOG(INFO)<< "Discarting channel "<<d_channel<<" tracking not ready!"<<std::endl; | ||||
|                     LOG(INFO) << "Discarting channel " << d_channel << " tracking not ready!" << std::endl; | ||||
|                     d_flag_valid_word = false; | ||||
|                 } | ||||
|             else | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_CC_H | ||||
| #define	GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_CC_H | ||||
| #define GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_CC_H | ||||
|  | ||||
| #include <algorithm> // for copy | ||||
| #include <deque> | ||||
|   | ||||
| @@ -40,10 +40,10 @@ | ||||
| using google::LogMessage; | ||||
|  | ||||
| // logging levels | ||||
| #define EVENT 2 	// logs important events which don't occur every block | ||||
| #define FLOW 3  	// logs the function calls of block processing functions | ||||
| #define EVENT 2     // logs important events which don't occur every block | ||||
| #define FLOW 3      // logs the function calls of block processing functions | ||||
| #define SAMP_SYNC 4 // about 1 log entry per sample -> high output | ||||
| #define LMORE 5 	// | ||||
| #define LMORE 5     // | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -95,12 +95,12 @@ void sbas_l1_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &n | ||||
|  | ||||
|  | ||||
| int sbas_l1_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)), | ||||
|         gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items) | ||||
|         gr_vector_const_void_star &input_items,    gr_vector_void_star &output_items) | ||||
| { | ||||
|     VLOG(FLOW) << "general_work(): " << "noutput_items=" << noutput_items << "\toutput_items real size=" << output_items.size() <<  "\tninput_items size=" << ninput_items.size() << "\tinput_items real size=" << input_items.size() << "\tninput_items[0]=" << ninput_items[0]; | ||||
|     // get pointers on in- and output gnss-synchro objects | ||||
|     const Gnss_Synchro *in = (const Gnss_Synchro *)  input_items[0]; // input | ||||
|     Gnss_Synchro *out = (Gnss_Synchro *) output_items[0]; 	// output | ||||
|     Gnss_Synchro *out = (Gnss_Synchro *) output_items[0];     // output | ||||
|  | ||||
|     // store the time stamp of the first sample in the processed sample block | ||||
|     double sample_stamp = in[0].Tracking_timestamp_secs; | ||||
|   | ||||
| @@ -49,7 +49,7 @@ const float MAXLOG = 1e7;  /* Define infinity */ | ||||
|  | ||||
| /*! | ||||
|  * \brief Determines if a symbol has odd (1) or even (0) parity | ||||
|  *	Output parameters: | ||||
|  *    Output parameters: | ||||
|  * \return (returned int): The symbol's parity = 1 for odd and 0 for even | ||||
|  * | ||||
|  * \param[in] symbol  The integer-valued symbol | ||||
| @@ -82,7 +82,7 @@ static int parity_counter(int symbol, int length) | ||||
|  * \param[in]  KK        The constraint length of the convolutional code. | ||||
|  * \param[out] output_p[]     An n-element vector containing the encoded bits. | ||||
|  * \param[out] state_out_p[]  An integer containing the final state of the encoder | ||||
|  *					(i.e. the state after encoding this bit) | ||||
|  *                               (i.e. the state after encoding this bit) | ||||
|  * | ||||
|  * This function is used by nsc_transit() | ||||
|  */ | ||||
| @@ -193,7 +193,7 @@ static void Viterbi(int output_u_int[], | ||||
|     float *prev_section, *next_section; | ||||
|     int *prev_bit; | ||||
|     int *prev_state; | ||||
|     float *metric_c;	/* Set of all possible branch metrics */ | ||||
|     float *metric_c;    /* Set of all possible branch metrics */ | ||||
|     float *rec_array;   /* Received values for one trellis section */ | ||||
|     float max_val; | ||||
|  | ||||
| @@ -222,7 +222,7 @@ static void Viterbi(int output_u_int[], | ||||
|     for (t = 0; t < LL + mm; t++) | ||||
|         { | ||||
|             for (i = 0; i < nn; i++) | ||||
|         	    rec_array[i] = static_cast<float>(input_c[nn*t + i]); | ||||
|                 rec_array[i] = static_cast<float>(input_c[nn*t + i]); | ||||
|  | ||||
|             /* precompute all possible branch metrics */ | ||||
|             for (i = 0; i < number_symbols; i++) | ||||
|   | ||||
| @@ -34,11 +34,11 @@ | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| // logging | ||||
| #define EVENT 2 // logs important events which don't occur every block | ||||
| #define FLOW 3  // logs the function calls of block processing functions | ||||
| #define BLOCK 4	// once per block | ||||
| #define SAMPLE 5 // about one log entry per sample | ||||
| #define LMORE 6 // many entries per sample / very specific stuff | ||||
| #define EVENT 2    // logs important events which don't occur every block | ||||
| #define FLOW 3     // logs the function calls of block processing functions | ||||
| #define BLOCK 4    // once per block | ||||
| #define SAMPLE 5   // about one log entry per sample | ||||
| #define LMORE 6    // many entries per sample / very specific stuff | ||||
|  | ||||
|  | ||||
| const float MAXLOG = 1e7;  /* Define infinity */ | ||||
| @@ -95,10 +95,10 @@ void Viterbi_Decoder::reset() | ||||
| /* Function decode_block() | ||||
|  Description: Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code. | ||||
|  Input parameters: | ||||
|  r[]	The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). | ||||
|  LL	The number of data bits to be decoded (doesn't include the mm zero-tail-bits) | ||||
|  r[]    The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). | ||||
|  LL    The number of data bits to be decoded (doesn't include the mm zero-tail-bits) | ||||
|  Output parameters: | ||||
|  output_u_int[]	Hard decisions on the data bits (without the mm zero-tail-bits) | ||||
|  output_u_int[]    Hard decisions on the data bits (without the mm zero-tail-bits) | ||||
|  */ | ||||
| float Viterbi_Decoder::decode_block(const double input_c[], int output_u_int[], const int LL) | ||||
| { | ||||
| @@ -359,12 +359,12 @@ int Viterbi_Decoder::do_tb_and_decode(int traceback_length, int requested_decodi | ||||
|  Description: Computes the branch metric used for decoding. | ||||
|  | ||||
|  Output parameters: | ||||
|  (returned float) 	The metric between the hypothetical symbol and the recevieved vector | ||||
|  (returned float)     The metric between the hypothetical symbol and the recevieved vector | ||||
|  | ||||
|  Input parameters: | ||||
|  rec_array			The received vector, of length nn | ||||
|  symbol				The hypothetical symbol | ||||
|  nn					The length of the received vector | ||||
|  rec_array            The received vector, of length nn | ||||
|  symbol                The hypothetical symbol | ||||
|  nn                    The length of the received vector | ||||
|  | ||||
|  This function is used by siso()  */ | ||||
| float | ||||
| @@ -412,15 +412,15 @@ Viterbi_Decoder::nsc_transit(int output_p[], int trans_p[], int input, const int | ||||
|  Takes in one input bit at a time, and produces a n-bit output. | ||||
|  | ||||
|  Input parameters: | ||||
|  input		The input data bit (i.e. a 0 or 1). | ||||
|  state_in	The starting state of the encoder (an int from 0 to 2^m-1). | ||||
|  g[]			An n-element vector containing the code generators in binary form. | ||||
|  KK			The constraint length of the convolutional code. | ||||
|  nn			number of symbols bits per input bits (rate 1/nn) | ||||
|  input        The input data bit (i.e. a 0 or 1). | ||||
|  state_in    The starting state of the encoder (an int from 0 to 2^m-1). | ||||
|  g[]            An n-element vector containing the code generators in binary form. | ||||
|  KK            The constraint length of the convolutional code. | ||||
|  nn            number of symbols bits per input bits (rate 1/nn) | ||||
|  | ||||
|  Output parameters: | ||||
|  output_p[]		An n-element vector containing the encoded bits. | ||||
|  state_out_p[]	An integer containing the final state of the encoder | ||||
|  output_p[]        An n-element vector containing the encoded bits. | ||||
|  state_out_p[]    An integer containing the final state of the encoder | ||||
|  (i.e. the state after encoding this bit) | ||||
|  | ||||
|  This function is used by rsc_encode(), nsc_transit(), rsc_transit(), and nsc_transit() */ | ||||
|   | ||||
| @@ -129,14 +129,14 @@ void GalileoE1DllPllVemlTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GalileoE1DllPllVemlTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GalileoE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GalileoE1DllPllVemlTracking::get_left_block() | ||||
|   | ||||
| @@ -130,14 +130,14 @@ void GalileoE1TcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchr | ||||
|  | ||||
| void GalileoE1TcpConnectorTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GalileoE1TcpConnectorTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GalileoE1TcpConnectorTracking::get_left_block() | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          </ul> | ||||
| @@ -137,14 +137,14 @@ void GalileoE5aDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GalileoE5aDllPllTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GalileoE5aDllPllTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GalileoE5aDllPllTracking::get_left_block() | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|  *  Galileo E5a data and pilot Signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          </ul> | ||||
|   | ||||
| @@ -100,23 +100,25 @@ GpsL1CaDllPllCAidTracking::GpsL1CaDllPllCAidTracking( | ||||
|                     extend_correlation_ms, | ||||
|                     early_late_space_chips); | ||||
|             DLOG(INFO) << "tracking(" << tracking_cc->unique_id() << ")"; | ||||
|     }else if(item_type_.compare("cshort") == 0) | ||||
|     	{ | ||||
|         item_size_ = sizeof(lv_16sc_t); | ||||
|         tracking_sc = gps_l1_ca_dll_pll_c_aid_make_tracking_sc( | ||||
|                 f_if, | ||||
|                 fs_in, | ||||
|                 vector_length, | ||||
|                 queue_, | ||||
|                 dump, | ||||
|                 dump_filename, | ||||
|                 pll_bw_hz, | ||||
|                 dll_bw_hz, | ||||
|                 pll_bw_narrow_hz, | ||||
|                 dll_bw_narrow_hz, | ||||
|                 early_late_space_chips); | ||||
|         DLOG(INFO) << "tracking(" << tracking_sc->unique_id() << ")"; | ||||
|     }else | ||||
|         } | ||||
|     else if(item_type_.compare("cshort") == 0) | ||||
|         { | ||||
|             item_size_ = sizeof(lv_16sc_t); | ||||
|             tracking_sc = gps_l1_ca_dll_pll_c_aid_make_tracking_sc( | ||||
|                     f_if, | ||||
|                     fs_in, | ||||
|                     vector_length, | ||||
|                     queue_, | ||||
|                     dump, | ||||
|                     dump_filename, | ||||
|                     pll_bw_hz, | ||||
|                     dll_bw_hz, | ||||
|                     pll_bw_narrow_hz, | ||||
|                     dll_bw_narrow_hz, | ||||
|                     early_late_space_chips); | ||||
|             DLOG(INFO) << "tracking(" << tracking_sc->unique_id() << ")"; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             item_size_ = sizeof(gr_complex); | ||||
|             LOG(WARNING) << item_type_ << " unknown tracking item type."; | ||||
| @@ -185,14 +187,14 @@ void GpsL1CaDllPllCAidTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GpsL1CaDllPllCAidTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GpsL1CaDllPllCAidTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GpsL1CaDllPllCAidTracking::get_left_block() | ||||
|   | ||||
| @@ -125,14 +125,14 @@ void GpsL1CaDllPllTrackingGPU::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GpsL1CaDllPllTrackingGPU::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GpsL1CaDllPllTrackingGPU::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GpsL1CaDllPllTrackingGPU::get_left_block() | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * \file gps_l1_ca_tcp_connector_tracking.cc | ||||
|  * \brief Implementation of an adapter of a TCP connector block based on code DLL + carrier PLL | ||||
|  * \author David Pubill, 2012. dpubill(at)cttc.es | ||||
|  * 		   Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *            Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *         Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  * | ||||
|  * Code DLL + carrier PLL according to the algorithms described in: | ||||
| @@ -123,14 +123,14 @@ void GpsL1CaTcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GpsL1CaTcpConnectorTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GpsL1CaTcpConnectorTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GpsL1CaTcpConnectorTracking::get_left_block() | ||||
|   | ||||
| @@ -125,14 +125,14 @@ void GpsL2MDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) | ||||
|  | ||||
| void GpsL2MDllPllTracking::connect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to connect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to connect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| void GpsL2MDllPllTracking::disconnect(gr::top_block_sptr top_block) | ||||
| { | ||||
| 	if(top_block) { /* top_block is not null */}; | ||||
| 	//nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
|     if(top_block) { /* top_block is not null */}; | ||||
|     //nothing to disconnect, now the tracking uses gr_sync_decimator | ||||
| } | ||||
|  | ||||
| gr::basic_block_sptr GpsL2MDllPllTracking::get_left_block() | ||||
|   | ||||
| @@ -309,11 +309,11 @@ int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items __attri | ||||
|             double code_phase_step_half_chips = (2.0 * d_code_freq_chips) / (static_cast<double>(d_fs_in)); | ||||
|             double rem_code_phase_half_chips = d_rem_code_phase_samples * (2.0*d_code_freq_chips / d_fs_in); | ||||
|             multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler( | ||||
|             		d_rem_carr_phase_rad, | ||||
|             		carr_phase_step_rad, | ||||
|             		rem_code_phase_half_chips, | ||||
|             		code_phase_step_half_chips, | ||||
|             		d_correlation_length_samples); | ||||
|                     d_rem_carr_phase_rad, | ||||
|                     carr_phase_step_rad, | ||||
|                     rem_code_phase_half_chips, | ||||
|                     code_phase_step_half_chips, | ||||
|                     d_correlation_length_samples); | ||||
|  | ||||
|             // ################## PLL ########################################################## | ||||
|             // PLL discriminator | ||||
| @@ -410,11 +410,11 @@ int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items __attri | ||||
|         } | ||||
|     else | ||||
|     { | ||||
|     	*d_Early = gr_complex(0,0); | ||||
|     	*d_Prompt = gr_complex(0,0); | ||||
|     	*d_Late = gr_complex(0,0); | ||||
|     	// GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder | ||||
|     	current_synchro_data.Tracking_timestamp_secs = (static_cast<double>(d_sample_counter) + static_cast<double>(d_rem_code_phase_samples)) / static_cast<double>(d_fs_in); | ||||
|         *d_Early = gr_complex(0,0); | ||||
|         *d_Prompt = gr_complex(0,0); | ||||
|         *d_Late = gr_complex(0,0); | ||||
|         // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder | ||||
|         current_synchro_data.Tracking_timestamp_secs = (static_cast<double>(d_sample_counter) + static_cast<double>(d_rem_code_phase_samples)) / static_cast<double>(d_fs_in); | ||||
|     } | ||||
|     //assign the GNURadio block output data | ||||
|     current_synchro_data.System = {'E'}; | ||||
|   | ||||
| @@ -303,11 +303,11 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work (int noutput_items __attr | ||||
|             double code_phase_step_half_chips = (2.0 * d_code_freq_chips) / (static_cast<double>(d_fs_in)); | ||||
|             double rem_code_phase_half_chips = d_rem_code_phase_samples * (2.0*d_code_freq_chips / d_fs_in); | ||||
|             multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler( | ||||
|             		d_rem_carr_phase_rad, | ||||
|             		carr_phase_step_rad, | ||||
|             		rem_code_phase_half_chips, | ||||
|             		code_phase_step_half_chips, | ||||
|             		d_correlation_length_samples); | ||||
|                     d_rem_carr_phase_rad, | ||||
|                     carr_phase_step_rad, | ||||
|                     rem_code_phase_half_chips, | ||||
|                     code_phase_step_half_chips, | ||||
|                     d_correlation_length_samples); | ||||
|  | ||||
|             // ################## TCP CONNECTOR ########################################################## | ||||
|             //! Variable used for control | ||||
|   | ||||
| @@ -37,7 +37,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H | ||||
| #define	GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H | ||||
| #define GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <map> | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  tracking block for Galileo E5a signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          </ul> | ||||
| @@ -323,51 +323,51 @@ void Galileo_E5a_Dll_Pll_Tracking_cc::acquire_secondary() | ||||
|     // 1. Transform replica to 1 and -1 | ||||
|     int sec_code_signed[Galileo_E5a_Q_SECONDARY_CODE_LENGTH]; | ||||
|     for (unsigned int i = 0; i < Galileo_E5a_Q_SECONDARY_CODE_LENGTH; i++) | ||||
| 	{ | ||||
| 	    if (Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(i) == '0') | ||||
| 		{ | ||||
| 		    sec_code_signed[i] = 1; | ||||
| 		} | ||||
| 	    else | ||||
| 		{ | ||||
| 		    sec_code_signed[i] = -1; | ||||
| 		} | ||||
| 	} | ||||
|         { | ||||
|             if (Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN - 1].at(i) == '0') | ||||
|                 { | ||||
|                     sec_code_signed[i] = 1; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     sec_code_signed[i] = -1; | ||||
|                 } | ||||
|         } | ||||
|     // 2. Transform buffer to 1 and -1 | ||||
|     int in_corr[CN0_ESTIMATION_SAMPLES]; | ||||
|     for (unsigned int i = 0; i < CN0_ESTIMATION_SAMPLES; i++) | ||||
| 	{ | ||||
| 	    if (d_Prompt_buffer[i].real() >0) | ||||
| 		{ | ||||
| 		    in_corr[i] = 1; | ||||
| 		} | ||||
| 	    else | ||||
| 		{ | ||||
| 		    in_corr[i] = -1; | ||||
| 		} | ||||
| 	} | ||||
|         { | ||||
|             if (d_Prompt_buffer[i].real() >0) | ||||
|                 { | ||||
|                     in_corr[i] = 1; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     in_corr[i] = -1; | ||||
|                 } | ||||
|         } | ||||
|     // 3. Serial search | ||||
|     int out_corr; | ||||
|     int current_best_ = 0; | ||||
|     for (unsigned int i = 0; i < Galileo_E5a_Q_SECONDARY_CODE_LENGTH; i++) | ||||
| 	{ | ||||
| 	    out_corr = 0; | ||||
| 	    for (unsigned int j = 0; j < CN0_ESTIMATION_SAMPLES; j++) | ||||
| 		{ | ||||
| 		    //reverse replica sign since i*i=-1 (conjugated complex) | ||||
| 		    out_corr += in_corr[j] * -sec_code_signed[(j+i) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH]; | ||||
| 		} | ||||
| 	    if (abs(out_corr) > current_best_) | ||||
| 		{ | ||||
| 		    current_best_ = abs(out_corr); | ||||
| 		    d_secondary_delay = i; | ||||
| 		} | ||||
| 	} | ||||
|         { | ||||
|             out_corr = 0; | ||||
|             for (unsigned int j = 0; j < CN0_ESTIMATION_SAMPLES; j++) | ||||
|                 { | ||||
|                     //reverse replica sign since i*i=-1 (conjugated complex) | ||||
|                     out_corr += in_corr[j] * -sec_code_signed[(j + i) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH]; | ||||
|                 } | ||||
|             if (abs(out_corr) > current_best_) | ||||
|                 { | ||||
|                     current_best_ = abs(out_corr); | ||||
|                     d_secondary_delay = i; | ||||
|                 } | ||||
|         } | ||||
|     if (current_best_ == CN0_ESTIMATION_SAMPLES) // all bits correlate | ||||
| 	{ | ||||
| 	    d_secondary_lock = true; | ||||
| 	    d_secondary_delay = (d_secondary_delay + CN0_ESTIMATION_SAMPLES - 1) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH; | ||||
| 	} | ||||
|         { | ||||
|             d_secondary_lock = true; | ||||
|             d_secondary_delay = (d_secondary_delay + CN0_ESTIMATION_SAMPLES - 1) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -388,10 +388,10 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute | ||||
|     // Fill the acquisition data | ||||
|     current_synchro_data = *d_acquisition_gnss_synchro; | ||||
|  | ||||
|     /* States: 	0 Tracking not enabled | ||||
|      * 		1 Pull-in of primary code (alignment). | ||||
|      * 		3 Tracking algorithm. Correlates EPL each loop and accumulates the result | ||||
|      * 					until it reaches integration time. | ||||
|     /* States:     0 Tracking not enabled | ||||
|      *         1 Pull-in of primary code (alignment). | ||||
|      *         3 Tracking algorithm. Correlates EPL each loop and accumulates the result | ||||
|      *                     until it reaches integration time. | ||||
|      */ | ||||
|     switch (d_state) | ||||
|     { | ||||
| @@ -402,7 +402,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute | ||||
|             d_Prompt = gr_complex(0,0); | ||||
|             d_Late = gr_complex(0,0); | ||||
|             d_Prompt_data = gr_complex(0,0); | ||||
|         	current_synchro_data.Tracking_timestamp_secs = static_cast<double>(d_sample_counter) / static_cast<double>(d_fs_in); | ||||
|             current_synchro_data.Tracking_timestamp_secs = static_cast<double>(d_sample_counter) / static_cast<double>(d_fs_in); | ||||
|             *out[0] = current_synchro_data; | ||||
|  | ||||
|             break; | ||||
| @@ -440,8 +440,8 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute | ||||
|             // Secondary code Chip | ||||
|             if (d_secondary_lock) | ||||
|                 { | ||||
|                     //			sec_sign_Q = gr_complex((Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(d_secondary_delay)=='0' ? 1 : -1),0); | ||||
|                     //			sec_sign_I = gr_complex((Galileo_E5a_I_SECONDARY_CODE.at(d_secondary_delay%Galileo_E5a_I_SECONDARY_CODE_LENGTH)=='0' ? 1 : -1),0); | ||||
|                     //            sec_sign_Q = gr_complex((Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(d_secondary_delay)=='0' ? 1 : -1),0); | ||||
|                     //            sec_sign_I = gr_complex((Galileo_E5a_I_SECONDARY_CODE.at(d_secondary_delay%Galileo_E5a_I_SECONDARY_CODE_LENGTH)=='0' ? 1 : -1),0); | ||||
|                     sec_sign_Q = gr_complex((Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(d_secondary_delay) == '0' ? -1 : 1), 0); | ||||
|                     sec_sign_I = gr_complex((Galileo_E5a_I_SECONDARY_CODE.at(d_secondary_delay % Galileo_E5a_I_SECONDARY_CODE_LENGTH) == '0' ? -1 : 1), 0); | ||||
|                 } | ||||
| @@ -480,18 +480,18 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute | ||||
|             double code_phase_step_chips = d_code_freq_chips / (static_cast<double>(d_fs_in)); | ||||
|             double rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); | ||||
|             multicorrelator_cpu_Q.Carrier_wipeoff_multicorrelator_resampler( | ||||
|             		d_rem_carr_phase_rad, | ||||
|             		carr_phase_step_rad, | ||||
|             		rem_code_phase_chips, | ||||
|             		code_phase_step_chips, | ||||
|             		d_current_prn_length_samples); | ||||
|                     d_rem_carr_phase_rad, | ||||
|                     carr_phase_step_rad, | ||||
|                     rem_code_phase_chips, | ||||
|                     code_phase_step_chips, | ||||
|                     d_current_prn_length_samples); | ||||
|  | ||||
|             multicorrelator_cpu_I.Carrier_wipeoff_multicorrelator_resampler( | ||||
|             		d_rem_carr_phase_rad, | ||||
|             		carr_phase_step_rad, | ||||
|             		rem_code_phase_chips, | ||||
|             		code_phase_step_chips, | ||||
|             		d_current_prn_length_samples); | ||||
|                     d_rem_carr_phase_rad, | ||||
|                     carr_phase_step_rad, | ||||
|                     rem_code_phase_chips, | ||||
|                     code_phase_step_chips, | ||||
|                     d_current_prn_length_samples); | ||||
|  | ||||
|  | ||||
|             // Accumulate results (coherent integration since there are no bit transitions in pilot signal) | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  *  tracking block for Galileo E5a signals | ||||
|  * \author Marc Sales, 2014. marcsales92(at)gmail.com | ||||
|  * \based on work from: | ||||
|  * 		<ul> | ||||
|  *          <ul> | ||||
|  *          <li> Javier Arribas, 2011. jarribas(at)cttc.es | ||||
|  *          <li> Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  *          </ul> | ||||
|   | ||||
| @@ -336,8 +336,8 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items __attri | ||||
|     double old_d_rem_code_phase_samples; | ||||
|     if (d_enable_tracking == true) | ||||
|         { | ||||
| 			// Fill the acquisition data | ||||
| 			current_synchro_data = *d_acquisition_gnss_synchro; | ||||
|             // Fill the acquisition data | ||||
|             current_synchro_data = *d_acquisition_gnss_synchro; | ||||
|             // Receiver signal alignment | ||||
|             if (d_pull_in == true) | ||||
|                 { | ||||
| @@ -360,10 +360,10 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items __attri | ||||
|             // perform carrier wipe-off and compute Early, Prompt and Late correlation | ||||
|             multicorrelator_cpu.set_input_output_vectors(d_correlator_outs,in); | ||||
|             multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad, | ||||
|             		d_carrier_phase_step_rad, | ||||
|             		d_rem_code_phase_chips, | ||||
|             		d_code_phase_step_chips, | ||||
|             		d_correlation_length_samples); | ||||
|                     d_carrier_phase_step_rad, | ||||
|                     d_rem_code_phase_chips, | ||||
|                     d_code_phase_step_chips, | ||||
|                     d_correlation_length_samples); | ||||
|  | ||||
|             // ####### coherent intergration extension | ||||
|             // keep the last symbols | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H | ||||
| #define GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <map> | ||||
|   | ||||
| @@ -136,7 +136,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_sc::gps_l1_ca_dll_pll_c_aid_tracking_sc( | ||||
|     d_correlator_outs_16sc = static_cast<lv_16sc_t*>(volk_malloc(d_n_correlator_taps*sizeof(lv_16sc_t), volk_get_alignment())); | ||||
|     for (int n = 0; n < d_n_correlator_taps; n++) | ||||
|         { | ||||
|     		d_correlator_outs_16sc[n] = lv_16sc_t(0,0); | ||||
|             d_correlator_outs_16sc[n] = lv_16sc_t(0,0); | ||||
|         } | ||||
|  | ||||
|     d_local_code_shift_chips = static_cast<float*>(volk_malloc(d_n_correlator_taps*sizeof(float), volk_get_alignment())); | ||||
| @@ -314,7 +314,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_sc::general_work (int noutput_items __attri | ||||
|     double old_d_rem_code_phase_samples; | ||||
|     if (d_enable_tracking == true) | ||||
|         { | ||||
|     		// Fill the acquisition data | ||||
|             // Fill the acquisition data | ||||
|             current_synchro_data = *d_acquisition_gnss_synchro; | ||||
|             // Receiver signal alignment | ||||
|             if (d_pull_in == true) | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H | ||||
| #define GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <queue> | ||||
|   | ||||
| @@ -325,10 +325,10 @@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__ | ||||
|             // perform carrier wipe-off and compute Early, Prompt and Late correlation | ||||
|             multicorrelator_cpu.set_input_output_vectors(d_correlator_outs, in); | ||||
|             multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler(d_rem_carr_phase_rad, | ||||
|             		d_carrier_phase_step_rad, | ||||
|             		d_rem_code_phase_chips, | ||||
|             		d_code_phase_step_chips, | ||||
|             		d_current_prn_length_samples); | ||||
|                     d_carrier_phase_step_rad, | ||||
|                     d_rem_code_phase_chips, | ||||
|                     d_code_phase_step_chips, | ||||
|                     d_current_prn_length_samples); | ||||
|  | ||||
|             // ################## PLL ########################################################## | ||||
|             // PLL discriminator | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H | ||||
| #define	GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H | ||||
| #define GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H | ||||
|  | ||||
| #include <fstream> | ||||
| #include <map> | ||||
|   | ||||
| @@ -310,8 +310,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu | ||||
|     double old_d_rem_code_phase_samples; | ||||
|     if (d_enable_tracking == true) | ||||
|         { | ||||
|  | ||||
|     		// Fill the acquisition data | ||||
|             // Fill the acquisition data | ||||
|             current_synchro_data = *d_acquisition_gnss_synchro; | ||||
|             // Receiver signal alignment | ||||
|             if (d_pull_in == true) | ||||
| @@ -338,10 +337,10 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu | ||||
|             memcpy(in_gpu, in, sizeof(gr_complex) * d_correlation_length_samples); | ||||
|             cudaProfilerStart(); | ||||
|             multicorrelator_gpu->Carrier_wipeoff_multicorrelator_resampler_cuda( static_cast<float>(d_rem_carrier_phase_rad), | ||||
|             		static_cast<float>(d_carrier_phase_step_rad), | ||||
|             		static_cast<float>(d_code_phase_step_chips), | ||||
|             		static_cast<float>(d_rem_code_phase_chips), | ||||
|             		d_correlation_length_samples, d_n_correlator_taps); | ||||
|                     static_cast<float>(d_carrier_phase_step_rad), | ||||
|                     static_cast<float>(d_code_phase_step_chips), | ||||
|                     static_cast<float>(d_rem_code_phase_chips), | ||||
|                     d_correlation_length_samples, d_n_correlator_taps); | ||||
|             cudaProfilerStop(); | ||||
|             //std::cout<<"c_out[0]="<<d_correlator_outs[0]<<"c_out[1]="<<d_correlator_outs[1]<<"c_out[2]="<<d_correlator_outs[2]<<std::endl; | ||||
|  | ||||
| @@ -388,7 +387,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu | ||||
|             d_rem_code_phase_samples = K_blk_samples - static_cast<double>(d_correlation_length_samples); //rounding error < 1 sample | ||||
|  | ||||
|             // UPDATE REMNANT CARRIER PHASE | ||||
|             CORRECTED_INTEGRATION_TIME_S=(static_cast<double>(d_correlation_length_samples)/static_cast<double>(d_fs_in)); | ||||
|             CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples)/static_cast<double>(d_fs_in)); | ||||
|             //remnant carrier phase [rad] | ||||
|             d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * CORRECTED_INTEGRATION_TIME_S, GPS_TWO_PI); | ||||
|             // UPDATE CARRIER PHASE ACCUULATOR | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez