[hamradio-commits] [gnss-sdr] 09/251: Added L2C_M simple PCPS acquisition adapter and its associated unit test
Carles Fernandez
carles_fernandez-guest at moszumanska.debian.org
Wed Sep 2 00:22:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
carles_fernandez-guest pushed a commit to branch master
in repository gnss-sdr.
commit 6618c220d02400fcde0758a26cb4f7ae48a4f0cb
Author: Javier <jarribas at cttc.es>
Date: Wed Apr 29 14:19:17 2015 +0200
Added L2C_M simple PCPS acquisition adapter and its associated unit test
---
...channel_GPS_L2_M_Flexiband_bin_file_III_1a.conf | 28 +++++++++---------
...hannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf} | 33 +++++++++++-----------
.../adapters/gps_l2_m_pcps_acquisition.cc | 31 ++++++++++----------
.../adapters/gps_l2_m_pcps_acquisition.h | 1 -
.../gnuradio_blocks/pcps_acquisition_cc.cc | 18 ++++++------
src/algorithms/libs/gps_l2c_signal.cc | 5 ++--
src/tests/test_main.cc | 1 +
7 files changed, 60 insertions(+), 57 deletions(-)
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
index 051a919..b88f6b6 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
@@ -75,10 +75,10 @@ DataTypeAdapter0.item_type=gr_complex
InputFilter0.implementation=Freq_Xlating_Fir_Filter
;#dump: Dump the filtered data to a file.
-InputFilter0.dump=false
+InputFilter0.dump=true
;#dump_filename: Log path and filename.
-InputFilter0.dump_filename=../data/input_filter.dat
+InputFilter0.dump_filename=../data/input_filter_ch0.dat
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
;#These options are based on parameters of gnuradio's function: gr_remez.
@@ -167,10 +167,10 @@ DataTypeAdapter1.item_type=gr_complex
InputFilter1.implementation=Freq_Xlating_Fir_Filter
;#dump: Dump the filtered data to a file.
-InputFilter1.dump=false
+InputFilter1.dump=true
;#dump_filename: Log path and filename.
-InputFilter1.dump_filename=../data/input_filter.dat
+InputFilter1.dump_filename=../data/input_filter_ch1.dat
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
;#These options are based on parameters of gnuradio's function: gr_remez.
@@ -227,7 +227,7 @@ InputFilter1.grid_density=16
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter1.sampling_frequency=20000000
;# IF deviation due to front-end LO inaccuracies [HZ]
-InputFilter1.IF=100000
+InputFilter1.IF=-100000
;# Decimation factor after the frequency tranaslating block
InputFilter1.decimation_factor=4
@@ -270,7 +270,7 @@ Channels_GPS.count=2
;#count: Number of available Galileo satellite channels.
Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
-Channels.in_acquisition=2
+Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS
Channel.system=GPS, GPS L2C M
@@ -311,11 +311,11 @@ Acquisition_GPS0.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS0.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS0.threshold=0.006
+Acquisition_GPS0.threshold=0.002
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS0.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS0.doppler_max=10000
+Acquisition_GPS0.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS0.doppler_step=250
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
@@ -338,13 +338,13 @@ Acquisition_GPS1.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS1.implementation=GPS_L2_M_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS1.threshold=0.012
+Acquisition_GPS1.threshold=0.0005
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS1.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS1.doppler_max=10000
+Acquisition_GPS1.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS1.doppler_step=250
+Acquisition_GPS1.doppler_step=100
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
@@ -368,13 +368,13 @@ Acquisition_GPS.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS.implementation=GPS_L2_M_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.012
+Acquisition_GPS.threshold=0.001
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
+Acquisition_GPS.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=250
+Acquisition_GPS.doppler_step=100
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
similarity index 96%
copy from conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
copy to conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
index 051a919..3b5fff0 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
@@ -29,7 +29,6 @@ GNSS-SDR.SUPL_CI=0x31b0
SignalSource.implementation=Flexiband_Signal_Source
SignalSource.flag_read_file=true
-;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
@@ -75,10 +74,10 @@ DataTypeAdapter0.item_type=gr_complex
InputFilter0.implementation=Freq_Xlating_Fir_Filter
;#dump: Dump the filtered data to a file.
-InputFilter0.dump=false
+InputFilter0.dump=true
;#dump_filename: Log path and filename.
-InputFilter0.dump_filename=../data/input_filter.dat
+InputFilter0.dump_filename=../data/input_filter_ch0.dat
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
;#These options are based on parameters of gnuradio's function: gr_remez.
@@ -135,7 +134,9 @@ InputFilter0.grid_density=16
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter0.sampling_frequency=20000000
;# IF deviation due to front-end LO inaccuracies [HZ]
-InputFilter0.IF=-205000
+;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS.
+:#InputFilter0.IF=-205000
+InputFilter0.IF=0
;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=4
@@ -167,10 +168,10 @@ DataTypeAdapter1.item_type=gr_complex
InputFilter1.implementation=Freq_Xlating_Fir_Filter
;#dump: Dump the filtered data to a file.
-InputFilter1.dump=false
+InputFilter1.dump=true
;#dump_filename: Log path and filename.
-InputFilter1.dump_filename=../data/input_filter.dat
+InputFilter1.dump_filename=../data/input_filter_ch1.dat
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
;#These options are based on parameters of gnuradio's function: gr_remez.
@@ -227,7 +228,7 @@ InputFilter1.grid_density=16
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
InputFilter1.sampling_frequency=20000000
;# IF deviation due to front-end LO inaccuracies [HZ]
-InputFilter1.IF=100000
+InputFilter1.IF=0
;# Decimation factor after the frequency tranaslating block
InputFilter1.decimation_factor=4
@@ -270,7 +271,7 @@ Channels_GPS.count=2
;#count: Number of available Galileo satellite channels.
Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
-Channels.in_acquisition=2
+Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS
Channel.system=GPS, GPS L2C M
@@ -311,11 +312,11 @@ Acquisition_GPS0.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS0.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS0.threshold=0.006
+Acquisition_GPS0.threshold=0.005
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS0.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS0.doppler_max=10000
+Acquisition_GPS0.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS0.doppler_step=250
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
@@ -338,13 +339,13 @@ Acquisition_GPS1.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS1.implementation=GPS_L2_M_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS1.threshold=0.012
+Acquisition_GPS1.threshold=0.001
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS1.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS1.doppler_max=10000
+Acquisition_GPS1.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS1.doppler_step=250
+Acquisition_GPS1.doppler_step=100
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
@@ -368,13 +369,13 @@ Acquisition_GPS.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel:
Acquisition_GPS.implementation=GPS_L2_M_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.012
+Acquisition_GPS.threshold=0.001
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
;Acquisition_GPS.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
+Acquisition_GPS.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=250
+Acquisition_GPS.doppler_step=100
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
index abe4510..353453a 100644
--- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
+++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
@@ -33,6 +33,7 @@
#include "gps_l2_m_pcps_acquisition.h"
#include <iostream>
+#include <fstream>
#include <stdexcept>
#include <boost/math/distributions/exponential.hpp>
#include <glog/logging.h>
@@ -55,7 +56,7 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition(
std::string default_dump_filename = "./data/acquisition.dat";
DLOG(INFO) << "role " << role;
- std::cout<<"GpsL2MPcpsAcquisition role = "<<role<<std::endl;
+
item_type_ = configuration_->property(role + ".item_type",
default_item_type);
//float pfa = configuration_->property(role + ".pfa", 0.0);
@@ -64,7 +65,6 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition(
if_ = configuration_->property(role + ".ifreq", 0);
dump_ = configuration_->property(role + ".dump", false);
shift_resolution_ = configuration_->property(role + ".doppler_max", 15);
- sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1);
bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false);
@@ -84,14 +84,14 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition(
code_length_ = round((double)fs_in_
/ (GPS_L2_M_CODE_RATE_HZ / (double)GPS_L2_M_CODE_LENGTH_CHIPS));
- vector_length_ = code_length_ * sampled_ms_;
+ vector_length_ = code_length_;
code_= new gr_complex[vector_length_];
// if (item_type_.compare("gr_complex") == 0 )
// {
item_size_ = sizeof(gr_complex);
- acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_,
+ acquisition_cc_ = pcps_make_acquisition_cc(1, max_dwells_,
shift_resolution_, if_, fs_in_, code_length_, code_length_,
bit_transition_flag_, queue_, dump_, dump_filename_);
@@ -221,7 +221,7 @@ signed int GpsL2MPcpsAcquisition::mag()
void GpsL2MPcpsAcquisition::init()
{
acquisition_cc_->init();
- //set_local_code();
+ set_local_code();
}
@@ -229,18 +229,19 @@ void GpsL2MPcpsAcquisition::set_local_code()
{
// if (item_type_.compare("gr_complex") == 0)
// {
- std::complex<float>* code = new std::complex<float>[code_length_];
- gps_l2c_m_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_);
-
- for (unsigned int i = 0; i < sampled_ms_; i++)
- {
- memcpy(&(code_[i*code_length_]), code,
- sizeof(gr_complex)*code_length_);
- }
-
+ gps_l2c_m_code_gen_complex_sampled(code_, gnss_synchro_->PRN, fs_in_);
acquisition_cc_->set_local_code(code_);
- delete[] code;
+// //debug
+// std::ofstream d_dump_file;
+// std::stringstream filename;
+// std::streamsize n = 2 * sizeof(float) * (code_length_); // complex file write
+// filename.str("");
+// filename << "../data/local_prn_sampled.dat";
+// d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary);
+// d_dump_file.write((char*)code_, n);
+// d_dump_file.close();
+
// }
}
diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.h b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.h
index 684ff66..c6553ad 100644
--- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.h
+++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.h
@@ -157,7 +157,6 @@ private:
unsigned int doppler_max_;
unsigned int doppler_step_;
unsigned int shift_resolution_;
- unsigned int sampled_ms_;
unsigned int max_dwells_;
long fs_in_;
long if_;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
index 1dedcbc..ef3e6ce 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
@@ -138,14 +138,15 @@ void pcps_acquisition_cc::init()
d_mag = 0.0;
d_input_power = 0.0;
+ d_num_doppler_bins=ceil((static_cast<int>(d_doppler_max)-static_cast<int>(-d_doppler_max))/d_doppler_step);
// Count the number of bins
- d_num_doppler_bins = 0;
- for (int doppler = static_cast<int>(-d_doppler_max);
- doppler <= static_cast<int>(d_doppler_max);
- doppler += d_doppler_step)
- {
- d_num_doppler_bins++;
- }
+// d_num_doppler_bins = 0;
+// for (int doppler = static_cast<int>(-d_doppler_max);
+// doppler <= static_cast<int>(d_doppler_max);
+// doppler += d_doppler_step)
+// {
+// d_num_doppler_bins++;
+// }
// Create the carrier Doppler wipeoff signals
d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins];
@@ -154,7 +155,7 @@ void pcps_acquisition_cc::init()
{
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment()));
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
- complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size);
+ complex_exp_gen(d_grid_doppler_wipeoffs[doppler_index], d_freq - doppler, d_fs_in, d_fft_size);
}
}
@@ -247,7 +248,6 @@ int pcps_acquisition_cc::general_work(int noutput_items,
volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size);
volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size);
d_input_power /= static_cast<float>(d_fft_size);
-
// 2- Doppler frequency search loop
for (unsigned int doppler_index=0; doppler_index < d_num_doppler_bins; doppler_index++)
{
diff --git a/src/algorithms/libs/gps_l2c_signal.cc b/src/algorithms/libs/gps_l2c_signal.cc
index b238bab..a4e5d0b 100644
--- a/src/algorithms/libs/gps_l2c_signal.cc
+++ b/src/algorithms/libs/gps_l2c_signal.cc
@@ -47,8 +47,8 @@ void gps_l2c_m_code(int32_t * _dest, unsigned int _prn)
x= GPS_L2C_M_INIT_REG[_prn-1];
for (int n=0; n<GPS_L2_M_CODE_LENGTH_CHIPS; n++)
{
- x= gps_l2c_m_shift(x);
_dest[n]=(int8_t)(x&1);
+ x= gps_l2c_m_shift(x);
}
}
@@ -59,7 +59,7 @@ void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
{
int32_t _code[GPS_L2_M_CODE_LENGTH_CHIPS];
- if (_prn<51)
+ if (_prn>0 and _prn<51)
{
gps_l2c_m_code(_code, _prn);
}
@@ -86,6 +86,7 @@ void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
// The length of the index array depends on the sampling frequency -
// number of samples per millisecond (because one C/A code period is one
// millisecond).
+ //TODO: Check this formula! Seems to start with an extra sample
_codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1;
diff --git a/src/tests/test_main.cc b/src/tests/test_main.cc
index c6c6622..274356e 100644
--- a/src/tests/test_main.cc
+++ b/src/tests/test_main.cc
@@ -84,6 +84,7 @@ DECLARE_string(log_dir);
#include "gnss_block/file_signal_source_test.cc"
#include "gnss_block/fir_filter_test.cc"
#include "gnss_block/gps_l1_ca_pcps_acquisition_test.cc"
+#include "gnss_block/gps_l2_m_pcps_acquisition_test.cc"
#include "gnss_block/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc"
//#include "gnss_block/gps_l1_ca_pcps_multithread_acquisition_gsoc2013_test.cc"
#if OPENCL_BLOCKS_TEST
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git
More information about the pkg-hamradio-commits
mailing list