Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
79606190
Commit
79606190
authored
Jan 26, 2024
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/fix_computing_ssb_subcarrier_offset' into fr2_testing
parents
c5909cf6
89769ad9
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
48 additions
and
23 deletions
+48
-23
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+23
-12
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+7
-1
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+5
-3
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+2
-1
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
+1
-1
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+2
-0
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+4
-3
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+4
-2
No files found.
common/utils/nr/nr_common.c
View file @
79606190
...
...
@@ -755,11 +755,24 @@ void SLIV2SL(int SLIV,int *S,int *L) {
}
}
int
get_ssb_subcarrier_offset
(
uint32_t
absoluteFrequencySSB
,
uint32_t
absoluteFrequencyPointA
)
nr_sco_info_t
get_ssb_subcarrier_offset
(
int
scs
,
uint32_t
absoluteFrequencySSB
,
uint32_t
absoluteFrequencyPointA
)
{
uint32_t
absolute_diff
=
(
absoluteFrequencySSB
-
absoluteFrequencyPointA
);
const
int
scaling_5khz
=
absoluteFrequencyPointA
<
600000
?
3
:
1
;
return
((
absolute_diff
/
scaling_5khz
)
%
24
);
nr_sco_info_t
sco
=
{
.
absolute_diff
=
absoluteFrequencySSB
-
absoluteFrequencyPointA
,
.
scaling
=
1
,
.
subcarrier_offset
=
0
};
// for FR1 k_SSB expressed in terms of 15kHz SCS
// for FR2 k_SSB expressed in terms of the subcarrier spacing provided by the higher-layer parameter subCarrierSpacingCommon
sco
.
absolute_diff
=
(
absoluteFrequencySSB
-
absoluteFrequencyPointA
);
sco
.
scaling
=
1
;
if
(
absoluteFrequencyPointA
<
600000
)
sco
.
scaling
=
3
;
if
(
scs
>
2
)
sco
.
scaling
<<=
(
scs
-
2
);
int
sco_limit
=
scs
==
1
?
24
:
12
;
sco
.
subcarrier_offset
=
((
sco
.
absolute_diff
/
sco
.
scaling
)
%
sco_limit
);
return
sco
;
}
uint32_t
get_ssb_offset_to_pointA
(
uint32_t
absoluteFrequencySSB
,
...
...
@@ -767,16 +780,14 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
int
ssbSubcarrierSpacing
,
int
frequency_range
)
{
uint32_t
absolute_diff
=
(
absoluteFrequencySSB
-
absoluteFrequencyPointA
);
const
int
scaling_5khz
=
absoluteFrequencyPointA
<
600000
?
3
:
1
;
int
sco
=
get_ssb_subcarrier_offset
(
absoluteFrequencySSB
,
absoluteFrequencyPointA
);
nr_sco_info_t
sco
=
get_ssb_subcarrier_offset
(
ssbSubcarrierSpacing
,
absoluteFrequencySSB
,
absoluteFrequencyPointA
);
const
int
scs_scaling
=
frequency_range
==
FR2
?
1
<<
(
ssbSubcarrierSpacing
-
2
)
:
1
<<
ssbSubcarrierSpacing
;
const
int
scaled_abs_diff
=
absolute_diff
/
scaling_5khz
;
const
int
ssb_offset_point_a
=
(
scaled_abs_diff
-
sco
)
/
1
2
-
10
*
scs_scaling
;
// absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
const
int
scaled_abs_diff
=
sco
.
absolute_diff
/
sco
.
scaling
;
// absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
const
int
cent_freq_comp
=
frequency_range
==
FR2
?
10
:
10
*
scs_scaling
;
// scaling taken into account in sco.scaling for FR
2
const
int
ssb_offset_point_a
=
(
scaled_abs_diff
-
sco
.
subcarrier_offset
)
/
12
-
cent_freq_comp
;
AssertFatal
(
ssb_offset_point_a
%
scs_scaling
==
0
,
"PRB offset %d can create frequency offset
\n
"
,
ssb_offset_point_a
);
AssertFatal
(
sco
%
scs_scaling
==
0
,
"ssb offset %d can create frequency offset
\n
"
,
sco
);
AssertFatal
(
sco
.
subcarrier_offset
%
scs_scaling
==
0
,
"ssb offset %d can create frequency offset
\n
"
,
sco
.
subcarrier_offset
);
return
ssb_offset_point_a
;
}
...
...
common/utils/nr/nr_common.h
View file @
79606190
...
...
@@ -83,6 +83,12 @@ typedef enum {
nr_FR2
}
nr_frequency_range_e
;
typedef
struct
{
int
subcarrier_offset
;
uint32_t
absolute_diff
;
int
scaling
;
}
nr_sco_info_t
;
typedef
struct
nr_bandentry_s
{
int16_t
band
;
uint64_t
ul_min
;
...
...
@@ -159,7 +165,7 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
uint32_t
absoluteFrequencyPointA
,
int
ssbSubcarrierSpacing
,
int
frequency_range
);
int
get_ssb_subcarrier_offset
(
uint32_t
absoluteFrequencySSB
,
uint32_t
absoluteFrequencyPointA
);
nr_sco_info_t
get_ssb_subcarrier_offset
(
int
scs
,
uint32_t
absoluteFrequencySSB
,
uint32_t
absoluteFrequencyPointA
);
int
get_delay_idx
(
int
delay
,
int
max_delay_comp
);
void
freq2time
(
uint16_t
ofdm_symbol_size
,
...
...
openair1/PHY/INIT/nr_parms.c
View file @
79606190
...
...
@@ -347,10 +347,12 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
fp
->
freq_range
=
(
fp
->
dl_CarrierFreq
<
6e9
)
?
nr_FR1
:
nr_FR2
;
uint8_t
sco
=
0
;
if
(((
fp
->
freq_range
==
nr_FR1
)
&&
(
config
->
ssb_table
.
ssb_subcarrier_offset
<
24
))
||
((
fp
->
freq_range
==
nr_FR2
)
&&
(
config
->
ssb_table
.
ssb_subcarrier_offset
<
12
))
)
{
if
(((
fp
->
freq_range
==
nr_FR1
)
&&
(
config
->
ssb_table
.
ssb_subcarrier_offset
<
24
))
||
((
fp
->
freq_range
==
nr_FR2
)
&&
(
config
->
ssb_table
.
ssb_subcarrier_offset
<
12
))
)
{
if
(
fp
->
freq_range
==
nr_FR1
)
sco
=
config
->
ssb_table
.
ssb_subcarrier_offset
>>
config
->
ssb_config
.
scs_common
;
sco
=
config
->
ssb_table
.
ssb_subcarrier_offset
>>
config
->
ssb_config
.
scs_common
;
else
sco
=
config
->
ssb_table
.
ssb_subcarrier_offset
;
}
fp
->
ssb_start_subcarrier
=
(
12
*
config
->
ssb_table
.
ssb_offset_point_a
+
sco
);
...
...
openair1/PHY/NR_TRANSPORT/nr_pbch.c
View file @
79606190
...
...
@@ -228,7 +228,8 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
uint8_t
n_hf
,
int
sfn
,
nfapi_nr_config_request_scf_t
*
config
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
NR_DL_FRAME_PARMS
*
frame_parms
)
{
int
k
,
l
,
m
;
//int16_t a;
int16_t
mod_pbch_e
[
NR_POLAR_PBCH_E
];
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
View file @
79606190
...
...
@@ -480,7 +480,7 @@ typedef struct Type0_PDCCH_CSS_config_s {
uint32_t
search_space_frame_period
;
// in slots
uint32_t
ssb_length
;
uint32_t
ssb_index
;
u
int32_t
cset_start_rb
;
int32_t
cset_start_rb
;
NR_SubcarrierSpacing_t
scs_pdcch
;
bool
active
;
}
NR_Type0_PDCCH_CSS_config_t
;
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
79606190
...
...
@@ -4440,6 +4440,8 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
type0_PDCCH_CSS_config
->
n_0
=
((
uint32_t
)(
big_o
*
(
1
<<
scs_pdcch
))
+
(
uint32_t
)(
type0_PDCCH_CSS_config
->
ssb_index
*
big_m
))
%
num_slot_per_frame
;
type0_PDCCH_CSS_config
->
cset_start_rb
=
ssb_offset_point_a
-
type0_PDCCH_CSS_config
->
rb_offset
;
AssertFatal
(
type0_PDCCH_CSS_config
->
cset_start_rb
>=
0
,
"Invalid CSET0 start PRB %d SSB offset point A %d RB offset %d
\n
"
,
type0_PDCCH_CSS_config
->
cset_start_rb
,
ssb_offset_point_a
,
type0_PDCCH_CSS_config
->
rb_offset
);
}
void
fill_coresetZero
(
NR_ControlResourceSet_t
*
coreset0
,
NR_Type0_PDCCH_CSS_config_t
*
type0_PDCCH_CSS_config
)
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
79606190
...
...
@@ -637,9 +637,10 @@ static void config_common(gNB_MAC_INST *nrmac, nr_pdsch_AntennaPorts_t pdsch_Ant
cfg
->
ssb_table
.
ssb_period
.
value
=
*
scc
->
ssb_periodicityServingCell
;
cfg
->
ssb_table
.
ssb_period
.
tl
.
tag
=
NFAPI_NR_CONFIG_SSB_PERIOD_TAG
;
cfg
->
num_tlv
++
;
cfg
->
ssb_table
.
ssb_subcarrier_offset
.
value
=
get_ssb_subcarrier_offset
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
nr_sco_info_t
sco
=
get_ssb_subcarrier_offset
(
*
scc
->
ssbSubcarrierSpacing
,
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
cfg
->
ssb_table
.
ssb_subcarrier_offset
.
value
=
sco
.
subcarrier_offset
;
AssertFatal
(
cfg
->
ssb_table
.
ssb_subcarrier_offset
.
value
<
16
,
"cannot handle ssb_subcarrier_offset %d resulting from Point A %ld SSB %ld: please increase dl_absoluteFrequencyPointA "
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
79606190
...
...
@@ -1767,8 +1767,10 @@ NR_BCCH_BCH_Message_t *get_new_MIB_NR(const NR_ServingCellConfigCommon_t *scc)
AssertFatal
(
scc
->
ssbSubcarrierSpacing
!=
NULL
,
"scc->ssbSubcarrierSpacing is null
\n
"
);
int
ssb_subcarrier_offset
=
31
;
// default value for NSA
if
(
get_softmodem_params
()
->
sa
)
{
ssb_subcarrier_offset
=
get_ssb_subcarrier_offset
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
nr_sco_info_t
sco
=
get_ssb_subcarrier_offset
(
*
scc
->
ssbSubcarrierSpacing
,
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
ssb_subcarrier_offset
=
sco
.
subcarrier_offset
;
}
mib
->
message
.
choice
.
mib
->
ssb_SubcarrierOffset
=
ssb_subcarrier_offset
&
15
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment