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
zzha zzha
OpenXG-RAN
Commits
33860c16
Commit
33860c16
authored
Oct 19, 2015
by
ABEILLE
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merged in changes from abeille (modifications on final svn version)
parent
5c230732
Changes
17
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
277 additions
and
199 deletions
+277
-199
openair1/PHY/LTE_ESTIMATION/defs.h
openair1/PHY/LTE_ESTIMATION/defs.h
+4
-3
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+42
-66
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+3
-3
openair1/PHY/LTE_TRANSPORT/print_stats.c
openair1/PHY/LTE_TRANSPORT/print_stats.c
+10
-8
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+14
-14
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+78
-55
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+7
-0
openair1/PHY/TOOLS/lte_phy_scope.c
openair1/PHY/TOOLS/lte_phy_scope.c
+8
-5
openair1/PHY/defs.h
openair1/PHY/defs.h
+3
-0
openair1/PHY/impl_defs_top.h
openair1/PHY/impl_defs_top.h
+1
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+52
-9
openair1/SIMULATION/LTE_PHY/pucchsim.c
openair1/SIMULATION/LTE_PHY/pucchsim.c
+14
-12
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+7
-4
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+1
-0
targets/ARCH/COMMON/common_lib.c
targets/ARCH/COMMON/common_lib.c
+7
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
...PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+3
-3
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+23
-12
No files found.
openair1/PHY/LTE_ESTIMATION/defs.h
View file @
33860c16
...
@@ -243,15 +243,16 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -243,15 +243,16 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
int
lte_est_timing_advance_pusch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
module_id_t
UE_id
,
uint8_t
subframe
);
int
lte_est_timing_advance_pusch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
module_id_t
UE_id
,
uint8_t
subframe
);
void
lte_eNB_I0_measurements
(
PHY_VARS_eNB
*
phy_vars_eNb
,
void
lte_eNB_I0_measurements
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int
subframe
,
module_id_t
eNB_id
,
module_id_t
eNB_id
,
unsigned
char
clear
);
unsigned
char
clear
);
void
lte_eNB_I0_measurements_emul
(
PHY_VARS_eNB
*
phy_vars_eN
b
,
void
lte_eNB_I0_measurements_emul
(
PHY_VARS_eNB
*
phy_vars_eN
B
,
uint8_t
sect_id
);
uint8_t
sect_id
);
void
lte_eNB_srs_measurements
(
PHY_VARS_eNB
*
phy_vars_eN
b
,
void
lte_eNB_srs_measurements
(
PHY_VARS_eNB
*
phy_vars_eN
By
,
module_id_t
eNB_id
,
module_id_t
eNB_id
,
module_id_t
UE_id
,
module_id_t
UE_id
,
unsigned
char
init_averaging
);
unsigned
char
init_averaging
);
...
...
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
View file @
33860c16
...
@@ -39,57 +39,36 @@
...
@@ -39,57 +39,36 @@
int32_t
rx_power_avg_eNB
[
3
][
3
];
int32_t
rx_power_avg_eNB
[
3
][
3
];
void
lte_eNB_I0_measurements
(
PHY_VARS_eNB
*
phy_vars_eNb
,
void
lte_eNB_I0_measurements
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int
subframe
,
unsigned
char
eNB_id
,
unsigned
char
eNB_id
,
unsigned
char
clear
)
unsigned
char
clear
)
{
{
LTE_eNB_COMMON
*
eNB_common_vars
=
&
phy_vars_eN
b
->
lte_eNB_common_vars
;
LTE_eNB_COMMON
*
eNB_common_vars
=
&
phy_vars_eN
B
->
lte_eNB_common_vars
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_eN
b
->
lte_frame_parms
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_eN
B
->
lte_frame_parms
;
PHY_MEASUREMENTS_eNB
*
phy_measurements
=
&
phy_vars_eN
b
->
PHY_measurements_eNB
[
eNB_id
];
PHY_MEASUREMENTS_eNB
*
phy_measurements
=
&
phy_vars_eN
B
->
PHY_measurements_eNB
[
eNB_id
];
int32_t
*
rb_mask
=
phy_vars_eNB
->
rb_mask_ul
;
uint32_t
aarx
,
rx_power_correction
;
uint32_t
aarx
,
rx_power_correction
;
uint32_t
rb
;
uint32_t
rb
;
int32_t
*
ul_ch
;
int32_t
*
ul_ch
;
int32_t
n0_power_tot
;
int32_t
n0_power_tot
;
int
len
;
int
offset
;
int
Nsymb
=
(
frame_parms
->
Ncp
==
NORMAL
)
?
14
:
12
;
// noise measurements
// noise measurements
// for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
// for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
phy_measurements
->
n0_power_tot
=
0
;
phy_measurements
->
n0_power_tot
=
0
;
/* printf("rxdataF0 %p, rxdataF1 %p\n",
(&eNB_common_vars->rxdataF[0][0][(frame_parms->ofdm_symbol_size + frame_parms->first_carrier_offset)<<1 ]),
(&eNB_common_vars->rxdataF[0][1][(frame_parms->ofdm_symbol_size + frame_parms->first_carrier_offset)<<1 ]));
*/
/*
for (i=0;i<512;i++)
printf("sector 0 antenna 0 : %d,%d\n",((short *)&eNB_common_vars->rxdataF[0][0][(19*frame_parms->ofdm_symbol_size)<<1])[i<<1],
((short *)&eNB_common_vars->rxdataF[0][0][(19*frame_parms->ofdm_symbol_size)<<1])[1+(i<<1)]);
for (i=0;i<12;i++)
// printf("sector 0 antenna 1 : %d,%d\n",((short *)&eNB_common_vars->rxdataF[0][1][(19*frame_parms->ofdm_symbol_size)<<1])[i<<1],
((short *)&eNB_common_vars->rxdataF[0][1][(19*frame_parms->ofdm_symbol_size)<<1])[1+(i<<1)]);
*/
if
(
(
frame_parms
->
ofdm_symbol_size
==
128
)
||
(
frame_parms
->
ofdm_symbol_size
==
512
)
)
rx_power_correction
=
2
;
else
rx_power_correction
=
1
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
if
(
clear
==
1
)
if
(
clear
==
1
)
phy_measurements
->
n0_power
[
aarx
]
=
0
;
phy_measurements
->
n0_power
[
aarx
]
=
0
;
#ifdef USER_MODE
phy_measurements
->
n0_power
[
aarx
]
=
((
k1
*
signal_energy
(
&
eNB_common_vars
->
rxdata
[
eNB_id
][
aarx
][(
frame_parms
->
samples_per_tti
<<
1
)
-
frame_parms
->
ofdm_symbol_size
],
phy_measurements
->
n0_power
[
aarx
]
=
((
k1
*
signal_energy
(
&
eNB_common_vars
->
rxdata
[
eNB_id
][
aarx
][(
frame_parms
->
samples_per_tti
<<
1
)
-
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
))
+
k2
*
phy_measurements
->
n0_power
[
aarx
])
>>
10
;
frame_parms
->
ofdm_symbol_size
))
+
k2
*
phy_measurements
->
n0_power
[
aarx
])
>>
10
;
#else
phy_measurements
->
n0_power
[
aarx
]
=
((
k1
*
signal_energy
(
&
eNB_common_vars
->
rxdata
[
eNB_id
][
aarx
][(
frame_parms
->
samples_per_tti
<<
1
)
-
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
))
+
k2
*
phy_measurements
->
n0_power
[
aarx
])
>>
10
;
#endif
phy_measurements
->
n0_power
[
aarx
]
=
(
phy_measurements
->
n0_power
[
aarx
]
*
12
*
frame_parms
->
N_RB_DL
)
/
(
frame_parms
->
ofdm_symbol_size
);
phy_measurements
->
n0_power
[
aarx
]
=
(
phy_measurements
->
n0_power
[
aarx
]
*
12
*
frame_parms
->
N_RB_DL
)
/
(
frame_parms
->
ofdm_symbol_size
);
phy_measurements
->
n0_power_dB
[
aarx
]
=
(
unsigned
short
)
dB_fixed
(
phy_measurements
->
n0_power
[
aarx
]);
phy_measurements
->
n0_power_dB
[
aarx
]
=
(
unsigned
short
)
dB_fixed
(
phy_measurements
->
n0_power
[
aarx
]);
phy_measurements
->
n0_power_tot
+=
phy_measurements
->
n0_power
[
aarx
];
phy_measurements
->
n0_power_tot
+=
phy_measurements
->
n0_power
[
aarx
];
...
@@ -97,52 +76,49 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNb,
...
@@ -97,52 +76,49 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNb,
phy_measurements
->
n0_power_tot_dB
=
(
unsigned
short
)
dB_fixed
(
phy_measurements
->
n0_power_tot
);
phy_measurements
->
n0_power_tot_dB
=
(
unsigned
short
)
dB_fixed
(
phy_measurements
->
n0_power_tot
);
phy_measurements
->
n0_power_tot_dBm
=
phy_measurements
->
n0_power_tot_dB
-
phy_vars_eN
b
->
rx_total_gain_eNB_dB
;
phy_measurements
->
n0_power_tot_dBm
=
phy_measurements
->
n0_power_tot_dB
-
phy_vars_eN
B
->
rx_total_gain_eNB_dB
;
// printf("n0_power %d\n",phy_measurements->n0_power_tot_dB);
// printf("n0_power %d\n",phy_measurements->n0_power_tot_dB);
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_UL
;
rb
++
)
{
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_UL
;
rb
++
)
{
n0_power_tot
=
0
;
n0_power_tot
=
0
;
if
((
rb_mask
[
rb
>>
5
]
&
(
1
<<
(
rb
&
31
)))
==
0
)
{
// check that rb was not used in this subframe
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
// select the 7th symbol in an uplink subframe
if
(
rb
<
12
)
offset
=
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
// ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][((19*(frame_parms->ofdm_symbol_size)) + frame_parms->first_carrier_offset + (rb*12))<<1];
offset
+=
(
7
*
frame_parms
->
ofdm_symbol_size
);
//(((Nsymb*subframe)+7)*frame_parms->ofdm_symbol_size);
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][((
7
*
frame_parms
->
ofdm_symbol_size
)
+
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
<<
1
];
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][
offset
];
else
if
(
rb
>
12
)
len
=
12
;
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][((
7
*
frame_parms
->
ofdm_symbol_size
)
+
6
+
(
rb
-
13
)
*
12
)
<<
1
];
// just do first half of middle PRB for odd number of PRBs
else
{
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
ul_ch
=
NULL
;
(
rb
==
(
frame_parms
->
N_RB_UL
>>
1
)))
{
len
=
6
;
}
}
if
(
clear
==
1
)
if
(
clear
==
1
)
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
if
(
ul_ch
)
{
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem"
);
// for (i=0;i<24;i+=2)
// printf("re %d => %d\n",i/2,ul_ch[i]);
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
((
k1
*
(
signal_energy_nodc
(
ul_ch
,
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
signal_energy_nodc
(
ul_ch
,
len
);
24
))
*
rx_power_correction
)
+
(
k2
*
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]))
>>
11
;
// 11 and 24 to compensate for repeated signal format
//((k1*(signal_energy_nodc(ul_ch,len)))
// + (k2*phy_measurements->n0_subband_power[aarx][rb]));
phy_measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]);
phy_measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]);
// printf("eNb %d, aarx %d, rb %d : energy %d (%d dB)\n",eNB_id,aarx,rb,signal_energy_nodc(ul_ch,24), phy_measurements->n0_subband_power_dB[aarx][rb]);
// printf("subframe %d (%d): eNb %d, aarx %d, rb %d len %d: energy %d (%d dB)\n",subframe,offset,eNB_id,aarx,rb,len,signal_energy_nodc(ul_ch,len),
// phy_measurements->n0_subband_power_dB[aarx][rb]);
n0_power_tot
+=
phy_measurements
->
n0_subband_power
[
aarx
][
rb
];
n0_power_tot
+=
phy_measurements
->
n0_subband_power
[
aarx
][
rb
];
}
else
{
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
1
;
phy_measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
-
99
;
n0_power_tot
=
1
;
}
}
}
phy_measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_power_tot
);
phy_measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_power_tot
);
phy_measurements
->
n0_subband_power_tot_dBm
[
rb
]
=
phy_measurements
->
n0_subband_power_tot_dB
[
rb
]
-
phy_vars_eNb
->
rx_total_gain_eNB_dB
-
14
;
phy_measurements
->
n0_subband_power_tot_dBm
[
rb
]
=
phy_measurements
->
n0_subband_power_tot_dB
[
rb
]
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
-
dB_fixed
(
frame_parms
->
N_RB_UL
)
;
}
}
}
}
}
void
lte_eNB_srs_measurements
(
PHY_VARS_eNB
*
phy_vars_eNb
,
void
lte_eNB_srs_measurements
(
PHY_VARS_eNB
*
phy_vars_eNb
,
unsigned
char
eNB_id
,
unsigned
char
eNB_id
,
unsigned
char
UE_id
,
unsigned
char
UE_id
,
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
33860c16
...
@@ -576,13 +576,13 @@ typedef struct {
...
@@ -576,13 +576,13 @@ typedef struct {
/// UL RSSI per receive antenna
/// UL RSSI per receive antenna
int32_t
UL_rssi
[
NB_ANTENNAS_RX
];
int32_t
UL_rssi
[
NB_ANTENNAS_RX
];
/// PUCCH1a/b power (digital linear)
/// PUCCH1a/b power (digital linear)
int32_t
Po_PUCCH
;
u
int32_t
Po_PUCCH
;
/// PUCCH1a/b power (dBm)
/// PUCCH1a/b power (dBm)
int32_t
Po_PUCCH_dBm
;
int32_t
Po_PUCCH_dBm
;
/// PUCCH1 power (digital linear), conditioned on below threshold
/// PUCCH1 power (digital linear), conditioned on below threshold
int32_t
Po_PUCCH1_below
;
u
int32_t
Po_PUCCH1_below
;
/// PUCCH1 power (digital linear), conditioned on above threshold
/// PUCCH1 power (digital linear), conditioned on above threshold
int32_t
Po_PUCCH1_above
;
u
int32_t
Po_PUCCH1_above
;
/// Indicator that Po_PUCCH has been updated by PHY
/// Indicator that Po_PUCCH has been updated by PHY
int32_t
Po_PUCCH_update
;
int32_t
Po_PUCCH_update
;
/// DL Wideband CQI index (2 TBs)
/// DL Wideband CQI index (2 TBs)
...
...
openair1/PHY/LTE_TRANSPORT/print_stats.c
View file @
33860c16
...
@@ -573,11 +573,13 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
...
@@ -573,11 +573,13 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_power_dB
[
0
],
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_power_dB
[
0
],
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_power_dB
[
1
]);
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_power_dB
[
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[eNB PROC] Subband I0: "
);
len
+=
sprintf
(
&
buffer
[
len
],
"[eNB PROC] PRB I0 (%X.%X.%X.%X): "
,
phy_vars_eNB
->
rb_mask_ul
[
0
],
phy_vars_eNB
->
rb_mask_ul
[
1
],
phy_vars_eNB
->
rb_mask_ul
[
2
],
phy_vars_eNB
->
rb_mask_ul
[
3
]);
for
(
i
=
0
;
i
<
25
;
i
++
)
for
(
i
=
0
;
i
<
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
i
++
)
len
+=
sprintf
(
&
buffer
[
len
],
"%
2
d "
,
len
+=
sprintf
(
&
buffer
[
len
],
"%
4
d "
,
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_subband_power_tot_dB
[
i
]);
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_subband_power_tot_dB
m
[
i
]);
len
+=
sprintf
(
&
buffer
[
len
],
"
\n
"
);
len
+=
sprintf
(
&
buffer
[
len
],
"
\n
"
);
len
+=
sprintf
(
&
buffer
[
len
],
"
\n
[eNB PROC] PERFORMANCE PARAMETERS
\n
"
);
len
+=
sprintf
(
&
buffer
[
len
],
"
\n
[eNB PROC] PERFORMANCE PARAMETERS
\n
"
);
...
@@ -634,11 +636,11 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
...
@@ -634,11 +636,11 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
dB_fixed
(
phy_vars_eNB
->
lte_eNB_pusch_vars
[
UE_id
]
->
ulsch_power
[
1
]),
dB_fixed
(
phy_vars_eNB
->
lte_eNB_pusch_vars
[
UE_id
]
->
ulsch_power
[
1
]),
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
UL_rssi
[
0
],
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
UL_rssi
[
0
],
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
UL_rssi
[
1
],
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
UL_rssi
[
1
],
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH
/
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
phy_vars_eNB
->
lte_frame_parms
.
ul_power_control_config_common
.
p0_NominalPUCCH
,
phy_vars_eNB
->
lte_frame_parms
.
ul_power_control_config_common
.
p0_NominalPUCCH
,
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_below
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_below
/
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_above
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
dB_fixed
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_above
/
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
,
PUCCH1_THRES
+
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dBm
,
//
-dB_fixed(phy_vars_eNB->lte_frame_parms.N_RB_UL),
PUCCH1_THRES
+
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dBm
-
dB_fixed
(
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
),
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
sector
);
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
sector
);
for
(
i
=
0
;
i
<
8
;
i
++
)
for
(
i
=
0
;
i
<
8
;
i
++
)
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
33860c16
...
@@ -1634,7 +1634,7 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
...
@@ -1634,7 +1634,7 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
uint8_t
subframe
);
uint8_t
subframe
);
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
u
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
PUCCH_FMT_t
fmt
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
uint16_t
n1_pucch
,
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
33860c16
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
33860c16
...
@@ -1657,8 +1657,15 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
...
@@ -1657,8 +1657,15 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
}
}
}
else
{
}
else
{
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
{
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
{
/*
eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
*/
eNB_pusch_vars
->
ulsch_power
[
i
]
=
signal_energy_nodc
(
eNB_pusch_vars
->
drs_ch_estimates
[
eNB_id
][
i
],
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
);
#ifdef LOCALIZATION
#ifdef LOCALIZATION
eNB_pusch_vars
->
subcarrier_power
=
(
int32_t
*
)
malloc
(
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
*
sizeof
(
int32_t
));
eNB_pusch_vars
->
subcarrier_power
=
(
int32_t
*
)
malloc
(
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
*
sizeof
(
int32_t
));
eNB_pusch_vars
->
active_subcarrier
=
subcarrier_energy
(
eNB_pusch_vars
->
drs_ch_estimates
[
eNB_id
][
i
],
eNB_pusch_vars
->
active_subcarrier
=
subcarrier_energy
(
eNB_pusch_vars
->
drs_ch_estimates
[
eNB_id
][
i
],
...
...
openair1/PHY/TOOLS/lte_phy_scope.c
View file @
33860c16
...
@@ -119,7 +119,7 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void )
...
@@ -119,7 +119,7 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void )
fl_set_xyplot_xgrid
(
fdui
->
pusch_llr
,
FL_GRID_MAJOR
);
fl_set_xyplot_xgrid
(
fdui
->
pusch_llr
,
FL_GRID_MAJOR
);
// I/Q PUCCH comp (format 1)
// I/Q PUCCH comp (format 1)
fdui
->
pucch_comp1
=
fl_add_xyplot
(
FL_POINTS_XYPLOT
,
540
,
480
,
240
,
100
,
"PUCCH
I/Q of MF Output
"
);
fdui
->
pucch_comp1
=
fl_add_xyplot
(
FL_POINTS_XYPLOT
,
540
,
480
,
240
,
100
,
"PUCCH
1 Energy (SR)
"
);
fl_set_object_boxtype
(
fdui
->
pucch_comp1
,
FL_EMBOSSED_BOX
);
fl_set_object_boxtype
(
fdui
->
pucch_comp1
,
FL_EMBOSSED_BOX
);
fl_set_object_color
(
fdui
->
pucch_comp1
,
FL_BLACK
,
FL_YELLOW
);
fl_set_object_color
(
fdui
->
pucch_comp1
,
FL_BLACK
,
FL_YELLOW
);
fl_set_object_lcolor
(
fdui
->
pucch_comp1
,
FL_WHITE
);
// Label color
fl_set_object_lcolor
(
fdui
->
pucch_comp1
,
FL_WHITE
);
// Label color
...
@@ -171,11 +171,12 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
...
@@ -171,11 +171,12 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
int16_t
*
pusch_llr
;
int16_t
*
pusch_llr
;
int16_t
*
pusch_comp
;
int16_t
*
pusch_comp
;
int32_t
*
pucch1_comp
;
int32_t
*
pucch1_comp
;
int32_t
*
pucch1_thres
;
int16_t
*
pucch1ab_comp
;
int16_t
*
pucch1ab_comp
;
float
Re
,
Im
,
ymax
;
float
Re
,
Im
,
ymax
;
float
*
llr
,
*
bit
;
float
*
llr
,
*
bit
;
float
I
[
nsymb_ce
*
2
],
Q
[
nsymb_ce
*
2
];
float
I
[
nsymb_ce
*
2
],
Q
[
nsymb_ce
*
2
];
float
I_pucch
[
10240
],
Q_pucch
[
10240
],
A_pucch
[
10240
],
B_pucch
[
10240
];
float
I_pucch
[
10240
],
Q_pucch
[
10240
],
A_pucch
[
10240
],
B_pucch
[
10240
]
,
C_pucch
[
10240
]
;
float
rxsig_t_dB
[
nb_antennas_rx
][
FRAME_LENGTH_COMPLEX_SAMPLES
];
float
rxsig_t_dB
[
nb_antennas_rx
][
FRAME_LENGTH_COMPLEX_SAMPLES
];
float
chest_t_abs
[
nb_antennas_rx
][
frame_parms
->
ofdm_symbol_size
];
float
chest_t_abs
[
nb_antennas_rx
][
frame_parms
->
ofdm_symbol_size
];
float
*
chest_f_abs
;
float
*
chest_f_abs
;
...
@@ -206,6 +207,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
...
@@ -206,6 +207,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
pusch_llr
=
(
int16_t
*
)
phy_vars_enb
->
lte_eNB_pusch_vars
[
UE_id
]
->
llr
;
pusch_llr
=
(
int16_t
*
)
phy_vars_enb
->
lte_eNB_pusch_vars
[
UE_id
]
->
llr
;
pusch_comp
=
(
int16_t
*
)
phy_vars_enb
->
lte_eNB_pusch_vars
[
UE_id
]
->
rxdataF_comp
[
eNB_id
][
0
];
pusch_comp
=
(
int16_t
*
)
phy_vars_enb
->
lte_eNB_pusch_vars
[
UE_id
]
->
rxdataF_comp
[
eNB_id
][
0
];
pucch1_comp
=
(
int32_t
*
)
phy_vars_enb
->
pucch1_stats
[
UE_id
];
pucch1_comp
=
(
int32_t
*
)
phy_vars_enb
->
pucch1_stats
[
UE_id
];
pucch1_thres
=
(
int32_t
*
)
phy_vars_enb
->
pucch1_stats_thres
[
UE_id
];
pucch1ab_comp
=
(
int16_t
*
)
phy_vars_enb
->
pucch1ab_stats
[
UE_id
];
pucch1ab_comp
=
(
int16_t
*
)
phy_vars_enb
->
pucch1ab_stats
[
UE_id
];
// Received signal in time domain of receive antenna 0
// Received signal in time domain of receive antenna 0
...
@@ -341,12 +343,13 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
...
@@ -341,12 +343,13 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
Q_pucch
[
ind
]
=
pucch1ab_comp
[
2
*
ind
+
1
];
Q_pucch
[
ind
]
=
pucch1ab_comp
[
2
*
ind
+
1
];
A_pucch
[
ind
]
=
10
*
log10
(
pucch1_comp
[
ind
]);
A_pucch
[
ind
]
=
10
*
log10
(
pucch1_comp
[
ind
]);
B_pucch
[
ind
]
=
ind
;
B_pucch
[
ind
]
=
ind
;
C_pucch
[
ind
]
=
(
float
)
pucch1_thres
[
ind
];
}
}
fl_set_xyplot_data
(
form
->
pucch_comp
,
I_pucch
,
Q_pucch
,
10240
,
""
,
""
,
""
);
fl_set_xyplot_data
(
form
->
pucch_comp
,
I_pucch
,
Q_pucch
,
10240
,
""
,
""
,
""
);
fl_set_xyplot_data
(
form
->
pucch_comp1
,
B_pucch
,
A_pucch
,
1024
,
""
,
""
,
""
);
fl_set_xyplot_data
(
form
->
pucch_comp1
,
B_pucch
,
A_pucch
,
1024
,
""
,
""
,
""
);
fl_
set_xyplot_xbounds
(
form
->
pucch_comp
,
-
200
,
200
);
fl_
add_xyplot_overlay
(
form
->
pucch_comp1
,
1
,
B_pucch
,
C_pucch
,
1024
,
FL_RED
);
fl_set_xyplot_ybounds
(
form
->
pucch_comp
,
-
100
,
100
);
//
fl_set_xyplot_ybounds(form->pucch_comp,-100,100);
fl_set_xyplot_ybounds
(
form
->
pucch_comp1
,
10
,
4
0
);
fl_set_xyplot_ybounds
(
form
->
pucch_comp1
,
20
,
8
0
);
}
}
...
...
openair1/PHY/defs.h
View file @
33860c16
...
@@ -313,6 +313,8 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -313,6 +313,8 @@ typedef struct PHY_VARS_eNB_s {
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
[
NUMBER_OF_UE_MAX
];
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
[
NUMBER_OF_UE_MAX
];
uint32_t
rb_mask_ul
[
4
];
/// Information regarding TM5
/// Information regarding TM5
MU_MIMO_mode
mu_mimo_mode
[
NUMBER_OF_UE_MAX
];
MU_MIMO_mode
mu_mimo_mode
[
NUMBER_OF_UE_MAX
];
...
@@ -378,6 +380,7 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -378,6 +380,7 @@ typedef struct PHY_VARS_eNB_s {
int32_t
pucch1_stats_cnt
[
NUMBER_OF_UE_MAX
][
10
];
int32_t
pucch1_stats_cnt
[
NUMBER_OF_UE_MAX
][
10
];
int32_t
pucch1_stats
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
int32_t
pucch1_stats
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
int32_t
pucch1_stats_thres
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
int32_t
pucch1ab_stats_cnt
[
NUMBER_OF_UE_MAX
][
10
];
int32_t
pucch1ab_stats_cnt
[
NUMBER_OF_UE_MAX
][
10
];
int32_t
pucch1ab_stats
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
int32_t
pucch1ab_stats
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
...
...
openair1/PHY/impl_defs_top.h
View file @
33860c16
...
@@ -257,7 +257,7 @@
...
@@ -257,7 +257,7 @@
#define AMP_OVER_2 (AMP>>1)
#define AMP_OVER_2 (AMP>>1)
/// Threshold for PUCCH Format 1 detection
/// Threshold for PUCCH Format 1 detection
#define PUCCH1_THRES
10
#define PUCCH1_THRES
4
/// Threshold for PUCCH Format 1a/1b detection
/// Threshold for PUCCH Format 1a/1b detection
#define PUCCH1a_THRES 4
#define PUCCH1a_THRES 4
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
33860c16
...
@@ -104,7 +104,6 @@ extern uint8_t smbv_frame_cnt;
...
@@ -104,7 +104,6 @@ extern uint8_t smbv_frame_cnt;
#ifdef DIAG_PHY
#ifdef DIAG_PHY
extern
int
rx_sig_fifo
;
extern
int
rx_sig_fifo
;
#endif
#endif
static
unsigned
char
I0_clear
=
1
;
uint8_t
is_SR_subframe
(
PHY_VARS_eNB
*
phy_vars_eNB
,
uint8_t
UE_id
,
uint8_t
sched_subframe
)
uint8_t
is_SR_subframe
(
PHY_VARS_eNB
*
phy_vars_eNB
,
uint8_t
UE_id
,
uint8_t
sched_subframe
)
{
{
...
@@ -476,6 +475,7 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
...
@@ -476,6 +475,7 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
lte_eNB_I0_measurements
(
phy_vars_eNB
,
lte_eNB_I0_measurements
(
phy_vars_eNB
,
subframe
,
0
,
0
,
phy_vars_eNB
->
first_run_I0_measurements
);
phy_vars_eNB
->
first_run_I0_measurements
);
}
}
...
@@ -489,8 +489,6 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
...
@@ -489,8 +489,6 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
#endif
#endif
if
(
I0_clear
==
1
)
I0_clear
=
0
;
}
}
...
@@ -3247,6 +3245,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3247,6 +3245,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->lte_frame_parms.samples_per_tti);
phy_vars_eNB->lte_frame_parms.samples_per_tti);
#endif
#endif
*/
*/
phy_vars_eNB
->
rb_mask_ul
[
0
]
=
0
;
phy_vars_eNB
->
rb_mask_ul
[
1
]
=
0
;
phy_vars_eNB
->
rb_mask_ul
[
2
]
=
0
;
phy_vars_eNB
->
rb_mask_ul
[
3
]
=
0
;
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
remove_7_5_kHz
(
phy_vars_eNB
,
subframe
<<
1
);
remove_7_5_kHz
(
phy_vars_eNB
,
subframe
<<
1
);
remove_7_5_kHz
(
phy_vars_eNB
,(
subframe
<<
1
)
+
1
);
remove_7_5_kHz
(
phy_vars_eNB
,(
subframe
<<
1
)
+
1
);
...
@@ -3395,6 +3398,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3395,6 +3398,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
pusch_active
=
1
;
pusch_active
=
1
;
round
=
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
round
;
round
=
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
round
;
for
(
int
rb
=
0
;
rb
<=
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
nb_rb
;
rb
++
)
{
int
rb2
=
rb
+
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
first_rb
;
phy_vars_eNB
->
rb_mask_ul
[
rb2
>>
5
]
|=
(
1
<<
(
rb2
&
31
));
}
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x (UE_id %d)
\n
"
,
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x (UE_id %d)
\n
"
,
phy_vars_eNB
->
Mod_id
,
harq_pid
,
phy_vars_eNB
->
Mod_id
,
harq_pid
,
...
@@ -3715,6 +3724,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3715,6 +3724,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
for
(
j
=
0
;
j
<
phy_vars_eNB
->
lte_frame_parms
.
nb_antennas_rx
;
j
++
)
for
(
j
=
0
;
j
<
phy_vars_eNB
->
lte_frame_parms
.
nb_antennas_rx
;
j
++
)
//this is the RSSI per RB
//this is the RSSI per RB
phy_vars_eNB
->
eNB_UE_stats
[
i
].
UL_rssi
[
j
]
=
phy_vars_eNB
->
eNB_UE_stats
[
i
].
UL_rssi
[
j
]
=
dB_fixed
(
phy_vars_eNB
->
lte_eNB_pusch_vars
[
i
]
->
ulsch_power
[
j
]
*
dB_fixed
(
phy_vars_eNB
->
lte_eNB_pusch_vars
[
i
]
->
ulsch_power
[
j
]
*
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
)
/
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
)
/
phy_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
)
-
phy_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
)
-
...
@@ -3722,6 +3732,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3722,6 +3732,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
hundred_times_log10_NPRB
[
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
nb_rb
-
1
]
/
100
-
hundred_times_log10_NPRB
[
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
nb_rb
-
1
]
/
100
-
get_hundred_times_delta_IF_eNB
(
phy_vars_eNB
,
i
,
harq_pid
,
0
)
/
100
;
get_hundred_times_delta_IF_eNB
(
phy_vars_eNB
,
i
,
harq_pid
,
0
)
/
100
;
/*
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb) -
phy_vars_eNB->rx_total_gain_eNB_dB -
hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
get_hundred_times_delta_IF_eNB(phy_vars_eNB,i,harq_pid, 0)/100;*/
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
phich_active
=
1
;
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
phich_active
=
1
;
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
phich_ACK
=
1
;
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
phich_ACK
=
1
;
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
...
@@ -3915,6 +3930,34 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3915,6 +3930,34 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
}
else
{
}
else
{
// otherwise we have some PUCCH detection to do
// otherwise we have some PUCCH detection to do
// Null out PUCCH PRBs for noise measurement
switch
(
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
)
{
case
6
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
5
));
//position 5
break
;
case
15
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
14
));
// position 14
break
;
case
25
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
24
));
// position 24
break
;
case
50
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
phy_vars_eNB
->
rb_mask_ul
[
1
]
|=
(
1
<<
17
);
// position 49 (49-32)
break
;
case
75
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
phy_vars_eNB
->
rb_mask_ul
[
2
]
|=
(
1
<<
10
);
// position 74 (74-64)
break
;
case
100
:
phy_vars_eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
phy_vars_eNB
->
rb_mask_ul
[
3
]
|=
(
1
<<
3
);
// position 99 (99-96)
break
;
default:
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
);
break
;
}
if
(
do_SR
==
1
)
{
if
(
do_SR
==
1
)
{
phy_vars_eNB
->
eNB_UE_stats
[
i
].
sr_total
++
;
phy_vars_eNB
->
eNB_UE_stats
[
i
].
sr_total
++
;
...
@@ -3924,7 +3967,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -3924,7 +3967,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
i
,
i
,
phy_vars_eNB
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
,
phy_vars_eNB
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
0
,
// n2_pucch
1
,
// shortened format
0
,
// shortened format, should be use_srs flag, later
&
SR_payload
,
&
SR_payload
,
subframe
,
subframe
,
PUCCH1_THRES
);
PUCCH1_THRES
);
...
@@ -4336,13 +4379,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -4336,13 +4379,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
}
// loop i=0 ... NUMBER_OF_UE_MAX-1
}
// loop i=0 ... NUMBER_OF_UE_MAX-1
if
(
pusch_active
==
0
)
{
//
if (pusch_active == 0) {
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
// LOG_D(PHY,"[eNB] Frame %d, subframe %d Doing I0_measurements\n",
// LOG_D(PHY,"[eNB] Frame %d, subframe %d Doing I0_measurements\n",
// (((subframe)==9)?-1:0) + phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
// (((subframe)==9)?-1:0) + phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
lte_eNB_I0_measurements
(
phy_vars_eNB
,
lte_eNB_I0_measurements
(
phy_vars_eNB
,
subframe
,
0
,
0
,
phy_vars_eNB
->
first_run_I0_measurements
);
phy_vars_eNB
->
first_run_I0_measurements
);
phy_vars_eNB
->
first_run_I0_measurements
=
0
;
}
}
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
...
@@ -4354,9 +4399,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
...
@@ -4354,9 +4399,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
#endif
#endif
if
(
I0_clear
==
1
)
//}
I0_clear
=
0
;
}
#ifdef EMOS
#ifdef EMOS
phy_procedures_emos_eNB_RX
(
subframe
,
phy_vars_eNB
);
phy_procedures_emos_eNB_RX
(
subframe
,
phy_vars_eNB
);
...
...
openair1/SIMULATION/LTE_PHY/pucchsim.c
View file @
33860c16
...
@@ -248,7 +248,7 @@ int main(int argc, char **argv)
...
@@ -248,7 +248,7 @@ int main(int argc, char **argv)
break
;
break
;
default:
default:
msg
(
"Unsupported channel model!
\n
"
);
printf
(
"Unsupported channel model!
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
@@ -260,13 +260,13 @@ int main(int argc, char **argv)
...
@@ -260,13 +260,13 @@ int main(int argc, char **argv)
case
's'
:
case
's'
:
snr0
=
atof
(
optarg
);
snr0
=
atof
(
optarg
);
msg
(
"Setting SNR0 to %f
\n
"
,
snr0
);
printf
(
"Setting SNR0 to %f
\n
"
,
snr0
);
break
;
break
;
case
'S'
:
case
'S'
:
snr1
=
atof
(
optarg
);
snr1
=
atof
(
optarg
);
snr1set
=
1
;
snr1set
=
1
;
msg
(
"Setting SNR1 to %f
\n
"
,
snr1
);
printf
(
"Setting SNR1 to %f
\n
"
,
snr1
);
break
;
break
;
case
'p'
:
case
'p'
:
...
@@ -289,7 +289,7 @@ int main(int argc, char **argv)
...
@@ -289,7 +289,7 @@ int main(int argc, char **argv)
if
((
transmission_mode
!=
1
)
&&
if
((
transmission_mode
!=
1
)
&&
(
transmission_mode
!=
2
)
&&
(
transmission_mode
!=
2
)
&&
(
transmission_mode
!=
6
))
{
(
transmission_mode
!=
6
))
{
msg
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
printf
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
@@ -299,7 +299,7 @@ int main(int argc, char **argv)
...
@@ -299,7 +299,7 @@ int main(int argc, char **argv)
n_tx
=
atoi
(
optarg
);
n_tx
=
atoi
(
optarg
);
if
((
n_tx
==
0
)
||
(
n_tx
>
2
))
{
if
((
n_tx
==
0
)
||
(
n_tx
>
2
))
{
msg
(
"Unsupported number of tx antennas %d
\n
"
,
n_tx
);
printf
(
"Unsupported number of tx antennas %d
\n
"
,
n_tx
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
@@ -309,7 +309,7 @@ int main(int argc, char **argv)
...
@@ -309,7 +309,7 @@ int main(int argc, char **argv)
n_rx
=
atoi
(
optarg
);
n_rx
=
atoi
(
optarg
);
if
((
n_rx
==
0
)
||
(
n_rx
>
2
))
{
if
((
n_rx
==
0
)
||
(
n_rx
>
2
))
{
msg
(
"Unsupported number of rx antennas %d
\n
"
,
n_rx
);
printf
(
"Unsupported number of rx antennas %d
\n
"
,
n_rx
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
@@ -414,7 +414,7 @@ int main(int argc, char **argv)
...
@@ -414,7 +414,7 @@ int main(int argc, char **argv)
msg
(
"[SIM] Using SCM/101
\n
"
);
printf
(
"[SIM] Using SCM/101
\n
"
);
UE2eNB
=
new_channel_desc_scm
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx
,
UE2eNB
=
new_channel_desc_scm
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
channel_model
,
...
@@ -425,7 +425,7 @@ int main(int argc, char **argv)
...
@@ -425,7 +425,7 @@ int main(int argc, char **argv)
if
(
UE2eNB
==
NULL
)
{
if
(
UE2eNB
==
NULL
)
{
msg
(
"Problem generating channel model. Exiting.
\n
"
);
printf
(
"Problem generating channel model. Exiting.
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
@@ -453,7 +453,7 @@ int main(int argc, char **argv)
...
@@ -453,7 +453,7 @@ int main(int argc, char **argv)
PHY_vars_UE
->
lte_frame_parms
.
pucch_config_common
.
nRB_CQI
=
0
;
PHY_vars_UE
->
lte_frame_parms
.
pucch_config_common
.
nRB_CQI
=
0
;
PHY_vars_UE
->
lte_frame_parms
.
pucch_config_common
.
nCS_AN
=
0
;
PHY_vars_UE
->
lte_frame_parms
.
pucch_config_common
.
nCS_AN
=
0
;
pucch_payload
=
1
;
pucch_payload
=
0
;
generate_pucch
(
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
,
generate_pucch
(
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
,
frame_parms
,
frame_parms
,
...
@@ -596,9 +596,7 @@ int main(int argc, char **argv)
...
@@ -596,9 +596,7 @@ int main(int argc, char **argv)
}
}
}
}
lte_eNB_I0_measurements
(
PHY_vars_eNB
,
0
,
1
);
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
...
@@ -646,6 +644,10 @@ int main(int argc, char **argv)
...
@@ -646,6 +644,10 @@ int main(int argc, char **argv)
// if (sig == 1)
// if (sig == 1)
// printf("*");
// printf("*");
lte_eNB_I0_measurements
(
PHY_vars_eNB
,
subframe
,
0
,
1
);
PHY_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dB
=
N0
;
//(int8_t)(sigma2_dB-10*log10(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(12*NB_RB)));
PHY_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dB
=
N0
;
//(int8_t)(sigma2_dB-10*log10(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(12*NB_RB)));
stat
=
rx_pucch
(
PHY_vars_eNB
,
stat
=
rx_pucch
(
PHY_vars_eNB
,
pucch_format
,
pucch_format
,
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
33860c16
...
@@ -1166,7 +1166,7 @@ schedule_ue_spec(
...
@@ -1166,7 +1166,7 @@ schedule_ue_spec(
// this is the normalized RX power
// this is the normalized RX power
eNB_UE_stats
=
mac_xface
->
get_eNB_UE_stats
(
module_idP
,
CC_id
,
rnti
);
eNB_UE_stats
=
mac_xface
->
get_eNB_UE_stats
(
module_idP
,
CC_id
,
rnti
);
normalized_rx_power
=
eNB_UE_stats
->
Po_PUCCH_dBm
;
normalized_rx_power
=
eNB_UE_stats
->
Po_PUCCH_dBm
;
target_rx_power
=
mac_xface
->
get_target_pucch_rx_power
(
module_idP
,
CC_id
)
+
1
0
;
target_rx_power
=
mac_xface
->
get_target_pucch_rx_power
(
module_idP
,
CC_id
)
+
2
0
;
// this assumes accumulated tpc
// this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
...
@@ -1178,6 +1178,7 @@ schedule_ue_spec(
...
@@ -1178,6 +1178,7 @@ schedule_ue_spec(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
pucch_tpc_tx_frame
=
frameP
;
UE_list
->
UE_template
[
CC_id
][
UE_id
].
pucch_tpc_tx_frame
=
frameP
;
UE_list
->
UE_template
[
CC_id
][
UE_id
].
pucch_tpc_tx_subframe
=
subframeP
;
UE_list
->
UE_template
[
CC_id
][
UE_id
].
pucch_tpc_tx_subframe
=
subframeP
;
if
(
normalized_rx_power
>
(
target_rx_power
+
1
))
{
if
(
normalized_rx_power
>
(
target_rx_power
+
1
))
{
tpc
=
0
;
//-1
tpc
=
0
;
//-1
tpc_accumulated
--
;
tpc_accumulated
--
;
...
@@ -1187,9 +1188,11 @@ schedule_ue_spec(
...
@@ -1187,9 +1188,11 @@ schedule_ue_spec(
}
else
{
}
else
{
tpc
=
1
;
//0
tpc
=
1
;
//0
}
}
LOG_D
(
MAC
,
"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d
\n
"
,
/*
LOG_I(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
module_idP,frameP, subframeP,harq_pid,tpc,
module_idP,frameP, subframeP,harq_pid,tpc,
tpc_accumulated
,
normalized_rx_power
,
target_rx_power
);
tpc_accumulated,normalized_rx_power,target_rx_power);*/
}
// Po_PUCCH has been updated
}
// Po_PUCCH has been updated
else
{
else
{
tpc
=
1
;
//0
tpc
=
1
;
//0
...
@@ -1561,7 +1564,7 @@ fill_DLSCH_dci(
...
@@ -1561,7 +1564,7 @@ fill_DLSCH_dci(
eNB
->
common_channels
[
CC_id
].
bcch_active
=
0
;
eNB
->
common_channels
[
CC_id
].
bcch_active
=
0
;
LOG_D
(
MAC
,
"[eNB %d] CC_id %d Frame %d subframeP %d: BCCH active
\n
"
,
module_idP
,
CC_id
,
frameP
,
subframeP
);
LOG_D
(
MAC
,
"[eNB %d] CC_id %d Frame %d subframeP %d: BCCH active
\n
"
,
module_idP
,
CC_id
,
frameP
,
subframeP
);
// randomize frequency allocation for SI
// randomize frequency allocation for SI
first_rb
=
10
;
//(unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
first_rb
=
0
;
//
10;//(unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
/* Where is this from, should be removed!!!!
/* Where is this from, should be removed!!!!
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
33860c16
...
@@ -750,6 +750,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
...
@@ -750,6 +750,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
LOG_T
(
MAC
,
"[eNB %d] Frame %d, subframeP %d, UE %d CC %d : got harq pid %d round %d (nCCE %d, rnti %x,mode %s)
\n
"
,
LOG_T
(
MAC
,
"[eNB %d] Frame %d, subframeP %d, UE %d CC %d : got harq pid %d round %d (nCCE %d, rnti %x,mode %s)
\n
"
,
module_idP
,
frameP
,
subframeP
,
UE_id
,
CC_id
,
harq_pid
,
round
,
nCCE
[
CC_id
],
rnti
,
mode_string
[
eNB_UE_stats
->
mode
]);
module_idP
,
frameP
,
subframeP
,
UE_id
,
CC_id
,
harq_pid
,
round
,
nCCE
[
CC_id
],
rnti
,
mode_string
[
eNB_UE_stats
->
mode
]);
#undef EXMIMO_IOT
#ifndef EXMIMO_IOT
#ifndef EXMIMO_IOT
if
(((
UE_is_to_be_scheduled
(
module_idP
,
CC_id
,
UE_id
)
>
0
))
||
(
round
>
0
)
||
((
frameP
%
10
)
==
0
))
if
(((
UE_is_to_be_scheduled
(
module_idP
,
CC_id
,
UE_id
)
>
0
))
||
(
round
>
0
)
||
((
frameP
%
10
)
==
0
))
...
...
targets/ARCH/COMMON/common_lib.c
View file @
33860c16
...
@@ -45,20 +45,23 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
...
@@ -45,20 +45,23 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
#ifdef ETHERNET
#ifdef ETHERNET
device
->
type
=
ETH_IF
;
device
->
type
=
ETH_IF
;
device
->
func_type
=
BBU_FUNC
;
device
->
func_type
=
BBU_FUNC
;
openair0_dev_init_eth
(
device
,
openair0_cfg
);
printf
(
" openair0_dev_init_eth ...
\n
"
);
printf
(
" openair0_dev_init_eth ...
\n
"
);
return
(
openair0_dev_init_eth
(
device
,
openair0_cfg
));
#elif EXMIMO
#elif EXMIMO
device
->
type
=
EXMIMO_IF
;
device
->
type
=
EXMIMO_IF
;
openair0_dev_init_exmimo
(
device
,
openair0_cfg
);
printf
(
"openair0_dev_init_exmimo...
\n
"
);
printf
(
"openair0_dev_init_exmimo...
\n
"
);
return
(
openair0_dev_init_exmimo
(
device
,
openair0_cfg
));
#elif OAI_USRP
#elif OAI_USRP
device
->
type
=
USRP_IF
;
device
->
type
=
USRP_IF
;
openair0_dev_init_usrp
(
device
,
openair0_cfg
);
printf
(
"openair0_dev_init_usrp ...
\n
"
);
printf
(
"openair0_dev_init_usrp ...
\n
"
);
return
(
openair0_dev_init_usrp
(
device
,
openair0_cfg
));
#elif OAI_BLADERF
#elif OAI_BLADERF
device
->
type
=
BLADERF_IF
;
device
->
type
=
BLADERF_IF
;
openair0_dev_init_bladerf
(
device
,
openair0_cfg
);
printf
(
" openair0_dev_init_bladerf ...
\n
"
);
printf
(
" openair0_dev_init_bladerf ...
\n
"
);
return
(
openair0_dev_init_bladerf
(
device
,
openair0_cfg
));
#endif
#endif
}
}
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
View file @
33860c16
...
@@ -28,7 +28,7 @@ eNBs =
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
eutra_band
=
7
;
downlink_frequency
=
26
8
0000000
L
;
downlink_frequency
=
26
6
0000000
L
;
uplink_frequency_offset
= -
120000000
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
Nid_cell
=
0
;
N_RB_DL
=
25
;
N_RB_DL
=
25
;
...
@@ -143,10 +143,10 @@ eNBs =
...
@@ -143,10 +143,10 @@ eNBs =
NETWORK_INTERFACES
:
NETWORK_INTERFACES
:
{
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
6
/24"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
3
/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
6
/24"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
3
/24"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
};
};
...
...
targets/RT/USER/lte-softmodem.c
View file @
33860c16
...
@@ -1631,6 +1631,8 @@ static void* eNB_thread( void* arg )
...
@@ -1631,6 +1631,8 @@ static void* eNB_thread( void* arg )
pthread_mutex_unlock
(
&
sync_mutex
);
pthread_mutex_unlock
(
&
sync_mutex
);
printf
(
"got sync (eNB_thread)
\n
"
);
int
frame
=
0
;
int
frame
=
0
;
#ifndef EXMIMO
#ifndef EXMIMO
...
@@ -2893,12 +2895,12 @@ int main( int argc, char **argv )
...
@@ -2893,12 +2895,12 @@ int main( int argc, char **argv )
bw
=
0.96e6
;
bw
=
0.96e6
;
#ifndef EXMIMO
#ifndef EXMIMO
openair0_cfg
[
card
].
sample_rate
=
1.92e6
;
openair0_cfg
[
card
].
sample_rate
=
1.92e6
;
openair0_cfg
[
card
].
samples_per_packet
=
256
;
openair0_cfg
[
card
].
samples_per_packet
=
640
;
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
40
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
40
;
openair0_cfg
[
card
].
tx_delay
=
8
;
openair0_cfg
[
card
].
tx_delay
=
6
;
#endif
#endif
}
}
...
@@ -2992,11 +2994,15 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
...
@@ -2992,11 +2994,15 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
openair0
.
func_type
=
BBU_FUNC
;
openair0
.
func_type
=
BBU_FUNC
;
openair0_cfg
[
0
].
log_level
=
glog_level
;
openair0_cfg
[
0
].
log_level
=
glog_level
;
if
((
mode
!=
loop_through_memory
)
&&
if
(
mode
!=
loop_through_memory
){
(
openair0_device_init
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
int
ret
;
ret
=
openair0_device_init
(
&
openair0
,
&
openair0_cfg
[
0
]);
printf
(
"openair0_device_init returns %d
\n
"
,
ret
);
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize device
\n
"
);
printf
(
"Exiting, cannot initialize device
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
}
else
if
(
mode
==
loop_through_memory
)
{
else
if
(
mode
==
loop_through_memory
)
{
}
}
...
@@ -3279,6 +3285,16 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
...
@@ -3279,6 +3285,16 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
#endif
#endif
printf
(
"UE threads created
\n
"
);
printf
(
"UE threads created
\n
"
);
#ifdef USE_MME
while
(
start_UE
==
0
)
{
sleep
(
1
);
}
#endif
}
else
{
}
else
{
if
(
multi_thread
>
0
)
{
if
(
multi_thread
>
0
)
{
init_eNB_proc
();
init_eNB_proc
();
...
@@ -3306,13 +3322,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
...
@@ -3306,13 +3322,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
// Sleep to allow all threads to setup
// Sleep to allow all threads to setup
sleep
(
1
);
sleep
(
1
);
#ifdef USE_MME
while
(
start_UE
==
0
)
{
sleep
(
1
);
}
#endif
#ifndef EXMIMO
#ifndef EXMIMO
...
@@ -3325,6 +3335,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
...
@@ -3325,6 +3335,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
#endif
#endif
printf
(
"Sending sync to all threads
\n
"
);
pthread_mutex_lock
(
&
sync_mutex
);
pthread_mutex_lock
(
&
sync_mutex
);
sync_var
=
0
;
sync_var
=
0
;
...
...
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