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
62b68e78
Commit
62b68e78
authored
Mar 23, 2021
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
init frame parms ue sa
parent
88c36546
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
101 additions
and
61 deletions
+101
-61
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+34
-0
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+1
-0
executables/nr-softmodem-common.h
executables/nr-softmodem-common.h
+1
-0
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+9
-5
executables/nr-uesoftmodem.h
executables/nr-uesoftmodem.h
+2
-1
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+0
-36
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+53
-18
openair1/PHY/INIT/phy_init.h
openair1/PHY/INIT/phy_init.h
+1
-1
No files found.
common/utils/nr/nr_common.c
View file @
62b68e78
...
...
@@ -106,6 +106,40 @@ nr_bandentry_t nr_bandtable[] = {
{
261
,
27500040
,
28350000
,
27500040
,
28350000
,
2
,
2070833
,
120
}
};
uint16_t
get_band
(
uint64_t
downlink_frequency
,
int32_t
delta_duplex
)
{
const
uint64_t
dl_freq_khz
=
downlink_frequency
/
1000
;
const
int32_t
delta_duplex_khz
=
delta_duplex
/
1000
;
uint64_t
center_freq_diff_khz
=
999999999999999999
;
// 2^64
uint16_t
current_band
=
0
;
for
(
int
ind
=
0
;
ind
<
nr_bandtable_size
;
ind
++
)
{
if
(
dl_freq_khz
<
nr_bandtable
[
ind
].
dl_min
||
dl_freq_khz
>
nr_bandtable
[
ind
].
dl_max
)
continue
;
int32_t
current_offset_khz
=
nr_bandtable
[
ind
].
ul_min
-
nr_bandtable
[
ind
].
dl_min
;
if
(
current_offset_khz
!=
delta_duplex_khz
)
continue
;
uint64_t
center_frequency_khz
=
(
nr_bandtable
[
ind
].
dl_max
+
nr_bandtable
[
ind
].
dl_min
)
/
2
;
if
(
abs
(
dl_freq_khz
-
center_frequency_khz
)
<
center_freq_diff_khz
){
current_band
=
nr_bandtable
[
ind
].
band
;
center_freq_diff_khz
=
abs
(
dl_freq_khz
-
center_frequency_khz
);
}
}
printf
(
"DL frequency %"
PRIu64
": band %d, UL frequency %"
PRIu64
"
\n
"
,
downlink_frequency
,
current_band
,
downlink_frequency
+
delta_duplex
);
AssertFatal
(
current_band
!=
0
,
"Can't find EUTRA band for frequency %"
PRIu64
" and duplex_spacing %u
\n
"
,
downlink_frequency
,
delta_duplex
);
return
current_band
;
}
const
size_t
nr_bandtable_size
=
sizeof
(
nr_bandtable
)
/
sizeof
(
nr_bandentry_t
);
int
NRRIV2BW
(
int
locationAndBandwidth
,
int
N_RB
)
{
...
...
common/utils/nr/nr_common.h
View file @
62b68e78
...
...
@@ -50,6 +50,7 @@ typedef struct nr_bandentry_s {
extern
const
size_t
nr_bandtable_size
;
extern
nr_bandentry_t
nr_bandtable
[];
uint16_t
get_band
(
uint64_t
downlink_frequency
,
int32_t
delta_duplex
);
int
NRRIV2BW
(
int
locationAndBandwidth
,
int
N_RB
);
int
NRRIV2PRBOFFSET
(
int
locationAndBandwidth
,
int
N_RB
);
int
PRBalloc_to_locationandbandwidth0
(
int
NPRB
,
int
RBstart
,
int
BWPsize
);
...
...
executables/nr-softmodem-common.h
View file @
62b68e78
...
...
@@ -64,6 +64,7 @@
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
#define CONFIG_HLP_TADV "Set timing_advance\n"
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
#define CONFIG_HLP_ULOFF "Set the uplink frequnecy offset for all component carriers\n"
#define CONFIG_HLP_CHOFF "Channel id offset\n"
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
...
...
executables/nr-uesoftmodem.c
View file @
62b68e78
...
...
@@ -438,13 +438,17 @@ int main( int argc, char **argv ) {
set_options
(
CC_id
,
UE
[
CC_id
]);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
phy_config_request
!=
NULL
)
mac
->
if_module
->
phy_config_request
(
&
mac
->
phy_config
);
if
(
get_softmodem_params
()
->
sa
)
nr_init_frame_parms_ue_sa
(
&
UE
[
CC_id
]
->
frame_parms
,
downlink_frequency
[
CC_id
][
0
],
uplink_frequency_offset
[
CC_id
][
0
]);
else
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
phy_config_request
!=
NULL
)
mac
->
if_module
->
phy_config_request
(
&
mac
->
phy_config
);
fapi_nr_config_request_t
*
nrUE_config
=
&
UE
[
CC_id
]
->
nrUE_config
;
fapi_nr_config_request_t
*
nrUE_config
=
&
UE
[
CC_id
]
->
nrUE_config
;
nr_init_frame_parms_ue
(
&
UE
[
CC_id
]
->
frame_parms
,
nrUE_config
,
*
mac
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]);
nr_init_frame_parms_ue
(
&
UE
[
CC_id
]
->
frame_parms
,
nrUE_config
,
*
mac
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]);
}
init_symbol_rotation
(
&
UE
[
CC_id
]
->
frame_parms
);
init_nr_ue_vars
(
UE
[
CC_id
],
0
,
abstraction_flag
);
...
...
executables/nr-uesoftmodem.h
View file @
62b68e78
...
...
@@ -56,7 +56,8 @@
{"ue-fo-compensation", CONFIG_HLP_UEFO, PARAMFLAG_BOOL, iptr:&(UE->UE_fo_compensation), defintval:0, TYPE_INT, 0}, \
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
{"A" , CONFIG_HLP_TADV, 0, iptr:&(UE->timing_advance), defintval:0, TYPE_INT, 0}, \
{"C" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:DEFAULT_DLF,TYPE_UINT64,0}, \
{"D" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:DEFAULT_DLF,TYPE_UINT64,0}, \
{"U" , CONFIG_HLP_ULOFF, 0, iptr:&(uplink_frequency_offset[0][0]), defuintval:0, TYPE_INT, 0}, \
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, u8ptr:&(fp->threequarter_fs), defintval:0, TYPE_UINT8, 0}, \
{"m" , CONFIG_HLP_MUSSB, 0, u8ptr:&(fp->numerology_index), defintval:0, TYPE_UINT8, 0}, \
{"r" , CONFIG_HLP_PRB, 0, iptr:&(fp->N_RB_DL), defintval:106, TYPE_UINT, 0}, \
...
...
openair1/PHY/INIT/nr_init.c
View file @
62b68e78
...
...
@@ -46,42 +46,6 @@
#include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
static
uint16_t
get_band
(
uint64_t
downlink_frequency
,
int32_t
delta_duplex
)
{
const
uint64_t
dl_freq_khz
=
downlink_frequency
/
1000
;
const
int32_t
delta_duplex_khz
=
delta_duplex
/
1000
;
uint64_t
center_freq_diff_khz
=
999999999999999999
;
// 2^64
uint16_t
current_band
=
0
;
for
(
int
ind
=
0
;
ind
<
nr_bandtable_size
;
ind
++
)
{
LOG_D
(
PHY
,
"Scanning band %d, dl_min %"
PRIu64
", ul_min %"
PRIu64
"
\n
"
,
nr_bandtable
[
ind
].
band
,
nr_bandtable
[
ind
].
dl_min
,
nr_bandtable
[
ind
].
ul_min
);
if
(
dl_freq_khz
<
nr_bandtable
[
ind
].
dl_min
||
dl_freq_khz
>
nr_bandtable
[
ind
].
dl_max
)
continue
;
int32_t
current_offset_khz
=
nr_bandtable
[
ind
].
ul_min
-
nr_bandtable
[
ind
].
dl_min
;
if
(
current_offset_khz
!=
delta_duplex_khz
)
continue
;
uint64_t
center_frequency_khz
=
(
nr_bandtable
[
ind
].
dl_max
+
nr_bandtable
[
ind
].
dl_min
)
/
2
;
if
(
abs
(
dl_freq_khz
-
center_frequency_khz
)
<
center_freq_diff_khz
){
current_band
=
nr_bandtable
[
ind
].
band
;
center_freq_diff_khz
=
abs
(
dl_freq_khz
-
center_frequency_khz
);
}
}
LOG_I
(
PHY
,
"DL frequency %"
PRIu64
": band %d, UL frequency %"
PRIu64
"
\n
"
,
downlink_frequency
,
current_band
,
downlink_frequency
+
delta_duplex
);
AssertFatal
(
current_band
!=
0
,
"Can't find EUTRA band for frequency %"
PRIu64
" and duplex_spacing %u
\n
"
,
downlink_frequency
,
delta_duplex
);
return
current_band
;
}
int
l1_north_init_gNB
()
{
...
...
openair1/PHY/INIT/nr_parms.c
View file @
62b68e78
...
...
@@ -20,6 +20,7 @@
*/
#include "phy_init.h"
#include "common/utils/nr/nr_common.h"
#include "common/utils/LOG/log.h"
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
...
...
@@ -27,6 +28,18 @@
uint32_t
nr_subcarrier_spacing
[
MAX_NUM_SUBCARRIER_SPACING
]
=
{
15e3
,
30e3
,
60e3
,
120e3
,
240e3
};
uint16_t
nr_slots_per_subframe
[
MAX_NUM_SUBCARRIER_SPACING
]
=
{
1
,
2
,
4
,
8
,
16
};
void
set_Lmax
(
NR_DL_FRAME_PARMS
*
fp
)
{
// definition of Lmax according to ts 38.213 section 4.1
if
(
fp
->
dl_CarrierFreq
<
6e9
)
{
if
(
fp
->
frame_type
&&
(
fp
->
ssb_type
==
2
))
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
2.4e9
)
?
4
:
8
;
else
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
3e9
)
?
4
:
8
;
}
else
{
fp
->
Lmax
=
64
;
}
}
int
nr_get_ssb_start_symbol
(
NR_DL_FRAME_PARMS
*
fp
)
{
...
...
@@ -224,15 +237,7 @@ int nr_init_frame_parms(nfapi_nr_config_request_scf_t* cfg,
fp
->
Ncp
=
Ncp
;
// definition of Lmax according to ts 38.213 section 4.1
if
(
fp
->
dl_CarrierFreq
<
6e9
)
{
if
(
fp
->
frame_type
&&
(
fp
->
ssb_type
==
2
))
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
2.4e9
)
?
4
:
8
;
else
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
3e9
)
?
4
:
8
;
}
else
{
fp
->
Lmax
=
64
;
}
set_Lmax
(
fp
);
fp
->
N_ssb
=
0
;
int
num_tx_ant
=
cfg
->
carrier_config
.
num_tx_ant
.
value
;
...
...
@@ -316,15 +321,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
fp
->
ssb_start_subcarrier
=
(
12
*
config
->
ssb_table
.
ssb_offset_point_a
+
sco
);
// definition of Lmax according to ts 38.213 section 4.1
if
(
fp
->
dl_CarrierFreq
<
6e9
)
{
if
(
fp
->
frame_type
&&
(
fp
->
ssb_type
==
2
))
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
2.4e9
)
?
4
:
8
;
else
fp
->
Lmax
=
(
fp
->
dl_CarrierFreq
<
3e9
)
?
4
:
8
;
}
else
{
fp
->
Lmax
=
64
;
}
set_Lmax
(
fp
);
fp
->
L_ssb
=
(((
uint64_t
)
config
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
)
<<
32
)
|
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
;
...
...
@@ -335,6 +332,44 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
return
0
;
}
void
nr_init_frame_parms_ue_sa
(
NR_DL_FRAME_PARMS
*
frame_parms
,
uint64_t
downlink_frequency
,
int32_t
delta_duplex
)
{
LOG_I
(
PHY
,
"SA init parameters. DL freq %lu UL offset %d SSB numerology %d N_RB_DL %d
\n
"
,
downlink_frequency
,
delta_duplex
,
frame_parms
->
numerology_index
,
frame_parms
->
N_RB_DL
);
frame_parms
->
dl_CarrierFreq
=
downlink_frequency
;
frame_parms
->
ul_CarrierFreq
=
downlink_frequency
+
delta_duplex
;
frame_parms
->
freq_range
=
(
frame_parms
->
dl_CarrierFreq
<
6e9
)
?
nr_FR1
:
nr_FR2
;
frame_parms
->
N_RB_UL
=
frame_parms
->
N_RB_UL
;
frame_parms
->
nr_band
=
get_band
(
downlink_frequency
,
delta_duplex
);
frame_parms
->
frame_type
=
get_frame_type
(
frame_parms
->
nr_band
,
frame_parms
->
numerology_index
);
frame_parms
->
Ncp
=
NORMAL
;
set_scs_parameters
(
frame_parms
,
frame_parms
->
numerology_index
,
frame_parms
->
N_RB_DL
);
set_Lmax
(
frame_parms
);
frame_parms
->
slots_per_frame
=
10
*
frame_parms
->
slots_per_subframe
;
frame_parms
->
symbols_per_slot
=
((
frame_parms
->
Ncp
==
NORMAL
)
?
14
:
12
);
// to redefine for different slot formats
frame_parms
->
samples_per_subframe_wCP
=
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_slot
*
frame_parms
->
slots_per_subframe
;
frame_parms
->
samples_per_frame_wCP
=
10
*
frame_parms
->
samples_per_subframe_wCP
;
frame_parms
->
samples_per_slot_wCP
=
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
;
frame_parms
->
samples_per_slotN0
=
(
frame_parms
->
nb_prefix_samples
+
frame_parms
->
ofdm_symbol_size
)
*
frame_parms
->
symbols_per_slot
;
frame_parms
->
samples_per_slot0
=
frame_parms
->
nb_prefix_samples0
+
((
frame_parms
->
symbols_per_slot
-
1
)
*
frame_parms
->
nb_prefix_samples
)
+
(
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
);
frame_parms
->
samples_per_subframe
=
(
frame_parms
->
nb_prefix_samples0
+
frame_parms
->
ofdm_symbol_size
)
*
2
+
(
frame_parms
->
nb_prefix_samples
+
frame_parms
->
ofdm_symbol_size
)
*
(
frame_parms
->
symbols_per_slot
*
frame_parms
->
slots_per_subframe
-
2
);
frame_parms
->
get_samples_per_slot
=
&
get_samples_per_slot
;
frame_parms
->
get_samples_slot_timestamp
=
&
get_samples_slot_timestamp
;
frame_parms
->
samples_per_frame
=
10
*
frame_parms
->
samples_per_subframe
;
exit
(
1
);
}
void
nr_dump_frame_parms
(
NR_DL_FRAME_PARMS
*
fp
)
{
LOG_I
(
PHY
,
"fp->scs=%d
\n
"
,
fp
->
subcarrier_spacing
);
...
...
openair1/PHY/INIT/phy_init.h
View file @
62b68e78
...
...
@@ -389,12 +389,12 @@ void phy_config_request(PHY_Config_t *phy_config);
void
phy_config_update_sib2_request
(
PHY_Config_t
*
phy_config
);
void
phy_config_update_sib13_request
(
PHY_Config_t
*
phy_config
);
int
init_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
osf
);
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
);
int
nr_get_ssb_start_symbol
(
NR_DL_FRAME_PARMS
*
fp
);
int
nr_init_frame_parms
(
nfapi_nr_config_request_scf_t
*
config
,
NR_DL_FRAME_PARMS
*
frame_parms
);
int
nr_init_frame_parms_ue
(
NR_DL_FRAME_PARMS
*
frame_parms
,
fapi_nr_config_request_t
*
config
,
uint16_t
nr_band
);
void
nr_init_frame_parms_ue_sa
(
NR_DL_FRAME_PARMS
*
frame_parms
,
uint64_t
downlink_frequency
,
int32_t
uplink_frequency_offset
);
int
init_nr_ue_signal
(
PHY_VARS_NR_UE
*
ue
,
int
nb_connected_eNB
,
uint8_t
abstraction_flag
);
void
init_nr_ue_transport
(
PHY_VARS_NR_UE
*
ue
,
int
abstraction_flag
);
void
init_N_TA_offset
(
PHY_VARS_NR_UE
*
ue
);
...
...
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