7.2 FH: auto-compute FFT size
This commit is contained in:
@@ -791,7 +791,6 @@ Edit the sample OAI gNB configuration file and check following parameters:
|
|||||||
compression
|
compression
|
||||||
* `iq_width_prach`: Width of PRACH IQ samples: if 16, no compression, if <16, applies
|
* `iq_width_prach`: Width of PRACH IQ samples: if 16, no compression, if <16, applies
|
||||||
compression
|
compression
|
||||||
* `fft_size`: size of FFT performed by RU, set to 12 by default
|
|
||||||
* `prach_config`: PRACH-specific configuration
|
* `prach_config`: PRACH-specific configuration
|
||||||
* `eAxC_offset`: PRACH antenna offset
|
* `eAxC_offset`: PRACH antenna offset
|
||||||
* `kbar`: the PRACH guard interval, provided in RU
|
* `kbar`: the PRACH guard interval, provided in RU
|
||||||
|
|||||||
+4
-2
@@ -912,7 +912,7 @@ static void fill_rf_config(RU_t *ru, char *rf_config_file)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_split7_2_config(split7_config_t *split7, const nfapi_nr_config_request_scf_t *config, int slots_per_frame)
|
static void fill_split7_2_config(split7_config_t *split7, const nfapi_nr_config_request_scf_t *config, int slots_per_frame, uint16_t ofdm_symbol_size)
|
||||||
{
|
{
|
||||||
const nfapi_nr_prach_config_t *prach_config = &config->prach_config;
|
const nfapi_nr_prach_config_t *prach_config = &config->prach_config;
|
||||||
const nfapi_nr_tdd_table_t *tdd_table = &config->tdd_table;
|
const nfapi_nr_tdd_table_t *tdd_table = &config->tdd_table;
|
||||||
@@ -934,6 +934,8 @@ static void fill_split7_2_config(split7_config_t *split7, const nfapi_nr_config_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
split7->fftSize = log2(ofdm_symbol_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function maps the RU tx and rx buffers to the available rf chains.
|
/* this function maps the RU tx and rx buffers to the available rf chains.
|
||||||
@@ -1157,7 +1159,7 @@ void *ru_thread( void *param ) {
|
|||||||
nr_dump_frame_parms(fp);
|
nr_dump_frame_parms(fp);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
fill_rf_config(ru, ru->rf_config_file);
|
fill_rf_config(ru, ru->rf_config_file);
|
||||||
fill_split7_2_config(&ru->openair0_cfg.split7, &ru->config, fp->slots_per_frame);
|
fill_split7_2_config(&ru->openair0_cfg.split7, &ru->config, fp->slots_per_frame, fp->ofdm_symbol_size);
|
||||||
|
|
||||||
if(!emulate_rf) {
|
if(!emulate_rf) {
|
||||||
// Start IF device if any
|
// Start IF device if any
|
||||||
|
|||||||
@@ -195,6 +195,8 @@ typedef struct split7_config {
|
|||||||
struct {
|
struct {
|
||||||
symbol_direction_t sym_dir[14];
|
symbol_direction_t sym_dir[14];
|
||||||
} slot_dirs[160];
|
} slot_dirs[160];
|
||||||
|
/*! this is the exponent in 2^X for the FFT size */
|
||||||
|
uint16_t fftSize;
|
||||||
} split7_config_t;
|
} split7_config_t;
|
||||||
|
|
||||||
/*! \brief RF frontend parameters set by application */
|
/*! \brief RF frontend parameters set by application */
|
||||||
|
|||||||
@@ -729,7 +729,7 @@ static bool set_fh_frame_config(const openair0_config_t *oai0, struct xran_frame
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool set_fh_ru_config(const paramdef_t *rup, int nru, struct xran_ru_config *ru_config)
|
static bool set_fh_ru_config(const paramdef_t *rup, uint16_t fftSize, int nru, struct xran_ru_config *ru_config)
|
||||||
{
|
{
|
||||||
ru_config->xranTech = XRAN_RAN_5GNR;
|
ru_config->xranTech = XRAN_RAN_5GNR;
|
||||||
ru_config->xranCat = XRAN_CATEGORY_A;
|
ru_config->xranCat = XRAN_CATEGORY_A;
|
||||||
@@ -740,7 +740,8 @@ static bool set_fh_ru_config(const paramdef_t *rup, int nru, struct xran_ru_conf
|
|||||||
ru_config->iqWidth_PRACH = *gpd(rup, nru, ORAN_RU_CONFIG_IQWIDTH_PRACH)->uptr;
|
ru_config->iqWidth_PRACH = *gpd(rup, nru, ORAN_RU_CONFIG_IQWIDTH_PRACH)->uptr;
|
||||||
AssertFatal(ru_config->iqWidth_PRACH <= 16, "IQ Width for PRACH cannot be > 16!\n");
|
AssertFatal(ru_config->iqWidth_PRACH <= 16, "IQ Width for PRACH cannot be > 16!\n");
|
||||||
ru_config->compMeth_PRACH = ru_config->iqWidth_PRACH < 16 ? XRAN_COMPMETHOD_BLKFLOAT : XRAN_COMPMETHOD_NONE;
|
ru_config->compMeth_PRACH = ru_config->iqWidth_PRACH < 16 ? XRAN_COMPMETHOD_BLKFLOAT : XRAN_COMPMETHOD_NONE;
|
||||||
ru_config->fftSize = *gpd(rup, nru, ORAN_RU_CONFIG_FFT_SIZE)->uptr;
|
AssertFatal(fftSize > 0, "FFT size cannot be 0\n");
|
||||||
|
ru_config->fftSize = fftSize;
|
||||||
ru_config->byteOrder = XRAN_NE_BE_BYTE_ORDER;
|
ru_config->byteOrder = XRAN_NE_BE_BYTE_ORDER;
|
||||||
ru_config->iqOrder = XRAN_I_Q_ORDER;
|
ru_config->iqOrder = XRAN_I_Q_ORDER;
|
||||||
ru_config->xran_max_frame = 0;
|
ru_config->xran_max_frame = 0;
|
||||||
@@ -779,6 +780,7 @@ bool set_fh_config(int ru_idx, int num_rus, const openair0_config_t *oai0, struc
|
|||||||
DevAssert(oai0->rx_freq[0] == oai0->rx_freq[i]);
|
DevAssert(oai0->rx_freq[0] == oai0->rx_freq[i]);
|
||||||
DevAssert(oai0->nr_band > 0);
|
DevAssert(oai0->nr_band > 0);
|
||||||
DevAssert(oai0->nr_scs_for_raster > 0);
|
DevAssert(oai0->nr_scs_for_raster > 0);
|
||||||
|
AssertFatal(oai0->threequarter_fs == 0, "cannot use three-quarter sampling with O-RAN 7.2 split\n");
|
||||||
|
|
||||||
// we simply assume that the loading process provides function to_nrarfcn()
|
// we simply assume that the loading process provides function to_nrarfcn()
|
||||||
// to calculate the ARFCN numbers from frequency. That is not clean, but the
|
// to calculate the ARFCN numbers from frequency. That is not clean, but the
|
||||||
@@ -869,7 +871,7 @@ bool set_fh_config(int ru_idx, int num_rus, const openair0_config_t *oai0, struc
|
|||||||
return false;
|
return false;
|
||||||
if (!set_fh_frame_config(oai0, &fh_config->frame_conf))
|
if (!set_fh_frame_config(oai0, &fh_config->frame_conf))
|
||||||
return false;
|
return false;
|
||||||
if (!set_fh_ru_config(rup, nru, &fh_config->ru_conf))
|
if (!set_fh_ru_config(rup, oai0->split7.fftSize, nru, &fh_config->ru_conf))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
fh_config->bbdev_enc = NULL;
|
fh_config->bbdev_enc = NULL;
|
||||||
|
|||||||
@@ -91,13 +91,11 @@
|
|||||||
|
|
||||||
#define ORAN_RU_CONFIG_IQWIDTH "iq_width"
|
#define ORAN_RU_CONFIG_IQWIDTH "iq_width"
|
||||||
#define ORAN_RU_CONFIG_IQWIDTH_PRACH "iq_width_prach"
|
#define ORAN_RU_CONFIG_IQWIDTH_PRACH "iq_width_prach"
|
||||||
#define ORAN_RU_CONFIG_FFT_SIZE "fft_size"
|
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
#define ORAN_RU_DESC {\
|
#define ORAN_RU_DESC {\
|
||||||
{ORAN_RU_CONFIG_IQWIDTH, "sample IQ width (16=uncompressed)\n", PARAMFLAG_MANDATORY, .u8ptr=NULL, .defuintval=16, TYPE_UINT8, 0}, \
|
{ORAN_RU_CONFIG_IQWIDTH, "sample IQ width (16=uncompressed)\n", PARAMFLAG_MANDATORY, .u8ptr=NULL, .defuintval=16, TYPE_UINT8, 0}, \
|
||||||
{ORAN_RU_CONFIG_IQWIDTH_PRACH, "PRACH sample IQ width (16=uncompressed)\n", PARAMFLAG_MANDATORY, .u8ptr=NULL, .defuintval=16, TYPE_UINT8, 0}, \
|
{ORAN_RU_CONFIG_IQWIDTH_PRACH, "PRACH sample IQ width (16=uncompressed)\n", PARAMFLAG_MANDATORY, .u8ptr=NULL, .defuintval=16, TYPE_UINT8, 0}, \
|
||||||
{ORAN_RU_CONFIG_FFT_SIZE, "Size of FFT at RU\n", PARAMFLAG_MANDATORY, .u8ptr=NULL, .defuintval=12, TYPE_UINT8, 0}, \
|
|
||||||
}
|
}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,6 @@ fhi_72 = {
|
|||||||
ru_config = {
|
ru_config = {
|
||||||
iq_width = 9;
|
iq_width = 9;
|
||||||
iq_width_prach = 9;
|
iq_width_prach = 9;
|
||||||
fft_size = 12;
|
|
||||||
};
|
};
|
||||||
prach_config = {
|
prach_config = {
|
||||||
eAxC_offset = 4;
|
eAxC_offset = 4;
|
||||||
|
|||||||
@@ -288,7 +288,6 @@ fhi_72 = {
|
|||||||
ru_config = {
|
ru_config = {
|
||||||
iq_width = 9;
|
iq_width = 9;
|
||||||
iq_width_prach = 9;
|
iq_width_prach = 9;
|
||||||
fft_size = 12;
|
|
||||||
};
|
};
|
||||||
prach_config = {
|
prach_config = {
|
||||||
eAxC_offset = 4;
|
eAxC_offset = 4;
|
||||||
|
|||||||
@@ -288,7 +288,6 @@ fhi_72 = {
|
|||||||
ru_config = {
|
ru_config = {
|
||||||
iq_width = 9;
|
iq_width = 9;
|
||||||
iq_width_prach = 9;
|
iq_width_prach = 9;
|
||||||
fft_size = 12;
|
|
||||||
};
|
};
|
||||||
prach_config = {
|
prach_config = {
|
||||||
eAxC_offset = 4;
|
eAxC_offset = 4;
|
||||||
|
|||||||
@@ -286,7 +286,6 @@ fhi_72 = {
|
|||||||
ru_config = {
|
ru_config = {
|
||||||
iq_width = 9;
|
iq_width = 9;
|
||||||
iq_width_prach = 9;
|
iq_width_prach = 9;
|
||||||
fft_size = 12;
|
|
||||||
};
|
};
|
||||||
prach_config = {
|
prach_config = {
|
||||||
eAxC_offset = 4;
|
eAxC_offset = 4;
|
||||||
|
|||||||
Reference in New Issue
Block a user