Merge remote-tracking branch 'origin/NR_add_new_BW' into integration_2025_w06 (!3245)

Added Support of 35Mhz,45Mhz,70Mhz Bandwidth

Added Support of 35Mhz,45Mhz,70Mhz Bandwidth for 30Khz Subcarrier
Spacing, Also added 35Mhz, 45Mhz bw for 15Khz Subcarrierspacing.

Referred Spec TS 38.101 v18.6.0 section 5.3.2, table 5.3.2-1
This commit is contained in:
Robert Schmidt
2025-02-11 17:47:59 +01:00
5 changed files with 356 additions and 17 deletions
@@ -233,7 +233,7 @@ float nr_get_Pcmax(int p_Max,
float nr_get_Pcmin(int bandwidth_index) {
const float table_38101_6_3_1_1[] = {
-40, -40, -40, -40, -39, -38.2, -37.5, -37, -36.5, -35.2, -34.6, -34, -33.5, -33
-40, -40, -40, -40, -39, -38.2, -37.5, -37, -36.5, -36, -35.2, -34.6, -34, -33.5, -33
};
return table_38101_6_3_1_1[bandwidth_index];
}
@@ -178,7 +178,7 @@ TEST(test_pucch_power_state, test_accumulated_delta_pucch)
TEST(pc_min, check_all_bw_indexes)
{
const int bws[] = {5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 100};
const int bws[] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100};
for (auto i = 0U; i < sizeofArray(bws); i++) {
(void)nr_get_Pcmin(i);
}
+61 -6
View File
@@ -821,6 +821,48 @@ static NR_SetupRelease_SRS_Config_t *get_config_srs(const NR_ServingCellConfigCo
return setup_release_srs_Config;
}
static int get_SupportedBandwidth_fr1_bw_index(int bw_index)
{
int val = -1;
switch (bw_index) {
case NR_SupportedBandwidth_v1700__fr1_r17_mhz5:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz10:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz15:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz20:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz25:
val = bw_index;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz30:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz35:
val = NR_SupportedBandwidth__fr1_mhz30;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz40:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz45:
val = NR_SupportedBandwidth__fr1_mhz40;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz50:
val = NR_SupportedBandwidth__fr1_mhz50;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz60:
val = NR_SupportedBandwidth__fr1_mhz60;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz70:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz80:
val = NR_SupportedBandwidth__fr1_mhz80;
break;
case NR_SupportedBandwidth_v1700__fr1_r17_mhz90:
case NR_SupportedBandwidth_v1700__fr1_r17_mhz100:
val = NR_SupportedBandwidth__fr1_mhz100;
break;
default:
AssertFatal(1==0, "Invalid bw index\n");
}
return val;
}
void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
NR_ServingCellConfigCommon_t *scc,
int numerology,
@@ -857,28 +899,41 @@ void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
fs->featureSetsDownlinkPerCC = calloc(1, sizeof(*fs->featureSetsDownlinkPerCC));
NR_FeatureSetDownlinkPerCC_t *fs_cc = calloc(1, sizeof(*fs_cc));
fs_cc->supportedSubcarrierSpacingDL = numerology;
int bw = get_supported_band_index(numerology, freq_range, rbsize);
if (bw == 10) // 90MHz
int bw_index = get_supported_band_index(numerology, freq_range, rbsize);
int bw = get_supported_bw_mhz(freq_range, bw_index);
if (bw == 90) // 90MHz
fs_cc->channelBW_90mhz = calloc(1, sizeof(*fs_cc->channelBW_90mhz));
if (bw == 11) // 100MHz
bw--;
if(freq_range == FR2) {
fs_cc->supportedBandwidthDL.present = NR_SupportedBandwidth_PR_fr2;
fs_cc->supportedBandwidthDL.choice.fr2 = bw;
fs_cc->supportedBandwidthDL.choice.fr2 = bw_index;
}
else{
fs_cc->supportedBandwidthDL.present = NR_SupportedBandwidth_PR_fr1;
fs_cc->supportedBandwidthDL.choice.fr1 = bw;
fs_cc->supportedBandwidthDL.choice.fr1 = get_SupportedBandwidth_fr1_bw_index(bw_index);
}
fs_cc->maxNumberMIMO_LayersPDSCH = calloc(1, sizeof(*fs_cc->maxNumberMIMO_LayersPDSCH));
*fs_cc->maxNumberMIMO_LayersPDSCH = NR_MIMO_LayersDL_fourLayers;
fs_cc->supportedModulationOrderDL = calloc(1, sizeof(*fs_cc->supportedModulationOrderDL));
*fs_cc->supportedModulationOrderDL = NR_ModulationOrder_qam256;
asn1cSeqAdd(&fs->featureSetsDownlinkPerCC->list, fs_cc);
if (bw == 35 || bw == 45 || bw == 70) {
fs->ext6 = calloc(1, sizeof(*fs->ext6));
fs->ext6->featureSetsDownlinkPerCC_v1700 = calloc(1, sizeof(*fs->ext6->featureSetsDownlinkPerCC_v1700));
NR_FeatureSetDownlinkPerCC_v1700_t *fs_dlcc_v1700 = calloc(1, sizeof(*fs_dlcc_v1700));
fs_dlcc_v1700->supportedBandwidthDL_v1710 = calloc(1, sizeof(*fs_dlcc_v1700->supportedBandwidthDL_v1710));
fs_dlcc_v1700->supportedBandwidthDL_v1710->present = NR_SupportedBandwidth_v1700_PR_fr1_r17;
fs_dlcc_v1700->supportedBandwidthDL_v1710->choice.fr1_r17 = bw_index;
asn1cSeqAdd(&fs->ext6->featureSetsDownlinkPerCC_v1700->list, fs_dlcc_v1700);
}
}
phy_Parameters->phy_ParametersFRX_Diff = calloc(1, sizeof(*phy_Parameters->phy_ParametersFRX_Diff));
phy_Parameters->phy_ParametersFRX_Diff->pucch_F0_2WithoutFH = NULL;
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
xer_fprint(stdout, &asn_DEF_NR_UE_NR_Capability, cap);
}
}
void nr_rrc_config_dl_tda(struct NR_PDSCH_TimeDomainResourceAllocationList *pdsch_TimeDomainAllocationList,