mirror of https://github.com/PentHertz/srsLTE.git
Merge branch 'next' of github.com:softwareradiosystems/srsLTE into next
This commit is contained in:
commit
15e7d94564
|
@ -494,6 +494,8 @@ typedef struct {
|
||||||
bool sic_pss_enabled;
|
bool sic_pss_enabled;
|
||||||
float rx_gain_offset;
|
float rx_gain_offset;
|
||||||
bool pdsch_csi_enabled;
|
bool pdsch_csi_enabled;
|
||||||
|
uint32_t intra_freq_meas_len_ms;
|
||||||
|
uint32_t intra_freq_meas_period_ms;
|
||||||
} phy_args_t;
|
} phy_args_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ SRSLTE_API void srslte_ringbuffer_reset(srslte_ringbuffer_t *q);
|
||||||
|
|
||||||
SRSLTE_API int srslte_ringbuffer_status(srslte_ringbuffer_t *q);
|
SRSLTE_API int srslte_ringbuffer_status(srslte_ringbuffer_t *q);
|
||||||
|
|
||||||
|
SRSLTE_API int srslte_ringbuffer_space(srslte_ringbuffer_t *q);
|
||||||
|
|
||||||
SRSLTE_API int srslte_ringbuffer_write(srslte_ringbuffer_t *q,
|
SRSLTE_API int srslte_ringbuffer_write(srslte_ringbuffer_t *q,
|
||||||
void *ptr,
|
void *ptr,
|
||||||
int nof_bytes);
|
int nof_bytes);
|
||||||
|
|
|
@ -13,11 +13,10 @@ int srslte_ringbuffer_init(srslte_ringbuffer_t *q, int capacity)
|
||||||
}
|
}
|
||||||
q->active = true;
|
q->active = true;
|
||||||
q->capacity = capacity;
|
q->capacity = capacity;
|
||||||
srslte_ringbuffer_reset(q);
|
|
||||||
|
|
||||||
pthread_mutex_init(&q->mutex, NULL);
|
pthread_mutex_init(&q->mutex, NULL);
|
||||||
pthread_cond_init(&q->cvar, NULL);
|
pthread_cond_init(&q->cvar, NULL);
|
||||||
|
srslte_ringbuffer_reset(q);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +47,11 @@ int srslte_ringbuffer_status(srslte_ringbuffer_t *q)
|
||||||
return q->count;
|
return q->count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int srslte_ringbuffer_space(srslte_ringbuffer_t *q)
|
||||||
|
{
|
||||||
|
return q->capacity - q->count;
|
||||||
|
}
|
||||||
|
|
||||||
int srslte_ringbuffer_write(srslte_ringbuffer_t *q, void *p, int nof_bytes)
|
int srslte_ringbuffer_write(srslte_ringbuffer_t *q, void *p, int nof_bytes)
|
||||||
{
|
{
|
||||||
uint8_t *ptr = (uint8_t*) p;
|
uint8_t *ptr = (uint8_t*) p;
|
||||||
|
|
|
@ -301,9 +301,7 @@ void radio::set_master_clock_rate(double rate)
|
||||||
|
|
||||||
void radio::set_rx_srate(double srate)
|
void radio::set_rx_srate(double srate)
|
||||||
{
|
{
|
||||||
srslte_rf_stop_rx_stream(&rf_device);
|
|
||||||
srslte_rf_set_rx_srate(&rf_device, srate);
|
srslte_rf_set_rx_srate(&rf_device, srate);
|
||||||
srslte_rf_start_rx_stream(&rf_device, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void radio::set_tx_freq(double freq)
|
void radio::set_tx_freq(double freq)
|
||||||
|
|
|
@ -233,8 +233,6 @@ private:
|
||||||
void write(uint32_t tti, cf_t *data, uint32_t nsamples);
|
void write(uint32_t tti, cf_t *data, uint32_t nsamples);
|
||||||
private:
|
private:
|
||||||
void run_thread();
|
void run_thread();
|
||||||
const static int INTRA_FREQ_MEAS_LEN_MS = 20;
|
|
||||||
const static int INTRA_FREQ_MEAS_PERIOD_MS = 200;
|
|
||||||
const static int INTRA_FREQ_MEAS_PRIO = DEFAULT_PRIORITY + 5;
|
const static int INTRA_FREQ_MEAS_PRIO = DEFAULT_PRIORITY + 5;
|
||||||
|
|
||||||
scell_recv scell;
|
scell_recv scell;
|
||||||
|
|
|
@ -63,8 +63,16 @@ public:
|
||||||
void write_trace(std::string filename);
|
void write_trace(std::string filename);
|
||||||
|
|
||||||
int read_ce_abs(float *ce_abs, uint32_t tx_antenna, uint32_t rx_antenna);
|
int read_ce_abs(float *ce_abs, uint32_t tx_antenna, uint32_t rx_antenna);
|
||||||
uint32_t get_cell_nof_ports() {return cell.nof_ports;};
|
uint32_t get_cell_nof_ports() {
|
||||||
uint32_t get_rx_nof_antennas() {return ue_dl.nof_rx_antennas;};
|
if (cell_initiated) {
|
||||||
|
return cell.nof_ports;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
uint32_t get_rx_nof_antennas() {
|
||||||
|
return ue_dl.nof_rx_antennas;
|
||||||
|
};
|
||||||
int read_pdsch_d(cf_t *pdsch_d);
|
int read_pdsch_d(cf_t *pdsch_d);
|
||||||
void start_plot();
|
void start_plot();
|
||||||
|
|
||||||
|
|
|
@ -203,6 +203,14 @@ void parse_args(all_args_t *args, int argc, char *argv[]) {
|
||||||
bpo::value<string>(&args->expert.phy.equalizer_mode)->default_value("mmse"),
|
bpo::value<string>(&args->expert.phy.equalizer_mode)->default_value("mmse"),
|
||||||
"Equalizer mode")
|
"Equalizer mode")
|
||||||
|
|
||||||
|
("expert.intra_freq_meas_len_ms",
|
||||||
|
bpo::value<uint32_t>(&args->expert.phy.intra_freq_meas_len_ms)->default_value(20),
|
||||||
|
"Duration of the intra-frequency neighbour cell measurement in ms.")
|
||||||
|
|
||||||
|
("expert.intra_freq_meas_period_ms",
|
||||||
|
bpo::value<uint32_t>(&args->expert.phy.intra_freq_meas_period_ms)->default_value(200),
|
||||||
|
"Period of intra-frequency neighbour cell measurement in ms. Maximum as per 3GPP is 200 ms.")
|
||||||
|
|
||||||
("expert.cfo_is_doppler",
|
("expert.cfo_is_doppler",
|
||||||
bpo::value<bool>(&args->expert.phy.cfo_is_doppler)->default_value(false),
|
bpo::value<bool>(&args->expert.phy.cfo_is_doppler)->default_value(false),
|
||||||
"Assume detected CFO is doppler and correct the UL in the same direction. If disabled, the CFO is assumed"
|
"Assume detected CFO is doppler and correct the UL in the same direction. If disabled, the CFO is assumed"
|
||||||
|
|
|
@ -1436,11 +1436,11 @@ void phch_recv::intra_measure::init(phch_common *common, rrc_interface_phy *rrc,
|
||||||
receive_enabled = false;
|
receive_enabled = false;
|
||||||
|
|
||||||
// Start scell
|
// Start scell
|
||||||
scell.init(log_h, common->args->sic_pss_enabled, INTRA_FREQ_MEAS_LEN_MS);
|
scell.init(log_h, common->args->sic_pss_enabled, common->args->intra_freq_meas_len_ms);
|
||||||
|
|
||||||
search_buffer = (cf_t*) srslte_vec_malloc(INTRA_FREQ_MEAS_LEN_MS*SRSLTE_SF_LEN_PRB(SRSLTE_MAX_PRB)*sizeof(cf_t));
|
search_buffer = (cf_t*) srslte_vec_malloc(common->args->intra_freq_meas_len_ms*SRSLTE_SF_LEN_PRB(SRSLTE_MAX_PRB)*sizeof(cf_t));
|
||||||
|
|
||||||
if (srslte_ringbuffer_init(&ring_buffer, sizeof(cf_t)*INTRA_FREQ_MEAS_LEN_MS*2*SRSLTE_SF_LEN_PRB(SRSLTE_MAX_PRB))) {
|
if (srslte_ringbuffer_init(&ring_buffer, sizeof(cf_t)*common->args->intra_freq_meas_len_ms*2*SRSLTE_SF_LEN_PRB(SRSLTE_MAX_PRB))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1510,7 +1510,7 @@ void phch_recv::intra_measure::rem_cell(int pci) {
|
||||||
|
|
||||||
void phch_recv::intra_measure::write(uint32_t tti, cf_t *data, uint32_t nsamples) {
|
void phch_recv::intra_measure::write(uint32_t tti, cf_t *data, uint32_t nsamples) {
|
||||||
if (receive_enabled) {
|
if (receive_enabled) {
|
||||||
if ((tti%INTRA_FREQ_MEAS_PERIOD_MS) == 0) {
|
if ((tti%common->args->intra_freq_meas_period_ms) == 0) {
|
||||||
receiving = true;
|
receiving = true;
|
||||||
receive_cnt = 0;
|
receive_cnt = 0;
|
||||||
measure_tti = tti;
|
measure_tti = tti;
|
||||||
|
@ -1522,7 +1522,7 @@ void phch_recv::intra_measure::write(uint32_t tti, cf_t *data, uint32_t nsamples
|
||||||
receiving = false;
|
receiving = false;
|
||||||
} else {
|
} else {
|
||||||
receive_cnt++;
|
receive_cnt++;
|
||||||
if (receive_cnt == INTRA_FREQ_MEAS_LEN_MS) {
|
if (receive_cnt == common->args->intra_freq_meas_len_ms) {
|
||||||
tti_sync.increase();
|
tti_sync.increase();
|
||||||
receiving = false;
|
receiving = false;
|
||||||
}
|
}
|
||||||
|
@ -1541,8 +1541,8 @@ void phch_recv::intra_measure::run_thread()
|
||||||
if (running) {
|
if (running) {
|
||||||
|
|
||||||
// Read data from buffer and find cells in it
|
// Read data from buffer and find cells in it
|
||||||
srslte_ringbuffer_read(&ring_buffer, search_buffer, INTRA_FREQ_MEAS_LEN_MS*current_sflen*sizeof(cf_t));
|
srslte_ringbuffer_read(&ring_buffer, search_buffer, common->args->intra_freq_meas_len_ms*current_sflen*sizeof(cf_t));
|
||||||
int found_cells = scell.find_cells(search_buffer, common->rx_gain_offset, primary_cell, INTRA_FREQ_MEAS_LEN_MS, info);
|
int found_cells = scell.find_cells(search_buffer, common->rx_gain_offset, primary_cell, common->args->intra_freq_meas_len_ms, info);
|
||||||
receiving = false;
|
receiving = false;
|
||||||
|
|
||||||
for (int i=0;i<found_cells;i++) {
|
for (int i=0;i<found_cells;i++) {
|
||||||
|
|
|
@ -418,7 +418,9 @@ void phch_worker::compute_ri(uint8_t *ri, uint8_t *pmi, float *sinr) {
|
||||||
/* If 2 ort more receiving antennas, select RI */
|
/* If 2 ort more receiving antennas, select RI */
|
||||||
float cn = 0.0f;
|
float cn = 0.0f;
|
||||||
srslte_ue_dl_ri_select(&ue_dl, ri, &cn);
|
srslte_ue_dl_ri_select(&ue_dl, ri, &cn);
|
||||||
Debug("TM3 RI select %d layers, κ=%fdB\n", (*ri) + 1, cn);
|
if (ri) {
|
||||||
|
Debug("TM3 RI select %d layers, κ=%fdB\n", (*ri) + 1, cn);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* If only one receiving antenna, force RI for 1 layer */
|
/* If only one receiving antenna, force RI for 1 layer */
|
||||||
if (ri) {
|
if (ri) {
|
||||||
|
|
|
@ -156,7 +156,7 @@ rrc_state_t rrc::get_state() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rrc::is_connected() {
|
bool rrc::is_connected() {
|
||||||
return (RRC_STATE_CONNECTED >= state && state < RRC_STATE_LEAVE_CONNECTED);
|
return (state >= RRC_STATE_CONNECTED && state < RRC_STATE_LEAVE_CONNECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rrc::have_drb() {
|
bool rrc::have_drb() {
|
||||||
|
|
Loading…
Reference in New Issue