use existing functions to retrieve (i)dft enum value

This commit is contained in:
Laurent THOMAS
2024-10-29 18:47:15 +01:00
committed by Robert Schmidt
parent 2c07f0081e
commit f1f02ec0a1
15 changed files with 201 additions and 1474 deletions
@@ -53,28 +53,23 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
// do ifft of channel estimate
int len=0;
switch(frame_parms->N_RB_DL) {
case 6:
dft(DFT_128,(int16_t*) &lte_eNB_srs->srs_ch_estimates[aa][0],
(int16_t*) lte_eNB_srs->srs_ch_estimates_time[aa],
1);
break;
len = 128;
break;
case 25:
dft(DFT_512,(int16_t*) &lte_eNB_srs->srs_ch_estimates[aa][0],
(int16_t*) lte_eNB_srs->srs_ch_estimates_time[aa],
1);
break;
len = 512;
break;
case 50:
dft(DFT_1024,(int16_t*) &lte_eNB_srs->srs_ch_estimates[aa][0],
(int16_t*) lte_eNB_srs->srs_ch_estimates_time[aa],
1);
break;
len = 1024;
break;
case 100:
dft(DFT_2048,(int16_t*) &lte_eNB_srs->srs_ch_estimates[aa][0],
(int16_t*) lte_eNB_srs->srs_ch_estimates_time[aa],
1);
break;
len = 2048;
break;
}
if (len)
dft(get_dft(len), (int16_t *)lte_eNB_srs->srs_ch_estimates[aa], (int16_t *)lte_eNB_srs->srs_ch_estimates_time[aa], 1);
#ifdef DEBUG_PHY
sprintf(fname,"srs_ch_estimates_time_%d%d.m",ind,aa);
sprintf(vname,"srs_time_%d%d",ind,aa);
@@ -47,9 +47,10 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
uint8_t nushift,pilot0,pilot1,pilot2,pilot3;
uint8_t previous_thread_id = ue->current_thread_id[Ns>>1]==0 ? (RX_NB_TH-1):(ue->current_thread_id[Ns>>1]-1);
int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[eNB_offset];
LTE_UE_COMMON_PER_THREAD * vars=&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]];
int **dl_ch_estimates =vars->dl_ch_estimates[eNB_offset];
int **dl_ch_estimates_previous=ue->common_vars.common_vars_rx_data_per_thread[previous_thread_id].dl_ch_estimates[eNB_offset];
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF;
int **rxdataF=vars->rxdataF;
pilot0 = 0;
if (ue->frame_parms.Ncp == 0) { // normal prefix
@@ -657,53 +658,27 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
}
}
idft_size_idx_t idftsizeidx;
switch (ue->frame_parms.ofdm_symbol_size) {
case 128:
idftsizeidx = IDFT_128;
break;
case 256:
idftsizeidx = IDFT_256;
break;
case 512:
idftsizeidx = IDFT_512;
break;
case 1024:
idftsizeidx = IDFT_1024;
break;
case 1536:
idftsizeidx = IDFT_1536;
break;
case 2048:
idftsizeidx = IDFT_2048;
break;
default:
idftsizeidx = IDFT_512;
break;
}
int s = ue->frame_parms.ofdm_symbol_size;
if (s != 128 && s != 256 && s != 512 && s != 1024 && s != 1536 && s != 2048)
s = 512;
if( ((Ns%2) == 0) && (l == pilot0)) {
// do ifft of channel estimate
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++)
for (p=0; p<ue->frame_parms.nb_antenna_ports_eNB; p++) {
if (ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[eNB_offset][(p<<1)+aarx]) {
if (dl_ch_estimates[(p<<1)+aarx]) {
//LOG_I(PHY,"Channel Impulse Computation Slot %d ThreadId %d Symbol %d \n", Ns, ue->current_thread_id[Ns>>1], l);
idft(idftsizeidx,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[eNB_offset][(p<<1)+aarx][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1);
idft(get_idft(s),
(int16_t *)&dl_ch_estimates[(p << 1) + aarx][8],
(int16_t *)vars->dl_ch_estimates_time[eNB_offset][(p << 1) + aarx],
1);
}
}
}
T(T_UE_PHY_DL_CHANNEL_ESTIMATE, T_INT(eNB_id), T_INT(0),
T_INT(ue->proc.proc_rxtx[ue->current_thread_id[Ns>>1]].frame_rx%1024), T_INT(ue->proc.proc_rxtx[ue->current_thread_id[Ns>>1]].subframe_rx),
T_INT(0), T_BUFFER(&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates_time[eNB_offset][0][0], 512 * 4));
T_INT(0), T_BUFFER(&vars->dl_ch_estimates_time[eNB_offset][0][0], 512 * 4));
return(0);
}
@@ -721,44 +721,37 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
// do ifft of channel estimate
for (aa=0; aa<ue->frame_parms.nb_antennas_rx*ue->frame_parms.nb_antennas_tx; aa++) {
if (ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa]) {
int32_t *tmp = ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa];
if (tmp) {
int len;
switch (ue->frame_parms.N_RB_DL) {
case 6:
idft(IDFT_128,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_offset][aa],
1);
len = 128;
break;
case 25:
idft(IDFT_512,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_offset][aa],
1);
len = 512;
break;
case 50:
idft(IDFT_1024,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_offset][aa],
1);
len = 1024;
break;
case 75:
idft(IDFT_1536,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_offset][aa],
1);
len=1536;
break;
case 100:
idft(IDFT_2048,(int16_t *) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_offset][aa][8],
(int16_t *) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_offset][aa],
1);
len = 2048;
break;
default:
break;
LOG_E(PHY, "Unknown N_RB_DL %d\n", ue->frame_parms.N_RB_DL);
return -1;
}
idft(get_idft(len),
(int16_t *)&tmp[8],
(int16_t *)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]]
.dl_ch_estimates_time[eNB_offset][aa],
1);
}
}
return(0);
}
@@ -907,30 +900,27 @@ int lte_dl_mbsfn_khz_1dot25_channel_estimation(PHY_VARS_UE *ue,
// do ifft of channel estimate
for (aa=0; aa<ue->frame_parms.nb_antennas_rx*ue->frame_parms.nb_antennas_tx; aa++) {
if (ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0][aa]) {
int32_t *tmp = ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0][aa];
if (tmp) {
int len = 0;
switch (ue->frame_parms.N_RB_DL) {
case 25:
idft(IDFT_6144,(int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0][aa][8],
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[0][aa],
1);
break;
case 50:
idft(IDFT_12288,(int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0][aa][8],
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[0][aa],
1);
break;
case 100:
idft(IDFT_24576,(int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0][aa][8],
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[0][aa],
1);
break;
default:
break;
case 25:
len = 6144;
break;
case 50:
len = 12288;
break;
case 100:
len = 24576;
break;
}
if (len)
idft(get_idft(len),
(int16_t *)&tmp[8],
(int16_t *)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[0][aa],
1);
}
}
return(0);
}
+31 -49
View File
@@ -37,33 +37,29 @@
static c16_t *primary_synch_time[3] __attribute__((aligned(32)));
static void doIdft(int size, short *in, short *out) {
int len;
switch (size) {
case 6:
idft(IDFT_128,in,out,1);
break;
case 25:
idft(IDFT_512,in,out,1);
break;
case 50:
idft(IDFT_1024,in,out,1);
break;
case 75:
idft(IDFT_1536,in,out,1);
break;
case 100:
idft(IDFT_2048,in,out,1);
break;
default:
LOG_E(PHY,"Unsupported N_RB_DL %d\n",size);
abort();
break;
}
case 6:
len = 128;
break;
case 25:
len = 512;
break;
case 50:
len = 1024;
break;
case 75:
len=1536;
break;
case 100:
len = 2048;
break;
default:
LOG_E(PHY, "Unknown N_RB_DL %d\n", size);
return;
}
idft(get_idft(len), in, out, 1);
}
static void copyPrimary( c16_t *out, struct complex16 *in, int ofdmSize) {
int k=ofdmSize-36;
@@ -187,43 +183,29 @@ int ru_sync_time_init(RU_t *ru) { // LTE_UE_COMMON *common_vars
0,
ru->frame_parms->N_RB_DL,
0);
int len;
switch (ru->frame_parms->N_RB_DL) {
case 6:
idft(IDFT_128,(int16_t *)(&dmrsp[0][3*ru->frame_parms->ofdm_symbol_size]),
ru->dmrssync, /// complex output
1);
len = 128;
break;
case 25:
idft(IDFT_512,(int16_t *)(&dmrsp[0][3*ru->frame_parms->ofdm_symbol_size]),
ru->dmrssync, /// complex output
1);
len = 512;
break;
case 50:
idft(IDFT_1024,(int16_t *)(&dmrsp[0][3*ru->frame_parms->ofdm_symbol_size]),
ru->dmrssync, /// complex output
1);
len = 1024;
break;
case 75:
idft(IDFT_1536,(int16_t *)(&dmrsp[0][3*ru->frame_parms->ofdm_symbol_size]),
ru->dmrssync,
1); /// complex output
len = 1536;
break;
case 100:
idft(IDFT_2048,(int16_t *)(&dmrsp[0][3*ru->frame_parms->ofdm_symbol_size]),
ru->dmrssync, /// complex output
1);
len = 2048;
break;
default:
AssertFatal(1==0,"Unsupported N_RB_DL %d\n",ru->frame_parms->N_RB_DL);
break;
LOG_E(PHY, "Unknown N_RB_DL %d\n", ru->frame_parms->N_RB_DL);
return -1;
}
idft(get_idft(len), (int16_t *)&dmrsp[0][3 * ru->frame_parms->ofdm_symbol_size], ru->dmrssync,
1); /// complex output
return(0);
}
@@ -222,33 +222,25 @@ int32_t lte_ul_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
for(i=0; i<Msc_RS; i++)
((int32_t *)temp_in_ifft_0)[i] = ul_ch_estimates[aa][symbol_offset+i];
int len;
switch(frame_parms->N_RB_DL) {
case 6:
idft(IDFT_128,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 128;
break;
case 25:
idft(IDFT_512,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 512;
break;
case 50:
idft(IDFT_1024,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 1024;
break;
case 100:
idft(IDFT_2048,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 2048;
break;
default:
LOG_E(PHY, "Unknown N_RB_DL %d\n", frame_parms->N_RB_DL);
return -1;
}
idft(get_idft(len), (int16_t *)temp_in_ifft_0, (int16_t *)ul_ch_estimates_time[aa], 1);
#if T_TRACER
if (aa == 0)
@@ -501,33 +493,25 @@ int32_t lte_ul_channel_estimation_RRU(LTE_DL_FRAME_PARMS *frame_parms,
for(i=0; i<Msc_RS; i++)
((int32_t *)temp_in_ifft_0)[i] = ul_ch_estimates[aa][symbol_offset+i];
int len;
switch(frame_parms->N_RB_DL) {
case 6:
idft(IDFT_128,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 128;
break;
case 25:
idft(IDFT_512,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 512;
break;
case 50:
idft(IDFT_1024,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 1024;
break;
case 100:
idft(IDFT_2048,(int16_t *) temp_in_ifft_0,
(int16_t *) ul_ch_estimates_time[aa],
1);
len = 2048;
break;
default:
LOG_E(PHY, "Unknown N_RB_DL %d\n", frame_parms->N_RB_DL);
return -1;
}
idft(get_idft(len), (int16_t *)temp_in_ifft_0, (int16_t *)ul_ch_estimates_time[aa], 1);
#if T_TRACER
if (aa == 0)