modifications to eMBMS-related L1 processing. mbmssim now works again (performance to be checked for 10/20 MHz), but error rates decay as they should with SNR.
This commit is contained in:
@@ -711,7 +711,7 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
//------------------------Temporal Interpolation ------------------------------
|
//------------------------Temporal Interpolation ------------------------------
|
||||||
if (l==6) {
|
if (l==6) {
|
||||||
ch = (short *)&dl_ch_estimates[aarx][ch_offset];
|
ch = (short *)&dl_ch_estimates[aarx][ch_offset];
|
||||||
// printf("Interpolating ch 2,6 => %d\n",ch_offset);
|
// printf("Interpolating ch 2,6 => %d\n",ch_offset);
|
||||||
ch_prev = (short *)&dl_ch_estimates[aarx][2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
|
ch_prev = (short *)&dl_ch_estimates[aarx][2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
|
||||||
ch0 = (short *)&dl_ch_estimates[aarx][0*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
|
ch0 = (short *)&dl_ch_estimates[aarx][0*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
|
||||||
memcpy(ch0,ch_prev,4*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
memcpy(ch0,ch_prev,4*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
||||||
@@ -722,6 +722,7 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
// 3/4 ch2 + 1/4 ch6 => ch3
|
// 3/4 ch2 + 1/4 ch6 => ch3
|
||||||
multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
||||||
multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
// 1/2 ch2 + 1/2 ch6 => ch4
|
// 1/2 ch2 + 1/2 ch6 => ch4
|
||||||
multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
||||||
multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
|
||||||
@@ -755,26 +756,26 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa]) {
|
if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa]) {
|
||||||
switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
|
switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
idft128((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][LTE_CE_OFFSET],
|
idft128((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 25:
|
case 25:
|
||||||
idft512((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][LTE_CE_OFFSET],
|
idft512((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 50:
|
case 50:
|
||||||
idft1024((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][LTE_CE_OFFSET],
|
idft1024((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 75:
|
case 75:
|
||||||
idft1536((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][LTE_CE_OFFSET],
|
idft1536((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa]);
|
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa]);
|
||||||
break;
|
break;
|
||||||
case 100:
|
case 100:
|
||||||
idft2048((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][LTE_CE_OFFSET],
|
idft2048((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -379,6 +379,7 @@ void mch_extract_rbs(int **rxdataF,
|
|||||||
dl_ch_estimates_ext[aarx][(frame_parms->N_RB_DL*3)+j+symbol*(frame_parms->N_RB_DL*12)] = dl_ch_estimates[aarx][i+(frame_parms->N_RB_DL*6)+(symbol*frame_parms->ofdm_symbol_size)];
|
dl_ch_estimates_ext[aarx][(frame_parms->N_RB_DL*3)+j+symbol*(frame_parms->N_RB_DL*12)] = dl_ch_estimates[aarx][i+(frame_parms->N_RB_DL*6)+(symbol*frame_parms->ofdm_symbol_size)];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
memcpy((void*)&rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)],
|
memcpy((void*)&rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)],
|
||||||
(void*)&rxdataF[aarx][frame_parms->first_carrier_offset + (symbol*frame_parms->ofdm_symbol_size)],
|
(void*)&rxdataF[aarx][frame_parms->first_carrier_offset + (symbol*frame_parms->ofdm_symbol_size)],
|
||||||
frame_parms->N_RB_DL*24);
|
frame_parms->N_RB_DL*24);
|
||||||
@@ -388,6 +389,7 @@ void mch_extract_rbs(int **rxdataF,
|
|||||||
memcpy((void*)&dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)],
|
memcpy((void*)&dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)],
|
||||||
(void*)&dl_ch_estimates[aarx][(symbol*frame_parms->ofdm_symbol_size)],
|
(void*)&dl_ch_estimates[aarx][(symbol*frame_parms->ofdm_symbol_size)],
|
||||||
frame_parms->N_RB_DL*48);
|
frame_parms->N_RB_DL*48);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
int i,l,aa,aarx,k;
|
int i,l,l2,aa,aarx,k;
|
||||||
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0;
|
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0;
|
||||||
uint8_t snr1set=0;
|
uint8_t snr1set=0;
|
||||||
double snr_step=1,input_snr_step=1;
|
double snr_step=1,input_snr_step=1;
|
||||||
@@ -538,11 +538,25 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rx_pmch(PHY_vars_UE,
|
if (l==6)
|
||||||
0,
|
for (l2=2;l2<7;l2++)
|
||||||
subframe%10,
|
rx_pmch(PHY_vars_UE,
|
||||||
l);
|
0,
|
||||||
|
subframe%10,
|
||||||
|
l2);
|
||||||
|
if (l==6)
|
||||||
|
for (l2=2;l2<7;l2++)
|
||||||
|
rx_pmch(PHY_vars_UE,
|
||||||
|
0,
|
||||||
|
subframe%10,
|
||||||
|
l2);
|
||||||
|
if (l==11)
|
||||||
|
for (l2=7;l2<12;l2++)
|
||||||
|
rx_pmch(PHY_vars_UE,
|
||||||
|
0,
|
||||||
|
subframe%10,
|
||||||
|
l2);
|
||||||
}
|
}
|
||||||
|
|
||||||
PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&PHY_vars_UE->lte_frame_parms,
|
PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&PHY_vars_UE->lte_frame_parms,
|
||||||
|
|||||||
Reference in New Issue
Block a user