diff --git a/ci-scripts/conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf b/ci-scripts/conf_files/gnb.sa.band261.u3.32prb.rfsim.conf
similarity index 70%
rename from ci-scripts/conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf
rename to ci-scripts/conf_files/gnb.sa.band261.u3.32prb.rfsim.conf
index 7603148fb7..387bd959ad 100644
--- a/ci-scripts/conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf
+++ b/ci-scripts/conf_files/gnb.sa.band261.u3.32prb.rfsim.conf
@@ -1,41 +1,42 @@
-Active_gNBs = ( "gNB-Eurecom-5GNRBox");
+Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
+sa = 1;
+
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
-
- cell_type = "CELL_MACRO_GNB";
-
- gNB_name = "gNB-Eurecom-5GNRBox";
+ 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;});
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1; }) });
+ nr_cellid = 12345678L;
tr_s_preference = "local_mac"
////////// Physical parameters:
+ sib1_tda = 15;
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
- physCellId = 0;
+ physCellId = 10;
# downlinkConfigCommon
#frequencyInfoDL
- # this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
- absoluteFrequencySSB = 2071241;
+ # this is pointA + 16 PRBs@120kHz SCS (same as initial BWP)
+ absoluteFrequencySSB = 2071387;
dl_frequencyBand = 261;
# this is 27.900 GHz
- dl_absoluteFrequencyPointA = 2070833;
+ dl_absoluteFrequencyPointA = 2071001;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -50,7 +51,7 @@ gNBs =
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 3;
#pdcch-ConfigCommon
- initialDLBWPcontrolResourceSetZero = 12;
+ initialDLBWPcontrolResourceSetZero = 1;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
@@ -85,12 +86,12 @@ gNBs =
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
- ra_ResponseWindow = 7;
+ ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
-#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
- ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
- ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 7;
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
@@ -101,8 +102,7 @@ gNBs =
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,
-
+ msg1_SubcarrierSpacing = 3;
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
@@ -119,7 +119,7 @@ gNBs =
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 3;
- ssb_PositionsInBurst_Bitmap = 0x0001000100010001L;
+ ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
@@ -152,7 +152,6 @@ gNBs =
);
-
# ------- SCTP definitions
SCTP :
{
@@ -162,91 +161,58 @@ gNBs =
};
- ////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.168.18.99";
+ ////////// AMF parameters:
+ amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
- ///X2
- enable_x2 = "no";
- t_reloc_prep = 1000; /* unit: millisecond */
- tx2_reloc_overall = 2000; /* unit: millisecond */
- t_dc_prep = 1000; /* unit: millisecond */
- t_dc_overall = 2000; /* unit: millisecond */
- target_enb_x2_ip_address = (
- { ipv4 = "192.168.18.199";
- ipv6 = "192:168:30::17";
- preference = "ipv4";
- }
- );
-
NETWORK_INTERFACES :
{
-
- GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.198/24";
- GNB_INTERFACE_NAME_FOR_S1U = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.198/24";
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
+ GNB_INTERFACE_NAME_FOR_NGU = "eth0";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
- GNB_IPV4_ADDRESS_FOR_X2C = "192.168.18.198/24";
- GNB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
-MACRLCs = (
- {
- num_cc = 1;
- tr_s_preference = "local_L1";
- tr_n_preference = "local_RRC";
- pusch_TargetSNRx10 = 200;
- pucch_TargetSNRx10 = 200;
- }
-);
+MACRLCs = ({
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 200;
+ pucch_TargetSNRx10 = 200;
+});
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
- ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+ prach_dtx_threshold = 120;
+ #pucch0_dtx_threshold = 120;
}
);
-RUs = (
- {
- local_rf = "yes"
- nb_tx = 1;
- nb_rx = 1;
- att_tx = 0;
- att_rx = 0;
- bands = [7];
- sl_ahead = 12;
- max_pdschReferenceSignalPower = -27;
- max_rxgain = 75;
- eNB_instances = [0];
- sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
- if_freq = 5124520000L;
- clock_src = "external";
- time_src = "external";
- }
-);
+RUs = ({
+ local_rf = "yes"
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ sl_ahead = 12;
+ bands = [261];
+ max_pdschReferenceSignalPower = -27;
+ eNB_instances = [0];
+});
rfsimulator: {
serveraddr = "server";
};
-THREAD_STRUCT = (
- {
- #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
- parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
- #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
- worker_config = "WORKER_ENABLE";
- }
-);
-
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
@@ -264,14 +230,6 @@ security = {
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";
- };
-
+log_config: {
+ global_log_level ="info";
+};
diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml
index 25ffb4b7b2..e6127a766e 100644
--- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml
@@ -22,13 +22,12 @@
-->
rfsim-fr2-32prb-5gnr-tdd
- Monolithic FR2 do-ra gNB
+ Monolithic FR2 gNB
wrench
1
111111
100001
- 004000
000000
000001
020001
@@ -44,42 +43,35 @@
oai-gnb-asan oai-nr-ue-asan
-
- Custom_Command
- Clean-Up any residual volume
- localhost
- docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config
-
-
DeployGenObject
Deploy OAI gNB
yaml_files/5g_rfsimulator_fr2_32prb
- oai-gnb
- 1
+ mysql oai-amf oai-smf oai-upf oai-ext-dn
+ 5
DeployGenObject
Deploy OAI NR-UE
yaml_files/5g_rfsimulator_fr2_32prb
- oai-nr-ue
- 2
+ oai-gnb oai-nr-ue
+ 7
Ping
- Ping gNB from NR-UE
+ Ping ext-dn from NR-UE
rfsim5g_ue
- -c20 -i0.2 10.0.1.1
+ -c 20 -i0.2 192.168.72.135
0
Ping
- Ping NR-UE from gNB
- rfsim5g_gnb_nos1
- -c20 -i0.2 10.0.1.2
+ Ping NR-UE from ext-dn
+ rfsim5g_ext_dn
+ -c 20 12.1.1.2 -i0.2
0
@@ -87,8 +79,8 @@
UndeployGenObject
Undeploy all OAI 5G stack
yaml_files/5g_rfsimulator_fr2_32prb
- 0,0,0,0
- 0,0,0,0
+ 10,0,0,0
+ 10,0,0,0
diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb_down.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb_down.xml
index efd7340b41..6dd65eaa85 100644
--- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb_down.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb_down.xml
@@ -26,7 +26,6 @@
trash
100002
- 004000
222222
@@ -37,13 +36,6 @@
yaml_files/5g_rfsimulator_fr2_32prb
-
- Custom_Command
- Clean-Up any residual volume
- localhost
- docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config
-
-
Clean_Test_Server_Images
Clean Test Images on Test Server
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
index 145122d97e..0311882efe 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
@@ -1,18 +1,99 @@
version: '3.8'
services:
+ mysql:
+ container_name: "rfsim5g-mysql"
+ image: mysql:8.0
+ volumes:
+ - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
+ - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
+ environment:
+ - TZ=Europe/Paris
+ - MYSQL_DATABASE=oai_db
+ - MYSQL_USER=test
+ - MYSQL_PASSWORD=test
+ - MYSQL_ROOT_PASSWORD=linux
+ healthcheck:
+ test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
+ interval: 10s
+ timeout: 5s
+ retries: 30
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.131
+ oai-amf:
+ container_name: "rfsim5g-oai-amf"
+ image: oaisoftwarealliance/oai-amf:v2.0.0
+ environment:
+ - TZ=Europe/paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
+ depends_on:
+ - mysql
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.132
+ oai-smf:
+ container_name: "rfsim5g-oai-smf"
+ image: oaisoftwarealliance/oai-smf:v2.0.0
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
+ depends_on:
+ - oai-amf
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.133
+ oai-upf:
+ container_name: "rfsim5g-oai-upf"
+ image: oaisoftwarealliance/oai-upf:v2.0.0
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
+ depends_on:
+ - oai-smf
+ cap_add:
+ - NET_ADMIN
+ - SYS_ADMIN
+ cap_drop:
+ - ALL
+ privileged: true
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.134
+ traffic_net:
+ ipv4_address: 192.168.72.134
+ oai-ext-dn:
+ privileged: true
+ container_name: rfsim5g-oai-ext-dn
+ image: oaisoftwarealliance/trf-gen-cn5g:focal
+ entrypoint: /bin/bash -c \
+ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
+ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
+ depends_on:
+ - oai-upf
+ networks:
+ traffic_net:
+ ipv4_address: 192.168.72.135
+ healthcheck:
+ test: /bin/bash -c "ping -c 2 192.168.72.134"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
oai-gnb:
image: oaisoftwarealliance/oai-gnb:develop
privileged: true
container_name: rfsim5g-oai-gnb
environment:
- USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --rfsimulator.wait_timeout 20 --noS1 --log_config.global_log_options level,nocolor,time
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
networks:
public_net:
ipv4_address: 192.168.71.140
volumes:
- - ../../conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf:/opt/oai-gnb/etc/gnb.conf
- - rrc.config:/opt/oai-gnb/
+ - ../../conf_files/gnb.sa.band261.u3.32prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -24,11 +105,12 @@ services:
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
- USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --noS1 --reconfig-file etc/rrc/reconfig.raw --rbconfig-file etc/rrc/rbconfig.raw --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim
+ --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ -r 32 --numerology 3 --band 261 -C 27533160000 --ssb 73
ASAN_OPTIONS: detect_leaks=0
volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- - rrc.config:/opt/oai-nr-ue/etc/rrc/
depends_on:
- oai-gnb
networks:
@@ -40,9 +122,6 @@ services:
timeout: 5s
retries: 5
-volumes:
- rrc.config:
-
networks:
public_net:
driver: bridge
@@ -52,3 +131,11 @@ networks:
- subnet: 192.168.71.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-public"
+ traffic_net:
+ driver: bridge
+ name: rfsim5g-oai-traffic-net
+ ipam:
+ config:
+ - subnet: 192.168.72.128/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-traffic"
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 2c8935f007..cfbd8d9c12 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -70,13 +70,25 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
int ssb_start_symbol_abs = nr_get_ssb_start_symbol(fp,ssb_index); // computing the starting symbol for current ssb
ssb_start_symbol = ssb_start_symbol_abs % fp->symbols_per_slot; // start symbol wrt slot
- // setting the first subcarrier
+ // Setting the first subcarrier
+ // 3GPP TS 38.211 sections 7.4.3.1 and 4.4.4.2
+ // for FR1 offsetToPointA and k_SSB are expressed in terms of 15 kHz SCS
+ // for FR2 offsetToPointA is expressed in terms of 60 kHz SCS and k_SSB expressed in terms of the subcarrier spacing provided
+ // by the higher-layer parameter subCarrierSpacingCommon
const int scs = cfg->ssb_config.scs_common.value;
- const int prb_offset = (fp->freq_range == nr_FR1) ? ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA>>scs : ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA>>(scs-2);
- const int sc_offset = (fp->freq_range == nr_FR1) ? ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset >> scs
- : ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset >> (scs - 2);
+ const int prb_offset = (fp->freq_range == nr_FR1) ? ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA >> scs
+ : ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA >> (scs - 2);
+ const int sc_offset =
+ (fp->freq_range == nr_FR1) ? ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset >> scs : ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset;
fp->ssb_start_subcarrier = (12 * prb_offset + sc_offset);
- LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier, prb_offset, sc_offset);
+ LOG_D(PHY,
+ "ssbOffsetPointA %d SSB SsbSubcarrierOffset %d prb_offset %d sc_offset %d scs %d ssb_start_subcarrier %d\n",
+ ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA,
+ ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset,
+ prb_offset,
+ sc_offset,
+ scs,
+ fp->ssb_start_subcarrier);
LOG_D(PHY,"SS TX: frame %d, slot %d, start_symbol %d\n",frame,slot, ssb_start_symbol);
nr_generate_pss(&txdataF[0][txdataF_offset], gNB->TX_AMP, ssb_start_symbol, cfg, fp);
@@ -602,7 +614,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
rb2 = rb + pucch_pdu->bwp_start +
((symbol < pucch_pdu->start_symbol_index+(pucch_pdu->nr_of_symbols>>1)) || (pucch_pdu->freq_hop_flag == 0) ?
pucch_pdu->prb_start : pucch_pdu->second_hop_prb);
- gNB->rb_mask_ul[symbol][rb2>>5] |= (1<<(rb2&31));
+ gNB->rb_mask_ul[symbol][rb2>>5] |= (((uint32_t)1)<<(rb2&31));
}
}
}
diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c
index 876d308889..26ee87bacf 100644
--- a/openair2/LAYER2/NR_MAC_UE/config_ue.c
+++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c
@@ -183,7 +183,7 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
else{
for (int i=0; i<8; i++){
if ((scc->ssb_PositionsInBurst.groupPresence->buf[0]>>(7-i))&0x01)
- cfg->ssb_table.ssb_mask_list[i>>2].ssb_mask |= scc->ssb_PositionsInBurst.inOneGroup.buf[0]<<(24-8*(i%4));
+ cfg->ssb_table.ssb_mask_list[i>>2].ssb_mask |= ((uint32_t)scc->ssb_PositionsInBurst.inOneGroup.buf[0])<<(24-8*(i%4));
}
}
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index 660a427d30..ec01355291 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -197,21 +197,21 @@ static int get_ssb_arfcn(const f1ap_served_cell_info_t *cell_info, const NR_MIB_
uint32_t dl_arfcn = get_dl_arfcn(cell_info);
int scs = get_ssb_scs(cell_info);
int band = get_dl_band(cell_info);
+ uint64_t freqpointa = from_nrarfcn(band, scs, dl_arfcn);
+ uint64_t freqssb = 0;
+ // 3GPP TS 38.211 sections 7.4.3.1 and 4.4.4.2
+ // for FR1 offsetToPointA and k_SSB are expressed in terms of 15 kHz SCS
+ // for FR2 offsetToPointA is expressed in terms of 60 kHz SCS and k_SSB expressed in terms of the subcarrier spacing provided
+ // by the higher-layer parameter subCarrierSpacingCommon
// FR1 includes frequency bands from 410 MHz (ARFCN 82000) to 7125 MHz (ARFCN 875000)
// FR2 includes frequency bands from 24.25 GHz (ARFCN 2016667) to 71.0 GHz (ARFCN 2795832)
- uint64_t scaling = 0;
if (dl_arfcn >= 82000 && dl_arfcn < 875000)
- scaling = 1;
+ freqssb = freqpointa + 15000 * (offsetToPointA * 12 + kssb) + 10ll * 12 * (1 << scs) * 15000;
else if (dl_arfcn >= 2016667 && dl_arfcn < 2795832)
- scaling = 4;
+ freqssb = freqpointa + 60000 * offsetToPointA * 12 + (1 << scs) * 15000 * (kssb + 10ll * 12);
else
AssertFatal(false, "Invalid absoluteFrequencyPointA: %d\n", dl_arfcn);
-
- uint64_t freqpointa = from_nrarfcn(band, scs, dl_arfcn);
- // offsetToPointA and kSSB are both on 15kHz SCS for FR1 and 60kHz SCS for FR2 (see 38.211 sections 7.4.3.1 and 4.4.4.2)
- // SSB uses the SCS of the cell and is 20 RBs wide, so use 10
- uint64_t freqssb = freqpointa + scaling * 15000 * (offsetToPointA * 12 + kssb) + 10ll * 12 * (1 << scs) * 15000;
int bw_index = get_supported_band_index(scs, band, get_dl_bw(cell_info));
int band_size_hz = get_supported_bw_mhz(band > 256 ? FR2 : FR1, bw_index) * 1000 * 1000;
uint32_t ssb_arfcn = to_nrarfcn(band, freqssb, scs, band_size_hz);