Included DC handling for odd number of RBs
This commit is contained in:
@@ -141,6 +141,12 @@ short filt8_dcl[8]= {
|
|||||||
short filt8_dcr[8]= {
|
short filt8_dcr[8]= {
|
||||||
0,0,0,4096,8192,12288,16384,0};
|
0,0,0,4096,8192,12288,16384,0};
|
||||||
|
|
||||||
|
short filt8_dcl_h[8]= {
|
||||||
|
16384,12288,8192,4096,0,0,0,0};
|
||||||
|
|
||||||
|
short filt8_dcr_h[8]= {
|
||||||
|
0,4096,8192,1228,16384,0,0,0};
|
||||||
|
|
||||||
short filt8_l1[8] = {
|
short filt8_l1[8] = {
|
||||||
24576,16384,0,0,0,0,0,0};
|
24576,16384,0,0,0,0,0,0};
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,10 @@ extern short filt8_dcl[8];
|
|||||||
|
|
||||||
extern short filt8_dcr[8];
|
extern short filt8_dcr[8];
|
||||||
|
|
||||||
|
extern short filt8_dcl_h[8];
|
||||||
|
|
||||||
|
extern short filt8_dcr_h[8];
|
||||||
|
|
||||||
extern short filt8_l1[8];
|
extern short filt8_l1[8];
|
||||||
|
|
||||||
extern short filt8_ml1[8];
|
extern short filt8_ml1[8];
|
||||||
|
|||||||
@@ -892,54 +892,69 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
uint16_t idxPil = idxDC/2;
|
uint16_t idxPil = idxDC/2;
|
||||||
re_offset = k;
|
re_offset = k;
|
||||||
pil = (int16_t *)&pilot[rb_offset*((config_type==0) ? 6:4)];
|
pil = (int16_t *)&pilot[rb_offset*((config_type==0) ? 6:4)];
|
||||||
pil += (idxPil-4);
|
|
||||||
dl_ch += (idxDC-8);
|
|
||||||
dl_ch = memset(dl_ch, 0, sizeof(int16_t)*14);
|
|
||||||
|
|
||||||
re_offset = (re_offset+idxDC/2-4)&(ue->frame_parms.ofdm_symbol_size-1);
|
// for proper allignment of SIMD vectors
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
if((ue->frame_parms.N_RB_DL&1)==0) {
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
pil += (idxPil-4);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
dl_ch += (idxDC-8);
|
||||||
|
dl_ch = memset(dl_ch, 0, sizeof(int16_t)*14);
|
||||||
multadd_real_vector_complex_scalar(fl,
|
re_offset = (re_offset+idxDC/2-4)&(ue->frame_parms.ofdm_symbol_size-1);
|
||||||
ch,
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
dl_ch,
|
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
8);
|
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
|
multadd_real_vector_complex_scalar(fl,
|
||||||
|
ch,
|
||||||
|
dl_ch,
|
||||||
|
8);
|
||||||
|
|
||||||
pil += 2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2)&(ue->frame_parms.ofdm_symbol_size-1);
|
re_offset = (re_offset+2)&(ue->frame_parms.ofdm_symbol_size-1);
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
multadd_real_vector_complex_scalar(filt8_dcl,
|
multadd_real_vector_complex_scalar(filt8_dcl,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil += 4;
|
pil += 4;
|
||||||
re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
|
re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
multadd_real_vector_complex_scalar(filt8_dcr,
|
multadd_real_vector_complex_scalar(filt8_dcr,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
} else {
|
||||||
|
pil += (idxPil-2);
|
||||||
|
dl_ch += (idxDC-4);
|
||||||
|
dl_ch = memset(dl_ch, 0, sizeof(int16_t)*10);
|
||||||
|
re_offset = (re_offset+idxDC/2-2)&(ue->frame_parms.ofdm_symbol_size-1);
|
||||||
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
|
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
|
multadd_real_vector_complex_scalar(filt8_dcl_h,
|
||||||
|
ch,
|
||||||
|
dl_ch,
|
||||||
|
8);
|
||||||
|
|
||||||
|
pil += 4;
|
||||||
|
re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
|
||||||
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
|
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
|
multadd_real_vector_complex_scalar(filt8_dcr_h,
|
||||||
|
ch,
|
||||||
|
dl_ch,
|
||||||
|
8);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+2)&(ue->frame_parms.ofdm_symbol_size-1);
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
multadd_real_vector_complex_scalar(filt8_dcmd,
|
|
||||||
ch,
|
|
||||||
dl_ch,
|
|
||||||
8);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_PDSCH
|
#ifdef DEBUG_PDSCH
|
||||||
|
|||||||
Reference in New Issue
Block a user