mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-06-25 22:43:14 +00:00
The FPGA acquisition test source file uses floating point format.
This commit is contained in:
parent
c9ac1c10db
commit
71a0f4fcdc
|
@ -29,12 +29,8 @@
|
||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "fpga_switch.h"
|
|
||||||
|
|
||||||
#include <pthread.h> // for pthread stuff
|
|
||||||
|
|
||||||
|
|
||||||
#include "concurrent_queue.h"
|
#include "concurrent_queue.h"
|
||||||
|
#include "fpga_switch.h"
|
||||||
#include "gnss_block_factory.h"
|
#include "gnss_block_factory.h"
|
||||||
#include "gnss_block_interface.h"
|
#include "gnss_block_interface.h"
|
||||||
#include "gnss_sdr_valve.h"
|
#include "gnss_sdr_valve.h"
|
||||||
|
@ -51,9 +47,11 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <cmath> // for abs, pow, floor
|
||||||
#include <fcntl.h> // for O_WRONLY
|
#include <fcntl.h> // for O_WRONLY
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <pthread.h> // for pthread stuff
|
||||||
#ifdef GR_GREATER_38
|
#ifdef GR_GREATER_38
|
||||||
#include <gnuradio/analog/sig_source.h>
|
#include <gnuradio/analog/sig_source.h>
|
||||||
#else
|
#else
|
||||||
|
@ -115,6 +113,9 @@ GpsL1CaPcpsAcquisitionTestFpga::GpsL1CaPcpsAcquisitionTestFpga()
|
||||||
|
|
||||||
void* handler_DMA_acq_test(void* arguments)
|
void* handler_DMA_acq_test(void* arguments)
|
||||||
{
|
{
|
||||||
|
const float MAX_SAMPLE_VALUE = 0.097781330347061;
|
||||||
|
const int DMA_BITS_PER_SAMPLE = 8;
|
||||||
|
const float DMA_SCALING_FACTOR = (pow(2, DMA_BITS_PER_SAMPLE - 1) - 1) / MAX_SAMPLE_VALUE;
|
||||||
const int MAX_INPUT_SAMPLES_TOTAL = 16384;
|
const int MAX_INPUT_SAMPLES_TOTAL = 16384;
|
||||||
|
|
||||||
auto* args = (struct DMA_handler_args_acq_test*)arguments;
|
auto* args = (struct DMA_handler_args_acq_test*)arguments;
|
||||||
|
@ -123,8 +124,7 @@ void* handler_DMA_acq_test(void* arguments)
|
||||||
int32_t skip_used_samples = args->skip_used_samples;
|
int32_t skip_used_samples = args->skip_used_samples;
|
||||||
int32_t nsamples_tx = args->nsamples_tx;
|
int32_t nsamples_tx = args->nsamples_tx;
|
||||||
|
|
||||||
std::vector<int8_t> input_samples(MAX_INPUT_SAMPLES_TOTAL * 2);
|
std::vector<float> input_samples(MAX_INPUT_SAMPLES_TOTAL * 2);
|
||||||
std::vector<int8_t> input_samples2(MAX_INPUT_SAMPLES_TOTAL * 2);
|
|
||||||
std::vector<int8_t> input_samples_dma(MAX_INPUT_SAMPLES_TOTAL * 2 * 2);
|
std::vector<int8_t> input_samples_dma(MAX_INPUT_SAMPLES_TOTAL * 2 * 2);
|
||||||
bool file_completed = false;
|
bool file_completed = false;
|
||||||
int32_t nsamples_remaining;
|
int32_t nsamples_remaining;
|
||||||
|
@ -193,7 +193,7 @@ void* handler_DMA_acq_test(void* arguments)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 2 bytes per complex sample
|
// 2 bytes per complex sample
|
||||||
infile.read(reinterpret_cast<char *>(input_samples.data()), nsamples_block_size * 2);
|
infile.read(reinterpret_cast<char *>(input_samples.data()), nsamples_block_size * 2 * sizeof(float));
|
||||||
}
|
}
|
||||||
catch (const std::ifstream::failure &e)
|
catch (const std::ifstream::failure &e)
|
||||||
{
|
{
|
||||||
|
@ -209,14 +209,14 @@ void* handler_DMA_acq_test(void* arguments)
|
||||||
input_samples_dma[dma_index] = 0;
|
input_samples_dma[dma_index] = 0;
|
||||||
input_samples_dma[dma_index + 1] = 0;
|
input_samples_dma[dma_index + 1] = 0;
|
||||||
// channel 0 (queue 0) -> E1/L1
|
// channel 0 (queue 0) -> E1/L1
|
||||||
input_samples_dma[dma_index + 2] = input_samples[index0];
|
input_samples_dma[dma_index + 2] = static_cast<int8_t>(input_samples[index0]*DMA_SCALING_FACTOR);
|
||||||
input_samples_dma[dma_index + 3] = input_samples[index0 + 1];
|
input_samples_dma[dma_index + 3] = static_cast<int8_t>(input_samples[index0 + 1]*DMA_SCALING_FACTOR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// channel 1 (queue 1) -> E5/L5
|
// channel 1 (queue 1) -> E5/L5
|
||||||
input_samples_dma[dma_index] = input_samples[index0]/16;
|
input_samples_dma[dma_index] = static_cast<int8_t>(input_samples[index0]*DMA_SCALING_FACTOR);
|
||||||
input_samples_dma[dma_index + 1] = input_samples[index0 + 1];
|
input_samples_dma[dma_index + 1] = static_cast<int8_t>(input_samples[index0 + 1]*DMA_SCALING_FACTOR);
|
||||||
// channel 0 (queue 0) -> E1/L1
|
// channel 0 (queue 0) -> E1/L1
|
||||||
input_samples_dma[dma_index + 2] = 0;
|
input_samples_dma[dma_index + 2] = 0;
|
||||||
input_samples_dma[dma_index + 3] = 0;
|
input_samples_dma[dma_index + 3] = 0;
|
||||||
|
@ -385,8 +385,6 @@ bool GpsL1CaPcpsAcquisitionTestFpga::acquire_signal()
|
||||||
std::chrono::duration<double> elapsed_seconds;
|
std::chrono::duration<double> elapsed_seconds;
|
||||||
start = std::chrono::system_clock::now();
|
start = std::chrono::system_clock::now();
|
||||||
|
|
||||||
bool start_msg = true;
|
|
||||||
|
|
||||||
nsamples_to_transfer = static_cast<unsigned int>(std::round(static_cast<double>(BASEBAND_SAMPLING_FREQ) / (GPS_L1_CA_CODE_RATE_CPS / GPS_L1_CA_CODE_LENGTH_CHIPS)));
|
nsamples_to_transfer = static_cast<unsigned int>(std::round(static_cast<double>(BASEBAND_SAMPLING_FREQ) / (GPS_L1_CA_CODE_RATE_CPS / GPS_L1_CA_CODE_LENGTH_CHIPS)));
|
||||||
|
|
||||||
unsigned int PRN = SV_ID;
|
unsigned int PRN = SV_ID;
|
||||||
|
@ -410,14 +408,6 @@ bool GpsL1CaPcpsAcquisitionTestFpga::acquire_signal()
|
||||||
std::cout << "ERROR cannot create acquisition Process" << std::endl;
|
std::cout << "ERROR cannot create acquisition Process" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start_msg == true)
|
|
||||||
{
|
|
||||||
//std::cout << "Reading external signal file: " << FLAGS_signal_file << std::endl;
|
|
||||||
std::cout << "Searching for " << System_and_Signal << " Satellites..." << std::endl;
|
|
||||||
std::cout << "[";
|
|
||||||
start_msg = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait to give time for the acquisition thread to set up the acquisition HW accelerator in the FPGA
|
// wait to give time for the acquisition thread to set up the acquisition HW accelerator in the FPGA
|
||||||
usleep(1000000);
|
usleep(1000000);
|
||||||
|
|
||||||
|
@ -437,31 +427,10 @@ bool GpsL1CaPcpsAcquisitionTestFpga::acquire_signal()
|
||||||
|
|
||||||
if (acquisition_successful)
|
if (acquisition_successful)
|
||||||
{
|
{
|
||||||
std::cout << " " << PRN << " ";
|
|
||||||
|
|
||||||
gnss_synchro_vec.push_back(tmp_gnss_synchro);
|
gnss_synchro_vec.push_back(tmp_gnss_synchro);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout << " . ";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout.flush();
|
// report the elapsed time
|
||||||
|
|
||||||
|
|
||||||
std::cout << "]" << std::endl;
|
|
||||||
std::cout << "-------------------------------------------\n";
|
|
||||||
|
|
||||||
for (auto& x : gnss_synchro_vec)
|
|
||||||
{
|
|
||||||
std::cout << "DETECTED SATELLITE " << System_and_Signal
|
|
||||||
<< " PRN: " << x.PRN
|
|
||||||
<< " with Doppler: " << x.Acq_doppler_hz
|
|
||||||
<< " [Hz], code phase: " << x.Acq_delay_samples
|
|
||||||
<< " [samples] at signal SampleStamp " << x.Acq_samplestamp_samples << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// report the elapsed time
|
|
||||||
end = std::chrono::system_clock::now();
|
end = std::chrono::system_clock::now();
|
||||||
elapsed_seconds = end - start;
|
elapsed_seconds = end - start;
|
||||||
std::cout << "Total signal acquisition run time "
|
std::cout << "Total signal acquisition run time "
|
||||||
|
@ -496,7 +465,7 @@ void GpsL1CaPcpsAcquisitionTestFpga::init()
|
||||||
// to the L5/E5a frequency band in order to avoid the L1/E1 factor :4 downsampling filter
|
// to the L5/E5a frequency band in order to avoid the L1/E1 factor :4 downsampling filter
|
||||||
config->set_property("Acquisition.downsampling_factor", "1");
|
config->set_property("Acquisition.downsampling_factor", "1");
|
||||||
config->set_property("Acquisition.select_queue_Fpga", "1");
|
config->set_property("Acquisition.select_queue_Fpga", "1");
|
||||||
|
config->set_property("Acquisition.total_block_exp", "12");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(GpsL1CaPcpsAcquisitionTestFpga, ValidationOfResults)
|
TEST_F(GpsL1CaPcpsAcquisitionTestFpga, ValidationOfResults)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user