init frame parms ue sa
This commit is contained in:
@@ -106,6 +106,40 @@ nr_bandentry_t nr_bandtable[] = {
|
|||||||
{261,27500040,28350000,27500040,28350000, 2,2070833, 120}
|
{261,27500040,28350000,27500040,28350000, 2,2070833, 120}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint16_t get_band(uint64_t downlink_frequency, int32_t delta_duplex)
|
||||||
|
{
|
||||||
|
const uint64_t dl_freq_khz = downlink_frequency / 1000;
|
||||||
|
const int32_t delta_duplex_khz = delta_duplex / 1000;
|
||||||
|
|
||||||
|
uint64_t center_freq_diff_khz = 999999999999999999; // 2^64
|
||||||
|
uint16_t current_band = 0;
|
||||||
|
|
||||||
|
for (int ind = 0; ind < nr_bandtable_size; ind++) {
|
||||||
|
|
||||||
|
if (dl_freq_khz < nr_bandtable[ind].dl_min || dl_freq_khz > nr_bandtable[ind].dl_max)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int32_t current_offset_khz = nr_bandtable[ind].ul_min - nr_bandtable[ind].dl_min;
|
||||||
|
|
||||||
|
if (current_offset_khz != delta_duplex_khz)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
uint64_t center_frequency_khz = (nr_bandtable[ind].dl_max + nr_bandtable[ind].dl_min) / 2;
|
||||||
|
|
||||||
|
if (abs(dl_freq_khz - center_frequency_khz) < center_freq_diff_khz){
|
||||||
|
current_band = nr_bandtable[ind].band;
|
||||||
|
center_freq_diff_khz = abs(dl_freq_khz - center_frequency_khz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("DL frequency %"PRIu64": band %d, UL frequency %"PRIu64"\n",
|
||||||
|
downlink_frequency, current_band, downlink_frequency+delta_duplex);
|
||||||
|
|
||||||
|
AssertFatal(current_band != 0, "Can't find EUTRA band for frequency %"PRIu64" and duplex_spacing %u\n", downlink_frequency, delta_duplex);
|
||||||
|
|
||||||
|
return current_band;
|
||||||
|
}
|
||||||
|
|
||||||
const size_t nr_bandtable_size = sizeof(nr_bandtable) / sizeof(nr_bandentry_t);
|
const size_t nr_bandtable_size = sizeof(nr_bandtable) / sizeof(nr_bandentry_t);
|
||||||
|
|
||||||
int NRRIV2BW(int locationAndBandwidth,int N_RB) {
|
int NRRIV2BW(int locationAndBandwidth,int N_RB) {
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ typedef struct nr_bandentry_s {
|
|||||||
extern const size_t nr_bandtable_size;
|
extern const size_t nr_bandtable_size;
|
||||||
extern nr_bandentry_t nr_bandtable[];
|
extern nr_bandentry_t nr_bandtable[];
|
||||||
|
|
||||||
|
uint16_t get_band(uint64_t downlink_frequency, int32_t delta_duplex);
|
||||||
int NRRIV2BW(int locationAndBandwidth,int N_RB);
|
int NRRIV2BW(int locationAndBandwidth,int N_RB);
|
||||||
int NRRIV2PRBOFFSET(int locationAndBandwidth,int N_RB);
|
int NRRIV2PRBOFFSET(int locationAndBandwidth,int N_RB);
|
||||||
int PRBalloc_to_locationandbandwidth0(int NPRB,int RBstart,int BWPsize);
|
int PRBalloc_to_locationandbandwidth0(int NPRB,int RBstart,int BWPsize);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
||||||
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
||||||
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
||||||
|
#define CONFIG_HLP_ULOFF "Set the uplink frequnecy offset for all component carriers\n"
|
||||||
#define CONFIG_HLP_CHOFF "Channel id offset\n"
|
#define CONFIG_HLP_CHOFF "Channel id offset\n"
|
||||||
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
||||||
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
||||||
|
|||||||
@@ -438,6 +438,9 @@ int main( int argc, char **argv ) {
|
|||||||
|
|
||||||
set_options(CC_id, UE[CC_id]);
|
set_options(CC_id, UE[CC_id]);
|
||||||
|
|
||||||
|
if (get_softmodem_params()->sa)
|
||||||
|
nr_init_frame_parms_ue_sa(&UE[CC_id]->frame_parms,downlink_frequency[CC_id][0],uplink_frequency_offset[CC_id][0]);
|
||||||
|
else{
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||||
if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL)
|
if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL)
|
||||||
mac->if_module->phy_config_request(&mac->phy_config);
|
mac->if_module->phy_config_request(&mac->phy_config);
|
||||||
@@ -445,6 +448,7 @@ int main( int argc, char **argv ) {
|
|||||||
fapi_nr_config_request_t *nrUE_config = &UE[CC_id]->nrUE_config;
|
fapi_nr_config_request_t *nrUE_config = &UE[CC_id]->nrUE_config;
|
||||||
|
|
||||||
nr_init_frame_parms_ue(&UE[CC_id]->frame_parms, nrUE_config, *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]);
|
nr_init_frame_parms_ue(&UE[CC_id]->frame_parms, nrUE_config, *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]);
|
||||||
|
}
|
||||||
|
|
||||||
init_symbol_rotation(&UE[CC_id]->frame_parms);
|
init_symbol_rotation(&UE[CC_id]->frame_parms);
|
||||||
init_nr_ue_vars(UE[CC_id], 0, abstraction_flag);
|
init_nr_ue_vars(UE[CC_id], 0, abstraction_flag);
|
||||||
|
|||||||
@@ -56,7 +56,8 @@
|
|||||||
{"ue-fo-compensation", CONFIG_HLP_UEFO, PARAMFLAG_BOOL, iptr:&(UE->UE_fo_compensation), defintval:0, TYPE_INT, 0}, \
|
{"ue-fo-compensation", CONFIG_HLP_UEFO, PARAMFLAG_BOOL, iptr:&(UE->UE_fo_compensation), defintval:0, TYPE_INT, 0}, \
|
||||||
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
|
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
|
||||||
{"A" , CONFIG_HLP_TADV, 0, iptr:&(UE->timing_advance), defintval:0, TYPE_INT, 0}, \
|
{"A" , CONFIG_HLP_TADV, 0, iptr:&(UE->timing_advance), defintval:0, TYPE_INT, 0}, \
|
||||||
{"C" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:DEFAULT_DLF,TYPE_UINT64,0}, \
|
{"D" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:DEFAULT_DLF,TYPE_UINT64,0}, \
|
||||||
|
{"U" , CONFIG_HLP_ULOFF, 0, iptr:&(uplink_frequency_offset[0][0]), defuintval:0, TYPE_INT, 0}, \
|
||||||
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, u8ptr:&(fp->threequarter_fs), defintval:0, TYPE_UINT8, 0}, \
|
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, u8ptr:&(fp->threequarter_fs), defintval:0, TYPE_UINT8, 0}, \
|
||||||
{"m" , CONFIG_HLP_MUSSB, 0, u8ptr:&(fp->numerology_index), defintval:0, TYPE_UINT8, 0}, \
|
{"m" , CONFIG_HLP_MUSSB, 0, u8ptr:&(fp->numerology_index), defintval:0, TYPE_UINT8, 0}, \
|
||||||
{"r" , CONFIG_HLP_PRB, 0, iptr:&(fp->N_RB_DL), defintval:106, TYPE_UINT, 0}, \
|
{"r" , CONFIG_HLP_PRB, 0, iptr:&(fp->N_RB_DL), defintval:106, TYPE_UINT, 0}, \
|
||||||
|
|||||||
@@ -46,42 +46,6 @@
|
|||||||
|
|
||||||
#include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
|
#include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
|
||||||
|
|
||||||
static
|
|
||||||
uint16_t get_band(uint64_t downlink_frequency, int32_t delta_duplex)
|
|
||||||
{
|
|
||||||
const uint64_t dl_freq_khz = downlink_frequency / 1000;
|
|
||||||
const int32_t delta_duplex_khz = delta_duplex / 1000;
|
|
||||||
|
|
||||||
uint64_t center_freq_diff_khz = 999999999999999999; // 2^64
|
|
||||||
uint16_t current_band = 0;
|
|
||||||
|
|
||||||
for (int ind = 0; ind < nr_bandtable_size; ind++) {
|
|
||||||
|
|
||||||
LOG_D(PHY, "Scanning band %d, dl_min %"PRIu64", ul_min %"PRIu64"\n", nr_bandtable[ind].band, nr_bandtable[ind].dl_min, nr_bandtable[ind].ul_min);
|
|
||||||
|
|
||||||
if (dl_freq_khz < nr_bandtable[ind].dl_min || dl_freq_khz > nr_bandtable[ind].dl_max)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
int32_t current_offset_khz = nr_bandtable[ind].ul_min - nr_bandtable[ind].dl_min;
|
|
||||||
|
|
||||||
if (current_offset_khz != delta_duplex_khz)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
uint64_t center_frequency_khz = (nr_bandtable[ind].dl_max + nr_bandtable[ind].dl_min) / 2;
|
|
||||||
|
|
||||||
if (abs(dl_freq_khz - center_frequency_khz) < center_freq_diff_khz){
|
|
||||||
current_band = nr_bandtable[ind].band;
|
|
||||||
center_freq_diff_khz = abs(dl_freq_khz - center_frequency_khz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_I(PHY, "DL frequency %"PRIu64": band %d, UL frequency %"PRIu64"\n",
|
|
||||||
downlink_frequency, current_band, downlink_frequency+delta_duplex);
|
|
||||||
|
|
||||||
AssertFatal(current_band != 0, "Can't find EUTRA band for frequency %"PRIu64" and duplex_spacing %u\n", downlink_frequency, delta_duplex);
|
|
||||||
|
|
||||||
return current_band;
|
|
||||||
}
|
|
||||||
|
|
||||||
int l1_north_init_gNB() {
|
int l1_north_init_gNB() {
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "phy_init.h"
|
#include "phy_init.h"
|
||||||
|
#include "common/utils/nr/nr_common.h"
|
||||||
#include "common/utils/LOG/log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
|
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||||
|
|
||||||
@@ -27,6 +28,18 @@
|
|||||||
uint32_t nr_subcarrier_spacing[MAX_NUM_SUBCARRIER_SPACING] = {15e3, 30e3, 60e3, 120e3, 240e3};
|
uint32_t nr_subcarrier_spacing[MAX_NUM_SUBCARRIER_SPACING] = {15e3, 30e3, 60e3, 120e3, 240e3};
|
||||||
uint16_t nr_slots_per_subframe[MAX_NUM_SUBCARRIER_SPACING] = {1, 2, 4, 8, 16};
|
uint16_t nr_slots_per_subframe[MAX_NUM_SUBCARRIER_SPACING] = {1, 2, 4, 8, 16};
|
||||||
|
|
||||||
|
void set_Lmax(NR_DL_FRAME_PARMS *fp) {
|
||||||
|
// definition of Lmax according to ts 38.213 section 4.1
|
||||||
|
if (fp->dl_CarrierFreq < 6e9) {
|
||||||
|
if(fp->frame_type && (fp->ssb_type==2))
|
||||||
|
fp->Lmax = (fp->dl_CarrierFreq < 2.4e9)? 4 : 8;
|
||||||
|
else
|
||||||
|
fp->Lmax = (fp->dl_CarrierFreq < 3e9)? 4 : 8;
|
||||||
|
} else {
|
||||||
|
fp->Lmax = 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp)
|
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -224,15 +237,7 @@ int nr_init_frame_parms(nfapi_nr_config_request_scf_t* cfg,
|
|||||||
|
|
||||||
fp->Ncp = Ncp;
|
fp->Ncp = Ncp;
|
||||||
|
|
||||||
// definition of Lmax according to ts 38.213 section 4.1
|
set_Lmax(fp);
|
||||||
if (fp->dl_CarrierFreq < 6e9) {
|
|
||||||
if(fp->frame_type && (fp->ssb_type==2))
|
|
||||||
fp->Lmax = (fp->dl_CarrierFreq < 2.4e9)? 4 : 8;
|
|
||||||
else
|
|
||||||
fp->Lmax = (fp->dl_CarrierFreq < 3e9)? 4 : 8;
|
|
||||||
} else {
|
|
||||||
fp->Lmax = 64;
|
|
||||||
}
|
|
||||||
|
|
||||||
fp->N_ssb = 0;
|
fp->N_ssb = 0;
|
||||||
int num_tx_ant = cfg->carrier_config.num_tx_ant.value;
|
int num_tx_ant = cfg->carrier_config.num_tx_ant.value;
|
||||||
@@ -316,15 +321,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
|
|||||||
|
|
||||||
fp->ssb_start_subcarrier = (12 * config->ssb_table.ssb_offset_point_a + sco);
|
fp->ssb_start_subcarrier = (12 * config->ssb_table.ssb_offset_point_a + sco);
|
||||||
|
|
||||||
// definition of Lmax according to ts 38.213 section 4.1
|
set_Lmax(fp);
|
||||||
if (fp->dl_CarrierFreq < 6e9) {
|
|
||||||
if(fp->frame_type && (fp->ssb_type==2))
|
|
||||||
fp->Lmax = (fp->dl_CarrierFreq < 2.4e9)? 4 : 8;
|
|
||||||
else
|
|
||||||
fp->Lmax = (fp->dl_CarrierFreq < 3e9)? 4 : 8;
|
|
||||||
} else {
|
|
||||||
fp->Lmax = 64;
|
|
||||||
}
|
|
||||||
|
|
||||||
fp->L_ssb = (((uint64_t) config->ssb_table.ssb_mask_list[0].ssb_mask)<<32) | config->ssb_table.ssb_mask_list[1].ssb_mask;
|
fp->L_ssb = (((uint64_t) config->ssb_table.ssb_mask_list[0].ssb_mask)<<32) | config->ssb_table.ssb_mask_list[1].ssb_mask;
|
||||||
|
|
||||||
@@ -335,6 +332,44 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_init_frame_parms_ue_sa(NR_DL_FRAME_PARMS *frame_parms, uint64_t downlink_frequency, int32_t delta_duplex) {
|
||||||
|
|
||||||
|
LOG_I(PHY,"SA init parameters. DL freq %lu UL offset %d SSB numerology %d N_RB_DL %d\n",
|
||||||
|
downlink_frequency,
|
||||||
|
delta_duplex,
|
||||||
|
frame_parms->numerology_index,
|
||||||
|
frame_parms->N_RB_DL);
|
||||||
|
|
||||||
|
frame_parms->dl_CarrierFreq = downlink_frequency;
|
||||||
|
frame_parms->ul_CarrierFreq = downlink_frequency + delta_duplex;
|
||||||
|
frame_parms->freq_range = (frame_parms->dl_CarrierFreq < 6e9)? nr_FR1 : nr_FR2;
|
||||||
|
frame_parms->N_RB_UL = frame_parms->N_RB_UL;
|
||||||
|
|
||||||
|
frame_parms->nr_band = get_band(downlink_frequency, delta_duplex);
|
||||||
|
frame_parms->frame_type = get_frame_type(frame_parms->nr_band, frame_parms->numerology_index);
|
||||||
|
|
||||||
|
frame_parms->Ncp = NORMAL;
|
||||||
|
set_scs_parameters(frame_parms, frame_parms->numerology_index, frame_parms->N_RB_DL);
|
||||||
|
set_Lmax(frame_parms);
|
||||||
|
|
||||||
|
frame_parms->slots_per_frame = 10* frame_parms->slots_per_subframe;
|
||||||
|
frame_parms->symbols_per_slot = ((frame_parms->Ncp == NORMAL)? 14 : 12); // to redefine for different slot formats
|
||||||
|
frame_parms->samples_per_subframe_wCP = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_slot * frame_parms->slots_per_subframe;
|
||||||
|
frame_parms->samples_per_frame_wCP = 10 * frame_parms->samples_per_subframe_wCP;
|
||||||
|
frame_parms->samples_per_slot_wCP = frame_parms->symbols_per_slot*frame_parms->ofdm_symbol_size;
|
||||||
|
frame_parms->samples_per_slotN0 = (frame_parms->nb_prefix_samples + frame_parms->ofdm_symbol_size) * frame_parms->symbols_per_slot;
|
||||||
|
frame_parms->samples_per_slot0 = frame_parms->nb_prefix_samples0 + ((frame_parms->symbols_per_slot-1)*frame_parms->nb_prefix_samples) + (frame_parms->symbols_per_slot*frame_parms->ofdm_symbol_size);
|
||||||
|
frame_parms->samples_per_subframe = (frame_parms->nb_prefix_samples0 + frame_parms->ofdm_symbol_size) * 2 +
|
||||||
|
(frame_parms->nb_prefix_samples + frame_parms->ofdm_symbol_size) * (frame_parms->symbols_per_slot * frame_parms->slots_per_subframe - 2);
|
||||||
|
frame_parms->get_samples_per_slot = &get_samples_per_slot;
|
||||||
|
frame_parms->get_samples_slot_timestamp = &get_samples_slot_timestamp;
|
||||||
|
frame_parms->samples_per_frame = 10 * frame_parms->samples_per_subframe;
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void nr_dump_frame_parms(NR_DL_FRAME_PARMS *fp)
|
void nr_dump_frame_parms(NR_DL_FRAME_PARMS *fp)
|
||||||
{
|
{
|
||||||
LOG_I(PHY,"fp->scs=%d\n",fp->subcarrier_spacing);
|
LOG_I(PHY,"fp->scs=%d\n",fp->subcarrier_spacing);
|
||||||
|
|||||||
@@ -389,12 +389,12 @@ void phy_config_request(PHY_Config_t *phy_config);
|
|||||||
void phy_config_update_sib2_request(PHY_Config_t *phy_config);
|
void phy_config_update_sib2_request(PHY_Config_t *phy_config);
|
||||||
void phy_config_update_sib13_request(PHY_Config_t *phy_config);
|
void phy_config_update_sib13_request(PHY_Config_t *phy_config);
|
||||||
|
|
||||||
|
|
||||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
||||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
||||||
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp);
|
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp);
|
||||||
int nr_init_frame_parms(nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS *frame_parms);
|
int nr_init_frame_parms(nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS *frame_parms);
|
||||||
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms, fapi_nr_config_request_t *config, uint16_t nr_band);
|
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms, fapi_nr_config_request_t *config, uint16_t nr_band);
|
||||||
|
void nr_init_frame_parms_ue_sa(NR_DL_FRAME_PARMS *frame_parms, uint64_t downlink_frequency, int32_t uplink_frequency_offset);
|
||||||
int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
|
int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
|
||||||
void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
|
void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
|
||||||
void init_N_TA_offset(PHY_VARS_NR_UE *ue);
|
void init_N_TA_offset(PHY_VARS_NR_UE *ue);
|
||||||
|
|||||||
Reference in New Issue
Block a user