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
049e33ca
Commit
049e33ca
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
2d368cc2
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 @
049e33ca
...
...
@@ -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 @
049e33ca
...
...
@@ -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 @
049e33ca
...
...
@@ -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 @
049e33ca
...
...
@@ -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