diff --git a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
index e71bb00ffb..4564907fa8 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -21,183 +21,166 @@ gNBs =
////////// Physical parameters:
- component_carriers = (
- {
- node_function = "3GPP_gNODEB";
- node_timing = "synch_to_ext_device";
- node_synch_ref = 0;
- frame_type = "TDD";
- DL_prefix_type = "NORMAL";
- UL_prefix_type = "NORMAL";
- eutra_band = 78;
- downlink_frequency = 3510000000L;
- uplink_frequency_offset = -120000000;
- Nid_cell = 0;
- N_RB_DL = 106;
- nb_antenna_ports = 1;
- nb_antennas_tx = 1;
- nb_antennas_rx = 1;
- tx_gain = 90;
- rx_gain = 125;
- MIB_subCarrierSpacingCommon = 30;
- MIB_ssb_SubcarrierOffset = 0;
- MIB_dmrs_TypeA_Position = 2;
- pdcch_ConfigSIB1 = 0;
- SIB1_frequencyOffsetSSB = "khz5";
- SIB1_ssb_PeriodicityServingCell = 5;
- SIB1_ss_PBCH_BlockPower = -60;
- absoluteFrequencySSB = 0;
- DL_FreqBandIndicatorNR = 15;
- DL_absoluteFrequencyPointA = 15;
- DL_offsetToCarrier = 15;
- DL_SCS_SubcarrierSpacing = "kHz30";
- DL_SCS_SpecificCarrier_k0 = 0;
- DL_carrierBandwidth = 15;
- DL_locationAndBandwidth = 15;
- DL_BWP_SubcarrierSpacing = "kHz30";
- DL_BWP_prefix_type = "NORMAL";
- UL_FreqBandIndicatorNR = 15;
- UL_absoluteFrequencyPointA = 13;
- UL_additionalSpectrumEmission = 3;
- UL_p_Max = -1;
- UL_frequencyShift7p5khz = "TRUE";
- UL_offsetToCarrier = 10;
- UL_SCS_SubcarrierSpacing = "kHz30";
- UL_SCS_SpecificCarrier_k0 = 0;
- UL_carrierBandwidth = 15;
- UL_locationAndBandwidth = 15;
- UL_BWP_SubcarrierSpacing = "kHz30";
- UL_BWP_prefix_type = "NORMAL";
- UL_timeAlignmentTimerCommon = "infinity";
- ServingCellConfigCommon_n_TimingAdvanceOffset = "n0"
- ServingCellConfigCommon_ssb_PositionsInBurst_PR = 0x01;
- ServingCellConfigCommon_ssb_periodicityServingCell = 10;
- ServingCellConfigCommon_dmrs_TypeA_Position = 2;
- NIA_SubcarrierSpacing = "kHz15";
- ServingCellConfigCommon_ss_PBCH_BlockPower = -60;
- referenceSubcarrierSpacing = "kHz15";
- dl_UL_TransmissionPeriodicity = "ms0p5";
- nrofDownlinkSlots = 10;
- nrofDownlinkSymbols = 10;
- nrofUplinkSlots = 10;
- nrofUplinkSymbols = 10;
- rach_totalNumberOfRA_Preambles = 63;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice = "oneEighth";
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth = 4;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth = 8;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf = 16;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one = 24;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two = 32;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four = 8;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight = 4;
- rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen = 2;
- rach_groupBconfigured = "ENABLE";
- rach_ra_Msg3SizeGroupA = 56;
- rach_messagePowerOffsetGroupB = "dB0";
- rach_numberOfRA_PreamblesGroupA = 32;
- rach_ra_ContentionResolutionTimer = 8;
- rsrp_ThresholdSSB = 64;
- rsrp_ThresholdSSB_SUL = 64;
- prach_RootSequenceIndex_choice = "l839";
- prach_RootSequenceIndex_l839 = 0;
- prach_RootSequenceIndex_l139 = 0;
- prach_msg1_SubcarrierSpacing = "kHz30";
- restrictedSetConfig = "unrestrictedSet";
- msg3_transformPrecoding = "ENABLE";
- prach_ConfigurationIndex = 10;
- prach_msg1_FDM = "one";
- prach_msg1_FrequencyStart = 10;
- zeroCorrelationZoneConfig = 10;
- preambleReceivedTargetPower = -150;
- preambleTransMax = 6;
- powerRampingStep = "dB0";
- ra_ResponseWindow = 8;
- groupHoppingEnabledTransformPrecoding = "ENABLE";
- msg3_DeltaPreamble = 0;
- p0_NominalWithGrant = 0;
- PUSCH_TimeDomainResourceAllocation_k2 = 0;
- PUSCH_TimeDomainResourceAllocation_mappingType = "typeA";
- PUSCH_TimeDomainResourceAllocation_startSymbolAndLength = 0;
- pucch_ResourceCommon = 0;
- pucch_GroupHopping = "neither";
- hoppingId = 0;
- p0_nominal = -30;
- PDSCH_TimeDomainResourceAllocation_k0 = 2;
- PDSCH_TimeDomainResourceAllocation_mappingType = "typeA";
- PDSCH_TimeDomainResourceAllocation_startSymbolAndLength = 0;
- rateMatchPatternId = 0;
- RateMatchPattern_patternType = "bitmaps";
- symbolsInResourceBlock = "oneSlot";
- periodicityAndPattern = 2;
- RateMatchPattern_controlResourceSet = 5;
- RateMatchPattern_subcarrierSpacing = "kHz30";
- RateMatchPattern_mode = "dynamic";
- controlResourceSetZero = 0;
- searchSpaceZero = 0;
- searchSpaceSIB1 = 10;
- searchSpaceOtherSystemInformation = 10;
- pagingSearchSpace = 10;
- ra_SearchSpace = 10;
- PDCCH_common_controlResourceSetId = 5;
- PDCCH_common_ControlResourceSet_duration = 2;
- PDCCH_cce_REG_MappingType = "nonInterleaved";
- PDCCH_reg_BundleSize = 3;
- PDCCH_interleaverSize = 3;
- PDCCH_shiftIndex = 10;
- PDCCH_precoderGranularity = "sameAsREG-bundle";
- PDCCH_TCI_StateId = 32;
- tci_PresentInDCI = "ENABLE";
- PDCCH_DMRS_ScramblingID = 0;
- SearchSpaceId = 10;
- commonSearchSpaces_controlResourceSetId = 5;
- SearchSpace_monitoringSlotPeriodicityAndOffset_choice = "sl1";
- SearchSpace_monitoringSlotPeriodicityAndOffset_value = 0;
- SearchSpace_duration = 2;
- SearchSpace_nrofCandidates_aggregationLevel1 = 0;
- SearchSpace_nrofCandidates_aggregationLevel2 = 0;
- SearchSpace_nrofCandidates_aggregationLevel4 = 0;
- SearchSpace_nrofCandidates_aggregationLevel8 = 0;
- SearchSpace_nrofCandidates_aggregationLevel16 = 0;
- SearchSpace_searchSpaceType = "common";
- Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 = 1;
- Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 = 1;
- Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 = 1;
- Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 = 1;
- Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 = 1;
- Common_dci_Format2_3_monitoringPeriodicity = 1;
- Common_dci_Format2_3_nrofPDCCH_Candidates = 1;
- ue_Specific__dci_Formats = "formats0-0-And-1-0";
- RateMatchPatternLTE_CRS_carrierFreqDL = 6;
- RateMatchPatternLTE_CRS_carrierBandwidthDL = 6;
- RateMatchPatternLTE_CRS_nrofCRS_Ports = 1;
- RateMatchPatternLTE_CRS_v_Shift = 0;
- RateMatchPatternLTE_CRS_radioframeAllocationPeriod = 1;
- RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0;
- RateMatchPatternLTE_CRS_subframeAllocation_choice = "oneFrame";
- }
- );
-
-
- srb1_parameters :
+ ssb_SubcarrierOffset = 0;
+ pdsch_AntennaPorts = 1;
+
+ servingCellConfigCommon = (
{
- # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
- timer_poll_retransmit = 80;
+ #spCellConfigCommon
- # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
- timer_reordering = 35;
+ physCellId = 0;
- # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
- timer_status_prohibit = 0;
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
+ absoluteFrequencySSB = 641032;
+ dl_frequencyBand = 78;
+ # this is 3600 MHz
+ dl_absoluteFrequencyPointA = 640000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 1;
+ dl_carrierBandwidth = 106;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=50 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 13475;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 1;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 12;
+ initialDLBWPsearchSpaceZero = 0;
+ #pdsch-ConfigCommon
+ #pdschTimeDomainAllocationList (up to 16 entries)
+ initialDLBWPk0_0 = 0;
+ #initialULBWPmappingType
+ #0=typeA,1=typeB
+ initialDLBWPmappingType_0 = 0;
+ #this is SS=2,L=3
+ initialDLBWPstartSymbolAndLength_0 = 40;
- # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
- poll_pdu = 4;
+ initialDLBWPk0_1 = 0;
+ initialDLBWPmappingType_1 = 0;
+ #this is SS=2,L=12
+ initialDLBWPstartSymbolAndLength_1 = 53;
- # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
- poll_byte = 99999;
+ initialDLBWPk0_2 = 0;
+ initialDLBWPmappingType_2 = 0;
+ #this is SS=1,L=12
+ initialDLBWPstartSymbolAndLength_2 = 54;
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 78;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 1;
+ ul_carrierBandwidth = 106;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 13475;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 1;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#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;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#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 = 3;
+#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
+#0 = 839, 1 = 139
+ prach_RootSequenceIndex_PR = 1;
+ 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 = 1,
+
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0,
+ # pusch-ConfigCommon (up to 16 elements)
+ initialULBWPk2_0 = 2;
+ initialULBWPmappingType_0 = 1
+ # this is SS=0 L=11
+ initialULBWPstartSymbolAndLength_0 = 55;
+
+ initialULBWPk2_1 = 2;
+ initialULBWPmappingType_1 = 1;
+ # this is SS=0 L=12
+ initialULBWPstartSymbolAndLength_1 = 69;
+
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 255;
+
+# 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 = 1;
+
+
+ #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ referenceSubcarrierSpacing = 1;
+ # pattern1
+ # dl_UL_TransmissionPeriodicity
+ # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+ dl_UL_TransmissionPeriodicity = 6;
+ nrofDownlinkSlots = 7;
+ nrofDownlinkSymbols = 6;
+ nrofUplinkSlots = 2;
+ nrofUplinkSymbols = 4;
+
+ ssPBCH_BlockPower = 10;
+ }
+
+ );
- # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
- max_retx_threshold = 4;
- }
# ------- SCTP definitions
SCTP :
@@ -254,8 +237,8 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
- sdr_addrs = "addr=192.168.20.2,second_addr=192.168.10.2,mgmt_addr=192.168.20.2,clock_source=external,time_source=external";
-
+ sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2";
+ clock_src = "external";
}
);
@@ -268,16 +251,6 @@ THREAD_STRUCT = (
}
);
-NETWORK_CONTROLLER :
-{
- FLEXRAN_ENABLED = "no";
- FLEXRAN_INTERFACE_NAME = "lo";
- FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
- FLEXRAN_PORT = 2210;
- FLEXRAN_CACHE = "/mnt/oai_agent_cache";
- FLEXRAN_AWAIT_RECONF = "no";
-};
-
log_config :
{
global_log_level ="info";
diff --git a/ci-scripts/rcc-files/rbconfig.raw b/ci-scripts/rrc-files/rbconfig.raw
similarity index 100%
rename from ci-scripts/rcc-files/rbconfig.raw
rename to ci-scripts/rrc-files/rbconfig.raw
diff --git a/ci-scripts/rcc-files/reconfig.raw b/ci-scripts/rrc-files/reconfig.raw
similarity index 100%
rename from ci-scripts/rcc-files/reconfig.raw
rename to ci-scripts/rrc-files/reconfig.raw
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index 8efe6e3257..be6ebda8a9 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -1260,7 +1260,7 @@ function start_rf_sim_nr_ue {
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
if [ $LOC_S1_CONFIGURATION -eq 0 ]
then
- echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --numerology 1 -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --phy-test --rcc_config_path /home/ubuntu/tmp/ci-scripts/rcc-files --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
+ echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --numerology 1 -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --phy-test --rrc_config_path /home/ubuntu/tmp/ci-scripts/rrc-files --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
fi
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
echo "cat ./my-nr-softmodem-run.sh" >> $1
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 356328d7dc..b84ffd38a0 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -127,7 +127,7 @@ endfunction()
#set(CMAKE_BUILD_TYPE "Debug")
if (CMAKE_BUILD_TYPE STREQUAL "")
- set(CMAKE_BUILD_TYPE "Release")
+ set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif()
message("CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
add_list_string_option(CMAKE_BUILD_TYPE "RelWithDebInfo" "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." Debug Release RelWithDebInfo MinSizeRel)
@@ -2766,7 +2766,6 @@ target_link_libraries(nr_pucchsim
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
)
-#PUCCH ---> Prashanth
add_executable(nr_dlsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index c4f15c3a16..5227ed010e 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1089,25 +1089,29 @@
(Test8: 217 PRB 100 PDSCH-PRBs),
(Test9: 217 PRB 80 PDSCH-Offset),
(Test10: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
- (Test11: 106 PRBs 50 PDSCH-PRBs MCS Index 28
+ (Test11: 106 PRBs 50 PDSCH-PRBs MCS Index 28)
+ (Test12: 106 PRBs 50 PDSCH-PRBs MCS Index 16)
$OPENAIR_DIR/cmake_targets/build_oai
--phy_simulators -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$OPENAIR_DIR/targets/bin/nr_dlsim.Rel15
- -n100 -R106 -b106
- -n100 -R217 -b217
- -n100 -R273 -b273
- -n100 -R106 -o12
- -n100 -R217 -o48
- -n100 -R106 -a25
- -n100 -R106 -a51
- -n100 -R217 -b100
- -n100 -R217 -a80
- -n100 -R217 -a110 -b100
- -n100 -e28
- nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11
+
+ -n100 -R106 -b106 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R217 -b217 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R273 -b273 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R106 -o12 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R217 -o48 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R106 -a25 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R106 -a51 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R217 -b100 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R217 -a80 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -R217 -a110 -s5 -b100 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -e28 -s20 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -e16 -s10 -s5 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+
+ nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12
PDSCH test OK
segmentation fault|assertion|exiting|fatal
3
@@ -1249,11 +1253,11 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$OPENAIR_DIR/targets/bin/nr_ulsim.Rel15
- -f100 -m9 -r106 -s10
- -f100 -m16 -s20
- -f100 -m28 -s30
- -f100 -m9 -R217 -r217 -s10
- -f100 -m9 -R273 -r273 -s10
+ -n100 -m9 -r106 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -m16 -s10 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -m28 -s20 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -m9 -R217 -r217 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
+ -n100 -m9 -R273 -r273 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5
PUSCH test OK
segmentation fault|assertion|exiting|fatal
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index 9c9a02c934..8752e9b8c7 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -480,8 +480,6 @@ int wakeup_txfh(PHY_VARS_gNB *gNB,gNB_L1_rxtx_proc_t *proc,int frame_tx,int slot
}
AssertFatal((ret = pthread_mutex_lock(&ru_proc->mutex_gNBs))==0,"ERROR pthread_mutex_lock failed on mutex_gNBs L1_thread_tx with ret=%d\n",ret);
- AssertFatal((ret=pthread_mutex_lock(&ru_proc->mutex_gNBs))==0,"mutex_lock returned %d\n",ret);
-
ru_proc->instance_cnt_gNBs = 0;
ru_proc->timestamp_tx = timestamp_tx;
ru_proc->tti_tx = slot_tx;
diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index a7e2c0f0d5..4183d51786 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -759,7 +759,19 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
nextslot_type == NR_UPLINK_SLOT) {
flags = 3; // end of burst
}
-
+
+ if (fp->freq_range==nr_FR2) {
+ // the beam index is written in bits 8-10 of the flags
+ // bit 11 enables the gpio programming
+ int beam=0;
+ if (slot==0 || slot==40) beam=0&8;
+ if (slot==10 || slot==50) beam=1&8;
+ if (slot==20 || slot==60) beam=2&8;
+ if (slot==30 || slot==70) beam=3&8;
+
+ flags |= beam<<8;
+ }
+
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_WRITE_FLAGS, flags );
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame );
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, slot );
diff --git a/openair1/PHY/CODING/coding_defs.h b/openair1/PHY/CODING/coding_defs.h
index 00708ed60c..9b111309cd 100644
--- a/openair1/PHY/CODING/coding_defs.h
+++ b/openair1/PHY/CODING/coding_defs.h
@@ -38,7 +38,7 @@
#define MAX_TURBO_ITERATIONS_MBSFN 8
#define MAX_TURBO_ITERATIONS max_turbo_iterations
-#define MAX_LDPC_ITERATIONS 10//5
+#define MAX_LDPC_ITERATIONS 5
#define MAX_LDPC_ITERATIONS_MBSFN 4
#define LTE_NULL 2
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 781e8129e0..df9747104a 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -360,12 +360,16 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
nfapi_nr_config_request_scf_t *gNB_config = &gNB->gNB_config;
//overwrite for new NR parameters
+ uint64_t rev_burst=0;
+ for (int i=0; i<64; i++)
+ rev_burst |= (((position_in_burst>>(63-i))&0x01)<cell_config.phy_cell_id.value = Nid_cell;
gNB_config->ssb_config.scs_common.value = mu;
gNB_config->ssb_table.ssb_subcarrier_offset.value = 0;
gNB_config->ssb_table.ssb_offset_point_a.value = (N_RB_DL-20)>>1;
- gNB_config->ssb_table.ssb_mask_list[0].ssb_mask.value = position_in_burst;
- gNB_config->ssb_table.ssb_mask_list[1].ssb_mask.value = position_in_burst>>32;
+ gNB_config->ssb_table.ssb_mask_list[1].ssb_mask.value = (rev_burst)&(0xFFFFFFFF);
+ gNB_config->ssb_table.ssb_mask_list[0].ssb_mask.value = (rev_burst>>32)&(0xFFFFFFFF);
gNB_config->cell_config.frame_duplex_type.value = TDD;
gNB_config->ssb_table.ssb_period.value = 1; //10ms
gNB_config->carrier_config.dl_grid_size[mu].value = N_RB_DL;
@@ -381,6 +385,9 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
fp->ul_CarrierFreq = 3500000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
fp->nr_band = 78;
fp->threequarter_fs= 0;
+
+ gNB_config->carrier_config.dl_bandwidth.value = config_bandwidth(mu, N_RB_DL, fp->nr_band);
+
nr_init_frame_parms(gNB_config, fp);
gNB->configured = 1;
LOG_I(PHY,"gNB configured\n");
diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c
index 50a9291e33..c3fe9c54b1 100644
--- a/openair1/PHY/INIT/nr_parms.c
+++ b/openair1/PHY/INIT/nr_parms.c
@@ -99,12 +99,12 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, uint16_t bw)
// selection of SS block pattern according to TS 38101-1 Table 5.4.3.3-1 for SCS 30kHz
if (fp->nr_band == 5 || fp->nr_band == 66)
- fp->ssb_type = nr_ssb_type_B;
+ fp->ssb_type = nr_ssb_type_B;
else{
if (fp->nr_band == 41 || ( fp->nr_band > 76 && fp->nr_band < 80) )
- fp->ssb_type = nr_ssb_type_C;
+ fp->ssb_type = nr_ssb_type_C;
else
- AssertFatal(1==0,"NR Operating Band n%d not available for SS block SCS with mu=%d\n", fp->nr_band, mu);
+ AssertFatal(1==0,"NR Operating Band n%d not available for SS block SCS with mu=%d\n", fp->nr_band, mu);
}
switch(bw){
@@ -148,21 +148,21 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, uint16_t bw)
break;
case 90:
- AssertFatal(fp->threequarter_fs==0,"3/4 sampling impossible for N_RB %d and MU %d\n",fp->N_RB_DL,mu);
+ AssertFatal(fp->threequarter_fs==0,"3/4 sampling impossible for %d MHz band and MU %d\n",bw,mu);
fp->ofdm_symbol_size = 4096;
fp->first_carrier_offset = 2626; //4096 - ( (245*12) / 2 )
fp->nb_prefix_samples0 = 352;
fp->nb_prefix_samples = 288;
break;
case 100:
- AssertFatal(fp->threequarter_fs==0,"3/4 sampling impossible for N_RB %d and MU %d\n",fp->N_RB_DL,mu);
+ AssertFatal(fp->threequarter_fs==0,"3/4 sampling impossible for %d MHz band and MU %d\n",bw,mu);
fp->ofdm_symbol_size = 4096;
fp->first_carrier_offset = 2458; //4096 - ( (273*12) / 2 )
fp->nb_prefix_samples0 = 352;
fp->nb_prefix_samples = 288;
break;
default:
- AssertFatal(1==0,"Number of resource blocks %d undefined for mu %d, frame parms = %p\n", fp->N_RB_DL, mu, fp);
+ AssertFatal(1==0,"%d MHz band undefined for mu %d, frame parms = %p\n", bw, mu, fp);
}
break;
@@ -184,7 +184,7 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, uint16_t bw)
case 90:
case 100:
default:
- AssertFatal(1==0,"Bandwidth of %d MHz undefined for mu %d, frame parms = %p\n", bw, mu, fp);
+ AssertFatal(1==0,"%d MHz band undefined for mu %d, frame parms = %p\n", bw, mu, fp);
}
break;
@@ -206,7 +206,7 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, uint16_t bw)
fp->nb_prefix_samples = 36;
break;
default:
- AssertFatal(1==0,"Number of resource blocks %d undefined for mu %d, frame parms = %p\n", fp->N_RB_DL, mu, fp);
+ AssertFatal(1==0,"%d MHz band undefined for mu %d, frame parms = %p\n", bw, mu, fp);
}
break;
@@ -252,7 +252,7 @@ int nr_init_frame_parms(nfapi_nr_config_request_scf_t* cfg,
{
fp->frame_type = cfg->cell_config.frame_duplex_type.value;
- fp->L_ssb = (((uint64_t) cfg->ssb_table.ssb_mask_list[1].ssb_mask.value)<<32) | cfg->ssb_table.ssb_mask_list[0].ssb_mask.value ;
+ fp->L_ssb = (((uint64_t) cfg->ssb_table.ssb_mask_list[0].ssb_mask.value)<<32) | cfg->ssb_table.ssb_mask_list[1].ssb_mask.value ;
fp->N_RB_DL = cfg->carrier_config.dl_grid_size[cfg->ssb_config.scs_common.value].value;
fp->N_RB_UL = cfg->carrier_config.ul_grid_size[cfg->ssb_config.scs_common.value].value;
@@ -385,7 +385,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
fp->Lmax = 64;
}
- fp->L_ssb = (((uint64_t) config->ssb_table.ssb_mask_list[1].ssb_mask)<<32) | config->ssb_table.ssb_mask_list[0].ssb_mask;
+ fp->L_ssb = (((uint64_t) config->ssb_table.ssb_mask_list[1].ssb_mask)<<32) | config->ssb_table.ssb_mask_list[1].ssb_mask;
fp->N_ssb = 0;
for (int p=0; pLmax; p++)
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
index c269618743..d62687bd9c 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -166,7 +166,7 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
int k,l,k_prime,dci_idx, dmrs_idx;
/*First iteration: single DCI*/
- nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15;
+ nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15=NULL;
// find coreset descriptor
@@ -243,8 +243,8 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
printf("Encoded Payload (length:%d dwords):\n", encoded_length>>5);
for (int i=0; i>5; i++)
- printf("[%d]->0x%08x \t", i,encoder_output[i]);
-
+ printf("[%d]->0x%08x \t", i,encoder_output[i]);
+
printf("\n");
#endif
/// Scrambling
@@ -273,9 +273,10 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
/*Reorder REG list for a freq first mapping*/
uint8_t nb_regs = pdcch_pdu_rel15->AggregationLevel[d]*NR_NB_REG_PER_CCE;
+ uint8_t reg_idx0 = pdcch_pdu_rel15->CceIndex[d]*NR_NB_REG_PER_CCE;
/*Mapping the encoded DCI along with the DMRS */
- for (int reg_idx=0; reg_idx= frame_parms.ofdm_symbol_size)
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index a0fb8d7ed6..872342cd5b 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -684,7 +684,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
}
harq_process->handled = 1;
- return (ulsch->max_ldpc_iterations + 1);
+ ret = ulsch->max_ldpc_iterations + 1;
} else {
@@ -705,29 +705,28 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
{
LOG_D(PHY,"[gNB %d] ULSCH: Setting ACK for nr_tti_rx %d (pid %d, round %d, TBS %d)\n",phy_vars_gNB->Mod_id,nr_tti_rx,harq_pid,harq_process->round,harq_process->TBS);
}
- }
-
- // Reassembly of Transport block here
- offset = 0;
- Kr = harq_process->K;
- Kr_bytes = Kr>>3;
-
- for (r=0; rC; r++) {
-
- memcpy(harq_process->b+offset,
- harq_process->c[r],
- Kr_bytes- - (harq_process->F>>3) -((harq_process->C>1)?3:0));
-
- offset += (Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0));
+ // Reassembly of Transport block here
+ offset = 0;
+ Kr = harq_process->K;
+ Kr_bytes = Kr>>3;
+
+ for (r=0; rC; r++) {
+
+ memcpy(harq_process->b+offset,
+ harq_process->c[r],
+ Kr_bytes- - (harq_process->F>>3) -((harq_process->C>1)?3:0));
+
+ offset += (Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0));
+
#ifdef DEBUG_ULSCH_DECODING
- printf("Segment %u : Kr = %u bytes\n", r, Kr_bytes);
- printf("copied %d bytes to b sequence (harq_pid %d)\n", (Kr_bytes - (harq_process->F>>3)-((harq_process->C>1)?3:0)), harq_pid);
- printf("b[0] = %x, c[%d] = %x\n", harq_process->b[offset], harq_process->F>>3, harq_process->c[r]);
+ printf("Segment %u : Kr = %u bytes\n", r, Kr_bytes);
+ printf("copied %d bytes to b sequence (harq_pid %d)\n", (Kr_bytes - (harq_process->F>>3)-((harq_process->C>1)?3:0)), harq_pid);
+ printf("b[0] = %x, c[%d] = %x\n", harq_process->b[offset], harq_process->F>>3, harq_process->c[r]);
#endif
-
+
+ }
}
-
ulsch->last_iteration_cnt = ret;
return(ret);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
index 03f1425739..9921862c52 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
@@ -150,7 +150,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
for (int i=0; i<9; i++) {
z[index_z + i] = llr[index_llr + i];
- LOG_DDD("[reg=%d,bundle_j=%d] z[%d]=(%d,%d) <-> \t[f_reg=%d,fbundle_j=%d] llr[%d]=(%d,%d) \n",
+ LOG_D(PHY,"[reg=%d,bundle_j=%d] z[%d]=(%d,%d) <-> \t[f_reg=%d,fbundle_j=%d] llr[%d]=(%d,%d) \n",
reg,bundle_j,(index_z + i),*(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]),
f_reg,f_bundle_j,(index_llr + i),*(int16_t *) &llr[index_llr + i], *(1 + (int16_t *) &llr[index_llr + i]));
}
@@ -678,7 +678,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
int n_rb,rb_offset;
get_coreset_rballoc(rel15->coreset.frequency_domain_resource,&n_rb,&rb_offset);
for (int s=rel15->coreset.StartSymbolIndex; s<(rel15->coreset.StartSymbolIndex+rel15->coreset.duration); s++) {
- LOG_DD("in nr_pdcch_extract_rbs_single(rxdataF -> rxdataF_ext || dl_ch_estimates -> dl_ch_estimates_ext)\n");
+ LOG_D(PHY,"in nr_pdcch_extract_rbs_single(rxdataF -> rxdataF_ext || dl_ch_estimates -> dl_ch_estimates_ext)\n");
nr_pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[slot]].rxdataF,
pdcch_vars->dl_ch_estimates,
@@ -690,8 +690,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
n_rb,
rel15->BWPStart);
- LOG_DD("we enter nr_pdcch_channel_level(avgP=%d) => compute channel level based on ofdm symbol 0, pdcch_vars[eNB_id]->dl_ch_estimates_ext\n",*avgP);
- LOG_DD("in nr_pdcch_channel_level(dl_ch_estimates_ext -> dl_ch_estimates_ext)\n");
+ LOG_D(PHY,"we enter nr_pdcch_channel_level(avgP=%d) => compute channel level based on ofdm symbol 0, pdcch_vars[eNB_id]->dl_ch_estimates_ext\n",*avgP);
+ LOG_D(PHY,"in nr_pdcch_channel_level(dl_ch_estimates_ext -> dl_ch_estimates_ext)\n");
// compute channel level based on ofdm symbol 0
nr_pdcch_channel_level(pdcch_vars->dl_ch_estimates_ext,
frame_parms,
@@ -710,8 +710,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
T(T_UE_PHY_PDCCH_ENERGY, T_INT(0), T_INT(0), T_INT(frame%1024), T_INT(slot),
T_INT(avgP[0]), T_INT(avgP[1]), T_INT(avgP[2]), T_INT(avgP[3]));
#endif
- LOG_DD("we enter nr_pdcch_channel_compensation(log2_maxh=%d)\n",log2_maxh);
- LOG_DD("in nr_pdcch_channel_compensation(rxdataF_ext x dl_ch_estimates_ext -> rxdataF_comp)\n");
+ LOG_D(PHY,"we enter nr_pdcch_channel_compensation(log2_maxh=%d)\n",log2_maxh);
+ LOG_D(PHY,"in nr_pdcch_channel_compensation(rxdataF_ext x dl_ch_estimates_ext -> rxdataF_comp)\n");
// compute LLRs for ofdm symbol 0 only
nr_pdcch_channel_compensation(pdcch_vars->rxdataF_ext,
pdcch_vars->dl_ch_estimates_ext,
@@ -722,12 +722,12 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
log2_maxh,
n_rb); // log2_maxh+I0_shift
if (frame_parms->nb_antennas_rx > 1) {
- LOG_DD("we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx);
+ LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx);
nr_pdcch_detection_mrc(frame_parms, pdcch_vars->rxdataF_comp,s);
}
- LOG_DD("we enter nr_pdcch_llr(for symbol %d), pdcch_vars[eNB_id]->rxdataF_comp ---> pdcch_vars[eNB_id]->llr \n",s);
- LOG_DD("in nr_pdcch_llr(rxdataF_comp -> llr)\n");
+ LOG_D(PHY,"we enter nr_pdcch_llr(for symbol %d), pdcch_vars[eNB_id]->rxdataF_comp ---> pdcch_vars[eNB_id]->llr \n",s);
+ LOG_D(PHY,"in nr_pdcch_llr(rxdataF_comp -> llr)\n");
nr_pdcch_llr(frame_parms,
pdcch_vars->rxdataF_comp,
pdcch_vars->llr,
@@ -745,7 +745,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
#endif
}
- LOG_DD("we enter nr_pdcch_demapping_deinterleaving()\n");
+ LOG_D(PHY,"we enter nr_pdcch_demapping_deinterleaving()\n");
nr_pdcch_demapping_deinterleaving((uint32_t *) pdcch_vars->llr,
(uint32_t *) pdcch_vars->e_rx,
frame_parms,
@@ -754,6 +754,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
rel15->coreset.RegBundleSize,
rel15->coreset.InterleaverSize,
rel15->coreset.ShiftIndex);
+ /*
nr_pdcch_unscrambling(rel15->rnti,
frame_parms,
slot,
@@ -761,8 +762,9 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
rel15->coreset.duration*n_rb*9*2,
// get_nCCE(n_pdcch_symbols, frame_parms, mi) * 72,
rel15->coreset.pdcch_dmrs_scrambling_id);
- LOG_DD("we end nr_pdcch_unscrambling()\n");
- LOG_DD("Ending nr_rx_pdcch() function\n");
+ */
+ LOG_D(PHY,"we end nr_pdcch_unscrambling()\n");
+ LOG_D(PHY,"Ending nr_rx_pdcch() function\n");
}
return (0);
@@ -798,7 +800,7 @@ void pdcch_scrambling(NR_DL_FRAME_PARMS *frame_parms,
#ifdef NR_PDCCH_DCI_RUN
void nr_pdcch_unscrambling(uint16_t crnti, NR_DL_FRAME_PARMS *frame_parms, uint8_t slot,
- int16_t *z, uint32_t length, uint16_t pdcch_DMRS_scrambling_id) {
+ int16_t *z, int16_t *z2,uint32_t length, uint16_t pdcch_DMRS_scrambling_id) {
int i;
uint8_t reset;
uint32_t x1, x2, s = 0;
@@ -818,7 +820,8 @@ void nr_pdcch_unscrambling(uint16_t crnti, NR_DL_FRAME_PARMS *frame_parms, uint8
reset = 0;
}
- if (((s >> (i % 32)) & 1) == 1) z[i] = -z[i];
+ if (((s >> (i % 32)) & 1) == 1) z2[i] = -z[i];
+ else z2[i]=z[i];
}
}
@@ -837,15 +840,29 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
rel15 = &pdcch_vars->pdcch_config[i];
int dci_length = rel15->dci_length;
+ int16_t tmp_e[16*108];
+
for (int j=0;jnumber_of_candidates;j++) {
+ LOG_D(PHY,"Trying DCI candidate %d, CCE %d (%d), L %d\n",j,rel15->CCE[j],rel15->CCE[j]*9*6*2,rel15->L[j]);
int CCEind = rel15->CCE[j];
int L = rel15->L[j];
uint64_t dci_estimation[2]= {0};
const t_nrPolar_params *currentPtrDCI=nr_polar_params(1, dci_length, L,1,&ue->polarList);
- uint16_t crc = polar_decoder_int16(&pdcch_vars->e_rx[CCEind*9*6*2],
+
+ nr_pdcch_unscrambling(rel15->rnti,
+ &ue->frame_parms,
+ slot,
+ &pdcch_vars->e_rx[CCEind*108],
+ tmp_e,
+ L*108,
+ // get_nCCE(n_pdcch_symbols, frame_parms, mi) * 72,
+ rel15->coreset.pdcch_dmrs_scrambling_id);
+
+ uint16_t crc = polar_decoder_int16(tmp_e,
dci_estimation,
1,
currentPtrDCI);
+ LOG_D(PHY,"Decoded crc %x\n",crc);
if (crc == rel15->rnti) {
dci_ind->SFN = frame;
dci_ind->slot = slot;
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
index 737bd4d1ff..177640bacc 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -546,7 +546,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
//LOG_E(PHY,"AbsSubframe %d.%d Start LDPC segment %d/%d A %d ",frame%1024,nr_tti_rx,r,harq_process->C-1, A);
- printf("harq process dr iteration %d\n", p_decParams->numMaxIter);
+ //printf("harq process dr iteration %d\n", p_decParams->numMaxIter);
memset(pv,0,2*harq_process->Z*sizeof(int16_t));
//memset(pl,0,2*p_decParams->Z*sizeof(int8_t));
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
index e6b43c26ac..b5a5ecc4db 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
@@ -1539,7 +1539,7 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,DCI_ALLOC_t *dci_alloc,NR_DL_FRAME
void pdcch_interleaving(NR_DL_FRAME_PARMS *frame_parms,int32_t **z, int32_t **wbar,uint8_t n_symbols_pdcch,uint8_t mi);
void nr_pdcch_unscrambling(uint16_t crnti, NR_DL_FRAME_PARMS *frame_parms, uint8_t slot,
- int16_t *z, uint32_t length, uint16_t pdcch_DMRS_scrambling_id);
+ int16_t *z, int16_t *z2,uint32_t length, uint16_t pdcch_DMRS_scrambling_id);
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 9e17251088..60609bae3f 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -61,7 +61,7 @@ void nr_set_ssb_first_subcarrier(nfapi_nr_config_request_scf_t *cfg, NR_DL_FRAME
sco = cfg->ssb_table.ssb_subcarrier_offset.value;
fp->ssb_start_subcarrier = (12 * cfg->ssb_table.ssb_offset_point_a.value + sco);
- LOG_I(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,sco);
+ LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,sco);
}
void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
@@ -95,8 +95,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
ssb_index = i + SSB_Table[rel_slot]; // computing the ssb_index
- if ((ssb_index<64) && ((fp->L_ssb >> ssb_index) & 0x01)) { // generating the ssb only if the bit of L_ssb at current ssb index is 1
-
+ if ((ssb_index<64) && ((fp->L_ssb >> (63-ssb_index)) & 0x01)) { // generating the ssb only if the bit of L_ssb at current ssb index is 1
fp->ssb_index = ssb_index;
int ssb_start_symbol_abs = nr_get_ssb_start_symbol(fp); // computing the starting symbol for current ssb
ssb_start_symbol = ssb_start_symbol_abs % fp->symbols_per_slot; // start symbol wrt slot
@@ -279,9 +278,9 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
0);
if (ret > gNB->ulsch[ULSCH_id][0]->max_ldpc_iterations)
- LOG_I(PHY, "ULSCH in error\n");
+ LOG_I(PHY, "ULSCH %d in error\n",ULSCH_id);
else
- LOG_I(PHY, "ULSCH received ok\n");
+ LOG_I(PHY, "ULSCH %d received ok\n",ULSCH_id);
}
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 103c73b903..ba84abb3c2 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -229,17 +229,18 @@ int main(int argc, char **argv)
int mcsIndex_set=0,rbStart_set=0,rbSize_set=0;
int print_perf = 0;
+ FILE *scg_fd=NULL;
+
while ((c = getopt (argc, argv, "f:hA:pf:g:i:j:n:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:e:m:")) != -1) {
switch (c) {
- /*case 'f':
- write_output_file=1;
- output_fd = fopen(optarg,"w");
+ case 'f':
+ scg_fd = fopen(optarg,"r");
- if (output_fd==NULL) {
+ if (scg_fd==NULL) {
printf("Error opening %s\n",optarg);
exit(-1);
}
- break;*/
+ break;
/*case 'd':
frame_type = 1;
@@ -429,7 +430,7 @@ int main(int argc, char **argv)
printf("-O oversampling factor (1,2,4,8,16)\n");
printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n");
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
- //printf("-f Output filename (.txt format) for Pe/SNR results\n");
+ printf("-f raw file containing RRC configuration (generated by gNB)\n");
printf("-F Input filename (.txt format) for RX conformance testing\n");
printf("-E used CSS scheduler\n");
printf("-o CORESET offset\n");
@@ -470,8 +471,8 @@ int main(int argc, char **argv)
gNB_mac = RC.nrmac[0];
gNB_RRC_INST rrc;
memset((void*)&rrc,0,sizeof(rrc));
+
// read in SCGroupConfig
- FILE *scg_fd = fopen("reconfig.raw","r");
AssertFatal(scg_fd != NULL,"no reconfig.raw file\n");
char buffer[1024];
int msg_len=fread(buffer,1,1024,scg_fd);
diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c
index 0adeda61bb..8d3e372b57 100644
--- a/openair1/SIMULATION/NR_PHY/pbchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pbchsim.c
@@ -589,7 +589,8 @@ int main(int argc, char **argv)
while (!((SSB_positions >> ssb_index) & 0x01)) ssb_index++; // to select the first transmitted ssb
frame_parms->ssb_index = ssb_index;
UE->symbol_offset = nr_get_ssb_start_symbol(frame_parms);
- int ssb_slot = (ssb_index/2)+(n_hf*frame_parms->slots_per_frame);
+
+ int ssb_slot = (ssb_index>>1)+(n_hf*frame_parms->slots_per_frame);
for (int i=UE->symbol_offset+1; isymbol_offset+4; i++) {
nr_slot_fep(UE,
i%frame_parms->symbols_per_slot,
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index cfa834b876..ac2d1e7ec2 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -52,7 +52,6 @@
#include "openair1/SIMULATION/TOOLS/sim.h"
#include "openair1/SIMULATION/RF/rf.h"
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
-#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
#include "openair2/LAYER2/NR_MAC_UE/mac_proto.h"
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
@@ -63,6 +62,7 @@ PHY_VARS_NR_UE *UE;
RAN_CONTEXT_t RC;
int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
+int sf_ahead=4, phy_test = 0;
double cpuf;
uint8_t nfapi_mode = 0;
uint16_t NB_UE_INST = 1;
@@ -116,7 +116,10 @@ int generate_dlsch_header(unsigned char *mac_header,
uint64_t get_softmodem_optmask(void) {return 0;}
int rlc_module_init (int enb) {return(0);}
void pdcp_layer_init (void) {}
+void pdcp_run (const protocol_ctxt_t *const ctxt_pP) { return;}
void nr_ip_over_LTE_DRB_preconfiguration(void){}
+int rrc_init_nr_global_param(void){return(0);}
+
// needed for some functions
uint16_t n_rnti = 0x1234;
@@ -128,9 +131,9 @@ int main(int argc, char **argv)
int i,sf;
double SNR, snr0 = -2.0, snr1 = 2.0;
double sigma, sigma_dB;
- double snr_step = 0.1;
+ double snr_step = 1;
uint8_t snr1set = 0;
- int slot = 0;
+ int slot = 0, frame = 0;
FILE *output_fd = NULL;
//uint8_t write_output_file = 0;
int trial, n_trials = 1, n_errors = 0, n_false_positive = 0, delay = 0;
@@ -144,13 +147,12 @@ int main(int argc, char **argv)
SCM_t channel_model = AWGN; //Rayleigh1_anticorr;
uint16_t N_RB_DL = 106, N_RB_UL = 106, mu = 1;
//unsigned char frame_type = 0;
- int number_of_frames = 1;
int frame_length_complex_samples,frame_length_complex_samples_no_prefix;
NR_DL_FRAME_PARMS *frame_parms;
int loglvl = OAILOG_WARNING;
uint64_t SSB_positions=0x01;
uint16_t nb_symb_sch = 12;
- int start_symbol = 2;
+ int start_symbol = 0;
uint16_t nb_rb = 50;
uint8_t Imcs = 9;
uint8_t precod_nbr_layers = 1;
@@ -161,11 +163,13 @@ int main(int argc, char **argv)
int32_t txlev;
int start_rb = 0;
int UE_id =0; // [hna] only works for UE_id = 0 because NUMBER_OF_NR_UE_MAX is set to 1 (phy_init_nr_gNB causes segmentation fault)
-
+ float target_error_rate = 0.01;
+
cpuf = get_cpu_freq_GHz();
UE_nr_rxtx_proc_t UE_proc;
+ FILE *scg_fd=NULL;
if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == 0 ) {
@@ -187,19 +191,14 @@ int main(int argc, char **argv)
break;
case 'f':
- number_of_frames = atoi(optarg);
- break;
+ scg_fd = fopen(optarg, "r");
- /*case 'f':
- write_output_file = 1;
- output_fd = fopen(optarg, "w");
-
- if (output_fd == NULL) {
+ if (scg_fd == NULL) {
printf("Error opening %s\n", optarg);
exit(-1);
}
- break;*/
+ break;
case 'g':
switch ((char) *optarg) {
@@ -356,10 +355,10 @@ int main(int argc, char **argv)
//printf("-x Transmission mode (1,2,6 for the moment)\n");
printf("-y Number of TX antennas used in eNB\n");
printf("-z Number of RX antennas used in UE\n");
-
printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n");
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
printf("-F Input filename (.txt format) for RX conformance testing\n");
+ printf("-G raw file containing RRC configuration (generated by gNB)\n");
printf("-M Multiple SSB positions in burst\n");
printf("-N Nid_cell\n");
printf("-O oversampling factor (1,2,4,8,16)\n");
@@ -403,12 +402,74 @@ int main(int argc, char **argv)
frame_parms->N_RB_UL = N_RB_UL;
frame_parms->Ncp = extended_prefix_flag ? EXTENDED : NORMAL;
- crcTableInit();
+ RC.nb_nr_macrlc_inst = 1;
+ RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
+ for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
+ RC.nb_nr_mac_CC[i] = 1;
+ mac_top_init_gNB();
+ gNB_MAC_INST* gNB_mac = RC.nrmac[0];
+ gNB_RRC_INST rrc;
+ memset((void*)&rrc,0,sizeof(rrc));
- nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions);
+ // read in SCGroupConfig
+ AssertFatal(scg_fd != NULL,"no reconfig.raw file\n");
+ char buffer[1024];
+ int msg_len=fread(buffer,1,1024,scg_fd);
+ NR_RRCReconfiguration_t *NR_RRCReconfiguration;
- phy_init_nr_gNB(gNB, 0, 0);
- //init_eNB_afterRU();
+ printf("Decoding NR_RRCReconfiguration (%d bytes)\n",msg_len);
+ asn_dec_rval_t dec_rval = uper_decode_complete( NULL,
+ &asn_DEF_NR_RRCReconfiguration,
+ (void **)&NR_RRCReconfiguration,
+ (uint8_t *)buffer,
+ msg_len);
+
+ if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
+ AssertFatal(1==0,"NR_RRCReConfiguration decode error\n");
+ // free the memory
+ SEQUENCE_free( &asn_DEF_NR_RRCReconfiguration, NR_RRCReconfiguration, 1 );
+ exit(-1);
+ }
+ fclose(scg_fd);
+
+ AssertFatal(NR_RRCReconfiguration->criticalExtensions.present == NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration,"wrong NR_RRCReconfiguration->criticalExstions.present type\n");
+
+ NR_RRCReconfiguration_IEs_t *reconfig_ies = NR_RRCReconfiguration->criticalExtensions.choice.rrcReconfiguration;
+ NR_CellGroupConfig_t *secondaryCellGroup;
+ dec_rval = uper_decode_complete( NULL,
+ &asn_DEF_NR_CellGroupConfig,
+ (void **)&secondaryCellGroup,
+ (uint8_t *)reconfig_ies->secondaryCellGroup->buf,
+ reconfig_ies->secondaryCellGroup->size);
+
+ if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
+ AssertFatal(1==0,"NR_CellGroupConfig decode error\n");
+ // free the memory
+ SEQUENCE_free( &asn_DEF_NR_CellGroupConfig, secondaryCellGroup, 1 );
+ exit(-1);
+ }
+
+ NR_ServingCellConfigCommon_t *scc = secondaryCellGroup->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
+
+ xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
+
+ rrc.carrier.servingcellconfigcommon = secondaryCellGroup->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
+ printf("%p,%p\n",
+ secondaryCellGroup->spCellConfig->reconfigurationWithSync->spCellConfigCommon,
+ rrc.carrier.servingcellconfigcommon);
+
+ AssertFatal((gNB->if_inst = NR_IF_Module_init(0))!=NULL,"Cannot register interface");
+ gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
+ // common configuration
+ rrc_mac_config_req_gNB(0,0,1,scc,0,0,NULL);
+ // UE dedicated configuration
+ rrc_mac_config_req_gNB(0,0,1,NULL,1,secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
+ phy_init_nr_gNB(gNB,0,0);
+ N_RB_DL = gNB->frame_parms.N_RB_DL;
+
+ //crcTableInit();
+
+ //nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions);
frame_length_complex_samples = frame_parms->samples_per_subframe;
frame_length_complex_samples_no_prefix = frame_parms->samples_per_subframe_wCP;
@@ -428,7 +489,9 @@ int main(int argc, char **argv)
}
//nr_init_frame_parms_ue(&UE->frame_parms);
- //init_nr_ue_transport(UE, 0);
+ init_nr_ue_transport(UE, 0);
+
+ /*
for (sf = 0; sf < 2; sf++) {
for (i = 0; i < 2; i++) {
@@ -438,9 +501,29 @@ int main(int argc, char **argv)
printf("Can't get ue ulsch structures\n");
exit(-1);
}
-
}
}
+ */
+
+ nr_l2_init_ue(NULL);
+ NR_UE_MAC_INST_t* UE_mac = get_mac_inst(0);
+
+ UE->if_inst = nr_ue_if_module_init(0);
+ UE->if_inst->scheduled_response = nr_ue_scheduled_response;
+ UE->if_inst->phy_config_request = nr_ue_phy_config_request;
+ UE->if_inst->dl_indication = nr_ue_dl_indication;
+ UE->if_inst->ul_indication = nr_ue_ul_indication;
+
+ UE_mac->if_module = nr_ue_if_module_init(0);
+
+ //Configure UE
+ rrc.carrier.MIB = (uint8_t*) malloc(4);
+ rrc.carrier.sizeof_MIB = do_MIB_NR(&rrc,0);
+
+ nr_rrc_mac_config_req_ue(0,0,0,rrc.carrier.mib.message.choice.mib,secondaryCellGroup->spCellConfig);
+
+ nr_ue_phy_config_request(&UE_mac->phy_config);
+
unsigned char harq_pid = 0;
@@ -455,7 +538,6 @@ int main(int argc, char **argv)
unsigned char *test_input_bit;
uint32_t errors_decoding = 0;
uint32_t errors_scrambling = 0;
- uint32_t is_frame_in_error = 0;
test_input_bit = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
estimated_output_bit = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
@@ -493,13 +575,6 @@ int main(int argc, char **argv)
for (SNR = snr0; SNR < snr1; SNR += snr_step) {
- printf("-------------------\n");
- printf("SNR %f\n", SNR);
- printf("-------------------\n");
-
- is_frame_in_error = 0;
- for (int frame = 0; frame < number_of_frames; frame++) {
-
UE_proc.nr_tti_tx = slot;
UE_proc.frame_tx = frame;
@@ -589,7 +664,7 @@ int main(int argc, char **argv)
phy_procedures_nrUE_TX(UE, &UE_proc, gNB_id, 0);
- if (number_of_frames==1)
+ if (n_trials==1)
LOG_M("txsig0.m","txs0", UE->common_vars.txdata[0],frame_length_complex_samples,1,1);
///////////
@@ -629,12 +704,16 @@ int main(int argc, char **argv)
//----------------------------------------------------------
phy_procedures_gNB_common_RX(gNB, frame, slot);
- if (number_of_frames==1)
+ if (n_trials==1)
LOG_M("rxsigF0.m","rxsF0",gNB->common_vars.rxdataF[0],frame_length_complex_samples_no_prefix,1,1);
phy_procedures_gNB_uespec_RX(gNB, frame, slot);
////////////////////////////////////////////////////////////
+ if (gNB->ulsch[0][0]->last_iteration_cnt >=
+ gNB->ulsch[0][0]->max_ldpc_iterations+1)
+ n_errors++;
+
//----------------------------------------------------------
//----------------- count and print errors -----------------
//----------------------------------------------------------
@@ -644,14 +723,15 @@ int main(int argc, char **argv)
if(((ulsch_ue[0]->g[i] == 0) && (gNB->pusch_vars[UE_id]->llr[i] <= 0)) ||
((ulsch_ue[0]->g[i] == 1) && (gNB->pusch_vars[UE_id]->llr[i] >= 0)))
{
- if(errors_scrambling == 0)
- printf("\x1B[34m" "[frame %d][trial %d]\t1st bit in error in unscrambling = %d\n" "\x1B[0m", frame, trial, i);
+ /*if(errors_scrambling == 0)
+ printf("\x1B[34m" "[frame %d][trial %d]\t1st bit in error in unscrambling = %d\n" "\x1B[0m", frame, trial, i);*/
errors_scrambling++;
}
}
if (errors_scrambling > 0) {
- printf("\x1B[31m""[frame %d][trial %d]\tnumber of errors in unscrambling = %d\n" "\x1B[0m", frame, trial, errors_scrambling);
+ if (n_trials==1)
+ printf("\x1B[31m""[frame %d][trial %d]\tnumber of errors in unscrambling = %d\n" "\x1B[0m", frame, trial, errors_scrambling);
}
for (i = 0; i < TBS; i++) {
@@ -660,38 +740,39 @@ int main(int argc, char **argv)
test_input_bit[i] = (ulsch_ue[0]->harq_processes[harq_pid]->b[i/8] & (1 << (i & 7))) >> (i & 7);
if (estimated_output_bit[i] != test_input_bit[i]) {
- if(errors_decoding == 0)
- printf("\x1B[34m""[frame %d][trial %d]\t1st bit in error in decoding = %d\n" "\x1B[0m", frame, trial, i);
+ /*if(errors_decoding == 0)
+ printf("\x1B[34m""[frame %d][trial %d]\t1st bit in error in decoding = %d\n" "\x1B[0m", frame, trial, i);*/
errors_decoding++;
}
}
if (errors_decoding > 0) {
- is_frame_in_error = 1;
n_false_positive++;
- printf("\x1B[31m""[frame %d][trial %d]\tnumber of errors in decoding = %d\n" "\x1B[0m", frame, trial, errors_decoding);
- } else {
- is_frame_in_error = 0;
- break;
- }
- ////////////////////////////////////////////////////////////
+ if (n_trials==1)
+ printf("\x1B[31m""[frame %d][trial %d]\tnumber of errors in decoding = %d\n" "\x1B[0m", frame, trial, errors_decoding);
+ }
+
} // trial loop
- if (is_frame_in_error == 1)
- break;
- } // frame loop
+ printf("*****************************************\n");
+ printf("SNR %f: n_errors (negative CRC) = %d/%d, false_positive %d/%d, errors_scrambling %d/%d\n", SNR, n_errors, n_trials, n_false_positive, n_trials, errors_scrambling, n_trials);
+ printf("\n");
+ printf("SNR %f: Channel BLER %e, Channel BER %e\n", SNR,(double)n_errors/n_trials,(double)errors_scrambling/available_bits/n_trials);
+ printf("*****************************************\n");
+ printf("\n");
- if(is_frame_in_error == 0)
- break;
+ if(n_trials==1)
+ break;
+
+ if ((float)n_errors/(float)n_trials <= target_error_rate) {
+ printf("*************\n");
+ printf("PUSCH test OK\n");
+ printf("*************\n");
+ break;
+ }
+
} // SNR loop
- if(is_frame_in_error == 0) {
- printf("\n");
- printf("*************\n");
- printf("PUSCH test OK\n");
- printf("*************\n");
- }
-
printf("\n");
free(test_input_bit);
diff --git a/openair2/GNB_APP/RRC_nr_paramsvalues.h b/openair2/GNB_APP/RRC_nr_paramsvalues.h
index 0b54b62e4a..82873f22b4 100644
--- a/openair2/GNB_APP/RRC_nr_paramsvalues.h
+++ b/openair2/GNB_APP/RRC_nr_paramsvalues.h
@@ -301,7 +301,7 @@
{GNB_CONFIG_STRING_PRACHMSG1FDM,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FDM,defint64val:NR_RACH_ConfigGeneric__msg1_FDM_one,TYPE_INT64,0/*72*/},\
{GNB_CONFIG_STRING_PRACHMSG1FREQUENCYSTART,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FrequencyStart,defint64val:0,TYPE_INT64,0/*73*/},\
{GNB_CONFIG_STRING_ZEROCORRELATIONZONECONFIG,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.zeroCorrelationZoneConfig,defint64val:13,TYPE_INT64,0/*74*/},\
-{GNB_CONFIG_STRING_PREAMBLERECEIVEDTARGETPOWER,NULL,0,iptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleReceivedTargetPower,defintval:-118,TYPE_INT32,0/*75*/},\
+{GNB_CONFIG_STRING_PREAMBLERECEIVEDTARGETPOWER,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleReceivedTargetPower,defintval:-118,TYPE_INT64,0/*75*/},\
{GNB_CONFIG_STRING_PREAMBLETRANSMAX,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleTransMax,defint64val:NR_RACH_ConfigGeneric__preambleTransMax_n10,TYPE_INT64,0/*76*/},\
{GNB_CONFIG_STRING_POWERRAMPINGSTEP,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.powerRampingStep,defint64val:NR_RACH_ConfigGeneric__powerRampingStep_dB2,TYPE_INT64,0/*77*/},\
{GNB_CONFIG_STRING_RARESPONSEWINDOW,NULL,0,i64ptr:&scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.ra_ResponseWindow,defint64val:NR_RACH_ConfigGeneric__ra_ResponseWindow_sl20,TYPE_INT64,0/*78*/},\
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index 1e1a4ea15b..9845adbeaa 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -212,23 +212,40 @@ void prepare_scc(NR_ServingCellConfigCommon_t *scc) {
void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
int ssbmaplen = (int)scc->ssb_PositionsInBurst->present;
+ uint8_t curr_bit;
+
AssertFatal(ssbmaplen==NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap || ssbmaplen==NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap || ssbmaplen==NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap, "illegal ssbmaplen %d\n",ssbmaplen);
+
+ // changing endianicity of ssbmap and filling the ssb_PositionsInBurst buffers
if(ssbmaplen==NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap){
scc->ssb_PositionsInBurst->choice.shortBitmap.size = 1;
scc->ssb_PositionsInBurst->choice.shortBitmap.bits_unused = 4;
scc->ssb_PositionsInBurst->choice.shortBitmap.buf = CALLOC(1,1);
- scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0] = ssbmap;
+ scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0] = 0;
+ for (int i=0; i<8; i++) {
+ if (issb_PositionsInBurst->choice.shortBitmap.bits_unused)
+ curr_bit = 0;
+ else
+ curr_bit = (ssbmap>>(7-i))&0x01;
+ scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0] |= curr_bit<ssb_PositionsInBurst->choice.mediumBitmap.size = 1;
scc->ssb_PositionsInBurst->choice.mediumBitmap.bits_unused = 0;
scc->ssb_PositionsInBurst->choice.mediumBitmap.buf = CALLOC(1,1);
- scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0] = ssbmap;
+ scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0] = 0;
+ for (int i=0; i<8; i++)
+ scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0] |= (((ssbmap>>(7-i))&0x01)<ssb_PositionsInBurst->choice.longBitmap.size = 8;
scc->ssb_PositionsInBurst->choice.longBitmap.bits_unused = 0;
scc->ssb_PositionsInBurst->choice.longBitmap.buf = CALLOC(1,8);
- for (int i=0; i<8; i++)
- scc->ssb_PositionsInBurst->choice.longBitmap.buf[i] = (ssbmap>>(i<<3))&(0xff);
+ for (int j=0; j<8; j++) {
+ scc->ssb_PositionsInBurst->choice.longBitmap.buf[7-j] = 0;
+ curr_bit = (ssbmap>>(j<<3))&(0xff);
+ for (int i=0; i<8; i++)
+ scc->ssb_PositionsInBurst->choice.longBitmap.buf[7-j] |= (((curr_bit>>(7-i))&0x01)<ssb_table.ssb_offset_point_a = absolute_diff/(12*scs_scaling) - 10;
cfg->ssb_table.ssb_period = *scc->ssb_periodicityServingCell;
cfg->ssb_table.ssb_subcarrier_offset = 0; // TODO currently not in RRC?
+
switch (scc->ssb_PositionsInBurst->present) {
case 1 :
- cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0];
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0]<<24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
break;
case 2 :
- cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0];
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]<<24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
break;
case 3 :
cfg->ssb_table.ssb_mask_list[0].ssb_mask = 0;
cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
for (i=0; i<4; i++) {
- cfg->ssb_table.ssb_mask_list[0].ssb_mask += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i]<ssb_table.ssb_mask_list[1].ssb_mask += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i+4]<ssb_table.ssb_mask_list[0].ssb_mask += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i+4]<ssb_table.ssb_mask_list[1].ssb_mask += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i]<number_of_candidates=1;
+ rel15->number_of_candidates=3;
rel15->CCE[0]=0;
rel15->L[0]=4;
+ rel15->CCE[1]=4;
+ rel15->L[1]=4;
+ rel15->CCE[2]=8;
+ rel15->L[2]=4;
+
}
void ue_dci_configuration(NR_UE_MAC_INST_t *mac,fapi_nr_dl_config_request_t *dl_config,int frame,int slot) {
// check if DL slot
- if (is_nr_DL_slot(mac->scc->tdd_UL_DL_ConfigurationCommon,slot)==1) {
+ if (is_nr_DL_slot(mac->scc,slot)==1) {
// get BWP 1, Coreset 0, SearchSpace 0
if (mac->DLbwp[0]==NULL) {
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index aa6d87a37d..c911fbd56a 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -207,6 +207,8 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
scs_scaling = scs_scaling>>2;
uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
+ uint16_t sco = absolute_diff%(12*scs_scaling);
+ AssertFatal(sco==0,"absoluteFrequencySSB has a subcarrier offset of %d while it should be alligned with CRBs\n",sco);
cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*scs_scaling) - 10; //absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
cfg->num_tlv++;
@@ -216,19 +218,19 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
switch (scc->ssb_PositionsInBurst->present) {
case 1 :
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0];
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0]<<24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
break;
case 2 :
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0];
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]<<24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
break;
case 3 :
cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = 0;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
for (i=0; i<4; i++) {
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.value += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i]<ssb_table.ssb_mask_list[1].ssb_mask.value += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i+4]<ssb_table.ssb_mask_list[0].ssb_mask.value += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i+4]<ssb_table.ssb_mask_list[1].ssb_mask.value += (scc->ssb_PositionsInBurst->choice.longBitmap.buf[i]<TX_req[CC_id].pdu_list[gNB_mac->TX_req[CC_id].Number_of_PDUs];
mac_rlc_status_resp_t rlc_status;
- nfapi_nr_config_request_t *cfg = &gNB_mac->config[0];
NR_UE_list_t *UE_list = &gNB_mac->UE_list;
@@ -775,7 +774,7 @@ void nr_schedule_uss_ulsch_phytest(int Mod_idP,
//pusch_pdu->tx_direct_current_location;//The uplink Tx Direct Current location for the carrier. Only values in the value range of this field between 0 and 3299, which indicate the subcarrier index within the carrier corresponding 1o the numerology of the corresponding uplink BWP and value 3300, which indicates "Outside the carrier" and value 3301, which indicates "Undetermined position within the carrier" are used. [TS38.331, UplinkTxDirectCurrentBWP IE]
pusch_pdu->uplink_frequency_shift_7p5khz = 0;
//Resource Allocation in time domain
- pusch_pdu->start_symbol_index = 2;
+ pusch_pdu->start_symbol_index = 0;
pusch_pdu->nr_of_symbols = 12;
//Optional Data only included if indicated in pduBitmap
pusch_pdu->pusch_data.rv_index = 0;
@@ -835,4 +834,4 @@ void nr_schedule_uss_ulsch_phytest(int Mod_idP,
pdcch_pdu_rel15->PayloadSizeBits[0]=nr_dci_size(dci_formats[0],rnti_types[0],pdcch_pdu_rel15->BWPSize);
fill_dci_pdu_rel15(pdcch_pdu_rel15,&dci_pdu_rel15[0],dci_formats,rnti_types);
-}
\ No newline at end of file
+}
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 5a04909e5f..4ae679b8f5 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -69,4 +69,4 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
if (sduP != NULL)
UE_scheduling_control->ta_update = timing_advance;
}
-}
\ No newline at end of file
+}
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index cbf36f8856..5bc320d5e2 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -112,7 +112,7 @@ typedef struct {
DLSCH_PDU DLSCH_pdu[4][MAX_MOBILES_PER_GNB];
/// scheduling control info
- NR_UE_sched_ctrl_t UE_sched_ctrl[MAX_MOBILES_PER_GNB];
+ UE_sched_ctrl_t UE_sched_ctrl[MAX_MOBILES_PER_GNB];
int next[MAX_MOBILES_PER_GNB];
int head;
int next_ul[MAX_MOBILES_PER_GNB];
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index eb8c6ec010..0b60a73c43 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -276,14 +276,17 @@ static int trx_usrp_start(openair0_device *device) {
// setup GPIO for TDD, GPIO(4) = ATR_RX
//set data direction register (DDR) to output
- s->usrp->set_gpio_attr("FP0", "DDR", 0x7f, 0x7f);
- //set control register to ATR
- s->usrp->set_gpio_attr("FP0", "CTRL", 0x7f,0x7f);
+ s->usrp->set_gpio_attr("FP0", "DDR", 0xfff, 0xfff);
+ //set lower 7 bits to be controlled automatically by ATR (the rest 5 bits are controlled manually)
+ s->usrp->set_gpio_attr("FP0", "CTRL", 0x7f,0xfff);
//set pins 4 (RX_TX_Switch) and 6 (Shutdown PA) to 1 when the radio is only receiving (ATR_RX)
s->usrp->set_gpio_attr("FP0", "ATR_RX", (1<<4)|(1<<6), 0x7f);
// set pin 5 (Shutdown LNA) to 1 when the radio is transmitting and receiveing (ATR_XX)
// (we use full duplex here, because our RX is on all the time - this might need to change later)
s->usrp->set_gpio_attr("FP0", "ATR_XX", (1<<5), 0x7f);
+ // set the output pins to 0
+ s->usrp->set_gpio_attr("FP0", "OUT", 7<<7, 0xf80);
+
// init recv and send streaming
uhd::stream_cmd_t cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
LOG_I(HW,"Time in secs now: %llu \n", s->usrp->get_time_now().to_ticks(s->sample_rate));
@@ -404,10 +407,19 @@ static int trx_usrp_write_recplay(openair0_device *device, openair0_timestamp ti
@param antenna_id index of the antenna if the device has multiple antennas
@param flags flags must be set to TRUE if timestamp parameter needs to be applied
*/
-static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) {
+static int trx_usrp_write(openair0_device *device,
+ openair0_timestamp timestamp,
+ void **buff,
+ int nsamps,
+ int cc,
+ int flags) {
int ret=0;
usrp_state_t *s = (usrp_state_t *)device->priv;
int nsamps2; // aligned to upper 32 or 16 byte boundary
+
+ int flags_lsb = flags&0xff;
+ int flags_msb = (flags>>8)&0xff;
+
#if defined(__x86_64) || defined(__i386__)
#ifdef __AVX2__
nsamps2 = (nsamps+7)>>3;
@@ -441,40 +453,51 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp,
boolean_t first_packet_state=false,last_packet_state=false;
- if (flags == 2) { // start of burst
+ if (flags_lsb == 2) { // start of burst
// s->tx_md.start_of_burst = true;
// s->tx_md.end_of_burst = false;
first_packet_state = true;
last_packet_state = false;
- } else if (flags == 3) { // end of burst
+ } else if (flags_lsb == 3) { // end of burst
//s->tx_md.start_of_burst = false;
//s->tx_md.end_of_burst = true;
first_packet_state = false;
last_packet_state = true;
- } else if (flags == 4) { // start and end
- // s->tx_md.start_of_burst = true;
- // s->tx_md.end_of_burst = true;
+ } else if (flags_lsb == 4) { // start and end
+ // s->tx_md.start_of_burst = true;
+ // s->tx_md.end_of_burst = true;
first_packet_state = true;
last_packet_state = true;
- } else if (flags==1) { // middle of burst
- // s->tx_md.start_of_burst = false;
- // s->tx_md.end_of_burst = false;
+ } else if (flags_lsb==1) { // middle of burst
+ // s->tx_md.start_of_burst = false;
+ // s->tx_md.end_of_burst = false;
first_packet_state = false;
last_packet_state = false;
- } else if (flags==10) { // fail safe mode
- // s->tx_md.has_time_spec = false;
- // s->tx_md.start_of_burst = false;
- // s->tx_md.end_of_burst = true;
- first_packet_state = false;
- last_packet_state = true;
+ }
+ else if (flags_lsb==10) { // fail safe mode
+ // s->tx_md.has_time_spec = false;
+ // s->tx_md.start_of_burst = false;
+ // s->tx_md.end_of_burst = true;
+ first_packet_state = false;
+ last_packet_state = true;
}
+
s->tx_md.has_time_spec = true;
s->tx_md.start_of_burst = (s->tx_count==0) ? true : first_packet_state;
s->tx_md.end_of_burst = last_packet_state;
s->tx_md.time_spec = uhd::time_spec_t::from_ticks(timestamp, s->sample_rate);
s->tx_count++;
+ // bit 3 enables gpio (for backward compatibility)
+ if (flags_msb&8) {
+ // push GPIO bits 7-9 from flags_msb
+ int gpio789=(flags_msb&7)<<7;
+ s->usrp->set_command_time(s->tx_md.time_spec);
+ s->usrp->set_gpio_attr("FP0", "OUT", gpio789, 0x380);
+ s->usrp->clear_command_time();
+ }
+
if (cc>1) {
std::vector buff_ptrs;
@@ -482,7 +505,11 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp,
buff_ptrs.push_back(&(((int16_t *)buff_tx[i])[0]));
ret = (int)s->tx_stream->send(buff_ptrs, nsamps, s->tx_md);
- } else ret = (int)s->tx_stream->send(&(((int16_t *)buff_tx[0])[0]), nsamps, s->tx_md);
+ }
+ else {
+ ret = (int)s->tx_stream->send(&(((int16_t *)buff_tx[0])[0]), nsamps, s->tx_md);
+ }
+
if (ret != nsamps) LOG_E(HW,"[xmit] tx samples %d != %d\n",ret,nsamps);
return ret;
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
index 3eadc9af68..1363be3bce 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
@@ -33,7 +33,7 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
- absoluteFrequencySSB = 2077643;
+ absoluteFrequencySSB = 2077907;
dl_frequencyBand = 257;
# this is 27.900 GHz
dl_absoluteFrequencyPointA = 2077499;
@@ -148,11 +148,11 @@ gNBs =
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 3;
- ssb_PositionsInBurst_Bitmap = 1;
+ ssb_PositionsInBurst_Bitmap = 0x100000001L;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
- ssb_periodicityServingCell = 1;
+ ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
@@ -170,8 +170,8 @@ gNBs =
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
- dl_UL_TransmissionPeriodicity = 6;
- nrofDownlinkSlots = 30;
+ dl_UL_TransmissionPeriodicity = 5;
+ nrofDownlinkSlots = 10;
nrofDownlinkSymbols = 0;
nrofUplinkSlots = 10;
nrofUplinkSymbols = 0;
@@ -237,8 +237,8 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
- sdr_addrs = "type=x300";
- if_freq = 3000000000;
+ sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
+ if_freq = 5300000000;
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
index 1de784a73a..1fbc8e30ef 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
@@ -33,7 +33,7 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
- absoluteFrequencySSB = 2078051;
+ absoluteFrequencySSB = 2078315;
dl_frequencyBand = 257;
# this is 27.900 GHz
dl_absoluteFrequencyPointA = 2077499;