Commit 2278a0ef authored by khalidhamdy's avatar khalidhamdy

Merge branch 'RU-RAU-split' of...

Merge branch 'RU-RAU-split' of https://gitlab.eurecom.fr/raymond.knopp/openairinterface5g into RU-RAU-split
parents 7d7adbac 1ca5c8c4
...@@ -192,7 +192,11 @@ void phy_config_request(PHY_Config_t *phy_config) { ...@@ -192,7 +192,11 @@ void phy_config_request(PHY_Config_t *phy_config) {
fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0] = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0] = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value;
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value;
AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0], AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0],
"prach_starting_subframe_periodicity[0] < prach_numPetitionPerPreambleAttempt[0]\n"); "prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n",
fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0],
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]);
AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0,
"prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n");
fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value;
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value;
fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value;
......
...@@ -148,6 +148,8 @@ typedef struct { ...@@ -148,6 +148,8 @@ typedef struct {
uint16_t nb_rb; uint16_t nb_rb;
/// downlink power offset field /// downlink power offset field
uint8_t dl_power_off; uint8_t dl_power_off;
/// start symbold of pdsch
uint8_t pdsch_start;
/// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18) /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
uint8_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32))); uint8_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
/// Turbo-code outputs (36-212 V8.6 2009-03, p.12 /// Turbo-code outputs (36-212 V8.6 2009-03, p.12
...@@ -250,6 +252,13 @@ typedef struct { ...@@ -250,6 +252,13 @@ typedef struct {
uint8_t decode_phich; uint8_t decode_phich;
} LTE_UL_UE_HARQ_t; } LTE_UL_UE_HARQ_t;
#ifdef Rel14
typedef enum {
CEmodeA = 0,
CEmodeB = 1
} CEmode_t;
#endif
typedef struct { typedef struct {
/// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding) /// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
int32_t *txdataF[8]; int32_t *txdataF[8];
...@@ -292,7 +301,11 @@ typedef struct { ...@@ -292,7 +301,11 @@ typedef struct {
/// amplitude of PDSCH (compared to RS) in symbols containing pilots /// amplitude of PDSCH (compared to RS) in symbols containing pilots
int16_t sqrt_rho_b; int16_t sqrt_rho_b;
#ifdef Rel14 #ifdef Rel14
/// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling
uint8_t sib1_br_flag; uint8_t sib1_br_flag;
/// initial absolute subframe (see 36.211 Section 6.3.1), needed for c_init for scrambling
uint16_t i0;
CEmode_t CEmode;
#endif #endif
} LTE_eNB_DLSCH_t; } LTE_eNB_DLSCH_t;
......
...@@ -74,23 +74,50 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -74,23 +74,50 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
int harq_pid, int harq_pid,
int G, int G,
uint8_t q, uint8_t q,
uint16_t frame,
uint8_t Ns) uint8_t Ns)
{ {
int i; int n;
// uint8_t reset; // uint8_t reset;
uint32_t x1, x2, s=0; uint32_t x1, x2, s=0;
uint8_t *dlsch_e=dlsch->harq_processes[harq_pid]->e; uint8_t *dlsch_e=dlsch->harq_processes[harq_pid]->e;
uint8_t *e=dlsch_e; uint8_t *e=dlsch_e;
#ifdef Rel14
// Rule for accumulation of subframes for BL/CE UEs
uint8_t Nacc=4;
uint16_t j0,j,idelta;
uint16_t i = (Ns>>1) + (10*frame);
uint16_t i0 = dlsch->i0;
if (dlsch->sib1_br_flag==1) Nacc=1;
else if (dlsch->rnti == 0xFFFF || dlsch->rnti == 0xFFFE) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4;
// Note: above SC-RNTI will also have to be added when/if implemented
else if (dlsch->CEmode == CEmodeA) Nacc=1;
else if (dlsch->CEmode == CEmodeB) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4;
if (frame_parms->frame_type == FDD || Nacc == 1) idelta = 0;
else idelta = Nacc-2;
j0 = (i0+idelta)/Nacc;
j = (i - i0)/Nacc;
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_SCRAMBLING, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_SCRAMBLING, VCD_FUNCTION_IN);
// reset = 1; // reset = 1;
// x1 is set in lte_gold_generic // x1 is set in lte_gold_generic
if (mbsfn_flag == 0) { if (mbsfn_flag == 0) {
x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1 #ifdef Rel14
if (dlsch->i0 != 0xFFFF) {
// rule for BL/CE UEs from Section 6.3.1 in 36.211
x2= (dlsch->rnti<<14) + (q<<13) + ((((j0+j)*Nacc)%10)<<9) + frame_parms->Nid_cell;
if ((frame&1023) < 200) LOG_D(PHY,"Scrambling init for (i0 %d, i %d, j0 %d, j %d, Nacc %d) => x2 %d\n",i0,i,j0,j,Nacc,x2);
}
else
#endif
x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1 for PDSCH
} else { } else {
x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 for PMCH
} }
#ifdef DEBUG_SCRAMBLING #ifdef DEBUG_SCRAMBLING
...@@ -98,7 +125,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -98,7 +125,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
#endif #endif
s = lte_gold_scram(&x1, &x2, 1); s = lte_gold_scram(&x1, &x2, 1);
for (i=0; i<(1+(G>>5)); i++) { for (n=0; n<(1+(G>>5)); n++) {
#ifdef DEBUG_SCRAMBLING #ifdef DEBUG_SCRAMBLING
printf("scrambling %d : %d => ",k,e[k]); printf("scrambling %d : %d => ",k,e[k]);
......
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file PHY/LTE_TRANSPORT/dci.c
* \brief Implements PDCCH physical channel TX/RX procedures (36.211) and DCI encoding/decoding (36.212/36.213). Current LTE compliance V8.6 2009-03.
* \author R. Knopp
* \date 2011
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \note
* \warning
*/
#ifdef USER_MODE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "SCHED/defs.h"
#include "SIMULATION/TOOLS/defs.h" // for taus
#include "PHY/sse_intrin.h"
#include "assertions.h"
#include "T.h"
#include "UTIL/LOG/log.h"
//#define DEBUG_DCI_ENCODING 1
//#define DEBUG_DCI_DECODING 1
//#define DEBUG_PHY
typedef struct {
uint8_t num_dci;
mDCI_ALLOC_t mdci_alloc[32];
} LTE_eNB_MPDCCH;
typedef struct {
/// Length of DCI in bits
uint8_t dci_length;
/// Aggregation level
uint8_t L;
/// Position of first CCE of the dci
int firstCCE;
/// flag to indicate that this is a RA response
boolean_t ra_flag;
/// rnti
rnti_t rnti;
/// Format
DCI_format_t format;
/// harq process index
uint8_t harq_pid;
/// Narrowband index
uint8_t narrowband;
/// number of PRB pairs for MPDCCH
uint8_t number_of_prb_pairs;
/// mpdcch resource assignement (0=localized,1=distributed)
uint8_t resource_block_assignment;
/// transmission type
uint8_t transmission_type;
/// mpdcch start symbol
uint8_t start_symbol;
/// CE mode (1=ModeA,2=ModeB)
uint8_t ce_mode;
/// 0-503 n_EPDCCHid_i
uint16_t dmrs_scrambling_init;
/// Absolute subframe of the initial transmission (0-10239)
uint16_t initial_transmission_sf_io;
/// DCI pdu
uint8_t dci_pdu[8];
} mDCI_ALLOC_t;
void generate_edci_top(PHY_VARS_eNB *eNB, int frame, int subframe) {
}
void generate_mdci_top(PHY_VARS_eNB *eNB, int frame, int subframe) {
LTE_eNB_MPDCCH *mpdcch= &eNB->mpdcch_vars[subframe&2];
mDCI_ALLOC_t *mdci;
uint8_t e[DCI_BITS_MAX];
for (i=0;i<mpdcch->num_dci;i++) {
mdci = &mdpcch->mdci_alloc[i];
// Assume 4 EREG/ECCE case (normal prefix)
AssertFatal(eNB->frame_parms.frame_type==FDD,"TDD is not yet supported for MPDCCH\n");
// 9 REs/EREG => 36 REs/ECCE => 72 bits/ECCE
generate_dci0(mdci->dci_pdu,
e+(72*mdci->firstCCE),
mdci_length,
mdci->L,
mdci->rnti);
// compute MPDCCH format based on parameters from NFAPI
AssertFatal(mdci->reps>0,"mdci->reps==0\n");
if (reps==0) { // table 6.8A.1-1
AssertFatal(eNB->frame_parms->Ncp == NORMAL,"Extended Prefix not yet supported for MPDCCH\n");
N_ECCE_EREG = 4;
}
}
}
...@@ -285,6 +285,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a) ...@@ -285,6 +285,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a)
int G; int G;
int subframe = proc->subframe_tx; int subframe = proc->subframe_tx;
int frame = proc->frame_tx;
if (eNB->abstraction_flag != 0) { if (eNB->abstraction_flag != 0) {
if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0) if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0)
...@@ -324,7 +325,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a) ...@@ -324,7 +325,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a)
&eNB->dlsch_interleaving_stats)==0, &eNB->dlsch_interleaving_stats)==0,
"problem in dlsch_encoding"); "problem in dlsch_encoding");
dlsch_scrambling(&eNB->frame_parms,1,eNB->dlsch_MCH,0,G,0,subframe<<1); dlsch_scrambling(&eNB->frame_parms,1,eNB->dlsch_MCH,0,G,0,frame,subframe<<1);
mch_modulation(eNB->common_vars.txdataF, mch_modulation(eNB->common_vars.txdataF,
......
...@@ -1117,6 +1117,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1117,6 +1117,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
uint8_t restricted_set; uint8_t restricted_set;
uint8_t n_ra_prb; uint8_t n_ra_prb;
int frame;
int subframe; int subframe;
int16_t *prachF=NULL; int16_t *prachF=NULL;
int16_t **rxsigF=NULL; int16_t **rxsigF=NULL;
...@@ -1152,9 +1153,9 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1152,9 +1153,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
#ifdef Rel14 #ifdef Rel14
int prach_ifft_cnt=0; int prach_ifft_cnt=0;
#endif #endif
#ifdef PRACH_DEBUG //#ifdef PRACH_DEBUG
int en,en0=0; int en,en0=0;
#endif //#endif
if (ru) { if (ru) {
fp = &ru->frame_parms; fp = &ru->frame_parms;
...@@ -1204,17 +1205,27 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1204,17 +1205,27 @@ void rx_prach0(PHY_VARS_eNB *eNB,
#ifdef Rel14 #ifdef Rel14
if (br_flag == 1) { if (br_flag == 1) {
prach_ifftp = eNB->prach_vars_br.prach_ifft[ce_level]; prach_ifftp = eNB->prach_vars_br.prach_ifft[ce_level];
frame = eNB->proc.frame_prach_br;
subframe = eNB->proc.subframe_prach_br; subframe = eNB->proc.subframe_prach_br;
prachF = eNB->prach_vars_br.prachF; prachF = eNB->prach_vars_br.prachF;
rxsigF = eNB->prach_vars_br.rxsigF; rxsigF = eNB->prach_vars_br.rxsigF;
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
br_flag,ce_level,frame,subframe,
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
prach_ConfigIndex,rootSequenceIndex,
eNB->prach_vars_br.repetition_number[ce_level],
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
} }
else else
#endif #endif
{ {
prach_ifftp = eNB->prach_vars.prach_ifft[0]; prach_ifftp = eNB->prach_vars.prach_ifft[0];
frame = eNB->proc.frame_prach;
subframe = eNB->proc.subframe_prach; subframe = eNB->proc.subframe_prach;
prachF = eNB->prach_vars.prachF; prachF = eNB->prach_vars.prachF;
rxsigF = eNB->prach_vars.rxsigF; rxsigF = eNB->prach_vars.rxsigF;
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n",
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
} }
} }
else { else {
...@@ -1222,16 +1233,17 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1222,16 +1233,17 @@ void rx_prach0(PHY_VARS_eNB *eNB,
if (br_flag == 1) { if (br_flag == 1) {
subframe = ru->proc.subframe_prach_br; subframe = ru->proc.subframe_prach_br;
rxsigF = ru->prach_rxsigF_br[ce_level]; rxsigF = ru->prach_rxsigF_br[ce_level];
LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", if ((frame&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex); br_flag,ce_level,frame,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
} }
else else
#endif #endif
{ {
subframe = ru->proc.subframe_prach; subframe = ru->proc.subframe_prach;
rxsigF = ru->prach_rxsigF; rxsigF = ru->prach_rxsigF;
LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", if ((frame&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex); subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
} }
} }
...@@ -1241,9 +1253,9 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1241,9 +1253,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
for (aa=0; aa<nb_rx; aa++) { for (aa=0; aa<nb_rx; aa++) {
if (ru->if_south == LOCAL_RF) { // set the time-domain signal if we have to use it in this node if (ru->if_south == LOCAL_RF) { // set the time-domain signal if we have to use it in this node
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset]; prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
#ifdef PRACH_DEBUG //#ifdef PRACH_DEBUG
LOG_D(PHY,"RU %d, subframe %d, : prach %p (energy %d)\n",ru->idx,subframe,prach[aa],dB_fixed(en0=signal_energy(prach[aa],fp->samples_per_tti))); if ((frame&1023) < 20) LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d, : prach %p (energy %d)\n",ru->idx,br_flag,ce_level,frame,subframe,prach[aa],dB_fixed(en0=signal_energy(prach[aa],fp->samples_per_tti)));
#endif //#endif
} }
} }
...@@ -1467,11 +1479,11 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1467,11 +1479,11 @@ void rx_prach0(PHY_VARS_eNB *eNB,
} else if (eNB!=NULL) { } else if (eNB!=NULL) {
#if 0 //#if 0
en = dB_fixed(signal_energy(&rxsigF[0][0],840)); en = dB_fixed(signal_energy(&rxsigF[0][0],840));
/*if (en>60)*/ /*if (en>60)*/
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en); if ((frame&1023) < 20) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
#endif //#endif
} }
...@@ -1506,6 +1518,9 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1506,6 +1518,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
*max_preamble_energy=0; *max_preamble_energy=0;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) { for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",frame,subframe,preamble_index,br_flag);
if (restricted_set == 0) { if (restricted_set == 0) {
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index // This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS))); preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
...@@ -1588,9 +1603,10 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1588,9 +1603,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
} }
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex // Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
#ifdef PRACH_DEBUG //#ifdef PRACH_DEBUG
LOG_I(PHY,"preamble index %d: offset %d, preamble shift %d\n",preamble_index,preamble_offset,preamble_shift); if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
#endif frame,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
//#endif
log2_ifft_size = 10; log2_ifft_size = 10;
fft_size = 6144; fft_size = 6144;
...@@ -1678,6 +1694,8 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1678,6 +1694,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level])) eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
#endif #endif
{ {
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",frame,subframe,br_flag,en);
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC)); preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
...@@ -1689,8 +1707,10 @@ void rx_prach0(PHY_VARS_eNB *eNB, ...@@ -1689,8 +1707,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
*max_preamble_energy = levdB; *max_preamble_energy = levdB;
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2; *max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
*max_preamble = preamble_index; *max_preamble = preamble_index;
if (en>60) LOG_I(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d, en %d)\n",frame,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,en);
} }
} }
} }
}// preamble_index }// preamble_index
......
...@@ -1973,6 +1973,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -1973,6 +1973,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
int hard_pid, int hard_pid,
int G, int G,
uint8_t q, uint8_t q,
uint16_t frame,
uint8_t Ns); uint8_t Ns);
void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms, void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
......
...@@ -802,11 +802,13 @@ typedef struct { ...@@ -802,11 +802,13 @@ typedef struct {
uint8_t harq_pid; uint8_t harq_pid;
/// Narrowband index /// Narrowband index
uint8_t narrowband; uint8_t narrowband;
/// number of repetitions
uint8_t reps;
/// number of PRB pairs for MPDCCH /// number of PRB pairs for MPDCCH
uint8_t number_of_prb_pairs; uint8_t number_of_prb_pairs;
/// mpdcch resource assignement (0=localized,1=distributed) /// mpdcch resource assignement (combinatorial index r)
uint8_t resource_block_assignment; uint8_t resource_block_assignment;
/// transmission type /// transmission type (0=localized,1=distributed)
uint8_t transmission_type; uint8_t transmission_type;
/// mpdcch start symbol /// mpdcch start symbol
uint8_t start_symbol; uint8_t start_symbol;
......
...@@ -705,8 +705,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -705,8 +705,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch,
LTE_eNB_DLSCH_t *dlsch1, LTE_eNB_DLSCH_t *dlsch1,
LTE_eNB_UE_stats *ue_stats, LTE_eNB_UE_stats *ue_stats,
int ra_flag, int ra_flag) {
int num_pdcch_symbols) {
int frame=proc->frame_tx; int frame=proc->frame_tx;
int subframe=proc->subframe_tx; int subframe=proc->subframe_tx;
...@@ -716,16 +715,16 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -716,16 +715,16 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
int i; int i;
if (frame < 20) { if (frame < 20) {
LOG_I(PHY, LOG_D(PHY,
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", num_pdcch_symbols %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n", "[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", pdsch_start %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
eNB->Mod_id, dlsch->rnti,harq_pid, eNB->Mod_id, dlsch->rnti,harq_pid,
frame, subframe, input_buffer_length, num_pdcch_symbols, frame, subframe, input_buffer_length, dlsch_harq->pdsch_start,
get_G(fp, get_G(fp,
dlsch_harq->nb_rb, dlsch_harq->nb_rb,
dlsch_harq->rb_alloc, dlsch_harq->rb_alloc,
dlsch_harq->Qm, dlsch_harq->Qm,
dlsch_harq->Nl, dlsch_harq->Nl,
num_pdcch_symbols, dlsch_harq->pdsch_start,
frame, frame,
subframe, subframe,
dlsch_harq->mimo_mode==TM7?7:0), dlsch_harq->mimo_mode==TM7?7:0),
...@@ -736,8 +735,6 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -736,8 +735,6 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
pmi2hex_2Ar1(dlsch_harq->pmi_alloc), pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
dlsch_harq->rvidx, dlsch_harq->rvidx,
dlsch_harq->round); dlsch_harq->round);
for (i=0;i<dlsch_harq->TBS>>3;i++) printf("%x.",dlsch_harq->pdu[i]);
printf("\n");
} }
#if defined(MESSAGE_CHART_GENERATOR_PHY) #if defined(MESSAGE_CHART_GENERATOR_PHY)
MSC_LOG_TX_MESSAGE( MSC_LOG_TX_MESSAGE(
...@@ -751,7 +748,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -751,7 +748,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
dlsch_harq->rb_alloc, dlsch_harq->rb_alloc,
dlsch_harq->Qm, dlsch_harq->Qm,
dlsch_harq->Nl, dlsch_harq->Nl,
num_pdcch_symbols, dlsch_harq->pdsch_start,
frame, frame,
subframe, subframe,
dlsch_harq->mimo_mode==TM7?7:0), dlsch_harq->mimo_mode==TM7?7:0),
...@@ -857,7 +854,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -857,7 +854,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
start_meas(&eNB->dlsch_encoding_stats); start_meas(&eNB->dlsch_encoding_stats);
eNB->te(eNB, eNB->te(eNB,
dlsch_harq->pdu, dlsch_harq->pdu,
num_pdcch_symbols, dlsch_harq->pdsch_start,
dlsch, dlsch,
frame,subframe, frame,subframe,
&eNB->dlsch_rate_matching_stats, &eNB->dlsch_rate_matching_stats,
...@@ -875,10 +872,11 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -875,10 +872,11 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
dlsch_harq->rb_alloc, dlsch_harq->rb_alloc,
dlsch_harq->Qm, dlsch_harq->Qm,
dlsch_harq->Nl, dlsch_harq->Nl,
num_pdcch_symbols, dlsch_harq->pdsch_start,
frame,subframe, frame,subframe,
0), 0),
0, 0,
frame,
subframe<<1); subframe<<1);
stop_meas(&eNB->dlsch_scrambling_stats); stop_meas(&eNB->dlsch_scrambling_stats);
...@@ -889,7 +887,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -889,7 +887,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
eNB->common_vars.txdataF, eNB->common_vars.txdataF,
AMP, AMP,
subframe, subframe,
num_pdcch_symbols, dlsch_harq->pdsch_start,
dlsch, dlsch,
dlsch1); dlsch1);
...@@ -991,6 +989,9 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, ...@@ -991,6 +989,9 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
uint8_t *sdu) { uint8_t *sdu) {
nfapi_dl_config_dlsch_pdu_rel8_t *rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8; nfapi_dl_config_dlsch_pdu_rel8_t *rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8;
#ifndef Rel8
nfapi_dl_config_dlsch_pdu_rel10_t *rel10 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10;
#endif
#ifdef Rel14 #ifdef Rel14
nfapi_dl_config_dlsch_pdu_rel13_t *rel13 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13; nfapi_dl_config_dlsch_pdu_rel13_t *rel13 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13;
#endif #endif
...@@ -1017,6 +1018,12 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, ...@@ -1017,6 +1018,12 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
dlsch1_harq = dlsch1->harq_processes[harq_pid]; dlsch1_harq = dlsch1->harq_processes[harq_pid];
AssertFatal(dlsch0_harq!=NULL,"dlsch_harq is null\n"); AssertFatal(dlsch0_harq!=NULL,"dlsch_harq is null\n");
dlsch0_harq->pdsch_start = eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols;
LOG_D(PHY,"NFAPI: frame %d, subframe %d: programming dlsch, rnti %x, UE_id %d, harq_pid %d\n", LOG_D(PHY,"NFAPI: frame %d, subframe %d: programming dlsch, rnti %x, UE_id %d, harq_pid %d\n",
proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid); proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid);
if (codeword_index == 0) dlsch0_harq->pdu = sdu; if (codeword_index == 0) dlsch0_harq->pdu = sdu;
...@@ -1029,6 +1036,8 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, ...@@ -1029,6 +1036,8 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
dlsch0->Kmimo = 1; dlsch0->Kmimo = 1;
dlsch0->Mdlharq = 4; dlsch0->Mdlharq = 4;
dlsch0->Nsoft = 25344; dlsch0->Nsoft = 25344;
dlsch0->i0 = rel13->initial_transmission_sf_io;
dlsch0_harq->pdsch_start = rel10->pdsch_start;
if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1; if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1;
...@@ -1470,13 +1479,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, ...@@ -1470,13 +1479,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
dlsch0, dlsch0,
dlsch1, dlsch1,
&eNB->UE_stats[(uint32_t)UE_id], &eNB->UE_stats[(uint32_t)UE_id],
0, 0);
#ifdef Rel14
dlsch0->sib1_br_flag==0 ? num_pdcch_symbols : 3
#else
num_pdcch_symbols
#endif
);
} }
...@@ -2013,6 +2016,8 @@ void prach_procedures(PHY_VARS_eNB *eNB, ...@@ -2013,6 +2016,8 @@ void prach_procedures(PHY_VARS_eNB *eNB,
} }
} }
if ((frame&1023) < 20) LOG_I(PHY,"Frame %d, subframe %d: Running rx_prach (br_flag %d)\n",
frame,subframe,br_flag);
rx_prach(eNB, rx_prach(eNB,
eNB->RU_list[0], eNB->RU_list[0],
&max_preamble[0], &max_preamble[0],
......
...@@ -250,7 +250,7 @@ typedef struct RrcConfigurationReq_s { ...@@ -250,7 +250,7 @@ typedef struct RrcConfigurationReq_s {
long prach_HoppingConfig_r13 [MAX_NUM_CCs][4]; long prach_HoppingConfig_r13 [MAX_NUM_CCs][4];
int prach_parameters_list_size [MAX_NUM_CCs]; int prach_parameters_list_size [MAX_NUM_CCs];
long max_available_narrow_band [MAX_NUM_CCs][4][2]; long max_available_narrow_band [MAX_NUM_CCs][4][2];
int max_available_narrow_band_size [MAX_NUM_CCs]; int max_available_narrow_band_size [MAX_NUM_CCs][4];
// end kogo // end kogo
...@@ -259,6 +259,32 @@ typedef struct RrcConfigurationReq_s { ...@@ -259,6 +259,32 @@ typedef struct RrcConfigurationReq_s {
int pucch_info_value_size [MAX_NUM_CCs]; int pucch_info_value_size [MAX_NUM_CCs];
// end kogo // end kogo
// +kogo
bool pcch_config_v1310 [MAX_NUM_CCs];
long paging_narrowbands_r13 [MAX_NUM_CCs];
long mpdcch_numrepetition_paging_r13 [MAX_NUM_CCs];
long *nb_v1310 [MAX_NUM_CCs];
long *pucch_NumRepetitionCE_Msg4_Level0_r13 [MAX_NUM_CCs];
long *pucch_NumRepetitionCE_Msg4_Level1_r13 [MAX_NUM_CCs];
long *pucch_NumRepetitionCE_Msg4_Level2_r13 [MAX_NUM_CCs];
long *pucch_NumRepetitionCE_Msg4_Level3_r13 [MAX_NUM_CCs];
bool sib2_freq_hoppingParameters_r13_exists [MAX_NUM_CCs];
long *sib2_mpdcch_pdsch_hoppingNB_r13 [MAX_NUM_CCs];
long *sib2_interval_DLHoppingConfigCommonModeA_r13 [MAX_NUM_CCs];
long sib2_interval_DLHoppingConfigCommonModeA_r13_val [MAX_NUM_CCs];
long *sib2_interval_DLHoppingConfigCommonModeB_r13 [MAX_NUM_CCs];
long sib2_interval_DLHoppingConfigCommonModeB_r13_val [MAX_NUM_CCs];
long *sib2_interval_ULHoppingConfigCommonModeA_r13 [MAX_NUM_CCs];
long sib2_interval_ULHoppingConfigCommonModeA_r13_val [MAX_NUM_CCs];
long *sib2_interval_ULHoppingConfigCommonModeB_r13 [MAX_NUM_CCs];
long sib2_interval_ULHoppingConfigCommonModeB_r13_val [MAX_NUM_CCs];
long *sib2_mpdcch_pdsch_hoppingOffset_r13 [MAX_NUM_CCs];
#endif #endif
} RrcConfigurationReq; } RrcConfigurationReq;
......
This diff is collapsed.
...@@ -339,15 +339,16 @@ void config_sib2(int Mod_idP, ...@@ -339,15 +339,16 @@ void config_sib2(int Mod_idP,
cfg->emtc_config.prach_ce_level_1_enable.value=0; cfg->emtc_config.prach_ce_level_1_enable.value=0;
cfg->emtc_config.prach_ce_level_2_enable.value=0; cfg->emtc_config.prach_ce_level_2_enable.value=0;
cfg->emtc_config.prach_ce_level_3_enable.value=0; cfg->emtc_config.prach_ce_level_3_enable.value=0;
switch (prach_ParametersListCE_r13->list.count) { switch (prach_ParametersListCE_r13->list.count) {
case 4: case 4:
p=prach_ParametersListCE_r13->list.array[3]; p=prach_ParametersListCE_r13->list.array[3];
cfg->emtc_config.prach_ce_level_3_enable.value = 1; cfg->emtc_config.prach_ce_level_3_enable.value = 1;
cfg->emtc_config.prach_ce_level_3_configuration_index.value = p->prach_ConfigIndex_r13; cfg->emtc_config.prach_ce_level_3_configuration_index.value = p->prach_ConfigIndex_r13;
cfg->emtc_config.prach_ce_level_3_frequency_offset.value = p->prach_FreqOffset_r13; cfg->emtc_config.prach_ce_level_3_frequency_offset.value = p->prach_FreqOffset_r13;
cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
if (p->prach_StartingSubframe_r13) if (p->prach_StartingSubframe_r13)
cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
cfg->emtc_config.prach_ce_level_3_hopping_enable.value = p->prach_HoppingConfig_r13; cfg->emtc_config.prach_ce_level_3_hopping_enable.value = p->prach_HoppingConfig_r13;
cfg->emtc_config.prach_ce_level_3_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; cfg->emtc_config.prach_ce_level_3_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
case 3: case 3:
...@@ -355,9 +356,9 @@ void config_sib2(int Mod_idP, ...@@ -355,9 +356,9 @@ void config_sib2(int Mod_idP,
cfg->emtc_config.prach_ce_level_2_enable.value = 1; cfg->emtc_config.prach_ce_level_2_enable.value = 1;
cfg->emtc_config.prach_ce_level_2_configuration_index.value = p->prach_ConfigIndex_r13; cfg->emtc_config.prach_ce_level_2_configuration_index.value = p->prach_ConfigIndex_r13;
cfg->emtc_config.prach_ce_level_2_frequency_offset.value = p->prach_FreqOffset_r13; cfg->emtc_config.prach_ce_level_2_frequency_offset.value = p->prach_FreqOffset_r13;
cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
if (p->prach_StartingSubframe_r13) if (p->prach_StartingSubframe_r13)
cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
cfg->emtc_config.prach_ce_level_2_hopping_enable.value = p->prach_HoppingConfig_r13; cfg->emtc_config.prach_ce_level_2_hopping_enable.value = p->prach_HoppingConfig_r13;
cfg->emtc_config.prach_ce_level_2_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; cfg->emtc_config.prach_ce_level_2_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
case 2: case 2:
...@@ -365,9 +366,9 @@ void config_sib2(int Mod_idP, ...@@ -365,9 +366,9 @@ void config_sib2(int Mod_idP,
cfg->emtc_config.prach_ce_level_1_enable.value = 1; cfg->emtc_config.prach_ce_level_1_enable.value = 1;
cfg->emtc_config.prach_ce_level_1_configuration_index.value = p->prach_ConfigIndex_r13; cfg->emtc_config.prach_ce_level_1_configuration_index.value = p->prach_ConfigIndex_r13;
cfg->emtc_config.prach_ce_level_1_frequency_offset.value = p->prach_FreqOffset_r13; cfg->emtc_config.prach_ce_level_1_frequency_offset.value = p->prach_FreqOffset_r13;
cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
if (p->prach_StartingSubframe_r13) if (p->prach_StartingSubframe_r13)
cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
cfg->emtc_config.prach_ce_level_1_hopping_enable.value = p->prach_HoppingConfig_r13; cfg->emtc_config.prach_ce_level_1_hopping_enable.value = p->prach_HoppingConfig_r13;
cfg->emtc_config.prach_ce_level_1_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; cfg->emtc_config.prach_ce_level_1_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
case 1: case 1:
...@@ -375,13 +376,16 @@ void config_sib2(int Mod_idP, ...@@ -375,13 +376,16 @@ void config_sib2(int Mod_idP,
cfg->emtc_config.prach_ce_level_0_enable.value = 1; cfg->emtc_config.prach_ce_level_0_enable.value = 1;
cfg->emtc_config.prach_ce_level_0_configuration_index.value = p->prach_ConfigIndex_r13; cfg->emtc_config.prach_ce_level_0_configuration_index.value = p->prach_ConfigIndex_r13;
cfg->emtc_config.prach_ce_level_0_frequency_offset.value = p->prach_FreqOffset_r13; cfg->emtc_config.prach_ce_level_0_frequency_offset.value = p->prach_FreqOffset_r13;
cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
AssertFatal(p->prach_StartingSubframe_r13!=NULL,"prach_StartingSubframe_r13 is null\n");
if (p->prach_StartingSubframe_r13) if (p->prach_StartingSubframe_r13)
cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
cfg->emtc_config.prach_ce_level_0_hopping_enable.value = p->prach_HoppingConfig_r13; cfg->emtc_config.prach_ce_level_0_hopping_enable.value = p->prach_HoppingConfig_r13;
cfg->emtc_config.prach_ce_level_0_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; cfg->emtc_config.prach_ce_level_0_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
} }
AssertFatal(cfg->emtc_config.prach_ce_level_0_enable.value>0,"CE_level0 is not enabled\n");
struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13; struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13;
if ((ext4_freqHoppingParameters) && if ((ext4_freqHoppingParameters) &&
(ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)){ (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)){
......
...@@ -311,6 +311,9 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t ...@@ -311,6 +311,9 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
// Rel10 fields
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
// Rel13 fields
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP;
...@@ -659,6 +662,8 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t ...@@ -659,6 +662,8 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP;
......
...@@ -196,7 +196,7 @@ schedule_SIB1_BR( ...@@ -196,7 +196,7 @@ schedule_SIB1_BR(
AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS); AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS);
if ((frameP&1023) < 200) LOG_I(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx); if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx);
// allocate all 6 PRBs in narrowband for SIB1_BR // allocate all 6 PRBs in narrowband for SIB1_BR
...@@ -235,6 +235,8 @@ schedule_SIB1_BR( ...@@ -235,6 +235,8 @@ schedule_SIB1_BR(
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
// Rel10 fields
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
// Rel13 fields // Rel13 fields
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR
...@@ -311,7 +313,7 @@ schedule_SI_BR( ...@@ -311,7 +313,7 @@ schedule_SI_BR(
nfapi_dl_config_request_body_t *dl_req; nfapi_dl_config_request_body_t *dl_req;
int i; int i;
int rvidx; int rvidx;
int absSF = (frameP*10)+subframeP;
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
...@@ -362,7 +364,7 @@ schedule_SI_BR( ...@@ -362,7 +364,7 @@ schedule_SI_BR(
// check if the SI is to be scheduled now // check if the SI is to be scheduled now
int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
int sf_mod_period = ((frameP*10)+subframeP)%period_in_sf; int sf_mod_period = absSF%period_in_sf;
int k = sf_mod_period&3; int k = sf_mod_period&3;
// Note: definition of k and rvidx from 36.321 section 5.3.1 // Note: definition of k and rvidx from 36.321 section 5.3.1
rvidx = (((3*k)>>1) + (k&1))&3; rvidx = (((3*k)>>1) + (k&1))&3;
...@@ -391,14 +393,14 @@ schedule_SI_BR( ...@@ -391,14 +393,14 @@ schedule_SI_BR(
// check that SIB1 didn't take this narrowband // check that SIB1 didn't take this narrowband
if (vrb_map[first_rb] > 0) continue; if (vrb_map[first_rb] > 0) continue;
first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13); first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13-1);
vrb_map[first_rb] = 1; vrb_map[first_rb] = 1;
vrb_map[first_rb+1] = 1; vrb_map[first_rb+1] = 1;
vrb_map[first_rb+2] = 1; vrb_map[first_rb+2] = 1;
vrb_map[first_rb+4] = 1; vrb_map[first_rb+4] = 1;
vrb_map[first_rb+5] = 1; vrb_map[first_rb+5] = 1;
if ((frameP%1000) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n", if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx, module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx,
sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13, sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13,
bcch_sdu_length); bcch_sdu_length);
...@@ -432,10 +434,12 @@ schedule_SI_BR( ...@@ -432,10 +434,12 @@ schedule_SI_BR(
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
// Rel10 fields (for PDSCH starting symbol)
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
// Rel13 fields // Rel13 fields
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period;
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
dl_req->number_pdu++; dl_req->number_pdu++;
...@@ -757,7 +761,7 @@ schedule_SI( ...@@ -757,7 +761,7 @@ schedule_SI(
#ifdef Rel14 #ifdef Rel14
schedule_SIB1_BR(module_idP,frameP,subframeP); schedule_SIB1_BR(module_idP,frameP,subframeP);
// schedule_SI_BR(module_idP,frameP,subframeP); schedule_SI_BR(module_idP,frameP,subframeP);
#endif #endif
stop_meas(&eNB->schedule_si); stop_meas(&eNB->schedule_si);
......
This diff is collapsed.
...@@ -333,6 +333,24 @@ init_SI( ...@@ -333,6 +333,24 @@ init_SI(
sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension; sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension;
// Basic Asserts for CE_level0 PRACH configuration
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR = &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2_BR->radioResourceConfigCommon;
struct PRACH_ConfigSIB_v1310 *ext4_prach=radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310;
PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13;
AssertFatal(prach_ParametersListCE_r13->list.count>0,"prach_ParametersListCE_r13 is empty\n");
PRACH_ParametersCE_r13_t *p = prach_ParametersListCE_r13->list.array[0];
AssertFatal(p->prach_StartingSubframe_r13 != NULL, "prach_StartingSubframe_r13 celevel0 is null\n");
AssertFatal((1<<p->numRepetitionPerPreambleAttempt_r13)<=(2<<*p->prach_StartingSubframe_r13),
"prachce0->numReptitionPerPreambleAttempt_r13 %d > prach_StartingSubframe_r13 %d\n",
1<<p->numRepetitionPerPreambleAttempt_r13,
2<<*p->prach_StartingSubframe_r13);
} }
#endif #endif
......
...@@ -48,7 +48,7 @@ eNBs = ...@@ -48,7 +48,7 @@ eNBs =
prach_config_index = 0; prach_config_index = 0;
prach_high_speed = "DISABLE"; prach_high_speed = "DISABLE";
prach_zero_correlation = 1; prach_zero_correlation = 1;
prach_freq_offset = 2; prach_freq_offset = 1;
pucch_delta_shift = 1; pucch_delta_shift = 1;
pucch_nRB_CQI = 1; pucch_nRB_CQI = 1;
pucch_nCS_AN = 0; pucch_nCS_AN = 0;
...@@ -109,36 +109,37 @@ eNBs = ...@@ -109,36 +109,37 @@ eNBs =
# BR Parameters # BR Parameters
br_parameters : br_parameters :
{ {
fdd_DownlinkOrTddSubframeBitmapBR_r13 = "subframePattern40-r13";
fdd_DownlinkOrTddSubframeBitmapBR_val_r13 = 0xFFFFFFFFFF;
#SIB1 #SIB1
schedulingInfoSIB1_BR_r13 = 4; schedulingInfoSIB1_BR_r13 = 4;
hyperSFN_r13 = 0; #hyperSFN_r13 = 0;
#eDRX_Allowed_r13 = 0; #eDRX_Allowed_r13 = 0;
cellSelectionInfoCE_r13 = "ENABLE"; cellSelectionInfoCE_r13 = "ENABLE";
q_RxLevMinCE_r13 = -50; q_RxLevMinCE_r13 = -70;
#q_QualMinRSRQ_CE_r13 = ; #q_QualMinRSRQ_CE_r13 = ;
bandwidthReducedAccessRelatedInfo_r13 = "ENABLE" bandwidthReducedAccessRelatedInfo_r13 = "ENABLE"
scheduling_info_br = scheduling_info_br =
( (
{ {
si_Narrowband_r13 = 5; si_Narrowband_r13 = 5;
si_TBS_r13 = 4; si_TBS_r13 = 5;
} }
); );
si_WindowLength_BR_r13 = 0; si_WindowLength_BR_r13 = 0;
si_RepetitionPattern_r13 = 0; si_RepetitionPattern_r13 = 0;
fdd_DownlinkOrTddSubframeBitmapBR_r13 = "subframePattern10-r13" startSymbolBR_r13 = 3;
fdd_DownlinkOrTddSubframeBitmapBR_val_r13 = 0;
fdd_UplinkSubframeBitmapBR_r13 = 0;
startSymbolBR_r13 = 1;
si_HoppingConfigCommon_r13 = 1; # Note: 1==OFF ! si_HoppingConfigCommon_r13 = 1; # Note: 1==OFF !
si_ValidityTime_r13 = 0; si_ValidityTime_r13 = 0;
system_info_value_tag_SI = #system_info_value_tag_SI =
( #(
{ # {
systemInfoValueTagSi_r13 = 0; # systemInfoValueTagSi_r13 = 0;
} # }
); #);
freqHoppingParametersDL_r13 = "ENABLE" freqHoppingParametersDL_r13 = "DISABLE"
mpdcch_pdsch_HoppingNB_r13 = 0; mpdcch_pdsch_HoppingNB_r13 = 0;
interval_DLHoppingConfigCommonModeA_r13 = "interval-FDD-r13" interval_DLHoppingConfigCommonModeA_r13 = "interval-FDD-r13"
interval_DLHoppingConfigCommonModeA_r13_val = 0; interval_DLHoppingConfigCommonModeA_r13_val = 0;
...@@ -149,17 +150,17 @@ eNBs = ...@@ -149,17 +150,17 @@ eNBs =
# SIB23 # SIB23
frame_type = "FDD"; frame_type = "FDD";
preambleTransMax_CE_r13 = 10; preambleTransMax_CE_r13 = 6;
# max 4 # max 4
rach_CE_LevelInfoList_r13 = rach_CE_LevelInfoList_r13 =
( (
{ {
firstPreamble_r13 = 0; firstPreamble_r13 = 60;
lastPreamble_r13 = 63; lastPreamble_r13 = 63;
ra_ResponseWindowSize_r13 = 0; ra_ResponseWindowSize_r13 = 0;
mac_ContentionResolutionTimer_r13 = 0; mac_ContentionResolutionTimer_r13 = 0;
rar_HoppingConfig_r13 = 0; rar_HoppingConfig_r13 = 1;
} }
); );
...@@ -169,7 +170,7 @@ eNBs = ...@@ -169,7 +170,7 @@ eNBs =
rsrp_range_list = rsrp_range_list =
( (
{ {
rsrp_range_br = 60; rsrp_range_br = 0;
} }
); );
...@@ -180,41 +181,63 @@ eNBs = ...@@ -180,41 +181,63 @@ eNBs =
prach_config_index_br = 3; prach_config_index_br = 3;
prach_freq_offset_br = 1; prach_freq_offset_br = 1;
prach_StartingSubframe_r13 = 0; prach_StartingSubframe_r13 = 0;
maxNumPreambleAttemptCE_r13 = 0; maxNumPreambleAttemptCE_r13 = 6;
numRepetitionPerPreambleAttempt_r13 = 0; numRepetitionPerPreambleAttempt_r13 = 0;
mpdcch_NumRepetition_RA_r13 = 0; mpdcch_NumRepetition_RA_r13 = 0;
prach_HoppingConfig_r13 = 0; prach_HoppingConfig_r13 = 1;
max_available_narrow_band = max_available_narrow_band = [2];
(
{
maxavailablenarrowband = 2;
}
);
} }
); );
n1PUCCH_AN_InfoList_r13 = n1PUCCH_AN_InfoList_r13 =
( (
{ {
pucch_info_value = 12; pucch_info_value = 0;
},
{
pucch_info_value = 13;
} }
); );
pcch_config_v1310 :
{
paging_narrowbands_r13 = 1;
mpdcch_numrepetition_paging_r13 = 0;
#nb_v1310 = 2;
}
pucch_NumRepetitionCE_Msg4_Level0_r13 = 0;
#pucch_NumRepetitionCE_Msg4_Level1_r13 = 1;
#pucch_NumRepetitionCE_Msg4_Level2_r13 = 2;
#pucch_NumRepetitionCE_Msg4_Level3_r13 = 3;
sib2_freq_hoppingParameters_r13 :
{
# sib2_mpdcch_pdsch_hoppingNB_r13 = 0;
# sib2_interval_DLHoppingConfigCommonModeA_r13 = 0; # choice -> (0, FDD) (1, TDD)
# sib2_interval_DLHoppingConfigCommonModeA_r13_val = 0;
# sib2_interval_DLHoppingConfigCommonModeB_r13 = 0; # choice -> (0, FDD) (1, TDD)
# sib2_interval_DLHoppingConfigCommonModeB_r13_val = 0;
sib2_interval_ULHoppingConfigCommonModeA_r13 = 0; # choice -> (0, FDD) (1, TDD)
sib2_interval_ULHoppingConfigCommonModeA_r13_val = 2;
# sib2_interval_ULHoppingConfigCommonModeB_r13 = 0; # choice -> (0, FDD) (1, TDD)
# sib2_interval_ULHoppingConfigCommonModeB_r13_val = 0;
# sib2_mpdcch_pdsch_hoppingOffset_r13 = 1;
}
mpdcch_startSF_CSS_RA_r13 = "fdd-r13" mpdcch_startSF_CSS_RA_r13 = "fdd-r13"
mpdcch_startSF_CSS_RA_r13_val = 5; mpdcch_startSF_CSS_RA_r13_val = 0;
#prach_HoppingOffset_r13 = ; prach_HoppingOffset_r13 = 0;
prach_root = 1; prach_root = 89;
prach_config_index = 0; prach_config_index = 3;
prach_high_speed = "DISABLE"; prach_high_speed = "DISABLE";
prach_zero_correlation = 1; prach_zero_correlation = 1;
prach_freq_offset = 3; prach_freq_offset = 1;
pucch_delta_shift = 1; pucch_delta_shift = 1;
pucch_nRB_CQI = 1; pucch_nRB_CQI = 0;
pucch_nCS_AN = 0; pucch_nCS_AN = 0;
pucch_n1_AN = 32; pucch_n1_AN = 32;
pdsch_referenceSignalPower = -27; pdsch_referenceSignalPower = -27;
...@@ -226,7 +249,7 @@ eNBs = ...@@ -226,7 +249,7 @@ eNBs =
pusch_groupHoppingEnabled = "ENABLE"; pusch_groupHoppingEnabled = "ENABLE";
pusch_groupAssignment = 0; pusch_groupAssignment = 0;
pusch_sequenceHoppingEnabled = "DISABLE"; pusch_sequenceHoppingEnabled = "DISABLE";
pusch_nDMRS1 = 1; pusch_nDMRS1 = 0;
phich_duration = "NORMAL"; phich_duration = "NORMAL";
phich_resource = "ONESIXTH"; phich_resource = "ONESIXTH";
srs_enable = "DISABLE"; srs_enable = "DISABLE";
...@@ -239,7 +262,7 @@ eNBs = ...@@ -239,7 +262,7 @@ eNBs =
pucch_deltaF_Format2 = "deltaF0"; pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0"; pucch_deltaF_Format2a = "deltaF0";
pucch_deltaF_Format2b = "deltaF0"; pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 64; rach_numberOfRA_Preambles = 60;
rach_preamblesGroupAConfig = "DISABLE"; rach_preamblesGroupAConfig = "DISABLE";
rach_powerRampingStep = 4; rach_powerRampingStep = 4;
rach_preambleInitialReceivedTargetPower = -108; rach_preambleInitialReceivedTargetPower = -108;
...@@ -251,11 +274,11 @@ eNBs = ...@@ -251,11 +274,11 @@ eNBs =
pcch_nB = "oneT"; pcch_nB = "oneT";
bcch_modificationPeriodCoeff = 2; bcch_modificationPeriodCoeff = 2;
ue_TimersAndConstants_t300 = 1000; ue_TimersAndConstants_t300 = 1000;
ue_TimersAndConstants_t301 = 1000; ue_TimersAndConstants_t301 = 400;
ue_TimersAndConstants_t310 = 1000; ue_TimersAndConstants_t310 = 50;
ue_TimersAndConstants_t311 = 10000; ue_TimersAndConstants_t311 = 30000;
ue_TimersAndConstants_n310 = 20; ue_TimersAndConstants_n310 = 1;
ue_TimersAndConstants_n311 = 1; ue_TimersAndConstants_n311 = 10;
ue_TransmissionMode = 1; ue_TransmissionMode = 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment