Commit 7e6f8ecf authored by francescomani's avatar francescomani

fixing bugs and cleaning up ulsim

parent 697d72cd
...@@ -750,7 +750,8 @@ int main(int argc, char **argv) ...@@ -750,7 +750,8 @@ int main(int argc, char **argv)
// common configuration // common configuration
rrc_mac_config_req_gNB(0,0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 0, 0, NULL); rrc_mac_config_req_gNB(0,0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 0, 0, NULL);
// UE dedicated configuration // UE dedicated configuration
rrc_mac_config_req_gNB(0,0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 1, secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup); rrc_mac_config_req_gNB(0,0, conf.pdsch_AntennaPorts, n_rx, 0, 6, scc, &rrc.carrier.mib, rrc.carrier.siblock1, 1,
secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
frame_parms->nb_antennas_tx = 1; frame_parms->nb_antennas_tx = 1;
frame_parms->nb_antennas_rx = n_rx; frame_parms->nb_antennas_rx = n_rx;
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config; nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
...@@ -772,7 +773,7 @@ int main(int argc, char **argv) ...@@ -772,7 +773,7 @@ int main(int argc, char **argv)
PHY_vars_UE_g[0][0] = UE; PHY_vars_UE_g[0][0] = UE;
memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS)); memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS));
UE->frame_parms.nb_antennas_tx = n_tx; UE->frame_parms.nb_antennas_tx = n_tx;
frame_parms->nb_antennas_rx = 1; UE->frame_parms.nb_antennas_rx = 1;
if (init_nr_ue_signal(UE, 1) != 0) { if (init_nr_ue_signal(UE, 1) != 0) {
printf("Error at UE NR initialisation\n"); printf("Error at UE NR initialisation\n");
...@@ -858,22 +859,15 @@ int main(int argc, char **argv) ...@@ -858,22 +859,15 @@ int main(int argc, char **argv)
/* validate parameters othwerwise default values are used */ /* validate parameters othwerwise default values are used */
/* -U flag can be used to set DMRS parameters*/ /* -U flag can be used to set DMRS parameters*/
if(modify_dmrs) if(modify_dmrs) {
{
if(dmrs_arg[0] == 0) if(dmrs_arg[0] == 0)
{
mapping_type = typeA; mapping_type = typeA;
}
else if (dmrs_arg[0] == 1) else if (dmrs_arg[0] == 1)
{
mapping_type = typeB; mapping_type = typeB;
}
/* Additional DMRS positions */ /* Additional DMRS positions */
if(dmrs_arg[1] >= 0 && dmrs_arg[1] <=3 ) if(dmrs_arg[1] >= 0 && dmrs_arg[1] <=3 )
{
add_pos = dmrs_arg[1]; add_pos = dmrs_arg[1];
} }
}
printf("NOTE: DMRS config is modified with Mapping Type %d , Additional Position %d \n", mapping_type, add_pos ); printf("NOTE: DMRS config is modified with Mapping Type %d , Additional Position %d \n", mapping_type, add_pos );
uint8_t length_dmrs = pusch_len1; uint8_t length_dmrs = pusch_len1;
...@@ -882,10 +876,8 @@ int main(int argc, char **argv) ...@@ -882,10 +876,8 @@ int main(int argc, char **argv)
printf("num dmrs sym %d\n",number_dmrs_symbols); printf("num dmrs sym %d\n",number_dmrs_symbols);
uint8_t nb_re_dmrs = (dmrs_config_type == pusch_dmrs_type1) ? 6 : 4; uint8_t nb_re_dmrs = (dmrs_config_type == pusch_dmrs_type1) ? 6 : 4;
if ((frame_parms->nb_antennas_tx==4)&&(precod_nbr_layers==4)) if ((UE->frame_parms.nb_antennas_tx==4)&&(precod_nbr_layers==4))
{
num_dmrs_cdm_grps_no_data = 2; num_dmrs_cdm_grps_no_data = 2;
}
if (transformPrecoder == transformPrecoder_enabled) { if (transformPrecoder == transformPrecoder_enabled) {
...@@ -926,17 +918,12 @@ int main(int argc, char **argv) ...@@ -926,17 +918,12 @@ int main(int argc, char **argv)
double ts = 1.0/(frame_parms->subcarrier_spacing * frame_parms->ofdm_symbol_size); double ts = 1.0/(frame_parms->subcarrier_spacing * frame_parms->ofdm_symbol_size);
/* -T option enable PTRS */ /* -T option enable PTRS */
if(enable_ptrs) if(enable_ptrs) {
{
/* validate parameters othwerwise default values are used */ /* validate parameters othwerwise default values are used */
if(ptrs_arg[0] == 0 || ptrs_arg[0] == 1 || ptrs_arg[0] == 2 ) if(ptrs_arg[0] == 0 || ptrs_arg[0] == 1 || ptrs_arg[0] == 2 )
{
ptrs_time_density = ptrs_arg[0]; ptrs_time_density = ptrs_arg[0];
}
if(ptrs_arg[1] == 2 || ptrs_arg[1] == 4 ) if(ptrs_arg[1] == 2 || ptrs_arg[1] == 4 )
{
ptrs_freq_density = ptrs_arg[1]; ptrs_freq_density = ptrs_arg[1];
}
pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS; pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS;
printf("NOTE: PTRS Enabled with L %d, K %d \n", ptrs_time_density, ptrs_freq_density ); printf("NOTE: PTRS Enabled with L %d, K %d \n", ptrs_time_density, ptrs_freq_density );
} }
...@@ -1216,22 +1203,18 @@ int main(int argc, char **argv) ...@@ -1216,22 +1203,18 @@ int main(int argc, char **argv)
nr_ue_pusch_common_procedures(UE, nr_ue_pusch_common_procedures(UE,
slot, slot,
&UE->frame_parms, &UE->frame_parms,
frame_parms->nb_antennas_tx); UE->frame_parms.nb_antennas_tx);
if (n_trials==1) if (n_trials==1) {
{
LOG_M("txsig0.m","txs0", &UE->common_vars.txdata[0][slot_offset],slot_length,1,1); LOG_M("txsig0.m","txs0", &UE->common_vars.txdata[0][slot_offset],slot_length,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);
if (precod_nbr_layers > 1) if (precod_nbr_layers > 1) {
{
LOG_M("txsig1.m","txs1", &UE->common_vars.txdata[1][slot_offset],slot_length,1,1); LOG_M("txsig1.m","txs1", &UE->common_vars.txdata[1][slot_offset],slot_length,1,1);
LOG_M("txsig1F.m","txs1F", UE->common_vars.txdataF[1],frame_parms->ofdm_symbol_size*14,1,1); LOG_M("txsig1F.m","txs1F", UE->common_vars.txdataF[1],frame_parms->ofdm_symbol_size*14,1,1);
if (precod_nbr_layers==4) if (precod_nbr_layers==4) {
{
LOG_M("txsig2.m","txs2", &UE->common_vars.txdata[2][slot_offset],slot_length,1,1); LOG_M("txsig2.m","txs2", &UE->common_vars.txdata[2][slot_offset],slot_length,1,1);
LOG_M("txsig3.m","txs3", &UE->common_vars.txdata[3][slot_offset],slot_length,1,1); LOG_M("txsig3.m","txs3", &UE->common_vars.txdata[3][slot_offset],slot_length,1,1);
LOG_M("txsig2F.m","txs2F", UE->common_vars.txdataF[2],frame_parms->ofdm_symbol_size*14,1,1); LOG_M("txsig2F.m","txs2F", UE->common_vars.txdataF[2],frame_parms->ofdm_symbol_size*14,1,1);
LOG_M("txsig3F.m","txs3F", UE->common_vars.txdataF[3],frame_parms->ofdm_symbol_size*14,1,1); LOG_M("txsig3F.m","txs3F", UE->common_vars.txdataF[3],frame_parms->ofdm_symbol_size*14,1,1);
} }
...@@ -1241,8 +1224,7 @@ int main(int argc, char **argv) ...@@ -1241,8 +1224,7 @@ int main(int argc, char **argv)
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
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_sum = 0; txlev_sum = 0;
for (int aa=0; aa<frame_parms->nb_antennas_tx; aa++) for (int aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
{
atxlev[aa] = signal_energy(&UE->common_vars.txdata[aa][tx_offset + 5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0], atxlev[aa] = signal_energy(&UE->common_vars.txdata[aa][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);
...@@ -1252,12 +1234,9 @@ int main(int argc, char **argv) ...@@ -1252,12 +1234,9 @@ int main(int argc, char **argv)
} }
} }
else else
{
n_trials = 1; n_trials = 1;
}
if (input_fd == NULL ) if (input_fd == NULL) {
{
sigma_dB = 10 * log10((double)txlev_sum * ((double)frame_parms->ofdm_symbol_size/(12*nb_rb))) - SNR;; sigma_dB = 10 * log10((double)txlev_sum * ((double)frame_parms->ofdm_symbol_size/(12*nb_rb))) - SNR;;
sigma = pow(10,sigma_dB/10); sigma = pow(10,sigma_dB/10);
...@@ -1266,7 +1245,7 @@ int main(int argc, char **argv) ...@@ -1266,7 +1245,7 @@ int main(int argc, char **argv)
frame_parms->ofdm_symbol_size/(12*nb_rb)); 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<frame_parms->nb_antennas_tx; aa++) { for (int aa=0; aa<UE->frame_parms.nb_antennas_tx; 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]);
} }
...@@ -1274,17 +1253,13 @@ int main(int argc, char **argv) ...@@ -1274,17 +1253,13 @@ int main(int argc, char **argv)
if (UE2gNB->max_Doppler == 0) if (UE2gNB->max_Doppler == 0)
{
multipath_channel(UE2gNB, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials==1)?1:0); multipath_channel(UE2gNB, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials==1)?1:0);
} else { else
multipath_tv_channel(UE2gNB, s_re, s_im, r_re, r_im, 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 (i=0; i<slot_length; i++) {
{ for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) {
for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) if (channel_model == AWGN) {
{
if (channel_model == AWGN)
{
double H_awgn[4][4] ={{1.0, 0.0, 0.0, 0.0},//rx 0 double H_awgn[4][4] ={{1.0, 0.0, 0.0, 0.0},//rx 0
{0.0, 1.0, 0.0, 0.0}, //rx 1 {0.0, 1.0, 0.0, 0.0}, //rx 1
{0.0, 0.0, 1.0, 0.0}, //rx 2 {0.0, 0.0, 1.0, 0.0}, //rx 2
...@@ -1299,8 +1274,7 @@ int main(int argc, char **argv) ...@@ -1299,8 +1274,7 @@ int main(int argc, char **argv)
r_re[ap][i] = 0; r_re[ap][i] = 0;
r_im[ap][i] = 0; r_im[ap][i] = 0;
for (int aa=0; aa<n_tx; aa++) for (int aa=0; aa<n_tx; aa++) {
{
r_re[ap][i] += s_re[aa][i]*H_awgn[ap][aa]; r_re[ap][i] += s_re[aa][i]*H_awgn[ap][aa];
r_im[ap][i] += s_im[aa][i]*H_awgn[ap][aa]; r_im[ap][i] += s_im[aa][i]*H_awgn[ap][aa];
} }
...@@ -1323,8 +1297,7 @@ int main(int argc, char **argv) ...@@ -1323,8 +1297,7 @@ int main(int argc, char **argv)
} /*End input_fd */ } /*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) {
{
set_ptrs_symb_idx(&ptrsSymPos, set_ptrs_symb_idx(&ptrsSymPos,
pusch_pdu->nr_of_symbols, pusch_pdu->nr_of_symbols,
pusch_pdu->start_symbol_index, pusch_pdu->start_symbol_index,
...@@ -1346,20 +1319,15 @@ int main(int argc, char **argv) ...@@ -1346,20 +1319,15 @@ int main(int argc, char **argv)
ul_proc_error = phy_procedures_gNB_uespec_RX(gNB, frame, slot); ul_proc_error = phy_procedures_gNB_uespec_RX(gNB, frame, slot);
if (n_trials==1 && round==0) if (n_trials==1 && round==0) {
{
LOG_M("rxsig0.m","rx0",&gNB->common_vars.rxdata[0][slot_offset],slot_length,1,1); LOG_M("rxsig0.m","rx0",&gNB->common_vars.rxdata[0][slot_offset],slot_length,1,1);
LOG_M("rxsigF0.m","rxsF0",gNB->common_vars.rxdataF[0],14*frame_parms->ofdm_symbol_size,1,1); LOG_M("rxsigF0.m","rxsF0",gNB->common_vars.rxdataF[0],14*frame_parms->ofdm_symbol_size,1,1);
if (precod_nbr_layers > 1) if (precod_nbr_layers > 1) {
{
LOG_M("rxsig1.m","rx1",&gNB->common_vars.rxdata[1][slot_offset],slot_length,1,1); LOG_M("rxsig1.m","rx1",&gNB->common_vars.rxdata[1][slot_offset],slot_length,1,1);
LOG_M("rxsigF1.m","rxsF1",gNB->common_vars.rxdataF[1],14*frame_parms->ofdm_symbol_size,1,1); LOG_M("rxsigF1.m","rxsF1",gNB->common_vars.rxdataF[1],14*frame_parms->ofdm_symbol_size,1,1);
if (precod_nbr_layers==4) if (precod_nbr_layers==4) {
{
LOG_M("rxsig2.m","rx2",&gNB->common_vars.rxdata[2][slot_offset],slot_length,1,1); LOG_M("rxsig2.m","rx2",&gNB->common_vars.rxdata[2][slot_offset],slot_length,1,1);
LOG_M("rxsig3.m","rx3",&gNB->common_vars.rxdata[3][slot_offset],slot_length,1,1); LOG_M("rxsig3.m","rx3",&gNB->common_vars.rxdata[3][slot_offset],slot_length,1,1);
LOG_M("rxsigF2.m","rxsF2",gNB->common_vars.rxdataF[2],14*frame_parms->ofdm_symbol_size,1,1); LOG_M("rxsigF2.m","rxsF2",gNB->common_vars.rxdataF[2],14*frame_parms->ofdm_symbol_size,1,1);
LOG_M("rxsigF3.m","rxsF3",gNB->common_vars.rxdataF[3],14*frame_parms->ofdm_symbol_size,1,1); LOG_M("rxsigF3.m","rxsF3",gNB->common_vars.rxdataF[3],14*frame_parms->ofdm_symbol_size,1,1);
} }
...@@ -1466,9 +1434,8 @@ int main(int argc, char **argv) ...@@ -1466,9 +1434,8 @@ int main(int argc, char **argv)
error_flag = 1; error_flag = 1;
n_errors[round][snrRun]++; n_errors[round][snrRun]++;
crc_status = 1; crc_status = 1;
} else { } else
crc_status = 0; crc_status = 0;
}
if(n_trials==1) printf("end of round %d rv_index %d\n",round, rv_index); if(n_trials==1) printf("end of round %d rv_index %d\n",round, rv_index);
//---------------------------------------------------------- //----------------------------------------------------------
...@@ -1477,9 +1444,9 @@ int main(int argc, char **argv) ...@@ -1477,9 +1444,9 @@ int main(int argc, char **argv)
if ((pusch_pdu->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) && (SNR==snr0) && (trial==0) && (round==0)) { if ((pusch_pdu->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) && (SNR==snr0) && (trial==0) && (round==0)) {
ptrs_symbols = 0; ptrs_symbols = 0;
for (int i = pusch_pdu->start_symbol_index; i < pusch_pdu->start_symbol_index + pusch_pdu->nr_of_symbols; i++){ for (int i = pusch_pdu->start_symbol_index; i < pusch_pdu->start_symbol_index + pusch_pdu->nr_of_symbols; i++)
ptrs_symbols += ((gNB->pusch_vars[UE_id]->ptrs_symbols) >> i) & 1; ptrs_symbols += ((gNB->pusch_vars[UE_id]->ptrs_symbols) >> i) & 1;
}
/* 2*5*(50/2), for RB = 50,K = 2 for 5 OFDM PTRS symbols */ /* 2*5*(50/2), for RB = 50,K = 2 for 5 OFDM PTRS symbols */
available_bits -= 2 * ptrs_symbols * ((nb_rb + ptrs_freq_density - 1) /ptrs_freq_density); available_bits -= 2 * ptrs_symbols * ((nb_rb + ptrs_freq_density - 1) /ptrs_freq_density);
printf("[ULSIM][PTRS] Available bits are: %5u, removed PTRS bits are: %5d \n",available_bits, (ptrsSymbPerSlot * ptrsRePerSymb * 2) ); printf("[ULSIM][PTRS] Available bits are: %5u, removed PTRS bits are: %5d \n",available_bits, (ptrsSymbPerSlot * ptrsRePerSymb * 2) );
...@@ -1488,8 +1455,8 @@ int main(int argc, char **argv) ...@@ -1488,8 +1455,8 @@ int main(int argc, char **argv)
for (i = 0; i < available_bits; i++) { for (i = 0; i < available_bits; i++) {
if(((ulsch_ue->harq_processes[harq_pid]->f[i] == 0) && (gNB->pusch_vars[UE_id]->llr[i] <= 0)) || if(((ulsch_ue->harq_processes[harq_pid]->f[i] == 0) && (gNB->pusch_vars[UE_id]->llr[i] <= 0)) ||
((ulsch_ue->harq_processes[harq_pid]->f[i] == 1) && (gNB->pusch_vars[UE_id]->llr[i] >= 0))) ((ulsch_ue->harq_processes[harq_pid]->f[i] == 1) && (gNB->pusch_vars[UE_id]->llr[i] >= 0))) {
{
/*if(errors_scrambling == 0) /*if(errors_scrambling == 0)
printf("\x1B[34m" "[frame %d][trial %d]\t1st bit in error in unscrambling = %d\n" "\x1B[0m", frame, trial, i);*/ printf("\x1B[34m" "[frame %d][trial %d]\t1st bit in error in unscrambling = %d\n" "\x1B[0m", frame, trial, i);*/
errors_scrambling[round][snrRun]++; errors_scrambling[round][snrRun]++;
......
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