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
7a522790
Commit
7a522790
authored
Mar 31, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/bugfix-clear-llr-properly' into integration_2023_w13
parents
ed1d0093
a4718d4a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
6 deletions
+29
-6
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+4
-2
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+18
-4
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+7
-0
No files found.
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
7a522790
...
@@ -72,7 +72,8 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
...
@@ -72,7 +72,8 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
ulsch
->
slot
=
slot
;
ulsch
->
slot
=
slot
;
NR_UL_gNB_HARQ_t
*
harq
=
ulsch
->
harq_process
;
NR_UL_gNB_HARQ_t
*
harq
=
ulsch
->
harq_process
;
harq
->
new_rx
=
ulsch_pdu
->
pusch_data
.
new_data_indicator
;
if
(
ulsch_pdu
->
pusch_data
.
new_data_indicator
)
harq
->
harq_to_be_cleared
=
true
;
LOG_D
(
PHY
,
LOG_D
(
PHY
,
"%d.%d RNTI %x HARQ PID %d new data indicator %d
\n
"
,
"%d.%d RNTI %x HARQ PID %d new data indicator %d
\n
"
,
frame
,
frame
,
...
@@ -80,7 +81,8 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
...
@@ -80,7 +81,8 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t
ulsch_pdu
->
rnti
,
ulsch_pdu
->
rnti
,
harq_pid
,
harq_pid
,
ulsch_pdu
->
pusch_data
.
new_data_indicator
);
ulsch_pdu
->
pusch_data
.
new_data_indicator
);
if
(
harq
->
new_rx
)
if
(
ulsch_pdu
->
pusch_data
.
new_data_indicator
)
harq
->
round
=
0
;
harq
->
round
=
0
;
else
else
harq
->
round
++
;
harq
->
round
++
;
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
7a522790
...
@@ -76,6 +76,7 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t *ulsch, uint16_t N_RB_UL)
...
@@ -76,6 +76,7 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t *ulsch, uint16_t N_RB_UL)
}
}
free_and_zero
(
ulsch
->
harq_process
->
c
);
free_and_zero
(
ulsch
->
harq_process
->
c
);
free_and_zero
(
ulsch
->
harq_process
->
d
);
free_and_zero
(
ulsch
->
harq_process
->
d
);
free_and_zero
(
ulsch
->
harq_process
->
d_to_be_cleared
);
free_and_zero
(
ulsch
->
harq_process
);
free_and_zero
(
ulsch
->
harq_process
);
ulsch
->
harq_process
=
NULL
;
ulsch
->
harq_process
=
NULL
;
}
}
...
@@ -107,6 +108,8 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
...
@@ -107,6 +108,8 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
harq
->
c
[
r
]
=
malloc16_clear
(
8448
*
sizeof
(
*
harq
->
c
[
r
]));
harq
->
c
[
r
]
=
malloc16_clear
(
8448
*
sizeof
(
*
harq
->
c
[
r
]));
harq
->
d
[
r
]
=
malloc16_clear
(
68
*
384
*
sizeof
(
*
harq
->
d
[
r
]));
harq
->
d
[
r
]
=
malloc16_clear
(
68
*
384
*
sizeof
(
*
harq
->
d
[
r
]));
}
}
harq
->
d_to_be_cleared
=
calloc
(
a_segments
,
sizeof
(
bool
));
AssertFatal
(
harq
->
d_to_be_cleared
!=
NULL
,
"out of memory
\n
"
);
return
(
ulsch
);
return
(
ulsch
);
}
}
...
@@ -187,7 +190,7 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
...
@@ -187,7 +190,7 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
harq_e
,
harq_e
,
ulsch_harq
->
C
,
ulsch_harq
->
C
,
rv_index
,
rv_index
,
ulsch_harq
->
new_rx
,
ulsch_harq
->
d_to_be_cleared
[
r
]
,
E
,
E
,
ulsch_harq
->
F
,
ulsch_harq
->
F
,
Kr
-
ulsch_harq
->
F
-
2
*
(
p_decoderParms
->
Z
))
Kr
-
ulsch_harq
->
F
-
2
*
(
p_decoderParms
->
Z
))
...
@@ -201,6 +204,8 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
...
@@ -201,6 +204,8 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
stop_meas
(
&
phy_vars_gNB
->
ulsch_rate_unmatching_stats
);
stop_meas
(
&
phy_vars_gNB
->
ulsch_rate_unmatching_stats
);
}
}
ulsch_harq
->
d_to_be_cleared
[
r
]
=
false
;
memset
(
ulsch_harq
->
c
[
r
],
0
,
Kr_bytes
);
memset
(
ulsch_harq
->
c
[
r
],
0
,
Kr_bytes
);
if
(
ulsch_harq
->
C
==
1
)
{
if
(
ulsch_harq
->
C
==
1
)
{
...
@@ -312,7 +317,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -312,7 +317,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
float
Coderate
=
(
float
)
pusch_pdu
->
target_code_rate
/
10240
.
0
f
;
float
Coderate
=
(
float
)
pusch_pdu
->
target_code_rate
/
10240
.
0
f
;
LOG_D
(
PHY
,
"ULSCH Decoding, harq_pid %d rnti %x TBS %d G %d mcs %d Nl %d nb_rb %d, Qm %d, Coderate %f RV %d round %d new RX %d
\n
"
,
LOG_D
(
PHY
,
"ULSCH Decoding, harq_pid %d rnti %x TBS %d G %d mcs %d Nl %d nb_rb %d, Qm %d, Coderate %f RV %d round %d new RX %d
\n
"
,
harq_pid
,
ulsch
->
rnti
,
A
,
G
,
mcs
,
n_layers
,
nb_rb
,
Qm
,
Coderate
,
pusch_pdu
->
pusch_data
.
rv_index
,
harq_process
->
round
,
harq_process
->
new_rx
);
harq_pid
,
ulsch
->
rnti
,
A
,
G
,
mcs
,
n_layers
,
nb_rb
,
Qm
,
Coderate
,
pusch_pdu
->
pusch_data
.
rv_index
,
harq_process
->
round
,
harq_process
->
harq_to_be_cleared
);
t_nrLDPC_dec_params
decParams
=
{
0
};
t_nrLDPC_dec_params
decParams
=
{
0
};
decParams
.
BG
=
pusch_pdu
->
maintenance_parms_v3
.
ldpcBaseGraph
;
decParams
.
BG
=
pusch_pdu
->
maintenance_parms_v3
.
ldpcBaseGraph
;
int
kc
;
int
kc
;
...
@@ -330,7 +335,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -330,7 +335,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
stats
->
ulsch_stats
.
power
[
aarx
]
=
dB_fixed_x10
(
pusch
->
ulsch_power
[
aarx
]);
stats
->
ulsch_stats
.
power
[
aarx
]
=
dB_fixed_x10
(
pusch
->
ulsch_power
[
aarx
]);
stats
->
ulsch_stats
.
noise_power
[
aarx
]
=
dB_fixed_x10
(
pusch
->
ulsch_noise_power
[
aarx
]);
stats
->
ulsch_stats
.
noise_power
[
aarx
]
=
dB_fixed_x10
(
pusch
->
ulsch_noise_power
[
aarx
]);
}
}
if
(
harq_process
->
new_rx
==
0
)
{
if
(
!
harq_process
->
harq_to_be_cleared
)
{
stats
->
ulsch_stats
.
current_Qm
=
Qm
;
stats
->
ulsch_stats
.
current_Qm
=
Qm
;
stats
->
ulsch_stats
.
current_RI
=
n_layers
;
stats
->
ulsch_stats
.
current_RI
=
n_layers
;
stats
->
ulsch_stats
.
total_bytes_tx
+=
harq_process
->
TBS
;
stats
->
ulsch_stats
.
total_bytes_tx
+=
harq_process
->
TBS
;
...
@@ -383,6 +388,13 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -383,6 +388,13 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
#ifdef DEBUG_ULSCH_DECODING
#ifdef DEBUG_ULSCH_DECODING
printf
(
"Segmentation: C %d, K %d
\n
"
,
harq_process
->
C
,
harq_process
->
K
);
printf
(
"Segmentation: C %d, K %d
\n
"
,
harq_process
->
C
,
harq_process
->
K
);
#endif
#endif
if
(
harq_process
->
harq_to_be_cleared
)
{
for
(
int
r
=
0
;
r
<
harq_process
->
C
;
r
++
)
harq_process
->
d_to_be_cleared
[
r
]
=
true
;
harq_process
->
harq_to_be_cleared
=
false
;
}
Kr
=
harq_process
->
K
;
Kr
=
harq_process
->
K
;
Kr_bytes
=
Kr
>>
3
;
Kr_bytes
=
Kr
>>
3
;
...
@@ -454,7 +466,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -454,7 +466,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
harq_e
,
harq_e
,
harq_process
->
C
,
harq_process
->
C
,
pusch_pdu
->
pusch_data
.
rv_index
,
pusch_pdu
->
pusch_data
.
rv_index
,
harq_process
->
new_rx
,
harq_process
->
d_to_be_cleared
[
r
]
,
E
,
E
,
harq_process
->
F
,
harq_process
->
F
,
Kr
-
harq_process
->
F
-
2
*
(
decParams
.
Z
))
Kr
-
harq_process
->
F
-
2
*
(
decParams
.
Z
))
...
@@ -464,6 +476,8 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -464,6 +476,8 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
return
1
;
return
1
;
}
}
harq_process
->
d_to_be_cleared
[
r
]
=
false
;
// set first 2*Z_c bits to zeros
// set first 2*Z_c bits to zeros
memset
(
&
z
[
0
],
0
,
2
*
harq_process
->
Z
*
sizeof
(
int16_t
));
memset
(
&
z
[
0
],
0
,
2
*
harq_process
->
Z
*
sizeof
(
int16_t
));
// set Filler bits
// set Filler bits
...
...
openair1/PHY/defs_gNB.h
View file @
7a522790
...
@@ -192,6 +192,9 @@ typedef struct {
...
@@ -192,6 +192,9 @@ typedef struct {
uint8_t
round
;
uint8_t
round
;
bool
new_rx
;
bool
new_rx
;
/////////////////////// ulsch decoding ///////////////////////
/////////////////////// ulsch decoding ///////////////////////
/// flag used to clear d properly (together with d_to_be_cleared below)
/// set to true in nr_fill_ulsch() when new_data_indicator is received
bool
harq_to_be_cleared
;
/// Transport block size (This is A from 38.212 V15.4.0 section 5.1)
/// Transport block size (This is A from 38.212 V15.4.0 section 5.1)
uint32_t
TBS
;
uint32_t
TBS
;
/// Pointer to the payload (38.212 V15.4.0 section 5.1)
/// Pointer to the payload (38.212 V15.4.0 section 5.1)
...
@@ -208,6 +211,10 @@ typedef struct {
...
@@ -208,6 +211,10 @@ typedef struct {
uint32_t
C
;
uint32_t
C
;
/// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2)
/// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2)
int16_t
**
d
;
int16_t
**
d
;
/// flag used to clear d properly (together with harq_to_be_cleared above)
/// set to true in nr_ulsch_decoding() when harq_to_be_cleared is true
/// when true, clear d in the next call to function nr_rate_matching_ldpc_rx()
bool
*
d_to_be_cleared
;
/// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1)
/// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1)
uint32_t
Z
;
uint32_t
Z
;
/// Number of bits in each code block after rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
/// Number of bits in each code block after rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
...
...
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