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
wangwenhui
OpenXG-RAN
Commits
9ff4dabc
Commit
9ff4dabc
authored
Jun 22, 2018
by
lfarizav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Enable the frequency analysis for dlsim
parent
7d2d816f
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
244 additions
and
62 deletions
+244
-62
openair1/PHY/TOOLS/defs.h
openair1/PHY/TOOLS/defs.h
+1
-0
openair1/PHY/TOOLS/file_output.c
openair1/PHY/TOOLS/file_output.c
+20
-0
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+196
-34
targets/SIMU/USER/channel_sim.c
targets/SIMU/USER/channel_sim.c
+27
-28
No files found.
openair1/PHY/TOOLS/defs.h
View file @
9ff4dabc
...
...
@@ -297,6 +297,7 @@ void bit8_rxdemux(int32_t length,int32_t offset);
@param format data format (0 = real 16-bit, 1 = complex 16-bit,2 real 32-bit, 3 complex 32-bit,4 = real 8-bit, 5 = complex 8-bit)
*/
int32_t
write_output
(
const
char
*
fname
,
const
char
*
vname
,
void
*
data
,
int
length
,
int
dec
,
char
format
);
int32_t
write_output_chFf
(
const
char
*
fname
,
const
char
*
vname
,
float
*
data1
,
float
*
data2
,
int
length
,
int
dec
,
char
format
);
#endif
void
Zero_Buffer
(
void
*
,
uint32_t
);
...
...
openair1/PHY/TOOLS/file_output.c
View file @
9ff4dabc
...
...
@@ -190,4 +190,24 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d
return
0
;
}
int
write_output_chFf
(
const
char
*
fname
,
const
char
*
vname
,
float
*
data1
,
float
*
data2
,
int
length
,
int
dec
)
{
FILE
*
fp
=
NULL
;
int
i
;
printf
(
"Writing %d to %s
\n
"
,
length
,
fname
);
if
(
fp
==
NULL
)
{
printf
(
"[OPENAIR][FILE OUTPUT] Cannot open file %s
\n
"
,
fname
);
return
(
-
1
);
}
for
(
i
=
0
;
i
<
length
;
i
++
)
{
fprintf
(
fp
,
"%g + j*(%g)
\n
"
,
data1
[
i
],
data2
[
i
]);
}
return
0
;
}
#endif // USER_MODE
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
9ff4dabc
...
...
@@ -251,6 +251,135 @@ void DL_channel(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_flag,dou
}
}
void
DL_channel_freq
(
PHY_VARS_eNB
*
eNB
,
PHY_VARS_UE
*
UE
,
int
subframe
,
int
awgn_flag
,
double
SNR
,
int
tx_lev
,
int
hold_channel
,
int
abstx
,
int
num_rounds
,
int
trials
,
int
round
,
channel_desc_t
*
eNB2UE
[
4
],
float
*
s_re_f
[
2
],
float
*
s_im_f
[
2
],
float
*
r_re_f
[
2
],
float
*
r_im_f
[
2
],
FILE
*
csv_fd
)
{
int
i
,
u
;
int
aa
,
aarx
,
aatx
;
double
channelx
,
channely
;
double
sigma2_dB
,
sigma2
;
double
iqim
=
0
.
0
;
// printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,eNB->frame_parms.nb_antennas_tx,awgn_flag);
for
(
i
=
0
;
i
<
2
*
UE
->
frame_parms
.
samples_per_tti
;
i
++
)
{
for
(
aa
=
0
;
aa
<
eNB
->
frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
awgn_flag
==
0
)
{
s_re_f
[
aa
][
i
]
=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)]);
s_im_f
[
aa
][
i
]
=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)
+
1
]);
}
else
{
for
(
aarx
=
0
;
aarx
<
UE
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
if
(
aa
==
0
)
{
r_re_f
[
aarx
][
i
]
=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)]);
r_im_f
[
aarx
][
i
]
=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)
+
1
]);
}
else
{
r_re_f
[
aarx
][
i
]
+=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)]);
r_im_f
[
aarx
][
i
]
+=
((
double
)(((
short
*
)
eNB
->
common_vars
.
txdataF
[
0
][
aa
]))[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
(
i
<<
1
)
+
1
]);
}
}
}
}
}
// Multipath channel
if
(
awgn_flag
==
0
)
{
/*multipath_channel(eNB2UE[round],s_re,s_im,r_re,r_im,
2*UE->frame_parms.samples_per_tti,hold_channel);*/
multipath_channel_freq_AVX_float
(
eNB2UE
[
round
],
s_re_f
,
s_im_f
,
r_re_f
,
r_im_f
,
2
*
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
,
hold_channel
,
0
,
0
,
0
,
subframe
&
0x1
);
// printf("amc: ****************** eNB2UE[%d]->n_rx = %d,dd %d\n",round,eNB2UE[round]->nb_rx,eNB2UE[round]->channel_offset);
if
(
abstx
==
1
&&
num_rounds
>
1
)
if
(
round
==
0
&&
hold_channel
==
0
)
{
random_channel_freq
(
eNB2UE
[
1
],
0
);
random_channel_freq
(
eNB2UE
[
2
],
0
);
random_channel_freq
(
eNB2UE
[
3
],
0
);
}
if
(
UE
->
perfect_ce
==
1
)
{
// fill in perfect channel estimates
freq_channel_AVX_float
(
eNB2UE
[
round
],
UE
->
frame_parms
.
N_RB_DL
,
12
*
UE
->
frame_parms
.
N_RB_DL
+
1
);
/*
write_output("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8);
write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8);
*/
}
}
if
(
abstx
)
{
if
(
trials
==
0
&&
round
==
0
)
{
// calculate freq domain representation to compute SINR
freq_channel
(
eNB2UE
[
0
],
eNB
->
frame_parms
.
N_RB_DL
,
2
*
eNB
->
frame_parms
.
N_RB_DL
+
1
);
// snr=pow(10.0,.1*SNR);
fprintf
(
csv_fd
,
"%f,"
,
SNR
);
for
(
u
=
0
;
u
<
2
*
eNB
->
frame_parms
.
N_RB_DL
;
u
++
)
{
for
(
aarx
=
0
;
aarx
<
eNB2UE
[
0
]
->
nb_rx
;
aarx
++
)
{
for
(
aatx
=
0
;
aatx
<
eNB2UE
[
0
]
->
nb_tx
;
aatx
++
)
{
channelx
=
eNB2UE
[
0
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
0
]
->
nb_rx
)][
u
].
x
;
channely
=
eNB2UE
[
0
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
0
]
->
nb_rx
)][
u
].
y
;
fprintf
(
csv_fd
,
"%e+i*(%e),"
,
channelx
,
channely
);
}
}
}
if
(
num_rounds
>
1
)
{
freq_channel
(
eNB2UE
[
1
],
eNB
->
frame_parms
.
N_RB_DL
,
2
*
eNB
->
frame_parms
.
N_RB_DL
+
1
);
for
(
u
=
0
;
u
<
2
*
eNB
->
frame_parms
.
N_RB_DL
;
u
++
)
{
for
(
aarx
=
0
;
aarx
<
eNB2UE
[
1
]
->
nb_rx
;
aarx
++
)
{
for
(
aatx
=
0
;
aatx
<
eNB2UE
[
1
]
->
nb_tx
;
aatx
++
)
{
channelx
=
eNB2UE
[
1
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
1
]
->
nb_rx
)][
u
].
x
;
channely
=
eNB2UE
[
1
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
1
]
->
nb_rx
)][
u
].
y
;
fprintf
(
csv_fd
,
"%e+i*(%e),"
,
channelx
,
channely
);
}
}
}
freq_channel
(
eNB2UE
[
2
],
eNB
->
frame_parms
.
N_RB_DL
,
2
*
eNB
->
frame_parms
.
N_RB_DL
+
1
);
for
(
u
=
0
;
u
<
2
*
eNB
->
frame_parms
.
N_RB_DL
;
u
++
)
{
for
(
aarx
=
0
;
aarx
<
eNB2UE
[
2
]
->
nb_rx
;
aarx
++
)
{
for
(
aatx
=
0
;
aatx
<
eNB2UE
[
2
]
->
nb_tx
;
aatx
++
)
{
channelx
=
eNB2UE
[
2
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
2
]
->
nb_rx
)][
u
].
x
;
channely
=
eNB2UE
[
2
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
2
]
->
nb_rx
)][
u
].
y
;
fprintf
(
csv_fd
,
"%e+i*(%e),"
,
channelx
,
channely
);
}
}
}
freq_channel
(
eNB2UE
[
3
],
eNB
->
frame_parms
.
N_RB_DL
,
2
*
eNB
->
frame_parms
.
N_RB_DL
+
1
);
for
(
u
=
0
;
u
<
2
*
eNB
->
frame_parms
.
N_RB_DL
;
u
++
)
{
for
(
aarx
=
0
;
aarx
<
eNB2UE
[
3
]
->
nb_rx
;
aarx
++
)
{
for
(
aatx
=
0
;
aatx
<
eNB2UE
[
3
]
->
nb_tx
;
aatx
++
)
{
channelx
=
eNB2UE
[
3
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
3
]
->
nb_rx
)][
u
].
x
;
channely
=
eNB2UE
[
3
]
->
chF
[
aarx
+
(
aatx
*
eNB2UE
[
3
]
->
nb_rx
)][
u
].
y
;
fprintf
(
csv_fd
,
"%e+i*(%e),"
,
channelx
,
channely
);
}
}
}
}
}
}
//AWGN
// tx_lev is the average energy over the whole subframe
// but SNR should be better defined wrt the energy in the reference symbols
sigma2_dB
=
10
*
log10
((
double
)
tx_lev
)
+
10
*
log10
((
double
)
eNB
->
frame_parms
.
ofdm_symbol_size
/
(
double
)(
eNB
->
frame_parms
.
N_RB_DL
*
12
))
-
SNR
;
sigma2
=
pow
(
10
,
sigma2_dB
/
10
);
for
(
i
=
0
;
i
<
2
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
);
i
++
)
{
for
(
aa
=
0
;
aa
<
eNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
//printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]);
((
short
*
)
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
subframe
&
0x1
].
rxdataF
[
aa
])[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
2
*
i
]
=
(
short
)
(
r_re_f
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
ziggurat
(
0
.
0
,
1
.
0
));
((
short
*
)
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
subframe
&
0x1
].
rxdataF
[
aa
])[(
2
*
subframe
*
(
UE
->
frame_parms
.
ofdm_symbol_size
*
UE
->
frame_parms
.
symbols_per_tti
))
+
2
*
i
+
1
]
=
(
short
)
(
r_im_f
[
aa
][
i
]
+
(
iqim
*
r_re_f
[
aa
][
i
])
+
sqrt
(
sigma2
/
2
)
*
ziggurat
(
0
.
0
,
1
.
0
));
}
}
}
void
fill_DCI
(
PHY_VARS_eNB
*
eNB
,
DCI_ALLOC_t
*
dci_alloc
,
...
...
@@ -1280,12 +1409,12 @@ int main(int argc, char **argv)
LTE_DL_FRAME_PARMS
*
frame_parms
;
//frequency domain
double
s_re0_f
[
2048
*
14
],
s_im0_f
[
2048
*
14
],
r_re0_f
[
2048
*
14
],
r_im0_f
[
2048
*
14
];
double
s_re1_f
[
2048
*
14
],
s_im1_f
[
2048
*
14
],
r_re1_f
[
2048
*
14
],
r_im1_f
[
2048
*
14
];
double
*
s_re_f
[
2
]
=
{
s_re0_f
,
s_re1_f
};
double
*
s_im_f
[
2
]
=
{
s_im0_f
,
s_im1_f
};
double
*
r_re_f
[
2
]
=
{
r_re0_f
,
r_re1_f
};
double
*
r_im_f
[
2
]
=
{
r_im0_f
,
r_im1_f
};
float
s_re0_f
[
2048
*
14
],
s_im0_f
[
2048
*
14
],
r_re0_f
[
2048
*
14
],
r_im0_f
[
2048
*
14
];
float
s_re1_f
[
2048
*
14
],
s_im1_f
[
2048
*
14
],
r_re1_f
[
2048
*
14
],
r_im1_f
[
2048
*
14
];
float
*
s_re_f
[
2
]
=
{
s_re0_f
,
s_re1_f
};
float
*
s_im_f
[
2
]
=
{
s_im0_f
,
s_im1_f
};
float
*
r_re_f
[
2
]
=
{
r_re0_f
,
r_re1_f
};
float
*
r_im_f
[
2
]
=
{
r_im0_f
,
r_im1_f
};
//time domain
double
s_re0
[
30720
*
2
],
s_im0
[
30720
*
2
],
r_re0
[
30720
*
2
],
r_im0
[
30720
*
2
];
...
...
@@ -2469,7 +2598,8 @@ int main(int argc, char **argv)
(subframe*2)+1,
&eNB->frame_parms);
*/
if
(
!
UE
->
do_ofdm_mod
)
{
do_OFDM_mod_symbol
(
&
eNB
->
common_vars
,
eNB_id
,
(
subframe
*
2
),
...
...
@@ -2481,6 +2611,7 @@ int main(int argc, char **argv)
(
subframe
*
2
)
+
1
,
&
eNB
->
frame_parms
,
eNB
->
do_precoding
);
}
stop_meas
(
&
eNB
->
ofdm_mod_stats
);
...
...
@@ -2491,6 +2622,7 @@ int main(int argc, char **argv)
phy_procedures_eNB_TX
(
eNB
,
proc_eNB
,
no_relay
,
NULL
,
0
,
dci_flag
);
if
(
!
UE
->
do_ofdm_mod
)
do_OFDM_mod_l
(
eNB
->
common_vars
.
txdataF
[
eNB_id
],
eNB
->
common_vars
.
txdata
[
eNB_id
],
(
subframe
*
2
)
+
2
,
...
...
@@ -2502,9 +2634,14 @@ int main(int argc, char **argv)
tx_lev
=
0
;
for
(
aa
=
0
;
aa
<
eNB
->
frame_parms
.
nb_antennas_tx
;
aa
++
)
{
tx_lev
+=
signal_energy
(
&
eNB
->
common_vars
.
txdata
[
eNB_id
][
aa
]
[
subframe
*
eNB
->
frame_parms
.
samples_per_tti
],
eNB
->
frame_parms
.
samples_per_tti
);
if
(
UE
->
do_ofdm_mod
)
tx_lev
+=
signal_energy
(
&
eNB
->
common_vars
.
txdataF
[
eNB_id
][
aa
]
[
subframe
*
(
eNB
->
frame_parms
.
ofdm_symbol_size
*
eNB
->
frame_parms
.
symbols_per_tti
)],
(
eNB
->
frame_parms
.
ofdm_symbol_size
*
eNB
->
frame_parms
.
symbols_per_tti
));
else
tx_lev
+=
signal_energy
(
&
eNB
->
common_vars
.
txdataF
[
eNB_id
][
aa
]
[
subframe
*
(
eNB
->
frame_parms
.
samples_per_tti
)],
(
eNB
->
frame_parms
.
samples_per_tti
));
}
tx_lev_dB
=
(
unsigned
int
)
dB_fixed
(
tx_lev
);
...
...
@@ -2512,8 +2649,8 @@ int main(int argc, char **argv)
if
(
n_frames
==
1
)
{
printf
(
"tx_lev = %d (%d dB)
\n
"
,
tx_lev
,
tx_lev_dB
);
write_output
(
"txsig0.m"
,
"txs0"
,
&
eNB
->
common_vars
.
txdata
[
eNB_id
][
0
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
],
eNB
->
frame_parms
.
samples_per_tti
,
1
,
1
);
if
(
!
UE
->
do_ofdm_mod
)
write_output
(
"txsig0.m"
,
"txs0"
,
&
eNB
->
common_vars
.
txdata
F
[
eNB_id
][
0
][
subframe
*
(
eNB
->
frame_parms
.
ofdm_symbol_size
*
eNB
->
frame_parms
.
symbols_per_tti
)],
(
eNB
->
frame_parms
.
ofdm_symbol_size
*
eNB
->
frame_parms
.
symbols_per_tti
)
,
1
,
1
);
if
(
transmission_mode
<
7
)
{
write_output
(
"txsigF0.m"
,
"txsF0"
,
&
eNB
->
common_vars
.
txdataF
[
eNB_id
][
0
][
subframe
*
nsymb
*
eNB
->
frame_parms
.
ofdm_symbol_size
],
nsymb
*
eNB
->
frame_parms
.
ofdm_symbol_size
,
1
,
1
);
...
...
@@ -2523,7 +2660,9 @@ int main(int argc, char **argv)
}
}
}
if
(
UE
->
do_ofdm_mod
)
DL_channel_freq
(
eNB
,
UE
,
subframe
,
awgn_flag
,
SNR
,
tx_lev
,
hold_channel
,
abstx
,
num_rounds
,
trials
,
round
,
eNB2UE
,
s_re_f
,
s_im_f
,
r_re_f
,
r_im_f
,
csv_fd
);
else
DL_channel
(
eNB
,
UE
,
subframe
,
awgn_flag
,
SNR
,
tx_lev
,
hold_channel
,
abstx
,
num_rounds
,
trials
,
round
,
eNB2UE
,
s_re
,
s_im
,
r_re
,
r_im
,
csv_fd
);
...
...
@@ -2532,6 +2671,14 @@ int main(int argc, char **argv)
UE
->
UE_mode
[
0
]
=
PUSCH
;
// first symbol has to be done separately in one-shot mode
if
(
UE
->
do_ofdm_mod
)
slot_fep_freq
(
UE
,
0
,
(
proc
->
subframe_rx
<<
1
),
UE
->
rx_offset
,
0
,
0
);
else
slot_fep
(
UE
,
0
,
(
proc
->
subframe_rx
<<
1
),
...
...
@@ -2600,21 +2747,31 @@ int main(int argc, char **argv)
}
if
((
test_perf
==
0
)
&&
(
n_frames
==
1
))
{
if
(
UE
->
do_ofdm_mod
)
{
write_output_chFf
(
"ch0_f.m"
,
"ch0_f"
,
eNB2UE
[
0
]
->
chFf
[
0
].
x
,
eNB2UE
[
0
]
->
chFf
[
0
].
y
,
eNB2UE
[
0
]
->
channel_length
,
1
,
8
);
if
(
eNB
->
frame_parms
.
nb_antennas_tx
>
1
)
write_output_chFf
(
"ch1_f.m"
,
"ch1_f"
,
eNB2UE
[
0
]
->
chFf
[
eNB
->
frame_parms
.
nb_antennas_rx
].
x
,
eNB2UE
[
0
]
->
chFf
[
eNB
->
frame_parms
.
nb_antennas_rx
].
y
,
eNB2UE
[
0
]
->
channel_length
,
1
,
8
);
}
else
{
write_output
(
"ch0.m"
,
"ch0"
,
eNB2UE
[
0
]
->
ch
[
0
],
eNB2UE
[
0
]
->
channel_length
,
1
,
8
);
if
(
eNB
->
frame_parms
.
nb_antennas_tx
>
1
)
write_output
(
"ch1.m"
,
"ch1"
,
eNB2UE
[
0
]
->
ch
[
eNB
->
frame_parms
.
nb_antennas_rx
],
eNB2UE
[
0
]
->
channel_length
,
1
,
8
);
//common vars
write_output
(
"rxsig0.m"
,
"rxs0"
,
&
UE
->
common_vars
.
rxdata
[
0
][
0
],
10
*
UE
->
frame_parms
.
samples_per_tti
,
1
,
1
);
}
write_output
(
"rxsigF0.m"
,
"rxsF0"
,
&
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
UE
->
current_thread_id
[
subframe
]].
rxdataF
[
0
][
0
],
UE
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
if
(
UE
->
frame_parms
.
nb_antennas_rx
>
1
)
{
if
(
!
UE
->
do_ofdm_mod
)
write_output
(
"rxsig1.m"
,
"rxs1"
,
UE
->
common_vars
.
rxdata
[
1
],
UE
->
frame_parms
.
samples_per_tti
,
1
,
1
);
write_output
(
"rxsigF1.m"
,
"rxsF1"
,
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
UE
->
current_thread_id
[
subframe
]].
rxdataF
[
1
],
UE
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
}
write_output
(
"dlsch00_r0.m"
,
"dl00_r0"
,
&
(
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
UE
->
current_thread_id
[
subframe
]].
dl_ch_estimates
[
eNB_id
][
0
][
0
]),
UE
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
...
...
@@ -2688,19 +2845,24 @@ int main(int argc, char **argv)
for
(
i
=
0
;
i
<
Kr_bytes
;
i
++
)
printf
(
"%d : %x (%x)
\n
"
,
i
,
UE
->
dlsch
[
UE
->
current_thread_id
[
subframe
]][
0
][
0
]
->
harq_processes
[
0
]
->
c
[
s
][
i
],
UE
->
dlsch
[
UE
->
current_thread_id
[
subframe
]][
0
][
0
]
->
harq_processes
[
0
]
->
c
[
s
][
i
]
^
eNB
->
dlsch
[
0
][
0
]
->
harq_processes
[
0
]
->
c
[
s
][
i
]);
}
if
(
!
UE
->
do_ofdm_mod
)
{
sprintf
(
fname
,
"rxsig0_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs0_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
UE
->
common_vars
.
rxdata
[
0
][
0
],
10
*
UE
->
frame_parms
.
samples_per_tti
,
1
,
1
);
}
sprintf
(
fname
,
"rxsigF0_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs0F_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
UE
->
current_thread_id
[
subframe
]].
rxdataF
[
0
][
0
],
UE
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
if
(
UE
->
frame_parms
.
nb_antennas_rx
>
1
)
{
if
(
!
UE
->
do_ofdm_mod
)
{
sprintf
(
fname
,
"rxsig1_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs1_r%d.m"
,
round
);
write_output
(
fname
,
vname
,
UE
->
common_vars
.
rxdata
[
1
],
UE
->
frame_parms
.
samples_per_tti
,
1
,
1
);
}
sprintf
(
fname
,
"rxsigF1_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs1F_r%d.m"
,
round
);
write_output
(
fname
,
vname
,
UE
->
common_vars
.
common_vars_rx_data_per_thread
[
UE
->
current_thread_id
[
subframe
]].
rxdataF
[
1
],
UE
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
...
...
targets/SIMU/USER/channel_sim.c
View file @
9ff4dabc
...
...
@@ -72,8 +72,7 @@
int
number_rb_ul
;
int
first_rbUL
;
#define SSE_float
#ifdef SSE_float
#ifdef __AVX2__
float
r_re_DL
[
NUMBER_OF_UE_MAX
][
2
][
30720
];
float
r_im_DL
[
NUMBER_OF_UE_MAX
][
2
][
30720
];
float
r_re_UL
[
NUMBER_OF_eNB_MAX
][
2
][
30720
];
...
...
@@ -412,7 +411,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
int32_t
**
txdataF
,
**
rxdataF
;
uint8_t
eNB_id
=
0
;
#ifdef
SSE_float
#ifdef
__AVX2__
float
tx_pwr
;
#else
double
tx_pwr
;
...
...
@@ -426,7 +425,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
uint8_t
hold_channel
=
0
;
uint8_t
nb_antennas_rx
=
eNB2UE
[
0
][
0
][
CC_id
]
->
nb_rx
;
// number of rx antennas at UE
uint8_t
nb_antennas_tx
=
eNB2UE
[
0
][
0
][
CC_id
]
->
nb_tx
;
// number of tx antennas at eNB
#ifdef
SSE_float
#ifdef
__AVX2__
float
s_re0_f
[
2048
*
14
];
//ofdm_symbol_size*symbols_per_tti;
float
s_re1_f
[
2048
*
14
];
//ofdm_symbol_size*symbols_per_tti;
float
*
s_re_f
[
2
];
...
...
@@ -498,7 +497,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d: txdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
DL_dac_fixed_gain
);
tx_pwr
=
dac_fixed_gain_AVX_float
(
s_re_f
,
s_im_f
,
...
...
@@ -545,7 +544,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//eNB2UE[eNB_id][UE_id]->path_loss_dB = 0;
//clock_t start=clock();
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
DL_multipath_channel_freq
);
multipath_channel_freq_AVX_float
(
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
],
s_re_f
,
s_im_f
,
r_re0_f
,
r_im0_f
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
hold_channel
,
eNB_id
,
UE_id
,
CC_id
,
subframe
&
0x1
);
...
...
@@ -590,7 +589,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
path_loss_dB
);
#ifdef DEBUG_SIM
#ifdef
SSE_float
#ifdef
__AVX2__
rx_pwr
=
signal_energy_fp_AVX_float
(
r_re0_f
,
r_im0_f
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
,
sf_offset
)
/
(
12
.
0
*
frame_parms
->
N_RB_DL
);
...
...
@@ -621,7 +620,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
/*count++;
clock_t start=clock();*/
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
DL_rf_rx_simple_freq
);
rf_rx_simple_freq_AVX_float
(
r_re0_f
,
r_im0_f
,
...
...
@@ -657,7 +656,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
fprintf(file1,"%d\t%e\t%e\n",x,r_re0_f[0][x],r_im0_f[0][x]);
}*/
#ifdef DEBUG_SIM
#ifdef
SSE_float
#ifdef
__AVX2__
rx_pwr
=
signal_energy_fp_AVX_float
((
r_re0_f
,
r_im0_f
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
,
//?
...
...
@@ -685,7 +684,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
eNB_output_mask
[
UE_id
]
|=
(
1
<<
eNB_id
);
if
(
eNB_output_mask
[
UE_id
]
==
(
1
<<
NB_eNB_INST
)
-
1
)
{
eNB_output_mask
[
UE_id
]
=
0
;
#ifdef
SSE_float
#ifdef
__AVX2__
float
*
r_re_p_f
[
2
]
=
{
r_re_DL_f
[
UE_id
][
0
],
r_re_DL_f
[
UE_id
][
1
]};
float
*
r_im_p_f
[
2
]
=
{
r_im_DL_f
[
UE_id
][
0
],
r_im_DL_f
[
UE_id
][
1
]};
#else
...
...
@@ -705,7 +704,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//printf("[ch_sim] sf_offset %d\n",sf_offset);
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
DL_adc
);
adc_AVX_float
(
r_re_p_f
,
r_im_p_f
,
...
...
@@ -973,7 +972,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
uint8_t
nb_antennas_rx
=
UE2eNB
[
0
][
0
][
CC_id
]
->
nb_rx
;
// number of rx antennas at eNB
uint8_t
nb_antennas_tx
=
UE2eNB
[
0
][
0
][
CC_id
]
->
nb_tx
;
// number of tx antennas at UE
#ifdef
SSE_float
#ifdef
__AVX2__
float
tx_pwr
,
rx_pwr
;
#else
double
tx_pwr
,
rx_pwr
;
...
...
@@ -994,7 +993,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
int
ulfrrb2
;
uint8_t
harq_pid
;
#endif
#ifdef
SSE_float
#ifdef
__AVX2__
float
s_re0_f
[
2048
*
14
];
//ofdm_symbol_size*symbols_per_tti;
float
s_re1_f
[
2048
*
14
];
//ofdm_symbol_size*symbols_per_tti;
float
*
s_re_f
[
2
];
...
...
@@ -1106,7 +1105,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
// UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB));
}
else
{
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
UL_dac_fixed_gain
);
tx_pwr
=
dac_fixed_gain_AVX_float
((
float
**
)
s_re_f
,
(
float
**
)
s_im_f
,
...
...
@@ -1149,7 +1148,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
subframe
,
sf_offset
);
//write_output("chsim_s_re_f_UL.m","chsm_sref_UL", s_re_f,10*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16);
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
UL_multipath_channel_freq
);
multipath_channel_freq_AVX_float
(
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
],
s_re_f
,
s_im_f
,
r_re0_f
,
r_im0_f
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
hold_channel
,
eNB_id
,
UE_id
,
CC_id
,
subframe
&
0x1
);
//ue timer subframe&0x1
...
...
@@ -1184,7 +1183,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
LOG_D
(
OCM
,
"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)
\n
"
,
subframe
,
UE_id
,
eNB_id
,
10
*
log10
(
rx_pwr
),
hold_channel
,
12
*
frame_parms
->
N_RB_DL
+
1
,
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
path_loss_dB
);
#ifdef
SSE_float
#ifdef
__AVX2__
rx_pwr
=
signal_energy_fp_SSE_float
(
r_re0_f
,
r_im0_f
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
0
);
#else
rx_pwr
=
signal_energy_fp
(
r_re0_f
,
r_im0_f
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
0
);
...
...
@@ -1207,7 +1206,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
pthread_mutex_unlock
(
&
UE_output_mutex
[
eNB_id
]);
}
}
//UE_id
#ifdef
SSE_float
#ifdef
__AVX2__
float
*
r_re_p_f
[
2
]
=
{
r_re_UL_f
[
eNB_id
][
0
],
r_re_UL_f
[
eNB_id
][
1
]};
float
*
r_im_p_f
[
2
]
=
{
r_im_UL_f
[
eNB_id
][
0
],
r_im_UL_f
[
eNB_id
][
1
]};
#else
...
...
@@ -1215,7 +1214,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
double
*
r_im_p_f
[
2
]
=
{
r_im_UL_f
[
eNB_id
][
0
],
r_im_UL_f
[
eNB_id
][
1
]};
#endif
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
UL_rf_rx_simple_freq
);
rf_rx_simple_freq_AVX_float
(
r_re_p_f
,
r_im_p_f
,
...
...
@@ -1254,7 +1253,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
rxdataF
=
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
common_vars
.
rxdataF
[
0
];
sf_offset
=
0
;
//subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti;
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
UL_adc
);
adc_AVX_float
(
r_re_p_f
,
r_im_p_f
,
...
...
@@ -1324,7 +1323,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
int16_t
*
tx_prachF
;
uint8_t
nb_antennas_rx
=
UE2eNB
[
0
][
0
][
CC_id
]
->
nb_rx
;
// number of rx antennas at eNB
uint8_t
nb_antennas_tx
=
UE2eNB
[
0
][
0
][
CC_id
]
->
nb_tx
;
// number of tx antennas at UE
#ifdef
SSE_float
#ifdef
__AVX2__
float
tx_pwr
,
rx_pwr
;
#else
double
tx_pwr
,
rx_pwr
;
...
...
@@ -1344,7 +1343,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
int
ulfrrb2
;
uint8_t
harq_pid
;
#endif
#ifdef
SSE_float
#ifdef
__AVX2__
float
s_re0_f_prach
[
2048
*
14
*
12
];
//ofdm_symbol_size*symbols_per_tti;
float
s_re1_f_prach
[
2048
*
14
*
12
];
//ofdm_symbol_size*symbols_per_tti;
float
*
s_re_f_prach
[
2
];
...
...
@@ -1437,7 +1436,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
//UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB));
}
else
{
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
dac_fixed_gain_PRACH
);
tx_pwr
=
dac_fixed_gain_prach_AVX_float
((
float
**
)
s_re_f_prach
,
(
float
**
)
s_im_f_prach
,
...
...
@@ -1482,7 +1481,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
// write_output("s_re_f_prach.m","s_re_f_prach_txF", s_re_f_prach,frame_parms->ofdm_symbol_size*12,1,1);
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
multipath_channel_freq_PRACH
);
multipath_channel_prach_AVX_float
(
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
],
s_re_f_prach
,
s_im_f_prach
,
r_re0_f_prach
,
r_im0_f_prach
,
&
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
frame_parms
,
(
prach_fmt
<
4
)
?
13
+
839
+
12
:
3
+
139
+
2
,
hold_channel
,
eNB_id
,
prach_fmt
,
n_ra_prb
);
...
...
@@ -1501,7 +1500,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
/*LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,eNB_id,10*log10(rx_pwr),
hold_channel,12*frame_parms->N_RB_DL+1,
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB);*/
#ifdef
SSE_float
#ifdef
__AVX2__
rx_pwr
=
signal_energy_fp_AVX_float
(
r_re0_f_prach
,
r_im0_f_prach
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
,
0
);
#else
rx_pwr
=
signal_energy_fp
(
r_re0_f_prach
,
r_im0_f_prach
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
,
0
);
...
...
@@ -1522,7 +1521,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
__m256
r_re0_f_prach_256
,
r_im0_f_prach_256
,
r_re_UL_f_prach_256
,
r_im_UL_f_prach_256
;
pthread_mutex_lock
(
&
UE_output_mutex
[
eNB_id
]);
#ifdef
SSE_float
#ifdef
__AVX2__
for
(
aa
=
0
;
aa
<
nb_antennas_rx
;
aa
++
)
{
for
(
i
=
0
;
i
<
(
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
)
>>
3
;
i
++
)
{
//r_re_UL_f_prach[eNB_id][aa][i]+=r_re0_f_prach[aa][i];
...
...
@@ -1551,7 +1550,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
pthread_mutex_unlock
(
&
UE_output_mutex
[
eNB_id
]);
}
}
//UE_id
#ifdef
SSE_float
#ifdef
__AVX2__
float
*
r_re_p_f_prach
[
2
]
=
{
r_re_UL_f_prach
[
eNB_id
][
0
],
r_re_UL_f_prach
[
eNB_id
][
1
]};
float
*
r_im_p_f_prach
[
2
]
=
{
r_im_UL_f_prach
[
eNB_id
][
0
],
r_im_UL_f_prach
[
eNB_id
][
1
]};
#else
...
...
@@ -1561,7 +1560,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
/*for (int idx=0;idx<10;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_re_im_p_f_prach[%d] = (%d,%d)\n", subframe, idx, (short)(r_re_p_f_prach[0][idx]),(short)(r_im_p_f_prach[0][idx]));
for (int idx=829;idx<839;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_re_im_p_f_prach[%d] = (%d,%d)\n", subframe, idx, (short)(r_re_p_f_prach[0][idx]),(short)(r_im_p_f_prach[0][idx]));*/
//clock_t start=clock();
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
rf_rx_simple_freq_PRACH
);
rf_rx_simple_freq_AVX_float
(
r_re_p_f_prach
,
r_im_p_f_prach
,
...
...
@@ -1600,7 +1599,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
rx_prachF
=
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
prach_vars
.
rxsigF
;
sf_offset
=
pointer_firstvalue_PRACH
;
#ifdef
SSE_float
#ifdef
__AVX2__
start_meas
(
&
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
adc_PRACH
);
adc_prach_AVX_float
(
r_re_p_f_prach
,
r_im_p_f_prach
,
...
...
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