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
329242c7
Commit
329242c7
authored
Apr 07, 2019
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'integration_nr_IA_receiver' into fix-frame-rx-and-memory
parents
d2082833
ff388661
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
900 additions
and
260 deletions
+900
-260
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+6
-3
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+827
-211
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
+18
-34
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+47
-12
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+2
-0
No files found.
openair1/PHY/INIT/nr_init_ue.c
View file @
329242c7
...
@@ -597,7 +597,8 @@ void phy_init_nr_ue__PDSCH( NR_UE_PDSCH* const pdsch, const NR_DL_FRAME_PARMS* c
...
@@ -597,7 +597,8 @@ void phy_init_nr_ue__PDSCH( NR_UE_PDSCH* const pdsch, const NR_DL_FRAME_PARMS* c
AssertFatal
(
pdsch
,
"pdsch==0"
);
AssertFatal
(
pdsch
,
"pdsch==0"
);
pdsch
->
pmi_ext
=
(
uint8_t
*
)
malloc16_clear
(
fp
->
N_RB_DL
);
pdsch
->
pmi_ext
=
(
uint8_t
*
)
malloc16_clear
(
fp
->
N_RB_DL
);
pdsch
->
llr
[
0
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
((
3
*
8
*
6144
)
+
12
))
*
sizeof
(
int16_t
)
);
pdsch
->
llr
[
0
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
6144
))
*
sizeof
(
int16_t
)
);
pdsch
->
layer_llr
[
0
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
6144
))
*
sizeof
(
int16_t
)
);
pdsch
->
llr128
=
(
int16_t
**
)
malloc16_clear
(
sizeof
(
int16_t
*
)
);
pdsch
->
llr128
=
(
int16_t
**
)
malloc16_clear
(
sizeof
(
int16_t
*
)
);
// FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV
// FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV
// FK, 11-3-2015: this is only as a temporary pointer, no memory is stored there
// FK, 11-3-2015: this is only as a temporary pointer, no memory is stored there
...
@@ -752,7 +753,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
...
@@ -752,7 +753,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr_shifts
=
(
uint8_t
*
)
malloc16_clear
(
7
*
2
*
fp
->
N_RB_DL
*
12
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr_shifts
=
(
uint8_t
*
)
malloc16_clear
(
7
*
2
*
fp
->
N_RB_DL
*
12
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr_shifts_p
=
(
*
pdsch_vars_th
)[
0
][
eNB_id
]
->
llr_shifts
;
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr_shifts_p
=
(
*
pdsch_vars_th
)[
0
][
eNB_id
]
->
llr_shifts
;
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
((
3
*
8
*
8448
)
+
12
))
*
sizeof
(
int16_t
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
8448
))
*
sizeof
(
int16_t
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
layer_llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
8448
))
*
sizeof
(
int16_t
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr128_2ndstream
=
(
int16_t
**
)
malloc16_clear
(
sizeof
(
int16_t
*
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr128_2ndstream
=
(
int16_t
**
)
malloc16_clear
(
sizeof
(
int16_t
*
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
rho
=
(
int32_t
**
)
malloc16_clear
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
rho
=
(
int32_t
**
)
malloc16_clear
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
}
}
...
@@ -876,7 +878,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
...
@@ -876,7 +878,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
//phy_init_lte_ue__PDSCH( (*pdsch_vars_th)[th_id][eNB_id], fp );
//phy_init_lte_ue__PDSCH( (*pdsch_vars_th)[th_id][eNB_id], fp );
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
((
3
*
8
*
8448
)
+
12
))
*
sizeof
(
int16_t
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
8448
))
*
sizeof
(
int16_t
)
);
(
*
pdsch_vars_th
)[
th_id
][
eNB_id
]
->
layer_llr
[
1
]
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
(
3
*
8
*
8448
))
*
sizeof
(
int16_t
)
);
}
}
}
else
{
//abstraction == 1
}
else
{
//abstraction == 1
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
329242c7
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
View file @
329242c7
...
@@ -1137,12 +1137,12 @@ int nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
...
@@ -1137,12 +1137,12 @@ int nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
short
**
llr16p
)
short
**
llr16p
)
{
{
int16_t
*
rxF
=
(
int16_t
*
)
&
rxdataF_comp
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rxF
=
(
int16_t
*
)
&
rxdataF_comp
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
rxF_i
=
(
int16_t
*
)
&
rxdataF_comp_i
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rxF_i
=
(
int16_t
*
)
&
rxdataF_comp_i
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
rho
=
(
int16_t
*
)
&
rho_i
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rho
=
(
int16_t
*
)
&
rho_i
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
llr16
;
int16_t
*
llr16
;
int
len
;
int
len
;
uint8_t
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
(
symbol
-
(
7
-
frame_parms
->
Ncp
))
:
symbol
;
//
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
if
(
first_symbol_flag
==
1
)
{
if
(
first_symbol_flag
==
1
)
{
llr16
=
(
int16_t
*
)
dlsch_llr
;
llr16
=
(
int16_t
*
)
dlsch_llr
;
...
@@ -1152,18 +1152,10 @@ int nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
...
@@ -1152,18 +1152,10 @@ int nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
AssertFatal
(
llr16
!=
NULL
,
"nr_dlsch_qpsk_qpsk_llr: llr is null, symbol %d
\n
"
,
symbol
);
AssertFatal
(
llr16
!=
NULL
,
"nr_dlsch_qpsk_qpsk_llr: llr is null, symbol %d
\n
"
,
symbol
);
if
((
symbol_mod
==
0
)
||
(
symbol_mod
==
(
4
-
frame_parms
->
Ncp
)))
{
if
(
symbol
==
2
)
//to update from config
// if symbol has pilots
len
=
nb_rb
*
6
;
if
(
frame_parms
->
nb_antenna_ports_eNB
!=
1
)
else
// in 2 antenna ports we have 8 REs per symbol per RB
len
=
nb_rb
*
12
;
len
=
(
nb_rb
*
8
)
-
(
2
*
pbch_pss_sss_adjust
/
3
);
else
// for 1 antenna port we have 10 REs per symbol per RB
len
=
(
nb_rb
*
10
)
-
(
5
*
pbch_pss_sss_adjust
/
6
);
}
else
{
// symbol has no pilots
len
=
(
nb_rb
*
12
)
-
pbch_pss_sss_adjust
;
}
// printf("nr_dlsch_qpsk_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
// printf("nr_dlsch_qpsk_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
// printf("qpsk_qpsk: len %d, llr16 %p\n",len,llr16);
// printf("qpsk_qpsk: len %d, llr16 %p\n",len,llr16);
...
@@ -2986,14 +2978,14 @@ int nr_dlsch_16qam_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
...
@@ -2986,14 +2978,14 @@ int nr_dlsch_16qam_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
int16_t
**
llr16p
)
int16_t
**
llr16p
)
{
{
int16_t
*
rxF
=
(
int16_t
*
)
&
rxdataF_comp
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rxF
=
(
int16_t
*
)
&
rxdataF_comp
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
rxF_i
=
(
int16_t
*
)
&
rxdataF_comp_i
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rxF_i
=
(
int16_t
*
)
&
rxdataF_comp_i
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
ch_mag
=
(
int16_t
*
)
&
dl_ch_mag
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
ch_mag
=
(
int16_t
*
)
&
dl_ch_mag
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
ch_mag_i
=
(
int16_t
*
)
&
dl_ch_mag_i
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
ch_mag_i
=
(
int16_t
*
)
&
dl_ch_mag_i
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
rho
=
(
int16_t
*
)
&
rho_i
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
int16_t
*
rho
=
(
int16_t
*
)
&
rho_i
[
0
][(
symbol
*
nb_rb
*
12
)];
int16_t
*
llr16
;
int16_t
*
llr16
;
int
len
;
int
len
;
uint8_t
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
(
symbol
-
(
7
-
frame_parms
->
Ncp
))
:
symbol
;
//
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
// first symbol has different structure due to more pilots
// first symbol has different structure due to more pilots
if
(
first_symbol_flag
==
1
)
{
if
(
first_symbol_flag
==
1
)
{
...
@@ -3005,18 +2997,10 @@ int nr_dlsch_16qam_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
...
@@ -3005,18 +2997,10 @@ int nr_dlsch_16qam_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
AssertFatal
(
llr16
!=
NULL
,
"nr_dlsch_16qam_16qam_llr: llr is null, symbol %d
\n
"
,
symbol
);
AssertFatal
(
llr16
!=
NULL
,
"nr_dlsch_16qam_16qam_llr: llr is null, symbol %d
\n
"
,
symbol
);
if
((
symbol_mod
==
0
)
||
(
symbol_mod
==
(
4
-
frame_parms
->
Ncp
)))
{
if
(
symbol
==
2
)
//to update from config
// if symbol has pilots
len
=
nb_rb
*
6
;
if
(
frame_parms
->
nb_antenna_ports_eNB
!=
1
)
else
// in 2 antenna ports we have 8 REs per symbol per RB
len
=
nb_rb
*
12
;
len
=
(
nb_rb
*
8
)
-
(
2
*
pbch_pss_sss_adjust
/
3
);
else
// for 1 antenna port we have 10 REs per symbol per RB
len
=
(
nb_rb
*
10
)
-
(
5
*
pbch_pss_sss_adjust
/
6
);
}
else
{
// symbol has no pilots
len
=
(
nb_rb
*
12
)
-
pbch_pss_sss_adjust
;
}
// printf("symbol %d: qam16_llr, len %d (llr16 %p)\n",symbol,len,llr16);
// printf("symbol %d: qam16_llr, len %d (llr16 %p)\n",symbol,len,llr16);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
329242c7
...
@@ -753,18 +753,20 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
...
@@ -753,18 +753,20 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
@param high_speed_flag
@param high_speed_flag
@param frame_parms Pointer to frame descriptor
@param frame_parms Pointer to frame descriptor
*/
*/
uint16_t
dlsch_extract_rbs_dual
(
int32_t
**
rxdataF
,
unsigned
short
nr_dlsch_extract_rbs_dual
(
int
**
rxdataF
,
int32_t
**
dl_ch_estimates
,
int
**
dl_ch_estimates
,
int32_t
**
rxdataF_ext
,
int
**
rxdataF_ext
,
int32_t
**
dl_ch_estimates_ext
,
int
**
dl_ch_estimates_ext
,
uint16_t
pmi
,
unsigned
short
pmi
,
uint8_t
*
pmi_ext
,
unsigned
char
*
pmi_ext
,
uint32_t
*
rb_alloc
,
unsigned
int
*
rb_alloc
,
uint8_t
symbol
,
unsigned
char
symbol
,
uint8_t
subframe
,
unsigned
short
start_rb
,
uint32_t
high_speed_flag
,
unsigned
short
nb_rb_pdsch
,
NR_DL_FRAME_PARMS
*
frame_parms
,
unsigned
char
nr_tti_rx
,
MIMO_mode_t
mimo_mode
);
uint32_t
high_speed_flag
,
NR_DL_FRAME_PARMS
*
frame_parms
,
MIMO_mode_t
mimo_mode
);
/** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF,
/** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF,
int32_t **dl_bf_ch_estimates,
int32_t **dl_bf_ch_estimates,
...
@@ -826,6 +828,19 @@ void nr_dlsch_channel_compensation(int32_t **rxdataF_ext,
...
@@ -826,6 +828,19 @@ void nr_dlsch_channel_compensation(int32_t **rxdataF_ext,
uint8_t
output_shift
,
uint8_t
output_shift
,
PHY_NR_MEASUREMENTS
*
phy_measurements
);
PHY_NR_MEASUREMENTS
*
phy_measurements
);
void
nr_dlsch_channel_compensation_core
(
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
int
**
dl_ch_mag
,
int
**
dl_ch_magb
,
int
**
rxdataF_comp
,
int
**
rho
,
unsigned
char
n_tx
,
unsigned
char
n_rx
,
unsigned
char
mod_order
,
unsigned
char
output_shift
,
int
length
,
int
start_point
);
void
nr_dlsch_deinterleaving
(
uint8_t
symbol
,
void
nr_dlsch_deinterleaving
(
uint8_t
symbol
,
uint16_t
L
,
uint16_t
L
,
uint16_t
*
llr
,
uint16_t
*
llr
,
...
@@ -881,6 +896,26 @@ void dlsch_channel_level_TM34_meas(int *ch00,
...
@@ -881,6 +896,26 @@ void dlsch_channel_level_TM34_meas(int *ch00,
int
*
avg_1
,
int
*
avg_1
,
unsigned
short
nb_rb
);
unsigned
short
nb_rb
);
void
nr_dlsch_channel_level_median
(
int
**
dl_ch_estimates_ext
,
int32_t
*
median
,
int
n_tx
,
int
n_rx
,
int
length
,
int
start_point
);
void
nr_dlsch_detection_mrc_core
(
int
**
rxdataF_comp
,
int
**
rxdataF_comp_i
,
int
**
rho
,
int
**
rho_i
,
int
**
dl_ch_mag
,
int
**
dl_ch_magb
,
int
**
dl_ch_mag_i
,
int
**
dl_ch_magb_i
,
unsigned
char
n_tx
,
unsigned
char
n_rx
,
int
length
,
int
start_point
);
void
det_HhH
(
int32_t
*
after_mf_00
,
void
det_HhH
(
int32_t
*
after_mf_00
,
int32_t
*
after_mf_01
,
int32_t
*
after_mf_01
,
int32_t
*
after_mf_10
,
int32_t
*
after_mf_10
,
...
...
openair1/PHY/defs_nr_UE.h
View file @
329242c7
...
@@ -379,6 +379,8 @@ typedef struct {
...
@@ -379,6 +379,8 @@ typedef struct {
/// - first index: ? [0..1] (hard coded)
/// - first index: ? [0..1] (hard coded)
/// - second index: ? [0..1179743] (hard coded)
/// - second index: ? [0..1179743] (hard coded)
int16_t
*
llr
[
2
];
int16_t
*
llr
[
2
];
/// Pointers to layer llr vectors (4 layers).
int16_t
*
layer_llr
[
4
];
/// \f$\log_2(\max|H_i|^2)\f$
/// \f$\log_2(\max|H_i|^2)\f$
int16_t
log2_maxh
;
int16_t
log2_maxh
;
/// \f$\log_2(\max|H_i|^2)\f$ //this is for TM3-4 layer1 channel compensation
/// \f$\log_2(\max|H_i|^2)\f$ //this is for TM3-4 layer1 channel compensation
...
...
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