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
5c9e01db
Commit
5c9e01db
authored
Mar 08, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing a bug in computation of SINR in abstraction mode and making it dependent in NB_RB
parent
0716580d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
12 additions
and
28 deletions
+12
-28
targets/SIMU/USER/channel_sim.c
targets/SIMU/USER/channel_sim.c
+3
-16
targets/SIMU/USER/oaisim.h
targets/SIMU/USER/oaisim.h
+2
-2
targets/SIMU/USER/oaisim_functions.c
targets/SIMU/USER/oaisim_functions.c
+1
-2
targets/SIMU/USER/sinr_sim.c
targets/SIMU/USER/sinr_sim.c
+6
-8
No files found.
targets/SIMU/USER/channel_sim.c
View file @
5c9e01db
...
...
@@ -169,8 +169,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
int32_t
**
dl_channel_est
=
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
lte_ue_common_vars
.
dl_ch_estimates
[
0
];
// double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0);
double
scale
=
pow
(
10
.
0
,(
frame_parms
->
pdsch_config_common
.
referenceSignalPower
+
eNB2UE
[
att_eNB_id
][
UE_id
][
CC_id
]
->
path_loss_dB
+
(
double
)
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
rx_total_gain_dB
)
/
20
.
0
);
//this factor is not really needed (it was actually wrong in the non abstraction mode)
//scale = scale * sqrt(512.0/300.0); //TODO: make this variable for all BWs
LOG_D
(
OCM
,
"scale =%lf (%d dB)
\n
"
,
scale
,(
int
)
(
20
*
log10
(
scale
)));
// freq_channel(desc1,frame_parms->N_RB_DL,nb_samples);
//write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8);
...
...
@@ -204,12 +202,13 @@ void do_DL_sig(double **r_re0,double **r_im0,
// calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved)
init_snr
(
eNB2UE
[
att_eNB_id
][
UE_id
][
CC_id
],
enb_data
[
att_eNB_id
],
ue_data
[
UE_id
],
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
sinr_dB
,
&
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
N0
,
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
transmission_mode
[
att_eNB_id
],
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
DL_pmi_single
,
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
mu_mimo_mode
[
UE_id
].
dl_pow_off
);
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
transmission_mode
[
att_eNB_id
],
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
DL_pmi_single
,
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
mu_mimo_mode
[
UE_id
].
dl_pow_off
,
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
lte_frame_parms
.
N_RB_DL
);
// calculate sinr here
for
(
eNB_id
=
0
;
eNB_id
<
NB_eNB_INST
;
eNB_id
++
)
{
if
(
att_eNB_id
!=
eNB_id
)
{
calculate_sinr
(
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
],
enb_data
[
eNB_id
],
ue_data
[
UE_id
],
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
sinr_dB
);
calculate_sinr
(
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
],
enb_data
[
eNB_id
],
ue_data
[
UE_id
],
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
sinr_dB
,
PHY_vars_eNB_g
[
att_eNB_id
][
CC_id
]
->
lte_frame_parms
.
N_RB_DL
);
}
}
}
// hold channel
...
...
@@ -220,18 +219,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
Call do_OFDM_mod from phy_procedures_eNB_TX function
*/
//for (UE_id=0;UE_id<NB_UE_INST;UE_id++) {
// Compute RX signal for UE = UE_id
/*
for (i=0;i<(frame_parms->samples_per_tti>>1);i++) {
for (aa=0;aa<nb_antennas_rx;aa++) {
r_re[aa][i]=0.0;
r_im[aa][i]=0.0;
}
}
*/
// printf("r_re[0] %p\n",r_re[0]);
for
(
aa
=
0
;
aa
<
nb_antennas_rx
;
aa
++
)
{
memset
((
void
*
)
r_re
[
aa
],
0
,(
frame_parms
->
samples_per_tti
>>
1
)
*
sizeof
(
double
));
...
...
targets/SIMU/USER/oaisim.h
View file @
5c9e01db
...
...
@@ -62,9 +62,9 @@ void extract_position(node_list* input_node_list, node_desc_t**, int nb_nodes);/
void
get_beta_map
(
void
);
//Abstraction changes
void
get_MIESM_param
(
void
);
void
init_snr
(
channel_desc_t
*
,
node_desc_t
*
,
node_desc_t
*
,
double
*
,
double
*
,
uint8_t
,
uint16_t
,
uint8_t
);
//Abstraction changes
void
init_snr
(
channel_desc_t
*
,
node_desc_t
*
,
node_desc_t
*
,
double
*
,
double
*
,
uint8_t
,
uint16_t
,
uint8_t
,
uint16_t
);
//Abstraction changes
void
init_snr_up
(
channel_desc_t
*
,
node_desc_t
*
,
node_desc_t
*
,
double
*
,
double
*
,
uint16_t
,
uint16_t
);
//Abstraction changes
void
calculate_sinr
(
channel_desc_t
*
,
node_desc_t
*
,
node_desc_t
*
,
double
*
sinr_dB
);
//Abstraction changes
void
calculate_sinr
(
channel_desc_t
*
,
node_desc_t
*
,
node_desc_t
*
,
double
*
sinr_dB
,
uint16_t
);
//Abstraction changes
void
get_beta_map
(
void
);
int
dlsch_abstraction_EESM
(
double
*
sinr_dB
,
uint32_t
rb_alloc
[
4
],
uint8_t
mcs
,
uint8_t
);
//temporary testing for PHY abstraction
int
dlsch_abstraction_MIESM
(
double
*
sinr_dB
,
uint8_t
TM
,
uint32_t
rb_alloc
[
4
],
uint8_t
mcs
,
uint8_t
);
...
...
targets/SIMU/USER/oaisim_functions.c
View file @
5c9e01db
...
...
@@ -1270,8 +1270,7 @@ void update_ocm()
//pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
if
(
eNB_id
==
(
UE_id
%
NB_eNB_INST
))
{
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
path_loss_dB
=
-
132
.
24
+
snr_dB
-
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
lte_frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
path_loss_dB
=
-
132
.
24
+
snr_dB
-
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
lte_frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
//+20 to offset the difference in tx power of the UE wrt eNB
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
path_loss_dB
=
-
132
.
24
+
snr_dB
-
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
lte_frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
}
else
{
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
path_loss_dB
=
-
132
.
24
+
sinr_dB
-
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
lte_frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
path_loss_dB
=
-
132
.
24
+
sinr_dB
-
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
lte_frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
...
...
targets/SIMU/USER/sinr_sim.c
View file @
5c9e01db
...
...
@@ -244,20 +244,19 @@ void calc_path_loss(node_desc_t* enb_data, node_desc_t* ue_data, channel_desc_t
void
init_snr
(
channel_desc_t
*
eNB2UE
,
node_desc_t
*
enb_data
,
node_desc_t
*
ue_data
,
double
*
sinr_dB
,
double
*
N0
,
uint8_t
transmission_mode
,
uint16_t
q
,
uint8_t
dl_power_off
)
void
init_snr
(
channel_desc_t
*
eNB2UE
,
node_desc_t
*
enb_data
,
node_desc_t
*
ue_data
,
double
*
sinr_dB
,
double
*
N0
,
uint8_t
transmission_mode
,
uint16_t
q
,
uint8_t
dl_power_off
,
uint16_t
nb_rb
)
{
uint16_t
nb_rb
=
25
;
//No. of resource blocks
double
thermal_noise
,
abs_channel
,
channelx
,
channely
,
channelx_i
,
channely_i
;
int
count
;
int
aarx
,
aatx
;
uint8_t
qq
;
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth
*/
thermal_noise
=
-
174
+
10
*
log10
(
eNB2UE
->
sampling_rate
*
1e6
);
//
value in dBm
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth*/
thermal_noise
=
-
174
+
10
*
log10
(
15000
);
//per RE;
value in dBm
//for (aarx=0; aarx<eNB2UE->nb_rx; aarx++)
*
N0
=
thermal_noise
+
ue_data
->
rx_noise_level
;
//? all the element have the same noise level?????
*
N0
=
thermal_noise
+
ue_data
->
rx_noise_level
;
LOG_D
(
OCM
,
"Path loss %lf, noise (N0) %lf, signal %lf, snr %lf
\n
"
,
eNB2UE
->
path_loss_dB
,
...
...
@@ -549,15 +548,14 @@ void init_snr_up(channel_desc_t* UE2eNB, node_desc_t *enb_data, node_desc_t *ue_
#endif
void
calculate_sinr
(
channel_desc_t
*
eNB2UE
,
node_desc_t
*
enb_data
,
node_desc_t
*
ue_data
,
double
*
sinr_dB
)
void
calculate_sinr
(
channel_desc_t
*
eNB2UE
,
node_desc_t
*
enb_data
,
node_desc_t
*
ue_data
,
double
*
sinr_dB
,
uint16_t
nb_rb
)
{
double
sir
,
thermal_noise
;
short
nb_rb
=
25
;
//No. of resource blocks
short
count
;
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
thermal_noise
=
-
174
+
10
*
log10
(
eNB2UE
->
sampling_rate
*
1e6
);
//
value in dBm
thermal_noise
=
-
174
+
10
*
log10
(
15000
);
//per RE,
value in dBm
for
(
count
=
0
;
count
<
12
*
nb_rb
;
count
++
)
{
sir
=
enb_data
->
tx_power_dBm
...
...
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