From 6c5a8aa1fc74159b52e8a51a7b75370150656d44 Mon Sep 17 00:00:00 2001 From: Raghavendra Dinavahi Date: Tue, 3 Mar 2026 17:10:35 +0100 Subject: [PATCH] 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; }