Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
30a6c04b
Commit
30a6c04b
authored
Sep 27, 2021
by
rmagueta
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/bandwidth-testing' into bandwidth-testing-abs
# Conflicts: # openair1/PHY/NR_TRANSPORT/pucch_rx.c
parents
816ac1a6
46930d22
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
78 additions
and
49 deletions
+78
-49
executables/nr-ru.c
executables/nr-ru.c
+8
-7
openair1/PHY/INIT/nr_init_ru.c
openair1/PHY/INIT/nr_init_ru.c
+10
-4
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+4
-3
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+3
-2
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+6
-12
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+12
-11
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+3
-0
openair1/SIMULATION/NR_PHY/pucchsim.c
openair1/SIMULATION/NR_PHY/pucchsim.c
+28
-8
openair2/ENB_APP/enb_paramdef.h
openair2/ENB_APP/enb_paramdef.h
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+1
-1
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+2
-0
No files found.
executables/nr-ru.c
View file @
30a6c04b
...
@@ -712,7 +712,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
...
@@ -712,7 +712,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
int
slot_type
=
nr_slot_select
(
cfg
,
frame
,
slot
%
fp
->
slots_per_frame
);
int
slot_type
=
nr_slot_select
(
cfg
,
frame
,
slot
%
fp
->
slots_per_frame
);
int
prevslot_type
=
nr_slot_select
(
cfg
,
frame
,(
slot
+
(
fp
->
slots_per_frame
-
1
))
%
fp
->
slots_per_frame
);
int
prevslot_type
=
nr_slot_select
(
cfg
,
frame
,(
slot
+
(
fp
->
slots_per_frame
-
1
))
%
fp
->
slots_per_frame
);
int
nextslot_type
=
nr_slot_select
(
cfg
,
frame
,(
slot
+
1
)
%
fp
->
slots_per_frame
);
int
nextslot_type
=
nr_slot_select
(
cfg
,
frame
,(
slot
+
1
)
%
fp
->
slots_per_frame
);
int
sf_extension
=
0
;
//sf_extension = ru->sf_extension
;
int
sf_extension
=
0
;
int
siglen
=
fp
->
get_samples_per_slot
(
slot
,
fp
);
int
siglen
=
fp
->
get_samples_per_slot
(
slot
,
fp
);
int
flags
=
1
;
int
flags
=
1
;
...
@@ -738,9 +738,10 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
...
@@ -738,9 +738,10 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
flags
=
3
;
// end of burst
flags
=
3
;
// end of burst
}
}
if
(
slot_type
==
NR_DOWNLINK_SLOT
&&
prevslot_type
==
NR_UPLINK_SLOT
)
if
(
slot_type
==
NR_DOWNLINK_SLOT
&&
prevslot_type
==
NR_UPLINK_SLOT
)
{
flags
=
2
;
// start of burst
flags
=
2
;
// start of burst
sf_extension
=
ru
->
sf_extension
;
}
if
(
slot_type
==
NR_DOWNLINK_SLOT
&&
nextslot_type
==
NR_UPLINK_SLOT
)
if
(
slot_type
==
NR_DOWNLINK_SLOT
&&
nextslot_type
==
NR_UPLINK_SLOT
)
flags
=
3
;
// end of burst
flags
=
3
;
// end of burst
}
}
...
@@ -773,7 +774,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
...
@@ -773,7 +774,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU
,
slot
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU
,
slot
);
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)
-
sf_extension
]
;
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)
]
-
sf_extension
*
sizeof
(
int32_t
)
;
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
)
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
)
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
...
@@ -784,8 +785,8 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
...
@@ -784,8 +785,8 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
siglen
+
sf_extension
,
siglen
+
sf_extension
,
ru
->
nb_tx
,
ru
->
nb_tx
,
flags
);
flags
);
LOG_D
(
PHY
,
"[TXPATH] RU %d aa %d tx_rf, writing to TS %llu,
frame
%d, unwrapped_frame %d, slot %d, flags %d, siglen+sf_extension %d, returned %d, E %f
\n
"
,
ru
->
idx
,
i
,
LOG_D
(
PHY
,
"[TXPATH] RU %d aa %d tx_rf, writing to TS %llu,
%d.
%d, unwrapped_frame %d, slot %d, flags %d, siglen+sf_extension %d, returned %d, E %f
\n
"
,
ru
->
idx
,
i
,
(
long
long
unsigned
int
)(
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
),
frame
,
proc
->
frame_tx_unwrap
,
slot
,
flags
,
siglen
+
sf_extension
,
txs
,
10
*
log10
((
double
)
signal_energy
(
txp
[
0
],
siglen
+
sf_extension
)));
(
long
long
unsigned
int
)(
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
),
frame
,
slot
,
proc
->
frame_tx_unwrap
,
slot
,
flags
,
siglen
+
sf_extension
,
txs
,
10
*
log10
((
double
)
signal_energy
(
txp
[
0
],
siglen
+
sf_extension
)));
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
//AssertFatal(txs == 0,"trx write function error %d\n", txs);
//AssertFatal(txs == 0,"trx write function error %d\n", txs);
}
}
...
@@ -2069,7 +2070,7 @@ static void NRRCconfig_RU(void) {
...
@@ -2069,7 +2070,7 @@ static void NRRCconfig_RU(void) {
RC
.
ru
[
j
]
->
max_pdschReferenceSignalPower
=
*
(
RUParamList
.
paramarray
[
j
][
RU_MAX_RS_EPRE_IDX
].
uptr
);;
RC
.
ru
[
j
]
->
max_pdschReferenceSignalPower
=
*
(
RUParamList
.
paramarray
[
j
][
RU_MAX_RS_EPRE_IDX
].
uptr
);;
RC
.
ru
[
j
]
->
max_rxgain
=
*
(
RUParamList
.
paramarray
[
j
][
RU_MAX_RXGAIN_IDX
].
uptr
);
RC
.
ru
[
j
]
->
max_rxgain
=
*
(
RUParamList
.
paramarray
[
j
][
RU_MAX_RXGAIN_IDX
].
uptr
);
RC
.
ru
[
j
]
->
num_bands
=
RUParamList
.
paramarray
[
j
][
RU_BAND_LIST_IDX
].
numelt
;
RC
.
ru
[
j
]
->
num_bands
=
RUParamList
.
paramarray
[
j
][
RU_BAND_LIST_IDX
].
numelt
;
RC
.
ru
[
j
]
->
sf_extension
=
*
(
RUParamList
.
paramarray
[
j
][
RU_SF_EXTENSION_IDX
].
uptr
);
for
(
i
=
0
;
i
<
RC
.
ru
[
j
]
->
num_bands
;
i
++
)
RC
.
ru
[
j
]
->
band
[
i
]
=
RUParamList
.
paramarray
[
j
][
RU_BAND_LIST_IDX
].
iptr
[
i
];
for
(
i
=
0
;
i
<
RC
.
ru
[
j
]
->
num_bands
;
i
++
)
RC
.
ru
[
j
]
->
band
[
i
]
=
RUParamList
.
paramarray
[
j
][
RU_BAND_LIST_IDX
].
iptr
[
i
];
}
//strcmp(local_rf, "yes") == 0
}
//strcmp(local_rf, "yes") == 0
else
{
else
{
...
...
openair1/PHY/INIT/nr_init_ru.c
View file @
30a6c04b
...
@@ -60,10 +60,12 @@ int nr_phy_init_RU(RU_t *ru) {
...
@@ -60,10 +60,12 @@ int nr_phy_init_RU(RU_t *ru) {
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
// Allocate 10 subframes of I/Q TX signal data (time) if not
// Allocate 10 subframes of I/Q TX signal data (time) if not
ru
->
common
.
txdata
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame
*
sizeof
(
int32_t
)
);
ru
->
common
.
txdata
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
ru
->
sf_extension
+
(
fp
->
samples_per_frame
*
sizeof
(
int32_t
)
));
LOG_I
(
PHY
,
"[INIT] common.txdata[%d] = %p (%lu bytes,sf_extension %d)
\n
"
,
i
,
ru
->
common
.
txdata
[
i
],
(
ru
->
sf_extension
+
fp
->
samples_per_frame
)
*
sizeof
(
int32_t
),
ru
->
sf_extension
);
ru
->
common
.
txdata
[
i
]
=
&
ru
->
common
.
txdata
[
i
][
ru
->
sf_extension
];
LOG_I
(
PHY
,
"[INIT] common.txdata[%d] = %p (%lu bytes)
\n
"
,
i
,
ru
->
common
.
txdata
[
i
],
LOG_I
(
PHY
,
"[INIT] common.txdata[%d] = %p
\n
"
,
i
,
ru
->
common
.
txdata
[
i
]);
fp
->
samples_per_frame
*
sizeof
(
int32_t
));
}
}
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
{
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
{
...
@@ -176,7 +178,11 @@ void nr_phy_free_RU(RU_t *ru)
...
@@ -176,7 +178,11 @@ void nr_phy_free_RU(RU_t *ru)
free_and_zero
(
ru
->
frame_parms
);
free_and_zero
(
ru
->
frame_parms
);
if
(
ru
->
if_south
<=
REMOTE_IF5
)
{
// this means REMOTE_IF5 or LOCAL_RF, so free memory for time-domain signals
if
(
ru
->
if_south
<=
REMOTE_IF5
)
{
// this means REMOTE_IF5 or LOCAL_RF, so free memory for time-domain signals
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
free_and_zero
(
ru
->
common
.
txdata
[
i
]);
int32_t
*
ptr
;
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
ptr
=&
ru
->
common
.
txdata
[
i
][
-
ru
->
sf_extension
];
free_and_zero
(
ptr
);
}
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
free_and_zero
(
ru
->
common
.
rxdata
[
i
]);
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
free_and_zero
(
ru
->
common
.
rxdata
[
i
]);
free_and_zero
(
ru
->
common
.
txdata
);
free_and_zero
(
ru
->
common
.
txdata
);
free_and_zero
(
ru
->
common
.
rxdata
);
free_and_zero
(
ru
->
common
.
rxdata
);
...
...
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
30a6c04b
...
@@ -114,12 +114,13 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
...
@@ -114,12 +114,13 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
if
(
s
==
first_symb
)
{
if
(
s
==
first_symb
)
{
nb_symb
[
rb
]
=
0
;
nb_symb
[
rb
]
=
0
;
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
}
}
offset0
=
(
slot
&
3
)
*
(
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
)
+
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
offset0
=
(
slot
&
3
)
*
(
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
)
+
(
frame_parms
->
first_carrier_offset
+
(
rb
*
12
))
%
frame_parms
->
ofdm_symbol_size
;
if
((
gNB
->
rb_mask_ul
[
s
][
rb
>>
5
]
&
(
1
<<
(
rb
&
31
)))
==
0
)
{
// check that rb was not used in this subframe
if
((
gNB
->
rb_mask_ul
[
s
][
rb
>>
5
]
&
(
1
<<
(
rb
&
31
)))
==
0
)
{
// check that rb was not used in this subframe
nb_symb
[
rb
]
++
;
nb_symb
[
rb
]
++
;
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
if
(
s
==
first_symb
)
measurements
->
n0_subband_power
[
aarx
][
rb
]
=
0
;
offset
=
offset0
+
(
s
*
frame_parms
->
ofdm_symbol_size
);
offset
=
offset0
+
(
s
*
frame_parms
->
ofdm_symbol_size
);
ul_ch
=
&
common_vars
->
rxdataF
[
aarx
][
offset
];
ul_ch
=
&
common_vars
->
rxdataF
[
aarx
][
offset
];
len
=
12
;
len
=
12
;
...
@@ -129,7 +130,6 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
...
@@ -129,7 +130,6 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
}
}
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem
\n
"
);
AssertFatal
(
ul_ch
,
"RX signal buffer (freq) problem
\n
"
);
measurements
->
n0_subband_power
[
aarx
][
rb
]
+=
signal_energy_nodc
(
ul_ch
,
len
);
measurements
->
n0_subband_power
[
aarx
][
rb
]
+=
signal_energy_nodc
(
ul_ch
,
len
);
measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
measurements
->
n0_subband_power
[
aarx
][
rb
]);
}
//antenna
}
//antenna
}
}
}
//rb
}
//rb
...
@@ -144,6 +144,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
...
@@ -144,6 +144,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
if
(
nb_symb
[
rb
]
>
0
)
{
if
(
nb_symb
[
rb
]
>
0
)
{
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
measurements
->
n0_subband_power
[
aarx
][
rb
]
/=
nb_symb
[
rb
];
measurements
->
n0_subband_power
[
aarx
][
rb
]
/=
nb_symb
[
rb
];
measurements
->
n0_subband_power_dB
[
aarx
][
rb
]
=
dB_fixed
(
measurements
->
n0_subband_power
[
aarx
][
rb
]);
n0_subband_tot_perPRB
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
n0_subband_tot_perPRB
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
if
(
rb
==
0
)
n0_subband_tot_perANT
[
aarx
]
=
measurements
->
n0_subband_power
[
aarx
][
rb
];
if
(
rb
==
0
)
n0_subband_tot_perANT
[
aarx
]
=
measurements
->
n0_subband_power
[
aarx
][
rb
];
else
n0_subband_tot_perANT
[
aarx
]
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
else
n0_subband_tot_perANT
[
aarx
]
+=
measurements
->
n0_subband_power
[
aarx
][
rb
];
...
@@ -151,7 +152,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
...
@@ -151,7 +152,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
n0_subband_tot_perPRB
/=
frame_parms
->
nb_antennas_rx
;
n0_subband_tot_perPRB
/=
frame_parms
->
nb_antennas_rx
;
measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_subband_tot_perPRB
);
measurements
->
n0_subband_power_tot_dB
[
rb
]
=
dB_fixed
(
n0_subband_tot_perPRB
);
measurements
->
n0_subband_power_tot_dBm
[
rb
]
=
measurements
->
n0_subband_power_tot_dB
[
rb
]
-
gNB
->
rx_total_gain_dB
-
dB_fixed
(
frame_parms
->
N_RB_UL
);
measurements
->
n0_subband_power_tot_dBm
[
rb
]
=
measurements
->
n0_subband_power_tot_dB
[
rb
]
-
gNB
->
rx_total_gain_dB
-
dB_fixed
(
frame_parms
->
N_RB_UL
);
//printf(
"n0_subband_power_tot_dB[%d] => %d, over %d symbols\n",rb,measurements->n0_subband_power_tot_dB[rb],nb_symb[rb]);
LOG_D
(
PHY
,
"n0_subband_power_tot_dB[%d] => %d, over %d symbols
\n
"
,
rb
,
measurements
->
n0_subband_power_tot_dB
[
rb
],
nb_symb
[
rb
]);
n0_subband_tot
+=
n0_subband_tot_perPRB
;
n0_subband_tot
+=
n0_subband_tot_perPRB
;
nb_rb
++
;
nb_rb
++
;
}
}
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
30a6c04b
...
@@ -144,10 +144,11 @@ void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
...
@@ -144,10 +144,11 @@ void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
if
(
gNB
->
ulsch_stats
[
i
].
rnti
>
0
&&
gNB
->
ulsch_stats
[
i
].
frame
!=
gNB
->
ulsch_stats
[
i
].
dump_frame
)
{
if
(
gNB
->
ulsch_stats
[
i
].
rnti
>
0
&&
gNB
->
ulsch_stats
[
i
].
frame
!=
gNB
->
ulsch_stats
[
i
].
dump_frame
)
{
gNB
->
ulsch_stats
[
i
].
dump_frame
=
gNB
->
ulsch_stats
[
i
].
frame
;
gNB
->
ulsch_stats
[
i
].
dump_frame
=
gNB
->
ulsch_stats
[
i
].
frame
;
for
(
int
aa
=
0
;
aa
<
gNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
for
(
int
aa
=
0
;
aa
<
gNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
if
(
aa
==
0
)
fprintf
(
fd
,
"ULSCH RNTI %4x, %d.%d: ulsch_power[%d] %d,%d ulsch_noise_power[%d] %d.%d
\n
"
,
if
(
aa
==
0
)
fprintf
(
fd
,
"ULSCH RNTI %4x, %d.%d: ulsch_power[%d] %d,%d ulsch_noise_power[%d] %d.%d
, sync_pos %d
\n
"
,
gNB
->
ulsch_stats
[
i
].
rnti
,
gNB
->
ulsch_stats
[
i
].
frame
,
gNB
->
ulsch_stats
[
i
].
dump_frame
,
gNB
->
ulsch_stats
[
i
].
rnti
,
gNB
->
ulsch_stats
[
i
].
frame
,
gNB
->
ulsch_stats
[
i
].
dump_frame
,
aa
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
%
10
,
aa
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
%
10
,
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
,
gNB
->
ulsch_stats
[
i
].
sync_pos
);
else
fprintf
(
fd
,
" ulsch_power[%d] %d.%d, ulsch_noise_power[%d] %d.%d
\n
"
,
else
fprintf
(
fd
,
" ulsch_power[%d] %d.%d, ulsch_noise_power[%d] %d.%d
\n
"
,
aa
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
%
10
,
aa
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
power
[
aa
]
%
10
,
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
aa
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
/
10
,
gNB
->
ulsch_stats
[
i
].
noise_power
[
aa
]
%
10
);
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
30a6c04b
...
@@ -322,12 +322,6 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
...
@@ -322,12 +322,6 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
}
}
}
}
}
}
if
(
pucch_pdu
->
freq_hop_flag
==
0
&&
l
==
1
)
{
// non-coherent correlation
temp
=
0
;
for
(
int
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
temp
+=
(
int64_t
)
corr_re
[
aa
][
0
]
*
corr_re
[
aa
][
0
]
+
(
int64_t
)
corr_im
[
aa
][
0
]
*
corr_im
[
aa
][
0
];
}
LOG_D
(
PHY
,
"PUCCH IDFT[%d/%d] = (%d,%d)=>%f
\n
"
,
mcs
[
i
],
seq_index
,
corr_re
[
0
][
0
],
corr_im
[
0
][
0
],
10
*
log10
((
double
)
corr_re
[
0
][
0
]
*
corr_re
[
0
][
0
]
+
(
double
)
corr_im
[
0
][
0
]
*
corr_im
[
0
][
0
]));
LOG_D
(
PHY
,
"PUCCH IDFT[%d/%d] = (%d,%d)=>%f
\n
"
,
mcs
[
i
],
seq_index
,
corr_re
[
0
][
0
],
corr_im
[
0
][
0
],
10
*
log10
((
double
)
corr_re
[
0
][
0
]
*
corr_re
[
0
][
0
]
+
(
double
)
corr_im
[
0
][
0
]
*
corr_im
[
0
][
0
]));
if
(
l
>
1
)
LOG_D
(
PHY
,
"PUCCH 2nd symbol IDFT[%d/%d] = (%d,%d)=>%f
\n
"
,
mcs
[
i
],
seq_index
,
corr_re
[
0
][
1
],
corr_im
[
0
][
1
],
10
*
log10
((
double
)
corr_re
[
0
][
1
]
*
corr_re
[
0
][
1
]
+
(
double
)
corr_im
[
0
][
1
]
*
corr_im
[
0
][
1
]));
if
(
l
>
1
)
LOG_D
(
PHY
,
"PUCCH 2nd symbol IDFT[%d/%d] = (%d,%d)=>%f
\n
"
,
mcs
[
i
],
seq_index
,
corr_re
[
0
][
1
],
corr_im
[
0
][
1
],
10
*
log10
((
double
)
corr_re
[
0
][
1
]
*
corr_re
[
0
][
1
]
+
(
double
)
corr_im
[
0
][
1
]
*
corr_im
[
0
][
1
]));
if
(
pucch_pdu
->
freq_hop_flag
==
0
&&
l
==
1
)
{
// non-coherent correlation
if
(
pucch_pdu
->
freq_hop_flag
==
0
&&
l
==
1
)
{
// non-coherent correlation
...
@@ -376,8 +370,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
...
@@ -376,8 +370,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
av_corr
/=
nr_sequences
/
l
;
av_corr
/=
nr_sequences
/
l
;
int
xrtmag_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag
/
frame_parms
->
nb_antennas_rx
);
int
xrtmag_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag
/
(
12
*
l
)
);
int
xrtmag_next_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag_next
/
frame_parms
->
nb_antennas_rx
);
int
xrtmag_next_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag_next
/
(
12
*
l
)
);
#ifdef DEBUG_NR_PUCCH_RX
#ifdef DEBUG_NR_PUCCH_RX
printf
(
"PUCCH 0 : maxpos %d
\n
"
,
maxpos
);
printf
(
"PUCCH 0 : maxpos %d
\n
"
,
maxpos
);
#endif
#endif
...
@@ -432,8 +426,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
...
@@ -432,8 +426,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
uci_pdu
->
harq
->
harq_confidence_level
=
no_conf
?
1
:
0
;
uci_pdu
->
harq
->
harq_confidence_level
=
no_conf
?
1
:
0
;
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
1
);
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
1
);
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
index
&
0x01
;
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
index
&
0x01
;
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d with confidence level (0 is good, 1 is bad) %d xrt_mag %d srt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10
%d
\n
"
,
if
(
no_conf
)
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d with confidence level (0 is good, 1 is bad) %d xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos
%d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
);
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
10
*
log10
((
double
)
sigenergy
),
gNB
->
ulsch_stats
[
0
].
sync_pos
);
if
(
pucch_pdu
->
sr_flag
==
1
)
{
if
(
pucch_pdu
->
sr_flag
==
1
)
{
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
->
sr_indication
=
(
index
>
1
)
?
1
:
0
;
uci_pdu
->
sr
->
sr_indication
=
(
index
>
1
)
?
1
:
0
;
...
@@ -449,8 +443,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
...
@@ -449,8 +443,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
2
);
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
2
);
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
=
index
&
0x01
;
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
=
index
&
0x01
;
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
(
index
>>
1
)
&
0x01
;
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
(
index
>>
1
)
&
0x01
;
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d and %d with confidence level (0 is good, 1 is bad) %d, xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10
%d
\n
"
,
if
(
no_conf
)
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d and %d with confidence level (0 is good, 1 is bad) %d, xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos
%d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
);
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
gNB
->
ulsch_stats
[
0
].
sync_pos
);
if
(
pucch_pdu
->
sr_flag
==
1
)
{
if
(
pucch_pdu
->
sr_flag
==
1
)
{
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
->
sr_indication
=
(
index
>
3
)
?
1
:
0
;
uci_pdu
->
sr
->
sr_indication
=
(
index
>
3
)
?
1
:
0
;
...
...
openair1/PHY/defs_gNB.h
View file @
30a6c04b
...
@@ -145,6 +145,7 @@ typedef struct {
...
@@ -145,6 +145,7 @@ typedef struct {
int
power
[
NB_ANTENNAS_RX
];
int
power
[
NB_ANTENNAS_RX
];
int
noise_power
[
NB_ANTENNAS_RX
];
int
noise_power
[
NB_ANTENNAS_RX
];
int
DTX
;
int
DTX
;
int
sync_pos
;
}
NR_gNB_SCH_STATS_t
;
}
NR_gNB_SCH_STATS_t
;
typedef
struct
{
typedef
struct
{
...
@@ -661,33 +662,33 @@ typedef struct {
...
@@ -661,33 +662,33 @@ typedef struct {
//! estimated noise power (linear)
//! estimated noise power (linear)
unsigned
int
n0_power
[
MAX_NUM_RU_PER_gNB
];
unsigned
int
n0_power
[
MAX_NUM_RU_PER_gNB
];
//! estimated noise power (dB)
//! estimated noise power (dB)
unsigned
shor
t
n0_power_dB
[
MAX_NUM_RU_PER_gNB
];
unsigned
in
t
n0_power_dB
[
MAX_NUM_RU_PER_gNB
];
//! total estimated noise power (linear)
//! total estimated noise power (linear)
unsigned
int
n0_power_tot
;
unsigned
int
n0_power_tot
;
//! estimated avg noise power (dB)
//! estimated avg noise power (dB)
unsigned
shor
t
n0_power_tot_dB
;
unsigned
in
t
n0_power_tot_dB
;
//! estimated avg noise power (dB)
//! estimated avg noise power (dB)
shor
t
n0_power_tot_dBm
;
in
t
n0_power_tot_dBm
;
//! estimated avg noise power per RB per RX ant (lin)
//! estimated avg noise power per RB per RX ant (lin)
unsigned
shor
t
n0_subband_power
[
MAX_NUM_RU_PER_gNB
][
275
];
unsigned
in
t
n0_subband_power
[
MAX_NUM_RU_PER_gNB
][
275
];
//! estimated avg noise power per RB per RX ant (dB)
//! estimated avg noise power per RB per RX ant (dB)
unsigned
shor
t
n0_subband_power_dB
[
MAX_NUM_RU_PER_gNB
][
275
];
unsigned
in
t
n0_subband_power_dB
[
MAX_NUM_RU_PER_gNB
][
275
];
//! estimated avg subband noise power (dB)
//! estimated avg subband noise power (dB)
unsigned
shor
t
n0_subband_power_avg_dB
;
unsigned
in
t
n0_subband_power_avg_dB
;
//! estimated avg subband noise power per antenna (dB)
//! estimated avg subband noise power per antenna (dB)
unsigned
shor
t
n0_subband_power_avg_perANT_dB
[
NB_ANTENNAS_RX
];
unsigned
in
t
n0_subband_power_avg_perANT_dB
[
NB_ANTENNAS_RX
];
//! estimated avg noise power per RB (dB)
//! estimated avg noise power per RB (dB)
shor
t
n0_subband_power_tot_dB
[
275
];
in
t
n0_subband_power_tot_dB
[
275
];
//! estimated avg noise power per RB (dBm)
//! estimated avg noise power per RB (dBm)
shor
t
n0_subband_power_tot_dBm
[
275
];
in
t
n0_subband_power_tot_dBm
[
275
];
// gNB measurements (per user)
// gNB measurements (per user)
//! estimated received spatial signal power (linear)
//! estimated received spatial signal power (linear)
unsigned
int
rx_spatial_power
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
unsigned
int
rx_spatial_power
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated received spatial signal power (dB)
//! estimated received spatial signal power (dB)
unsigned
shor
t
rx_spatial_power_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
unsigned
in
t
rx_spatial_power_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated rssi (dBm)
//! estimated rssi (dBm)
short
rx_rssi_dBm
[
NUMBER_OF_NR_ULSCH_MAX
];
int
rx_rssi_dBm
[
NUMBER_OF_NR_ULSCH_MAX
];
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
int
rx_correlation
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
30a6c04b
...
@@ -413,6 +413,7 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
...
@@ -413,6 +413,7 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
int
sync_pos
;
int
sync_pos
;
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ULSCH_id
][
0
];
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ULSCH_id
][
0
];
NR_UL_gNB_HARQ_t
*
harq_process
=
ulsch
->
harq_processes
[
harq_pid
];
NR_UL_gNB_HARQ_t
*
harq_process
=
ulsch
->
harq_processes
[
harq_pid
];
NR_gNB_SCH_STATS_t
*
stats
=
get_ulsch_stats
(
gNB
,
ulsch
);
nfapi_nr_pusch_pdu_t
*
pusch_pdu
=
&
harq_process
->
ulsch_pdu
;
nfapi_nr_pusch_pdu_t
*
pusch_pdu
=
&
harq_process
->
ulsch_pdu
;
...
@@ -427,6 +428,8 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
...
@@ -427,6 +428,8 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
sync_pos_rounded
=
sync_pos
+
(
bw_scaling
/
2
)
-
1
;
sync_pos_rounded
=
sync_pos
+
(
bw_scaling
/
2
)
-
1
;
else
else
sync_pos_rounded
=
sync_pos
-
(
bw_scaling
/
2
)
-
1
;
sync_pos_rounded
=
sync_pos
-
(
bw_scaling
/
2
)
-
1
;
if
(
stats
)
stats
->
sync_pos
=
sync_pos
;
timing_advance_update
=
sync_pos_rounded
/
bw_scaling
;
timing_advance_update
=
sync_pos_rounded
/
bw_scaling
;
// put timing advance command in 0..63 range
// put timing advance command in 0..63 range
...
...
openair1/SIMULATION/NR_PHY/pucchsim.c
View file @
30a6c04b
...
@@ -104,7 +104,8 @@ int main(int argc, char **argv)
...
@@ -104,7 +104,8 @@ int main(int argc, char **argv)
SCM_t
channel_model
=
AWGN
;
//Rayleigh1_anticorr;
SCM_t
channel_model
=
AWGN
;
//Rayleigh1_anticorr;
double
DS_TDL
=
.
03
;
double
DS_TDL
=
.
03
;
double
delay_us
=
0
;
int
N_RB_DL
=
273
,
mu
=
1
;
int
N_RB_DL
=
273
,
mu
=
1
;
float
target_error_rate
=
0
.
001
;
float
target_error_rate
=
0
.
001
;
int
frame_length_complex_samples
;
int
frame_length_complex_samples
;
...
@@ -113,7 +114,7 @@ int main(int argc, char **argv)
...
@@ -113,7 +114,7 @@ int main(int argc, char **argv)
//unsigned char frame_type = 0;
//unsigned char frame_type = 0;
int
loglvl
=
OAILOG_WARNING
;
int
loglvl
=
OAILOG_WARNING
;
int
sr_flag
=
0
;
int
sr_flag
=
0
;
int
pucch_DTX_thres
=
10
0
;
int
pucch_DTX_thres
=
5
0
;
cpuf
=
get_cpu_freq_GHz
();
cpuf
=
get_cpu_freq_GHz
();
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
...
@@ -123,7 +124,7 @@ int main(int argc, char **argv)
...
@@ -123,7 +124,7 @@ int main(int argc, char **argv)
randominit
(
0
);
randominit
(
0
);
logInit
();
logInit
();
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:f:g:i:I:P:B:b:t:T:m:n:r:o:s:S:x:y:z:N:F:GR:IL:q:c"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:f:g:i:I:P:B:b:t:T:m:n:r:o:s:S:x:y:z:N:F:GR:IL:q:c
d:
"
))
!=
-
1
)
{
switch
(
c
)
{
switch
(
c
)
{
case
'f'
:
case
'f'
:
//write_output_file=1;
//write_output_file=1;
...
@@ -228,6 +229,9 @@ int main(int argc, char **argv)
...
@@ -228,6 +229,9 @@ int main(int argc, char **argv)
}
}
break;
break;
*/
*/
case
'd'
:
delay_us
=
atof
(
optarg
);
break
;
case
'x'
:
case
'x'
:
transmission_mode
=
atoi
(
optarg
);
transmission_mode
=
atoi
(
optarg
);
...
@@ -346,6 +350,8 @@ int main(int argc, char **argv)
...
@@ -346,6 +350,8 @@ int main(int argc, char **argv)
}
}
}
}
double
phase
=
(
1
<<
mu
)
*
30e-3
*
delay_us
;
set_glog
(
loglvl
);
set_glog
(
loglvl
);
if
(
snr1set
==
0
)
snr1
=
snr0
+
10
;
if
(
snr1set
==
0
)
snr1
=
snr0
+
10
;
...
@@ -479,7 +485,7 @@ int main(int argc, char **argv)
...
@@ -479,7 +485,7 @@ int main(int argc, char **argv)
//configure UE
//configure UE
UE
=
calloc
(
1
,
sizeof
(
PHY_VARS_NR_UE
));
UE
=
calloc
(
1
,
sizeof
(
PHY_VARS_NR_UE
));
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
UE
->
frame_parms
.
nb_antennas_rx
=
1
;
UE
->
perfect_ce
=
0
;
UE
->
perfect_ce
=
0
;
if
(
eps
!=
0
.
0
)
if
(
eps
!=
0
.
0
)
...
@@ -550,7 +556,7 @@ int main(int argc, char **argv)
...
@@ -550,7 +556,7 @@ int main(int argc, char **argv)
// sigma2 is variance per dimension, so N/(N_RB*12)
// sigma2 is variance per dimension, so N/(N_RB*12)
// so, sigma2 = N/(N_RB_DL*12) => (S/SNR)/(N_RB*12)
// so, sigma2 = N/(N_RB_DL*12) => (S/SNR)/(N_RB*12)
int
N_RB
=
(
format
==
0
||
format
==
1
)
?
1
:
nrofPRB
;
int
N_RB
=
(
format
==
0
||
format
==
1
)
?
1
:
nrofPRB
;
sigma2_dB
=
10
*
log10
(
txlev
/
(
12
.
0
*
N_RB
))
-
SNR
;
sigma2_dB
=
10
*
log10
(
txlev
*
(
N_RB_DL
/
N_RB
))
-
SNR
;
sigma2
=
pow
(
10
.
0
,
sigma2_dB
/
10
.
0
);
sigma2
=
pow
(
10
.
0
,
sigma2_dB
/
10
.
0
);
if
(
n_trials
==
1
)
printf
(
"txlev %d (%f dB), offset %d, sigma2 %f ( %f dB)
\n
"
,
txlev
,
10
*
log10
(
txlev
),
startingSymbolIndex
*
frame_parms
->
ofdm_symbol_size
,
sigma2
,
sigma2_dB
);
if
(
n_trials
==
1
)
printf
(
"txlev %d (%f dB), offset %d, sigma2 %f ( %f dB)
\n
"
,
txlev
,
10
*
log10
(
txlev
),
startingSymbolIndex
*
frame_parms
->
ofdm_symbol_size
,
sigma2
,
sigma2_dB
);
...
@@ -574,15 +580,22 @@ int main(int argc, char **argv)
...
@@ -574,15 +580,22 @@ int main(int argc, char **argv)
random_channel
(
UE2gNB
,
0
);
random_channel
(
UE2gNB
,
0
);
freq_channel
(
UE2gNB
,
N_RB_DL
,
2
*
N_RB_DL
+
1
,
scs
/
1000
);
freq_channel
(
UE2gNB
,
N_RB_DL
,
2
*
N_RB_DL
+
1
,
scs
/
1000
);
struct
complexd
phasor
;
double
rxr_tmp
;
for
(
int
symb
=
0
;
symb
<
nrofSymbols
;
symb
++
)
{
for
(
int
symb
=
0
;
symb
<
nrofSymbols
;
symb
++
)
{
i0
=
(
startingSymbolIndex
+
symb
)
*
gNB
->
frame_parms
.
ofdm_symbol_size
;
i0
=
(
startingSymbolIndex
+
symb
)
*
gNB
->
frame_parms
.
ofdm_symbol_size
;
for
(
int
re
=
0
;
re
<
N_RB_DL
*
12
;
re
++
)
{
for
(
int
re
=
0
;
re
<
N_RB_DL
*
12
;
re
++
)
{
i
=
i0
+
((
gNB
->
frame_parms
.
first_carrier_offset
+
re
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
);
i
=
i0
+
((
gNB
->
frame_parms
.
first_carrier_offset
+
re
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
);
phasor
.
r
=
cos
(
2
*
M_PI
*
phase
*
re
);
phasor
.
i
=
sin
(
2
*
M_PI
*
phase
*
re
);
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
{
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
{
txr
=
(
double
)(((
int16_t
*
)
txdataF
[
0
])[(
i
<<
1
)]);
txr
=
(
double
)(((
int16_t
*
)
txdataF
[
0
])[(
i
<<
1
)]);
txi
=
(
double
)(((
int16_t
*
)
txdataF
[
0
])[
1
+
(
i
<<
1
)]);
txi
=
(
double
)(((
int16_t
*
)
txdataF
[
0
])[
1
+
(
i
<<
1
)]);
rxr
=
txr
*
UE2gNB
->
chF
[
aarx
][
re
].
r
-
txi
*
UE2gNB
->
chF
[
aarx
][
re
].
i
;
rxr
=
txr
*
UE2gNB
->
chF
[
aarx
][
re
].
r
-
txi
*
UE2gNB
->
chF
[
aarx
][
re
].
i
;
rxi
=
txr
*
UE2gNB
->
chF
[
aarx
][
re
].
i
+
txi
*
UE2gNB
->
chF
[
aarx
][
re
].
r
;
rxi
=
txr
*
UE2gNB
->
chF
[
aarx
][
re
].
i
+
txi
*
UE2gNB
->
chF
[
aarx
][
re
].
r
;
rxr_tmp
=
rxr
*
phasor
.
r
-
rxi
*
phasor
.
i
;
rxi
=
rxr
*
phasor
.
i
+
rxi
*
phasor
.
r
;
rxr
=
rxr_tmp
;
nr
=
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
nr
=
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
ni
=
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
ni
=
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
((
int16_t
*
)
rxdataF
[
aarx
])[
i
<<
1
]
=
(
int16_t
)(
100
.
0
*
(
rxr
+
nr
)
/
sqrt
((
double
)
txlev
));
((
int16_t
*
)
rxdataF
[
aarx
])[
i
<<
1
]
=
(
int16_t
)(
100
.
0
*
(
rxr
+
nr
)
/
sqrt
((
double
)
txlev
));
...
@@ -601,7 +614,12 @@ int main(int argc, char **argv)
...
@@ -601,7 +614,12 @@ int main(int argc, char **argv)
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
rxlev
+=
signal_energy
(
&
rxdataF
[
aarx
][
startingSymbolIndex
*
frame_parms
->
ofdm_symbol_size
],
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
rxlev
+=
signal_energy
(
&
rxdataF
[
aarx
][
startingSymbolIndex
*
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
);
frame_parms
->
ofdm_symbol_size
);
// noise measurement
int
rxlev_pucch
=
0
;
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
rxlev_pucch
+=
signal_energy
(
&
rxdataF
[
aarx
][
startingSymbolIndex
*
frame_parms
->
ofdm_symbol_size
],
12
);
// set UL mask for pucch allocation
for
(
int
s
=
0
;
s
<
frame_parms
->
symbols_per_slot
;
s
++
){
for
(
int
s
=
0
;
s
<
frame_parms
->
symbols_per_slot
;
s
++
){
if
(
s
>=
startingSymbolIndex
&&
s
<
(
startingSymbolIndex
+
nrofSymbols
))
if
(
s
>=
startingSymbolIndex
&&
s
<
(
startingSymbolIndex
+
nrofSymbols
))
for
(
int
rb
=
0
;
rb
<
N_RB
;
rb
++
)
{
for
(
int
rb
=
0
;
rb
<
N_RB
;
rb
++
)
{
...
@@ -609,9 +627,11 @@ int main(int argc, char **argv)
...
@@ -609,9 +627,11 @@ int main(int argc, char **argv)
gNB
->
rb_mask_ul
[
s
][
rb2
>>
5
]
|=
(
1
<<
(
rb2
&
31
));
gNB
->
rb_mask_ul
[
s
][
rb2
>>
5
]
|=
(
1
<<
(
rb2
&
31
));
}
}
}
}
// noise measurement (all PRBs)
gNB_I0_measurements
(
gNB
,
nr_slot_tx
,
0
,
gNB
->
frame_parms
.
symbols_per_slot
);
gNB_I0_measurements
(
gNB
,
nr_slot_tx
,
0
,
gNB
->
frame_parms
.
symbols_per_slot
);
if
(
n_trials
==
1
)
printf
(
"
rxlev %d (%d dB), sigma2 %f dB, SNR %f, TX %f
\n
"
,
rxlev
,
dB_fixed
(
rxlev
),
sigma2_dB
,
SNR
,
10
*
log10
((
double
)
txlev
*
UE
->
frame_parms
.
ofdm_symbol_size
/
12
)
);
if
(
n_trials
==
1
)
printf
(
"
noise rxlev %d (%d dB), rxlev pucch %d dB sigma2 %f dB, SNR %f, TX %f, I0 (pucch) %d, I0 (avg) %d
\n
"
,
rxlev
,
dB_fixed
(
rxlev
),
dB_fixed
(
rxlev_pucch
),
sigma2_dB
,
SNR
,
10
*
log10
((
double
)
txlev
*
UE
->
frame_parms
.
ofdm_symbol_size
/
12
),
gNB
->
measurements
.
n0_subband_power_tot_dB
[
startingPRB
],
gNB
->
measurements
.
n0_subband_power_avg_dB
);
if
(
format
==
0
){
if
(
format
==
0
){
nfapi_nr_uci_pucch_pdu_format_0_1_t
uci_pdu
;
nfapi_nr_uci_pucch_pdu_format_0_1_t
uci_pdu
;
nfapi_nr_pucch_pdu_t
pucch_pdu
;
nfapi_nr_pucch_pdu_t
pucch_pdu
;
...
@@ -643,7 +663,7 @@ int main(int argc, char **argv)
...
@@ -643,7 +663,7 @@ int main(int argc, char **argv)
sr_errors
+=
1
;
sr_errors
+=
1
;
}
}
if
(
nr_bit
>
0
){
if
(
nr_bit
>
0
){
if
(
nr_bit
==
1
&&
do_DTX
==
0
)
if
(
nr_bit
==
1
&&
do_DTX
==
0
)
ack_nack_errors
+=
(
actual_payload
^
uci_pdu
.
harq
->
harq_list
[
0
].
harq_value
);
ack_nack_errors
+=
(
actual_payload
^
uci_pdu
.
harq
->
harq_list
[
0
].
harq_value
);
else
if
(
do_DTX
==
0
)
else
if
(
do_DTX
==
0
)
ack_nack_errors
+=
(((
actual_payload
&
1
)
^
uci_pdu
.
harq
->
harq_list
[
0
].
harq_value
)
+
((
actual_payload
>>
1
)
^
uci_pdu
.
harq
->
harq_list
[
1
].
harq_value
));
ack_nack_errors
+=
(((
actual_payload
&
1
)
^
uci_pdu
.
harq
->
harq_list
[
0
].
harq_value
)
+
((
actual_payload
>>
1
)
^
uci_pdu
.
harq
->
harq_list
[
1
].
harq_value
));
...
...
openair2/ENB_APP/enb_paramdef.h
View file @
30a6c04b
...
@@ -156,7 +156,7 @@ typedef enum {
...
@@ -156,7 +156,7 @@ typedef enum {
{CONFIG_STRING_RU_SDR_ADDRS, NULL, 0, strptr:NULL, defstrval:"type=b200", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SDR_ADDRS, NULL, 0, strptr:NULL, defstrval:"type=b200", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SDR_CLK_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SDR_CLK_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SDR_TME_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SDR_TME_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_SF_EXTENSION, NULL, 0, uptr:NULL, defuintval:3
12
, TYPE_UINT, 0}, \
{CONFIG_STRING_RU_SF_EXTENSION, NULL, 0, uptr:NULL, defuintval:3
20
, TYPE_UINT, 0}, \
{CONFIG_STRING_RU_END_OF_BURST_DELAY, NULL, 0, uptr:NULL, defuintval:400, TYPE_UINT, 0}, \
{CONFIG_STRING_RU_END_OF_BURST_DELAY, NULL, 0, uptr:NULL, defuintval:400, TYPE_UINT, 0}, \
{CONFIG_STRING_RU_OTA_SYNC_ENABLE, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_OTA_SYNC_ENABLE, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0}, \
{CONFIG_STRING_RU_BF_WEIGHTS_LIST, NULL, 0, iptr:NULL, defintarrayval:DEFBFW, TYPE_INTARRAY, 0}, \
{CONFIG_STRING_RU_BF_WEIGHTS_LIST, NULL, 0, iptr:NULL, defintarrayval:DEFBFW, TYPE_INTARRAY, 0}, \
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
30a6c04b
...
@@ -1052,7 +1052,7 @@ void pf_ul(module_id_t module_id,
...
@@ -1052,7 +1052,7 @@ void pf_ul(module_id_t module_id,
gNB_MAC_INST
*
nrmac
=
RC
.
nrmac
[
module_id
];
gNB_MAC_INST
*
nrmac
=
RC
.
nrmac
[
module_id
];
NR_ServingCellConfigCommon_t
*
scc
=
nrmac
->
common_channels
[
CC_id
].
ServingCellConfigCommon
;
NR_ServingCellConfigCommon_t
*
scc
=
nrmac
->
common_channels
[
CC_id
].
ServingCellConfigCommon
;
NR_UE_info_t
*
UE_info
=
&
nrmac
->
UE_info
;
NR_UE_info_t
*
UE_info
=
&
nrmac
->
UE_info
;
const
int
min_rb
=
5
;
const
int
min_rb
=
40
;
float
coeff_ue
[
MAX_MOBILES_PER_GNB
];
float
coeff_ue
[
MAX_MOBILES_PER_GNB
];
// UEs that could be scheduled
// UEs that could be scheduled
int
ue_array
[
MAX_MOBILES_PER_GNB
];
int
ue_array
[
MAX_MOBILES_PER_GNB
];
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
30a6c04b
...
@@ -1024,6 +1024,7 @@ extern "C" {
...
@@ -1024,6 +1024,7 @@ extern "C" {
// USRP recommended: https://files.ettus.com/manual/page_usrp_x3x0_config.html
// USRP recommended: https://files.ettus.com/manual/page_usrp_x3x0_config.html
if
(
0
!=
system
(
"sysctl -w net.core.rmem_max=33554432 net.core.wmem_max=33554432"
)
)
if
(
0
!=
system
(
"sysctl -w net.core.rmem_max=33554432 net.core.wmem_max=33554432"
)
)
LOG_W
(
HW
,
"Can't set kernel parameters for X3xx
\n
"
);
LOG_W
(
HW
,
"Can't set kernel parameters for X3xx
\n
"
);
}
}
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
...
@@ -1096,6 +1097,7 @@ extern "C" {
...
@@ -1096,6 +1097,7 @@ extern "C" {
if
(
device
->
type
==
USRP_X300_DEV
)
{
if
(
device
->
type
==
USRP_X300_DEV
)
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_x310
;
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_x310
;
std
::
cerr
<<
"-- Using calibration table: calib_table_x310"
<<
std
::
endl
;
std
::
cerr
<<
"-- Using calibration table: calib_table_x310"
<<
std
::
endl
;
s
->
usrp
->
set_rx_dc_offset
(
true
);
}
}
if
(
device
->
type
==
USRP_N300_DEV
)
{
if
(
device
->
type
==
USRP_N300_DEV
)
{
...
...
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