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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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-RAN
Commits
9c133615
Commit
9c133615
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
8b21ecc3
4d21ec23
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 @
9c133615
...
...
@@ -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 @
9c133615
...
...
@@ -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 @
9c133615
...
...
@@ -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 @
9c133615
...
...
@@ -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 @
9c133615
...
...
@@ -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