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
wangjie
OpenXG-RAN
Commits
b962cc94
Commit
b962cc94
authored
Jan 23, 2021
by
Khodr Saaifan
Committed by
Thomas Schlichter
Feb 01, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add rb extract to support multiple tx layers feature for MIMO mode
parent
4b541b44
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
152 additions
and
209 deletions
+152
-209
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+3
-3
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+120
-168
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+26
-35
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
+2
-2
No files found.
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
b962cc94
...
...
@@ -672,7 +672,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
int
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
;
if
(
ue
->
high_speed_flag
==
0
)
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
else
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
...
...
@@ -694,7 +694,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
if
(
config_type
==
pdsch_dmrs_type1
){
nushift
=
(
p
>>
1
)
&
1
;
ue
->
frame_parms
.
nushift
=
nushift
;
if
(
p
<
4
)
ue
->
frame_parms
.
nushift
=
nushift
;
switch
(
delta
)
{
case
0
:
//port 0,1
...
...
@@ -734,7 +734,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
}
}
else
{
//pdsch_dmrs_type2
nushift
=
delta
;
ue
->
frame_parms
.
nushift
=
nushift
;
if
(
p
<
6
)
ue
->
frame_parms
.
nushift
=
nushift
;
switch
(
delta
)
{
case
0
:
//port 0,1
fl
=
filt8_l2
;
//left interpolation Filter should be fml
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
b962cc94
...
...
@@ -332,81 +332,35 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
pilots
=
((
1
<<
symbol
)
&
dlsch0_harq
->
dlDmrsSymbPos
)
>
0
?
1
:
0
;
if
(
frame_parms
->
nb_antenna_ports_gNB
>
1
&&
beamforming_mode
==
0
)
{
#ifdef DEBUG_DLSCH_MOD
LOG_I
(
PHY
,
"dlsch: using pmi %x (%p)
\n
"
,
pmi2hex_2Ar1
(
dlsch0_harq
->
pmi_alloc
),
dlsch
[
0
]);
#endif
if
(
beamforming_mode
==
0
)
{
//No beamforming
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
#endif
nb_rb
=
nr_dlsch_extract_rbs_dual
(
common_vars
->
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
,
if
(
dlsch0_harq
->
Nl
>
1
)
//More than or equal 2 layers
nb_rb
=
nr_dlsch_extract_rbs_multiple
(
common_vars
->
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates
,
pdsch_vars
[
eNB_id
]
->
rxdataF_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
dlsch0_harq
->
pmi_alloc
,
pdsch_vars
[
eNB_id
]
->
pmi_ext
,
symbol
,
pilots
,
config_type
,
start_rb
,
nb_rb_pdsch
,
nr_slot_rx
,
ue
->
high_speed_flag
,
dlsch0_harq
->
Nl
,
frame_parms
,
dlsch0_harq
->
mimo_mode
);
#ifdef DEBUG_DLSCH_MOD
printf
(
"dlsch: using pmi %lx, pmi_ext "
,
pmi2hex_2Ar1
(
dlsch0_harq
->
pmi_alloc
));
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
printf
(
"%d"
,
pdsch_vars
[
eNB_id
]
->
pmi_ext
[
rb
]);
printf
(
"
\n
"
);
#endif
dlsch0_harq
->
dlDmrsSymbPos
);
if
(
rx_type
>=
rx_IC_single_stream
)
{
if
(
eNB_id_i
<
ue
->
n_connected_eNB
)
// we are in TM5
nb_rb
=
nr_dlsch_extract_rbs_dual
(
common_vars
->
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates
,
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
,
symbol
,
pilots
,
start_rb
,
nb_rb_pdsch
,
nr_slot_rx
,
ue
->
high_speed_flag
,
frame_parms
,
dlsch0_harq
->
mimo_mode
);
else
nb_rb
=
nr_dlsch_extract_rbs_dual
(
common_vars
->
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates
,
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
,
symbol
,
pilots
,
start_rb
,
nb_rb_pdsch
,
nr_slot_rx
,
ue
->
high_speed_flag
,
frame_parms
,
dlsch0_harq
->
mimo_mode
);
}
}
else
if
(
beamforming_mode
==
0
)
{
//else if nb_antennas_ports_gNB==1 && beamforming_mode == 0
//printf("start nr dlsch extract nr_slot_rx %d thread id %d \n", nr_slot_rx, proc->thread_id);
else
// one layer
nb_rb
=
nr_dlsch_extract_rbs_single
(
common_vars
->
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates
,
pdsch_vars
[
eNB_id
]
->
rxdataF_ext
,
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
dlsch0_harq
->
pmi_alloc
,
pdsch_vars
[
eNB_id
]
->
pmi_ext
,
symbol
,
pilots
,
config_type
,
start_rb
+
dlsch0_harq
->
BWPStart
,
nb_rb_pdsch
,
nr_slot_rx
,
ue
->
high_speed_flag
,
frame_parms
,
dlsch0_harq
->
dlDmrsSymbPos
);
...
...
@@ -437,7 +391,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
#endif
n_tx
=
frame_parms
->
nb_antenna_ports_gNB
;
n_tx
=
dlsch0_harq
->
Nl
;
n_rx
=
frame_parms
->
nb_antennas_rx
;
nr_dlsch_scale_channel
(
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
...
...
@@ -2098,22 +2052,17 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
int
**
dl_ch_estimates
,
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
unsigned
short
pmi
,
unsigned
char
*
pmi_ext
,
unsigned
char
symbol
,
uint8_t
pilots
,
uint8_t
config_type
,
unsigned
short
start_rb
,
unsigned
short
nb_rb_pdsch
,
unsigned
char
nr_slot_rx
,
uint32_t
high_speed_flag
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
dlDmrsSymbPos
)
{
unsigned
short
k
,
rb
;
unsigned
char
i
,
aarx
;
//,nsymb,sss_symb,pss_symb=0,l;
unsigned
char
i
,
aarx
;
int
*
dl_ch0
,
*
dl_ch0_ext
,
*
rxF
,
*
rxF_ext
;
int8_t
validDmrsEst
=
0
;
//store last DMRS Symbol index
...
...
@@ -2153,6 +2102,7 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
}
else
{
//the symbol contains DMRS
j
=
0
;
if
(
config_type
==
pdsch_dmrs_type1
){
if
(
frame_parms
->
nushift
==
0
)
{
//data is multiplexed
for
(
i
=
(
1
-
frame_parms
->
nushift
);
i
<
12
;
i
+=
2
)
{
rxF_ext
[
j
]
=
rxF
[
i
];
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
...
...
@@ -2160,7 +2110,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
}
dl_ch0_ext
+=
6
;
rxF_ext
+=
6
;
}
else
{
}
}
else
{
//pdsch_dmrs_type2
for
(
i
=
(
2
+
frame_parms
->
nushift
);
i
<
6
;
i
++
)
{
rxF_ext
[
j
]
=
rxF
[
i
];
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
...
...
@@ -2171,8 +2122,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
j
++
;
}
dl_ch0_ext
+=
8
;
rxF_ext
+=
8
;
dl_ch0_ext
+=
j
;
rxF_ext
+=
j
;
}
}
...
...
@@ -2186,101 +2137,102 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
}
}
return
(
nb_rb_pdsch
/
frame_parms
->
nb_antennas_rx
);
return
(
nb_rb_pdsch
);
}
unsigned
short
nr_dlsch_extract_rbs_
dual
(
int
**
rxdataF
,
unsigned
short
nr_dlsch_extract_rbs_
multiple
(
int
**
rxdataF
,
int
**
dl_ch_estimates
,
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
unsigned
short
pmi
,
unsigned
char
*
pmi_ext
,
unsigned
char
symbol
,
uint8_t
pilots
,
uint8_t
config_type
,
unsigned
short
start_rb
,
unsigned
short
nb_rb_pdsch
,
unsigned
char
nr_slot_rx
,
uint32_t
high_speed_flag
,
uint8_t
Nl
,
NR_DL_FRAME_PARMS
*
frame_parms
,
MIMO_mode_t
mimo_mode
)
{
uint16_t
dlDmrsSymbPos
)
{
int
prb
,
nb_rb
=
0
;
unsigned
short
k
;
int
i
,
j
,
aarx
;
int
32_t
*
dl_ch0
=
NULL
,
*
dl_ch0_ext
=
NULL
,
*
dl_ch1
=
NULL
,
*
dl_ch1_ext
=
NULL
,
*
rxF
=
NULL
,
*
rxF_ext
=
NULL
;
unsigned
short
k
,
rb
;
unsigned
char
j
,
i
,
aarx
,
aatx
;
int
*
dl_ch0
,
*
dl_ch0_ext
,
*
rxF
,
*
rxF_ext
;
int
8_t
validDmrsEst
=
0
;
//store last DMRS Symbol index
k
=
frame_parms
->
first_carrier_offset
+
516
;
//0
if
(
config_type
==
pdsch_dmrs_type1
)
AssertFatal
(
frame_parms
->
nushift
==
0
||
frame_parms
->
nushift
==
1
,
"nushift %d is illegal
\n
"
,
frame_parms
->
nushift
);
else
AssertFatal
(
frame_parms
->
nushift
==
0
||
frame_parms
->
nushift
==
2
||
frame_parms
->
nushift
==
4
,
"nushift %d is illegal
\n
"
,
frame_parms
->
nushift
);
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
validDmrsEst
=
get_valid_dmrs_idx_for_channel_est
(
dlDmrsSymbPos
,
symbol
);
if
(
high_speed_flag
==
1
)
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
symbol
*
(
frame_parms
->
ofdm_symbol_size
)];
dl_ch1
=
&
dl_ch_estimates
[
2
+
aarx
][
symbol
*
(
frame_parms
->
ofdm_symbol_size
)];
}
else
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
0
];
dl_ch1
=
&
dl_ch_estimates
[
2
+
aarx
][
0
];
}
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
//pmi_loc = pmi_ext;
k
=
frame_parms
->
first_carrier_offset
+
NR_NB_SC_PER_RB
*
start_rb
;
if
(
k
>
frame_parms
->
ofdm_symbol_size
)
k
=
k
-
frame_parms
->
ofdm_symbol_size
;
// pointers to extracted RX signals and channel estimates
rxF_ext
=
&
rxdataF_ext
[
aarx
][
symbol
*
(
nb_rb_pdsch
*
12
)];
dl_ch0_ext
=
&
dl_ch_estimates_ext
[
aarx
][
symbol
*
(
nb_rb_pdsch
*
12
)];
dl_ch1_ext
=
&
dl_ch_estimates_ext
[
2
+
aarx
][
symbol
*
(
nb_rb_pdsch
*
12
)];
for
(
prb
=
0
;
prb
<
frame_parms
->
N_RB_DL
;
prb
++
)
{
//skip_half=0;
if
((
frame_parms
->
N_RB_DL
&
1
)
==
0
)
{
// even number of RBs
// For second half of RBs skip DC carrier
if
(
k
>=
frame_parms
->
ofdm_symbol_size
)
{
rxF
=
&
rxdataF
[
aarx
][(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
k
=
k
-
(
frame_parms
->
ofdm_symbol_size
);
}
/*
if (mimo_mode <= PUSCH_PRECODING1)
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
else
*pmi_loc=(pmi>>prb)&1;*/
rxF
=
&
rxdataF
[
aarx
][(
k
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
// *pmi_loc = get_pmi(frame_parms->N_RB_DL,mimo_mode,pmi,prb);
// pmi_loc++;
for
(
aatx
=
0
;
aatx
<
Nl
;
aatx
++
)
{
dl_ch0
=
&
dl_ch_estimates
[(
aatx
*
frame_parms
->
nb_antennas_rx
)
+
aarx
][(
validDmrsEst
*
(
frame_parms
->
ofdm_symbol_size
))];
dl_ch0_ext
=
&
dl_ch_estimates_ext
[(
aatx
*
frame_parms
->
nb_antennas_rx
)
+
aarx
][
symbol
*
(
nb_rb_pdsch
*
NR_NB_SC_PER_RB
)];
if
(
pilots
==
0
)
{
for
(
rb
=
0
;
rb
<
nb_rb_pdsch
;
rb
++
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
memcpy
(
dl_ch1_ext
,
dl_ch1
,
12
*
sizeof
(
int
));
memcpy
(
rxF_ext
,
rxF
,
12
*
sizeof
(
int
));
dl_ch0_ext
+=
12
;
dl_ch1_ext
+=
12
;
rxF_ext
+=
12
;
}
else
{
// pilots==1
if
(
pilots
==
0
)
{
//data symbol only
if
(
aatx
==
0
)
{
//Extract Rx signal only
memcpy
((
void
*
)
rxF_ext
,(
void
*
)
rxF
,
12
*
sizeof
(
*
rxF_ext
));
rxF_ext
+=
12
;
}
memcpy
((
void
*
)
dl_ch0_ext
,(
void
*
)
dl_ch0
,
12
*
sizeof
(
*
dl_ch0_ext
));
//Extract Channel Estimate
dl_ch0_ext
+=
12
;
}
else
{
//the symbol contains DMRS
j
=
0
;
for
(
i
=
0
;
i
<
12
;
i
++
)
{
if
((
i
&
1
)
!=
frame_parms
->
nushift
)
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]))
;
if
(
config_type
==
pdsch_dmrs_type1
)
{
if
(
frame_parms
->
nushift
==
0
)
{
//data is multiplexed
for
(
i
=
(
1
-
frame_parms
->
nushift
);
i
<
12
;
i
+=
2
)
{
if
(
aatx
==
0
)
rxF_ext
[
j
]
=
rxF
[
i
]
;
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
[
i
];
}
j
++
;
}
dl_ch0_ext
+=
6
;
dl_ch1_ext
+=
6
;
rxF_ext
+=
6
;
}
// pilots==1
if
(
aatx
==
0
)
rxF_ext
+=
6
;
}
}
else
{
//pdsch_dmrs_type2
for
(
i
=
(
2
+
frame_parms
->
nushift
);
i
<
6
;
i
++
)
{
if
(
aatx
==
0
)
rxF_ext
[
j
]
=
rxF
[
i
];
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
j
++
;
}
for
(
i
=
(
8
+
frame_parms
->
nushift
);
i
<
12
;
i
++
)
{
if
(
aatx
==
0
)
rxF_ext
[
j
]
=
rxF
[
i
];
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
j
++
;
}
dl_ch0_ext
+=
j
;
if
(
aatx
==
0
)
rxF_ext
+=
j
;
}
}
dl_ch0
+=
12
;
dl_ch1
+=
12
;
if
(
aatx
==
0
)
{
rxF
+=
12
;
k
+=
12
;
if
(
k
>=
frame_parms
->
ofdm_symbol_size
)
{
k
=
k
-
(
frame_parms
->
ofdm_symbol_size
);
rxF
=
&
rxdataF
[
aarx
][
k
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
}
}
// for prb
}
// for aarx
return
(
nb_rb
/
frame_parms
->
nb_antennas_rx
);
}
}
//rb
}
//aatx
}
//aarx
return
(
nb_rb_pdsch
);
}
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
b962cc94
...
...
@@ -686,11 +686,8 @@ void dlsch_detection_mrc_TM34(NR_DL_FRAME_PARMS *frame_parms,
int32_t **dl_ch_estimates,
int32_t **rxdataF_ext,
int32_t **dl_ch_estimates_ext,
uint16_t pmi,
uint8_t *pmi_ext,
uint32_t *rb_alloc,
uint8_t symbol,
uint8_t nr_slot_rx,
NR_DL_FRAME_PARMS *frame_parms)
\brief This function extracts the received resource blocks, both channel estimates and data symbols,
for the current allocation and for single antenna eNB transmission.
...
...
@@ -698,11 +695,8 @@ void dlsch_detection_mrc_TM34(NR_DL_FRAME_PARMS *frame_parms,
@param dl_ch_estimates Channel estimates of current slot
@param rxdataF_ext FFT output for RBs in this allocation
@param dl_ch_estimates_ext Channel estimates for RBs in this allocation
@param pmi subband Precoding matrix indicator
@param pmi_ext Extracted PMI for chosen RBs
@param rb_alloc RB allocation vector
@param symbol Symbol to extract
@param nr_slot_rx Slot number
@param high_speed_flag
@param frame_parms Pointer to frame descriptor
*/
...
...
@@ -710,55 +704,52 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
int
**
dl_ch_estimates
,
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
unsigned
short
pmi
,
unsigned
char
*
pmi_ext
,
unsigned
char
symbol
,
uint8_t
pilots
,
uint8_t
config_type
,
unsigned
short
start_rb
,
unsigned
short
nb_pdsch_rb
,
unsigned
char
nr_slot_rx
,
unsigned
short
nb_rb_pdsch
,
uint32_t
high_speed_flag
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
dlDmrsSymbPos
);
/** \fn dlsch_extract_rbs_
dual
(int32_t **rxdataF,
/** \fn dlsch_extract_rbs_
multiple
(int32_t **rxdataF,
int32_t **dl_ch_estimates,
int32_t **rxdataF_ext,
int32_t **dl_ch_estimates_ext,
uint16_t pmi,
uint8_t *pmi_ext,
uint32_t *rb_alloc,
uint8_t symbol,
NR_DL_FRAME_PARMS *frame_parms)
unsigned char symbol
uint8_t pilots,
uint8_t config_type,
unsigned short start_rb,
unsigned short nb_rb_pdsch,
uint32_t high_speed_flag,
uint8_t Nl,
NR_DL_FRAME_PARMS *frame_parms,
uint16_t dlDmrsSymbPos)
\brief This function extracts the received resource blocks, both channel estimates and data symbols,
for the current allocation and for
dual antenna e
NB transmission.
for the current allocation and for
multiple layer antenna g
NB transmission.
@param rxdataF Raw FFT output of received signal
@param dl_ch_estimates Channel estimates of current slot
@param rxdataF_ext FFT output for RBs in this allocation
@param dl_ch_estimates_ext Channel estimates for RBs in this allocation
@param pmi subband Precoding matrix indicator
@param pmi_ext Extracted PMI for chosen RBs
@param rb_alloc RB allocation vector
@param Nl nb of antenna layers
@param symbol Symbol to extract
@param nr_slot_rx Slot index
@param high_speed_flag
@param frame_parms Pointer to frame descriptor
*/
unsigned
short
nr_dlsch_extract_rbs_
dual
(
int
**
rxdataF
,
unsigned
short
nr_dlsch_extract_rbs_
multiple
(
int
**
rxdataF
,
int
**
dl_ch_estimates
,
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
unsigned
short
pmi
,
unsigned
char
*
pmi_ext
,
unsigned
char
symbol
,
uint8_t
pilots
,
uint8_t
config_type
,
unsigned
short
start_rb
,
unsigned
short
nb_rb_pdsch
,
unsigned
char
nr_slot_rx
,
uint32_t
high_speed_flag
,
uint8_t
Nl
,
NR_DL_FRAME_PARMS
*
frame_parms
,
MIMO_mode_t
mimo_mode
);
uint16_t
dlDmrsSymbPos
);
/** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF,
int32_t **dl_bf_ch_estimates,
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
b962cc94
...
...
@@ -741,7 +741,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
for
(
m
=
s0
;
m
<
(
s0
+
s1
);
m
++
)
{
if
(((
1
<<
m
)
&
dlsch0
->
harq_processes
[
harq_pid
]
->
dlDmrsSymbPos
)
>
0
)
{
for
(
uint8_t
aatx
=
0
;
aatx
<
1
;
aatx
++
)
{
//for MIMO Config: it shall loop over no_layers
for
(
uint8_t
aatx
=
0
;
aatx
<
dlsch0
->
harq_processes
[
harq_pid
]
->
Nl
;
aatx
++
)
{
//for MIMO Config: it shall loop over no_layers
nr_pdsch_channel_estimation
(
ue
,
proc
,
0
/*eNB_id*/
,
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
View file @
b962cc94
...
...
@@ -23,7 +23,7 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
2
;
pdsch_AntennaPorts
=
1
;
servingCellConfigCommon
= (
{
...
...
@@ -240,7 +240,7 @@ L1s = (
RUs
= (
{
local_rf
=
"yes"
nb_tx
=
2
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
...
...
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