Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
zhangtu
openairinterface5G
Commits
4f352079
Commit
4f352079
authored
Oct 19, 2015
by
ABEILLE
Committed by
knopp
Nov 24, 2015
Browse files
merged in changes from abeille (modifications on final svn version)
parent
23bb81d2
Changes
17
Hide whitespace changes
Inline
Side-by-side
openair1/PHY/LTE_ESTIMATION/defs.h
View file @
4f352079
...
...
@@ -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 @
4f352079
...
...
@@ -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
;
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
;
}
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
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]);
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
;
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
++
)
{
// 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
;
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("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
];
}
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
-
dB_fixed
(
frame_parms
->
N_RB_UL
);
}
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
;
}
}
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 @
4f352079
...
...
@@ -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 @
4f352079
...
...
@@ -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 @
4f352079
...
...
@@ -1637,22 +1637,22 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
uint8_t
subframe
);
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
uint8_t
subframe
,
uint8_t
pucch1_thres
);
u
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
uint8_t
subframe
,
uint8_t
pucch1_thres
);
int32_t
rx_pucch_emul
(
PHY_VARS_eNB
*
phy_vars_eNB
,
uint8_t
UE_index
,
PUCCH_FMT_t
fmt
,
uint8_t
n1_pucch_sel
,
uint8_t
*
payload
,
uint8_t
subframe
);
uint8_t
UE_index
,
PUCCH_FMT_t
fmt
,
uint8_t
n1_pucch_sel
,
uint8_t
*
payload
,
uint8_t
subframe
);
/*!
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
4f352079
...
...
@@ -430,15 +430,15 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
}
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
uint8_t
subframe
,
uint8_t
pucch1_thres
)
u
int32_t
rx_pucch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
uint8_t
subframe
,
uint8_t
pucch1_thres
)
{
...
...
@@ -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
"
,
subframe
,
l
,
re
,
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
,%d
) => (%d,%d) x (%d,%d) : (%d,%d)
, stat %d
\n
"
,
subframe
,
phase
,
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
"
,
subframe
,
l2
,
re
,
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d
,%d
) => (%d,%d) x (%d,%d) : (%d,%d)
, stat %d
\n
"
,
subframe
,
phase
,
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 fmt1
a/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
)
>>
1
0
;
*
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
;
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
=
(
phy_vars_eNB
->
pucch1ab_stats_cnt
[
UE_id
][
subframe
]
+
1
)
&
1023
;
((
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
);