684 lines
19 KiB
Cheetah
684 lines
19 KiB
Cheetah
/* OGT templated version of the lteenb configuration file for 4G and 5G NSA */
|
|
|
|
{
|
|
|
|
%if enb.license_server_addr != '0.0.0.0':
|
|
license_server: {
|
|
server_addr: "${enb.license_server_addr}",
|
|
name: "amarisoft",
|
|
},
|
|
%endif
|
|
|
|
% if enb.rf_dev_type == 'zmq':
|
|
/* Force sampling rate (if uncommented) */
|
|
sample_rate: ${enb.sample_rate},
|
|
%endif
|
|
|
|
/* Log filter: syntax: layer.field=value[,...]
|
|
|
|
Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and
|
|
all. The 'all' layer is used to address all the layers at the
|
|
same time.
|
|
|
|
field values:
|
|
|
|
- 'level': the log level of each layer can be set to 'none',
|
|
'error', 'info' or 'debug'. Use 'debug' to log all the messages.
|
|
|
|
- 'max_size': set the maximum size of the hex dump. 0 means no
|
|
hex dump. -1 means no limit.
|
|
*/
|
|
log_options: "${enb.log_options}",
|
|
log_filename: "${enb.log_filename}",
|
|
|
|
% if enb.enable_pcap == 'true':
|
|
pcap: {filename:"${enb.pcap_filename}"},
|
|
%endif
|
|
|
|
/* Enable remote API and Web interface */
|
|
com_addr: "${enb.addr}:9001",
|
|
|
|
/* RF driver configuration */
|
|
include "amarisoft_rf_driver.cfg",
|
|
|
|
% if enb.enable_dl_awgn:
|
|
channel_dl: {
|
|
type: "awgn",
|
|
snr: ${enb.dl_awgn_snr}
|
|
},
|
|
% endif
|
|
|
|
mme_list: [
|
|
{
|
|
s1ap_bind_addr: "${enb.addr}",
|
|
/* address of MME for S1AP connection. Must be modified if the MME
|
|
runs on a different host. */
|
|
mme_addr: "${enb.mme_addr}",
|
|
},
|
|
],
|
|
/* GTP bind address (=address of the ethernet interface connected to
|
|
the MME). Must be modified if the MME runs on a different host. */
|
|
gtp_addr: "${enb.gtp_bind_addr}",
|
|
|
|
/* high 20 bits of SIB1.cellIdentifier */
|
|
enb_id: ${enb.id},
|
|
|
|
% if int(enb.num_nr_cells) > 0:
|
|
nr_support: true,
|
|
% endif
|
|
|
|
/* list of cells */
|
|
cell_list: [
|
|
|
|
%for cell in enb.cell_list:
|
|
%if loop.index == 0:
|
|
{
|
|
dl_earfcn: ${cell.dl_earfcn},
|
|
rf_port: ${cell.rf_port},
|
|
cell_id: ${cell.cell_id},
|
|
n_id_cell: ${cell.pci},
|
|
tac: 0x0007,
|
|
root_sequence_index: ${loop.index * 10 + 204}, /* PRACH root sequence index */
|
|
|
|
ncell_list: [
|
|
%for ncell in cell.ncell_list:
|
|
{ n_id_cell: ${ncell.pci}, dl_earfcn: ${ncell.dl_earfcn}, cell_id: ${ncell.cell_id}, tac: 7 },
|
|
%endfor
|
|
],
|
|
|
|
scell_list: [
|
|
%for scell_id in cell.scell_list:
|
|
{ cell_id: ${scell_id}, cross_carrier_scheduling: false, scheduling_cell_id: ${cell.cell_id}, ul_allowed: true},
|
|
%endfor
|
|
],
|
|
|
|
nr_scell_list: [
|
|
%for nr_scell_id in cell.nr_scell_list:
|
|
{ cell_id: ${nr_scell_id} },
|
|
%endfor
|
|
],
|
|
},
|
|
%endif
|
|
%endfor
|
|
], /* cell_list */
|
|
|
|
% if int(enb.num_nr_cells) > 0:
|
|
|
|
nr_cell_list: [
|
|
|
|
%for nr_cell in enb.nr_cell_list:
|
|
%if loop.index == 0:
|
|
{
|
|
rf_port: ${nr_cell.rf_port},
|
|
cell_id: ${nr_cell.cell_id},
|
|
band: ${nr_cell.band},
|
|
dl_nr_arfcn: ${nr_cell.dl_nr_arfcn},
|
|
},
|
|
%endif
|
|
%endfor
|
|
|
|
], /* nr_cell_list */
|
|
|
|
% endif
|
|
|
|
/* default cell parameters */
|
|
cell_default: {
|
|
/* Broadcasted PLMN identities */
|
|
plmn_list: [
|
|
"${'{0:03}'.format(int(enb.mcc))}${'{0:02}'.format(int(enb.mnc))}",
|
|
],
|
|
|
|
% if enb.get('duplex') == "tdd":
|
|
uldl_config: ${enb.tdd_uldl_config},
|
|
sp_config: ${enb.tdd_special_subframe_pattern},
|
|
% endif
|
|
|
|
% if int(enb.get('transmission_mode')) == 1:
|
|
n_antenna_dl: 1, /* number of DL antennas */
|
|
n_antenna_ul: 1, /* number of UL antennas */
|
|
% else:
|
|
n_antenna_dl: 2, /* number of DL antennas */
|
|
n_antenna_ul: 2, /* number of UL antennas */
|
|
% endif
|
|
|
|
n_rb_dl: ${enb.num_prb}, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
|
|
cyclic_prefix: "normal",
|
|
|
|
phich_duration: "normal",
|
|
phich_resource: "1", /* ratio of NG */
|
|
|
|
/* System Information Block type 1 */
|
|
sib1: "amarisoft_sib1.asn",
|
|
|
|
/* other SIBs, in same order as the scheduling list in SIB 1 */
|
|
sib_sched_list: [ "amarisoft_sib23.asn" ],
|
|
|
|
% if int(enb.num_prb) == 6:
|
|
si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */
|
|
% else:
|
|
si_coderate: 0.20, /* maximum code rate for SI/RA/P-RNTI messages */
|
|
% endif
|
|
si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
|
|
for SI/RA/P-RNTI */
|
|
|
|
n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */
|
|
|
|
/* PDSCH dedicated config (currently same for all UEs) */
|
|
pdsch_dedicated: {
|
|
p_a: 0,
|
|
},
|
|
|
|
/* If defined, force for number of CCEs for UE specific PDCCH to
|
|
2^pdcch_format. Otherwise it is computed from the reported
|
|
CQI. Range: 0 to 3. */
|
|
//pdcch_format: 1,
|
|
|
|
/* if defined, force the PDSCH MCS for all UEs. Otherwise it is
|
|
computed from the reported CQI */
|
|
/* pdsch_mcs: 12, */
|
|
|
|
/* PUSCH dedicated config (currently same for all UEs) */
|
|
pusch_dedicated: {
|
|
beta_offset_ack_index: 9,
|
|
beta_offset_ri_index: 6,
|
|
beta_offset_cqi_index: 6,
|
|
},
|
|
|
|
/* MCS for Msg3 (=CCCH RRC Connection Request) */
|
|
pusch_msg3_mcs: 0,
|
|
|
|
/* this CQI value is assumed when none is received from the UE */
|
|
% if int(enb.num_prb) == 6:
|
|
initial_cqi: 5,
|
|
% else:
|
|
initial_cqi: 3,
|
|
% endif
|
|
|
|
/* if defined, force the PUSCH MCS for all UEs. Otherwise it is
|
|
computed from the last received SRS/PUSCH. */
|
|
// pusch_mcs: 18,
|
|
|
|
transmission_mode: ${enb.transmission_mode},
|
|
|
|
dl_256qam: true,
|
|
ul_64qam: true,
|
|
|
|
/* Scheduling request period (ms). Must be >= 40 for HD-FDD */
|
|
sr_period: 20,
|
|
|
|
/* CQI report config */
|
|
cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */
|
|
|
|
/* RI reporting is done with a period of m_ri * cqi_period.
|
|
m_ri = 0 (default) disables RI reporting. */
|
|
% if int(enb.get('transmission_mode')) > 1:
|
|
m_ri: 8,
|
|
% endif
|
|
|
|
pucch_dedicated: {
|
|
/* ack/nack feedback mode when carrier aggregation is
|
|
enabled. It can be "cs" (for at most two scells) or "pucch3"
|
|
(used in all cases if more than two cells). */
|
|
ack_nack_feedback_mode_ca: "cs",
|
|
|
|
/* TDD ack/nack feedback mode when a rel 10 UE is detected. It
|
|
can be "bundling", "multiplexing", "cs" or "pucch3". By
|
|
default is it the same as tdd_ack_nack_feedback_mode. */
|
|
% if enb.get('duplex') == "tdd":
|
|
tdd_ack_nack_feedback_mode: "bundling",
|
|
// tdd_ack_nack_feedback_mode_r10: "cs",
|
|
% endif
|
|
|
|
n1_pucch_sr_count: 11, /* increase if more UEs are needed */
|
|
cqi_pucch_n_rb: 1, /* increase if more UEs are needed */
|
|
|
|
/* number of PUCCH 1b CS resources. It determines
|
|
the maximum number of UEs that can be scheduled in one TTI
|
|
using carrier aggregation with PUCCH 1b CS ack/nack feedback. */
|
|
n1_pucch_an_cs_count: 1,
|
|
|
|
/* number of resource blocks for PUCCH 3. It determines
|
|
the maximum number of UEs that can be scheduled in one TTI
|
|
using carrier aggregation with PUCCH 3 ack/nack feedback. */
|
|
n3_pucch_an_n_rb: 0,
|
|
},
|
|
|
|
/* SRS dedicated config. All UEs share these
|
|
parameters. srs_config_index and freq_domain_position are
|
|
allocated for each UE) */
|
|
srs_dedicated: {
|
|
srs_period: 160, /* period (ms). Must be >= 40 for HD-FDD */
|
|
srs_bandwidth: 1,
|
|
srs_hopping_bandwidth: 0,
|
|
},
|
|
|
|
/* MAC configuration (same for all UEs) */
|
|
mac_config: {
|
|
ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
|
|
dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
|
|
ul_max_consecutive_retx: 1000,
|
|
},
|
|
|
|
/* CPU load limitation */
|
|
pusch_max_its: 6, /* max number of turbo decoder iterations */
|
|
|
|
/* dynamic power control */
|
|
dpc: true,
|
|
dpc_pusch_snr_target: 15,
|
|
dpc_pucch_snr_target: 10,
|
|
|
|
/* RRC/UP ciphering algorithm preference. EEA0 is always the last. */
|
|
cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],
|
|
/* RRC integrity algorithm preference. EIA0 is always the last. */
|
|
integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],
|
|
|
|
/* (in ms) send RRC connection release after this time of network
|
|
inactivity */
|
|
inactivity_timer: ${enb.inactivity_timer},
|
|
|
|
/* SRB configuration */
|
|
srb_config: [
|
|
{
|
|
id: 1,
|
|
maxRetxThreshold: 32,
|
|
t_Reordering: 45,
|
|
t_PollRetransmit: 60,
|
|
},
|
|
{
|
|
id: 2 ,
|
|
maxRetxThreshold: 32,
|
|
t_Reordering: 45,
|
|
t_PollRetransmit: 60,
|
|
}
|
|
],
|
|
|
|
/* DRB configuration */
|
|
drb_config: "amarisoft_drb.cfg",
|
|
|
|
% if enb.enable_measurements:
|
|
/* measurement configuration */
|
|
meas_config_desc: {
|
|
a1_report_type: "${enb.a1_report_type}",
|
|
a1_${enb.a1_report_type}: ${enb.a1_report_value},
|
|
a1_hysteresis: ${enb.a1_hysteresis},
|
|
a1_time_to_trigger: ${enb.a1_time_to_trigger},
|
|
a2_report_type: "${enb.a2_report_type}",
|
|
a2_${enb.a2_report_type}: ${enb.a2_report_value},
|
|
a2_hysteresis: ${enb.a2_hysteresis},
|
|
a2_time_to_trigger: ${enb.a2_time_to_trigger},
|
|
a3_report_type: "${enb.a3_report_type}",
|
|
a3_offset: ${enb.a3_report_value},
|
|
a3_hysteresis: ${enb.a3_hysteresis},
|
|
a3_time_to_trigger: ${enb.a3_time_to_trigger},
|
|
% if int(enb.num_nr_cells) > 0:
|
|
// NR events hard-coded
|
|
nr_b1_report_type: "rsrp",
|
|
nr_b1_rsrp: -100,
|
|
nr_b1_hysteresis: 0,
|
|
nr_b1_time_to_trigger: 100,
|
|
nr_rsrp_filter_coeff: 3
|
|
% endif
|
|
},
|
|
|
|
/* measurement gap configuration */
|
|
meas_gap_config: "gp0",
|
|
|
|
/* if true, initiate a handover when a suitable measurement report
|
|
is received */
|
|
ho_from_meas: true,
|
|
% endif
|
|
},
|
|
|
|
% if int(enb.num_nr_cells) > 0:
|
|
nr_cell_default: {
|
|
subcarrier_spacing: 15, /* kHz */
|
|
ssb_subcarrier_spacing: 30,
|
|
bandwidth: ${enb.nr_bandwidth}, /* MHz */
|
|
n_antenna_dl: 1,
|
|
n_antenna_ul: 1,
|
|
|
|
/* force the timing TA offset (optional) */
|
|
n_timing_advance_offset: 0,
|
|
|
|
tdd_ul_dl_config: {
|
|
pattern1: {
|
|
period: 10,
|
|
dl_slots: 6,
|
|
dl_symbols: 0,
|
|
ul_slots: 3,
|
|
ul_symbols: 0,
|
|
},
|
|
},
|
|
ssb_pos_bitmap: "10000000",
|
|
ssb_period: 20, /* in ms */
|
|
n_id_cell: 500,
|
|
|
|
root_sequence_index: 1, /* PRACH root sequence index */
|
|
|
|
/* Scheduling request period (slots). */
|
|
sr_period: 40,
|
|
|
|
dmrs_type_a_pos: 2,
|
|
|
|
/* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max;
|
|
allows to workaround issues with SM-G977N for example */
|
|
//pdsch_harq_ack_max: 2,
|
|
|
|
prach: {
|
|
prach_config_index: 0,
|
|
msg1_subcarrier_spacing: 15, /* kHz */
|
|
msg1_fdm: 1,
|
|
% if int(enb.nr_bandwidth) == 10:
|
|
msg1_frequency_start: 1,
|
|
% else:
|
|
msg1_frequency_start: 3,
|
|
% endif
|
|
zero_correlation_zone_config: 0,
|
|
preamble_received_target_power: -110, /* in dBm */
|
|
preamble_trans_max: 7,
|
|
power_ramping_step: 4, /* in dB */
|
|
ra_response_window: 10, /* in slots */
|
|
restricted_set_config: "unrestricted_set",
|
|
ra_contention_resolution_timer: 64, /* in ms */
|
|
ssb_per_prach_occasion: 1,
|
|
cb_preambles_per_ssb: 8,
|
|
},
|
|
|
|
pdcch: {
|
|
common_coreset: {
|
|
rb_start: -1, /* -1 to have the maximum bandwidth */
|
|
l_crb: -1, /* -1 means all the bandwidth */
|
|
duration: 1,
|
|
precoder_granularity: "sameAsREG_bundle",
|
|
//dmrs_scid: 0,
|
|
},
|
|
|
|
dedicated_coreset: {
|
|
rb_start: -1, /* -1 to have the maximum bandwidth */
|
|
l_crb: -1, /* -1 means all the bandwidth */
|
|
duration: 1,
|
|
precoder_granularity: "sameAsREG_bundle",
|
|
//dmrs_scid: 0,
|
|
},
|
|
|
|
css: {
|
|
n_candidates: [ 1, 1, 1, 0, 0 ],
|
|
},
|
|
rar_al_index: 2,
|
|
|
|
uss: {
|
|
n_candidates: [ 0, 2, 1, 0, 0 ],
|
|
dci_0_1_and_1_1: false,
|
|
force_dci_0_0: true, // Forces DCI format 0_0 for Uplink
|
|
force_dci_1_0: true, // Forces DCI format 1_0 for Downlink
|
|
},
|
|
al_index: 1,
|
|
},
|
|
|
|
pdsch: {
|
|
mapping_type: "typeA",
|
|
start_symb: 1,
|
|
n_symb: 13,
|
|
dmrs_add_pos: 1,
|
|
dmrs_type: 1,
|
|
dmrs_max_len: 1,
|
|
k0: 0, /* delay in slots from DCI to PDSCH */
|
|
/* delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK */
|
|
k1: [ 8, 7, 6, 6, 5, 4],
|
|
mcs_table: "qam64",
|
|
|
|
rar_mcs: 2,
|
|
/* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed
|
|
* based on DL channel quality estimation */
|
|
/* mcs: 24, */
|
|
},
|
|
|
|
csi_rs: {
|
|
nzp_csi_rs_resource: [
|
|
{
|
|
csi_rs_id: 0,
|
|
n_ports: 1,
|
|
frequency_domain_allocation: "row2",
|
|
bitmap: "100000000000",
|
|
cdm_type: "no_cdm",
|
|
density: 1,
|
|
first_symb: 4,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
power_control_offset: 0, /* dB */
|
|
power_control_offset_ss: 0, /* dB */
|
|
scrambling_id: 0,
|
|
period: 80,
|
|
offset: 1, /* != 0 to avoid collision with SSB */
|
|
qcl_info_periodic_csi_rs: 0,
|
|
},
|
|
#define USE_TRS
|
|
#ifdef USE_TRS
|
|
/* TRS : period of 40 ms, slots 1 & 2, symbols 4 and 8 */
|
|
{
|
|
csi_rs_id: 1,
|
|
n_ports: 1,
|
|
frequency_domain_allocation: "row1",
|
|
bitmap: "0001",
|
|
cdm_type: "no_cdm",
|
|
density: 3,
|
|
first_symb: 4,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
power_control_offset: 0, /* dB */
|
|
power_control_offset_ss: 0, /* dB */
|
|
scrambling_id: 0,
|
|
period: 40,
|
|
offset: 11,
|
|
qcl_info_periodic_csi_rs: 0,
|
|
},
|
|
{
|
|
csi_rs_id: 2,
|
|
n_ports: 1,
|
|
frequency_domain_allocation: "row1",
|
|
bitmap: "0001",
|
|
cdm_type: "no_cdm",
|
|
density: 3,
|
|
first_symb: 8,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
power_control_offset: 0, /* dB */
|
|
power_control_offset_ss: 0, /* dB */
|
|
scrambling_id: 0,
|
|
period: 40,
|
|
offset: 11,
|
|
qcl_info_periodic_csi_rs: 0,
|
|
},
|
|
{
|
|
csi_rs_id: 3,
|
|
n_ports: 1,
|
|
frequency_domain_allocation: "row1",
|
|
bitmap: "0001",
|
|
cdm_type: "no_cdm",
|
|
density: 3,
|
|
first_symb: 4,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
power_control_offset: 0, /* dB */
|
|
power_control_offset_ss: 0, /* dB */
|
|
scrambling_id: 0,
|
|
period: 40,
|
|
offset: 12,
|
|
qcl_info_periodic_csi_rs: 0,
|
|
},
|
|
{
|
|
csi_rs_id: 4,
|
|
n_ports: 1,
|
|
frequency_domain_allocation: "row1",
|
|
bitmap: "0001",
|
|
cdm_type: "no_cdm",
|
|
density: 3,
|
|
first_symb: 8,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
power_control_offset: 0, /* dB */
|
|
power_control_offset_ss: 0, /* dB */
|
|
scrambling_id: 0,
|
|
period: 40,
|
|
offset: 12,
|
|
qcl_info_periodic_csi_rs: 0,
|
|
},
|
|
#endif
|
|
],
|
|
nzp_csi_rs_resource_set: [
|
|
{
|
|
csi_rs_set_id: 0,
|
|
nzp_csi_rs_resources: [ 0 ],
|
|
repetition: false,
|
|
},
|
|
#ifdef USE_TRS
|
|
{
|
|
csi_rs_set_id: 1,
|
|
nzp_csi_rs_resources: [ 1, 2, 3, 4 ],
|
|
repetition: false,
|
|
trs_info: true,
|
|
},
|
|
#endif
|
|
],
|
|
|
|
csi_im_resource: [
|
|
{
|
|
csi_im_id: 0,
|
|
pattern: 1,
|
|
subcarrier_location: 8,
|
|
symbol_location: 8,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
period: 80,
|
|
offset: 1, /* != 0 to avoid collision with SSB */
|
|
},
|
|
],
|
|
csi_im_resource_set: [
|
|
{
|
|
csi_im_set_id: 0,
|
|
csi_im_resources: [ 0 ],
|
|
}
|
|
],
|
|
/* ZP CSI-RS to set the CSI-IM REs to zero */
|
|
zp_csi_rs_resource: [
|
|
{
|
|
csi_rs_id: 0,
|
|
frequency_domain_allocation: "row4",
|
|
bitmap: "100",
|
|
n_ports: 4,
|
|
cdm_type: "fd_cdm2",
|
|
first_symb: 8,
|
|
density: 1,
|
|
rb_start: 0,
|
|
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
|
|
period: 80,
|
|
offset: 1,
|
|
},
|
|
],
|
|
p_zp_csi_rs_resource_set: [
|
|
{
|
|
zp_csi_rs_resources: [ 0 ],
|
|
},
|
|
],
|
|
|
|
csi_resource_config: [
|
|
{
|
|
csi_rsc_config_id: 0,
|
|
nzp_csi_rs_resource_set_list: [ 0 ],
|
|
resource_type: "periodic",
|
|
},
|
|
{
|
|
csi_rsc_config_id: 1,
|
|
csi_im_resource_set_list: [ 0 ],
|
|
resource_type: "periodic",
|
|
},
|
|
#ifdef USE_TRS
|
|
{
|
|
csi_rsc_config_id: 2,
|
|
nzp_csi_rs_resource_set_list: [ 1 ],
|
|
resource_type: "periodic",
|
|
},
|
|
#endif
|
|
],
|
|
csi_report_config: [
|
|
{
|
|
resources_for_channel_measurement: 0,
|
|
csi_im_resources_for_interference: 1,
|
|
report_config_type: "periodic",
|
|
period: 80,
|
|
report_quantity: "CRI_RI_PMI_CQI",
|
|
cqi_table: 2,
|
|
subband_size: "value1",
|
|
},
|
|
],
|
|
},
|
|
|
|
pucch: {
|
|
pucch_group_hopping: "neither",
|
|
hopping_id: -1, /* -1 = n_cell_id */
|
|
p0_nominal: -90,
|
|
pucch1: {
|
|
n_cs: 3,
|
|
n_occ: 3,
|
|
freq_hopping: false,
|
|
},
|
|
pucch2: {
|
|
n_symb: 2,
|
|
n_prb: 1,
|
|
freq_hopping: false,
|
|
simultaneous_harq_ack_csi: false,
|
|
max_code_rate: 0.25,
|
|
},
|
|
},
|
|
|
|
pusch: {
|
|
mapping_type: "typeA",
|
|
n_symb: 14,
|
|
dmrs_add_pos: 1,
|
|
dmrs_type: 1,
|
|
dmrs_max_len: 1,
|
|
tf_precoding: false,
|
|
mcs_table: "qam64", /* without transform precoding */
|
|
mcs_table_tp: "qam64", /* with transform precoding */
|
|
ldpc_max_its: 5,
|
|
k2: 4, /* delay in slots from DCI to PUSCH */
|
|
p0_nominal_with_grant: -90,
|
|
msg3_k2: 5,
|
|
msg3_mcs: 4,
|
|
msg3_delta_power: 0, /* in dB */
|
|
beta_offset_ack_index: 9,
|
|
|
|
/* hardcoded scheduling parameters */
|
|
n_dmrs_cdm_groups: 1,
|
|
n_layer: 1,
|
|
/* if defined, force the PUSCH MCS for all UEs. Otherwise it is
|
|
computed from the last received PUSCH. */
|
|
//mcs: 16,
|
|
//max_mcs: 16,
|
|
},
|
|
|
|
/* MAC configuration */
|
|
mac_config: {
|
|
msg3_max_harq_tx: 5,
|
|
ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
|
|
dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
|
|
ul_max_consecutive_retx: 30, /* disconnect UE if reached */
|
|
dl_max_consecutive_retx: 30, /* disconnect UE if reached */
|
|
periodic_bsr_timer: 20,
|
|
retx_bsr_timer: 320,
|
|
periodic_phr_timer: 500,
|
|
prohibit_phr_timer: 200,
|
|
phr_tx_power_factor_change: "dB3",
|
|
sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */
|
|
sr_trans_max: 64,
|
|
},
|
|
|
|
cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],
|
|
integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],
|
|
|
|
inactivity_timer: ${enb.inactivity_timer},
|
|
|
|
drb_config: "amarisoft_drb_nr.cfg",
|
|
},
|
|
% endif
|
|
} |