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
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,
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
,
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
);
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
UE_id
,
unsigned
char
init_averaging
);
...
...
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
View file @
33860c16
...
...
@@ -39,57 +39,36 @@
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
clear
)
{
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
;
PHY_MEASUREMENTS_eNB
*
phy_measurements
=
&
phy_vars_eN
b
->
PHY_measurements_eNB
[
eNB_id
];
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
;
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
rb
;
int32_t
*
ul_ch
;
int32_t
n0_power_tot
;
int
len
;
int
offset
;
int
Nsymb
=
(
frame_parms
->
Ncp
==
NORMAL
)
?
14
:
12
;
// noise measurements
// for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
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
++
)
{
if
(
clear
==
1
)
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
],
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_dB
[
aarx
]
=
(
unsigned
short
)
dB_fixed
(
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,
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);
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_UL
;
rb
++
)
{
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
++
)
{
if
(
rb
<
12
)
// ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][((19*(frame_parms->ofdm_symbol_size)) + frame_parms->first_carrier_offset + (rb*12))<<1];
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][((
7
*
frame_parms
->
ofdm_symbol_size
)
+
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
<<
1
];
else
if
(
rb
>
12
)
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][((
7
*
frame_parms
->
ofdm_symbol_size
)
+
6
+
(
rb
-
13
)
*
12
)
<<
1
];
else
{
ul_ch
=
NULL
;
// select the 7th symbol in an uplink subframe
offset
=
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
offset
+=
(
7
*
frame_parms
->
ofdm_symbol_size
);
//(((Nsymb*subframe)+7)*frame_parms->ofdm_symbol_size);
ul_ch
=
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aarx
][
offset
];
len
=
12
;
// just do first half of middle PRB for odd number of PRBs
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
(
rb
==
(
frame_parms
->
N_RB_UL
>>
1
)))
{
len
=
6
;
}
if
(
clear
==
1
)
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
if
(
ul_ch
)
{
// 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
,
24
))
*
rx_power_correction
)
+
(
k2
*
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]))
>>
11
;
// 11 and 24 to compensate for repeated signal format
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem"
);
phy_measurements
->
n0_subband_power
[
aarx
][
rb
]
=
signal_energy_nodc
(
ul_ch
,
len
);
//((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
]);
// 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
];
}
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_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
,
unsigned
char
eNB_id
,
unsigned
char
UE_id
,
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
33860c16
...
...
@@ -576,13 +576,13 @@ typedef struct {
/// UL RSSI per receive antenna
int32_t
UL_rssi
[
NB_ANTENNAS_RX
];
/// PUCCH1a/b power (digital linear)
int32_t
Po_PUCCH
;
u
int32_t
Po_PUCCH
;
/// PUCCH1a/b power (dBm)
int32_t
Po_PUCCH_dBm
;
/// 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
int32_t
Po_PUCCH1_above
;
u
int32_t
Po_PUCCH1_above
;
/// Indicator that Po_PUCCH has been updated by PHY
int32_t
Po_PUCCH_update
;
/// 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)
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_power_dB
[
0
],
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
++
)
len
+=
sprintf
(
&
buffer
[
len
],
"%
2
d "
,
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_subband_power_tot_dB
[
i
]);
for
(
i
=
0
;
i
<
phy_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
i
++
)
len
+=
sprintf
(
&
buffer
[
len
],
"%
4
d "
,
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
n0_subband_power_tot_dB
m
[
i
]);
len
+=
sprintf
(
&
buffer
[
len
],
"
\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)
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
[
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
,
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_above
)
-
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),
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
->
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
),
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
sector
);
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,
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
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
33860c16
...
...
@@ -430,7 +430,7 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
}
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
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
...
...
@@ -446,11 +446,11 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
LTE_eNB_COMMON
*
eNB_common_vars
=
&
phy_vars_eNB
->
lte_eNB_common_vars
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_eNB
->
lte_frame_parms
;
// PUCCH_CONFIG_DEDICATED *pucch_config_dedicated = &phy_vars_eNB->pucch_config_dedicated[UE_id];
int8_t
sigma2_dB
=
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_
power_dB
[
0
];
int32_t
*
Po_PUCCH
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH
);
int8_t
sigma2_dB
=
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_
subband_power_tot_dB
[
6
];
u
int32_t
*
Po_PUCCH
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH
);
int32_t
*
Po_PUCCH_dBm
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH_dBm
);
int32_t
*
Po_PUCCH1_below
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_below
);
int32_t
*
Po_PUCCH1_above
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_above
);
u
int32_t
*
Po_PUCCH1_below
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_below
);
u
int32_t
*
Po_PUCCH1_above
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH1_above
);
int32_t
*
Po_PUCCH_update
=
&
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
Po_PUCCH_update
);
uint32_t
u
,
v
,
n
,
aa
;
uint32_t
z
[
12
*
14
];
...
...
@@ -468,7 +468,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
uint32_t
symbol_offset
;
int16_t
stat_ref_re
,
stat_ref_im
,
*
cfo
,
chest_re
,
chest_im
;
int32_t
stat_re
=
0
,
stat_im
=
0
;
int32_t
stat
,
stat_max
=
0
;
u
int32_t
stat
,
stat_max
=
0
;
uint8_t
deltaPUCCH_Shift
=
frame_parms
->
pucch_config_common
.
deltaPUCCH_Shift
;
uint8_t
NRB2
=
frame_parms
->
pucch_config_common
.
nRB_CQI
;
...
...
@@ -478,6 +478,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
uint32_t
u1
=
(
frame_parms
->
Nid_cell
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)])
%
30
;
uint32_t
v0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
subframe
<<
1
];
uint32_t
v1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
1
+
(
subframe
<<
1
)];
int
chL
;
if
(
first_call
==
1
)
{
for
(
i
=
0
;
i
<
10
;
i
++
)
{
...
...
@@ -508,6 +509,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
*/
if
((
deltaPUCCH_Shift
==
0
)
||
(
deltaPUCCH_Shift
>
3
))
{
LOG_E
(
PHY
,
"[eNB] rx_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)
\n
"
,
deltaPUCCH_Shift
);
return
(
-
1
);
...
...
@@ -737,30 +739,35 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
cfo
=
(
frame_parms
->
Ncp
==
0
)
?
&
cfo_pucch_np
[
14
*
phase
]
:
&
cfo_pucch_ep
[
12
*
phase
];
for
(
l
=
0
;
l
<
(
nsymb
>>
1
);
l
++
)
{
stat_re
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
;
stat_im
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
)
;
stat_re
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
))
/
nsymb
;
stat_im
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
))
/
nsymb
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subfram
e
,
l
,
re
,
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
,%d) => (%d,%d) x (%d,%d) : (%d,%d) , stat %d
\n
"
,
subframe
,
phas
e
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
stat_re
,
stat_im
,
stat
);
#endif
}
for
(
l2
=
0
,
l
=
(
nsymb
>>
1
);
l
<
(
nsymb
-
1
);
l
++
,
l2
++
)
{
stat_re
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l2
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l2
<<
1
)])
>>
15
)
;
stat_im
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l2
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l2
<<
1
)])
>>
15
)
;
stat_re
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l2
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l2
<<
1
)])
>>
15
))
/
nsymb
;
stat_im
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l2
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l2
<<
1
)])
>>
15
))
/
nsymb
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subfram
e
,
l2
,
re
,
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
,%d) => (%d,%d) x (%d,%d) : (%d,%d), stat %d
\n
"
,
subframe
,
phas
e
,
l2
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l2
<<
1
],
cfo
[
1
+
(
l2
<<
1
)],
stat_re
,
stat_im
);
stat_re
,
stat_im
,
stat
);
#endif
}
stat
+=
(
stat_re
*
stat_re
)
+
(
stat_im
*
stat_im
);
stat
+=
((
stat_re
*
stat_re
)
+
(
stat_im
*
stat_im
));
}
//re
}
// aa
...
...
@@ -772,16 +779,18 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
//phase
stat_max
/=
(
nsymb
*
12
);
// normalize to energy per symbol and RE
stat_max
*=
nsymb
;
// normalize to energy per symbol
stat_max
/=
(
frame_parms
->
N_RB_UL
*
12
);
//
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d
\n
"
,
stat
,
stat_max
,
phase_max
);
#endif
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH fmt
0: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dBm
,
pucch1_thres
,
phase_max
);
LOG_D
(
PHY
,
"[eNB] PUCCH fmt
1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_subband_power_tot_dBm
[
6
]
,
pucch1_thres
,
phase_max
);
#endif
phy_vars_eNB
->
pucch1_stats
[
UE_id
][(
subframe
<<
10
)
+
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
]]
=
stat_max
;
phy_vars_eNB
->
pucch1_stats_thres
[
UE_id
][(
subframe
<<
10
)
+
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
]]
=
sigma2_dB
+
pucch1_thres
;
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
]
=
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
]
+
1
)
&
1023
;
/*
...
...
@@ -798,13 +807,13 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
if
(
sigma2_dB
<
(
dB_fixed
(
stat_max
)
-
pucch1_thres
))
{
*
payload
=
1
;
*
Po_PUCCH1_above
=
((
*
Po_PUCCH1_above
<<
9
)
+
(
stat_max
<<
9
)
+
1024
)
>>
10
;
// LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max);
}
else
{
*
payload
=
0
;
*
Po_PUCCH1_below
=
((
*
Po_PUCCH1_below
<<
9
)
+
(
stat_max
<<
9
)
+
1024
)
>>
10
;
}
LOG_D
(
PHY
,
"[eNB] PUCCH fmt
0: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_power_tot_dBm
,
pucch1_thres
,
dB_fixed
(
*
Po_PUCCH1_below
),
dB_fixed
(
*
Po_PUCCH1_above
));
LOG_D
(
PHY
,
"[eNB] PUCCH fmt
1: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
phy_vars_eNB
->
PHY_measurements_eNB
[
0
].
n0_subband_power_tot_dBm
[
6
]
,
pucch1_thres
,
dB_fixed
(
*
Po_PUCCH1_below
),
dB_fixed
(
*
Po_PUCCH1_above
));
*
Po_PUCCH_update
=
1
;
}
else
if
((
fmt
==
pucch_format1a
)
||
(
fmt
==
pucch_format1b
))
{
...
...
@@ -813,7 +822,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
LOG_I
(
PHY
,
"Doing PUCCH detection for format 1a/1b
\n
"
);
#endif
for
(
phase
=
0
;
phase
<
7
;
phase
++
)
{
for
(
phase
=
3
;
phase
<
4
;
phase
++
){
//phase=
0; phase<7; phase++) {
stat
=
0
;
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
...
...
@@ -844,6 +853,9 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
#endif
}
for
(
l2
=
0
,
l
=
(
nsymb
>>
1
);
l
<
(
nsymb
-
1
);
l
++
,
l2
++
)
{
if
((
l2
<
2
)
||
((
l2
>
(
nsymb
>>
1
)
-
3
))
)
{
// data symbols
stat_re
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l2
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l2
<<
1
)])
>>
15
);
...
...
@@ -863,34 +875,36 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
stat
+=
(((
stat_re
*
stat_re
))
+
((
stat_im
*
stat_im
))
+
((
stat_ref_re
*
stat_ref_re
))
+
((
stat_ref_im
*
stat_ref_im
)));
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"aa%d re %d : phase %d : stat %d
\n
"
,
aa
,
re
,
phase
,
stat
);
#endif
stat
+=
((((
stat_re
*
stat_re
))
+
((
stat_im
*
stat_im
))
+
((
stat_ref_re
*
stat_ref_re
))
+
((
stat_ref_im
*
stat_ref_im
)))
/
nsymb
);
}
//re
}
// aa
#ifdef DEBUG_PUCCH_RX
LOG_I
(
PHY
,
"phase %d : stat %d
\n
"
,
phase
,
stat
);
LOG_I
(
PHY
,
"
Format 1A:
phase %d : stat %d
\n
"
,
phase
,
stat
);
#endif
if
(
stat
>
stat_max
)
{
stat_max
=
stat
;
phase_max
=
phase
;
}
}
//phase
stat_max
/=
(
nsymb
*
12
);
//normalize to energy per symbol and RE
#ifdef DEBUG_PUCCH_RX
LOG_
I
(
PHY
,
"[eNB] PUCCH fmt1
: stat_max : %d, phase_max : %d
\n
"
,
stat_max
,
phase_max
);
#endif
stat_max
/=
(
12
);
//normalize to energy per symbol and RE
//
#ifdef DEBUG_PUCCH_RX
LOG_
D
(
PHY
,
"[eNB] PUCCH fmt1a/b
: stat_max : %d, phase_max : %d
\n
"
,
stat_max
,
phase_max
);
//
#endif
stat_re
=
0
;
stat_im
=
0
;
LOG_D
(
PHY
,
"PUCCH1A : Po_PUCCH before %d dB (%d)
\n
"
,
dB_fixed
(
*
Po_PUCCH
),
*
Po_PUCCH
);
*
Po_PUCCH
=
((
*
Po_PUCCH
<<
9
)
+
(
stat_max
<<
9
)
+
1024
)
>>
10
;
*
Po_PUCCH_dBm
=
dB_fixed
(
*
Po_PUCCH
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
;
*
Po_PUCCH
=
((
*
Po_PUCCH
>>
1
)
+
((
stat_max
)
>>
1
))
;
*
Po_PUCCH_dBm
=
dB_fixed
(
*
Po_PUCCH
/
frame_parms
->
N_RB_UL
)
-
phy_vars_eNB
->
rx_total_gain_eNB_dB
;
*
Po_PUCCH_update
=
1
;
LOG_D
(
PHY
,
"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d
\n
"
,
...
...
@@ -906,6 +920,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
*
Po_PUCCH
=
((
*
Po_PUCCH
*
1023
)
+
stat_max
)
>>
10
;
chL
=
(
nsymb
>>
1
)
-
4
;
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
for
(
re
=
0
;
re
<
12
;
re
++
)
{
chest_re
=
0
;
...
...
@@ -915,8 +931,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
// channel estimate for first slot
for
(
l
=
2
;
l
<
(
nsymb
>>
1
)
-
2
;
l
++
)
{
off
=
(
re
<<
1
)
+
(
24
*
l
);
chest_re
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
;
chest_im
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
)
;
chest_re
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
))
/
chL
;
chest_im
+=
(((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
))
/
chL
;
}
#ifdef DEBUG_PUCCH_RX
...
...
@@ -928,8 +944,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off
=
(
re
<<
1
)
+
(
24
*
l
);
tmp_re
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
);
tmp_im
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
);
stat_re
+=
((
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
)
;
stat_im
+=
((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
)
;
stat_re
+=
((
(
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
))
/
4
;
stat_im
+=
((
(
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
...
...
@@ -943,8 +959,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off
=
(
re
<<
1
)
+
(
24
*
l
);
tmp_re
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
);
tmp_im
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
);
stat_re
+=
((
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
);
stat_im
+=
((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
);
stat_re
+=
((
(
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
)
/
4
);
stat_im
+=
((
(
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
)
/
4
);
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
...
...
@@ -960,8 +976,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
// channel estimate for second slot
for
(
l
=
2
;
l
<
(
nsymb
>>
1
)
-
2
;
l
++
)
{
off
=
(
re
<<
1
)
+
(
24
*
l
)
+
(
nsymb
>>
1
)
*
24
;
chest_re
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
;
chest_im
+=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
)
;
chest_re
+=
((
(
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
))
/
chL
;
chest_im
+=
(((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
))
/
chL
;
}
#ifdef DEBUG_PUCCH_RX
...
...
@@ -973,8 +989,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off
=
(
re
<<
1
)
+
(
24
*
l
)
+
(
nsymb
>>
1
)
*
24
;
tmp_re
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
);
tmp_im
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
);
stat_re
+=
((
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
)
;
stat_im
+=
((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
)
;
stat_re
+=
((
(
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
))
/
4
;
stat_im
+=
((
(
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
...
...
@@ -988,8 +1004,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off
=
(
re
<<
1
)
+
(
24
*
l
)
+
(
nsymb
>>
1
)
*
24
;
tmp_re
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
l
<<
1
])
>>
15
)
-
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
);
tmp_im
=
((
rxcomp
[
aa
][
off
]
*
(
int32_t
)
cfo
[
1
+
(
l
<<
1
)])
>>
15
)
+
((
rxcomp
[
aa
][
1
+
off
]
*
(
int32_t
)
cfo
[(
l
<<
1
)])
>>
15
);
stat_re
+=
((
tmp_re
*
chest_re
)
>>
9
)
+
((
tmp_im
*
chest_im
)
>>
9
)
;
stat_im
+=
((
tmp_re
*
chest_im
)
>>
9
)
-
((
tmp_im
*
chest_re
)
>>
9
)
;
stat_re
+=
((
(
tmp_re
*
chest_re
)
>>
15
)
+
((
tmp_im
*
chest_im
)
>>
15
))
/
4
;
stat_im
+=
((
(
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
...
...
@@ -1007,20 +1023,27 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
// aa
#ifdef DEBUG_PUCCH_RX
LOG_
D
(
PHY
,
"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)
\n
"
,
subframe
,
stat_re
,
stat_im
,
LOG_
I
(
PHY
,
"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)
\n
"
,
subframe
,
stat_re
,
stat_im
,
(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]));
#endif
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
0
]
=
stat_re
;
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
1
]
=
stat_im
;
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
0
]
=
(
int16_t
)(
stat_re
)
;
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
1
]
=
(
int16_t
)(
stat_im
)
;
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
=
(
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
+
1
)
&
1023
;
*
payload
=
(
stat_re
<
0
)
?
1
:
0
;
if
(
fmt
==
pucch_format1b
)
*
(
1
+
payload
)
=
(
stat_im
<
0
)
?
1
:
0
;
}
else
{
// insufficient energy on PUCCH so NAK
*
payload
=
0
;
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
0
]
=
(
int16_t
)(
stat_re
);
((
int16_t
*
)
&
phy_vars_eNB
->
pucch1ab_stats
[
UE_id
][(
subframe
<<
10
)
+
(
phy_vars_eNB
->
pucch1_stats_cnt
[
UE_id
][
subframe
])])[
1
]
=
(
int16_t
)(
stat_im
);
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
=
(
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
+
1
)
&
1023
;
*
payload
=
(
stat_re
<
0
)
?
1
:
0
;
if
(
fmt
==
pucch_format1b
)
*
(
1
+
payload
)
=
0
;
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
33860c16
...
...
@@ -1657,8 +1657,15 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
}
}
else
{
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],
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
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
],
...
...
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 )
fl_set_xyplot_xgrid
(
fdui
->
pusch_llr
,
FL_GRID_MAJOR
);
// 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_color
(
fdui
->
pucch_comp1
,
FL_BLACK
,
FL_YELLOW
);
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,
int16_t
*
pusch_llr
;
int16_t
*
pusch_comp
;
int32_t
*
pucch1_comp
;
int32_t
*
pucch1_thres
;
int16_t
*
pucch1ab_comp
;
float
Re
,
Im
,
ymax
;
float
*
llr
,
*
bit
;
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
chest_t_abs
[
nb_antennas_rx
][
frame_parms
->
ofdm_symbol_size
];
float
*
chest_f_abs
;
...
...
@@ -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_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_thres
=
(
int32_t
*
)
phy_vars_enb
->
pucch1_stats_thres
[
UE_id
];
pucch1ab_comp
=
(
int16_t
*
)
phy_vars_enb
->
pucch1ab_stats
[
UE_id
];
// Received signal in time domain of receive antenna 0
...
...
@@ -341,12 +343,13 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
Q_pucch
[
ind
]
=
pucch1ab_comp
[
2
*
ind
+
1
];
A_pucch
[
ind
]
=
10
*
log10
(
pucch1_comp
[
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_comp1
,
B_pucch
,
A_pucch
,
1024
,
""
,
""
,
""
);
fl_
set_xyplot_xbounds
(
form
->
pucch_comp
,
-
200
,
200
);
fl_set_xyplot_ybounds
(
form
->
pucch_comp
,
-
100
,
100
);
fl_set_xyplot_ybounds
(
form
->
pucch_comp1
,
10
,
4
0
);
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_comp1
,
20
,
8
0
);
}
...
...
openair1/PHY/defs.h
View file @
33860c16
...
...
@@ -313,6 +313,8 @@ typedef struct PHY_VARS_eNB_s {
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
[
NUMBER_OF_UE_MAX
];
uint32_t
rb_mask_ul
[
4
];
/// Information regarding TM5
MU_MIMO_mode
mu_mimo_mode
[
NUMBER_OF_UE_MAX
];
...
...
@@ -378,6 +380,7 @@ typedef struct PHY_VARS_eNB_s {
int32_t
pucch1_stats_cnt
[
NUMBER_OF_UE_MAX
][
10
];
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
[
NUMBER_OF_UE_MAX
][
10
*
1024
];
...
...
openair1/PHY/impl_defs_top.h
View file @
33860c16
...
...
@@ -257,7 +257,7 @@
#define AMP_OVER_2 (AMP>>1)
/// Threshold for PUCCH Format 1 detection
#define PUCCH1_THRES
10
#define PUCCH1_THRES
4
/// Threshold for PUCCH Format 1a/1b detection
#define PUCCH1a_THRES 4
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
33860c16
...
...
@@ -104,7 +104,6 @@ extern uint8_t smbv_frame_cnt;
#ifdef DIAG_PHY
extern
int
rx_sig_fifo
;
#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
)
{
...
...
@@ -476,6 +475,7 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
if
(
abstraction_flag
==
0
)
{
lte_eNB_I0_measurements
(
phy_vars_eNB
,
subframe
,
0
,
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
#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_
phy_vars_eNB->lte_frame_parms.samples_per_tti);
#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
)
{
remove_7_5_kHz
(
phy_vars_eNB
,
subframe
<<
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_
pusch_active
=
1
;
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
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
,
...
...
@@ -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
++
)
//this is the RSSI per RB
phy_vars_eNB
->
eNB_UE_stats
[
i
].
UL_rssi
[
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
->
lte_frame_parms
.
ofdm_symbol_size
)
-
...
...
@@ -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
-
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_ACK
=
1
;
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_
}
else
{
// 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
)
{
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_
i
,
phy_vars_eNB
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
1
,
// shortened format
0
,
// shortened format, should be use_srs flag, later
&
SR_payload
,
subframe
,
PUCCH1_THRES
);
...
...
@@ -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
if
(
pusch_active
==
0
)
{
//
if (pusch_active == 0) {
if
(
abstraction_flag
==
0
)
{
// 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);
lte_eNB_I0_measurements
(
phy_vars_eNB
,
subframe
,
0
,
phy_vars_eNB
->
first_run_I0_measurements
);
phy_vars_eNB
->
first_run_I0_measurements
=
0
;
}
#ifdef PHY_ABSTRACTION
...
...
@@ -4354,9 +4399,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
#endif
if
(
I0_clear
==
1
)
I0_clear
=
0
;
}
//}
#ifdef EMOS
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)
break
;
default:
msg
(
"Unsupported channel model!
\n
"
);
printf
(
"Unsupported channel model!
\n
"
);
exit
(
-
1
);
}
...
...
@@ -260,13 +260,13 @@ int main(int argc, char **argv)
case
's'
:
snr0
=
atof
(
optarg
);
msg
(
"Setting SNR0 to %f
\n
"
,
snr0
);
printf
(
"Setting SNR0 to %f
\n
"
,
snr0
);
break
;
case
'S'
:
snr1
=
atof
(
optarg
);
snr1set
=
1
;
msg
(
"Setting SNR1 to %f
\n
"
,
snr1
);
printf
(
"Setting SNR1 to %f
\n
"
,
snr1
);
break
;
case
'p'
:
...
...
@@ -289,7 +289,7 @@ int main(int argc, char **argv)
if
((
transmission_mode
!=
1
)
&&
(
transmission_mode
!=
2
)
&&
(
transmission_mode
!=
6
))
{
msg
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
printf
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
exit
(
-
1
);
}
...
...
@@ -299,7 +299,7 @@ int main(int argc, char **argv)
n_tx
=
atoi
(
optarg
);
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
);
}
...
...
@@ -309,7 +309,7 @@ int main(int argc, char **argv)
n_rx
=
atoi
(
optarg
);
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
);
}
...
...
@@ -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
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
...
...
@@ -425,7 +425,7 @@ int main(int argc, char **argv)
if
(
UE2eNB
==
NULL
)
{
msg
(
"Problem generating channel model. Exiting.
\n
"
);
printf
(
"Problem generating channel model. Exiting.
\n
"
);
exit
(
-
1
);
}
...
...
@@ -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
.
nCS_AN
=
0
;
pucch_payload
=
1
;
pucch_payload
=
0
;
generate_pucch
(
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
,
frame_parms
,
...
...
@@ -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
(
aa
=
0
;
aa
<
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
...
...
@@ -646,6 +644,10 @@ int main(int argc, char **argv)
// if (sig == 1)
// 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)));
stat
=
rx_pucch
(
PHY_vars_eNB
,
pucch_format
,
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
33860c16
...
...
@@ -1166,7 +1166,7 @@ schedule_ue_spec(
// this is the normalized RX power
eNB_UE_stats
=
mac_xface
->
get_eNB_UE_stats
(
module_idP
,
CC_id
,
rnti
);
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
// 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(
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
;
if
(
normalized_rx_power
>
(
target_rx_power
+
1
))
{
tpc
=
0
;
//-1
tpc_accumulated
--
;
...
...
@@ -1187,9 +1188,11 @@ schedule_ue_spec(
}
else
{
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,
tpc_accumulated
,
normalized_rx_power
,
target_rx_power
);
tpc_accumulated,normalized_rx_power,target_rx_power);*/
}
// Po_PUCCH has been updated
else
{
tpc
=
1
;
//0
...
...
@@ -1561,7 +1564,7 @@ fill_DLSCH_dci(
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
);
// 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!!!!
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
33860c16
...
...
@@ -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
"
,
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
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
#ifdef ETHERNET
device
->
type
=
ETH_IF
;
device
->
func_type
=
BBU_FUNC
;
openair0_dev_init_eth
(
device
,
openair0_cfg
);
printf
(
" openair0_dev_init_eth ...
\n
"
);
return
(
openair0_dev_init_eth
(
device
,
openair0_cfg
));
#elif EXMIMO
device
->
type
=
EXMIMO_IF
;
openair0_dev_init_exmimo
(
device
,
openair0_cfg
);
printf
(
"openair0_dev_init_exmimo...
\n
"
);
return
(
openair0_dev_init_exmimo
(
device
,
openair0_cfg
));
#elif OAI_USRP
device
->
type
=
USRP_IF
;
openair0_dev_init_usrp
(
device
,
openair0_cfg
);
printf
(
"openair0_dev_init_usrp ...
\n
"
);
return
(
openair0_dev_init_usrp
(
device
,
openair0_cfg
));
#elif OAI_BLADERF
device
->
type
=
BLADERF_IF
;
openair0_dev_init_bladerf
(
device
,
openair0_cfg
);
printf
(
" openair0_dev_init_bladerf ...
\n
"
);
return
(
openair0_dev_init_bladerf
(
device
,
openair0_cfg
));
#endif
}
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
View file @
33860c16
...
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
downlink_frequency
=
26
8
0000000
L
;
downlink_frequency
=
26
6
0000000
L
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
N_RB_DL
=
25
;
...
...
@@ -143,10 +143,10 @@ eNBs =
NETWORK_INTERFACES
:
{
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_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
};
...
...
targets/RT/USER/lte-softmodem.c
View file @
33860c16
...
...
@@ -1631,6 +1631,8 @@ static void* eNB_thread( void* arg )
pthread_mutex_unlock
(
&
sync_mutex
);
printf
(
"got sync (eNB_thread)
\n
"
);
int
frame
=
0
;
#ifndef EXMIMO
...
...
@@ -2893,12 +2895,12 @@ int main( int argc, char **argv )
bw
=
0.96e6
;
#ifndef EXMIMO
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
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
40
;
openair0_cfg
[
card
].
tx_delay
=
8
;
openair0_cfg
[
card
].
tx_delay
=
6
;
#endif
}
...
...
@@ -2992,11 +2994,15 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
openair0
.
func_type
=
BBU_FUNC
;
openair0_cfg
[
0
].
log_level
=
glog_level
;
if
((
mode
!=
loop_through_memory
)
&&
(
openair0_device_init
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
if
(
mode
!=
loop_through_memory
){
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
"
);
exit
(
-
1
);
}
}
else
if
(
mode
==
loop_through_memory
)
{
}
...
...
@@ -3279,6 +3285,16 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
#endif
printf
(
"UE threads created
\n
"
);
#ifdef USE_MME
while
(
start_UE
==
0
)
{
sleep
(
1
);
}
#endif
}
else
{
if
(
multi_thread
>
0
)
{
init_eNB_proc
();
...
...
@@ -3306,13 +3322,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
// Sleep to allow all threads to setup
sleep
(
1
);
#ifdef USE_MME
while
(
start_UE
==
0
)
{
sleep
(
1
);
}
#endif
#ifndef EXMIMO
...
...
@@ -3325,6 +3335,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
#endif
printf
(
"Sending sync to all threads
\n
"
);
pthread_mutex_lock
(
&
sync_mutex
);
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