Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG
OpenXG UE
Commits
47f80aaa
Commit
47f80aaa
authored
Nov 08, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_SA_band_96' into integration_2021_wk45_b
parents
ebdebc95
86d97fa6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
92 additions
and
29 deletions
+92
-29
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+15
-6
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+63
-10
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+3
-1
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+2
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+9
-10
No files found.
common/utils/nr/nr_common.c
View file @
47f80aaa
...
...
@@ -65,8 +65,8 @@ nr_bandentry_t nr_bandtable[] = {
{
41
,
2496000
,
2690000
,
2496000
,
2690000
,
3
,
499200
,
15
},
{
41
,
2496000
,
2690000
,
2496000
,
2690000
,
6
,
499200
,
30
},
{
47
,
5855000
,
5925000
,
5855000
,
5925000
,
1
,
790334
,
15
},
//
{48, 3550000, 3700000, 3550000, 3700000, 1, 636667, 15},
//
{48, 3550000, 3700000, 3550000, 3700000, 2, 636668, 30},
{
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
},
...
...
@@ -90,14 +90,15 @@ nr_bandentry_t nr_bandtable[] = {
{
84
,
1920000
,
1980000
,
000
,
000
,
20
,
384000
,
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
,
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
},
{
257
,
26500020
,
29500000
,
26500020
,
29500000
,
1
,
2054166
,
60
},
{
257
,
26500080
,
29500000
,
26500080
,
29500000
,
2
,
2054167
,
120
},
{
258
,
24250080
,
27500000
,
24250080
,
27500000
,
1
,
2016667
,
60
},
...
...
@@ -437,9 +438,17 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
AssertFatal
(
nr_bandP
<=
nr_bandtable
[
nr_bandtable_size
-
1
].
band
,
"NR band %d exceeds NR bands table maximum limit %d
\n
"
,
nr_bandP
,
nr_bandtable
[
nr_bandtable_size
-
1
].
band
);
for
(
i
=
0
;
i
<
nr_bandtable_size
&&
nr_bandtable
[
i
].
band
!=
nr_bandP
;
i
++
);
// selection of correct Deltaf raster according to SCS
if
((
nr_bandtable
[
i
].
deltaf_raster
!=
100
)
&&
(
nr_bandtable
[
i
].
deltaf_raster
!=
scs_khz
))
// In frequency bands with two deltaFRaster,
// the higher deltaFRaster applies to channels using only the SCS that is equal to or larger than the higher deltaFRaster
// and SSB SCS is equal to the higher deltaFRaster.
while
(((
i
+
1
)
<
nr_bandtable_size
)
&&
(
nr_bandtable
[
i
+
1
].
band
==
nr_bandtable
[
i
].
band
)
&&
(
nr_bandtable
[
i
].
deltaf_raster
!=
scs_khz
))
{
i
++
;
}
AssertFatal
(
nr_bandtable
[
i
].
band
==
nr_bandP
,
"Found band table %d does not correspond to the input one %d
\n
"
,
nr_bandtable
[
i
].
band
,
nr_bandP
);
LOG_D
(
PHY
,
"NR band table index %d (Band %d, dl_min %lu, ul_min %lu)
\n
"
,
i
,
nr_bandtable
[
i
].
band
,
nr_bandtable
[
i
].
dl_min
,
nr_bandtable
[
i
].
ul_min
);
...
...
openair1/PHY/INIT/nr_parms.c
View file @
47f80aaa
...
...
@@ -27,6 +27,58 @@
uint32_t
nr_subcarrier_spacing
[
MAX_NUM_SUBCARRIER_SPACING
]
=
{
15e3
,
30e3
,
60e3
,
120e3
,
240e3
};
uint16_t
nr_slots_per_subframe
[
MAX_NUM_SUBCARRIER_SPACING
]
=
{
1
,
2
,
4
,
8
,
16
};
// Table 5.4.3.3-1 38-101
int
nr_ssb_table
[
48
][
3
]
=
{
{
1
,
15
,
nr_ssb_type_A
},
{
2
,
15
,
nr_ssb_type_A
},
{
3
,
15
,
nr_ssb_type_A
},
{
5
,
15
,
nr_ssb_type_A
},
{
5
,
30
,
nr_ssb_type_B
},
{
7
,
15
,
nr_ssb_type_A
},
{
8
,
15
,
nr_ssb_type_A
},
{
12
,
15
,
nr_ssb_type_A
},
{
14
,
15
,
nr_ssb_type_A
},
{
18
,
15
,
nr_ssb_type_A
},
{
20
,
15
,
nr_ssb_type_A
},
{
25
,
15
,
nr_ssb_type_A
},
{
26
,
15
,
nr_ssb_type_A
},
{
28
,
15
,
nr_ssb_type_A
},
{
29
,
15
,
nr_ssb_type_A
},
{
30
,
15
,
nr_ssb_type_A
},
{
34
,
15
,
nr_ssb_type_A
},
{
34
,
30
,
nr_ssb_type_C
},
{
38
,
15
,
nr_ssb_type_A
},
{
38
,
30
,
nr_ssb_type_C
},
{
39
,
15
,
nr_ssb_type_A
},
{
39
,
30
,
nr_ssb_type_C
},
{
40
,
30
,
nr_ssb_type_C
},
{
41
,
15
,
nr_ssb_type_A
},
{
41
,
30
,
nr_ssb_type_C
},
{
46
,
30
,
nr_ssb_type_C
},
{
48
,
30
,
nr_ssb_type_C
},
{
50
,
30
,
nr_ssb_type_C
},
{
51
,
15
,
nr_ssb_type_A
},
{
53
,
15
,
nr_ssb_type_A
},
{
65
,
15
,
nr_ssb_type_A
},
{
66
,
15
,
nr_ssb_type_A
},
{
66
,
30
,
nr_ssb_type_B
},
{
70
,
15
,
nr_ssb_type_A
},
{
71
,
15
,
nr_ssb_type_A
},
{
74
,
15
,
nr_ssb_type_A
},
{
75
,
15
,
nr_ssb_type_A
},
{
76
,
15
,
nr_ssb_type_A
},
{
77
,
30
,
nr_ssb_type_C
},
{
78
,
30
,
nr_ssb_type_C
},
{
79
,
30
,
nr_ssb_type_C
},
{
90
,
15
,
nr_ssb_type_A
},
{
90
,
30
,
nr_ssb_type_C
},
{
91
,
15
,
nr_ssb_type_A
},
{
92
,
15
,
nr_ssb_type_A
},
{
93
,
15
,
nr_ssb_type_A
},
{
94
,
15
,
nr_ssb_type_A
},
{
96
,
30
,
nr_ssb_type_C
}
};
void
set_Lmax
(
NR_DL_FRAME_PARMS
*
fp
)
{
// definition of Lmax according to ts 38.213 section 4.1
...
...
@@ -85,27 +137,28 @@ int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp,uint8_t i_ssb) {
void
set_scs_parameters
(
NR_DL_FRAME_PARMS
*
fp
,
int
mu
,
int
N_RB_DL
)
{
int
idx
=
0
;
switch
(
mu
)
{
case
NR_MU_0
:
//15kHz scs
fp
->
subcarrier_spacing
=
nr_subcarrier_spacing
[
NR_MU_0
];
fp
->
slots_per_subframe
=
nr_slots_per_subframe
[
NR_MU_0
];
fp
->
ssb_type
=
nr_ssb_type_A
;
while
(
nr_ssb_table
[
idx
][
0
]
!=
fp
->
nr_band
)
idx
++
;
AssertFatal
(
nr_ssb_table
[
idx
][
1
]
==
15
,
"SCS %d not applicable to band %d
\n
"
,
fp
->
subcarrier_spacing
,
fp
->
nr_band
);
break
;
case
NR_MU_1
:
//30kHz scs
fp
->
subcarrier_spacing
=
nr_subcarrier_spacing
[
NR_MU_1
];
fp
->
slots_per_subframe
=
nr_slots_per_subframe
[
NR_MU_1
];
// 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
;
else
{
if
(
fp
->
nr_band
==
41
||
fp
->
nr_band
==
38
||
(
fp
->
nr_band
>
76
&&
fp
->
nr_band
<
80
)
)
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
);
while
(
nr_ssb_table
[
idx
][
0
]
!=
fp
->
nr_band
||
nr_ssb_table
[
idx
][
1
]
!=
30
)
{
AssertFatal
(
nr_ssb_table
[
idx
][
0
]
<=
fp
->
nr_band
,
"SCS %d not applicable to band %d
\n
"
,
fp
->
subcarrier_spacing
,
fp
->
nr_band
);
idx
++
;
}
fp
->
ssb_type
=
nr_ssb_table
[
idx
][
2
];
break
;
case
NR_MU_2
:
//60kHz scs
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
47f80aaa
...
...
@@ -206,7 +206,9 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
nr_sequences
=
8
>>
(
1
-
pucch_pdu
->
sr_flag
);
}
LOG_D
(
PHY
,
"pucch0: nr_symbols %d, start_symbol %d, prb_start %d, second_hop_prb %d, group_hop_flag %d, sequence_hop_flag %d, O_ACK %d, O_SR %d, mcs %d initial_cyclic_shift %d
\n
"
,
pucch_pdu
->
nr_of_symbols
,
pucch_pdu
->
start_symbol_index
,
pucch_pdu
->
prb_start
,
pucch_pdu
->
second_hop_prb
,
pucch_pdu
->
group_hop_flag
,
pucch_pdu
->
sequence_hop_flag
,
pucch_pdu
->
bit_len_harq
,
pucch_pdu
->
sr_flag
,
mcs
[
0
],
pucch_pdu
->
initial_cyclic_shift
);
LOG_D
(
PHY
,
"pucch0: nr_symbols %d, start_symbol %d, prb_start %d, second_hop_prb %d, group_hop_flag %d, sequence_hop_flag %d, O_ACK %d, O_SR %d, mcs %d initial_cyclic_shift %d
\n
"
,
pucch_pdu
->
nr_of_symbols
,
pucch_pdu
->
start_symbol_index
,
pucch_pdu
->
prb_start
,
pucch_pdu
->
second_hop_prb
,
pucch_pdu
->
group_hop_flag
,
pucch_pdu
->
sequence_hop_flag
,
pucch_pdu
->
bit_len_harq
,
pucch_pdu
->
sr_flag
,
mcs
[
0
],
pucch_pdu
->
initial_cyclic_shift
);
int
cs_ind
=
get_pucch0_cs_lut_index
(
gNB
,
pucch_pdu
);
/*
...
...
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
View file @
47f80aaa
...
...
@@ -90,8 +90,8 @@ void nr_generate_pucch0(PHY_VARS_NR_UE *ue,
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
uint8_t
u
[
2
]
=
{
0
,
0
},
v
[
2
]
=
{
0
,
0
};
LOG_D
(
PHY
,
"pucch0: slot %d nr_symbols %d, start_symbol %d, prb_start %d, second_hop_prb %d, group_hop_flag %d, sequence_hop_flag %d, mcs %d
\n
"
,
nr_slot_tx
,
pucch_pdu
->
nr_of_symbols
,
pucch_pdu
->
start_symbol_index
,
pucch_pdu
->
prb_start
,
pucch_pdu
->
second_hop_prb
,
pucch_pdu
->
group_hop_flag
,
pucch_pdu
->
sequence_hop_flag
,
pucch_pdu
->
mcs
);
LOG_D
(
PHY
,
"pucch0: slot %d nr_symbols %d, start_symbol %d, prb_start %d, second_hop_prb %d, group_hop_flag %d, sequence_hop_flag %d, mcs %d
\n
"
,
nr_slot_tx
,
pucch_pdu
->
nr_of_symbols
,
pucch_pdu
->
start_symbol_index
,
pucch_pdu
->
prb_start
,
pucch_pdu
->
second_hop_prb
,
pucch_pdu
->
group_hop_flag
,
pucch_pdu
->
sequence_hop_flag
,
pucch_pdu
->
mcs
);
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t
[nr_generate_pucch0] sequence generation: variable initialization for test
\n
"
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
View file @
47f80aaa
...
...
@@ -60,22 +60,21 @@ uint16_t get_ssboffset_pointa(NR_ServingCellConfigCommon_t *scc,const long band)
int
ratio
;
switch
(
*
scc
->
ssbSubcarrierSpacing
)
{
case
NR_SubcarrierSpacing_kHz15
:
AssertFatal
(
band
<=
79
,
AssertFatal
(
band
<=
95
,
"Band %ld is not possible for SSB with 15 kHz SCS
\n
"
,
band
);
if
(
band
<
77
)
// below 3GHz
ratio
=
3
;
// NRARFCN step is 5 kHz
else
ratio
=
1
;
// NRARFCN step is 15 kHz
// no band available above 3GHz using 15kHz
ratio
=
3
;
// NRARFCN step is 5 kHz
break
;
case
NR_SubcarrierSpacing_kHz30
:
AssertFatal
(
band
<=
79
,
"Band %ld is not possible for SSB with
15
kHz SCS
\n
"
,
AssertFatal
(
band
<=
96
,
"Band %ld is not possible for SSB with
30
kHz SCS
\n
"
,
band
);
if
(
band
<
77
)
// below 3GHz
ratio
=
6
;
// NRARFCN step is 5 kHz
if
(
band
==
46
||
band
==
48
||
band
==
77
||
band
==
78
||
band
==
79
||
band
==
96
)
// above 3GHz
ratio
=
2
;
// NRARFCN step is 15 kHz
else
ratio
=
2
;
// NRARFCN step is 1
5 kHz
ratio
=
6
;
// NRARFCN step is
5 kHz
break
;
case
NR_SubcarrierSpacing_kHz120
:
AssertFatal
(
band
>=
257
,
...
...
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