Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
249f5d69
Commit
249f5d69
authored
Aug 24, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beamforming debugging after fronthaul testing
parent
82958025
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
37 additions
and
40 deletions
+37
-40
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+2
-2
openair1/PHY/MODULATION/beamforming.c
openair1/PHY/MODULATION/beamforming.c
+8
-7
openair1/PHY/MODULATION/modulation_eNB.h
openair1/PHY/MODULATION/modulation_eNB.h
+12
-10
openair1/PHY/defs_eNB.h
openair1/PHY/defs_eNB.h
+2
-4
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+11
-14
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+2
-3
No files found.
openair1/PHY/INIT/lte_init.c
View file @
249f5d69
...
@@ -781,13 +781,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -781,13 +781,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
common_vars
->
txdataF
=
(
int32_t
**
)
malloc16
(
NB_ANTENNA_PORTS_ENB
*
sizeof
(
int32_t
*
));
common_vars
->
txdataF
=
(
int32_t
**
)
malloc16
(
NB_ANTENNA_PORTS_ENB
*
sizeof
(
int32_t
*
));
common_vars
->
rxdataF
=
(
int32_t
**
)
malloc16
(
64
*
sizeof
(
int32_t
*
));
common_vars
->
rxdataF
=
(
int32_t
**
)
malloc16
(
64
*
sizeof
(
int32_t
*
));
LOG_
D
(
PHY
,
"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d
\n
"
,
NB_ANTENNA_PORTS_ENB
,
fp
->
nb_antenna_ports_eNB
);
LOG_
I
(
PHY
,
"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d
\n
"
,
NB_ANTENNA_PORTS_ENB
,
fp
->
nb_antenna_ports_eNB
);
for
(
i
=
0
;
i
<
NB_ANTENNA_PORTS_ENB
;
i
++
)
{
for
(
i
=
0
;
i
<
NB_ANTENNA_PORTS_ENB
;
i
++
)
{
if
(
i
<
fp
->
nb_antenna_ports_eNB
||
i
==
5
)
{
if
(
i
<
fp
->
nb_antenna_ports_eNB
||
i
==
5
)
{
common_vars
->
txdataF
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdataF
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
LOG_
D
(
PHY
,
"[INIT] common_vars->txdataF[%d] = %p (%lu bytes)
\n
"
,
LOG_
I
(
PHY
,
"[INIT] common_vars->txdataF[%d] = %p (%lu bytes)
\n
"
,
i
,
common_vars
->
txdataF
[
i
],
i
,
common_vars
->
txdataF
[
i
],
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
));
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
));
}
}
...
...
openair1/PHY/MODULATION/beamforming.c
View file @
249f5d69
...
@@ -56,24 +56,25 @@ int beam_precoding(int32_t **txdataF,
...
@@ -56,24 +56,25 @@ int beam_precoding(int32_t **txdataF,
int32_t
**
txdataF_BF
,
int32_t
**
txdataF_BF
,
int
subframe
,
int
subframe
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
***
beam_weights
,
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
]
,
int
symbol
,
int
symbol
,
int
aa
,
int
aa
,
int
p
)
int
p
,
int
l1_id
)
{
{
LOG_D
(
PHY
,
"Starting precoding for symbol %d, physical antenna %d, logical port %d
\n
"
,
symbol
,
aa
,
p
);
int
rb_offset_neg0
=
frame_parms
->
ofdm_symbol_size
-
(
6
*
frame_parms
->
N_RB_DL
);
int
rb_offset_neg0
=
frame_parms
->
ofdm_symbol_size
-
(
6
*
frame_parms
->
N_RB_DL
);
int
rb_offset_neg
=
(
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
)
+
rb_offset_neg0
;
int
rb_offset_neg
=
(
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
)
+
rb_offset_neg0
;
int
rb_offset_pos
=
(
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
);
int
rb_offset_pos
=
(
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
);
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
rb_offset_neg
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
rb_offset_neg
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
(
int16_t
*
)
&
beam_weights
[
p
][
aa
][
rb_offset_neg0
],
(
int16_t
*
)
&
beam_weights
[
l1_id
][
p
][
aa
][
rb_offset_neg0
],
(
int16_t
*
)
&
txdataF_BF
[
aa
][
rb_offset_neg0
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
(
int16_t
*
)
&
txdataF_BF
[
aa
][
rb_offset_neg0
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
0
,
0
,
6
*
frame_parms
->
N_RB_DL
,
6
*
frame_parms
->
N_RB_DL
,
15
);
15
);
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
rb_offset_pos
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
rb_offset_pos
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
(
int16_t
*
)
&
beam_weights
[
p
][
aa
][
0
],
(
int16_t
*
)
&
beam_weights
[
l1_id
][
p
][
aa
][
0
],
(
int16_t
*
)
&
txdataF_BF
[
aa
][(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
(
int16_t
*
)
&
txdataF_BF
[
aa
][(
symbol
*
frame_parms
->
ofdm_symbol_size
)],
0
,
0
,
7
*
frame_parms
->
N_RB_DL
,
// to allow for extra RE at the end, 12 useless multipy-adds (first one at DC and 11 at end)
7
*
frame_parms
->
N_RB_DL
,
// to allow for extra RE at the end, 12 useless multipy-adds (first one at DC and 11 at end)
...
@@ -85,7 +86,7 @@ int beam_precoding(int32_t **txdataF,
...
@@ -85,7 +86,7 @@ int beam_precoding(int32_t **txdataF,
int
beam_precoding_one_eNB
(
int32_t
**
txdataF
,
int
beam_precoding_one_eNB
(
int32_t
**
txdataF
,
int32_t
**
txdataF_BF
,
int32_t
**
txdataF_BF
,
int32_t
***
beam_weights
,
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
]
,
int
subframe
,
int
subframe
,
int
nb_antenna_ports
,
int
nb_antenna_ports
,
int
nb_tx
,
// total physical antenna
int
nb_tx
,
// total physical antenna
...
@@ -112,7 +113,7 @@ int beam_precoding_one_eNB(int32_t **txdataF,
...
@@ -112,7 +113,7 @@ int beam_precoding_one_eNB(int32_t **txdataF,
for
(
symbol
=
0
;
symbol
<
symbols_per_tti
;
symbol
++
){
for
(
symbol
=
0
;
symbol
<
symbols_per_tti
;
symbol
++
){
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
symbol
*
ofdm_symbol_size
+
re_offset
],
multadd_cpx_vector
((
int16_t
*
)
&
txdataF
[
p
][
symbol
*
ofdm_symbol_size
+
re_offset
],
(
int16_t
*
)
beam_weights
[
p
][
aa
],
(
int16_t
*
)
beam_weights
[
0
][
p
][
aa
],
(
int16_t
*
)
&
txdataF_BF
[
aa
][
symbol
*
ofdm_symbol_size
],
(
int16_t
*
)
&
txdataF_BF
[
aa
][
symbol
*
ofdm_symbol_size
],
0
,
0
,
ofdm_symbol_size
,
ofdm_symbol_size
,
...
...
openair1/PHY/MODULATION/modulation_eNB.h
View file @
249f5d69
...
@@ -46,15 +46,18 @@ after beamforming
...
@@ -46,15 +46,18 @@ after beamforming
antenna element and each carrier
antenna element and each carrier
@param slot Slot number
@param slot Slot number
@param symbol Symbol index on which to act
@param symbol Symbol index on which to act
@param aa physical antenna index*/
@param aa physical antenna index
@param p logical antenna index
@param l1_id L1 instance id*/
int
beam_precoding
(
int32_t
**
txdataF
,
int
beam_precoding
(
int32_t
**
txdataF
,
int32_t
**
txdataF_BF
,
int32_t
**
txdataF_BF
,
int
sub
m
frame
,
int
subframe
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
***
beam_weights
,
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
]
,
int
symbol
,
int
symbol
,
int
aa
,
int
aa
,
int
p
);
int
p
,
int
l1_id
);
/** \brief This function performs beamforming precoding for common
/** \brief This function performs beamforming precoding for common
* data for only one eNB, fdragon
* data for only one eNB, fdragon
...
@@ -69,12 +72,11 @@ antenna element and each carrier
...
@@ -69,12 +72,11 @@ antenna element and each carrier
@param aa physical antenna index*/
@param aa physical antenna index*/
int
beam_precoding_one_eNB
(
int32_t
**
txdataF
,
int
beam_precoding_one_eNB
(
int32_t
**
txdataF
,
int32_t
**
txdataF_BF
,
int32_t
**
txdataF_BF
,
int32_t
***
beam_weights
,
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
],
int
subframe
,
int
subframe
,
int
nb_antenna_ports
,
int
nb_antenna_ports
,
int
nb_tx
,
// total physical antenna
int
nb_tx
,
// total physical antenna
LTE_DL_FRAME_PARMS
*
frame_parms
LTE_DL_FRAME_PARMS
*
frame_parms
);
);
int
f_read
(
char
*
calibF_fname
,
int
nb_ant
,
int
nb_freq
,
int32_t
**
tdd_calib_coeffs
);
int
f_read
(
char
*
calibF_fname
,
int
nb_ant
,
int
nb_freq
,
int32_t
**
tdd_calib_coeffs
);
...
...
openair1/PHY/defs_eNB.h
View file @
249f5d69
...
@@ -579,10 +579,8 @@ typedef struct {
...
@@ -579,10 +579,8 @@ typedef struct {
/// - second index: ? [0..2*ofdm_symbol_size*frame_parms->symbols_per_tti[
/// - second index: ? [0..2*ofdm_symbol_size*frame_parms->symbols_per_tti[
int32_t
**
rxdataF
;
int32_t
**
rxdataF
;
/// \brief holds the transmit data in the frequency domain.
/// \brief holds the transmit data in the frequency domain.
/// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. //?
/// - first index: tx antenna [0..14[ where 14 is the total supported antenna ports.
/// - first index: eNB id [0..2] (hard coded)
/// - second index: sample [0..]
/// - second index: tx antenna [0..14[ where 14 is the total supported antenna ports.
/// - third index: sample [0..]
int32_t
**
txdataF
;
int32_t
**
txdataF
;
}
LTE_eNB_COMMON
;
}
LTE_eNB_COMMON
;
...
...
openair1/SCHED/ru_procedures.c
View file @
249f5d69
...
@@ -406,13 +406,10 @@ void feptx_ofdm(RU_t *ru) {
...
@@ -406,13 +406,10 @@ void feptx_ofdm(RU_t *ru) {
void
feptx_prec
(
RU_t
*
ru
)
{
void
feptx_prec
(
RU_t
*
ru
)
{
// Theoni's
int
l
,
i
,
aa
,
p
;
int
l
,
i
,
aa
,
rb
,
p
;
int
subframe
=
ru
->
proc
.
subframe_tx
;
int
subframe
=
ru
->
proc
.
subframe_tx
;
PHY_VARS_eNB
**
eNB_list
=
ru
->
eNB_list
,
*
eNB
;
PHY_VARS_eNB
**
eNB_list
=
ru
->
eNB_list
,
*
eNB
;
LTE_DL_FRAME_PARMS
*
fp
;
LTE_DL_FRAME_PARMS
*
fp
;
int32_t
***
bw
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
/* fdragon
/* fdragon
int l,i,aa;
int l,i,aa;
...
@@ -422,7 +419,6 @@ void feptx_prec(RU_t *ru) {
...
@@ -422,7 +419,6 @@ void feptx_prec(RU_t *ru) {
int subframe = ru->proc.subframe_tx;
int subframe = ru->proc.subframe_tx;
*/
*/
if
(
ru
->
idx
!=
0
)
return
;
if
(
ru
->
num_eNB
==
1
)
{
if
(
ru
->
num_eNB
==
1
)
{
...
@@ -430,6 +426,8 @@ void feptx_prec(RU_t *ru) {
...
@@ -430,6 +426,8 @@ void feptx_prec(RU_t *ru) {
fp
=
&
eNB
->
frame_parms
;
fp
=
&
eNB
->
frame_parms
;
LTE_eNB_PDCCH
*
pdcch_vars
=
&
eNB
->
pdcch_vars
[
subframe
&
1
];
LTE_eNB_PDCCH
*
pdcch_vars
=
&
eNB
->
pdcch_vars
[
subframe
&
1
];
if
(
subframe_select
(
fp
,
subframe
)
==
SF_UL
)
return
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
ru
->
idx
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
ru
->
idx
,
1
);
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
...
@@ -443,10 +441,7 @@ void feptx_prec(RU_t *ru) {
...
@@ -443,10 +441,7 @@ void feptx_prec(RU_t *ru) {
#else
#else
if
(
p
<
fp
->
nb_antenna_ports_eNB
)
{
if
(
p
<
fp
->
nb_antenna_ports_eNB
)
{
// pdcch region, copy entire signal from txdataF->txdataF_BF (bf_mask = 1)
// For the moment this does nothing different than below, except ignore antenna ports 5,7,8.
// else do beamforming for pdcch according to beam_weights
// to be updated for eMBMS (p=4)
// For the moment this does nothing different than below.
for
(
l
=
0
;
l
<
pdcch_vars
->
num_pdcch_symbols
;
l
++
)
for
(
l
=
0
;
l
<
pdcch_vars
->
num_pdcch_symbols
;
l
++
)
beam_precoding
(
eNB
->
common_vars
.
txdataF
,
beam_precoding
(
eNB
->
common_vars
.
txdataF
,
ru
->
common
.
txdataF_BF
,
ru
->
common
.
txdataF_BF
,
...
@@ -455,7 +450,8 @@ void feptx_prec(RU_t *ru) {
...
@@ -455,7 +450,8 @@ void feptx_prec(RU_t *ru) {
ru
->
beam_weights
,
ru
->
beam_weights
,
l
,
l
,
aa
,
aa
,
p
);
p
,
eNB
->
Mod_id
);
}
//if (p<fp->nb_antenna_ports_eNB)
}
//if (p<fp->nb_antenna_ports_eNB)
// PDSCH region
// PDSCH region
...
@@ -468,7 +464,8 @@ void feptx_prec(RU_t *ru) {
...
@@ -468,7 +464,8 @@ void feptx_prec(RU_t *ru) {
ru
->
beam_weights
,
ru
->
beam_weights
,
l
,
l
,
aa
,
aa
,
p
);
p
,
eNB
->
Mod_id
);
}
// for (l=pdcch_vars ....)
}
// for (l=pdcch_vars ....)
}
// if (p<fp->nb_antenna_ports_eNB) ...
}
// if (p<fp->nb_antenna_ports_eNB) ...
#endif //NO_PRECODING
#endif //NO_PRECODING
...
@@ -511,7 +508,6 @@ void feptx_prec(RU_t *ru) {
...
@@ -511,7 +508,6 @@ void feptx_prec(RU_t *ru) {
for
(
i
=
0
;
i
<
ru
->
num_eNB
;
i
++
)
{
for
(
i
=
0
;
i
<
ru
->
num_eNB
;
i
++
)
{
eNB
=
eNB_list
[
i
];
eNB
=
eNB_list
[
i
];
fp
=
&
eNB
->
frame_parms
;
fp
=
&
eNB
->
frame_parms
;
bw
=
ru
->
beam_weights
[
i
];
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
;
l
++
)
{
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
;
l
++
)
{
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
...
@@ -519,10 +515,11 @@ void feptx_prec(RU_t *ru) {
...
@@ -519,10 +515,11 @@ void feptx_prec(RU_t *ru) {
ru
->
common
.
txdataF_BF
,
ru
->
common
.
txdataF_BF
,
subframe
,
subframe
,
fp
,
fp
,
bw
,
ru
->
beam_weights
,
subframe
<<
1
,
subframe
<<
1
,
l
,
l
,
aa
);
aa
,
eNB
->
Mod_id
);
}
}
}
}
}
}
...
...
targets/RT/USER/lte-ru.c
View file @
249f5d69
...
@@ -1194,7 +1194,6 @@ void wakeup_eNBs(RU_t *ru) {
...
@@ -1194,7 +1194,6 @@ void wakeup_eNBs(RU_t *ru) {
}
}
else
{
else
{
LOG_I
(
PHY
,
"ru->num_eNB:%d
\n
"
,
ru
->
num_eNB
);
for
(
i
=
0
;
i
<
ru
->
num_eNB
;
i
++
)
for
(
i
=
0
;
i
<
ru
->
num_eNB
;
i
++
)
...
@@ -1474,10 +1473,10 @@ static void* ru_thread_tx( void* param ) {
...
@@ -1474,10 +1473,10 @@ static void* ru_thread_tx( void* param ) {
if
(
oai_exit
)
break
;
if
(
oai_exit
)
break
;
LOG_I
(
PHY
,
"ru_thread_tx: Waiting for TX processing
\n
"
);
LOG_D
(
PHY
,
"ru_thread_tx: Waiting for TX processing
\n
"
);
// wait until eNBs are finished subframe RX n and TX n+4
// wait until eNBs are finished subframe RX n and TX n+4
wait_on_condition
(
&
proc
->
mutex_eNBs
,
&
proc
->
cond_eNBs
,
&
proc
->
instance_cnt_eNBs
,
"ru_thread_tx"
);
wait_on_condition
(
&
proc
->
mutex_eNBs
,
&
proc
->
cond_eNBs
,
&
proc
->
instance_cnt_eNBs
,
"ru_thread_tx"
);
LOG_
I
(
PHY
,
"ru_thread_tx: Woken from condition
\n
"
);
LOG_
D
(
PHY
,
"ru_thread_tx: Woken from condition
\n
"
);
if
(
oai_exit
)
break
;
if
(
oai_exit
)
break
;
// do TX front-end processing if needed (precoding and/or IDFTs)
// do TX front-end processing if needed (precoding and/or IDFTs)
...
...
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