Support added for 2 RX Antenna case in ulsim and fixed indexing issue in gNB RX chain
This commit is contained in:
@@ -345,6 +345,7 @@ void nr_ulsch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
k_prime = 0;
|
k_prime = 0;
|
||||||
|
rxF_ext_index = ul_ch0_ext_index = ul_ch0_index = 0; /* In RX Antenna(aarx) loop, Reset the index */
|
||||||
|
|
||||||
if (is_dmrs_symbol == 0) {
|
if (is_dmrs_symbol == 0) {
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
g*
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
* this work for additional information regarding copyright ownership.
|
* this work for additional information regarding copyright ownership.
|
||||||
@@ -607,8 +607,8 @@ int main(int argc, char **argv)
|
|||||||
frame_parms = &gNB->frame_parms; //to be initialized I suppose (maybe not necessary for PBCH)
|
frame_parms = &gNB->frame_parms; //to be initialized I suppose (maybe not necessary for PBCH)
|
||||||
|
|
||||||
|
|
||||||
frame_parms->nb_antennas_tx = n_tx;
|
//frame_parms->nb_antennas_tx = n_tx;
|
||||||
frame_parms->nb_antennas_rx = n_rx;
|
//frame_parms->nb_antennas_rx = n_rx;
|
||||||
frame_parms->N_RB_DL = N_RB_DL;
|
frame_parms->N_RB_DL = N_RB_DL;
|
||||||
frame_parms->N_RB_UL = N_RB_UL;
|
frame_parms->N_RB_UL = N_RB_UL;
|
||||||
frame_parms->Ncp = extended_prefix_flag ? EXTENDED : NORMAL;
|
frame_parms->Ncp = extended_prefix_flag ? EXTENDED : NORMAL;
|
||||||
@@ -646,7 +646,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
||||||
// common configuration
|
// common configuration
|
||||||
rrc_mac_config_req_gNB(0,0,1,pusch_tgt_snrx10,pucch_tgt_snrx10,scc,0,0,NULL);
|
rrc_mac_config_req_gNB(0,0,n_rx,pusch_tgt_snrx10,pucch_tgt_snrx10,scc,0,0,NULL);
|
||||||
// UE dedicated configuration
|
// UE dedicated configuration
|
||||||
rrc_mac_config_req_gNB(0,0,1,pusch_tgt_snrx10,pucch_tgt_snrx10,NULL,1,secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
|
rrc_mac_config_req_gNB(0,0,1,pusch_tgt_snrx10,pucch_tgt_snrx10,NULL,1,secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
|
||||||
phy_init_nr_gNB(gNB,0,0);
|
phy_init_nr_gNB(gNB,0,0);
|
||||||
@@ -1053,70 +1053,70 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
nr_fill_ulsch(gNB,frame,slot,pusch_pdu);
|
//nr_fill_ulsch(gNB,frame,slot,pusch_pdu); // Not needed as its its already filled as apart of "nr_schedule_response(Sched_INFO);"
|
||||||
|
|
||||||
for (int i=0;i<(TBS/8);i++) ulsch_ue[0]->harq_processes[harq_pid]->a[i]=i&0xff;
|
for (int i=0;i<(TBS/8);i++) ulsch_ue[0]->harq_processes[harq_pid]->a[i]=i&0xff;
|
||||||
if (input_fd == NULL) {
|
if (input_fd == NULL) {
|
||||||
|
|
||||||
// set FAPI parameters for UE, put them in the scheduled response and call
|
// set FAPI parameters for UE, put them in the scheduled response and call
|
||||||
nr_ue_scheduled_response(&scheduled_response);
|
nr_ue_scheduled_response(&scheduled_response);
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////phy_procedures_nr_ue_TX///////////////////////
|
/////////////////////////phy_procedures_nr_ue_TX///////////////////////
|
||||||
///////////
|
///////////
|
||||||
|
|
||||||
phy_procedures_nrUE_TX(UE, &UE_proc, gNB_id);
|
phy_procedures_nrUE_TX(UE, &UE_proc, gNB_id);
|
||||||
|
|
||||||
|
|
||||||
if (n_trials==1) {
|
if (n_trials==1) {
|
||||||
LOG_M("txsig0.m","txs0", UE->common_vars.txdata[0],frame_parms->samples_per_subframe*10,1,1);
|
LOG_M("txsig0.m","txs0", UE->common_vars.txdata[0],frame_parms->samples_per_subframe*10,1,1);
|
||||||
LOG_M("txsig0F.m","txs0F", UE->common_vars.txdataF[0],frame_parms->ofdm_symbol_size*14,1,1);
|
LOG_M("txsig0F.m","txs0F", UE->common_vars.txdataF[0],frame_parms->ofdm_symbol_size*14,1,1);
|
||||||
}
|
}
|
||||||
///////////
|
///////////
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
tx_offset = frame_parms->get_samples_slot_timestamp(slot,frame_parms,0);
|
tx_offset = frame_parms->get_samples_slot_timestamp(slot,frame_parms,0);
|
||||||
|
|
||||||
txlev = signal_energy(&UE->common_vars.txdata[0][tx_offset + 5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
|
txlev = signal_energy(&UE->common_vars.txdata[0][tx_offset + 5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
|
||||||
frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples);
|
frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples);
|
||||||
}
|
}
|
||||||
else n_trials = 1;
|
else n_trials = 1;
|
||||||
|
|
||||||
if (input_fd == NULL ) {
|
if (input_fd == NULL ) {
|
||||||
|
|
||||||
sigma_dB = 10 * log10((double)txlev * ((double)frame_parms->ofdm_symbol_size/(12*nb_rb))) - SNR;;
|
sigma_dB = 10 * log10((double)txlev * ((double)frame_parms->ofdm_symbol_size/(12*nb_rb))) - SNR;;
|
||||||
sigma = pow(10,sigma_dB/10);
|
sigma = pow(10,sigma_dB/10);
|
||||||
|
|
||||||
|
|
||||||
if(n_trials==1) printf("sigma %f (%f dB), txlev %f (factor %f)\n",sigma,sigma_dB,10*log10((double)txlev),(double)(double)frame_parms->ofdm_symbol_size/(12*nb_rb));
|
if(n_trials==1) printf("sigma %f (%f dB), txlev %f (factor %f)\n",sigma,sigma_dB,10*log10((double)txlev),(double)(double)frame_parms->ofdm_symbol_size/(12*nb_rb));
|
||||||
|
|
||||||
for (i=0; i<slot_length; i++) {
|
for (i=0; i<slot_length; i++) {
|
||||||
for (int aa=0; aa<1; aa++) {
|
for (int aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
s_re[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i<<1)]);
|
s_re[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i<<1)]);
|
||||||
s_im[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i<<1)+1]);
|
s_im[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i<<1)+1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (UE2gNB->max_Doppler == 0) {
|
|
||||||
multipath_channel(UE2gNB,s_re,s_im,r_re,r_im,
|
if (UE2gNB->max_Doppler == 0) {
|
||||||
slot_length,0,(n_trials==1)?1:0);
|
multipath_channel(UE2gNB,s_re,s_im,r_re,r_im,
|
||||||
} else {
|
slot_length,0,(n_trials==1)?1:0);
|
||||||
multipath_tv_channel(UE2gNB,s_re,s_im,r_re,r_im,
|
} else {
|
||||||
2*slot_length,0);
|
multipath_tv_channel(UE2gNB,s_re,s_im,r_re,r_im,
|
||||||
}
|
2*slot_length,0);
|
||||||
for (i=0; i<slot_length; i++) {
|
}
|
||||||
for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) {
|
for (i=0; i<slot_length; i++) {
|
||||||
((int16_t*) &gNB->common_vars.rxdata[ap][slot_offset])[(2*i) + (delay*2)] = (int16_t)((r_re[ap][i]) + (sqrt(sigma/2)*gaussdouble(0.0,1.0))); // convert to fixed point
|
for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) {
|
||||||
((int16_t*) &gNB->common_vars.rxdata[ap][slot_offset])[(2*i)+1 + (delay*2)] = (int16_t)((r_im[ap][i]) + (sqrt(sigma/2)*gaussdouble(0.0,1.0)));
|
((int16_t*) &gNB->common_vars.rxdata[ap][slot_offset])[(2*i) + (delay*2)] = (int16_t)((r_re[ap][i]) + (sqrt(sigma/2)*gaussdouble(0.0,1.0))); // convert to fixed point
|
||||||
|
((int16_t*) &gNB->common_vars.rxdata[ap][slot_offset])[(2*i)+1 + (delay*2)] = (int16_t)((r_im[ap][i]) + (sqrt(sigma/2)*gaussdouble(0.0,1.0)));
|
||||||
/* Add phase noise if enabled */
|
/* Add phase noise if enabled */
|
||||||
if (pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
|
if (pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
|
||||||
phase_noise(ts, &((int16_t*)&gNB->common_vars.rxdata[ap][slot_offset])[(2*i)],
|
phase_noise(ts, &((int16_t*)&gNB->common_vars.rxdata[ap][slot_offset])[(2*i)],
|
||||||
&((int16_t*)&gNB->common_vars.rxdata[ap][slot_offset])[(2*i)+1]);
|
&((int16_t*)&gNB->common_vars.rxdata[ap][slot_offset])[(2*i)+1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} /*End input_fd */
|
||||||
|
|
||||||
|
|
||||||
if(pusch_pdu->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
|
if(pusch_pdu->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
|
||||||
|
|||||||
Reference in New Issue
Block a user