Closing review comments
MR 1081
This commit is contained in:
@@ -208,7 +208,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ch,
|
ch,
|
||||||
ul_ch,
|
ul_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
@@ -239,7 +239,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ch,
|
ch,
|
||||||
ul_ch,
|
ul_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
//printf("ul_ch addr %p\n",ul_ch);
|
//printf("ul_ch addr %p\n",ul_ch);
|
||||||
@@ -273,12 +273,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
//for (int i= 0; i<16; i++)
|
//for (int i= 0; i<16; i++)
|
||||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ul_ch+=8;
|
ul_ch += 8;
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(6*nb_rb_pusch-3); pilot_cnt+=2) {
|
for (pilot_cnt=3; pilot_cnt<(6*nb_rb_pusch-3); pilot_cnt += 2) {
|
||||||
|
|
||||||
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);
|
||||||
@@ -291,7 +291,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ch,
|
ch,
|
||||||
ul_ch,
|
ul_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
//printf("ul_ch addr %p\n",ul_ch);
|
//printf("ul_ch addr %p\n",ul_ch);
|
||||||
@@ -311,10 +311,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
//for (int i= 0; i<16; i++)
|
//for (int i= 0; i<16; i++)
|
||||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ul_ch+=8;
|
ul_ch += 8;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +333,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -349,10 +349,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ul_ch,
|
ul_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ul_ch+=8;
|
ul_ch += 8;
|
||||||
|
|
||||||
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);
|
||||||
@@ -421,7 +421,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
ul_ch = (int16_t *)&ul_ch_estimates[aarx][ch_offset];
|
ul_ch = (int16_t *)&ul_ch_estimates[aarx][ch_offset];
|
||||||
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pusch*12/8); idxP++) {
|
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pusch*12/8); idxP++) {
|
||||||
for(uint8_t idxI=0; idxI<16; idxI+=2) {
|
for(uint8_t idxI=0; idxI<16; idxI += 2) {
|
||||||
printf("%d\t%d\t",ul_ch[idxP*16+idxI],ul_ch[idxP*16+idxI+1]);
|
printf("%d\t%d\t",ul_ch[idxP*16+idxI],ul_ch[idxP*16+idxI+1]);
|
||||||
}
|
}
|
||||||
printf("%d\n",idxP);
|
printf("%d\n",idxP);
|
||||||
@@ -437,12 +437,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ul_ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ul_ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
ul_ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
ul_ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
ul_ch+=2;
|
ul_ch += 2;
|
||||||
re_offset = (re_offset + 1)%gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset + 1)%gNB->frame_parms.ofdm_symbol_size;
|
||||||
ch_offset++;
|
ch_offset++;
|
||||||
|
|
||||||
for (re_cnt = 1; re_cnt < (nb_rb_pusch*NR_NB_SC_PER_RB) - 5; re_cnt+=6){
|
for (re_cnt = 1; re_cnt < (nb_rb_pusch*NR_NB_SC_PER_RB) - 5; re_cnt += 6){
|
||||||
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -452,8 +452,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ul_ch[0] = ch_l[0];
|
ul_ch[0] = ch_l[0];
|
||||||
ul_ch[1] = ch_l[1];
|
ul_ch[1] = ch_l[1];
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
ul_ch+=2;
|
ul_ch += 2;
|
||||||
ch_offset++;
|
ch_offset++;
|
||||||
|
|
||||||
multadd_real_four_symbols_vector_complex_scalar(filt8_ml2,
|
multadd_real_four_symbols_vector_complex_scalar(filt8_ml2,
|
||||||
@@ -472,17 +472,17 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ch_r,
|
ch_r,
|
||||||
ul_ch);
|
ul_ch);
|
||||||
|
|
||||||
//for (int re_idx = 0; re_idx < 8; re_idx+=2)
|
//for (int re_idx = 0; re_idx < 8; re_idx += 2)
|
||||||
//printf("ul_ch = %d + j*%d\n", ul_ch[re_idx], ul_ch[re_idx+1]);
|
//printf("ul_ch = %d + j*%d\n", ul_ch[re_idx], ul_ch[re_idx+1]);
|
||||||
|
|
||||||
ul_ch+=8;
|
ul_ch += 8;
|
||||||
ch_offset+=4;
|
ch_offset += 4;
|
||||||
|
|
||||||
ul_ch[0] = ch_r[0];
|
ul_ch[0] = ch_r[0];
|
||||||
ul_ch[1] = ch_r[1];
|
ul_ch[1] = ch_r[1];
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
ul_ch+=2;
|
ul_ch += 2;
|
||||||
ch_offset++;
|
ch_offset++;
|
||||||
re_offset = (re_offset + 1)%gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset + 1)%gNB->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
@@ -498,7 +498,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
ul_ch[0] = ch_l[0];
|
ul_ch[0] = ch_l[0];
|
||||||
ul_ch[1] = ch_l[1];
|
ul_ch[1] = ch_l[1];
|
||||||
|
|
||||||
ul_ch+=2;
|
ul_ch += 2;
|
||||||
ch_offset++;
|
ch_offset++;
|
||||||
|
|
||||||
multadd_real_four_symbols_vector_complex_scalar(filt8_rr1,
|
multadd_real_four_symbols_vector_complex_scalar(filt8_rr1,
|
||||||
@@ -516,46 +516,46 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
else if (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
|
else if (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
|
||||||
|
|
||||||
for (pilot_cnt=0; pilot_cnt<6*nb_rb_pusch; pilot_cnt+=6) {
|
for (pilot_cnt=0; pilot_cnt<6*nb_rb_pusch; pilot_cnt += 6) {
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0]/=6;
|
ch[0]/=6;
|
||||||
@@ -563,29 +563,29 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
((__m128i*)ul_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
((__m128i*)ul_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
||||||
((__m128i*)ul_ch)[1]=((__m128i*)ul_ch)[0];
|
((__m128i*)ul_ch)[1]=((__m128i*)ul_ch)[0];
|
||||||
((__m128i*)ul_ch)[2]=((__m128i*)ul_ch)[0];
|
((__m128i*)ul_ch)[2]=((__m128i*)ul_ch)[0];
|
||||||
ul_ch+=24;
|
ul_ch += 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
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
|
||||||
for (pilot_cnt=0; pilot_cnt<4*nb_rb_pusch; pilot_cnt+=4) {
|
for (pilot_cnt=0; pilot_cnt<4*nb_rb_pusch; pilot_cnt += 4) {
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -593,21 +593,21 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
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);
|
||||||
|
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % gNB->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0]>>=2;
|
ch[0] /=4 ;
|
||||||
ch[1]>>=2;
|
ch[1] /=4 ;
|
||||||
((__m128i*)ul_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
((__m128i*)ul_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
||||||
((__m128i*)ul_ch)[1]=((__m128i*)ul_ch)[0];
|
((__m128i*)ul_ch)[1]=((__m128i*)ul_ch)[0];
|
||||||
((__m128i*)ul_ch)[2]=((__m128i*)ul_ch)[0];
|
((__m128i*)ul_ch)[2]=((__m128i*)ul_ch)[0];
|
||||||
ul_ch+=24;
|
ul_ch += 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_PDSCH
|
#ifdef DEBUG_PDSCH
|
||||||
ul_ch = (int16_t *)&ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset];
|
ul_ch = (int16_t *)&ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset];
|
||||||
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pusch*12/8); idxP++) {
|
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pusch*12/8); idxP++) {
|
||||||
for(uint8_t idxI=0; idxI<16; idxI+=2) {
|
for(uint8_t idxI=0; idxI<16; idxI += 2) {
|
||||||
printf("%d\t%d\t",ul_ch[idxP*16+idxI],ul_ch[idxP*16+idxI+1]);
|
printf("%d\t%d\t",ul_ch[idxP*16+idxI],ul_ch[idxP*16+idxI+1]);
|
||||||
}
|
}
|
||||||
printf("%d\n",idxP);
|
printf("%d\n",idxP);
|
||||||
|
|||||||
@@ -94,15 +94,15 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("ch 0 %d\n",((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1]));
|
printf("ch 0 %d\n",((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1]));
|
||||||
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
@@ -110,29 +110,29 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("pilot 2 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot 2 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt+=3) {
|
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt += 3) {
|
||||||
|
|
||||||
// if (pilot_cnt == 30)
|
// if (pilot_cnt == 30)
|
||||||
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
||||||
@@ -146,14 +146,14 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
@@ -161,13 +161,13 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
@@ -175,14 +175,14 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
current_ssb->c_re +=ch[0];
|
current_ssb->c_re += ch[0];
|
||||||
current_ssb->c_im +=ch[1];
|
current_ssb->c_im += ch[1];
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+2,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+2,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
||||||
#endif
|
#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)];
|
||||||
|
|
||||||
@@ -309,7 +309,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
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)];
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
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)];
|
||||||
|
|
||||||
@@ -342,12 +342,12 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
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)];
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt+=3) {
|
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt += 3) {
|
||||||
|
|
||||||
// if (pilot_cnt == 30)
|
// if (pilot_cnt == 30)
|
||||||
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
||||||
@@ -373,7 +373,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
|
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
|
||||||
|
|
||||||
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)];
|
||||||
|
|
||||||
@@ -388,7 +388,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
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)];
|
||||||
|
|
||||||
@@ -404,10 +404,10 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
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)];
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,8 +547,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
||||||
|
|
||||||
@@ -561,8 +561,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
|
|
||||||
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);
|
||||||
@@ -580,14 +580,14 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
for (int m =0; m<12; m++)
|
for (int m =0; m<12; m++)
|
||||||
printf("data : dl_ch -> (%d,%d)\n",dl_ch[0+2*m],dl_ch[1+2*m]);
|
printf("data : dl_ch -> (%d,%d)\n",dl_ch[0+2*m],dl_ch[1+2*m]);
|
||||||
#endif
|
#endif
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
k+=12;
|
k += 12;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(3*nb_rb_coreset); pilot_cnt+=3) {
|
for (pilot_cnt=3; pilot_cnt<(3*nb_rb_coreset); pilot_cnt += 3) {
|
||||||
|
|
||||||
if (k >= ue->frame_parms.ofdm_symbol_size){
|
if (k >= ue->frame_parms.ofdm_symbol_size){
|
||||||
k-=ue->frame_parms.ofdm_symbol_size;
|
k-=ue->frame_parms.ofdm_symbol_size;
|
||||||
@@ -606,8 +606,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
|
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
|
|
||||||
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);
|
||||||
@@ -618,8 +618,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
|
|
||||||
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);
|
||||||
@@ -632,10 +632,10 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
16);
|
16);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
rxF+=8;
|
rxF += 8;
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
k+=12;
|
k += 12;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -690,11 +690,11 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
uint16_t rb_offset = (bwp_start_subcarrier - ue->frame_parms.first_carrier_offset) / 12 - BWPStart;
|
uint16_t rb_offset = (bwp_start_subcarrier - ue->frame_parms.first_carrier_offset) / 12 - BWPStart;
|
||||||
uint8_t config_type = ue->dmrs_DownlinkConfig.pdsch_dmrs_type;
|
uint8_t config_type = ue->dmrs_DownlinkConfig.pdsch_dmrs_type;
|
||||||
int8_t delta = get_delta(p, config_type);
|
int8_t delta = get_delta(p, config_type);
|
||||||
|
nushift = delta;
|
||||||
|
ue->frame_parms.nushift = nushift;
|
||||||
nr_pdsch_dmrs_rx(ue,Ns,ue->nr_gold_pdsch[eNB_offset][Ns][symbol][0], &pilot[0],1000,0,nb_rb_pdsch+rb_offset);
|
nr_pdsch_dmrs_rx(ue,Ns,ue->nr_gold_pdsch[eNB_offset][Ns][symbol][0], &pilot[0],1000,0,nb_rb_pdsch+rb_offset);
|
||||||
|
|
||||||
if (config_type == pdsch_dmrs_type1 && ue->fd_lin_interpolation == 1){
|
if (config_type == pdsch_dmrs_type1 && ue->fd_lin_interpolation == 1){
|
||||||
nushift = (p>>1)&1;
|
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
switch (delta) {
|
switch (delta) {
|
||||||
|
|
||||||
case 0://port 0,1
|
case 0://port 0,1
|
||||||
@@ -733,8 +733,6 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (ue->fd_lin_interpolation == 1) {//pdsch_dmrs_type2
|
} else if (ue->fd_lin_interpolation == 1) {//pdsch_dmrs_type2
|
||||||
nushift = delta;
|
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
switch (delta) {
|
switch (delta) {
|
||||||
case 0://port 0,1
|
case 0://port 0,1
|
||||||
fl = filt8_l2;//left interpolation Filter should be fml
|
fl = filt8_l2;//left interpolation Filter should be fml
|
||||||
@@ -806,7 +804,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
@@ -821,7 +819,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
//printf("dl_ch addr %p\n",dl_ch);
|
//printf("dl_ch addr %p\n",dl_ch);
|
||||||
@@ -839,14 +837,14 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
//for (int i= 0; i<16; i++)
|
//for (int i= 0; i<16; i++)
|
||||||
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
dl_ch+=8;
|
dl_ch += 8;
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(6*nb_rb_pdsch-3); pilot_cnt+=2) {
|
for (pilot_cnt=3; pilot_cnt<(6*nb_rb_pdsch-3); pilot_cnt += 2) {
|
||||||
//if ((pilot_cnt%6)==0)
|
//if ((pilot_cnt%6)==0)
|
||||||
//dl_ch+=4;
|
//dl_ch += 4;
|
||||||
//printf("re_offset %d\n",re_offset);
|
//printf("re_offset %d\n",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);
|
||||||
@@ -859,7 +857,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -872,10 +870,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
dl_ch+=8;
|
dl_ch += 8;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -893,7 +891,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
//for (int i= 0; i<8; i++)
|
//for (int i= 0; i<8; i++)
|
||||||
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -908,10 +906,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
dl_ch+=8;
|
dl_ch += 8;
|
||||||
|
|
||||||
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);
|
||||||
@@ -986,7 +984,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch_l[0],ch_l[1],pil[0],pil[1]);
|
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch_l[0],ch_l[1],pil[0],pil[1]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
@@ -1005,13 +1003,13 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
ch_l[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
ch_l[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
@@ -1025,20 +1023,20 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
dl_ch+=12;
|
dl_ch += 12;
|
||||||
dl_ch[0+2*nushift] = ch[0];
|
dl_ch[0+2*nushift] = ch[0];
|
||||||
dl_ch[1+2*nushift] = ch[1];
|
dl_ch[1+2*nushift] = ch[1];
|
||||||
dl_ch[2+2*nushift] = ch[0];
|
dl_ch[2+2*nushift] = ch[0];
|
||||||
dl_ch[3+2*nushift] = ch[1];
|
dl_ch[3+2*nushift] = ch[1];
|
||||||
dl_ch+=4;
|
dl_ch += 4;
|
||||||
|
|
||||||
for (pilot_cnt=4; pilot_cnt<4*nb_rb_pdsch; pilot_cnt+=4) {
|
for (pilot_cnt=4; pilot_cnt<4*nb_rb_pdsch; pilot_cnt += 4) {
|
||||||
|
|
||||||
multadd_real_vector_complex_scalar(fml,
|
multadd_real_vector_complex_scalar(fml,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
@@ -1048,7 +1046,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch_l[0],ch_l[1],pil[0],pil[1]);
|
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch_l[0],ch_l[1],pil[0],pil[1]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
@@ -1066,7 +1064,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
dl_ch+=8;
|
dl_ch += 8;
|
||||||
dl_ch[0+2*nushift] = ch[0];
|
dl_ch[0+2*nushift] = ch[0];
|
||||||
dl_ch[1+2*nushift] = ch[1];
|
dl_ch[1+2*nushift] = ch[1];
|
||||||
dl_ch[2+2*nushift] = ch[0];
|
dl_ch[2+2*nushift] = ch[0];
|
||||||
@@ -1077,13 +1075,13 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+5) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_l[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
ch_l[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
ch_l[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+1) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch_r[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||||
@@ -1101,12 +1099,12 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
|
|
||||||
dl_ch+=12;
|
dl_ch += 12;
|
||||||
dl_ch[0+2*nushift] = ch[0];
|
dl_ch[0+2*nushift] = ch[0];
|
||||||
dl_ch[1+2*nushift] = ch[1];
|
dl_ch[1+2*nushift] = ch[1];
|
||||||
dl_ch[2+2*nushift] = ch[0];
|
dl_ch[2+2*nushift] = ch[0];
|
||||||
dl_ch[3+2*nushift] = ch[1];
|
dl_ch[3+2*nushift] = ch[1];
|
||||||
dl_ch+=4;
|
dl_ch += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Treat last 2 pilots specially (right edge)
|
// Treat last 2 pilots specially (right edge)
|
||||||
@@ -1187,48 +1185,48 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (config_type==pdsch_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 if (config_type == pdsch_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
|
||||||
|
|
||||||
for (pilot_cnt=0; pilot_cnt<6*nb_rb_pdsch; pilot_cnt+=6) {
|
for (pilot_cnt=0; pilot_cnt<6*nb_rb_pdsch; pilot_cnt += 6) {
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0]/=6;
|
ch[0]/=6;
|
||||||
@@ -1236,29 +1234,29 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
((__m128i*)dl_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
((__m128i*)dl_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
||||||
((__m128i*)dl_ch)[1]=((__m128i*)dl_ch)[0];
|
((__m128i*)dl_ch)[1]=((__m128i*)dl_ch)[0];
|
||||||
((__m128i*)dl_ch)[2]=((__m128i*)dl_ch)[0];
|
((__m128i*)dl_ch)[2]=((__m128i*)dl_ch)[0];
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
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
|
||||||
for (pilot_cnt=0; pilot_cnt<4*nb_rb_pdsch; pilot_cnt+=4) {
|
for (pilot_cnt=0; pilot_cnt<4*nb_rb_pdsch; pilot_cnt += 4) {
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
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);
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
|
|
||||||
@@ -1266,21 +1264,21 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
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);
|
||||||
|
|
||||||
|
|
||||||
pil+=2;
|
pil += 2;
|
||||||
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+2) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
|
||||||
ch[0]>>=2;
|
ch[0] /=4 ;
|
||||||
ch[1]>>=2;
|
ch[1] /=4 ;
|
||||||
((__m128i*)dl_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
((__m128i*)dl_ch)[0]=_mm_set1_epi32(*(int32_t*)ch);
|
||||||
((__m128i*)dl_ch)[1]=((__m128i*)dl_ch)[0];
|
((__m128i*)dl_ch)[1]=((__m128i*)dl_ch)[0];
|
||||||
((__m128i*)dl_ch)[2]=((__m128i*)dl_ch)[0];
|
((__m128i*)dl_ch)[2]=((__m128i*)dl_ch)[0];
|
||||||
dl_ch+=24;
|
dl_ch += 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_PDSCH
|
#ifdef DEBUG_PDSCH
|
||||||
dl_ch = (int16_t *)&dl_ch_estimates[p*ue->frame_parms.nb_antennas_rx+aarx][ch_offset];
|
dl_ch = (int16_t *)&dl_ch_estimates[p*ue->frame_parms.nb_antennas_rx+aarx][ch_offset];
|
||||||
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pdsch*12/8); idxP++) {
|
for(uint16_t idxP=0; idxP<ceil((float)nb_rb_pdsch*12/8); idxP++) {
|
||||||
for(uint8_t idxI=0; idxI<16; idxI+=2) {
|
for(uint8_t idxI=0; idxI<16; idxI += 2) {
|
||||||
printf("%d\t%d\t",dl_ch[idxP*16+idxI],dl_ch[idxP*16+idxI+1]);
|
printf("%d\t%d\t",dl_ch[idxP*16+idxI],dl_ch[idxP*16+idxI+1]);
|
||||||
}
|
}
|
||||||
printf("%d\n",idxP);
|
printf("%d\n",idxP);
|
||||||
|
|||||||
@@ -904,8 +904,8 @@ int main(int argc, char **argv)
|
|||||||
((int16_t*)&gNB->common_vars.rxdata[0][slot_offset])[i],
|
((int16_t*)&gNB->common_vars.rxdata[0][slot_offset])[i],
|
||||||
((int16_t*)&gNB->common_vars.rxdata[0][slot_offset])[1+i]);
|
((int16_t*)&gNB->common_vars.rxdata[0][slot_offset])[1+i]);
|
||||||
|
|
||||||
mod_order = nr_get_Qm_ul(Imcs, 0);
|
mod_order = nr_get_Qm_ul(Imcs, mcs_table);
|
||||||
code_rate = nr_get_code_rate_ul(Imcs, 0);
|
code_rate = nr_get_code_rate_ul(Imcs, mcs_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (SNR = snr0; SNR < snr1; SNR += snr_step) {
|
for (SNR = snr0; SNR < snr1; SNR += snr_step) {
|
||||||
|
|||||||
Reference in New Issue
Block a user