From 67a5e0f0f18c3fbc1530448b6d54d8da1c1dcc27 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 10 Sep 2015 11:42:27 +0200 Subject: [PATCH] Fixed master clock rate for 15 Mhz BW. --- srslte/examples/cell_measurement.c | 27 ++++++++++++--------------- srslte/examples/pdsch_ue.c | 14 +++++--------- srslte/examples/prach_ue.c | 4 ++++ srslte/include/srslte/cuhd/cuhd.h | 3 +++ srslte/lib/cuhd/src/cuhd_imp.cpp | 4 ++++ 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/srslte/examples/cell_measurement.c b/srslte/examples/cell_measurement.c index 78c9001f3..e4f0b08dd 100644 --- a/srslte/examples/cell_measurement.c +++ b/srslte/examples/cell_measurement.c @@ -40,10 +40,7 @@ #include "srslte/cuhd/cuhd.h" #include "srslte/cuhd/cuhd_utils.h" -#define B210_DEFAULT_GAIN 40.0 -#define B210_DEFAULT_GAIN_CORREC 110.0 // Gain of the Rx chain when the gain is set to 40 - -float gain_offset = B210_DEFAULT_GAIN_CORREC; +#define B210_DEFAULT_GAIN_CORREC 100.0 cell_search_cfg_t cell_detect_config = { 5000, // maximum number of frames to receive for MIB decoding @@ -69,7 +66,7 @@ void args_default(prog_args_t *args) { args->force_N_id_2 = -1; // Pick the best args->uhd_args = ""; args->uhd_freq = -1.0; - args->uhd_gain = B210_DEFAULT_GAIN; + args->uhd_gain = 50; } void usage(prog_args_t *args, char *prog) { @@ -188,6 +185,10 @@ int main(int argc, char **argv) { /* set sampling frequency */ int srate = srslte_sampling_freq_hz(cell.nof_prb); if (srate != -1) { + /* Modify master clock rate for 15 Mhz */ + if (cell.nof_prb == 75) { + cuhd_set_master_clock_rate(uhd, 23.04e6); + } cuhd_set_rx_srate(uhd, (double) srate); } else { fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); @@ -279,7 +280,7 @@ int main(int argc, char **argv) { nof_trials++; } else { printf("Decoded SIB1. Payload: "); - srslte_vec_fprint_hex(stdout, data, n);; + srslte_vec_fprint_byte(stdout, data, n/8);; state = MEASURE; } } @@ -293,15 +294,11 @@ int main(int argc, char **argv) { srslte_chest_dl_estimate(&chest, sf_symbols, ce, srslte_ue_sync_get_sfidx(&ue_sync)); - rssi = SRSLTE_VEC_CMA(srslte_vec_avg_power_cf(sf_buffer,SRSLTE_SF_LEN(srslte_symbol_sz(cell.nof_prb))),rssi,nframes); - rssi_utra = SRSLTE_VEC_CMA(srslte_chest_dl_get_rssi(&chest),rssi_utra,nframes); + rssi = SRSLTE_VEC_EMA(srslte_vec_avg_power_cf(sf_buffer,SRSLTE_SF_LEN(srslte_symbol_sz(cell.nof_prb))),rssi,0.05); + rssi_utra = SRSLTE_VEC_EMA(srslte_chest_dl_get_rssi(&chest),rssi_utra,0.05); rsrq = SRSLTE_VEC_EMA(srslte_chest_dl_get_rsrq(&chest),rsrq,0.05); rsrp = SRSLTE_VEC_EMA(srslte_chest_dl_get_rsrp(&chest),rsrp,0.05); snr = SRSLTE_VEC_EMA(srslte_chest_dl_get_snr(&chest),snr,0.05); - // Adjust with USRP gain - rssi += cuhd_get_rx_gain(uhd); - rssi_utra += cuhd_get_rx_gain(uhd); - rsrp += cuhd_get_rx_gain(uhd); nframes++; } @@ -311,9 +308,9 @@ int main(int argc, char **argv) { printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, RSSI: %5.1f dBm, RSSI/ref-symbol: %+5.1f dBm, " "RSRP: %+5.1f dBm, RSRQ: %5.1f dB, SNR: %5.1f dB\r", srslte_ue_sync_get_cfo(&ue_sync)/1000, srslte_ue_sync_get_sfo(&ue_sync)/1000, - 10*log10(rssi*1000)-gain_offset, - 10*log10(rssi_utra*1000)-gain_offset, - 10*log10(rsrp*1000)-gain_offset, + 10*log10(rssi*1000) - cuhd_get_rx_gain(uhd), + 10*log10(rssi_utra*1000)- cuhd_get_rx_gain(uhd), + 10*log10(rsrp*1000)- cuhd_get_rx_gain(uhd), 10*log10(rsrq), 10*log10(snr)); if (srslte_verbose != SRSLTE_VERBOSE_NONE) { printf("\n"); diff --git a/srslte/examples/pdsch_ue.c b/srslte/examples/pdsch_ue.c index 5b4759bce..4c7f7c3dd 100644 --- a/srslte/examples/pdsch_ue.c +++ b/srslte/examples/pdsch_ue.c @@ -323,6 +323,10 @@ int main(int argc, char **argv) { /* set sampling frequency */ int srate = srslte_sampling_freq_hz(cell.nof_prb); if (srate != -1) { + /* Modify master clock rate for 15 Mhz */ + if (cell.nof_prb == 75) { + cuhd_set_master_clock_rate(uhd, 23.04e6); + } cuhd_set_rx_srate(uhd, (double) srate); } else { fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); @@ -408,15 +412,7 @@ int main(int argc, char **argv) { #endif ue_sync.correct_cfo = !prog_args.disable_cfo; - - /* Set high priority */ - struct sched_param param; - param.sched_priority = sched_get_priority_max(SCHED_FIFO); - if (sched_setscheduler(pthread_self(), SCHED_FIFO, ¶m)) { - perror("setscheduler"); - } - - + INFO("\nEntering main loop...\n\n", 0); /* Main loop */ while (!go_exit && (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) { diff --git a/srslte/examples/prach_ue.c b/srslte/examples/prach_ue.c index 6b1929541..80ac8533e 100644 --- a/srslte/examples/prach_ue.c +++ b/srslte/examples/prach_ue.c @@ -344,6 +344,10 @@ cell.nof_ports = 1; /* set sampling frequency */ int srate = srslte_sampling_freq_hz(cell.nof_prb); if (srate != -1) { + /* Modify master clock rate for 15 Mhz */ + if (cell.nof_prb == 75) { + cuhd_set_master_clock_rate(uhd, 23.04e6); + } cuhd_set_rx_srate(uhd, (double) srate); cuhd_set_tx_srate(uhd, (double) srate); } else { diff --git a/srslte/include/srslte/cuhd/cuhd.h b/srslte/include/srslte/cuhd/cuhd.h index cdadb4f09..dceb9029f 100644 --- a/srslte/include/srslte/cuhd/cuhd.h +++ b/srslte/include/srslte/cuhd/cuhd.h @@ -55,6 +55,9 @@ SRSLTE_API void cuhd_flush_buffer(void *h); SRSLTE_API bool cuhd_rx_wait_lo_locked(void *h); +SRSLTE_API void cuhd_set_master_clock_rate(void *h, + double rate); + SRSLTE_API double cuhd_set_rx_srate(void *h, double freq); diff --git a/srslte/lib/cuhd/src/cuhd_imp.cpp b/srslte/lib/cuhd/src/cuhd_imp.cpp index 8a4ccbb9f..c0212f2a2 100644 --- a/srslte/lib/cuhd/src/cuhd_imp.cpp +++ b/srslte/lib/cuhd/src/cuhd_imp.cpp @@ -220,6 +220,10 @@ int cuhd_close(void *h) return 0; } +void cuhd_set_master_clock_rate(void *h, double rate) { + cuhd_handler *handler = static_cast < cuhd_handler * >(h); + handler->usrp->set_master_clock_rate(rate); +} double cuhd_set_rx_srate(void *h, double freq) {