Commit 135104c9 authored by Raghavendra Dinavahi's avatar Raghavendra Dinavahi Committed by Marwan Hammouda

Enabled RX calibration sample offsets in RF simulator on the UE side

parent 6d4de820
......@@ -330,7 +330,7 @@ int16_t cos_fsover8[8] = {2047, 1447, 0, -1448, -2047, -1448, 0,
int16_t cos_3fsover8[8] = {2047, -1448, 0, 1447, -2047, 1447, 0, -1448};
/*! \brief calibration table for BladeRF */
rx_gain_calib_table_t calib_table_fx4[] = {
gain_calib_table_t calib_table_fx4[] = {
{2300000000.0,53.5},
{1880000000.0,57.0},
{816000000.0,73.0},
......
......@@ -134,7 +134,7 @@ typedef struct {
double freq;
//! Offset to be applied to RX gain
double offset;
} rx_gain_calib_table_t;
} gain_calib_table_t;
/*! \brief Clock source types */
typedef enum {
......@@ -229,9 +229,9 @@ typedef struct {
double tune_offset;
//! \brief memory
//! \brief Pointer to Calibration table for RX gains
rx_gain_calib_table_t *rx_gain_calib_table;
gain_calib_table_t *rx_gain_calib_table;
//! \brief Pointer to Calibration table for TX gains
rx_gain_calib_table_t *tx_gain_calib_table;
gain_calib_table_t *tx_gain_calib_table;
//! mode for rxgain (ExpressMIMO2)
rx_gain_t rxg_mode[4];
//! \brief Gain for RX in dB.
......
......@@ -393,7 +393,7 @@ int trx_iris_set_gains(openair0_device *device,
}
/*! \brief Iris RX calibration table */
rx_gain_calib_table_t calib_table_iris[] = {
gain_calib_table_t calib_table_iris[] = {
{3500000000.0, 83},
{2660000000.0, 83},
{2580000000.0, 83},
......
......@@ -298,7 +298,7 @@ int trx_lms_set_freq(openair0_device* device, openair0_config_t *openair0_cfg) {
// 31 = 19 dB => 105 dB total gain @ 2.6 GHz
/*! \brief calibration table for LMSSDR */
// V1.2 board
rx_gain_calib_table_t calib_table_lmssdr_1v2[] = {
gain_calib_table_t calib_table_lmssdr_1v2[] = {
{3500000000.0,44.0}, // on L PAD
{2660000000.0,55.0}, // on L PAD
{2300000000.0,54.0}, // on L PAD
......@@ -306,7 +306,7 @@ rx_gain_calib_table_t calib_table_lmssdr_1v2[] = {
{816000000.0,79.0}, // on W PAD
{-1,0}};
// V1.4 board
rx_gain_calib_table_t calib_table_lmssdr[] = {
gain_calib_table_t calib_table_lmssdr[] = {
{3500000000.0,44.0}, // on H PAD
{2660000000.0,55.0}, // on H PAD
{2300000000.0,54.0}, // on H PAD
......
......@@ -403,7 +403,7 @@ int trx_sodera_stop(int card) {
}
rx_gain_calib_table_t calib_table_sodera[] = {
gain_calib_table_t calib_table_sodera[] = {
{3500000000.0,44.0},
{2660000000.0,49.0},
{2300000000.0,50.0},
......
......@@ -981,7 +981,7 @@ int trx_usrp_stop(openair0_device *device) {
}
/*! \brief USRPB210 RX calibration table */
rx_gain_calib_table_t rx_calib_table_b210[] = {
gain_calib_table_t rx_calib_table_b210[] = {
{3500000000.0,44.0},
{2660000000.0,49.0},
{2300000000.0,50.0},
......@@ -991,7 +991,7 @@ rx_gain_calib_table_t rx_calib_table_b210[] = {
};
/*! \brief USRPB210 RX calibration table */
rx_gain_calib_table_t rx_calib_table_b210_38[] = {
gain_calib_table_t rx_calib_table_b210_38[] = {
{3500000000.0,44.0},
{2660000000.0,49.8},
{2300000000.0,51.0},
......@@ -1001,7 +1001,7 @@ rx_gain_calib_table_t rx_calib_table_b210_38[] = {
};
/*! \brief USRPx310 RX calibration table */
rx_gain_calib_table_t rx_calib_table_x310[] = {
gain_calib_table_t rx_calib_table_x310[] = {
{3500000000.0,73.0},
{2660000000.0,81.0},
{2300000000.0,81.0},
......@@ -1011,7 +1011,7 @@ rx_gain_calib_table_t rx_calib_table_x310[] = {
};
/*! \brief USRPN310 RX calibration table */
rx_gain_calib_table_t rx_calib_table_n310[] = {
gain_calib_table_t rx_calib_table_n310[] = {
{3500000000.0,67.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......@@ -1021,7 +1021,7 @@ rx_gain_calib_table_t rx_calib_table_n310[] = {
};
/*! \brief USRPB210 TX calibration table */
rx_gain_calib_table_t tx_calib_table_b210[] = {
gain_calib_table_t tx_calib_table_b210[] = {
{3500000000.0,0.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......@@ -1031,7 +1031,7 @@ rx_gain_calib_table_t tx_calib_table_b210[] = {
};
/*! \brief USRPB210 TX calibration table */
rx_gain_calib_table_t tx_calib_table_b210_38[] = {
gain_calib_table_t tx_calib_table_b210_38[] = {
{3500000000.0,0.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......@@ -1041,7 +1041,7 @@ rx_gain_calib_table_t tx_calib_table_b210_38[] = {
};
/*! \brief USRPx310 TX calibration table */
rx_gain_calib_table_t tx_calib_table_x310[] = {
gain_calib_table_t tx_calib_table_x310[] = {
{3500000000.0,150.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......@@ -1051,7 +1051,7 @@ rx_gain_calib_table_t tx_calib_table_x310[] = {
};
/*! \brief Empty RX calibration table */
rx_gain_calib_table_t calib_table_none[] = {
gain_calib_table_t calib_table_none[] = {
{3500000000.0,0.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......@@ -1061,7 +1061,7 @@ rx_gain_calib_table_t calib_table_none[] = {
};
/*! \brief USRPN310 TX calibration table */
rx_gain_calib_table_t tx_calib_table_n310[] = {
gain_calib_table_t tx_calib_table_n310[] = {
{3500000000.0,137.0},
{2660000000.0,0.0},
{2300000000.0,0.0},
......
......@@ -149,6 +149,20 @@ static int TO_gNB_flag = 0;
static int TO_UE_flag = 0;
static int TO_wait_flag = 1;
/*! \brief Settings to be used for RF simulator.
Currently assumed to be 53db = 0dbm*/
gain_calib_table_t rx_sample_calibvalues_UErfsim[] = {
{0.0,67.0},
{-1,0}
};
/*! \brief Settings to be used for RF simulator.
Currently assumed to be 53db = 0dbm */
gain_calib_table_t tx_sample_calibvalues_UErfsim[] = {
{0.0,137.0},
{-1,0}
};
static void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
buffer_t *ptr=&bridge->buf[sock];
AssertFatal ( (ptr->circularBuf=(sample_t *) malloc(sampleToByte(CirSize,1))) != NULL, "");
......@@ -1069,6 +1083,58 @@ static int rfsimulator_set_freq(openair0_device *device, openair0_config_t *open
return 0;
}
static int rfsimulator_set_gains(openair0_device *device, openair0_config_t *openair0_cfg, int dont_block) {
double gain = 0;
// calculate tx gain
gain = device->max_tx_gain[0] - openair0_cfg[0].tx_gain[0];
if(gain != device->app_tx_gain[0]) {
// limit to maximum TX gain
if (gain > device->max_tx_gain[0]) {
LOG_E(HW,"TX Gain 0 too high gain:%3.2f, min:%3.2f dB\n",
gain, device->max_tx_gain[0]);
gain = device->max_tx_gain[0];
openair0_cfg[0].tx_gain[0] = 0;
//exit(-1);
} else if (gain < device->min_tx_gain[0]) {
LOG_E(HW,"TX Gain 0 too low gain:%3.2f, min:%3.2f dB\n",
gain, device->min_tx_gain[0]);
gain = device->min_tx_gain[0];
openair0_cfg[0].tx_gain[0] = device->max_tx_gain[0] - device->min_tx_gain[0];
//exit(-1);
}
// updated applied tx gain for UL processing
device->app_tx_gain[0] = gain;
LOG_I(HW, "RFSIM APPLIED TX gain is %3.2f Max: %3.2f, Min: %3.2f, tx_gain:%3.2f\n",
gain, device->max_tx_gain[0], device->min_tx_gain[0], openair0_cfg[0].tx_gain[0]);
}
// Rx gain
//gain = openair0_cfg[0].rx_gain[0] - openair0_cfg[0].rx_gain_offset[0];
gain = openair0_cfg[0].rx_gain[0];
if(gain != device->app_rx_gain[0]) {
// limit to maximum RX gain
if (gain > device->max_rx_gain[0]) {
LOG_E(HW,"RX Gain 0 too high, reduce by %3.2f dB\n",
gain - device->max_rx_gain[0]);
gain = device->max_rx_gain[0];
openair0_cfg[0].rx_gain[0] = 0;
//exit(-1);
} else if (gain < device->min_rx_gain[0]) {
LOG_E(HW,"RX Gain 0 too low gain:%3.2f, min:%3.2f dB\n",
gain, device->min_rx_gain[0]);
gain = device->min_rx_gain[0];
openair0_cfg[0].rx_gain[0] = device->min_rx_gain[0];
//exit(-1);
}
device->app_rx_gain[0] = gain;
LOG_I(HW, "RFSIM APPLIED RX gain is %3.2f Max: %3.2f, Min: %3.2f, rx_gain:%3.2f\n",
gain, device->max_rx_gain[0], device->min_rx_gain[0], openair0_cfg[0].rx_gain[0]);
}
return 0;
}
static int rfsimulator_write_init(openair0_device *device) {
......@@ -1101,6 +1167,15 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
device->trx_read_func = rfsimulator_read;
/* let's pretend to be a b2x0 */
device->type = RFSIMULATOR;
// Do this for UE, in order to test Powercontrol on UE
if (rfsimulator->typeStamp == UE_MAGICDL) {
openair0_cfg[0].rx_gain_calib_table = rx_sample_calibvalues_UErfsim;
openair0_cfg[0].tx_gain_calib_table = tx_sample_calibvalues_UErfsim;
openair0_cfg[0].rx_gain_offset[0] = openair0_cfg[0].rx_gain_calib_table[0].offset;
openair0_cfg[0].tx_gain_offset[0] = openair0_cfg[0].tx_gain_calib_table[0].offset;
device->max_rx_gain[0] = 65.0;
device->max_tx_gain[0] = 65.0;
}
openair0_cfg[0].rx_gain[0] = 0;
device->openair0_cfg=&openair0_cfg[0];
device->priv = rfsimulator;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment