Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Balaji Kolla
openairinterface5G
Commits
e795ad8c
Commit
e795ad8c
authored
Feb 17, 2019
by
Thomas Laurent
Browse files
merge devlop-nr
parents
3b31b8a7
b4d7c62d
Changes
23
Hide whitespace changes
Inline
Side-by-side
openair1/PHY/CODING/coding_defs.h
View file @
e795ad8c
...
...
@@ -467,33 +467,26 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f);
void
nr_deinterleaving_ldpc
(
uint32_t
E
,
uint8_t
Qm
,
int16_t
*
e
,
int16_t
*
f
);
uint32_t
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
);
int
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint32_t
E
);
int
nr_rate_matching_ldpc_rx
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
int16_t
*
w
,
int16_t
*
soft_input
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
clear
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint32_t
*
E_out
);
uint32_t
E
);
decoder_if_t
phy_threegpplte_turbo_decoder
;
decoder_if_t
phy_threegpplte_turbo_decoder8
;
...
...
openair1/PHY/CODING/nr_rate_matching.c
View file @
e795ad8c
...
...
@@ -63,55 +63,39 @@ void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f)
}
uint32_t
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
)
int
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint32_t
E
)
{
uint8_t
Cprime
;
uint32_t
Ncb
,
E
,
ind
,
k
,
Nref
,
N
;
//uint8_t *e2;
uint32_t
Ncb
,
ind
,
k
,
Nref
,
N
;
AssertFatal
(
Nl
>
0
,
"Nl is 0
\n
"
);
AssertFatal
(
Qm
>
0
,
"Qm is 0
\n
"
);
if
(
C
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
\n
"
,
C
);
return
-
1
;
}
//Bit selection
N
=
(
BG
==
1
)
?
(
66
*
Z
)
:
(
50
*
Z
);
if
(
Ilbrm
==
0
)
Ncb
=
N
;
Ncb
=
N
;
else
{
Nref
=
3
*
Tbslbrm
/
(
2
*
C
);
//R_LBRM = 2/3
Ncb
=
min
(
N
,
Nref
);
}
#ifdef RM_DEBUG
printf
(
"nr_rate_matching: Ncb %d, rvidx %d, G %d, Qm %d, Nl%d, r %d
\n
"
,
Ncb
,
rvidx
,
G
,
Qm
,
Nl
,
r
);
#endif
Cprime
=
C
;
//assume CBGTI not present
if
(
r
<=
Cprime
-
((
G
/
(
Nl
*
Qm
))
%
Cprime
)
-
1
)
E
=
Nl
*
Qm
*
(
G
/
(
Nl
*
Qm
*
Cprime
));
else
E
=
Nl
*
Qm
*
((
G
/
(
Nl
*
Qm
*
Cprime
))
+
1
);
ind
=
(
index_k0
[
BG
-
1
][
rvidx
]
*
Ncb
/
N
)
*
Z
;
#ifdef RM_DEBUG
printf
(
"nr_rate_matching: E %d, k0 %d
Cprime %d modcprime
%d
\n
"
,
E
,
ind
,
Cprime
,((
G
/
(
Nl
*
Qm
))
%
Cprime
)
);
printf
(
"nr_rate_matching
_ldpc
: E %d, k0 %d
, Ncb %d, rvidx
%d
\n
"
,
E
,
ind
,
Ncb
,
rvidx
);
#endif
//e2 = e;
k
=
0
;
for
(;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
...
...
@@ -120,7 +104,6 @@ uint32_t nr_rate_matching_ldpc(uint8_t Ilbrm,
printf
(
"RM_TX k%d Ind: %d (%d)
\n
"
,
k
,
ind
,
w
[
ind
]);
#endif
//if (w[ind] != NR_NULL) e2[k++]=w[ind];
if
(
w
[
ind
]
!=
NR_NULL
)
e
[
k
++
]
=
w
[
ind
];
}
...
...
@@ -131,79 +114,60 @@ uint32_t nr_rate_matching_ldpc(uint8_t Ilbrm,
printf
(
"RM_TX k%d Ind: %d (%d)
\n
"
,
k
,
ind
,
w
[
ind
]);
#endif
//if (w[ind] != NR_NULL) e2[k++]=w[ind];
if
(
w
[
ind
]
!=
NR_NULL
)
e
[
k
++
]
=
w
[
ind
];
}
}
return
(
E
)
;
return
0
;
}
int
nr_rate_matching_ldpc_rx
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
int16_t
*
w
,
int16_t
*
soft_input
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
clear
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint32_t
*
E_out
)
uint32_t
E
)
{
uint8_t
Cprime
;
uint32_t
Ncb
,
E
,
ind
,
k
,
Nref
,
N
;
int16_t
*
soft_input2
;
uint32_t
Ncb
,
ind
,
k
,
Nref
,
N
;
#ifdef RM_DEBUG
int
nulled
=
0
;
#endif
if
(
C
==
0
||
Qm
==
0
||
Nl
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
, Qm %d, Nl %d
\n
"
,
C
,
Qm
,
Nl
);
return
(
-
1
)
;
if
(
C
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
\n
"
,
C
);
return
-
1
;
}
AssertFatal
(
Nl
>
0
,
"Nl is 0
\n
"
);
AssertFatal
(
Qm
>
0
,
"Qm is 0
\n
"
);
//Bit selection
N
=
(
BG
==
1
)
?
(
66
*
Z
)
:
(
50
*
Z
);
if
(
Ilbrm
==
0
)
Ncb
=
N
;
Ncb
=
N
;
else
{
Nref
=
(
3
*
Tbslbrm
/
(
2
*
C
));
//R_LBRM = 2/3
Ncb
=
min
(
N
,
Nref
);
}
Cprime
=
C
;
//assume CBGTI not present
if
(
r
<=
Cprime
-
((
G
/
(
Nl
*
Qm
))
%
Cprime
)
-
1
)
E
=
Nl
*
Qm
*
(
G
/
(
Nl
*
Qm
*
Cprime
));
else
E
=
Nl
*
Qm
*
((
G
/
(
Nl
*
Qm
*
Cprime
))
+
1
);
ind
=
(
index_k0
[
BG
-
1
][
rvidx
]
*
Ncb
/
N
)
*
Z
;
#ifdef RM_DEBUG
printf
(
"nr_rate_matching_ldpc_rx: Clear %d, E %d, Ncb %d,rvidx
%d, G %d, Qm %d, Nl%d, r
%d
\n
"
,
clear
,
E
,
Ncb
,
rvidx
,
G
,
Qm
,
Nl
,
r
);
printf
(
"nr_rate_matching_ldpc_rx: Clear %d, E %d,
k0 %d,
Ncb %d,
rvidx %d
\n
"
,
clear
,
E
,
ind
,
Ncb
,
rvidx
);
#endif
if
(
clear
==
1
)
memset
(
w
,
0
,
Ncb
*
sizeof
(
int16_t
));
soft_input2
=
soft_input
;
k
=
0
;
for
(;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
if
(
soft_input
2
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
2
[
k
++
];
if
(
soft_input
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
[
k
++
];
#ifdef RM_DEBUG
printf
(
"RM_RX k%d Ind: %d (%d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
]);
#endif
...
...
@@ -220,10 +184,10 @@ int nr_rate_matching_ldpc_rx(uint8_t Ilbrm,
while
(
k
<
E
)
{
for
(
ind
=
0
;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
if
(
soft_input
2
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
2
[
k
++
];
if
(
soft_input
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
[
k
++
];
#ifdef RM_DEBUG
printf
(
"RM_RX k%d Ind: %d (%d)(soft in %d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
],
soft_input
2
[
k
-
1
]);
printf
(
"RM_RX k%d Ind: %d (%d)(soft in %d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
],
soft_input
[
k
-
1
]);
#endif
}
...
...
@@ -237,7 +201,5 @@ int nr_rate_matching_ldpc_rx(uint8_t Ilbrm,
}
}
*
E_out
=
E
;
return
(
0
);
return
0
;
}
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
e795ad8c
...
...
@@ -130,8 +130,8 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
#ifdef DEBUG_FEP
// if (ue->frame <100)
/*LOG_I(PHY,*/
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d,
subframe_offset %d,
sample_offset %d,rx_offset %d, frame_length_samples %d
\n
"
,
ue
->
proc
.
proc_rxtx
[(
Ns
>>
1
)
&
1
].
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
,
frame_length_samples
);
/*LOG_I(PHY,*/
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, sample_offset %d,rx_offset %d, frame_length_samples %d
\n
"
,
ue
->
proc
.
proc_rxtx
[(
Ns
>>
1
)
&
1
].
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
sample_offset
,
rx_offset
,
frame_length_samples
);
#endif
if
(
l
==
0
)
{
...
...
openair1/PHY/NR_REFSIG/pss_nr.h
View file @
e795ad8c
...
...
@@ -137,7 +137,9 @@ int set_pss_nr(int ofdm_symbol_size);
int
pss_synchro_nr
(
PHY_VARS_NR_UE
*
PHY_vars_UE
,
int
rate_change
);
int
pss_search_time_nr
(
int
**
rxdata
,
///rx data in time domain
NR_DL_FRAME_PARMS
*
frame_parms
,
int
*
eNB_id
);
int
fo_flag
,
int
*
eNB_id
,
int
*
f_off
);
#endif
#undef EXTERN
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
e795ad8c
...
...
@@ -90,6 +90,8 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t dlsch,
@param nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs */
uint32_t
nr_get_G
(
uint16_t
nb_rb
,
uint16_t
nb_symb_sch
,
uint8_t
nb_re_dmrs
,
uint16_t
length_dmrs
,
uint8_t
Qm
,
uint8_t
Nl
);
uint32_t
nr_get_E
(
uint32_t
G
,
uint8_t
C
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
void
clean_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
e795ad8c
...
...
@@ -280,7 +280,7 @@ int nr_dlsch_encoding(unsigned char *a,
uint32_t
A
,
Z
;
uint32_t
*
pz
=
&
Z
;
uint8_t
mod_order
=
rel15
.
modulation_order
;
uint16_t
Kr
=
0
,
r
,
r_offset
=
0
;
//
Kr_bytes
uint16_t
Kr
=
0
,
r
,
r_offset
=
0
,
Kr_bytes
;
uint8_t
*
d_tmp
[
MAX_NUM_DLSCH_SEGMENTS
];
uint8_t
kb
,
BG
=
1
;
uint32_t
E
;
...
...
@@ -346,7 +346,7 @@ int nr_dlsch_encoding(unsigned char *a,
}
Kr
=
dlsch
->
harq_processes
[
harq_pid
]
->
K
;
//
Kr_bytes = Kr>>3;
Kr_bytes
=
Kr
>>
3
;
//printf("segment Z %d kb %d k %d Kr %d BG %d\n", *pz,kb,dlsch->harq_processes[harq_pid]->K,Kr,BG);
...
...
@@ -403,25 +403,24 @@ int nr_dlsch_encoding(unsigned char *a,
//start_meas(rm_stats);
#ifdef DEBUG_DLSCH_CODING
printf
(
"rvidx in encoding = %d
\n
"
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
);
printf
(
"rvidx in encoding = %d
\n
"
,
rel15
.
redundancy_version
);
#endif
E
=
nr_rate_matching_ldpc
(
Ilbrm
,
Tbslbrm
,
BG
,
*
pz
,
G
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
rel15
.
redundancy_version
,
mod_order
,
rel15
.
nb_layers
,
r
);
E
=
nr_get_E
(
G
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
mod_order
,
rel15
.
nb_layers
,
r
);
nr_rate_matching_ldpc
(
Ilbrm
,
Tbslbrm
,
BG
,
*
pz
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
rel15
.
redundancy_version
,
E
);
#ifdef DEBUG_DLSCH_CODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
],
r_offset
);
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
+
r_offset
],
r_offset
);
#endif
//stop_meas(rm_stats);
...
...
@@ -432,18 +431,15 @@ int nr_dlsch_encoding(unsigned char *a,
dlsch
->
harq_processes
[
harq_pid
]
->
f
+
r_offset
);
//stop_meas(i_stats);
r_offset
+=
E
;
#ifdef DEBUG_DLSCH_CODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output interleaving f[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
[
i
+
r
*
r_offset
],
r_offset
);
#endif
#ifdef DEBUG_DLSCH_CODING
printf
(
"output interleaving f[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
[
i
+
r_offset
],
r_offset
);
if
(
r
==
dlsch
->
harq_processes
[
harq_pid
]
->
C
-
1
)
write_output
(
"enc_output.m"
,
"enc"
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
,
r_offset
,
1
,
4
);
write_output
(
"enc_output.m"
,
"enc"
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
,
G
,
1
,
4
);
#endif
r_offset
+=
E
;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_OUT
);
...
...
openair1/PHY/NR_TRANSPORT/nr_tbs_tools.c
View file @
e795ad8c
...
...
@@ -176,3 +176,18 @@ uint32_t nr_get_G(uint16_t nb_rb, uint16_t nb_symb_sch,uint8_t nb_re_dmrs,uint16
G
=
((
NR_NB_SC_PER_RB
*
nb_symb_sch
)
-
(
nb_re_dmrs
*
length_dmrs
))
*
nb_rb
*
Qm
*
Nl
;
return
(
G
);
}
uint32_t
nr_get_E
(
uint32_t
G
,
uint8_t
C
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
)
{
uint32_t
E
;
uint8_t
Cprime
=
C
;
//assume CBGTI not present
AssertFatal
(
Nl
>
0
,
"Nl is 0
\n
"
);
AssertFatal
(
Qm
>
0
,
"Qm is 0
\n
"
);
if
(
r
<=
Cprime
-
((
G
/
(
Nl
*
Qm
))
%
Cprime
)
-
1
)
E
=
Nl
*
Qm
*
(
G
/
(
Nl
*
Qm
*
Cprime
));
else
E
=
Nl
*
Qm
*
((
G
/
(
Nl
*
Qm
*
Cprime
))
+
1
);
return
E
;
}
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
e795ad8c
...
...
@@ -28,7 +28,7 @@
#include
"PHY/NR_REFSIG/refsig_defs_ue.h"
#include
"filt16a_32.h"
#include
"T.h"
//#define DEBUG_PD
S
CH
//#define DEBUG_PD
C
CH
int
nr_pbch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
...
...
@@ -297,7 +297,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
// generate pilot
nr_pdcch_dmrs_rx
(
ue
,
eNB_offset
,
Ns
,
ue
->
nr_gold_pdcch
[
eNB_offset
][
Ns
][
symbol
],
&
pilot
[
0
],
2000
,
nb_rb_coreset
);
nr_pdcch_dmrs_rx
(
ue
,
eNB_offset
,
Ns
,
ue
->
nr_gold_pdcch
[
eNB_offset
][
Ns
>>
1
][
symbol
],
&
pilot
[
0
],
2000
,
nb_rb_coreset
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
...
...
@@ -459,7 +459,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
break
;
}
if
(
(
Ns
==
2
)
&&
(
l
==
0
))
//
if( (Ns== 2) && (l == 0))
{
// do ifft of channel estimate
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
...
...
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
View file @
e795ad8c
...
...
@@ -821,8 +821,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
#ifdef NR_PDCCH_DCI_DEBUG
printf
(
"
\t
<-NR_PDCCH_DCI_DEBUG (nr_rx_pdcch)-> symbol_mon=(%d) and start_symbol=(%d)
\n
"
,
symbol_mon
,
start_symbol
);
printf
(
"
\t
<-NR_PDCCH_DCI_DEBUG (nr_rx_pdcch)-> coreset_freq_dom=(%ld) n_rb_offset=(%d) coreset_time_dur=(%d) n_shift=(%d) reg_bundle_size_L=(%d) coreset_interleaver_size_R=(%d)
\n
"
,
coreset_freq_dom
,
n_rb_offset
,
coreset_time_dur
,
n_shift
,
reg_bundle_size_L
,
coreset_interleaver_size_R
);
printf
(
"
\t
<-NR_PDCCH_DCI_DEBUG (nr_rx_pdcch)-> coreset_freq_dom=(%ld) n_rb_offset=(%d) coreset_time_dur=(%d) n_shift=(%d) reg_bundle_size_L=(%d) coreset_interleaver_size_R=(%d)
scrambling_ID=(%d)
\n
"
,
coreset_freq_dom
,
n_rb_offset
,
coreset_time_dur
,
n_shift
,
reg_bundle_size_L
,
coreset_interleaver_size_R
,
pdcch_DMRS_scrambling_id
);
#endif
//
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
e795ad8c
...
...
@@ -376,6 +376,22 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
for
(
r
=
0
;
r
<
harq_process
->
C
;
r
++
)
{
//printf("start rx segment %d\n",r);
E
=
nr_get_E
(
G
,
harq_process
->
C
,
harq_process
->
Qm
,
harq_process
->
Nl
,
r
);
#if UE_TIMING_TRACE
start_meas
(
dlsch_deinterleaving_stats
);
#endif
nr_deinterleaving_ldpc
(
E
,
harq_process
->
Qm
,
harq_process
->
w
[
r
],
dlsch_llr
+
r_offset
);
//for (int i =0; i<16; i++)
// printf("rx output deinterleaving w[%d]= %d r_offset %d\n", i,harq_process->w[r][i], r_offset);
#if UE_TIMING_TRACE
stop_meas
(
dlsch_deinterleaving_stats
);
#endif
#if UE_TIMING_TRACE
start_meas
(
dlsch_rate_unmatching_stats
);
...
...
@@ -394,20 +410,15 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
#endif
if
(
nr_rate_matching_ldpc_rx
(
Ilbrm
,
Tbslbrm
,
p_decParams
->
BG
,
p_decParams
->
Z
,
G
,
harq_process
->
w
[
r
],
dlsch_llr
+
r_offset
,
harq_process
->
C
,
harq_process
->
rvidx
,
(
harq_process
->
round
==
0
)
?
1
:
0
,
harq_process
->
Qm
,
harq_process
->
Nl
,
r
,
&
E
)
==-
1
)
{
Tbslbrm
,
p_decParams
->
BG
,
p_decParams
->
Z
,
harq_process
->
d
[
r
],
harq_process
->
w
[
r
],
harq_process
->
C
,
harq_process
->
rvidx
,
(
harq_process
->
round
==
0
)
?
1
:
0
,
E
)
==-
1
)
{
#if UE_TIMING_TRACE
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
...
...
@@ -419,27 +430,13 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
}
r_offset
+=
E
;
//for (int i =0; i<16; i++)
// printf("rx output ratematching w[%d]= %d r_offset %d\n", i,harq_process->w[r][i], r_offset);
#if UE_TIMING_TRACE
start_meas
(
dlsch_deinterleaving_stats
);
#endif
nr_deinterleaving_ldpc
(
E
,
harq_process
->
Qm
,
harq_process
->
d
[
r
],
harq_process
->
w
[
r
]);
// printf("rx output ratematching d[%d]= %d r_offset %d\n", i,harq_process->d[r][i], r_offset);
//for (int i =0; i<16; i++)
// printf("rx output interleaving d[%d]= %d r_offset %d\n", i,harq_process->d[r][i], r_offset);
r_offset
+=
E
;
#if UE_TIMING_TRACE
stop_meas
(
dlsch_deinterleaving_stats
);
#endif
#ifdef DEBUG_DLSCH_DECODING
if
(
r
==
0
)
{
write_output
(
"decoder_llr.m"
,
"decllr"
,
dlsch_llr
,
G
,
1
,
0
);
write_output
(
"decoder_in.m"
,
"dec"
,
&
harq_process
->
d
[
0
][
0
],(
3
*
8
*
Kr_bytes
)
+
12
,
1
,
0
);
...
...
@@ -979,6 +976,30 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
Tbslbrm
=
nr_compute_tbs
(
28
,
nb_rb
,
frame_parms
->
symbols_per_slot
,
0
,
0
,
harq_process
->
Nl
);
E
=
nr_get_E
(
G
,
harq_process
->
C
,
harq_process
->
Qm
,
harq_process
->
Nl
,
r
);
/*
printf("Subblock deinterleaving, dlsch_llr %p, w %p\n",
dlsch_llr+r_offset,
&harq_process->w[r]);
*/
#if UE_TIMING_TRACE
start_meas
(
dlsch_deinterleaving_stats
);
#endif
nr_deinterleaving_ldpc
(
E
,
harq_process
->
Qm
,
harq_process
->
w
[
r
],
dlsch_llr
+
r_offset
);
#ifdef DEBUG_DLSCH_DECODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"rx output deinterleaving w[%d]= %d r_offset %d
\n
"
,
i
,
harq_process
->
w
[
r
][
i
],
r_offset
);
#endif
#if UE_TIMING_TRACE
stop_meas
(
dlsch_deinterleaving_stats
);
#endif
#if UE_TIMING_TRACE
start_meas
(
dlsch_rate_unmatching_stats
);
#endif
...
...
@@ -995,23 +1016,16 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
harq_process
->
round
);
#endif
#ifdef DEBUG_DLSCH_DECODING
printf
(
" in decoding dlsch->harq_processes[harq_pid]->rvidx = %d
\n
"
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
);
#endif
if
(
nr_rate_matching_ldpc_rx
(
Ilbrm
,
Tbslbrm
,
p_decParams
->
BG
,
p_decParams
->
Z
,
G
,
harq_process
->
w
[
r
],
dlsch_llr
+
r_offset
,
harq_process
->
C
,
harq_process
->
rvidx
,
(
harq_process
->
round
==
0
)
?
1
:
0
,
harq_process
->
Qm
,
harq_process
->
Nl
,
r
,
&
E
)
==-
1
)
{
Tbslbrm
,
p_decParams
->
BG
,
p_decParams
->
Z
,
harq_process
->
d
[
r
],
harq_process
->
w
[
r
],
harq_process
->
C
,
harq_process
->
rvidx
,
(
harq_process
->
round
==
0
)
?
1
:
0
,
E
)
==-
1
)
{
#if UE_TIMING_TRACE
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
...
...
@@ -1023,34 +1037,18 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
}
//for (int i =0; i<16; i++)
// printf("rx output ratematching d[%d]= %d r_offset %d\n", i,harq_process->d[r][i], r_offset);
//r_offset += E;
//printf("main thread r_offset %d\n",r_offset);
#ifdef DEBUG_DLSCH_DECODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"rx output ratematching
w
[%d]= %d r_offset %d
\n
"
,
i
,
harq_process
->
w
[
r
][
i
],
r_offset
);
printf
(
"rx output ratematching
d
[%d]= %d r_offset %d
\n
"
,
i
,
harq_process
->
d
[
r
][
i
],
r_offset
);
#endif
/*
printf("Subblock deinterleaving, d %p w %p\n",
harq_process->d[r],
harq_process->w);
*/
#if UE_TIMING_TRACE
start_meas
(
dlsch_deinterleaving_stats
);
#endif
nr_deinterleaving_ldpc
(
E
,
harq_process
->
Qm
,
harq_process
->
d
[
r
],
harq_process
->
w
[
r
]);
#ifdef DEBUG_DLSCH_DECODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"rx output interleaving d[%d]= %d r_offset %d
\n
"
,
i
,
harq_process
->
d
[
r
][
i
],
r_offset
);
#endif
#if UE_TIMING_TRACE
stop_meas
(
dlsch_deinterleaving_stats
);