mirror of https://github.com/PentHertz/srsLTE.git
Check RSSI sensor before getting in UHD. Overwirte sf_idx in ue_sync only if SSS was detected. Increased 5 Mhz sampling frequency to avoid low-pass filter
This commit is contained in:
parent
d6f27327a9
commit
ba042771ce
|
@ -169,7 +169,7 @@ static float estimate_noise_pilots(srslte_chest_dl_t *q, cf_t *ce, uint32_t port
|
|||
/* Substract noisy pilot estimates */
|
||||
srslte_vec_sub_ccc(q->tmp_noise, q->pilot_estimates, q->tmp_noise, nref);
|
||||
/* Compute average power */
|
||||
float power = sqrt(2)*q->cell.nof_ports*srslte_vec_avg_power_cf(q->tmp_noise, nref);
|
||||
float power = 2*q->cell.nof_ports*srslte_vec_avg_power_cf(q->tmp_noise, nref);
|
||||
return power;
|
||||
}
|
||||
|
||||
|
@ -189,7 +189,7 @@ static float estimate_noise_pss(srslte_chest_dl_t *q, cf_t *input, cf_t *ce)
|
|||
srslte_vec_sub_ccc(q->tmp_pss_noisy, q->tmp_pss, q->tmp_pss_noisy, SRSLTE_PSS_LEN);
|
||||
|
||||
/* Compute average power */
|
||||
float power = 2*q->cell.nof_ports*srslte_vec_avg_power_cf(q->tmp_pss_noisy, SRSLTE_PSS_LEN);
|
||||
float power = sqrt(2)*q->cell.nof_ports*srslte_vec_avg_power_cf(q->tmp_pss_noisy, SRSLTE_PSS_LEN);
|
||||
return power;
|
||||
}
|
||||
|
||||
|
|
|
@ -231,7 +231,7 @@ int srslte_symbol_sz(uint32_t nof_prb) {
|
|||
} else if (nof_prb<=25) {
|
||||
return 384;
|
||||
} else if (nof_prb<=50) {
|
||||
return 640;
|
||||
return 768;
|
||||
} else if (nof_prb<=75) {
|
||||
return 1024;
|
||||
} else if (nof_prb<=100) {
|
||||
|
@ -254,7 +254,7 @@ int srslte_nof_prb(uint32_t symbol_sz)
|
|||
return 15;
|
||||
case 384:
|
||||
return 25;
|
||||
case 640:
|
||||
case 768:
|
||||
return 50;
|
||||
case 1024:
|
||||
return 75;
|
||||
|
|
|
@ -203,14 +203,18 @@ bool rf_uhd_has_rssi(void *h) {
|
|||
}
|
||||
|
||||
float rf_uhd_get_rssi(void *h) {
|
||||
rf_uhd_handler_t *handler = (rf_uhd_handler_t*) h;
|
||||
uhd_sensor_value_handle value;
|
||||
uhd_sensor_value_make_from_realnum(&value, "rssi", 0, "dBm", "%f");
|
||||
uhd_usrp_get_rx_sensor(handler->usrp, "rssi", 0, &value);
|
||||
double val_out;
|
||||
uhd_sensor_value_to_realnum(value, &val_out);
|
||||
uhd_sensor_value_free(&value);
|
||||
return val_out;
|
||||
if (rf_uhd_has_rssi(h)) {
|
||||
rf_uhd_handler_t *handler = (rf_uhd_handler_t*) h;
|
||||
uhd_sensor_value_handle value;
|
||||
uhd_sensor_value_make_from_realnum(&value, "rssi", 0, "dBm", "%f");
|
||||
uhd_usrp_get_rx_sensor(handler->usrp, "rssi", 0, &value);
|
||||
double val_out;
|
||||
uhd_sensor_value_to_realnum(value, &val_out);
|
||||
uhd_sensor_value_free(&value);
|
||||
return val_out;
|
||||
} else {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
int rf_uhd_open(char *args, void **h)
|
||||
|
|
|
@ -294,7 +294,7 @@ int sync_sss(srslte_sync_t *q, cf_t *input, uint32_t peak_pos, srslte_cp_t cp) {
|
|||
/* Make sure we have enough room to find SSS sequence */
|
||||
sss_idx = (int) peak_pos-2*q->fft_size-SRSLTE_CP_LEN(q->fft_size, (SRSLTE_CP_ISNORM(q->cp)?SRSLTE_CP_NORM_LEN:SRSLTE_CP_EXT_LEN));
|
||||
if (sss_idx < 0) {
|
||||
DEBUG("Not enough room to decode CP SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos);
|
||||
DEBUG("Not enough room to decode SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos);
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
DEBUG("Searching SSS around sss_idx: %d, peak_pos: %d\n", sss_idx, peak_pos);
|
||||
|
@ -406,19 +406,19 @@ int srslte_sync_find(srslte_sync_t *q, cf_t *input, uint32_t find_offset, uint32
|
|||
*peak_position = (uint32_t) peak_pos;
|
||||
}
|
||||
|
||||
// Try to detect SSS
|
||||
if (q->sss_en) {
|
||||
// Set an invalid N_id_1 indicating SSS is yet to be detected
|
||||
q->N_id_1 = 1000;
|
||||
|
||||
if (sync_sss(q, input, find_offset + peak_pos, q->cp) < 0) {
|
||||
DEBUG("No space for SSS processing. Frame starts at %d\n", peak_pos);
|
||||
}
|
||||
}
|
||||
|
||||
/* If peak is over threshold, compute CFO and SSS */
|
||||
if (q->peak_value >= q->threshold) {
|
||||
|
||||
// Try to detect SSS
|
||||
if (q->sss_en) {
|
||||
// Set an invalid N_id_1 indicating SSS is yet to be detected
|
||||
q->N_id_1 = 1000;
|
||||
|
||||
if (sync_sss(q, input, find_offset + peak_pos, q->cp) < 0) {
|
||||
DEBUG("No space for SSS processing. Frame starts at %d\n", peak_pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (q->detect_cp) {
|
||||
if (peak_pos + find_offset >= 2*(q->fft_size + SRSLTE_CP_LEN_EXT(q->fft_size))) {
|
||||
srslte_sync_set_cp(q, srslte_sync_detect_cp(q, input, peak_pos + find_offset));
|
||||
|
|
|
@ -330,10 +330,9 @@ static int find_peak_ok(srslte_ue_sync_t *q, cf_t *input_buffer) {
|
|||
static int track_peak_ok(srslte_ue_sync_t *q, uint32_t track_idx) {
|
||||
|
||||
/* Make sure subframe idx is what we expect */
|
||||
if ((q->sf_idx != srslte_sync_get_sf_idx(&q->strack)) && q->decode_sss_on_track) {
|
||||
DEBUG("Warning: Expected SF idx %d but got %d (%d,%g - %d,%g)!\n",
|
||||
q->sf_idx, srslte_sync_get_sf_idx(&q->strack),
|
||||
q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value);
|
||||
if ((q->sf_idx != srslte_sync_get_sf_idx(&q->strack)) && q->decode_sss_on_track && srslte_sync_sss_detected(&q->sfind)) {
|
||||
DEBUG("Warning: Expected SF idx %d but got %d!\n",
|
||||
q->sf_idx, srslte_sync_get_sf_idx(&q->strack));
|
||||
q->sf_idx = srslte_sync_get_sf_idx(&q->strack);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue