From f6c04c26725574960ea93e5576ae8dbcf76bf689 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Tue, 3 Mar 2026 18:31:12 +0100 Subject: [PATCH] COMMON: fix ssb_offset_point_a calculation Even though the NR ARFCN uses a 15 kHz raster until 24250 MHz, the ssb_offset_point_a is still scaled by 60 kHz for FR2. So we need two different scaling factors. --- common/utils/nr/nr_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c index 4ed820c03f..a0273bcf56 100644 --- a/common/utils/nr/nr_common.c +++ b/common/utils/nr/nr_common.c @@ -1043,9 +1043,10 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB, const int scaling = (absoluteFrequencyPointA >= 2016667) ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; const int scaled_abs_diff = absolute_diff / (scaling_5khz * scaling); // absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total - const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * scaling; + const int ssb_offset_scaling = (frequency_range == FR2) ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing; + const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * ssb_offset_scaling; // Offset to point A needs to be divisible by scaling - AssertFatal(ssb_offset_point_a % scaling == 0, "PRB offset %d not valid for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); + AssertFatal(ssb_offset_point_a % ssb_offset_scaling == 0, "PRB offset %d not valid for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); AssertFatal(ssb_offset_point_a >= 0, "ssb offset is negative %d for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing); return ssb_offset_point_a; }