From 0b100620f4355a4a92830b7350ded5bd8a63ce9a Mon Sep 17 00:00:00 2001 From: Raghavendra Dinavahi Date: Thu, 28 Nov 2024 19:45:51 +0100 Subject: [PATCH 1/4] Changed uplink_frequency_offset from int32 to int64, required for NTN-FR2 --- executables/lte-softmodem.c | 2 +- executables/lte-softmodem.h | 2 +- executables/lte-ue.c | 13 ++++++++----- executables/lte-uesoftmodem.c | 2 +- executables/main_nr_ru.c | 2 +- executables/main_ru.c | 2 +- executables/nr-cuup.c | 2 +- executables/nr-softmodem.c | 2 +- executables/nr-uesoftmodem.c | 2 +- executables/softmodem-common.h | 6 +++--- openair1/PHY/TOOLS/calibration_test.c | 2 +- openair1/SIMULATION/NR_PHY/dlschsim.c | 2 +- openair1/SIMULATION/NR_PHY/dlsim.c | 2 +- openair1/SIMULATION/NR_PHY/pbchsim.c | 2 +- openair1/SIMULATION/NR_PHY/prachsim.c | 2 +- openair1/SIMULATION/NR_PHY/psbchsim.c | 2 +- openair1/SIMULATION/NR_PHY/pucchsim.c | 2 +- openair1/SIMULATION/NR_PHY/srssim.c | 2 +- openair1/SIMULATION/NR_PHY/ulschsim.c | 2 +- openair1/SIMULATION/NR_PHY/ulsim.c | 2 +- tests/nr-cu-nrppa/nr-cu-nrppa.c | 2 +- 21 files changed, 30 insertions(+), 27 deletions(-) diff --git a/executables/lte-softmodem.c b/executables/lte-softmodem.c index e2c4144707..0c9fb0884d 100644 --- a/executables/lte-softmodem.c +++ b/executables/lte-softmodem.c @@ -101,7 +101,7 @@ int oai_exit = 0; int NB_UE_INST = 0; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; int UE_scan = 1; int UE_scan_carrier = 0; diff --git a/executables/lte-softmodem.h b/executables/lte-softmodem.h index 6642141526..0d05c9ba9d 100644 --- a/executables/lte-softmodem.h +++ b/executables/lte-softmodem.h @@ -114,7 +114,7 @@ extern uint16_t ue_id_g; extern uint16_t node_number; extern uint64_t downlink_frequency[MAX_NUM_CCs][4]; -extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +extern int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; extern int rx_input_level_dBm; extern openair0_config_t openair0_cfg[MAX_CARDS]; diff --git a/executables/lte-ue.c b/executables/lte-ue.c index 1a187ad51f..8cbf9b903f 100644 --- a/executables/lte-ue.c +++ b/executables/lte-ue.c @@ -437,8 +437,10 @@ static void *UE_thread_synch(void *arg) { printf( "Scanning band %d, dl_min %"PRIu32", ul_min %"PRIu32"\n", current_band, eutra_bands[ind].dl_min,eutra_bands[ind].ul_min); if ((eutra_bands[ind].dl_min <= UE->frame_parms.dl_CarrierFreq) && (eutra_bands[ind].dl_max >= UE->frame_parms.dl_CarrierFreq)) { - for (i=0; i<4; i++) - uplink_frequency_offset[CC_id][i] = eutra_bands[ind].ul_min - eutra_bands[ind].dl_min; + for (i=0; i<4; i++) { + int32_t delta = eutra_bands[ind].ul_min - eutra_bands[ind].dl_min; + uplink_frequency_offset[CC_id][i] = delta; + } found = 1; break; @@ -473,8 +475,8 @@ static void *UE_thread_synch(void *arg) { for (i=0; irf_map.card].rx_num_channels; i++) { downlink_frequency[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[CC_id].dl_min; - uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = - bands_to_scan.band_info[CC_id].ul_min-bands_to_scan.band_info[CC_id].dl_min; + int32_t delta = bands_to_scan.band_info[CC_id].ul_min - bands_to_scan.band_info[CC_id].dl_min; + uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = delta; openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]; openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i]; @@ -517,7 +519,8 @@ static void *UE_thread_synch(void *arg) { for (i=0; irf_map.card].rx_num_channels; i++) { downlink_frequency[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[current_band].dl_min+current_offset; - uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[current_band].ul_min-bands_to_scan.band_info[0].dl_min + current_offset; + int32_t delta = bands_to_scan.band_info[current_band].ul_min - bands_to_scan.band_info[0].dl_min + current_offset; + uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = delta; openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]; openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i]; openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB; diff --git a/executables/lte-uesoftmodem.c b/executables/lte-uesoftmodem.c index 322fecae98..030db0b72f 100644 --- a/executables/lte-uesoftmodem.c +++ b/executables/lte-uesoftmodem.c @@ -92,7 +92,7 @@ unsigned int mmapped_dma=0; UE_MAC_INST *UE_mac_inst = NULL; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; diff --git a/executables/main_nr_ru.c b/executables/main_nr_ru.c index 1aab4e95f6..352102498e 100644 --- a/executables/main_nr_ru.c +++ b/executables/main_nr_ru.c @@ -55,7 +55,7 @@ extern void set_function_spec_param(RU_t *ru); extern void start_NR_RU(); extern void init_NR_RU(configmodule_interface_t *cfg, char *); -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; void nfapi_setmode(nfapi_mode_t nfapi_mode) { diff --git a/executables/main_ru.c b/executables/main_ru.c index 3579c26f7a..6cd48d9b13 100644 --- a/executables/main_ru.c +++ b/executables/main_ru.c @@ -84,7 +84,7 @@ extern void init_RU_proc(RU_t *ru); extern void kill_RU_proc(RU_t *ru); extern void set_function_spec_param(RU_t *ru); -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; void nfapi_setmode(nfapi_mode_t nfapi_mode) { return; } diff --git a/executables/nr-cuup.c b/executables/nr-cuup.c index df2f633d95..661059afaa 100644 --- a/executables/nr-cuup.c +++ b/executables/nr-cuup.c @@ -36,7 +36,7 @@ RAN_CONTEXT_t RC; THREAD_STRUCT thread_struct; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; int oai_exit = 0; instance_t CUuniqInstance = 0; diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c index 938bbeee88..25177bbfc7 100644 --- a/executables/nr-softmodem.c +++ b/executables/nr-softmodem.c @@ -101,7 +101,7 @@ int oai_exit = 0; unsigned int mmapped_dma=0; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; char *uecap_file; runmode_t mode = normal_txrx; diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index df4088a87d..633cc80b3a 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -103,7 +103,7 @@ RAN_CONTEXT_t RC; int oai_exit = 0; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; uint64_t sidelink_frequency[MAX_NUM_CCs][4]; // UE and OAI config variables diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h index 1018716bb7..ee737310c9 100644 --- a/executables/softmodem-common.h +++ b/executables/softmodem-common.h @@ -138,8 +138,8 @@ extern int usrp_tx_thread; {"clock-source", CONFIG_HLP_CLK, 0, .uptr=&CLOCK_SOURCE, .defintval=0, TYPE_UINT, 0}, \ {"time-source", CONFIG_HLP_TME, 0, .uptr=&TIMING_SOURCE, .defintval=0, TYPE_UINT, 0}, \ {"tune-offset", CONFIG_HLP_TUNE_OFFSET, 0, .dblptr=&TUNE_OFFSET, .defintval=0, TYPE_DOUBLE, 0}, \ - {"C" , CONFIG_HLP_DLF, 0, .u64ptr=&(downlink_frequency[0][0]), .defint64val=0, TYPE_UINT64, 0}, \ - {"CO" , CONFIG_HLP_ULF, 0, .iptr=&(uplink_frequency_offset[0][0]), .defintval=0, TYPE_INT, 0}, \ + {"C" , CONFIG_HLP_DLF, 0, .u64ptr=&(downlink_frequency[0][0]), .defuintval=0, TYPE_UINT64, 0}, \ + {"CO" , CONFIG_HLP_ULF, 0, .i64ptr=&(uplink_frequency_offset[0][0]), .defintval=0, TYPE_INT64, 0}, \ {"a" , CONFIG_HLP_CHOFF, 0, .iptr=&CHAIN_OFFSET, .defintval=0, TYPE_INT, 0}, \ {"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, .uptr=&do_forms, .defintval=0, TYPE_UINT, 0}, \ {"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, .iptr=&cpu_meas_enabled, .defintval=0, TYPE_INT, 0}, \ @@ -330,7 +330,7 @@ char *get_softmodem_function(void); #define SOFTMODEM_RTSIGNAL (SIGRTMIN+1) void set_softmodem_sighandler(void); extern uint64_t downlink_frequency[MAX_NUM_CCs][4]; -extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +extern int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; extern int usrp_tx_thread; extern int sf_ahead; extern int oai_exit; diff --git a/openair1/PHY/TOOLS/calibration_test.c b/openair1/PHY/TOOLS/calibration_test.c index 05420672ad..0f5a76183e 100644 --- a/openair1/PHY/TOOLS/calibration_test.c +++ b/openair1/PHY/TOOLS/calibration_test.c @@ -11,7 +11,7 @@ unsigned int mmapped_dma=0; uint32_t timing_advance; int8_t threequarter_fs; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; int cpu_meas_enabled; THREAD_STRUCT thread_struct; uint32_t target_ul_mcs = 9; diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index 6f4282f130..7e45cdd9b6 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -56,7 +56,7 @@ PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; UE_nr_rxtx_proc_t proc; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; uint64_t downlink_frequency[MAX_NUM_CCs][4]; double cpuf; diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index b068936739..73d22650a8 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -104,7 +104,7 @@ const char *__asan_default_options() PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; double cpuf; char *uecap_file; diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 5702be2cf9..9348d5d32b 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -55,7 +55,7 @@ PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; double cpuf; diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index 7966c74375..6f6d7c1102 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -79,7 +79,7 @@ RU_t *ru; double cpuf; //uint8_t nfapi_mode=0; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; uint32_t N_RB_DL = 106; NR_IF_Module_t *NR_IF_Module_init(int Mod_id) { return (NULL); } diff --git a/openair1/SIMULATION/NR_PHY/psbchsim.c b/openair1/SIMULATION/NR_PHY/psbchsim.c index cb78915cbb..6b6784fca9 100644 --- a/openair1/SIMULATION/NR_PHY/psbchsim.c +++ b/openair1/SIMULATION/NR_PHY/psbchsim.c @@ -71,7 +71,7 @@ void get_num_re_dmrs(nfapi_nr_ue_pusch_pdu_t *pusch_pdu, uint8_t *nb_dmrs_re_per } uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; THREAD_STRUCT thread_struct; instance_t DUuniqInstance = 0; instance_t CUuniqInstance = 0; diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c index bfa294a55f..9ddd76e038 100644 --- a/openair1/SIMULATION/NR_PHY/pucchsim.c +++ b/openair1/SIMULATION/NR_PHY/pucchsim.c @@ -53,7 +53,7 @@ THREAD_STRUCT thread_struct; PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; uint64_t downlink_frequency[MAX_NUM_CCs][4]; double cpuf; diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index d68f925374..57c239899f 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -48,7 +48,7 @@ PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; char *uecap_file = NULL; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; double cpuf; uint64_t downlink_frequency[MAX_NUM_CCs][4]; diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c index d15deb4277..93aae9c1d6 100644 --- a/openair1/SIMULATION/NR_PHY/ulschsim.c +++ b/openair1/SIMULATION/NR_PHY/ulschsim.c @@ -55,7 +55,7 @@ THREAD_STRUCT thread_struct; PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; uint64_t downlink_frequency[MAX_NUM_CCs][4]; static softmodem_params_t softmodem_params; diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index da6b901a11..fa8643023f 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -106,7 +106,7 @@ PHY_VARS_gNB *gNB; PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; char *uecap_file; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; double cpuf; //uint8_t nfapi_mode = 0; diff --git a/tests/nr-cu-nrppa/nr-cu-nrppa.c b/tests/nr-cu-nrppa/nr-cu-nrppa.c index de784a3a16..ee8156343f 100644 --- a/tests/nr-cu-nrppa/nr-cu-nrppa.c +++ b/tests/nr-cu-nrppa/nr-cu-nrppa.c @@ -37,7 +37,7 @@ RAN_CONTEXT_t RC; THREAD_STRUCT thread_struct; uint64_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +int64_t uplink_frequency_offset[MAX_NUM_CCs][4]; int oai_exit = 0; int gnb_id; int NB_UE_INST = 1; From 6c5a8aa1fc74159b52e8a51a7b75370150656d44 Mon Sep 17 00:00:00 2001 From: Raghavendra Dinavahi Date: Tue, 3 Mar 2026 17:10:35 +0100 Subject: [PATCH 2/4] Added NTN-FR2 FDD bands defined in release 18. Bandtable modified. NTN-FR2 bands 510, 511, 512 added. TS 38.101-5 v 18.9 defines these 3 FR2-FDD bands for NTN operation. These bands are defined in Ka band range (17.3Ghz - 31Ghz) UL STEPSIZE, UL NOFFS added into band table --- common/utils/nr/nr_common.c | 247 +++++++++--------- common/utils/nr/nr_common.h | 6 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c | 4 +- 3 files changed, 129 insertions(+), 128 deletions(-) diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c index 5fc6a8c1a9..4ed820c03f 100644 --- a/common/utils/nr/nr_common.c +++ b/common/utils/nr/nr_common.c @@ -178,92 +178,97 @@ uint8_t set_ssb_case(int scs, int nr_band) return ssb_case; } -// Table 5.2-1 NR operating bands in FR1 & FR2 (3GPP TS 38.101) (Rel.17) +// Table 5.2-1 NR operating bands in FR1 & FR2 (3GPP TS 38.101) (Rel.18) // Table 5.4.2.3-1 Applicable NR-ARFCN per operating band in FR1 & FR2 (3GPP TS 38.101) // Notes: -// - N_OFFs for bands from 80 to 89 and band 95 is referred to UL // - Frequencies are expressed in KHz -// - col: NR_band ul_min ul_max dl_min dl_max step N_OFFs_DL deltaf_raster -const nr_bandentry_t nr_bandtable[] = {{1, 1920000, 1980000, 2110000, 2170000, 20, 422000, 100}, - {2, 1850000, 1910000, 1930000, 1990000, 20, 386000, 100}, - {3, 1710000, 1785000, 1805000, 1880000, 20, 361000, 100}, - {5, 824000, 849000, 869000, 894000, 20, 173800, 100}, - {7, 2500000, 2570000, 2620000, 2690000, 20, 524000, 100}, - {8, 880000, 915000, 925000, 960000, 20, 185000, 100}, - {12, 699000, 716000, 729000, 746000, 20, 145800, 100}, - {13, 777000, 787000, 746000, 756000, 20, 149200, 100}, - {14, 788000, 798000, 758000, 768000, 20, 151600, 100}, - {18, 815000, 830000, 860000, 875000, 20, 172000, 100}, - {20, 832000, 862000, 791000, 821000, 20, 158200, 100}, - {24, 1627500, 1656500, 1526000, 1536000, 20, 305000, 100}, - {25, 1850000, 1915000, 1930000, 1995000, 20, 386000, 100}, - {26, 814000, 849000, 859000, 894000, 20, 171800, 100}, - {28, 703000, 758000, 758000, 813000, 20, 151600, 100}, - {29, 000, 000, 717000, 728000, 20, 143400, 100}, - {30, 2305000, 2315000, 2350000, 2360000, 20, 470000, 100}, - {34, 2010000, 2025000, 2010000, 2025000, 20, 402000, 100}, - {38, 2570000, 2620000, 2570000, 2630000, 20, 514000, 100}, - {39, 1880000, 1920000, 1880000, 1920000, 20, 376000, 100}, - {40, 2300000, 2400000, 2300000, 2400000, 20, 460000, 100}, - {41, 2496000, 2690000, 2496000, 2690000, 3, 499200, 15}, - {41, 2496000, 2690000, 2496000, 2690000, 6, 499200, 30}, - {46, 5150000, 5925000, 5150000, 5925000, 1, 743334, 15}, - {47, 5855000, 5925000, 5855000, 5925000, 1, 790334, 15}, - {48, 3550000, 3700000, 3550000, 3700000, 1, 636667, 15}, - {48, 3550000, 3700000, 3550000, 3700000, 2, 636668, 30}, - {50, 1432000, 1517000, 1432000, 1517000, 20, 286400, 100}, - {51, 1427000, 1432000, 1427000, 1432000, 20, 285400, 100}, - {53, 2483500, 2495000, 2483500, 2495000, 20, 496700, 100}, - {65, 1920000, 2010000, 2110000, 2200000, 20, 422000, 100}, - {66, 1710000, 1780000, 2110000, 2200000, 20, 422000, 100}, - {67, 000, 000, 738000, 758000, 20, 147600, 100}, - {70, 1695000, 1710000, 1995000, 2020000, 20, 399000, 100}, - {71, 663000, 698000, 617000, 652000, 20, 123400, 100}, - {74, 1427000, 1470000, 1475000, 1518000, 20, 295000, 100}, - {75, 000, 000, 1432000, 1517000, 20, 286400, 100}, - {76, 000, 000, 1427000, 1432000, 20, 285400, 100}, - {77, 3300000, 4200000, 3300000, 4200000, 1, 620000, 15}, - {77, 3300000, 4200000, 3300000, 4200000, 2, 620000, 30}, - {78, 3300000, 3800000, 3300000, 3800000, 1, 620000, 15}, - {78, 3300000, 3800000, 3300000, 3800000, 2, 620000, 30}, - {79, 4400010, 5000000, 4400010, 5000000, 1, 693334, 15}, - {79, 4400010, 5000000, 4400010, 5000000, 2, 693334, 30}, - {80, 1710000, 1785000, 000, 000, 20, 342000, 100}, - {81, 880000, 915000, 000, 000, 20, 176000, 100}, - {82, 832000, 862000, 000, 000, 20, 166400, 100}, - {83, 703000, 748000, 000, 000, 20, 140600, 100}, - {84, 1920000, 1980000, 000, 000, 20, 384000, 100}, - {85, 698000, 716000, 728000, 746000, 20, 145600, 100}, - {86, 1710000, 1785000, 000, 000, 20, 342000, 100}, - {89, 824000, 849000, 000, 000, 20, 342000, 100}, - {90, 2496000, 2690000, 2496000, 2690000, 3, 499200, 15}, - {90, 2496000, 2690000, 2496000, 2690000, 6, 499200, 30}, - {90, 2496000, 2690000, 2496000, 2690000, 20, 499200, 100}, - {91, 832000, 862000, 1427000, 1432000, 20, 285400, 100}, - {92, 832000, 862000, 1432000, 1517000, 20, 286400, 100}, - {93, 880000, 915000, 1427000, 1432000, 20, 285400, 100}, - {94, 880000, 915000, 1432000, 1517000, 20, 286400, 100}, - {95, 2010000, 2025000, 000, 000, 20, 402000, 100}, - {96, 5925000, 7125000, 5925000, 7125000, 1, 795000, 15}, - {100, 874400, 880000, 919400, 925000, 20, 174880, 100}, - {101, 1900000, 1910000, 1900000, 1910000, 20, 380000, 100}, - {102, 5925000, 6425000, 5925000, 6425000, 1, 795000, 15}, - {104, 6425000, 7125000, 6425000, 7125000, 1, 828334, 15}, - {104, 6425000, 7125000, 6425000, 7125000, 2, 828334, 30}, - {254, 1610000, 1626500, 2483500, 2500000, 20, 496700, 100}, - {254, 1610000, 1626500, 2483500, 2500000, 2, 496700, 10}, - {255, 1626500, 1660500, 1525000, 1559000, 20, 305000, 100}, - {255, 1626500, 1660500, 1525000, 1559000, 2, 305000, 10}, - {256, 1980000, 2010000, 2170000, 2200000, 20, 434000, 100}, - {256, 1980000, 2010000, 2170000, 2200000, 2, 434000, 10}, - {257, 26500020, 29500000, 26500020, 29500000, 1, 2054166, 60}, - {257, 26500080, 29500000, 26500080, 29500000, 2, 2054167, 120}, - {258, 24250080, 27500000, 24250080, 27500000, 1, 2016667, 60}, - {258, 24250080, 27500000, 24250080, 27500000, 2, 2016667, 120}, - {260, 37000020, 40000000, 37000020, 40000000, 1, 2229166, 60}, - {260, 37000080, 40000000, 37000080, 40000000, 2, 2229167, 120}, - {261, 27500040, 28350000, 27500040, 28350000, 1, 2070833, 60}, - {261, 27500040, 28350000, 27500040, 28350000, 2, 2070833, 120}}; +// - col: NR_band ul_min ul_max dl_min dl_max ul_stepsize dl_stepsize N_OFFs_UL N_OFFs_DL deltaf_raster +const nr_bandentry_t nr_bandtable[] = {{1, 1920000, 1980000, 2110000, 2170000, 20, 20, 384000, 422000, 100}, + {2, 1850000, 1910000, 1930000, 1990000, 20, 20, 370000, 386000, 100}, + {3, 1710000, 1785000, 1805000, 1880000, 20, 20, 342000, 361000, 100}, + {5, 824000, 849000, 869000, 894000, 20, 20, 164800, 173800, 100}, + {7, 2500000, 2570000, 2620000, 2690000, 20, 20, 500000, 524000, 100}, + {8, 880000, 915000, 925000, 960000, 20, 20, 176000, 185000, 100}, + {12, 699000, 716000, 729000, 746000, 20, 20, 139800, 145800, 100}, + {13, 777000, 787000, 746000, 756000, 20, 20, 155400, 149200, 100}, + {14, 788000, 798000, 758000, 768000, 20, 20, 157600, 151600, 100}, + {18, 815000, 830000, 860000, 875000, 20, 20, 163000, 172000, 100}, + {20, 832000, 862000, 791000, 821000, 20, 20, 166400, 158200, 100}, + {24, 1626500, 1660500, 1525000, 1559000, 20, 20, 325300, 305000, 100}, + {25, 1850000, 1915000, 1930000, 1995000, 20, 20, 370000, 386000, 100}, + {26, 814000, 849000, 859000, 894000, 20, 20, 162800, 171800, 100}, + {28, 703000, 748000, 758000, 803000, 20, 20, 140600, 151600, 100}, + {29, 000, 000, 717000, 728000, 0, 20, 0, 143400, 100}, + {30, 2305000, 2315000, 2350000, 2360000, 20, 20, 461000, 470000, 100}, + {34, 2010000, 2025000, 2010000, 2025000, 20, 20, 402000, 402000, 100}, + {38, 2570000, 2620000, 2570000, 2620000, 20, 20, 514000, 514000, 100}, + {39, 1880000, 1920000, 1880000, 1920000, 20, 20, 376000, 376000, 100}, + {40, 2300000, 2400000, 2300000, 2400000, 20, 20, 460000, 460000, 100}, + {41, 2496000, 2690000, 2496000, 2690000, 3, 3, 499200, 499200, 15}, + {41, 2496000, 2690000, 2496000, 2690000, 6, 6, 499200, 499200, 30}, + {46, 5150000, 5925000, 5150000, 5925000, 1, 1, 743334, 743334, 15}, + {47, 5855000, 5925000, 5855000, 5925000, 1, 1, 790334, 790334, 15}, + {48, 3550000, 3700000, 3550000, 3700000, 1, 1, 636667, 636667, 15}, + {48, 3550000, 3700000, 3550000, 3700000, 2, 2, 636668, 636668, 30}, + {50, 1432000, 1517000, 1432000, 1517000, 20, 20, 286400, 286400, 100}, + {51, 1427000, 1432000, 1427000, 1432000, 20, 20, 285400, 285400, 100}, + {53, 2483500, 2495000, 2483500, 2495000, 20, 20, 496700, 496700, 100}, + {65, 1920000, 2010000, 2110000, 2200000, 20, 20, 384000, 422000, 100}, + {66, 1710000, 1780000, 2110000, 2200000, 20, 20, 342000, 422000, 100}, + {67, 000, 000, 738000, 758000, 0, 20, 0, 147600, 100}, + {70, 1695000, 1710000, 1995000, 2020000, 20, 20, 339000, 399000, 100}, + {71, 663000, 698000, 617000, 652000, 20, 20, 132600, 123400, 100}, + {74, 1427000, 1470000, 1475000, 1518000, 20, 20, 285400, 295000, 100}, + {75, 000, 000, 1432000, 1517000, 0, 20, 0, 286400, 100}, + {76, 000, 000, 1427000, 1432000, 0, 20, 0, 285400, 100}, + {77, 3300000, 4200000, 3300000, 4200000, 1, 1, 620000, 620000, 15}, + {77, 3300000, 4200000, 3300000, 4200000, 2, 2, 620000, 620000, 30}, + {78, 3300000, 3800000, 3300000, 3800000, 1, 1, 620000, 620000, 15}, + {78, 3300000, 3800000, 3300000, 3800000, 2, 2, 620000, 620000, 30}, + {79, 4400000, 5000000, 4400000, 5000000, 1, 1, 693334, 693334, 15}, + {79, 4400000, 5000000, 4400000, 5000000, 2, 2, 693334, 693334, 30}, + {80, 1710000, 1785000, 000, 000, 20, 0, 342000, 0, 100}, + {81, 880000, 915000, 000, 000, 20, 0, 176000, 0, 100}, + {82, 832000, 862000, 000, 000, 20, 0, 166400, 0, 100}, + {83, 703000, 748000, 000, 000, 20, 0, 140600, 0, 100}, + {84, 1920000, 1980000, 000, 000, 20, 0, 384000, 0, 100}, + {85, 698000, 716000, 728000, 746000, 20, 20, 139600, 145600, 100}, + {86, 1710000, 1780000, 000, 000, 20, 0, 342000, 0, 100}, + {89, 824000, 849000, 000, 000, 20, 0, 342000, 0, 100}, + {90, 2496000, 2690000, 2496000, 2690000, 3, 3, 499200, 499200, 15}, + {90, 2496000, 2690000, 2496000, 2690000, 6, 6, 499200, 499200, 30}, + {90, 2496000, 2690000, 2496000, 2690000, 20, 20, 499200, 499200, 100}, + {91, 832000, 862000, 1427000, 1432000, 20, 20, 166400, 285400, 100}, + {92, 832000, 862000, 1432000, 1517000, 20, 20, 166400, 286400, 100}, + {93, 880000, 915000, 1427000, 1432000, 20, 20, 176000, 285400, 100}, + {94, 880000, 915000, 1432000, 1517000, 20, 20, 176000, 286400, 100}, + {95, 2010000, 2025000, 000, 000, 20, 20, 402000, 402000, 100}, + {96, 5925000, 7125000, 5925000, 7125000, 1, 1, 795000, 795000, 15}, + {100, 874400, 880000, 919400, 925000, 20, 20, 174880, 174880, 100}, + {101, 1900000, 1910000, 1900000, 1910000, 20, 20, 380000, 380000, 100}, + {102, 5925000, 6425000, 5925000, 6425000, 1, 1, 795000, 795000, 15}, + {104, 6425000, 7125000, 6425000, 7125000, 1, 1, 828334, 828334, 15}, + {104, 6425000, 7125000, 6425000, 7125000, 2, 2, 828334, 828334, 30}, + {254, 1610000, 1626500, 2483500, 2500000, 20, 20, 322000, 496700, 100}, + {254, 1610000, 1626500, 2483500, 2500000, 2, 2, 322000, 496700, 10}, + {255, 1626500, 1660500, 1525000, 1559000, 20, 20, 325300, 305000, 100}, + {255, 1626500, 1660500, 1525000, 1559000, 2, 2, 325300, 305000, 10}, + {256, 1980000, 2010000, 2170000, 2200000, 20, 20, 396000, 434000, 100}, + {256, 1980000, 2010000, 2170000, 2200000, 2, 2, 396000, 434000, 10}, + {257, 26500020, 29500000, 26500020, 29500000, 1, 1, 2054166, 2054166, 60}, + {257, 26500080, 29500000, 26500080, 29500000, 2, 2, 2054167, 2054167, 120}, + {258, 24250080, 27500000, 24250080, 27500000, 1, 1, 2016667, 2016667, 60}, + {258, 24250080, 27500000, 24250080, 27500000, 2, 2, 2016667, 2016667, 120}, + {260, 37000020, 40000000, 37000020, 40000000, 1, 1, 2229166, 2229166, 60}, + {260, 37000080, 40000000, 37000080, 40000000, 2, 2, 2229167, 2229167, 120}, + {261, 27500040, 28350000, 27500040, 28350000, 1, 1, 2070833, 2070833, 60}, + {261, 27500040, 28350000, 27500040, 28350000, 2, 2, 2070833, 2070833, 120}, + {510, 27500000, 28350000, 17300000, 20200000, 1, 4, 2070833, 1553336, 60}, + {510, 27500000, 28350000, 17300000, 20200000, 2, 8, 2070833, 1553336, 120}, + {511, 28350000, 30000000, 17300000, 20200000, 1, 4, 2084999, 1553336, 60}, + {511, 28350000, 30000000, 17300000, 20200000, 2, 8, 2084999, 1553336, 120}, + {512, 27500000, 30000000, 17300000, 20200000, 1, 4, 2070833, 1553336, 60}, + {512, 27500000, 30000000, 17300000, 20200000, 2, 8, 2070833, 1553336, 120}}; // synchronization raster per band tables (Rel.17) // (38.101-1 Table 5.4.3.3-1 and 38.101-2 Table 5.4.3.3-1) @@ -341,6 +346,13 @@ const sync_raster_t sync_raster[] = { {260, 4, 22996, 2, 23164}, {261, 3, 22446, 1, 22492}, {261, 4, 22446, 2, 22490}, + {510, 3, 17448, 12, 19428}, + {510, 4, 17472, 24, 19416}, + {511, 3, 17448, 12, 19428}, + {511, 4, 17472, 24, 19416}, + {512, 3, 17448, 12, 19428}, + {512, 4, 17472, 24, 19416}, +/***************************/ }; // clang-format on @@ -542,14 +554,6 @@ int get_nb_periods_per_frame(uint8_t tdd_period) return nb_periods_per_frame; } -void get_delta_arfcn(int i, uint32_t nrarfcn, uint64_t N_OFFs) -{ - uint32_t delta_arfcn = nrarfcn - N_OFFs; - - if(delta_arfcn % (nr_bandtable[i].step_size) != 0) - LOG_E(NR_MAC, "nrarfcn %u is not on the channel raster for step size %lu\n", nrarfcn, nr_bandtable[i].step_size); -} - uint32_t to_nrarfcn(uint64_t CarrierFreq) { uint64_t CarrierFreq_by_1k = CarrierFreq / 1000; @@ -580,7 +584,6 @@ uint64_t from_nrarfcn(int nr_bandP, uint8_t scs_index, uint32_t nrarfcn) int deltaFglobal = 5; uint32_t N_REF_Offs = 0; uint64_t F_REF_Offs_khz = 0; - uint64_t N_OFFs, frequency, freq_min; int i = get_nr_table_idx(nr_bandP, scs_index); if (nrarfcn > 599999 && nrarfcn < 2016667) { @@ -594,42 +597,30 @@ uint64_t from_nrarfcn(int nr_bandP, uint8_t scs_index, uint32_t nrarfcn) F_REF_Offs_khz = 24250080; } - int32_t delta_duplex = get_delta_duplex(nr_bandP, scs_index); + // First check if the ARFCN is on the RASTER + uint32_t stepsize = nr_bandtable[i].dl_stepsize; + uint32_t N_OFFs = nr_bandtable[i].N_OFFs_DL; - if (delta_duplex <= 0){ // DL band >= UL band - if (nrarfcn >= nr_bandtable[i].N_OFFs_DL){ // is TDD of FDD DL - N_OFFs = nr_bandtable[i].N_OFFs_DL; - freq_min = nr_bandtable[i].dl_min; - } else {// is FDD UL - N_OFFs = nr_bandtable[i].N_OFFs_DL + delta_duplex/deltaFglobal; - freq_min = nr_bandtable[i].ul_min; - } - } else { // UL band > DL band - if (nrarfcn >= nr_bandtable[i].N_OFFs_DL + delta_duplex / deltaFglobal){ // is FDD UL - N_OFFs = nr_bandtable[i].N_OFFs_DL + delta_duplex / deltaFglobal; - freq_min = nr_bandtable[i].ul_min; - } else { // is FDD DL - N_OFFs = nr_bandtable[i].N_OFFs_DL; - freq_min = nr_bandtable[i].dl_min; + if (nrarfcn >= nr_bandtable[i].N_OFFs_UL) { + if (nr_bandtable[i].N_OFFs_UL > N_OFFs || nrarfcn < N_OFFs) { + N_OFFs = nr_bandtable[i].N_OFFs_UL; + stepsize = nr_bandtable[i].ul_stepsize; } } - LOG_D(NR_MAC, "Frequency from NR-ARFCN for N_OFFs %lu, duplex spacing %d KHz, deltaFglobal %d KHz\n", - N_OFFs, - delta_duplex, - deltaFglobal); + LOG_D(NR_MAC, "N_OFFs %u, deltaFglobal %d KHz, stepsize:%d\n", N_OFFs, deltaFglobal, stepsize); - AssertFatal(nrarfcn >= N_OFFs,"nrarfcn %u < N_OFFs[%d] %llu\n", nrarfcn, nr_bandtable[i].band, (long long unsigned int)N_OFFs); - get_delta_arfcn(i, nrarfcn, N_OFFs); + AssertFatal(nrarfcn >= N_OFFs,"nrarfcn %u < N_OFFs[%d] %u\n", nrarfcn, nr_bandtable[i].band, N_OFFs); - frequency = 1000 * (F_REF_Offs_khz + (nrarfcn - N_REF_Offs) * deltaFglobal); + if ((nrarfcn - N_OFFs) % stepsize != 0) + LOG_E(NR_MAC, "nrarfcn %u is not on the channel raster for step size %u. N_OFFS:%d\n", + nrarfcn, stepsize, N_OFFs); - LOG_D(NR_MAC, "Computing frequency (nrarfcn %llu => %llu KHz (freq_min %llu KHz, NR band %d N_OFFs %llu))\n", + uint64_t frequency = 1000 * (F_REF_Offs_khz + (nrarfcn - N_REF_Offs) * deltaFglobal); + LOG_I(NR_MAC, "Computing frequency (nrarfcn %llu => %llu KHz, NR band %d\n", (unsigned long long)nrarfcn, (unsigned long long)frequency/1000, - (unsigned long long)freq_min, - nr_bandP, - (unsigned long long)N_OFFs); + nr_bandP); return frequency; } @@ -1049,7 +1040,7 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB, // only difference wrt NR-ARFCN is delta frequency 5kHz if f < 3 GHz for ARFCN uint32_t absolute_diff = (absoluteFrequencySSB - absoluteFrequencyPointA); const int scaling_5khz = absoluteFrequencyPointA < 600000 ? 3 : 1; - const int scaling = frequency_range == FR2 ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; + const int scaling = (absoluteFrequencyPointA >= 2016667) ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; const int scaled_abs_diff = absolute_diff / (scaling_5khz * scaling); // absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * scaling; @@ -1358,11 +1349,14 @@ long rrc_get_max_nr_csrs(const int max_rbs, const long b_SRS) frequency_range_t get_freq_range_from_freq(uint64_t freq) { - // 3GPP TS 38.101-1 Version 19.0.0 Table 5.1-1: Definition of frequency ranges + // 3GPP TS 38.101-1,38.101-5 Version 19.0.0 Table 5.1-1: Definition of frequency ranges if (freq >= 410000000 && freq <= 7125000000) return FR1; - - if (freq >= 24250000000 && freq <= 71000000000) + // 3GPP TS 38.101-1 Version 19.0.0 Table 5.1-1: Definition of frequency ranges + // FR2 is from 24250 MHz –to 71000 MHz + // 3GPP TS 38.101-5 Version 19.0.0 Table 5.1-1: Definition of frequency ranges + // FR2 for NTN is from 17300 Mhz to 30000 MHz + if (freq >= 17300000000 && freq <= 71000000000) return FR2; AssertFatal(false, "Undefined Frequency Range for frequency %ld Hz\n", freq); @@ -1373,8 +1367,11 @@ frequency_range_t get_freq_range_from_arfcn(uint32_t arfcn) // 3GPP TS 38.101-1 Version 19.0.0 Table 5.1-1: Definition of frequency ranges if (arfcn >= 82000 && arfcn <= 875000) return FR1; - - if (arfcn >= 2016667 && arfcn <= 2795832) + // 3GPP TS 38.101-1 Version 19.0.0 Table 5.1-1: Definition of frequency ranges + // FR2 is from 24250 MHz –to 71000 MHz (from ARFCN 2016667) + // 3GPP TS 38.101-5 Version 19.0.0 Table 5.1-1: Definition of frequency ranges + // FR2 for NTN is from 17300 Mhz to 30000 MHz, from ARFCN 1553336 (Table 5.4.2.3-3) + if (arfcn >= 1553336 && arfcn <= 2795832) return FR2; AssertFatal(false, "Undefined Frequency Range for ARFCN %d\n", arfcn); diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h index 58dad544cc..685d4422b6 100644 --- a/common/utils/nr/nr_common.h +++ b/common/utils/nr/nr_common.h @@ -107,8 +107,10 @@ typedef struct nr_bandentry_s { uint64_t ul_max; uint64_t dl_min; uint64_t dl_max; - uint64_t step_size; - uint64_t N_OFFs_DL; + uint8_t ul_stepsize; + uint8_t dl_stepsize; + uint32_t N_OFFs_UL; + uint32_t N_OFFs_DL; uint8_t deltaf_raster; } nr_bandentry_t; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c index 11dac69484..b1765f7c38 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c @@ -1184,6 +1184,7 @@ typedef struct { } nr_prach_info_3gpp_fr2_t; // Table 6.3.3.2-4: Random access configurations for FR2 and unpaired spectrum +// and NTN-FR2 and paired as defined in 38.211v18.06 static const nr_prach_info_3gpp_fr2_t table_6_3_3_2_4_prachConfig_Index[256] = { // format, format, x, y, y, SFN_nbr, star_symb, slots_sfn, occ_slot, // duration @@ -1458,7 +1459,8 @@ int get_format0(uint8_t index, uint8_t unpaired, frequency_range_t frequency_ran if (frequency_range==FR1) format = table_6_3_3_2_2_prachConfig_Index[index].format; else - AssertFatal(0==1,"no paired spectrum for FR2\n"); + // Table defined for NTN-FR2 and paired in 3GPP Spec 38.211v18.06 + format = table_6_3_3_2_4_prachConfig_Index[index].format; } return format; } From 1f3faac18fa56c18a39a0b8ee690de3af5e9524f Mon Sep 17 00:00:00 2001 From: Raghavendra Dinavahi Date: Thu, 11 Dec 2025 18:21:46 +0100 Subject: [PATCH 3/4] Added Conf files for NTN-FR2 band512, SCS-BW: 120Khz-50, 100Mhz, 200Mhz --- .../gnb.sa.band512.ntn.mu3.132prb.rfsim.conf | 275 +++++++++++++++++ .../gnb.sa.band512.ntn.mu3.32prb.rfsim.conf | 276 ++++++++++++++++++ .../gnb.sa.band512.ntn.mu3.66prb.rfsim.conf | 276 ++++++++++++++++++ 3 files changed, 827 insertions(+) create mode 100644 targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.132prb.rfsim.conf create mode 100644 targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.32prb.rfsim.conf create mode 100644 targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.66prb.rfsim.conf diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.132prb.rfsim.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.132prb.rfsim.conf new file mode 100644 index 0000000000..446223843e --- /dev/null +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.132prb.rfsim.conf @@ -0,0 +1,275 @@ +Active_gNBs = ( "gNB-OAI"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + gNB_name = "gNB-OAI"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + nr_cellid = 12345678L; + + ////////// Physical parameters: + CSI_report_type = "ssb_sinr"; + min_rxtxtime = 6; + disable_harq = 1; + cu_sibs = [2]; + du_sibs = [19]; + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + +# downlinkConfigCommon + #frequencyInfoDL + # GSCN + absoluteFrequencySSB = 1556256; + dl_frequencyBand = 512; + # This is SSB ARFCN - ((offset RBs accg to controlResourceSetZero + 10 rbs for half of SSB) * 12(num REs) * 8 (raster 120khz/15Khz)) + dl_absoluteFrequencyPointA = 1553952; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 3; + dl_carrierBandwidth = 132; + #initialDownlinkBWP + #genericParameters + # This is RBstart = 0, L = 32: (275 * (L - 1)) + RBstart + initialDLBWPlocationAndBandwidth = 36025; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 3; + #pdcch-ConfigCommon + # Value 0 - 2symbols for coreset, 0 Rbs offset, does not work until code changed in nr_rrc_config_dl_tda + # as len_coreset is hard coded to 1 TBD to fix this + # Value 2 - 1 symbol for coreset, 14 rbs offset + initialDLBWPcontrolResourceSetZero = 2; + initialDLBWPsearchSpaceZero = 0; + + #uplinkConfigCommon + #frequencyInfoUL + ul_absoluteFrequencyPointA = 2070987; + ul_frequencyBand = 512; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 3; + ul_carrierBandwidth = 132; + pMax = 20; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 36025; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 3; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 71; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 12; + preambleReceivedTargetPower = -96; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 6; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 1; +#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR +#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; +#oneHalf (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; +#ra_ContentionResolutionTimer +#(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; +#prach-RootSequenceIndex_PR +#1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 3; +# restrictedSetConfig +# 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + + msg3_DeltaPreamble = 1; + p0_NominalWithGrant =-90; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 40; + p0_nominal = -70; + + ssb_PositionsInBurst_Bitmap = 1; + +# ssb_periodicityServingCell +# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + +# dmrs_TypeA_position +# 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 3; + + + #tdd-UL-DL-ConfigurationCommon +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 3; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 3; + nrofDownlinkSlots = 7; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 2; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = -25; + + #ext2 + #ntn_Config_r17 + cellSpecificKoffset_r17 = 478; # GEO satellite + ta-Common-r17 = 58629850; + positionX-r17 = 0; + positionY-r17 = 0; + positionZ-r17 = 32433846; + velocityVX-r17 = 0; + velocityVY-r17 = 0; + velocityVZ-r17 = 0; + } + + ); + + TIMERS : + { + sr_ProhibitTimer = 0; + sr_TransMax = 64; + sr_ProhibitTimer_v1700 = 512; + t300 = 2000; + t301 = 2000; + t319 = 2000; + }; + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// AMF parameters: + amf_ip_address = ({ ipv4 = "192.168.71.132"; }); + + + NETWORK_INTERFACES : + { + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/26"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/26"; + GNB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + } +); + +rlc = { + srb = { + t_poll_retransmit = "ms2000" + } + drb_am = { + t_poll_retransmit = "ms2000" + } +} + +MACRLCs = ( +{ + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; +} +); + +L1s = ( +{ + num_cc = 1; + tr_n_preference = "local_mac"; + prach_dtx_threshold = 120; +} +); + +RUs = ( +{ + local_rf = "yes"; + nb_tx = 1; + nb_rx = 1; + att_tx = 0; + att_rx = 0; + sl_ahead = 10; + bands = [512]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 60; + eNB_instances = [0]; + sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal" +} +); + + +rfsimulator = ( +{ + serveraddr = "server"; + serverport = 4043; + options = (); #("saviq"); or/and "chanmod" + prop_delay = 238.74; + IQfile = "/tmp/rfsimulator.iqs"; +} +); + +security = { + # preferred ciphering algorithms + # the first one of the list that an UE supports in chosen + # valid values: nea0, nea1, nea2, nea3 + ciphering_algorithms = ( "nea0" ); + + # preferred integrity algorithms + # the first one of the list that an UE supports in chosen + # valid values: nia0, nia1, nia2, nia3 + integrity_algorithms = ( "nia2", "nia0" ); + + # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter + # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' + drb_ciphering = "yes"; + drb_integrity = "no"; +}; + +log_config : +{ + global_log_level ="info"; + hw_log_level ="info"; + phy_log_level ="info"; + mac_log_level ="info"; + rlc_log_level ="info"; + pdcp_log_level ="info"; + rrc_log_level ="info"; + ngap_log_level ="info"; + f1ap_log_level ="info"; +}; diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.32prb.rfsim.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.32prb.rfsim.conf new file mode 100644 index 0000000000..7fb33a7a6e --- /dev/null +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.32prb.rfsim.conf @@ -0,0 +1,276 @@ +Active_gNBs = ( "gNB-OAI"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + gNB_name = "gNB-OAI"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + nr_cellid = 12345678L; + + ////////// Physical parameters: + + CSI_report_type = "ssb_sinr"; + min_rxtxtime = 6; + disable_harq = 1; + cu_sibs = [2]; + du_sibs = [19]; + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + +# downlinkConfigCommon + #frequencyInfoDL + # GSCN + absoluteFrequencySSB = 1556256; + dl_frequencyBand = 512; + # This is SSB ARFCN - ((offset RBs accg to controlResourceSetZero + 10 rbs for half of SSB) * 12(num REs) * 8 (raster 120khz/15Khz)) + dl_absoluteFrequencyPointA = 1554496; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 3; + dl_carrierBandwidth = 32; + #initialDownlinkBWP + #genericParameters + # This is RBstart = 0, L = 32: (275 * (L - 1)) + RBstart + initialDLBWPlocationAndBandwidth = 8525; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 3; + #pdcch-ConfigCommon + # Value 0 - 2symbols for coreset, 0 Rbs offset, does not work until code changed in nr_rrc_config_dl_tda + # as len_coreset is hard coded to 1 TBD to fix this + # Value 2 - 1 symbol for coreset, 14 rbs offset + initialDLBWPcontrolResourceSetZero = 1; + initialDLBWPsearchSpaceZero = 2; // to push sib1 into slot other than 0, otherwise RBs are not enough + + #uplinkConfigCommon + #frequencyInfoUL + ul_absoluteFrequencyPointA = 2070833; + ul_frequencyBand = 512; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 3; + ul_carrierBandwidth = 32; + pMax = 20; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 8525; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 3; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 58; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 12; + preambleReceivedTargetPower = -96; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 6; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 1; +#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR +#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; +#oneHalf (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; +#ra_ContentionResolutionTimer +#(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; +#prach-RootSequenceIndex_PR +#1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 3; +# restrictedSetConfig +# 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + + msg3_DeltaPreamble = 1; + p0_NominalWithGrant =-90; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 40; + p0_nominal = -70; + + ssb_PositionsInBurst_Bitmap = 1; + +# ssb_periodicityServingCell +# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + +# dmrs_TypeA_position +# 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 3; + + + #tdd-UL-DL-ConfigurationCommon +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 3; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 3; + nrofDownlinkSlots = 7; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 2; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = -25; + + #ext2 + #ntn_Config_r17 + cellSpecificKoffset_r17 = 478; # GEO satellite + ta-Common-r17 = 58629850; + positionX-r17 = 0; + positionY-r17 = 0; + positionZ-r17 = 32433846; + velocityVX-r17 = 0; + velocityVY-r17 = 0; + velocityVZ-r17 = 0; + } + + ); + + TIMERS : + { + sr_ProhibitTimer = 0; + sr_TransMax = 64; + sr_ProhibitTimer_v1700 = 512; + t300 = 2000; + t301 = 2000; + t319 = 2000; + }; + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// AMF parameters: + amf_ip_address = ({ ipv4 = "192.168.71.132"; }); + + + NETWORK_INTERFACES : + { + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/26"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/26"; + GNB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + } +); + + +rlc = { + srb = { + t_poll_retransmit = "ms2000" + } + drb_am = { + t_poll_retransmit = "ms2000" + } +} + +MACRLCs = ( +{ + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; +} +); + +L1s = ( +{ + num_cc = 1; + tr_n_preference = "local_mac"; + prach_dtx_threshold = 120; +} +); + +RUs = ( +{ + local_rf = "yes"; + nb_tx = 1; + nb_rx = 1; + att_tx = 0; + att_rx = 0; + sl_ahead = 10; + bands = [512]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 60; + eNB_instances = [0]; + sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal" +} +); + +rfsimulator = ( +{ + serveraddr = "server"; + serverport = 4043; + options = (); #("saviq"); or/and "chanmod" + prop_delay = 238.74; + IQfile = "/tmp/rfsimulator.iqs"; +} +); + +security = { + # preferred ciphering algorithms + # the first one of the list that an UE supports in chosen + # valid values: nea0, nea1, nea2, nea3 + ciphering_algorithms = ( "nea0" ); + + # preferred integrity algorithms + # the first one of the list that an UE supports in chosen + # valid values: nia0, nia1, nia2, nia3 + integrity_algorithms = ( "nia2", "nia0" ); + + # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter + # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' + drb_ciphering = "yes"; + drb_integrity = "no"; +}; + +log_config : +{ + global_log_level ="info"; + hw_log_level ="info"; + phy_log_level ="info"; + mac_log_level ="info"; + rlc_log_level ="info"; + pdcp_log_level ="info"; + rrc_log_level ="info"; + ngap_log_level ="info"; + f1ap_log_level ="info"; +}; diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.66prb.rfsim.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.66prb.rfsim.conf new file mode 100644 index 0000000000..3fddfd0890 --- /dev/null +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band512.ntn.mu3.66prb.rfsim.conf @@ -0,0 +1,276 @@ +Active_gNBs = ( "gNB-OAI"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + gNB_name = "gNB-OAI"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + nr_cellid = 12345678L; + + ////////// Physical parameters: + CSI_report_type = "ssb_sinr"; + min_rxtxtime = 6; + disable_harq = 1; + cu_sibs = [2]; + du_sibs = [19]; + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + +# downlinkConfigCommon + #frequencyInfoDL + #GSCN + absoluteFrequencySSB = 1558560; + dl_frequencyBand = 512; + # This is SSB ARFCN - ((offset RBs accg to controlResourceSetZero + 10 rbs for half of SSB) * 12(num REs) * 8 (raster 120khz/15Khz)) + dl_absoluteFrequencyPointA = 1556064; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 3; + dl_carrierBandwidth = 66; + #initialDownlinkBWP + #genericParameters + # This is RBstart = 0, L = 32: (275 * (L - 1)) + RBstart + initialDLBWPlocationAndBandwidth = 17875; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 3; + #pdcch-ConfigCommon + # Value 0 - 2symbols for coreset, 0 Rbs offset, does not work until code changed in nr_rrc_config_dl_tda + # as len_coreset is hard coded to 1 TBD to fix this + # Value 2 - 1 symbol for coreset, 14 rbs offse + initialDLBWPcontrolResourceSetZero = 2; + initialDLBWPsearchSpaceZero = 0; + + #uplinkConfigCommon + #frequencyInfoUL + ul_absoluteFrequencyPointA = 2070833; + ul_frequencyBand = 512; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 3; + ul_carrierBandwidth = 66; + pMax = 20; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 17875; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 3; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 58; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 12; + preambleReceivedTargetPower = -96; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 6; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 1; +#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR +#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; +#oneHalf (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; +#ra_ContentionResolutionTimer +#(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; +#prach-RootSequenceIndex_PR +#1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 3; +# restrictedSetConfig +# 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + + msg3_DeltaPreamble = 1; + p0_NominalWithGrant =-90; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 40; + p0_nominal = -70; + + ssb_PositionsInBurst_Bitmap = 1; + +# ssb_periodicityServingCell +# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + +# dmrs_TypeA_position +# 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 3; + + + #tdd-UL-DL-ConfigurationCommon +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 3; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 3; + nrofDownlinkSlots = 7; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 2; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = -25; + + #ext2 + #ntn_Config_r17 + cellSpecificKoffset_r17 = 478; # GEO satellite + ta-Common-r17 = 58629850; + positionX-r17 = 0; + positionY-r17 = 0; + positionZ-r17 = 32433846; + velocityVX-r17 = 0; + velocityVY-r17 = 0; + velocityVZ-r17 = 0; + } + + ); + + TIMERS : + { + sr_ProhibitTimer = 0; + sr_TransMax = 64; + sr_ProhibitTimer_v1700 = 512; + t300 = 2000; + t301 = 2000; + t319 = 2000; + }; + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// AMF parameters: + amf_ip_address = ({ ipv4 = "192.168.71.132"; }); + + + NETWORK_INTERFACES : + { + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/26"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/26"; + GNB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + } +); + + +rlc = { + srb = { + t_poll_retransmit = "ms2000" + } + drb_am = { + t_poll_retransmit = "ms2000" + } +} + +MACRLCs = ( +{ + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; +} +); + +L1s = ( +{ + num_cc = 1; + tr_n_preference = "local_mac"; + prach_dtx_threshold = 120; +} +); + +RUs = ( +{ + local_rf = "yes"; + nb_tx = 1; + nb_rx = 1; + att_tx = 0; + att_rx = 0; + sl_ahead = 10; + bands = [512]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 60; + eNB_instances = [0]; + sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal" +} +); + + +rfsimulator = ( +{ + serveraddr = "server"; + serverport = 4043; + options = (); #("saviq"); or/and "chanmod" + prop_delay = 238.74; + IQfile = "/tmp/rfsimulator.iqs"; +} +); + +security = { + # preferred ciphering algorithms + # the first one of the list that an UE supports in chosen + # valid values: nea0, nea1, nea2, nea3 + ciphering_algorithms = ( "nea0" ); + + # preferred integrity algorithms + # the first one of the list that an UE supports in chosen + # valid values: nia0, nia1, nia2, nia3 + integrity_algorithms = ( "nia2", "nia0" ); + + # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter + # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' + drb_ciphering = "yes"; + drb_integrity = "no"; +}; + +log_config : +{ + global_log_level ="info"; + hw_log_level ="info"; + phy_log_level ="info"; + mac_log_level ="info"; + rlc_log_level ="info"; + pdcp_log_level ="info"; + rrc_log_level ="info"; + ngap_log_level ="info"; + f1ap_log_level ="info"; +}; From f6c04c26725574960ea93e5576ae8dbcf76bf689 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Tue, 3 Mar 2026 18:31:12 +0100 Subject: [PATCH 4/4] COMMON: fix ssb_offset_point_a calculation Even though the NR ARFCN uses a 15 kHz raster until 24250 MHz, the ssb_offset_point_a is still scaled by 60 kHz for FR2. So we need two different scaling factors. --- common/utils/nr/nr_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c index 4ed820c03f..a0273bcf56 100644 --- a/common/utils/nr/nr_common.c +++ b/common/utils/nr/nr_common.c @@ -1043,9 +1043,10 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB, const int scaling = (absoluteFrequencyPointA >= 2016667) ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; const int scaled_abs_diff = absolute_diff / (scaling_5khz * scaling); // absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total - const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * scaling; + const int ssb_offset_scaling = (frequency_range == FR2) ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; + const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * ssb_offset_scaling; // Offset to point A needs to be divisible by scaling - AssertFatal(ssb_offset_point_a % scaling == 0, "PRB offset %d not valid for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); + AssertFatal(ssb_offset_point_a % ssb_offset_scaling == 0, "PRB offset %d not valid for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); AssertFatal(ssb_offset_point_a >= 0, "ssb offset is negative %d for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); return ssb_offset_point_a; }