fixed correlation computation in pucch_rx.c
This commit is contained in:
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
#include "T.h"
|
#include "T.h"
|
||||||
|
|
||||||
#define DEBUG_NR_PUCCH_RX 1
|
//#define DEBUG_NR_PUCCH_RX 1
|
||||||
|
|
||||||
NR_gNB_PUCCH_t *new_gNB_pucch(void){
|
NR_gNB_PUCCH_t *new_gNB_pucch(void){
|
||||||
NR_gNB_PUCCH_t *pucch;
|
NR_gNB_PUCCH_t *pucch;
|
||||||
@@ -1515,31 +1515,50 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1
|
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1
|
||||||
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
|
printf("0.prod_re[%d] => (%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)\n",aa,
|
||||||
|
((int16_t*)&prod_re[aa])[0],((int16_t*)&prod_re[aa])[1],((int16_t*)&prod_re[aa])[2],((int16_t*)&prod_re[aa])[3],
|
||||||
|
((int16_t*)&prod_re[aa])[4],((int16_t*)&prod_re[aa])[5],((int16_t*)&prod_re[aa])[6],((int16_t*)&prod_re[aa])[7],
|
||||||
|
((int16_t*)&prod_re[aa])[8],((int16_t*)&prod_re[aa])[9],((int16_t*)&prod_re[aa])[10],((int16_t*)&prod_re[aa])[11],
|
||||||
|
((int16_t*)&prod_re[aa])[12],((int16_t*)&prod_re[aa])[13],((int16_t*)&prod_re[aa])[14],((int16_t*)&prod_re[aa])[15]);
|
||||||
|
#endif
|
||||||
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
||||||
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1+2+3
|
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1+2+3
|
||||||
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
|
printf("1.prod_re[%d] => (%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)\n",aa,
|
||||||
|
((int16_t*)&prod_re[aa])[0],((int16_t*)&prod_re[aa])[1],((int16_t*)&prod_re[aa])[2],((int16_t*)&prod_re[aa])[3],
|
||||||
|
((int16_t*)&prod_re[aa])[4],((int16_t*)&prod_re[aa])[5],((int16_t*)&prod_re[aa])[6],((int16_t*)&prod_re[aa])[7],
|
||||||
|
((int16_t*)&prod_re[aa])[8],((int16_t*)&prod_re[aa])[9],((int16_t*)&prod_re[aa])[10],((int16_t*)&prod_re[aa])[11],
|
||||||
|
((int16_t*)&prod_re[aa])[12],((int16_t*)&prod_re[aa])[13],((int16_t*)&prod_re[aa])[14],((int16_t*)&prod_re[aa])[15]);
|
||||||
|
#endif
|
||||||
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
||||||
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1+2+3+4+5+6+7
|
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1+2+3+4+5+6+7
|
||||||
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
prod_re[aa] = simde_mm256_hadds_epi16(prod_re[aa],prod_re[aa]);// 0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15
|
printf("2.prod_re[%d] => (%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)\n",aa,
|
||||||
|
((int16_t*)&prod_re[aa])[0],((int16_t*)&prod_re[aa])[1],((int16_t*)&prod_re[aa])[2],((int16_t*)&prod_re[aa])[3],
|
||||||
|
((int16_t*)&prod_re[aa])[4],((int16_t*)&prod_re[aa])[5],((int16_t*)&prod_re[aa])[6],((int16_t*)&prod_re[aa])[7],
|
||||||
|
((int16_t*)&prod_re[aa])[8],((int16_t*)&prod_re[aa])[9],((int16_t*)&prod_re[aa])[10],((int16_t*)&prod_re[aa])[11],
|
||||||
|
((int16_t*)&prod_re[aa])[12],((int16_t*)&prod_re[aa])[13],((int16_t*)&prod_re[aa])[14],((int16_t*)&prod_re[aa])[15]);
|
||||||
|
#endif
|
||||||
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
prod_im[aa] = simde_mm256_hadds_epi16(prod_im[aa],prod_im[aa]);
|
||||||
}
|
}
|
||||||
int64_t corr_re=0,corr_im=0;
|
int64_t corr_re=0,corr_im=0;
|
||||||
|
|
||||||
|
|
||||||
for (int aa=0;aa<Prx;aa++) {
|
for (int aa=0;aa<Prx;aa++) {
|
||||||
|
|
||||||
|
corr_re = ( corr32_re[symb][group][aa]+((int16_t*)(&prod_re[aa]))[0]+((int16_t*)(&prod_re[aa]))[8]);
|
||||||
|
corr_im = ( corr32_im[symb][group][aa]+((int16_t*)(&prod_im[aa]))[0]+((int16_t*)(&prod_im[aa]))[8]);
|
||||||
#ifdef DEBUG_NR_PUCCH_RX
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
printf("pucch2 cw %d group %d aa %d: (%d,%d)+(%d,%d) = (%d,%d)\n",cw,group,aa,
|
printf("pucch2 cw %d group %d aa %d: (%d,%d)+(%d,%d) = (%d,%d)\n",cw,group,aa,
|
||||||
corr32_re[symb][group][aa],corr32_im[symb][group][aa],
|
corr32_re[symb][group][aa],corr32_im[symb][group][aa],
|
||||||
((int16_t*)(&prod_re[aa]))[0],
|
((int16_t*)(&prod_re[aa]))[0]+((int16_t*)(&prod_re[aa]))[8],
|
||||||
((int16_t*)(&prod_im[aa]))[0],
|
((int16_t*)(&prod_im[aa]))[0]+((int16_t*)(&prod_im[aa]))[8],
|
||||||
corr32_re[symb][group][aa]+((int16_t*)(&prod_re[aa]))[0],
|
corr_re,corr_im
|
||||||
corr32_im[symb][group][aa]+((int16_t*)(&prod_im[aa]))[0]);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
corr_re = ( corr32_re[symb][group][aa]+((int16_t*)(&prod_re[aa]))[0]);
|
|
||||||
corr_im = ( corr32_im[symb][group][aa]+((int16_t*)(&prod_im[aa]))[0]);
|
|
||||||
|
|
||||||
corr_tmp += corr_re*corr_re + corr_im*corr_im;
|
corr_tmp += corr_re*corr_re + corr_im*corr_im;
|
||||||
} // aa loop
|
} // aa loop
|
||||||
}// group loop
|
}// group loop
|
||||||
@@ -1547,11 +1566,14 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
if (corr_tmp > corr) {
|
if (corr_tmp > corr) {
|
||||||
corr = corr_tmp;
|
corr = corr_tmp;
|
||||||
cw_ML=cw;
|
cw_ML=cw;
|
||||||
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
|
printf("slot %d PUCCH2 cw_ML %d, corr %llu\n",slot,cw_ML,corr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} // cw loop
|
} // cw loop
|
||||||
corr_dB = dB_fixed64((uint64_t)corr);
|
corr_dB = dB_fixed64((uint64_t)corr);
|
||||||
#ifdef DEBUG_NR_PUCCH_RX
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
printf("slot %d PUCCH2 cw_ML %d, metric %d dB\n",slot,cw_ML,corr_dB);
|
printf("slot %d PUCCH2 cw_ML %d, metric %d \n",slot,cw_ML,corr_dB);
|
||||||
#endif
|
#endif
|
||||||
decodedPayload[0]=(uint64_t)cw_ML;
|
decodedPayload[0]=(uint64_t)cw_ML;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user