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
zzha zzha
OpenXG-RAN
Commits
c6b4f97d
Commit
c6b4f97d
authored
Mar 26, 2022
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
coderate according to SCF and get tbs,qm,R only at MAC
parent
3be77c09
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
115 additions
and
170 deletions
+115
-170
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+0
-61
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+0
-6
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+3
-0
openair1/PHY/CODING/coding_defs.h
openair1/PHY/CODING/coding_defs.h
+0
-12
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+0
-5
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+3
-5
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
+0
-8
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+3
-8
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+5
-11
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+1
-8
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+1
-2
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+6
-10
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+3
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+2
-4
openair1/SIMULATION/NR_PHY/dlschsim.c
openair1/SIMULATION/NR_PHY/dlschsim.c
+8
-6
openair1/SIMULATION/NR_PHY/ulschsim.c
openair1/SIMULATION/NR_PHY/ulschsim.c
+6
-3
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+2
-1
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+17
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+36
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+4
-4
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+7
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+0
-7
No files found.
common/utils/nr/nr_common.c
View file @
c6b4f97d
...
...
@@ -191,67 +191,6 @@ int PRBalloc_to_locationandbandwidth(int NPRB,int RBstart) {
return
(
PRBalloc_to_locationandbandwidth0
(
NPRB
,
RBstart
,
275
));
}
/// Target code rate tables indexed by Imcs
/* TS 38.214 table 5.1.3.1-1 - MCS index table 1 for PDSCH */
uint16_t
nr_target_code_rate_table1
[
29
]
=
{
120
,
157
,
193
,
251
,
308
,
379
,
449
,
526
,
602
,
679
,
340
,
378
,
434
,
490
,
553
,
\
616
,
658
,
438
,
466
,
517
,
567
,
616
,
666
,
719
,
772
,
822
,
873
,
910
,
948
};
/* TS 38.214 table 5.1.3.1-2 - MCS index table 2 for PDSCH */
// Imcs values 20 and 26 have been multiplied by 2 to avoid the floating point
uint16_t
nr_target_code_rate_table2
[
28
]
=
{
120
,
193
,
308
,
449
,
602
,
378
,
434
,
490
,
553
,
616
,
658
,
466
,
517
,
567
,
\
616
,
666
,
719
,
772
,
822
,
873
,
1365
,
711
,
754
,
797
,
841
,
885
,
1833
,
948
};
/* TS 38.214 table 5.1.3.1-3 - MCS index table 3 for PDSCH */
uint16_t
nr_target_code_rate_table3
[
29
]
=
{
30
,
40
,
50
,
64
,
78
,
99
,
120
,
157
,
193
,
251
,
308
,
379
,
449
,
526
,
602
,
340
,
\
378
,
434
,
490
,
553
,
616
,
438
,
466
,
517
,
567
,
616
,
666
,
719
,
772
};
uint16_t
nr_tbs_table
[
93
]
=
{
24
,
32
,
40
,
48
,
56
,
64
,
72
,
80
,
88
,
96
,
104
,
112
,
120
,
128
,
136
,
144
,
152
,
160
,
168
,
176
,
184
,
192
,
208
,
224
,
240
,
256
,
272
,
288
,
304
,
320
,
\
336
,
352
,
368
,
384
,
408
,
432
,
456
,
480
,
504
,
528
,
552
,
576
,
608
,
640
,
672
,
704
,
736
,
768
,
808
,
848
,
888
,
928
,
984
,
1032
,
1064
,
1128
,
1160
,
1192
,
1224
,
1256
,
\
1288
,
1320
,
1352
,
1416
,
1480
,
1544
,
1608
,
1672
,
1736
,
1800
,
1864
,
1928
,
2024
,
2088
,
2152
,
2216
,
2280
,
2408
,
2472
,
2536
,
2600
,
2664
,
2728
,
2792
,
2856
,
2976
,
\
3104
,
3240
,
3368
,
3496
,
3624
,
3752
,
3824
};
uint8_t
nr_get_Qm
(
uint8_t
Imcs
,
uint8_t
table_idx
)
{
switch
(
table_idx
)
{
case
1
:
return
(((
Imcs
<
10
)
||
(
Imcs
==
29
))
?
2
:
((
Imcs
<
17
)
||
(
Imcs
==
30
))
?
4
:
((
Imcs
<
29
)
||
(
Imcs
==
31
))
?
6
:-
1
);
break
;
case
2
:
return
(((
Imcs
<
5
)
||
(
Imcs
==
28
))
?
2
:
((
Imcs
<
11
)
||
(
Imcs
==
29
))
?
4
:
((
Imcs
<
20
)
||
(
Imcs
==
30
))
?
6
:
((
Imcs
<
28
)
||
(
Imcs
==
31
))
?
8
:-
1
);
break
;
case
3
:
return
(((
Imcs
<
15
)
||
(
Imcs
==
29
))
?
2
:
((
Imcs
<
21
)
||
(
Imcs
==
30
))
?
4
:
((
Imcs
<
29
)
||
(
Imcs
==
31
))
?
6
:-
1
);
break
;
default:
AssertFatal
(
0
,
"Invalid MCS table index %d (expected in range [1,3])
\n
"
,
table_idx
);
return
(
0
);
break
;
}
}
uint32_t
nr_get_code_rate
(
uint8_t
Imcs
,
uint8_t
table_idx
)
{
switch
(
table_idx
)
{
case
1
:
return
(
nr_target_code_rate_table1
[
Imcs
]);
break
;
case
2
:
return
(
nr_target_code_rate_table2
[
Imcs
]);
break
;
case
3
:
return
(
nr_target_code_rate_table3
[
Imcs
]);
break
;
default:
AssertFatal
(
0
,
"Invalid MCS table index %d (expected in range [1,3])
\n
"
,
table_idx
);
return
(
0
);
break
;
}
}
void
get_coreset_rballoc
(
uint8_t
*
FreqDomainResource
,
int
*
n_rb
,
int
*
rb_offset
)
{
uint8_t
count
=
0
,
start
=
0
,
start_set
=
0
;
...
...
common/utils/nr/nr_common.h
View file @
c6b4f97d
...
...
@@ -69,12 +69,6 @@ int NRRIV2BW(int locationAndBandwidth,int N_RB);
int
NRRIV2PRBOFFSET
(
int
locationAndBandwidth
,
int
N_RB
);
int
PRBalloc_to_locationandbandwidth0
(
int
NPRB
,
int
RBstart
,
int
BWPsize
);
int
PRBalloc_to_locationandbandwidth
(
int
NPRB
,
int
RBstart
);
extern
uint16_t
nr_target_code_rate_table1
[
29
];
extern
uint16_t
nr_target_code_rate_table2
[
28
];
extern
uint16_t
nr_target_code_rate_table3
[
29
];
extern
uint16_t
nr_tbs_table
[
93
];
uint8_t
nr_get_Qm
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate
(
uint8_t
Imcs
,
uint8_t
table_idx
);
int
get_subband_size
(
int
NPRB
,
int
size
);
void
SLIV2SL
(
int
SLIV
,
int
*
S
,
int
*
L
);
int
get_dmrs_port
(
int
nl
,
uint16_t
dmrs_ports
);
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
c6b4f97d
...
...
@@ -433,6 +433,9 @@ typedef struct {
uint8_t
mcs
;
uint8_t
ndi
;
uint8_t
rv
;
uint16_t
targetCodeRate
;
uint8_t
qamModOrder
;
uint32_t
TBS
;
uint8_t
tb2_mcs
;
uint8_t
tb2_ndi
;
uint8_t
tb2_rv
;
...
...
openair1/PHY/CODING/coding_defs.h
View file @
c6b4f97d
...
...
@@ -469,18 +469,6 @@ int32_t nr_segmentation(unsigned char *input_buffer,
unsigned
int
*
F
,
uint8_t
BG
);
/*!\fn uint32_t nr_compute_tbs
\brief This function returns the TBS in bits as per 6.1.4.2 of TS 38.214
*/
uint32_t
nr_compute_tbs
(
uint16_t
Qm
,
uint16_t
R
,
uint16_t
nb_rb
,
uint16_t
nb_symb_sch
,
uint16_t
nb_dmrs_prb
,
uint16_t
nb_rb_oh
,
uint8_t
tb_scaling
,
uint8_t
Nl
);
uint32_t
nr_compute_tbslbrm
(
uint16_t
table
,
uint16_t
nb_rb
,
uint8_t
Nl
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
c6b4f97d
...
...
@@ -49,11 +49,6 @@ void nr_get_rbg_parms(NR_BWP_PARMS* bwp, uint8_t config_type);
void
nr_get_rbg_list
(
uint32_t
bitmap
,
uint8_t
n_rbg
,
uint8_t
*
rbg_list
);
uint8_t
nr_get_Qm
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate
(
uint8_t
Imcs
,
uint8_t
table_idx
);
void
nr_pdsch_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint8_t
q
,
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
c6b4f97d
...
...
@@ -301,7 +301,6 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
NR_DL_gNB_HARQ_t
*
harq
=
&
dlsch
->
harq_process
;
nfapi_nr_dl_tti_pdsch_pdu_rel15_t
*
rel15
=
&
harq
->
pdsch_pdu
.
pdsch_pdu_rel15
;
impp
.
Zc
=
&
dlsch
->
harq_process
.
Z
;
float
Coderate
=
0
.
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
uint32_t
A
=
rel15
->
TBSize
[
0
]
<<
3
;
...
...
@@ -364,10 +363,9 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
memcpy
(
harq
->
b
,
a
,
(
A
/
8
)
+
3
);
// using 3 bytes to mimic the case of 24 bit crc
}
if
(
rel15
->
targetCodeRate
[
0
]
<
1000
)
Coderate
=
(
float
)
rel15
->
targetCodeRate
[
0
]
/
(
float
)
1024
;
else
// to scale for mcs 20 and 26 in table 5.1.3.1-2 which are decimal and input 2* in nr_tbs_tools
Coderate
=
(
float
)
rel15
->
targetCodeRate
[
0
]
/
(
float
)
2048
;
// target_code_rate in terms of 0.1 bits
float
Coderate
=
(
float
)
rel15
->
targetCodeRate
[
0
]
/
(
float
)
10240
;
LOG_D
(
PHY
,
"DLSCH Coderate %f
\n
"
,
Coderate
);
if
((
A
<=
292
)
||
((
A
<=
3824
)
&&
(
Coderate
<=
0
.
6667
))
||
Coderate
<=
0
.
25
)
impp
.
BG
=
2
;
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
View file @
c6b4f97d
...
...
@@ -60,14 +60,6 @@ uint32_t nr_get_G(uint16_t nb_rb, uint16_t nb_symb_sch, uint8_t nb_re_dmrs, uint
uint32_t
nr_get_E
(
uint32_t
G
,
uint8_t
C
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
);
uint8_t
nr_get_Qm_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint8_t
nr_get_Qm_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
void
compute_nr_prach_seq
(
uint8_t
short_sequence
,
uint8_t
num_sequences
,
uint8_t
rootSequenceIndex
,
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
c6b4f97d
...
...
@@ -423,13 +423,10 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
phy_vars_gNB
->
nbDecode
=
0
;
harq_process
->
processedSegments
=
0
;
double
Coderate
=
0
.
0
;
// ------------------------------------------------------------------
uint16_t
nb_rb
=
pusch_pdu
->
rb_size
;
uint8_t
Qm
=
pusch_pdu
->
qam_mod_order
;
uint16_t
R
=
pusch_pdu
->
target_code_rate
;
uint8_t
mcs
=
pusch_pdu
->
mcs_index
;
uint8_t
n_layers
=
pusch_pdu
->
nrOfLayers
;
// ------------------------------------------------------------------
...
...
@@ -458,12 +455,10 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
A
=
(
harq_process
->
TBS
)
<<
3
;
LOG_D
(
NR_PHY
,
"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_rb %d, Qm %d, n_layers %d, Coderate %d
\n
"
,
harq_pid
,
A
,
G
,
mcs
,
n_layers
,
nb_rb
,
Qm
,
n_layers
,
R
);
// target_code_rate in terms of 0.1 bits
float
Coderate
=
(
float
)
pusch_pdu
->
target_code_rate
/
(
float
)
10240
;
if
(
R
<
1024
)
Coderate
=
(
float
)
R
/
(
float
)
1024
;
else
Coderate
=
(
float
)
R
/
(
float
)
2048
;
LOG_D
(
NR_PHY
,
"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_rb %d, Qm %d, n_layers %d, Coderate %f
\n
"
,
harq_pid
,
A
,
G
,
mcs
,
n_layers
,
nb_rb
,
Qm
,
n_layers
,
Coderate
);
if
((
A
<=
292
)
||
((
A
<=
3824
)
&&
(
Coderate
<=
0
.
6667
))
||
Coderate
<=
0
.
25
){
p_decParams
->
BG
=
2
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
c6b4f97d
...
...
@@ -440,8 +440,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint16_t
nb_symb_sch
,
uint8_t
nr_slot_rx
,
uint8_t
harq_pid
,
uint8_t
is_crnti
,
uint8_t
llr8_flag
)
{
uint8_t
is_crnti
)
{
uint32_t
A
,
E
;
uint32_t
G
;
uint32_t
ret
,
offset
;
...
...
@@ -460,7 +459,6 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint8_t
kc
;
uint32_t
Tbslbrm
;
// = 950984;
uint16_t
nb_rb
;
// = 30;
double
Coderate
;
// = 0.0;
uint8_t
dmrs_Type
=
harq_process
->
dmrsConfigType
;
AssertFatal
(
dmrs_Type
==
0
||
dmrs_Type
==
1
,
"Illegal dmrs_type %d
\n
"
,
dmrs_Type
);
uint8_t
nb_re_dmrs
;
...
...
@@ -510,21 +508,17 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
*/
nb_rb
=
harq_process
->
nb_rb
;
harq_process
->
trials
[
harq_process
->
round
]
++
;
uint16_t
nb_rb_oh
=
0
;
// it was not computed at UE side even before and set to 0 in nr_compute_tbs
harq_process
->
TBS
=
nr_compute_tbs
(
harq_process
->
Qm
,
harq_process
->
R
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
*
dmrs_length
,
nb_rb_oh
,
0
,
harq_process
->
Nl
);
A
=
harq_process
->
TBS
;
ret
=
dlsch
->
max_ldpc_iterations
+
1
;
dlsch
->
last_iteration_cnt
=
ret
;
harq_process
->
G
=
nr_get_G
(
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
dmrs_length
,
harq_process
->
Qm
,
harq_process
->
Nl
);
G
=
harq_process
->
G
;
LOG_D
(
PHY
,
"%d.%d DLSCH Decoding, harq_pid %d TBS %d (%d) G %d nb_re_dmrs %d length dmrs %d mcs %d Nl %d nb_symb_sch %d nb_rb %d
\n
"
,
frame
,
nr_slot_rx
,
harq_pid
,
A
,
A
/
8
,
G
,
nb_re_dmrs
,
dmrs_length
,
harq_process
->
mcs
,
harq_process
->
Nl
,
nb_symb_sch
,
nb_rb
)
;
// target_code_rate in terms of 0.1 bits
float
Coderate
=
(
float
)
harq_process
->
R
/
(
float
)
10240
;
if
((
harq_process
->
R
)
<
1024
)
Coderate
=
(
float
)
(
harq_process
->
R
)
/
(
float
)
1024
;
else
Coderate
=
(
float
)
(
harq_process
->
R
)
/
(
float
)
2048
;
LOG_D
(
PHY
,
"%d.%d DLSCH Decoding, harq_pid %d TBS %d (%d) G %d nb_re_dmrs %d length dmrs %d mcs %d Nl %d nb_symb_sch %d nb_rb %d Qm %d Coderate %f
\n
"
,
frame
,
nr_slot_rx
,
harq_pid
,
A
,
A
/
8
,
G
,
nb_re_dmrs
,
dmrs_length
,
harq_process
->
mcs
,
harq_process
->
Nl
,
nb_symb_sch
,
nb_rb
,
harq_process
->
Qm
,
Coderate
);
if
((
A
<=
292
)
||
((
A
<=
NR_MAX_PDSCH_TBS
)
&&
(
Coderate
<=
0
.
6667
))
||
Coderate
<=
0
.
25
)
{
p_decParams
->
BG
=
2
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
c6b4f97d
...
...
@@ -269,13 +269,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
return
-
1
;
}
dlsch0_harq
->
Qm
=
nr_get_Qm_dl
(
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mcs
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mcs_table
);
dlsch0_harq
->
R
=
nr_get_code_rate_dl
(
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mcs
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mcs_table
);
if
(
dlsch0_harq
->
Qm
==
0
||
dlsch0_harq
->
R
==
0
)
{
LOG_W
(
MAC
,
"Invalid code rate or Mod order, likely due to unexpected DL DCI.
\n
"
);
return
-
1
;
}
#ifdef DEBUG_HARQ
printf
(
"[DEMOD] MIMO mode = %d
\n
"
,
dlsch0_harq
->
mimo_mode
);
printf
(
"[DEMOD] cw for TB0 = %d, cw for TB1 = %d
\n
"
,
codeword_TB0
,
codeword_TB1
);
...
...
@@ -3145,7 +3138,7 @@ static int nr_dlsch_llr(NR_UE_PDSCH **pdsch_vars,
}
if
(
dlsch1_harq
)
{
switch
(
nr_get_Qm_dl
(
dlsch1_harq
->
mcs
,
dlsch1_harq
->
mcs_table
)
)
{
switch
(
dlsch1_harq
->
Qm
)
{
case
2
:
if
(
rx_type
==
rx_standard
)
{
nr_dlsch_qpsk_llr
(
frame_parms
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
c6b4f97d
...
...
@@ -1040,8 +1040,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint16_t
nb_symb_sch
,
uint8_t
nr_slot_rx
,
uint8_t
harq_pid
,
uint8_t
is_crnti
,
uint8_t
llr8_flag
);
uint8_t
is_crnti
);
int
nr_ulsch_encoding
(
PHY_VARS_NR_UE
*
ue
,
NR_UE_ULSCH_t
*
ulsch
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
View file @
c6b4f97d
...
...
@@ -181,23 +181,24 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
unsigned
int
crc
=
1
;
NR_UL_UE_HARQ_t
*
harq_process
=
ulsch
->
harq_processes
[
harq_pid
];
uint16_t
nb_rb
=
harq_process
->
pusch_pdu
.
rb_size
;
uint32_t
A
=
harq_process
->
pusch_pdu
.
pusch_data
.
tb_size
*
8
;
uint32_t
A
=
harq_process
->
pusch_pdu
.
pusch_data
.
tb_size
<<
3
;
uint32_t
*
pz
=
&
harq_process
->
Z
;
uint8_t
mod_order
=
nr_get_Qm_ul
(
harq_process
->
pusch_pdu
.
mcs_index
,
harq_process
->
pusch_pdu
.
mcs_table
);
uint16_t
R
=
nr_get_code_rate_ul
(
harq_process
->
pusch_pdu
.
mcs_index
,
harq_process
->
pusch_pdu
.
mcs_table
);
uint8_t
mod_order
=
harq_process
->
pusch_pdu
.
qam_mod_order
;
uint16_t
Kr
=
0
;
uint32_t
r_offset
=
0
;
uint32_t
F
=
0
;
uint8_t
Ilbrm
=
0
;
uint32_t
Tbslbrm
=
950984
;
//max tbs
float
Coderate
=
0
.
0
;
// target_code_rate in terms of 0.1 bits
float
Coderate
=
(
float
)
harq_process
->
pusch_pdu
.
target_code_rate
/
(
float
)
10240
;
///////////
/////////////////////////////////////////////////////////////////////////////////////////
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_UE_ULSCH_ENCODING
,
VCD_FUNCTION_IN
);
LOG_D
(
NR_PHY
,
"ulsch coding nb_rb %d, Nl = %d
\n
"
,
nb_rb
,
harq_process
->
pusch_pdu
.
nrOfLayers
);
LOG_D
(
NR_PHY
,
"ulsch coding A %d G %d mod_order %d
\n
"
,
A
,
G
,
mod_order
);
LOG_D
(
NR_PHY
,
"ulsch coding A %d G %d mod_order %d
Coderate %f
\n
"
,
A
,
G
,
mod_order
,
Coderate
);
LOG_D
(
NR_PHY
,
"harq_pid %d harq_process->ndi %d, pusch_data.new_data_indicator %d
\n
"
,
harq_pid
,
harq_process
->
ndi
,
harq_process
->
pusch_pdu
.
pusch_data
.
new_data_indicator
);
...
...
@@ -252,11 +253,6 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
///////////////////////// b---->| block segmentation |---->c /////////////////////////
///////////
if
(
R
<
1024
)
Coderate
=
(
float
)
R
/
(
float
)
1024
;
else
Coderate
=
(
float
)
R
/
(
float
)
2048
;
if
((
A
<=
292
)
||
((
A
<=
3824
)
&&
(
Coderate
<=
0
.
6667
))
||
Coderate
<=
0
.
25
){
harq_process
->
BG
=
2
;
}
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
c6b4f97d
...
...
@@ -243,6 +243,9 @@ void configure_dlsch(NR_UE_DLSCH_t *dlsch0,
dlsch0_harq
->
mcs
=
dlsch_config_pdu
->
mcs
;
dlsch0_harq
->
rvidx
=
dlsch_config_pdu
->
rv
;
dlsch0
->
g_pucch
=
dlsch_config_pdu
->
accumulated_delta_PUCCH
;
dlsch0_harq
->
R
=
dlsch_config_pdu
->
targetCodeRate
;
dlsch0_harq
->
Qm
=
dlsch_config_pdu
->
qamModOrder
;
dlsch0_harq
->
TBS
=
dlsch_config_pdu
->
TBS
;
//get nrOfLayers from DCI info
uint8_t
Nl
=
0
;
for
(
int
i
=
0
;
i
<
12
;
i
++
)
{
// max 12 ports
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
c6b4f97d
...
...
@@ -788,8 +788,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
nb_symb_sch
,
nr_slot_rx
,
harq_pid
,
pdsch
==
PDSCH
?
1
:
0
,
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
pdsch
==
PDSCH
?
1
:
0
);
LOG_T
(
PHY
,
"dlsch decoding, ret = %d
\n
"
,
ret
);
...
...
@@ -865,8 +864,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
nb_symb_sch
,
nr_slot_rx
,
harq_pid
,
pdsch
==
PDSCH
?
1
:
0
,
//proc->decoder_switch,
dlsch1
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
pdsch
==
PDSCH
?
1
:
0
);
//proc->decoder_switch
LOG_T
(
PHY
,
"CW dlsch decoding, ret1 = %d
\n
"
,
ret1
);
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
...
...
openair1/SIMULATION/NR_PHY/dlschsim.c
View file @
c6b4f97d
...
...
@@ -47,6 +47,7 @@
#include "openair1/SIMULATION/RF/rf.h"
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
#include "openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h"
//#define DEBUG_NR_DLSCHSIM
...
...
@@ -426,7 +427,7 @@ int main(int argc, char **argv)
NR_gNB_DLSCH_t
*
dlsch
=
msgDataTx
.
dlsch
[
0
][
0
];
nfapi_nr_dl_tti_pdsch_pdu_rel15_t
*
rel15
=
&
dlsch
->
harq_process
.
pdsch_pdu
.
pdsch_pdu_rel15
;
//time_stats_t *rm_stats, *te_stats, *i_stats;
uint8_t
is_crnti
=
0
,
llr8_flag
=
0
;
uint8_t
is_crnti
=
0
;
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
6
;
// No data in dmrs symbol
...
...
@@ -451,7 +452,7 @@ int main(int argc, char **argv)
rel15
->
qamModOrder
[
0
]
=
mod_order
;
rel15
->
nrOfLayers
=
Nl
;
rel15
->
TBSize
[
0
]
=
TBS
>>
3
;
rel15
->
targetCodeRate
[
0
]
=
rate
;
rel15
->
targetCodeRate
[
0
]
=
(
rate
>
1024
)
?
rate
*
5
:
rate
*
10
;
rel15
->
NrOfCodewords
=
1
;
rel15
->
dmrsConfigType
=
NFAPI_NR_DMRS_TYPE1
;
rel15
->
dlDmrsSymbPos
=
4
;
...
...
@@ -472,7 +473,8 @@ int main(int argc, char **argv)
harq_process
->
nb_rb
=
nb_rb
;
harq_process
->
Qm
=
mod_order
;
harq_process
->
rvidx
=
rvidx
;
harq_process
->
R
=
rate
;
harq_process
->
R
=
(
rate
>
1024
)
?
rate
*
5
:
rate
*
10
;
harq_process
->
TBS
=
TBS
;
harq_process
->
dmrsConfigType
=
NFAPI_NR_DMRS_TYPE1
;
harq_process
->
dlDmrsSymbPos
=
4
;
harq_process
->
n_dmrs_cdm_groups
=
1
;
...
...
@@ -495,8 +497,8 @@ int main(int argc, char **argv)
//printf("crc32: [0]->0x%08x\n",crc24c(test_input, 32));
// generate signal
unsigned
char
output
[
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
]
__attribute__
((
aligned
(
32
)));
bzero
(
output
,
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
);
unsigned
char
output
[
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
]
__attribute__
((
aligned
(
32
)));
bzero
(
output
,
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
);
if
(
input_fd
==
NULL
)
{
nr_dlsch_encoding
(
gNB
,
test_input
,
frame
,
slot
,
dlsch
,
frame_parms
,
output
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
...
...
@@ -548,7 +550,7 @@ int main(int argc, char **argv)
ret
=
nr_dlsch_decoding
(
UE
,
&
proc
,
0
,
channel_output_fixed
,
&
UE
->
frame_parms
,
dlsch0_ue
,
dlsch0_ue
->
harq_processes
[
0
],
frame
,
nb_symb_sch
,
slot
,
harq_pid
,
is_crnti
,
llr8_flag
);
slot
,
harq_pid
,
is_crnti
);
vcd_signal_dumper_dump_function_by_name
(
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0
,
VCD_FUNCTION_OUT
);
...
...
openair1/SIMULATION/NR_PHY/ulschsim.c
View file @
c6b4f97d
...
...
@@ -47,6 +47,7 @@
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
#include "common/utils/threadPool/thread-pool.h"
#include "openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h"
//#define DEBUG_NR_ULSCHSIM
...
...
@@ -446,8 +447,8 @@ int main(int argc, char **argv)
rel15_ul
->
mcs_index
=
Imcs
;
rel15_ul
->
pusch_data
.
rv_index
=
rvidx
;
rel15_ul
->
nrOfLayers
=
Nl
;
rel15_ul
->
target_code_rate
=
code_rate
;
rel15_ul
->
pusch_data
.
tb_size
=
TBS
/
8
;
rel15_ul
->
target_code_rate
=
(
code_rate
>
1024
)
?
code_rate
*
5
:
code_rate
*
10
;
rel15_ul
->
pusch_data
.
tb_size
=
TBS
>>
3
;
///////////////////////////////////////////////////
double
modulated_input
[
16
*
68
*
384
];
// [hna] 16 segments, 68*Zc
...
...
@@ -474,7 +475,9 @@ int main(int argc, char **argv)
harq_process_ul_ue
->
pusch_pdu
.
nr_of_symbols
=
nb_symb_sch
;
harq_process_ul_ue
->
num_of_mod_symbols
=
N_RE_prime
*
nb_rb
*
nb_codewords
;
harq_process_ul_ue
->
pusch_pdu
.
pusch_data
.
rv_index
=
rvidx
;
harq_process_ul_ue
->
pusch_pdu
.
pusch_data
.
tb_size
=
TBS
/
8
;
harq_process_ul_ue
->
pusch_pdu
.
pusch_data
.
tb_size
=
TBS
>>
3
;
harq_process_ul_ue
->
pusch_pdu
.
target_code_rate
=
(
code_rate
>
1024
)
?
code_rate
*
5
:
code_rate
*
10
;
harq_process_ul_ue
->
pusch_pdu
.
qam_mod_order
=
mod_order
;
unsigned
char
*
test_input
=
harq_process_ul_ue
->
a
;
///////////
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
c6b4f97d
...
...
@@ -1083,7 +1083,7 @@ int main(int argc, char **argv)
pusch_pdu
->
rnti
=
n_rnti
;
pusch_pdu
->
mcs_index
=
Imcs
;
pusch_pdu
->
mcs_table
=
mcs_table
;
pusch_pdu
->
target_code_rate
=
code_rate
;
pusch_pdu
->
target_code_rate
=
(
code_rate
>
1024
)
?
code_rate
*
5
:
code_rate
*
10
;
pusch_pdu
->
qam_mod_order
=
mod_order
;
pusch_pdu
->
transform_precoding
=
transform_precoding
;
pusch_pdu
->
data_scrambling_id
=
*
scc
->
physCellId
;
...
...
@@ -1160,6 +1160,7 @@ int main(int argc, char **argv)
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
num_dmrs_cdm_grps_no_data
=
num_dmrs_cdm_grps_no_data
;
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
nrOfLayers
=
precod_nbr_layers
;
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
absolute_delta_PUSCH
=
0
;
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
target_code_rate
=
(
code_rate
>
1024
)
?
code_rate
*
5
:
code_rate
*
10
;
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
tb_size
=
TBS
/
8
;
ul_config
.
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
new_data_indicator
=
trial
&
0x1
;
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
c6b4f97d
...
...
@@ -119,6 +119,23 @@ int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmr
uint8_t
get_L_ptrs
(
uint8_t
mcs1
,
uint8_t
mcs2
,
uint8_t
mcs3
,
uint8_t
I_mcs
,
uint8_t
mcs_table
);
uint8_t
get_K_ptrs
(
uint16_t
nrb0
,
uint16_t
nrb1
,
uint16_t
N_RB
);
uint32_t
nr_compute_tbs
(
uint16_t
Qm
,
uint16_t
R
,
uint16_t
nb_rb
,
uint16_t
nb_symb_sch
,
uint16_t
nb_dmrs_prb
,
uint16_t
nb_rb_oh
,
uint8_t
tb_scaling
,
uint8_t
Nl
);
/** \brief Computes Q based on I_MCS PDSCH and table_idx for downlink. Implements MCS Tables from 38.214. */
uint8_t
nr_get_Qm_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
/** \brief Computes Q based on I_MCS PDSCH and table_idx for uplink. Implements MCS Tables from 38.214. */
uint8_t
nr_get_Qm_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint16_t
get_nr_srs_offset
(
NR_SRS_PeriodicityAndOffset_t
periodicityAndOffset
);
void
get_type0_PDCCH_CSS_config_parameters
(
NR_Type0_PDCCH_CSS_config_t
*
type0_PDCCH_CSS_config
,
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
c6b4f97d
...
...
@@ -900,6 +900,23 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
LOG_W
(
MAC
,
"[%d.%d] MCS value %d out of bounds! Possibly due to false DCI. Ignoring DCI!
\n
"
,
frame
,
slot
,
dlsch_config_pdu_1_0
->
mcs
);
return
-
1
;
}
dlsch_config_pdu_1_0
->
qamModOrder
=
nr_get_Qm_dl
(
dlsch_config_pdu_1_0
->
mcs
,
dlsch_config_pdu_1_0
->
mcs_table
);
int
R
=
nr_get_code_rate_dl
(
dlsch_config_pdu_1_0
->
mcs
,
dlsch_config_pdu_1_0
->
mcs_table
);
dlsch_config_pdu_1_0
->
targetCodeRate
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
if
(
dlsch_config_pdu_1_0
->
targetCodeRate
==
0
||
dlsch_config_pdu_1_0
->
qamModOrder
==
0
)
{
LOG_W
(
MAC
,
"Invalid code rate or Mod order, likely due to unexpected DL DCI.
\n
"
);
return
-
1
;
}
int
nb_rb_oh
=
0
;
// it was not computed at UE side even before and set to 0 in nr_compute_tbs
int
nb_re_dmrs
=
((
dlsch_config_pdu_1_0
->
dmrsConfigType
==
NFAPI_NR_DMRS_TYPE1
)
?
6
:
4
)
*
dlsch_config_pdu_1_0
->
n_dmrs_cdm_groups
;
dlsch_config_pdu_1_0
->
TBS
=
nr_compute_tbs
(
dlsch_config_pdu_1_0
->
qamModOrder
,
R
,
dlsch_config_pdu_1_0
->
number_rbs
,
dlsch_config_pdu_1_0
->
number_symbols
,
nb_re_dmrs
*
get_num_dmrs
(
dlsch_config_pdu_1_0
->
dlDmrsSymbPos
),
nb_rb_oh
,
0
,
1
);
/* NDI (only if CRC scrambled by C-RNTI or CS-RNTI or new-RNTI or TC-RNTI)*/
dlsch_config_pdu_1_0
->
ndi
=
dci
->
ndi
;
/* RV (only if CRC scrambled by C-RNTI or CS-RNTI or new-RNTI or TC-RNTI)*/
...
...
@@ -1288,6 +1305,25 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
dl_config
->
number_pdus
=
dl_config
->
number_pdus
+
1
;
/* TODO same calculation for MCS table as done in UL */
dlsch_config_pdu_1_1
->
mcs_table
=
(
pdsch_Config
->
mcs_Table
)
?
(
*
pdsch_Config
->
mcs_Table
+
1
)
:
0
;
dlsch_config_pdu_1_1
->
qamModOrder
=
nr_get_Qm_dl
(
dlsch_config_pdu_1_1
->
mcs
,
dlsch_config_pdu_1_1
->
mcs_table
);
int
R
=
nr_get_code_rate_dl
(
dlsch_config_pdu_1_1
->
mcs
,
dlsch_config_pdu_1_1
->
mcs_table
);
dlsch_config_pdu_1_1
->
targetCodeRate
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
if
(
dlsch_config_pdu_1_1
->
targetCodeRate
==
0
||
dlsch_config_pdu_1_1
->
qamModOrder
==
0
)
{
LOG_W
(
MAC
,
"Invalid code rate or Mod order, likely due to unexpected DL DCI.
\n
"
);
return
-
1
;
}
uint8_t
Nl
=
0
;
for
(
int
i
=
0
;
i
<
12
;
i
++
)
{
// max 12 ports
if
((
dlsch_config_pdu_1_1
->
dmrs_ports
>>
i
)
&
0x01
)
Nl
+=
1
;
}
int
nb_rb_oh
=
0
;
// it was not computed at UE side even before and set to 0 in nr_compute_tbs
int
nb_re_dmrs
=
((
dmrs_type
==
NULL
)
?
6
:
4
)
*
dlsch_config_pdu_1_1
->
n_dmrs_cdm_groups
;
dlsch_config_pdu_1_1
->
TBS
=
nr_compute_tbs
(
dlsch_config_pdu_1_1
->
qamModOrder
,
R
,
dlsch_config_pdu_1_1
->
number_rbs
,
dlsch_config_pdu_1_1
->
number_symbols
,
nb_re_dmrs
*
get_num_dmrs
(
dlsch_config_pdu_1_1
->
dlDmrsSymbPos
),
nb_rb_oh
,
0
,
Nl
);
/*PTRS configuration */
dlsch_config_pdu_1_1
->
pduBitmap
=
0
;
if
(
pdsch_Config
->
dmrs_DownlinkForPDSCH_MappingTypeA
->
choice
.
setup
->
phaseTrackingRS
!=
NULL
)
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
c6b4f97d
...
...
@@ -867,7 +867,8 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
rnti_types
[
rnti_type
]);
pusch_config_pdu
->
ul_dmrs_symb_pos
=
l_prime_mask
;
pusch_config_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
pusch_config_pdu
->
mcs_index
,
pusch_config_pdu
->
mcs_table
);
uint16_t
R
=
nr_get_code_rate_ul
(
pusch_config_pdu
->
mcs_index
,
pusch_config_pdu
->
mcs_table
);
pusch_config_pdu
->
target_code_rate
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pusch_config_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
pusch_config_pdu
->
mcs_index
,
pusch_config_pdu
->
mcs_table
);
if
(
pusch_config_pdu
->
target_code_rate
==
0
||
pusch_config_pdu
->
qam_mod_order
==
0
)
{
...
...
@@ -886,14 +887,13 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
// Compute TBS
pusch_config_pdu
->
pusch_data
.
tb_size
=
nr_compute_tbs
(
pusch_config_pdu
->
qam_mod_order
,
pusch_config_pdu
->
target_code_rate
,
R
,
pusch_config_pdu
->
rb_size
,
pusch_config_pdu
->
nr_of_symbols
,
nb_dmrs_re_per_rb
*
number_dmrs_symbols
,
N_PRB_oh
,
0
,
// TBR to verify tb scaling
pusch_config_pdu
->
nrOfLayers
)
/
8
;
pusch_config_pdu
->
nrOfLayers
)
>>
3
;
return
0
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
c6b4f97d
...
...
@@ -1085,13 +1085,14 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
for
(
int
i
=
start_symbol_index
;
i
<
start_symbol_index
+
nr_of_symbols
;
i
++
)
num_dmrs_symb
+=
(
pusch_pdu
->
ul_dmrs_symb_pos
>>
i
)
&
1
;
int
TBS
=
0
;
int
R
,
TBS
=
0
;
while
(
TBS
<
7
)
{
// TBS for msg3 is 7 bytes (except for RRCResumeRequest1 currently not implemented)
mcsindex
++
;
pusch_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
mcsindex
,
pusch_pdu
->
mcs_table
);
R
=
nr_get_code_rate_ul
(
mcsindex
,
pusch_pdu
->
mcs_table
);
pusch_pdu
->
target_code_rate
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pusch_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
mcsindex
,
pusch_pdu
->
mcs_table
);
TBS
=
nr_compute_tbs
(
pusch_pdu
->
qam_mod_order
,
pusch_pdu
->
target_code_rate
,
R
,
pusch_pdu
->
rb_size
,
pusch_pdu
->
nr_of_symbols
,
num_dmrs_symb
*
12
,
// nb dmrs set for no data in dmrs symbol
...
...
@@ -1402,7 +1403,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
tb_scaling
,
// tb scaling
1
)
>>
3
;
// layers
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
R
;
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
Qm
;
pdsch_pdu_rel15
->
mcsIndex
[
0
]
=
mcsIndex
;
pdsch_pdu_rel15
->
TBSize
[
0
]
=
TBS
;
...
...
@@ -1763,7 +1764,8 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
pdsch_pdu_rel15
->
SubcarrierSpacing
=
genericParameters
->
subcarrierSpacing
;
pdsch_pdu_rel15
->
CyclicPrefix
=
0
;
pdsch_pdu_rel15
->
NrOfCodewords
=
1
;
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
nr_get_code_rate_dl
(
mcsIndex
,
mcsTableIdx
);
int
R
=
nr_get_code_rate_dl
(
mcsIndex
,
mcsTableIdx
);
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
2
;
pdsch_pdu_rel15
->
mcsIndex
[
0
]
=
mcsIndex
;
pdsch_pdu_rel15
->
mcsTable
[
0
]
=
mcsTableIdx
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
View file @
c6b4f97d
...
...
@@ -475,7 +475,8 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
pdsch_pdu_rel15
->
CyclicPrefix
=
0
;
pdsch_pdu_rel15
->
NrOfCodewords
=
1
;
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
nr_get_code_rate_dl
(
gNB_mac
->
sched_ctrlCommon
->
sched_pdsch
.
mcs
,
0
);
int
R
=
nr_get_code_rate_dl
(
gNB_mac
->
sched_ctrlCommon
->
sched_pdsch
.
mcs
,
0
);
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
2
;
pdsch_pdu_rel15
->
mcsIndex
[
0
]
=
gNB_mac
->
sched_ctrlCommon
->
sched_pdsch
.
mcs
;
pdsch_pdu_rel15
->
mcsTable
[
0
]
=
0
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
c6b4f97d
...
...
@@ -1152,7 +1152,8 @@ void nr_schedule_ue_spec(module_id_t module_id,
// Codeword information
pdsch_pdu
->
NrOfCodewords
=
1
;
pdsch_pdu
->
targetCodeRate
[
0
]
=
R
;
//number of information bits per 1024 coded bits expressed in 0.1 bit units
pdsch_pdu
->
targetCodeRate
[
0
]
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pdsch_pdu
->
qamModOrder
[
0
]
=
Qm
;
pdsch_pdu
->
mcsIndex
[
0
]
=
sched_pdsch
->
mcs
;
pdsch_pdu
->
mcsTable
[
0
]
=
ps
->
mcsTableIdx
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
c6b4f97d
...
...
@@ -117,7 +117,8 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
pdsch_pdu_rel15
->
CyclicPrefix
=
0
;
pdsch_pdu_rel15
->
NrOfCodewords
=
1
;
int
mcsIndex
=
9
;
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
nr_get_code_rate_dl
(
mcsIndex
,
0
);
int
R
=
nr_get_code_rate_dl
(
mcsIndex
,
0
);
pdsch_pdu_rel15
->
targetCodeRate
[
0
]
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pdsch_pdu_rel15
->
qamModOrder
[
0
]
=
2
;
pdsch_pdu_rel15
->
mcsIndex
[
0
]
=
mcsIndex
;
pdsch_pdu_rel15
->
mcsTable
[
0
]
=
0
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
c6b4f97d
...
...
@@ -1709,7 +1709,8 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
pusch_pdu
->
cyclic_prefix
=
0
;
/* FAPI: PUSCH information always included */
pusch_pdu
->
target_code_rate
=
sched_pusch
->
R
;
uint16_t
R
=
sched_pusch
->
R
;
pusch_pdu
->
target_code_rate
=
(
R
>
1024
)
?
R
*
5
:
R
*
10
;
pusch_pdu
->
qam_mod_order
=
sched_pusch
->
Qm
;
pusch_pdu
->
mcs_index
=
sched_pusch
->
mcs
;
pusch_pdu
->
mcs_table
=
ps
->
mcs_table
;
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
c6b4f97d
...
...
@@ -344,13 +344,6 @@ void nr_get_tbs_dl(nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu,
int
x_overhead
,
uint8_t
numdmrscdmgroupnodata
,
uint8_t
tb_scaling
);
/** \brief Computes Q based on I_MCS PDSCH and table_idx for downlink. Implements MCS Tables from 38.214. */
uint8_t
nr_get_Qm_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_dl
(
uint8_t
Imcs
,
uint8_t
table_idx
);
/** \brief Computes Q based on I_MCS PDSCH and table_idx for uplink. Implements MCS Tables from 38.214. */
uint8_t
nr_get_Qm_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
uint32_t
nr_get_code_rate_ul
(
uint8_t
Imcs
,
uint8_t
table_idx
);
int
NRRIV2BW
(
int
locationAndBandwidth
,
int
N_RB
);
...
...
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