Merge branch '36-srs-feature-development' into develop1B
This commit is contained in:
@@ -931,6 +931,7 @@ set(SCHED_SRC
|
||||
${OPENAIR1_DIR}/SCHED/phy_mac_stub.c
|
||||
${OPENAIR1_DIR}/SCHED/pucch_pc.c
|
||||
${OPENAIR1_DIR}/SCHED/pusch_pc.c
|
||||
${OPENAIR1_DIR}/SCHED/srs_pc.c
|
||||
)
|
||||
add_library(SCHED_LIB ${SCHED_SRC})
|
||||
|
||||
|
||||
@@ -489,6 +489,26 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *eNB)
|
||||
|
||||
}
|
||||
|
||||
if (physicalConfigDedicated->soundingRS_UL_ConfigDedicated) {
|
||||
if (physicalConfigDedicated->soundingRS_UL_ConfigDedicated->present == SchedulingRequestConfig_PR_setup) {
|
||||
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].duration = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.duration;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].cyclicShift = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].freqDomainPosition = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].srs_Bandwidth = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].srs_ConfigIndex = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].srs_HoppingBandwidth = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth;
|
||||
eNB->soundingrs_ul_config_dedicated[UE_id].transmissionComb = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb;
|
||||
|
||||
|
||||
LOG_D(PHY,"soundingrs_ul_config_dedicated.srs_ConfigIndex %d\n",eNB->soundingrs_ul_config_dedicated[UE_id].srs_ConfigIndex);
|
||||
|
||||
}
|
||||
|
||||
LOG_D(PHY,"------------------------------------------------------------\n");
|
||||
|
||||
}
|
||||
|
||||
eNB->physicalConfigDedicated[UE_id] = NULL;
|
||||
}
|
||||
}
|
||||
@@ -859,6 +879,28 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
|
||||
|
||||
}
|
||||
|
||||
if (physicalConfigDedicated->soundingRS_UL_ConfigDedicated) {
|
||||
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srsConfigDedicatedSetup = 0;
|
||||
if (physicalConfigDedicated->soundingRS_UL_ConfigDedicated->present == SchedulingRequestConfig_PR_setup) {
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srsConfigDedicatedSetup = 1;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].duration = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.duration;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].cyclicShift = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].freqDomainPosition = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srs_Bandwidth = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srs_ConfigIndex = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srs_HoppingBandwidth = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth;
|
||||
phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].transmissionComb = physicalConfigDedicated->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb;
|
||||
|
||||
|
||||
LOG_D(PHY,"soundingrs_ul_config_dedicated.srs_ConfigIndex %d\n",phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id].srs_ConfigIndex);
|
||||
}
|
||||
|
||||
LOG_D(PHY,"------------------------------------------------------------\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
#ifdef CBA
|
||||
|
||||
if (physicalConfigDedicated->pusch_CBAConfigDedicated_vlola) {
|
||||
|
||||
@@ -2865,7 +2865,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
|
||||
}
|
||||
}
|
||||
|
||||
LOG_D(PHY,"DCI decoding CRNTI [format_c: %d, nCCE[subframe: %d]: %d ]\n",format_c, subframe, pdcch_vars[eNB_id]->nCCE[subframe]);
|
||||
LOG_D(PHY,"DCI decoding CRNTI [format: %d, nCCE[subframe: %d]: %d ], AggregationLevel %d \n",format_c, subframe, pdcch_vars[eNB_id]->nCCE[subframe],L2);
|
||||
// memcpy(&dci_alloc[*dci_cnt].dci_pdu[0],dci_decoded_output,sizeof_bytes);
|
||||
|
||||
|
||||
|
||||
@@ -341,6 +341,8 @@ typedef struct {
|
||||
int16_t Po_PUSCH;
|
||||
/// PHR - current power headroom (based on last PUSCH transmission)
|
||||
int16_t PHR;
|
||||
/// Po_SRS - target output power for SRS
|
||||
int16_t Po_SRS;
|
||||
/// num active cba group
|
||||
uint8_t num_active_cba_groups;
|
||||
/// num dci found for cba
|
||||
|
||||
@@ -50,6 +50,8 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
// This is from Section 5.5.1.3
|
||||
uint32_t fss_pusch = frame_parms->Nid_cell + frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
|
||||
|
||||
uint32_t fss_pucch = frame_parms->Nid_cell;
|
||||
|
||||
x2 = frame_parms->Nid_cell/30;
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
printf("[PHY] GroupHop:");
|
||||
@@ -57,7 +59,10 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
|
||||
for (ns=0; ns<20; ns++) {
|
||||
if (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == 0)
|
||||
{
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns] = fss_pusch%30;
|
||||
frame_parms->pucch_config_common.grouphop[ns] = fss_pucch%30;
|
||||
}
|
||||
else {
|
||||
if ((ns&3) == 0) {
|
||||
s = lte_gold_generic(&x1,&x2,reset);
|
||||
@@ -65,6 +70,7 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
}
|
||||
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns] = (((uint8_t*)&s)[ns&3]+fss_pusch)%30;
|
||||
frame_parms->pucch_config_common.grouphop[ns] = (((uint8_t*)&s)[ns&3]+fss_pucch)%30;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
|
||||
@@ -137,11 +137,10 @@ int32_t generate_srs_tx(PHY_VARS_UE *ue,
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
|
||||
SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
|
||||
int32_t *txdataF = ue->common_vars.txdataF[0];
|
||||
int32_t **txdataF = ue->common_vars.txdataF;
|
||||
uint16_t msrsb=0,Nb=0,nb,b,msrs0=0,k,Msc_RS,Msc_RS_idx,carrier_pos,symbol_offset;
|
||||
uint16_t *Msc_idx_ptr;
|
||||
int32_t k0;
|
||||
uint32_t T_SFC;
|
||||
uint32_t subframe_offset;
|
||||
uint8_t Bsrs = soundingrs_ul_config_dedicated->srs_Bandwidth;
|
||||
uint8_t Csrs = frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig;
|
||||
@@ -149,6 +148,16 @@ int32_t generate_srs_tx(PHY_VARS_UE *ue,
|
||||
uint8_t n_RRC = soundingrs_ul_config_dedicated->freqDomainPosition;
|
||||
uint8_t kTC = soundingrs_ul_config_dedicated->transmissionComb;
|
||||
|
||||
// u is the PUCCH sequence-group number defined in Section 5.5.1.3
|
||||
// ν is the base sequence number defined in Section 5.5.1.4
|
||||
uint32_t u=frame_parms->pucch_config_common.grouphop[1+(subframe<<1)];;
|
||||
uint32_t v=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
|
||||
|
||||
LOG_D(PHY,"SRS root sequence: u %d, v %d\n",u,v);
|
||||
LOG_D(PHY,"CommonSrsConfig: Csrs %d, Ssrs %d, AnSrsSimultan %d \n",Csrs,Ssrs,frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission);
|
||||
LOG_D(PHY,"DedicatedSrsConfig: Bsrs %d, bhop %d, nRRC %d, Isrs %d, kTC %d, n_SRS %d\n",Bsrs,soundingrs_ul_config_dedicated->srs_HoppingBandwidth,n_RRC
|
||||
,soundingrs_ul_config_dedicated->srs_ConfigIndex,kTC
|
||||
,soundingrs_ul_config_dedicated->cyclicShift);
|
||||
|
||||
if (frame_parms->N_RB_UL < 41) {
|
||||
msrs0 = msrsb_6_40[Csrs][0];
|
||||
@@ -169,7 +178,7 @@ int32_t generate_srs_tx(PHY_VARS_UE *ue,
|
||||
}
|
||||
|
||||
Msc_RS = msrsb * 6;
|
||||
k0 = (((frame_parms->N_RB_UL>>1)-(msrs0>>1))*12) + kTC;
|
||||
k0 = ( ( (int16_t)(frame_parms->N_RB_UL>>1) - (int16_t)(msrs0>>1) ) * 12 ) + kTC;
|
||||
nb = (4*n_RRC/msrsb)%Nb;
|
||||
|
||||
for (b=0; b<=Bsrs; b++) {
|
||||
@@ -208,53 +217,32 @@ int32_t generate_srs_tx(PHY_VARS_UE *ue,
|
||||
msg("generate_srs_tx: Msc_RS = %d, Msc_RS_idx = %d\n",Msc_RS, Msc_RS_idx);
|
||||
#endif
|
||||
|
||||
T_SFC = (Ssrs<=7 ? 5 : 10);
|
||||
carrier_pos = (frame_parms->first_carrier_offset + k0);
|
||||
if (carrier_pos>frame_parms->ofdm_symbol_size) {
|
||||
carrier_pos -= frame_parms->ofdm_symbol_size;
|
||||
}
|
||||
uint16_t nsymb = (frame_parms->Ncp==0) ? 14:12;
|
||||
symbol_offset = (int)frame_parms->ofdm_symbol_size*((subframe*nsymb)+(nsymb-1));
|
||||
|
||||
if ((1<<(subframe%T_SFC))&transmission_offset_tdd[Ssrs]) {
|
||||
|
||||
#ifndef IFFT_FPGA_UE
|
||||
carrier_pos = (frame_parms->first_carrier_offset + k0) % frame_parms->ofdm_symbol_size;
|
||||
//msg("carrier_pos = %d\n",carrier_pos);
|
||||
//subframe_offset = subframe*frame_parms->symbols_per_tti*frame_parms->ofdm_symbol_size;
|
||||
//symbol_offset = subframe_offset+(frame_parms->symbols_per_tti-1)*frame_parms->ofdm_symbol_size;
|
||||
|
||||
subframe_offset = subframe*frame_parms->symbols_per_tti*frame_parms->ofdm_symbol_size;
|
||||
symbol_offset = subframe_offset+(frame_parms->symbols_per_tti-1)*frame_parms->ofdm_symbol_size;
|
||||
int32_t *txptr;
|
||||
txptr = &txdataF[0][symbol_offset];
|
||||
|
||||
for (k=0; k<Msc_RS; k++) {
|
||||
((short*) txdataF)[2*(symbol_offset + carrier_pos)] = (short) (((int32_t) amp * (int32_t) ul_ref_sigs[0][0][Msc_RS_idx][k<<1])>>15);
|
||||
((short*) txdataF)[2*(symbol_offset + carrier_pos)+1] = (short) (((int32_t) amp * (int32_t) ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1])>>15);
|
||||
carrier_pos+=2;
|
||||
int32_t real = ((int32_t) amp * (int32_t) ul_ref_sigs[u][v][Msc_RS_idx][k<<1]) >> 15;
|
||||
int32_t imag = ((int32_t) amp * (int32_t) ul_ref_sigs[u][v][Msc_RS_idx][(k<<1)+1]) >> 15;
|
||||
txptr[carrier_pos] = (real&0xFFFF) + ((imag<<16)&0xFFFF0000);
|
||||
|
||||
|
||||
carrier_pos = carrier_pos+2;
|
||||
|
||||
if (carrier_pos >= frame_parms->ofdm_symbol_size)
|
||||
carrier_pos=1;
|
||||
carrier_pos=carrier_pos-frame_parms->ofdm_symbol_size;
|
||||
}
|
||||
|
||||
#else
|
||||
carrier_pos = (frame_parms->N_RB_UL*12/2 + k0) % (frame_parms->N_RB_UL*12);
|
||||
//msg("carrier_pos = %d\n",carrier_pos);
|
||||
|
||||
subframe_offset = subframe*frame_parms->symbols_per_tti*frame_parms->N_RB_UL*12;
|
||||
symbol_offset = subframe_offset+(frame_parms->symbols_per_tti-1)*frame_parms->N_RB_UL*12;
|
||||
|
||||
for (k=0; k<Msc_RS; k++) {
|
||||
if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] >= 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] >= 0))
|
||||
txdataF[symbol_offset+carrier_pos] = (int32_t) 4;
|
||||
else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] >= 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] < 0))
|
||||
txdataF[symbol_offset+carrier_pos] = (int32_t) 2;
|
||||
else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] < 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] >= 0))
|
||||
txdataF[symbol_offset+carrier_pos] = (int32_t) 3;
|
||||
else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] < 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] < 0))
|
||||
txdataF[symbol_offset+carrier_pos] = (int32_t) 1;
|
||||
|
||||
carrier_pos+=2;
|
||||
|
||||
if (carrier_pos >= frame_parms->N_RB_UL*12)
|
||||
carrier_pos=0;
|
||||
}
|
||||
|
||||
#endif
|
||||
// write_output("srs_txF.m","srstxF",&txdataF[symbol_offset],512,1,1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -118,5 +118,17 @@ extern char eNB_timing[2][20];
|
||||
extern int16_t unscrambling_lut[65536*16];
|
||||
extern uint8_t scrambling_lut[65536*16];
|
||||
|
||||
extern unsigned short msrsb_6_40[8][4];
|
||||
extern unsigned short msrsb_41_60[8][4];
|
||||
extern unsigned short msrsb_61_80[8][4];
|
||||
extern unsigned short msrsb_81_110[8][4];
|
||||
extern unsigned short Nb_6_40[8][4];
|
||||
extern unsigned short Nb_41_60[8][4];
|
||||
extern unsigned short Nb_61_80[8][4];
|
||||
extern unsigned short Nb_81_110[8][4];
|
||||
|
||||
extern uint16_t hundred_times_log10_NPRB[100];
|
||||
extern uint8_t alpha_lut[8];
|
||||
|
||||
#endif /*__PHY_EXTERN_H__ */
|
||||
|
||||
|
||||
@@ -148,6 +148,11 @@ typedef struct {
|
||||
uint8_t nCS_AN;
|
||||
/// Parameter: \f$N^{(1)}_\text{PUCCH}\f$ see TS 36.213 (10.1). \vr{[0..2047]}
|
||||
uint16_t n1PUCCH_AN;
|
||||
|
||||
/// group hopping sequence for DRS \note not part of offical UL-PUCCH_CONFIG_COMMON ASN1 specification.
|
||||
uint8_t grouphop[20];
|
||||
/// sequence hopping sequence for DRS \note not part of offical UL-PUCCH_CONFIG_COMMON ASN1 specification.
|
||||
uint8_t seqhop[20];
|
||||
} PUCCH_CONFIG_COMMON;
|
||||
|
||||
/// UL-ReferenceSignalsPUSCH from 36.331 RRC spec
|
||||
@@ -319,6 +324,12 @@ typedef struct {
|
||||
uint16_t srs_ConfigIndex;
|
||||
/// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). \vr{[0..7]} \note the specification sais it is an enumerated value.
|
||||
uint8_t cyclicShift;
|
||||
// Parameter: ue srs subframe for internal implementation
|
||||
uint8_t srsConfigDedicatedSetup;
|
||||
// Parameter: cell srs subframe for internal implementation
|
||||
uint8_t srsCellSubframe;
|
||||
// Parameter: ue srs subframe for internal implementation
|
||||
uint8_t srsUeSubframe;
|
||||
} SOUNDINGRS_UL_CONFIG_DEDICATED;
|
||||
|
||||
/// UplinkPowerControlDedicated Information Element from 36.331 RRC spec
|
||||
|
||||
@@ -3,3 +3,4 @@ SCHED_OBJS += $(TOP_DIR)/SCHED/phy_procedures_lte_ue.o
|
||||
SCHED_OBJS += $(TOP_DIR)/SCHED/phy_procedures_lte_eNb.o
|
||||
SCHED_OBJS += $(TOP_DIR)/SCHED/pusch_pc.o
|
||||
SCHED_OBJS += $(TOP_DIR)/SCHED/pucch_pc.o
|
||||
SCHED_OBJS += $(TOP_DIR)/SCHED/srs_pc.o
|
||||
|
||||
@@ -444,6 +444,15 @@ int8_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,ui
|
||||
*/
|
||||
void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t j, uint8_t abstraction_flag);
|
||||
|
||||
/*! \brief This function implements the power control mechanism for SRS from 36.213.
|
||||
@param phy_vars_ue PHY variables
|
||||
@param proc Pointer to proc descriptor
|
||||
@param eNB_id Index of eNB
|
||||
@param j index of type of PUSCH (SPS, Normal, Msg3)
|
||||
@returns Transmit power
|
||||
*/
|
||||
void srs_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t *pnb_rb_srs, uint8_t abstraction_flag);
|
||||
|
||||
int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id, uint8_t eNB_index);
|
||||
|
||||
#ifdef LOCALIZATION
|
||||
|
||||
@@ -385,6 +385,186 @@ uint8_t is_SR_TXOp(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id)
|
||||
return(0);
|
||||
}
|
||||
|
||||
void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset)
|
||||
{
|
||||
if(TDD == frameType)
|
||||
{
|
||||
if(isrs<10)
|
||||
{
|
||||
mac_xface->macphy_exit("2 ms SRS periodicity not supported");
|
||||
}
|
||||
|
||||
if((isrs>9)&&(isrs<15))
|
||||
{
|
||||
*psrsPeriodicity=5;
|
||||
*psrsOffset=isrs-10;
|
||||
}
|
||||
if((isrs>14)&&(isrs<25))
|
||||
{
|
||||
*psrsPeriodicity=10;
|
||||
*psrsOffset=isrs-15;
|
||||
}
|
||||
if((isrs>24)&&(isrs<45))
|
||||
{
|
||||
*psrsPeriodicity=20;
|
||||
*psrsOffset=isrs-25;
|
||||
}
|
||||
if((isrs>44)&&(isrs<85))
|
||||
{
|
||||
*psrsPeriodicity=40;
|
||||
*psrsOffset=isrs-45;
|
||||
}
|
||||
if((isrs>84)&&(isrs<165))
|
||||
{
|
||||
*psrsPeriodicity=80;
|
||||
*psrsOffset=isrs-85;
|
||||
}
|
||||
if((isrs>164)&&(isrs<325))
|
||||
{
|
||||
*psrsPeriodicity=160;
|
||||
*psrsOffset=isrs-165;
|
||||
}
|
||||
if((isrs>324)&&(isrs<645))
|
||||
{
|
||||
*psrsPeriodicity=320;
|
||||
*psrsOffset=isrs-325;
|
||||
}
|
||||
|
||||
if(isrs>644)
|
||||
{
|
||||
mac_xface->macphy_exit("Isrs out of range");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if(isrs<2)
|
||||
{
|
||||
*psrsPeriodicity=2;
|
||||
*psrsOffset=isrs;
|
||||
}
|
||||
if((isrs>1)&&(isrs<7))
|
||||
{
|
||||
*psrsPeriodicity=5;
|
||||
*psrsOffset=isrs-2;
|
||||
}
|
||||
if((isrs>6)&&(isrs<17))
|
||||
{
|
||||
*psrsPeriodicity=10;
|
||||
*psrsOffset=isrs-7;
|
||||
}
|
||||
if((isrs>16)&&(isrs<37))
|
||||
{
|
||||
*psrsPeriodicity=20;
|
||||
*psrsOffset=isrs-17;
|
||||
}
|
||||
if((isrs>36)&&(isrs<77))
|
||||
{
|
||||
*psrsPeriodicity=40;
|
||||
*psrsOffset=isrs-37;
|
||||
}
|
||||
if((isrs>76)&&(isrs<157))
|
||||
{
|
||||
*psrsPeriodicity=80;
|
||||
*psrsOffset=isrs-77;
|
||||
}
|
||||
if((isrs>156)&&(isrs<317))
|
||||
{
|
||||
*psrsPeriodicity=160;
|
||||
*psrsOffset=isrs-157;
|
||||
}
|
||||
if((isrs>316)&&(isrs<637))
|
||||
{
|
||||
*psrsPeriodicity=320;
|
||||
*psrsOffset=isrs-317;
|
||||
}
|
||||
if(isrs>636)
|
||||
{
|
||||
mac_xface->macphy_exit("Isrs out of range");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id)
|
||||
{
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
int frame_tx = proc->frame_tx;
|
||||
int subframe_tx = proc->subframe_tx;
|
||||
uint8_t isSubframeSRS = 0; // SRS Cell Occasion
|
||||
|
||||
SOUNDINGRS_UL_CONFIG_DEDICATED *pSoundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
|
||||
|
||||
// check for SRS opportunity
|
||||
pSoundingrs_ul_config_dedicated->srsUeSubframe = 0;
|
||||
pSoundingrs_ul_config_dedicated->srsCellSubframe = 0;
|
||||
|
||||
ue->ulsch[eNB_id]->srs_active = 0;
|
||||
ue->ulsch[eNB_id]->Nsymb_pusch = 12-(frame_parms->Ncp<<1)- ue->ulsch[eNB_id]->srs_active;
|
||||
if(frame_parms->soundingrs_ul_config_common.enabled_flag)
|
||||
{
|
||||
|
||||
LOG_D(PHY," SRS SUBFRAMECONFIG: %d, Isrs: %d \n", frame_parms->soundingrs_ul_config_common.srs_SubframeConfig, pSoundingrs_ul_config_dedicated->srs_ConfigIndex);
|
||||
|
||||
uint8_t TSFC;
|
||||
uint16_t deltaTSFC; // bitmap
|
||||
uint8_t srs_SubframeConfig;
|
||||
uint16_t srsPeriodicity;
|
||||
uint16_t srsOffset;
|
||||
|
||||
// table resuming TSFC (Period) and deltaSFC (offset)
|
||||
const uint16_t deltaTSFCTabType1[15][2] = { {1,1},{1,2},{2,2},{1,5},{2,5},{4,5},{8,5},{3,5},{12,5},{1,10},{2,10},{4,10},{8,10},{351,10},{383,10} }; // Table 5.5.3.3-2 3GPP 36.211 FDD
|
||||
const uint16_t deltaTSFCTabType2[14][2] = { {2,5},{6,5},{10,5},{18,5},{14,5},{22,5},{26,5},{30,5},{70,10},{74,10},{194,10},{326,10},{586,10},{210,10} }; // Table 5.5.3.3-2 3GPP 36.211 TDD
|
||||
|
||||
srs_SubframeConfig = frame_parms->soundingrs_ul_config_common.srs_SubframeConfig;
|
||||
if (FDD == frame_parms->frame_type)
|
||||
{
|
||||
// srs_SubframeConfig =< 14
|
||||
deltaTSFC = deltaTSFCTabType1[srs_SubframeConfig][0];
|
||||
TSFC = deltaTSFCTabType1[srs_SubframeConfig][1];
|
||||
}
|
||||
else
|
||||
{
|
||||
// srs_SubframeConfig =< 13
|
||||
deltaTSFC = deltaTSFCTabType2[srs_SubframeConfig][0];
|
||||
TSFC = deltaTSFCTabType2[srs_SubframeConfig][1];
|
||||
}
|
||||
|
||||
// Sounding reference signal subframes are the subframes satisfying ns/2 mod TSFC (- deltaTSFC
|
||||
uint16_t tmp = (subframe_tx % TSFC);
|
||||
if((1<<tmp) & deltaTSFC)
|
||||
{
|
||||
// This is a Sounding reference signal subframes
|
||||
isSubframeSRS = 1;
|
||||
pSoundingrs_ul_config_dedicated->srsCellSubframe = 1;
|
||||
}
|
||||
LOG_D(PHY," ISTDD: %d, TSFC: %d, deltaTSFC: %d, AbsSubframeTX: %d.%d, srsCellSubframe: %d \n", frame_parms->frame_type, TSFC, deltaTSFC, frame_tx, subframe_tx, pSoundingrs_ul_config_dedicated->srsCellSubframe);
|
||||
LOG_D(PHY," SrsDedicatedSetup: %d \n",pSoundingrs_ul_config_dedicated->srsConfigDedicatedSetup);
|
||||
if(pSoundingrs_ul_config_dedicated->srsConfigDedicatedSetup)
|
||||
{
|
||||
compute_srs_pos(frame_parms->frame_type, pSoundingrs_ul_config_dedicated->srs_ConfigIndex, &srsPeriodicity, &srsOffset);
|
||||
|
||||
LOG_D(PHY," srsPeriodicity: %d srsOffset: %d isSubframeSRS %d \n",srsPeriodicity,srsOffset,isSubframeSRS);
|
||||
|
||||
// transmit SRS if the four following constraints are respected:
|
||||
// - UE is configured to transmit SRS
|
||||
// - SRS are configured in current subframe
|
||||
// - UE is configured to send SRS in this subframe
|
||||
// - CQI is not scheduled in PUCCH transmission - TO BE ADDED
|
||||
// - simultaneous transmission of SRS and ACKNACK is authorised - TO BE CHECKED
|
||||
if( isSubframeSRS &&
|
||||
(((10*frame_tx+subframe_tx) % srsPeriodicity) == srsOffset)
|
||||
//(! is_pucch_per_cqi_report))
|
||||
)
|
||||
{
|
||||
pSoundingrs_ul_config_dedicated->srsUeSubframe = 1;
|
||||
ue->ulsch[eNB_id]->srs_active = 1;
|
||||
ue->ulsch[eNB_id]->Nsymb_pusch = 12-(frame_parms->Ncp<<1)- ue->ulsch[eNB_id]->srs_active;
|
||||
}
|
||||
}
|
||||
LOG_D(PHY," srsCellSubframe: %d, srsUeSubframe: %d, Nsymb-pusch: %d \n", pSoundingrs_ul_config_dedicated->srsCellSubframe, pSoundingrs_ul_config_dedicated->srsUeSubframe, ue->ulsch[eNB_id]->Nsymb_pusch);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
UE_rxtx_proc_t *proc,
|
||||
uint8_t eNB_id,
|
||||
@@ -1086,6 +1266,56 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
} // subframe_scheduling_flag==1
|
||||
}
|
||||
|
||||
void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag)
|
||||
{
|
||||
|
||||
//LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
//int8_t frame_tx = proc->frame_tx;
|
||||
int8_t subframe_tx = proc->subframe_tx;
|
||||
int16_t tx_amp;
|
||||
int16_t Po_SRS;
|
||||
uint8_t nb_rb_srs;
|
||||
|
||||
SOUNDINGRS_UL_CONFIG_DEDICATED *pSoundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
|
||||
uint8_t isSrsTxOccasion = pSoundingrs_ul_config_dedicated->srsUeSubframe;
|
||||
|
||||
if(isSrsTxOccasion)
|
||||
{
|
||||
ue->generate_ul_signal[eNB_id] = 1;
|
||||
if (ue->mac_enabled==1)
|
||||
{
|
||||
srs_power_cntl(ue,proc,eNB_id, (uint8_t*)(&nb_rb_srs), abstraction_flag);
|
||||
Po_SRS = ue->ulsch[eNB_id]->Po_SRS;
|
||||
}
|
||||
else
|
||||
{
|
||||
Po_SRS = ue->tx_power_max_dBm;
|
||||
}
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
if (ue->mac_enabled==1)
|
||||
{
|
||||
tx_amp = get_tx_amp(Po_SRS,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb_srs);
|
||||
}
|
||||
else
|
||||
{
|
||||
tx_amp = AMP;
|
||||
}
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
LOG_D(PHY,"SRS PROC; TX_MAX_POWER %d, Po_SRS %d, NB_RB_UL %d, NB_RB_SRS %d TX_AMPL %d\n",ue->tx_power_max_dBm,
|
||||
Po_SRS,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb_srs,
|
||||
tx_amp);
|
||||
|
||||
generate_srs_tx(ue, eNB_id, tx_amp, subframe_tx);
|
||||
}
|
||||
}
|
||||
|
||||
void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag) {
|
||||
|
||||
@@ -1103,6 +1333,9 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
int tx_amp;
|
||||
int8_t Po_PUCCH;
|
||||
|
||||
SOUNDINGRS_UL_CONFIG_DEDICATED *pSoundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
|
||||
uint8_t isShortenPucch = (pSoundingrs_ul_config_dedicated->srsCellSubframe && frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission);
|
||||
|
||||
bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
|
||||
|
||||
if ((frame_parms->frame_type==FDD) ||
|
||||
@@ -1175,19 +1408,23 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
#endif
|
||||
|
||||
if (SR_payload>0) {
|
||||
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1a/1b payload %d,%d (with SR for PUSCH), n1_pucch %d, Po_PUCCH, amp %d\n",
|
||||
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1a/1b payload %d,%d (with SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH, amp %d\n",
|
||||
Mod_id,
|
||||
ue->dlsch[eNB_id][0]->rnti,
|
||||
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
|
||||
isShortenPucch,
|
||||
frame_tx, subframe_tx,
|
||||
pucch_ack_payload[0],pucch_ack_payload[1],
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
|
||||
Po_PUCCH,
|
||||
tx_amp);
|
||||
} else {
|
||||
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating PUCCH 1a/1b, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
|
||||
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating PUCCH 1a/1b, an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
|
||||
Mod_id,
|
||||
ue->dlsch[eNB_id][0]->rnti,
|
||||
frame_tx, subframe_tx,
|
||||
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
|
||||
isShortenPucch,
|
||||
n1_pucch,pucch_ack_payload[0],pucch_ack_payload[1],SR_payload,
|
||||
Po_PUCCH,
|
||||
tx_amp);
|
||||
@@ -1201,7 +1438,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
format,
|
||||
&ue->pucch_config_dedicated[eNB_id],
|
||||
n1_pucch,
|
||||
1, // shortened format
|
||||
isShortenPucch, // shortened format
|
||||
pucch_ack_payload,
|
||||
tx_amp,
|
||||
subframe_tx);
|
||||
@@ -1236,10 +1473,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1 (SR for PUSCH), n1_pucch %d, Po_PUCCH %d\n",
|
||||
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n",
|
||||
Mod_id,
|
||||
ue->dlsch[eNB_id][0]->rnti,
|
||||
frame_tx, subframe_tx,
|
||||
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
|
||||
isShortenPucch,
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
|
||||
Po_PUCCH);
|
||||
|
||||
@@ -1251,7 +1490,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
pucch_format1,
|
||||
&ue->pucch_config_dedicated[eNB_id],
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
|
||||
1, // shortened format
|
||||
isShortenPucch, // shortened format
|
||||
pucch_ack_payload, // this is ignored anyway, we just need a pointer
|
||||
tx_amp,
|
||||
subframe_tx);
|
||||
@@ -1301,13 +1540,18 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
|
||||
}
|
||||
|
||||
if (ue->UE_mode[eNB_id] != PRACH) {
|
||||
// check cell srs subframe and ue srs subframe. This has an impact on pusch encoding
|
||||
ue_compute_srs_occasion(ue,proc,eNB_id);
|
||||
|
||||
ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
|
||||
}
|
||||
|
||||
if (ue->UE_mode[eNB_id] == PUSCH) { // check if we need to use PUCCH 1a/1b
|
||||
ue_pucch_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
if (ue->UE_mode[eNB_id] == PUSCH) {
|
||||
// check if we need to use PUCCH 1a/1b
|
||||
ue_pucch_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
// check if we need to use SRS
|
||||
ue_srs_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
} // UE_mode==PUSCH
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/*******************************************************************************
|
||||
OpenAirInterface
|
||||
Copyright(c) 1999 - 2014 Eurecom
|
||||
|
||||
OpenAirInterface is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
|
||||
OpenAirInterface is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenAirInterface.The full GNU General Public License is
|
||||
included in this distribution in the file called "COPYING". If not,
|
||||
see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Contact Information
|
||||
OpenAirInterface Admin: openair_admin@eurecom.fr
|
||||
OpenAirInterface Tech : openair_tech@eurecom.fr
|
||||
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
|
||||
|
||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
/*! \file srs_pc.c
|
||||
* \brief Implementation of UE SRS Power Control procedures from 36.213 LTE specifications (Section
|
||||
* \author H. Bilel
|
||||
* \date 2016
|
||||
* \version 0.1
|
||||
* \company TCL
|
||||
* \email: haithem.bilel@alcatelOneTouch.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/LTE_TRANSPORT/proto.h"
|
||||
#include "PHY/extern.h"
|
||||
|
||||
void srs_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t *pnb_rb_srs, uint8_t abstraction_flag)
|
||||
{
|
||||
|
||||
int16_t PL;
|
||||
int8_t p0_NominalPUSCH;
|
||||
int8_t p0_UE_PUSCH;
|
||||
int8_t Psrs_offset;
|
||||
int16_t P_srs;
|
||||
int16_t f_pusch;
|
||||
uint8_t alpha;
|
||||
uint8_t Msrs = 0;
|
||||
|
||||
|
||||
SOUNDINGRS_UL_CONFIG_DEDICATED *psoundingrs_ul_config_dedicated = &ue->soundingrs_ul_config_dedicated[eNB_id];
|
||||
LTE_DL_FRAME_PARMS *pframe_parms = &ue->frame_parms;
|
||||
|
||||
uint8_t Bsrs = psoundingrs_ul_config_dedicated->srs_Bandwidth;
|
||||
uint8_t Csrs = pframe_parms->soundingrs_ul_config_common.srs_BandwidthConfig;
|
||||
LOG_D(PHY," SRS Power Control; AbsSubframe %d.%d, eNB_id %d, N_RB_UL %d, srs_Bandwidth %d, srs_BandwidthConfig %d \n",proc->frame_tx,proc->subframe_tx,eNB_id,pframe_parms->N_RB_UL,Bsrs,Csrs);
|
||||
|
||||
if (pframe_parms->N_RB_UL < 41)
|
||||
{
|
||||
Msrs = Nb_6_40[Csrs][Bsrs];
|
||||
}
|
||||
else if (pframe_parms->N_RB_UL < 61)
|
||||
{
|
||||
Msrs = Nb_41_60[Csrs][Bsrs];
|
||||
}
|
||||
else if (pframe_parms->N_RB_UL < 81)
|
||||
{
|
||||
Msrs = Nb_61_80[Csrs][Bsrs];
|
||||
}
|
||||
else if (pframe_parms->N_RB_UL <111)
|
||||
{
|
||||
Msrs = Nb_81_110[Csrs][Bsrs];
|
||||
}
|
||||
|
||||
// SRS Power control 36.213 5.1.3.1
|
||||
// P_srs = P_srs_offset+ 10log10(Msrs) + P_opusch(j) + alpha*PL + f(i))
|
||||
|
||||
p0_NominalPUSCH = ue->frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
|
||||
p0_UE_PUSCH = ue->ul_power_control_dedicated[eNB_id].p0_UE_PUSCH;
|
||||
Psrs_offset = (ue->ul_power_control_dedicated[eNB_id].pSRS_Offset - 3);
|
||||
|
||||
|
||||
f_pusch = ue->ulsch[eNB_id]->f_pusch;
|
||||
alpha = alpha_lut[ue->frame_parms.ul_power_control_config_common.alpha];
|
||||
PL = get_PL(ue->Mod_id,ue->CC_id,eNB_id);
|
||||
|
||||
LOG_D(PHY," SRS Power Control; eNB_id %d, p0_NominalPUSCH %d, p0_UE_PUSCH %d, alpha %d \n",eNB_id,p0_NominalPUSCH,p0_UE_PUSCH,alpha);
|
||||
LOG_D(PHY," SRS Power Control; eNB_id %d, pSRS_Offset[dB] %d, Msrs %d, PL %d, f_pusch %d \n",eNB_id,Psrs_offset,Msrs,PL,f_pusch);
|
||||
|
||||
P_srs = (p0_NominalPUSCH + p0_UE_PUSCH) + Psrs_offset + f_pusch;
|
||||
P_srs += (((int32_t)alpha * (int32_t)PL) + hundred_times_log10_NPRB[Msrs-1])/100 ;
|
||||
|
||||
ue->ulsch[eNB_id]->Po_SRS = P_srs;
|
||||
if(ue->ulsch[eNB_id]->Po_SRS > ue->tx_power_max_dBm)
|
||||
{
|
||||
ue->ulsch[eNB_id]->Po_SRS = ue->tx_power_max_dBm;
|
||||
}
|
||||
|
||||
pnb_rb_srs[0] = Msrs;
|
||||
LOG_D(PHY," SRS Power Control; eNB_id %d, Psrs_pc[dBm] %d, Pcmax[dBm] %d, Psrs[dBm] %d\n",eNB_id,P_srs,ue->tx_power_max_dBm,ue->ulsch[eNB_id]->Po_SRS);
|
||||
}
|
||||
@@ -1496,7 +1496,7 @@ do_RRCConnectionSetup(
|
||||
physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH));
|
||||
physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH));
|
||||
physicalConfigDedicated2->cqi_ReportConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig));
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated));
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated));
|
||||
physicalConfigDedicated2->antennaInfo = CALLOC(1,sizeof(*physicalConfigDedicated2->antennaInfo));
|
||||
physicalConfigDedicated2->schedulingRequestConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->schedulingRequestConfig));
|
||||
#ifdef CBA
|
||||
@@ -1582,19 +1582,17 @@ do_RRCConnectionSetup(
|
||||
*/
|
||||
|
||||
//soundingRS-UL-ConfigDedicated
|
||||
/*
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->present = SoundingRS_UL_ConfigDedicated_PR_setup;
|
||||
assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth,
|
||||
SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0);
|
||||
assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth,
|
||||
SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0);
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth =
|
||||
SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth =
|
||||
SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition=0;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.duration=1;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=1;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=45;
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb=0;
|
||||
assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift,
|
||||
SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0);
|
||||
*/
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift=
|
||||
SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0;
|
||||
|
||||
|
||||
//AntennaInfoDedicated
|
||||
|
||||
@@ -2621,7 +2621,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
|
||||
physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH =
|
||||
CALLOC(1, sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH));
|
||||
physicalConfigDedicated2->cqi_ReportConfig = NULL; //CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig));
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL; //CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated));
|
||||
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated));
|
||||
physicalConfigDedicated2->antennaInfo = CALLOC(1, sizeof(*physicalConfigDedicated2->antennaInfo));
|
||||
physicalConfigDedicated2->schedulingRequestConfig =
|
||||
CALLOC(1, sizeof(*physicalConfigDedicated2->schedulingRequestConfig));
|
||||
|
||||
+5
-5
@@ -62,11 +62,11 @@ eNBs =
|
||||
pusch_nDMRS1 = 0;
|
||||
phich_duration = "NORMAL";
|
||||
phich_resource = "ONESIXTH";
|
||||
srs_enable = "DISABLE";
|
||||
/* srs_BandwidthConfig =;
|
||||
srs_SubframeConfig =;
|
||||
srs_ackNackST =;
|
||||
srs_MaxUpPts =;*/
|
||||
srs_enable = "ENABLE";
|
||||
srs_BandwidthConfig =2;
|
||||
srs_SubframeConfig =13;
|
||||
srs_ackNackST ="DISABLE";
|
||||
srs_MaxUpPts ="DISABLE";
|
||||
|
||||
pusch_p0_Nominal = -108;
|
||||
pusch_alpha = "AL1";
|
||||
|
||||
@@ -1283,7 +1283,7 @@ void init_openair1(void)
|
||||
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_power_max_dBm=23;
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_power_max_dBm=10;
|
||||
|
||||
PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=100;
|
||||
|
||||
@@ -1525,7 +1525,7 @@ void update_ocm()
|
||||
//calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,0);
|
||||
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB;
|
||||
// if (frame % 50 == 0)
|
||||
LOG_I(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n",
|
||||
LOG_D(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n",
|
||||
CC_id,eNB_id,enb_data[eNB_id]->x,enb_data[eNB_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y,
|
||||
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, eNB2UE[eNB_id][UE_id][CC_id]->aoa);
|
||||
//double dx, dy, distance;
|
||||
|
||||
Reference in New Issue
Block a user