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
canghaiwuhen
OpenXG-RAN
Commits
a38ccc8c
Commit
a38ccc8c
authored
May 17, 2019
by
yilmazt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-nr' into develop-nr-merge
parents
77193149
d54ea501
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
23 additions
and
150 deletions
+23
-150
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+13
-145
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
+4
-4
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+1
-1
openair1/PHY/defs_common.h
openair1/PHY/defs_common.h
+5
-0
No files found.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
a38ccc8c
...
...
@@ -119,7 +119,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
NR_DL_UE_HARQ_t
*
dlsch0_harq
,
*
dlsch1_harq
=
0
;
uint8_t
beamforming_mode
;
uint32_t
*
rballoc
;
int32_t
**
rxdataF_comp_ptr
;
int32_t
**
dl_ch_mag_ptr
;
...
...
@@ -250,25 +249,14 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
return
(
-
1
);
}
if
(((
frame_parms
->
Ncp
==
NORMAL
)
&&
(
symbol
>=
7
))
||
((
frame_parms
->
Ncp
==
EXTENDED
)
&&
(
symbol
>=
6
)))
rballoc
=
dlsch0_harq
->
rb_alloc_odd
;
else
rballoc
=
dlsch0_harq
->
rb_alloc_even
;
if
(
dlsch0_harq
->
mimo_mode
>
DUALSTREAM_PUSCH_PRECODING
)
{
if
(
dlsch0_harq
->
mimo_mode
>
NR_DUALSTREAM
)
{
LOG_E
(
PHY
,
"This transmission mode is not yet supported!
\n
"
);
return
(
-
1
);
}
if
(
(
dlsch0_harq
->
mimo_mode
==
LARGE_CDD
)
||
((
dlsch0_harq
->
mimo_mode
>=
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
dlsch0_harq
->
mimo_mode
<=
DUALSTREAM_PUSCH_PRECODING
))
)
{
if
(
dlsch0_harq
->
mimo_mode
==
NR_DUALSTREAM
)
{
DevAssert
(
dlsch1_harq
);
if
(
eNB_id
!=
eNB_id_i
)
{
LOG_E
(
PHY
,
"TM3/TM4 requires to set eNB_id==eNB_id_i!
\n
"
);
return
(
-
1
);
}
}
#if UE_TIMING_TRACE
...
...
@@ -361,46 +349,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
ue
->
high_speed_flag
,
frame_parms
);
/*
if (rx_type==rx_IC_single_stream) {
if (eNB_id_i<ue->n_connected_eNB)
nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[nr_tti_rx]].rxdataF,
common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[nr_tti_rx]].dl_ch_estimates[eNB_id_i],
pdsch_vars[eNB_id_i]->rxdataF_ext,
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
dlsch0_harq->pmi_alloc,
pdsch_vars[eNB_id_i]->pmi_ext,
rballoc,
symbol,
nr_tti_rx,
ue->high_speed_flag,
frame_parms);
else
nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[nr_tti_rx]].rxdataF,
common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[nr_tti_rx]].dl_ch_estimates[eNB_id],
pdsch_vars[eNB_id_i]->rxdataF_ext,
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
dlsch0_harq->pmi_alloc,
pdsch_vars[eNB_id_i]->pmi_ext,
rballoc,
symbol,
nr_tti_rx,
ue->high_speed_flag,
frame_parms);
}*/
}
/*else if (beamforming_mode==7) { //else if beamforming_mode == 7
nb_rb = dlsch_extract_rbs_TM7(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[nr_tti_rx]].rxdataF,
pdsch_vars[eNB_id]->dl_bf_ch_estimates,
pdsch_vars[eNB_id]->rxdataF_ext,
pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
rballoc,
symbol,
nr_tti_rx,
ue->high_speed_flag,
frame_parms);
} else if(beamforming_mode>7) {
}
/*else if(beamforming_mode>7) {
LOG_W(PHY,"dlsch_demodulation: beamforming mode not supported yet.\n");
}*/
...
...
@@ -436,20 +385,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
pilots
,
nb_rb
);
if
((
dlsch0_harq
->
mimo_mode
<
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
rx_type
==
rx_IC_single_stream
)
&&
(
eNB_id_i
==
ue
->
n_connected_eNB
)
&&
(
dlsch0_harq
->
dl_power_off
==
0
)
)
// TM5 two-user
{
nr_dlsch_scale_channel
(
pdsch_vars
[
eNB_id_i
]
->
dl_ch_estimates_ext
,
frame_parms
,
dlsch
,
symbol
,
pilots
,
nb_rb
);
}
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
...
...
@@ -464,7 +399,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#endif
if
(
first_symbol_flag
==
1
)
{
if
(
beamforming_mode
==
0
){
if
(
dlsch0_harq
->
mimo_mode
<
LARGE_CDD
)
{
if
(
dlsch0_harq
->
mimo_mode
<
NR_DUALSTREAM
)
{
nr_dlsch_channel_level
(
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
frame_parms
,
avg
,
...
...
@@ -478,9 +413,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
pdsch_vars
[
eNB_id
]
->
log2_maxh
=
(
log2_approx
(
avgs
)
/
2
)
+
1
;
}
else
if
((
dlsch0_harq
->
mimo_mode
==
LARGE_CDD
)
||
((
dlsch0_harq
->
mimo_mode
>=
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
dlsch0_harq
->
mimo_mode
<=
DUALSTREAM_PUSCH_PRECODING
)))
else
if
(
dlsch0_harq
->
mimo_mode
==
NR_DUALSTREAM
)
{
nr_dlsch_channel_level_median
(
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
median
,
...
...
@@ -499,54 +432,16 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
pdsch_vars
[
eNB_id
]
->
log2_maxh
=
(
log2_approx
(
avgs
)
/
2
)
+
1
;
// this might need to be tuned
}
/*
else if (dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) {// single-layer precoding (TM5, TM6)
if ((rx_type==rx_IC_single_stream) && (eNB_id_i==ue->n_connected_eNB) && (dlsch0_harq->dl_power_off==0)) {
dlsch_channel_level_TM56(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
frame_parms,
pdsch_vars[eNB_id]->pmi_ext,
avg,
symbol,
nb_rb);
avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1];
pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
}
else if (dlsch0_harq->dl_power_off==1) { //TM6
nr_dlsch_channel_level(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
frame_parms,
avg,
symbol,
nb_rb);
avgs = 0;
for (aatx=0;aatx<frame_parms->nb_antenna_ports_eNB;aatx++)
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2) + 1;
pdsch_vars[eNB_id]->log2_maxh++;
}
}
}
else if (beamforming_mode==7)
dlsch_channel_level_TM7(pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
frame_parms,
avg,
symbol,
nb_rb);*/
}
}
//
#ifdef UE_DEBUG_TRACE
#ifdef UE_DEBUG_TRACE
LOG_I
(
PHY
,
"[DLSCH] AbsSubframe %d.%d log2_maxh = %d [log2_maxh0 %d log2_maxh1 %d] (%d,%d)
\n
"
,
frame
%
1024
,
nr_tti_rx
,
pdsch_vars
[
eNB_id
]
->
log2_maxh
,
pdsch_vars
[
eNB_id
]
->
log2_maxh0
,
pdsch_vars
[
eNB_id
]
->
log2_maxh1
,
avg
[
0
],
avgs
);
//LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
//
#endif
#endif
//wait until pdcch is decoded
//proc->channel_level = 1;
...
...
@@ -583,7 +478,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
start_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#endif
// Now channel compensation
if
(
dlsch0_harq
->
mimo_mode
<
LARGE_CDD
)
{
if
(
dlsch0_harq
->
mimo_mode
<
NR_DUALSTREAM
)
{
nr_dlsch_channel_compensation
(
pdsch_vars
[
eNB_id
]
->
rxdataF_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_mag0
,
...
...
@@ -634,8 +529,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
}*/
}
else
if
((
dlsch0_harq
->
mimo_mode
==
LARGE_CDD
)
||
((
dlsch0_harq
->
mimo_mode
>=
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
dlsch0_harq
->
mimo_mode
<=
DUALSTREAM_PUSCH_PRECODING
))){
else
if
(
dlsch0_harq
->
mimo_mode
==
NR_DUALSTREAM
){
nr_dlsch_channel_compensation_core
(
pdsch_vars
[
eNB_id
]
->
rxdataF_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_mag0
,
...
...
@@ -697,9 +591,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#endif
if
(
frame_parms
->
nb_antennas_rx
>
1
)
{
if
((
dlsch0_harq
->
mimo_mode
==
LARGE_CDD
)
||
((
dlsch0_harq
->
mimo_mode
>=
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
dlsch0_harq
->
mimo_mode
<=
DUALSTREAM_PUSCH_PRECODING
))){
// TM3 or TM4
if
(
dlsch0_harq
->
mimo_mode
==
NR_DUALSTREAM
){
nr_dlsch_detection_mrc_core
(
pdsch_vars
[
eNB_id
]
->
rxdataF_comp0
,
NULL
,
pdsch_vars
[
eNB_id
]
->
dl_ch_rho_ext
[
harq_pid
][
round
],
...
...
@@ -718,33 +610,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
} */
}
}
#if 0
// printf("Combining");
if ((dlsch0_harq->mimo_mode == SISO) ||
((dlsch0_harq->mimo_mode >= UNIFORM_PRECODING11) &&
(dlsch0_harq->mimo_mode <= PUSCH_PRECODING0)) ||
(dlsch0_harq->mimo_mode == TM7)) {
/*
dlsch_siso(frame_parms,
pdsch_vars[eNB_id]->rxdataF_comp,
pdsch_vars[eNB_id_i]->rxdataF_comp,
symbol,
nb_rb);
*/
} else if (dlsch0_harq->mimo_mode == ALAMOUTI) {
dlsch_alamouti(frame_parms,
pdsch_vars[eNB_id]->rxdataF_comp0,
pdsch_vars[eNB_id]->dl_ch_mag0,
pdsch_vars[eNB_id]->dl_ch_magb0,
symbol,
nb_rb);
}
#endif
//printf("start compute LLR\n");
if
((
dlsch0_harq
->
mimo_mode
==
LARGE_CDD
)
||
((
dlsch0_harq
->
mimo_mode
>=
DUALSTREAM_UNIFORM_PRECODING1
)
&&
(
dlsch0_harq
->
mimo_mode
<=
DUALSTREAM_PUSCH_PRECODING
)))
{
if
(
dlsch0_harq
->
mimo_mode
==
NR_DUALSTREAM
)
{
rxdataF_comp_ptr
=
pdsch_vars
[
eNB_id
]
->
rxdataF_comp1
[
harq_pid
][
round
];
dl_ch_mag_ptr
=
pdsch_vars
[
eNB_id
]
->
dl_ch_mag1
[
harq_pid
][
round
];
}
...
...
@@ -1974,7 +1842,7 @@ void nr_dlsch_channel_level(int **dl_ch_estimates_ext,
#if defined(__x86_64__)||defined(__i386__)
short
rb
;
unsigned
char
aatx
,
aarx
,
nre
=
12
;
unsigned
char
aatx
,
aarx
;
__m128i
*
dl_ch128
,
avg128D
;
//nb_rb*nre = y * 2^x
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
View file @
a38ccc8c
...
...
@@ -822,11 +822,11 @@ void nr_dlsch_64qam_llr(NR_DL_FRAME_PARMS *frame_parms,
pllr_symbol
+=
llr_offset
;
#if defined(__x86_64__) || defined(__i386__)
ch_mag
=
(
__m128i
*
)
&
dl_ch_mag
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
ch_magb
=
(
__m128i
*
)
&
dl_ch_magb
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
ch_mag
=
(
__m128i
*
)
&
dl_ch_mag
[
0
][(
symbol
*
nb_rb
*
12
)];
ch_magb
=
(
__m128i
*
)
&
dl_ch_magb
[
0
][(
symbol
*
nb_rb
*
12
)];
#elif defined(__arm__)
ch_mag
=
(
int16x8_t
*
)
&
dl_ch_mag
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
ch_magb
=
(
int16x8_t
*
)
&
dl_ch_magb
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
ch_mag
=
(
int16x8_t
*
)
&
dl_ch_mag
[
0
][(
symbol
*
nb_rb
*
12
)];
ch_magb
=
(
int16x8_t
*
)
&
dl_ch_magb
[
0
][(
symbol
*
nb_rb
*
12
)];
#endif
// printf("nr_dlsch_64qam_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
View file @
a38ccc8c
...
...
@@ -273,7 +273,7 @@ typedef struct {
/// Redundancy-version of the current sub-frame
uint8_t
rvidx
;
/// MIMO mode for this DLSCH
MIMO_mode_t
mimo_mode
;
MIMO_
nr
mode_t
mimo_mode
;
/// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
int16_t
w
[
MAX_NUM_NR_DLSCH_SEGMENTS
][
3
*
8448
];
/// for abstraction soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
...
...
openair1/PHY/defs_common.h
View file @
a38ccc8c
...
...
@@ -705,6 +705,11 @@ typedef enum {
TM9_10
=
14
}
MIMO_mode_t
;
typedef
enum
{
NR_SISO
=
0
,
NR_DUALSTREAM
=
1
}
MIMO_nrmode_t
;
typedef
enum
{
/// MRT
...
...
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