Commit d79a38bf authored by Rakesh Mundlamuri's avatar Rakesh Mundlamuri

fix merge conflicts

parents edfe8c55 55c64483
...@@ -336,12 +336,14 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, ...@@ -336,12 +336,14 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
pbch_vars[gNB_id] = (NR_UE_PBCH *)malloc16_clear(sizeof(NR_UE_PBCH)); pbch_vars[gNB_id] = (NR_UE_PBCH *)malloc16_clear(sizeof(NR_UE_PBCH));
// PRS channel estimates // PRS channel estimates
ue->prs_ch_estimates = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) ); ue->prs_ch_estimates = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
AssertFatal(ue->prs_ch_estimates!=NULL, "NR UE init: PRS channel estimates malloc failed\n"); ue->prs_ch_estimates_time = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
AssertFatal(((ue->prs_ch_estimates!=NULL) || (ue->prs_ch_estimates_time!=NULL)), "NR UE init: PRS channel estimates malloc failed\n");
for (i=0; i<fp->nb_antennas_rx; i++) { for (i=0; i<fp->nb_antennas_rx; i++) {
ue->prs_ch_estimates[i] = (int32_t *)malloc16(2*fp->ofdm_symbol_size*NR_MAX_NUM_PRS_SYMB); ue->prs_ch_estimates[i] = (int32_t *)malloc16(2*fp->ofdm_symbol_size*NR_MAX_NUM_PRS_SYMB);
AssertFatal(ue->prs_ch_estimates[i]!=NULL, "NR UE init: PRS channel estimates malloc failed %d\n", i); ue->prs_ch_estimates_time[i] = (int32_t *)malloc16(2*fp->ofdm_symbol_size*NR_MAX_NUM_PRS_SYMB);
AssertFatal(((ue->prs_ch_estimates[i]!=NULL) || (ue->prs_ch_estimates_time[i]!=NULL)), "NR UE init: PRS channel estimates malloc failed %d\n", i);
} }
......
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
short filt16a_l0[16] = { short filt16a_l0[16] = {
16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0,0}; 16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0,0};
short filt16a_mm0[16] = {
0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0,0,0,0};
short filt16a_r0[16] = { short filt16a_r0[16] = {
0,0,0,0,0,4096,8192,12288,16384,20480,24576,28672,0,0,0,0}; 0,0,0,0,0,4096,8192,12288,16384,20480,24576,28672,0,0,0,0};
...@@ -32,6 +35,15 @@ short filt16a_m0[16] = { ...@@ -32,6 +35,15 @@ short filt16a_m0[16] = {
short filt16a_l1[16] = { short filt16a_l1[16] = {
20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0}; 20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0};
short filt16a_mm1[16] = {
0,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0,0,0};
short filt16a_ml1[16] = {
-4096,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0,0,0};
short filt16a_mr1[16] = {
0,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192,0,0,0,0};
short filt16a_r1[16] = { short filt16a_r1[16] = {
0,0,0,0,0,0,4096,8192,12288,16384,20480,24576,0,0,0,0}; 0,0,0,0,0,0,4096,8192,12288,16384,20480,24576,0,0,0,0};
...@@ -41,6 +53,15 @@ short filt16a_m1[16] = { ...@@ -41,6 +53,15 @@ short filt16a_m1[16] = {
short filt16a_l2[16] = { short filt16a_l2[16] = {
24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0}; 24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0};
short filt16a_mm2[16] = {
0,0,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0,0};
short filt16a_ml2[16] = {
-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0,0};
short filt16a_mr2[16] = {
0,0,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,0,0,0,0};
short filt16a_r2[16] = { short filt16a_r2[16] = {
0,0,0,0,0,0,0,4096,8192,12288,16384,20480,0,0,0,0}; 0,0,0,0,0,0,0,4096,8192,12288,16384,20480,0,0,0,0};
...@@ -50,6 +71,12 @@ short filt16a_m2[16] = { ...@@ -50,6 +71,12 @@ short filt16a_m2[16] = {
short filt16a_l3[16] = { short filt16a_l3[16] = {
28672,24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0}; 28672,24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0};
short filt16a_mm3[16] = {
0,0,0,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0};
short filt16a_ml3[16] = {
-12288,-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0};
short filt16a_r3[16] = { short filt16a_r3[16] = {
0,0,0,0,0,0,0,0,4096,8192,12288,16384,0,0,0,0}; 0,0,0,0,0,0,0,0,4096,8192,12288,16384,0,0,0,0};
...@@ -148,7 +175,7 @@ short filt8_dcr0_h[8]= { ...@@ -148,7 +175,7 @@ short filt8_dcr0_h[8]= {
0,4096,8192,12288,16384,0,0,0}; 0,4096,8192,12288,16384,0,0,0};
short filt8_l1[8] = { short filt8_l1[8] = {
24576,16384,0,0,0,0,0,0}; 24576,16384,8192,0,0,0,0,0};
short filt8_ml1[8] = { short filt8_ml1[8] = {
-8192,0,8192,16384,8192,0,0,0}; -8192,0,8192,16384,8192,0,0,0};
......
...@@ -28,24 +28,42 @@ extern short filt16a_r0[16]; ...@@ -28,24 +28,42 @@ extern short filt16a_r0[16];
extern short filt16a_m0[16]; extern short filt16a_m0[16];
extern short filt16a_mm0[16];
extern short filt16a_l1[16]; extern short filt16a_l1[16];
extern short filt16a_r1[16]; extern short filt16a_r1[16];
extern short filt16a_m1[16]; extern short filt16a_m1[16];
extern short filt16a_mm1[16];
extern short filt16a_mr1[16];
extern short filt16a_ml1[16];
extern short filt16a_l2[16]; extern short filt16a_l2[16];
extern short filt16a_r2[16]; extern short filt16a_r2[16];
extern short filt16a_m2[16]; extern short filt16a_m2[16];
extern short filt16a_mm2[16];
extern short filt16a_mr2[16];
extern short filt16a_ml2[16];
extern short filt16a_l3[16]; extern short filt16a_l3[16];
extern short filt16a_r3[16]; extern short filt16a_r3[16];
extern short filt16a_m3[16]; extern short filt16a_m3[16];
extern short filt16a_mm3[16];
extern short filt16a_ml3[16];
extern short filt16a_l0_dc[16]; extern short filt16a_l0_dc[16];
extern short filt16a_r0_dc[16]; extern short filt16a_r0_dc[16];
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
//#define DEBUG_PDSCH //#define DEBUG_PDSCH
//#define DEBUG_PDCCH //#define DEBUG_PDCCH
//#define DEBUG_CH //#define DEBUG_CH
#define DEBUG_PRS_CHEST //#define DEBUG_PRS_CHEST
extern short nr_qpsk_mod_table[8]; extern short nr_qpsk_mod_table[8];
int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue, int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
...@@ -52,12 +52,14 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue, ...@@ -52,12 +52,14 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
uint32_t **nr_gold_prs = ue->nr_gold_prs[proc->nr_slot_rx]; uint32_t **nr_gold_prs = ue->nr_gold_prs[proc->nr_slot_rx];
prs_data_t *prs_cfg = &ue->prs_cfg; prs_data_t *prs_cfg = &ue->prs_cfg;
int16_t *prs_chest, ch[2] = {0}, *rxF, *pil, *fl,*fm,*fr, mod_prs[NR_MAX_PRS_LENGTH<<1]; int16_t *prs_chest, ch[2] = {0}, *rxF, *pil, *fl,*fm, *fmm, *fml, *fmr, *fr, mod_prs[NR_MAX_PRS_LENGTH<<1];
int16_t k_prime = 0, k = 0; int16_t k_prime = 0, k = 0, re_offset;
uint8_t idx = prs_cfg->NPRSID; uint8_t idx = prs_cfg->NPRSID;
uint8_t rxAnt = 0; // ant 0 rxdataF for now uint8_t rxAnt = 0; // ant 0 rxdataF for now
int16_t *ch_intrp = (int16_t *)malloc16(frame_params->ofdm_symbol_size*2*sizeof(int16_t));
AssertFatal(ch_intrp != NULL, "nr_prs_channel_estimation: channel estimate buffer initialization failed!!");
int16_t *ch_init = ch_intrp;
printf("Inside nr_prs_channel_estimation proc->thread_id %d, proc->nr_slot_rx %d\n", proc->thread_id, proc->nr_slot_rx);
for(int l = prs_cfg->SymbolStart; l < prs_cfg->SymbolStart+prs_cfg->NumPRSSymbols; l++) for(int l = prs_cfg->SymbolStart; l < prs_cfg->SymbolStart+prs_cfg->NumPRSSymbols; l++)
{ {
int symInd = l-prs_cfg->SymbolStart; int symInd = l-prs_cfg->SymbolStart;
...@@ -74,41 +76,10 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue, ...@@ -74,41 +76,10 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
k_prime = k_prime_table[3][symInd]; k_prime = k_prime_table[3][symInd];
} }
printf("PRS config l %d k_prime %d:\nprs_cfg->SymbolStart %d\nprs_cfg->NumPRSSymbols %d\nprs_cfg->NumRB %d\nprs_cfg->CombSize %d\n", l, k_prime, prs_cfg->SymbolStart, prs_cfg->NumPRSSymbols, prs_cfg->NumRB, prs_cfg->CombSize);
//TODO currently supported only comb_size 2 and 4
switch (k_prime) {
case 0:
fl = filt16a_l0;
fm = filt16a_m0;
fr = filt16a_r0;
break;
case 1:
fl = filt16a_l1;
fm = filt16a_m1;
fr = filt16a_r1;
break;
case 2:
fl = filt16a_l2;
fm = filt16a_m2;
fr = filt16a_r2;
break;
case 3:
fl = filt16a_l3;
fm = filt16a_m3;
fr = filt16a_r3;
break;
default:
printf("nr=prs channel_estimation: k_prime=%d -> ERROR\n",k_prime);
return(-1);
break;
}
//re_offset //re_offset
k = (prs_cfg->REOffset+k_prime) % prs_cfg->CombSize + frame_params->first_carrier_offset; k = re_offset = (prs_cfg->REOffset+k_prime) % prs_cfg->CombSize + frame_params->first_carrier_offset;
printf("PRS config l %d k_prime %d, re_offset %d :\nprs_cfg->SymbolStart %d\nprs_cfg->NumPRSSymbols %d\nprs_cfg->NumRB %d\nprs_cfg->CombSize %d\n", l, k_prime, re_offset, prs_cfg->SymbolStart, prs_cfg->NumPRSSymbols, prs_cfg->NumRB, prs_cfg->CombSize);
// Pilots generation and modulation // Pilots generation and modulation
for (int m = 0; m < (12/prs_cfg->CombSize)*prs_cfg->NumRB; m++) for (int m = 0; m < (12/prs_cfg->CombSize)*prs_cfg->NumRB; m++)
...@@ -117,63 +88,280 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue, ...@@ -117,63 +88,280 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
mod_prs[m<<1] = nr_qpsk_mod_table[idx<<1]; mod_prs[m<<1] = nr_qpsk_mod_table[idx<<1];
mod_prs[(m<<1)+1] = nr_qpsk_mod_table[(idx<<1) + 1]; mod_prs[(m<<1)+1] = nr_qpsk_mod_table[(idx<<1) + 1];
} }
// Channel estimation and interpolation
pil = (int16_t *)&mod_prs[0]; pil = (int16_t *)&mod_prs[0];
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k]; rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
prs_chest = (int16_t *)&ue->prs_ch_estimates[rxAnt][l*frame_params->ofdm_symbol_size]; prs_chest = (int16_t *)&ue->prs_ch_estimates[rxAnt][l*frame_params->ofdm_symbol_size];
memset(prs_chest,0,4*(ue->frame_parms.ofdm_symbol_size)); memset(prs_chest,0,4*(ue->frame_parms.ofdm_symbol_size));
for(int pIdx = 0; pIdx < prs_cfg->NumRB*(12/prs_cfg->CombSize); pIdx+=3) memset(ch_intrp,0,4*(ue->frame_parms.ofdm_symbol_size));
if(prs_cfg->CombSize == 2)
{ {
//pilot 0 // Choose the interpolation filters
switch (k_prime) {
case 0:
fl = filt8_l0;
fml = filt8_m0;
fmm = filt8_mm0;
fmr = filt8_mr0;
fm = filt8_m0;
fr = filt8_r0;
break;
case 1:
fl = filt8_l1;
fmm = filt8_mm1;
fml = filt8_ml1;
fmr = fmm;
fm = filt8_m1;
fr = filt8_r1;
break;
default:
printf("nr=prs channel_estimation: k_prime=%d -> ERROR\n",k_prime);
return(-1);
break;
}
//Start pilot
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15); ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15); ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
#ifdef DEBUG_PRS_CHEST
printf("pilIdx %d at k %d of l %d reIdx %d rxF %d %d ch[0] %d ch[1] %d\n", pIdx, k, l, (l*frame_params->ofdm_symbol_size + k), rxF[0], rxF[1], ch[0], ch[1]);
#endif
multadd_real_vector_complex_scalar(fl, multadd_real_vector_complex_scalar(fl,
ch, ch,
prs_chest, ch_intrp,
16); 8);
pil +=2; pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size; k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k]; rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
//pilot 1 //Middle pilots
for(int pIdx = 1; pIdx < prs_cfg->NumRB*(12/prs_cfg->CombSize)-1; pIdx+=2)
{
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
if(pIdx == 1) // 2nd pilot
{
multadd_real_vector_complex_scalar(fml,
ch,
ch_intrp,
8);
}
else
{
multadd_real_vector_complex_scalar(fm,
ch,
ch_intrp,
8);
}
pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
if(pIdx == (prs_cfg->NumRB*(12/prs_cfg->CombSize)-3)) // 2nd last pilot
{
multadd_real_vector_complex_scalar(fmr,
ch,
ch_intrp,
8);
}
else
{
multadd_real_vector_complex_scalar(fmm,
ch,
ch_intrp,
8);
}
pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
ch_intrp +=8;
}
//End pilot
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15); ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15); ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fm, multadd_real_vector_complex_scalar(fr,
ch, ch,
prs_chest, ch_intrp,
16); 8);
}
else if(prs_cfg->CombSize == 4)
{
// Choose the interpolation filters
switch (k_prime) {
case 0:
fl = filt16a_l0;
fml = filt16a_mm0;
fmm = filt16a_mm0;
fmr = filt16a_m0;
fm = filt16a_m0;
fr = filt16a_r0;
break;
case 1:
fl = filt16a_l1;
fml = filt16a_ml1;
fmm = filt16a_mm1;
fmr = filt16a_mr1;
fm = filt16a_m1;
fr = filt16a_r1;
break;
case 2:
fl = filt16a_l2;
fml = filt16a_ml2;
fmm = filt16a_mm2;
fmr = filt16a_mr2;
fm = filt16a_m2;
fr = filt16a_r2;
break;
case 3:
fl = filt16a_l3;
fml = filt16a_ml3;
fmm = filt16a_mm3;
fmr = filt16a_mm3;
fm = filt16a_m3;
fr = filt16a_r3;
break;
default:
printf("nr=prs channel_estimation: k_prime=%d -> ERROR\n",k_prime);
return(-1);
break;
}
//Start pilot
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fl,
ch,
ch_intrp,
16);
pil +=2; pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size; k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k]; rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
//pilot 2
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15); ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15); ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fr, multadd_real_vector_complex_scalar(fml,
ch, ch,
prs_chest, ch_intrp,
16); 16);
pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
ch_intrp +=8;
//Middle pilots
for(int pIdx = 2; pIdx < prs_cfg->NumRB*(12/prs_cfg->CombSize)-2; pIdx++)
{
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fmm,
ch,
ch_intrp,
16);
pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
ch_intrp +=8;
}
//End pilot
ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fmr,
ch,
ch_intrp,
16);
pil +=2; pil +=2;
k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size; k = (k+prs_cfg->CombSize) % frame_params->ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k]; rxF = (int16_t *)&rxdataF[rxAnt][l*frame_params->ofdm_symbol_size + k];
for (int re = 0; re < 12; re++)
printf("prs_ch[%d] %d %d\n", re, prs_chest[re<<1], prs_chest[(re<<1)+1]);
prs_chest +=24; ch[0] = (int16_t)(((int32_t)rxF[0]*pil[0] + (int32_t)rxF[1]*pil[1])>>15);
} //for m ch[1] = (int16_t)(((int32_t)rxF[1]*pil[0] - (int32_t)rxF[0]*pil[1])>>15);
multadd_real_vector_complex_scalar(fr,
ch,
ch_intrp,
16);
}
ch_intrp = ch_init;
for (int re = 0; re < prs_cfg->NumRB*12; re++)
{
prs_chest[re_offset] = ch_intrp[re<<1];
prs_chest[re_offset+1] = ch_intrp[(re<<1)+1];
printf("prs_ch[%d] %d %d\n", re_offset, ch_intrp[re<<1], ch_intrp[(re<<1)+1]);
re_offset = (re_offset+1) % frame_params->ofdm_symbol_size;
}
// Time domain IMPULSE response
idft_size_idx_t idftsizeidx;
switch (frame_params->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;
case 3072:
idftsizeidx = IDFT_3072;
break;
case 4096:
idftsizeidx = IDFT_4096;
break;
default:
printf("unsupported ofdm symbol size \n");
assert(0);
}
idft(idftsizeidx,
(int16_t *)&ue->prs_ch_estimates[rxAnt][l*frame_params->ofdm_symbol_size],
(int16_t *)&ue->prs_ch_estimates_time[rxAnt][l*frame_params->ofdm_symbol_size],1);
} //for l } //for l
LOG_M("prsEst.m","prs_chest",&ue->prs_ch_estimates[rxAnt][prs_cfg->SymbolStart*frame_params->ofdm_symbol_size], prs_cfg->NumRB*12,1,1 ); LOG_M("prsEst.m","prs_chest",&ue->prs_ch_estimates[rxAnt][prs_cfg->SymbolStart*frame_params->ofdm_symbol_size], frame_params->ofdm_symbol_size,1,1);
LOG_M("prsEst_time.m","prs_chest_time",&ue->prs_ch_estimates_time[rxAnt][prs_cfg->SymbolStart*frame_params->ofdm_symbol_size], frame_params->ofdm_symbol_size,1,1);
return(0); return(0);
} }
...@@ -538,10 +726,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, ...@@ -538,10 +726,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
ch, ch,
dl_ch, dl_ch,
16); 16);
#ifdef DEBUG_CH
for (int re = 0; re < 12; re++)
printf("dl_ch[%d] %d %d\n", re, dl_ch[re<<1], dl_ch[(re<<1)+1]);
#endif
pil += 2; pil += 2;
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size; re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)]; rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
......
...@@ -824,6 +824,8 @@ typedef struct { ...@@ -824,6 +824,8 @@ typedef struct {
NR_UE_DLSCH_t *dlsch_p[NUMBER_OF_CONNECTED_gNB_MAX]; NR_UE_DLSCH_t *dlsch_p[NUMBER_OF_CONNECTED_gNB_MAX];
NR_UE_DLSCH_t *dlsch_MCH[NUMBER_OF_CONNECTED_gNB_MAX]; NR_UE_DLSCH_t *dlsch_MCH[NUMBER_OF_CONNECTED_gNB_MAX];
prs_data_t prs_cfg; prs_data_t prs_cfg;
int32_t **prs_ch_estimates;
int32_t **prs_ch_estimates_time;
//Paging parameters //Paging parameters
uint32_t IMSImod1024; uint32_t IMSImod1024;
...@@ -846,7 +848,6 @@ typedef struct { ...@@ -846,7 +848,6 @@ typedef struct {
#endif #endif
int32_t **prs_ch_estimates;
/// PBCH DMRS sequence /// PBCH DMRS sequence
uint32_t nr_gold_pbch[2][64][NR_PBCH_DMRS_LENGTH_DWORD]; uint32_t nr_gold_pbch[2][64][NR_PBCH_DMRS_LENGTH_DWORD];
......
...@@ -105,7 +105,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_ ...@@ -105,7 +105,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
prs_data.PRSResourceSetPeriod[0]=40; // PRS resource slot period prs_data.PRSResourceSetPeriod[0]=40; // PRS resource slot period
prs_data.PRSResourceSetPeriod[1]=0; // resource slot offset prs_data.PRSResourceSetPeriod[1]=0; // resource slot offset
prs_data.SymbolStart=7; prs_data.SymbolStart=7;
prs_data.NumPRSSymbols=6; prs_data.NumPRSSymbols=4;
prs_data.NumRB=fp->N_RB_DL; prs_data.NumRB=fp->N_RB_DL;
prs_data.RBOffset=0; prs_data.RBOffset=0;
prs_data.CombSize=4; prs_data.CombSize=4;
......
...@@ -739,7 +739,7 @@ int main(int argc, char **argv) ...@@ -739,7 +739,7 @@ int main(int argc, char **argv)
UE->prs_cfg.PRSResourceSetPeriod[0]=40; // PRS resource slot period UE->prs_cfg.PRSResourceSetPeriod[0]=40; // PRS resource slot period
UE->prs_cfg.PRSResourceSetPeriod[1]=0; // resource slot offset UE->prs_cfg.PRSResourceSetPeriod[1]=0; // resource slot offset
UE->prs_cfg.SymbolStart=7; UE->prs_cfg.SymbolStart=7;
UE->prs_cfg.NumPRSSymbols=6; UE->prs_cfg.NumPRSSymbols=4;
UE->prs_cfg.NumRB=273; UE->prs_cfg.NumRB=273;
UE->prs_cfg.RBOffset=0; UE->prs_cfg.RBOffset=0;
UE->prs_cfg.CombSize=4; UE->prs_cfg.CombSize=4;
......
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