#define CONFIG_HLP_DLSCH_PARA "number of threads for dlsch processing 0 for no parallelization"
#define CONFIG_HLP_DLSCH_PARA "number of threads for dlsch processing 0 for no parallelization\n"
#define CONFIG_HLP_OFFSET_DIV "Divisor for computing OFDM symbol offset in Rx chain (num samples in CP/<the value>). Default value is 8. To set the sample offset to 0, set this value ~ 10e6\n"
@@ -518,6 +520,385 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ul_ch_128[0]=_mm_slli_epi16(ul_ch_128[0],2);
}
elseif(pusch_pdu->dmrs_config_type==pusch_dmrs_type1){// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 6 DMRS REs and use a common value for the whole PRB
LOG_D(PHY,"PUSCH estimation DMRS type 1, no Freq-domain interpolation");
else{// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 4 DMRS REs and use a common value for the whole PRB
LOG_D(PHY,"PUSCH estimation DMRS type 2, no Freq-domain interpolation");
@@ -1099,12 +1088,12 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch,
8);
dl_ch+=12;
dl_ch+=12;
dl_ch[0+2*nushift]=ch[0];
dl_ch[1+2*nushift]=ch[1];
dl_ch[2+2*nushift]=ch[0];
dl_ch[3+2*nushift]=ch[1];
dl_ch+=4;
dl_ch+=4;
}
// Treat last 2 pilots specially (right edge)
...
...
@@ -1136,7 +1125,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
ch_l[1]=dl_ch[1];
// for proper allignment of SIMD vectors
if((ue->frame_parms.N_RB_DL&1)==0){
if((ue->frame_parms.N_RB_DL&1)==0){
dl_ch-=20;
//Interpolate fdcrl1 with ch_r
multadd_real_vector_complex_scalar(filt8_dcrl1,
...
...
@@ -1185,11 +1174,359 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
}
}
}
elseif(config_type==NFAPI_NR_DMRS_TYPE1){// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 6 DMRS REs and use a common value for the whole PRB
else{// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 4 DMRS REs and use a common value for the whole PRB
@@ -479,14 +480,10 @@ int main(int argc, char **argv)
break;
/*case 'i':
interf1=atoi(optarg);
case'i':
prb_inter=1;
break;
case 'j':
interf2=atoi(optarg);
break;*/
case'n':
n_trials=atoi(optarg);
break;
...
...
@@ -645,7 +642,7 @@ int main(int argc, char **argv)
printf("-g [A,B,C,D,E,F,G,R] Use 3GPP SCM (A,B,C,D) or 36-101 (E-EPA,F-EVA,G-ETU) models or R for MIMO model (ignores delay spread and Ricean factor)\n");
printf("-y Number of TX antennas used in gNB\n");
printf("-z Number of RX antennas used in UE\n");
//printf("-i Relative strength of first intefering gNB (in dB) - cell_id mod 3 = 1\n");
printf("-i Activate PRB based averaging for channel estimation. Frequncy domain interpolation by default.\n");
//printf("-j Relative strength of second intefering gNB (in dB) - cell_id mod 3 = 2\n");
printf("-R N_RB_DL\n");
printf("-O oversampling factor (1,2,4,8,16)\n");
...
...
@@ -691,6 +688,7 @@ int main(int argc, char **argv)
memset(RC.gNB[0],0,sizeof(PHY_VARS_gNB));
gNB=RC.gNB[0];
gNB->ofdm_offset_divisor=UINT_MAX;
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_rx=n_rx;
...
...
@@ -911,6 +909,7 @@ int main(int argc, char **argv)