fix nr ue pdsch
This commit is contained in:
@@ -261,6 +261,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
nr_pdsch_channel_estimation(ue,eNB_id,0,
|
nr_pdsch_channel_estimation(ue,eNB_id,0,
|
||||||
Ns,
|
Ns,
|
||||||
|
0,
|
||||||
l,
|
l,
|
||||||
symbol,
|
symbol,
|
||||||
bwp_start_subcarrier,
|
bwp_start_subcarrier,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdsch,
|
unsigned int *nr_gold_pdsch,
|
||||||
int32_t *output,
|
int32_t *output,
|
||||||
unsigned char p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pdsch_rb)
|
unsigned short nb_pdsch_rb)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -123,6 +123,8 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned short *n_idDM
|
|||||||
nid = n_idDMRS[nscid];
|
nid = n_idDMRS[nscid];
|
||||||
else
|
else
|
||||||
nid = ue->frame_parms.Nid_cell;
|
nid = ue->frame_parms.Nid_cell;
|
||||||
|
|
||||||
|
//printf("gold pdsch nid %d lbar %d\n",nid,lbar);
|
||||||
|
|
||||||
for (ns=0; ns<20; ns++) {
|
for (ns=0; ns<20; ns++) {
|
||||||
|
|
||||||
@@ -130,6 +132,8 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned short *n_idDM
|
|||||||
|
|
||||||
x2tmp0 = ((14*ns+(lbar+l)+1)*((nid<<1)+1))<<17;
|
x2tmp0 = ((14*ns+(lbar+l)+1)*((nid<<1)+1))<<17;
|
||||||
x2 = (x2tmp0+(nid<<1)+nscid)%(1<<31); //cinit
|
x2 = (x2tmp0+(nid<<1)+nscid)%(1<<31); //cinit
|
||||||
|
|
||||||
|
//printf("ns %d gold pdsch x2 %d\n",ns,x2);
|
||||||
|
|
||||||
x1 = 1+ (1<<31);
|
x1 = 1+ (1<<31);
|
||||||
x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31);
|
x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31);
|
||||||
@@ -149,6 +153,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned short *n_idDM
|
|||||||
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
|
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
|
||||||
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
|
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
|
||||||
ue->nr_gold_pdsch[nscid][ns][l][n] = x1^x2;
|
ue->nr_gold_pdsch[nscid][ns][l][n] = x1^x2;
|
||||||
|
// if ((ns==2)&&(l==0))
|
||||||
//printf("n=%d : c %x\n",n,x1^x2);
|
//printf("n=%d : c %x\n",n,x1^x2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdsch,
|
unsigned int *nr_gold_pdsch,
|
||||||
int32_t *output,
|
int32_t *output,
|
||||||
unsigned char p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pdsch_rb);
|
unsigned short nb_pdsch_rb);
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ short filt8_l0[8] = {
|
|||||||
16384,8192,0,0,0,0,0,0};
|
16384,8192,0,0,0,0,0,0};
|
||||||
|
|
||||||
short filt8_mr0[8] = {
|
short filt8_mr0[8] = {
|
||||||
0,8192,16384,8192,0,-8192,0,0};
|
0,0,0,8192,16384,8192,0,-8192};
|
||||||
|
|
||||||
short filt8_r0[8] = {
|
short filt8_r0[8] = {
|
||||||
0,8192,16384,24576,0,0,0,0};
|
0,8192,16384,24576,0,0,0,0};
|
||||||
@@ -98,6 +98,9 @@ short filt8_r0[8] = {
|
|||||||
short filt8_m0[8] = {
|
short filt8_m0[8] = {
|
||||||
0,8192,16384,8192,0,0,0,0};
|
0,8192,16384,8192,0,0,0,0};
|
||||||
|
|
||||||
|
short filt8_mm0[8]= {
|
||||||
|
0,0,0,8192,16384,8192,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};
|
||||||
|
|
||||||
@@ -109,3 +112,6 @@ short filt8_r1[8] = {
|
|||||||
|
|
||||||
short filt8_m1[8] = {
|
short filt8_m1[8] = {
|
||||||
0,0,8192,16384,8192,0,0,0};
|
0,0,8192,16384,8192,0,0,0};
|
||||||
|
|
||||||
|
short filt8_mm1[8]= {
|
||||||
|
0,0,0,0,8192,16384,8192,0};
|
||||||
|
|||||||
@@ -432,22 +432,24 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
uint8_t eNB_id,
|
uint8_t eNB_id,
|
||||||
uint8_t eNB_offset,
|
uint8_t eNB_offset,
|
||||||
unsigned char Ns,
|
unsigned char Ns,
|
||||||
unsigned char p,
|
unsigned short p,
|
||||||
unsigned char l,
|
unsigned char l,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned short bwp_start_subcarrier,
|
unsigned short bwp_start_subcarrier,
|
||||||
unsigned short nb_rb_pdsch)
|
unsigned short nb_rb_pdsch)
|
||||||
{
|
{
|
||||||
int pilot[2][200] __attribute__((aligned(16)));
|
int pilot[1320] __attribute__((aligned(16)));
|
||||||
unsigned char aarx;
|
unsigned char aarx;
|
||||||
unsigned short k;
|
unsigned short k;
|
||||||
unsigned int pilot_cnt;
|
unsigned int pilot_cnt;
|
||||||
int16_t ch[2],*pil,*rxF,*dl_ch,*fl,*fm,*fr,*fml,*fmr;
|
int16_t ch[2],*pil,*rxF,*dl_ch,*fl,*fm,*fr,*fml,*fmr,*fmm;
|
||||||
int ch_offset,symbol_offset;
|
int ch_offset,symbol_offset;
|
||||||
|
|
||||||
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
|
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
|
||||||
|
|
||||||
uint8_t nushift;
|
uint8_t nushift;
|
||||||
|
//int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].dl_ch_estimates[eNB_offset];
|
||||||
|
//int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF;
|
||||||
int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].dl_ch_estimates[eNB_offset];
|
int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].dl_ch_estimates[eNB_offset];
|
||||||
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF;
|
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF;
|
||||||
|
|
||||||
@@ -463,16 +465,17 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
k = bwp_start_subcarrier;
|
k = bwp_start_subcarrier;
|
||||||
|
|
||||||
#ifdef DEBUG_CH
|
//#ifdef DEBUG_CH
|
||||||
printf("PBCH Channel Estimation : ThreadId %d, eNB_offset %d cell_id %d ch_offset %d, OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d symbol %d\n",ue->current_thread_id[Ns>>1], eNB_offset,Nid_cell,ch_offset,ue->frame_parms.ofdm_symbol_size,
|
printf("PDSCH Channel Estimation : ThreadId %d, eNB_offset %d ch_offset %d, symbol_offset %d OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d symbol %d\n",ue->current_thread_id[Ns>>1], eNB_offset,ch_offset,symbol_offset,ue->frame_parms.ofdm_symbol_size,
|
||||||
ue->frame_parms.Ncp,l,Ns,k, symbol);
|
ue->frame_parms.Ncp,l,Ns,k, symbol);
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
switch (nushift) {
|
switch (nushift) {
|
||||||
case 0:
|
case 0:
|
||||||
fl = filt8_l0;
|
fl = filt8_l0;
|
||||||
fm = filt8_m0;
|
fm = filt8_m0;
|
||||||
fr = filt8_r0;
|
fr = filt8_r0;
|
||||||
|
fmm = filt8_mm0;
|
||||||
fml = filt8_m0;
|
fml = filt8_m0;
|
||||||
fmr = filt8_mr0;
|
fmr = filt8_mr0;
|
||||||
break;
|
break;
|
||||||
@@ -481,6 +484,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
fl = filt8_l1;
|
fl = filt8_l1;
|
||||||
fm = filt8_m1;
|
fm = filt8_m1;
|
||||||
fr = filt8_r1;
|
fr = filt8_r1;
|
||||||
|
fmm = filt8_mm1;
|
||||||
fml = filt8_ml1;
|
fml = filt8_ml1;
|
||||||
fmr = filt8_m1;
|
fmr = filt8_m1;
|
||||||
break;
|
break;
|
||||||
@@ -493,34 +497,34 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
|
|
||||||
// generate pilot
|
// generate pilot
|
||||||
nr_pdsch_dmrs_rx(ue,Ns,ue->nr_gold_pdsch[eNB_offset][Ns][symbol], &pilot[p][0],1000,1,nb_rb_pdsch);
|
nr_pdsch_dmrs_rx(ue,Ns,ue->nr_gold_pdsch[eNB_offset][Ns][0], &pilot[0],1000,0,nb_rb_pdsch);
|
||||||
|
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
pil = (int16_t *)&pilot[p][0];
|
pil = (int16_t *)&pilot[0];
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+nushift)];
|
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+nushift)];
|
||||||
dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset];
|
dl_ch = (int16_t *)&dl_ch_estimates[aarx][ch_offset];
|
||||||
|
|
||||||
memset(dl_ch,0,4*(ue->frame_parms.ofdm_symbol_size));
|
memset(dl_ch,0,4*(ue->frame_parms.ofdm_symbol_size));
|
||||||
if (ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha
|
if (ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha
|
||||||
multadd_complex_vector_real_scalar(dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
|
multadd_complex_vector_real_scalar(dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
|
||||||
ue->ch_est_alpha,dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
|
ue->ch_est_alpha,dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
|
||||||
1,ue->frame_parms.ofdm_symbol_size);
|
1,ue->frame_parms.ofdm_symbol_size);
|
||||||
#ifdef DEBUG_CH
|
//#ifdef DEBUG_CH
|
||||||
printf("ch est pilot addr %p RB_DL %d\n",&pilot[p][0], ue->frame_parms.N_RB_DL);
|
printf("ch est pilot addr %p RB_DL %d\n",&pilot[0], ue->frame_parms.N_RB_DL);
|
||||||
printf("k %d, first_carrier %d\n",k,ue->frame_parms.first_carrier_offset);
|
printf("k %d, first_carrier %d\n",k,ue->frame_parms.first_carrier_offset);
|
||||||
printf("rxF addr %p\n", rxF);
|
printf("rxF addr %p p %d\n", rxF,p);
|
||||||
printf("dl_ch addr %p\n",dl_ch);
|
printf("dl_ch addr %p\n",dl_ch);
|
||||||
#endif
|
//#endif
|
||||||
if ((ue->frame_parms.N_RB_DL&1)==0) {
|
//if ((ue->frame_parms.N_RB_DL&1)==0) {
|
||||||
|
|
||||||
// Treat first 2 pilots specially (left edge)
|
// Treat first 2 pilots specially (left edge)
|
||||||
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);
|
||||||
#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
|
||||||
multadd_real_vector_complex_scalar(fl,
|
multadd_real_vector_complex_scalar(fl,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
@@ -532,21 +536,35 @@ int nr_pdsch_channel_estimation(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);
|
||||||
#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
|
||||||
multadd_real_vector_complex_scalar(fml,
|
multadd_real_vector_complex_scalar(fml,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
rxF+=4;
|
rxF+=4;
|
||||||
dl_ch+=4;
|
printf("dl_ch addr %p\n",dl_ch);
|
||||||
|
|
||||||
|
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);
|
||||||
|
//#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]);
|
||||||
|
//#endif
|
||||||
|
multadd_real_vector_complex_scalar(fmm,
|
||||||
|
ch,
|
||||||
|
dl_ch,
|
||||||
|
8);
|
||||||
|
pil+=2;
|
||||||
|
rxF+=4;
|
||||||
|
dl_ch+=8;
|
||||||
k+=4;
|
k+=4;
|
||||||
|
printf("dl_ch addr %p\n",dl_ch);
|
||||||
|
|
||||||
for (pilot_cnt=2; pilot_cnt<(6*(nb_rb_pdsch-1)+4); pilot_cnt+=2) {
|
for (pilot_cnt=3; pilot_cnt<6*(nb_rb_pdsch-1); pilot_cnt+=3) {
|
||||||
if ((pilot_cnt%6)==0)
|
//if ((pilot_cnt%6)==0)
|
||||||
dl_ch+=4;
|
//dl_ch+=4;
|
||||||
|
|
||||||
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;
|
||||||
@@ -554,9 +572,9 @@ int nr_pdsch_channel_estimation(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);
|
||||||
#ifdef DEBUG_CH
|
//#ifdef DEBUG_CH
|
||||||
printf("pilot %d : 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 %d : 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
|
||||||
multadd_real_vector_complex_scalar(fm,
|
multadd_real_vector_complex_scalar(fm,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
@@ -564,55 +582,67 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
pil+=2;
|
pil+=2;
|
||||||
rxF+=4;
|
rxF+=4;
|
||||||
dl_ch+=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);
|
||||||
#ifdef DEBUG_CH
|
//#ifdef DEBUG_CH
|
||||||
printf("pilot %d : 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 %d : 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
|
||||||
multadd_real_vector_complex_scalar(fm,
|
multadd_real_vector_complex_scalar(fmm,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
rxF+=4;
|
rxF+=4;
|
||||||
dl_ch+=4;
|
dl_ch+=8;
|
||||||
k+=4;
|
k+=4;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Treat first 2 pilots specially (right edge)
|
// Treat first 2 pilots specially (right edge)
|
||||||
|
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);
|
||||||
|
//#ifdef DEBUG_CH
|
||||||
|
printf("pilot %d : 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
|
||||||
|
multadd_real_vector_complex_scalar(fmm,
|
||||||
|
ch,
|
||||||
|
dl_ch,
|
||||||
|
8);
|
||||||
|
pil+=2;
|
||||||
|
rxF+=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);
|
||||||
#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
|
||||||
multadd_real_vector_complex_scalar(fmr,
|
multadd_real_vector_complex_scalar(fmr,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
8);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
rxF+=4;
|
rxF+=4;
|
||||||
|
dl_ch+=8;
|
||||||
|
k+=4;
|
||||||
|
|
||||||
//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));
|
||||||
|
|
||||||
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);
|
||||||
#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
|
||||||
multadd_real_vector_complex_scalar(fr,
|
multadd_real_vector_complex_scalar(fr,
|
||||||
ch,
|
ch,
|
||||||
dl_ch,
|
dl_ch,
|
||||||
8);
|
4);
|
||||||
pil+=2;
|
//pil+=2;
|
||||||
rxF+=4;
|
//rxF+=4;
|
||||||
dl_ch+=4;
|
|
||||||
k+=4;
|
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
uint8_t eNB_id,
|
uint8_t eNB_id,
|
||||||
uint8_t eNB_offset,
|
uint8_t eNB_offset,
|
||||||
unsigned char Ns,
|
unsigned char Ns,
|
||||||
|
unsigned short p,
|
||||||
unsigned char l,
|
unsigned char l,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned short bwp_start_subcarrier,
|
unsigned short bwp_start_subcarrier,
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
#include "PHY/LTE_REFSIG/lte_refsig.h"
|
#include "PHY/LTE_REFSIG/lte_refsig.h"
|
||||||
|
|
||||||
#define DEBUG_PBCH 1
|
//#define DEBUG_PBCH 1
|
||||||
//#define DEBUG_PBCH_ENCODING
|
//#define DEBUG_PBCH_ENCODING
|
||||||
|
|
||||||
#ifdef OPENAIR2
|
#ifdef OPENAIR2
|
||||||
|
|||||||
@@ -5568,8 +5568,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
|||||||
nr_slot_fep(ue,
|
nr_slot_fep(ue,
|
||||||
l,
|
l,
|
||||||
nr_tti_rx,
|
nr_tti_rx,
|
||||||
|
ue->ssb_offset,
|
||||||
0,
|
0,
|
||||||
1,
|
|
||||||
1,
|
1,
|
||||||
NR_PDCCH_EST);
|
NR_PDCCH_EST);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||||
@@ -5630,26 +5630,29 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
|||||||
#endif
|
#endif
|
||||||
//#if 0
|
//#if 0
|
||||||
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, nr_tti_rx);
|
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, nr_tti_rx);
|
||||||
|
//set active for testing, to be removed
|
||||||
|
//if (nr_tti_rx==2){
|
||||||
//to update from pdsch config
|
//to update from pdsch config
|
||||||
nr_gold_pdsch(ue,2,0, 1);
|
nr_gold_pdsch(ue,2,0, 1);
|
||||||
|
|
||||||
|
|
||||||
int nb_prefix_samples0 = ue->frame_parms.nb_prefix_samples0;
|
int nb_prefix_samples0 = ue->frame_parms.nb_prefix_samples0;
|
||||||
ue->frame_parms.nb_prefix_samples0 = ue->frame_parms.nb_prefix_samples;
|
ue->frame_parms.nb_prefix_samples0 = ue->frame_parms.nb_prefix_samples;
|
||||||
|
|
||||||
nr_slot_fep(ue,
|
nr_slot_fep(ue,
|
||||||
2, //to be updated from higher layer
|
2, //to be updated from higher layer
|
||||||
nr_tti_rx,
|
nr_tti_rx,
|
||||||
|
ue->ssb_offset,
|
||||||
0,
|
0,
|
||||||
0,
|
1,
|
||||||
0,
|
|
||||||
NR_PDSCH_EST);
|
NR_PDSCH_EST);
|
||||||
|
|
||||||
//put back nb_prefix_samples0
|
//put back nb_prefix_samples0
|
||||||
ue->frame_parms.nb_prefix_samples0 = nb_prefix_samples0;
|
ue->frame_parms.nb_prefix_samples0 = nb_prefix_samples0;
|
||||||
|
|
||||||
//set active for testing, to be removed
|
|
||||||
if (nr_tti_rx==1)
|
|
||||||
ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;
|
ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;
|
||||||
|
//}
|
||||||
|
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
start_meas(&ue->generic_stat);
|
start_meas(&ue->generic_stat);
|
||||||
@@ -5726,13 +5729,13 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
|||||||
start_meas(&ue->ofdm_demod_stats);
|
start_meas(&ue->ofdm_demod_stats);
|
||||||
#endif
|
#endif
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
||||||
nr_slot_fep(ue,
|
/*nr_slot_fep(ue,
|
||||||
l,
|
l,
|
||||||
1+(nr_tti_rx<<1),
|
1+(nr_tti_rx<<1),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NR_PDSCH_EST);
|
NR_PDSCH_EST);*/
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
stop_meas(&ue->ofdm_demod_stats);
|
stop_meas(&ue->ofdm_demod_stats);
|
||||||
@@ -5747,13 +5750,13 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
|||||||
int next_nr_tti_rx = (1+nr_tti_rx)%10;
|
int next_nr_tti_rx = (1+nr_tti_rx)%10;
|
||||||
if (nr_subframe_select(&ue->frame_parms,next_nr_tti_rx) != SF_UL)
|
if (nr_subframe_select(&ue->frame_parms,next_nr_tti_rx) != SF_UL)
|
||||||
{
|
{
|
||||||
nr_slot_fep(ue,
|
/*nr_slot_fep(ue,
|
||||||
0,
|
0,
|
||||||
(next_nr_tti_rx<<1),
|
(next_nr_tti_rx<<1),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NR_PDSCH_EST);
|
NR_PDSCH_EST);*/
|
||||||
}
|
}
|
||||||
} // not an S-subframe
|
} // not an S-subframe
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
|
|||||||
@@ -204,7 +204,10 @@ typedef struct {
|
|||||||
//! clock source
|
//! clock source
|
||||||
clock_source_t clock_source;
|
clock_source_t clock_source;
|
||||||
//! Manual SDR IP address
|
//! Manual SDR IP address
|
||||||
|
//#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||||
|
#ifndef OAI_ADRV9371_ZC706
|
||||||
char *sdr_addrs;
|
char *sdr_addrs;
|
||||||
|
#endif
|
||||||
//! Auto calibration flag
|
//! Auto calibration flag
|
||||||
int autocal[4];
|
int autocal[4];
|
||||||
//! rf devices work with x bits iqs when oai have its own iq format
|
//! rf devices work with x bits iqs when oai have its own iq format
|
||||||
|
|||||||
@@ -824,6 +824,7 @@ void *UE_thread(void *arg) {
|
|||||||
int i;
|
int i;
|
||||||
char threadname[128];
|
char threadname[128];
|
||||||
int th_id;
|
int th_id;
|
||||||
|
unsigned char nb_sf_init=10;
|
||||||
UE->proc.proc_rxtx[0].counter_decoder = 0;
|
UE->proc.proc_rxtx[0].counter_decoder = 0;
|
||||||
UE->proc.proc_rxtx[1].counter_decoder = 0;
|
UE->proc.proc_rxtx[1].counter_decoder = 0;
|
||||||
UE->proc.proc_rxtx[2].counter_decoder = 0;
|
UE->proc.proc_rxtx[2].counter_decoder = 0;
|
||||||
@@ -865,6 +866,12 @@ void *UE_thread(void *arg) {
|
|||||||
printf("ue sync not ready\n");
|
printf("ue sync not ready\n");
|
||||||
usleep(500*1000);
|
usleep(500*1000);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OAI_ADRV9371_ZC706
|
||||||
|
nb_sf_init = 10;
|
||||||
|
#else
|
||||||
|
nb_sf_init=5;
|
||||||
#endif
|
#endif
|
||||||
if (instance_cnt_synch < 0) { // we can invoke the synch
|
if (instance_cnt_synch < 0) { // we can invoke the synch
|
||||||
// grab 10 ms of signal and wakeup synch thread
|
// grab 10 ms of signal and wakeup synch thread
|
||||||
@@ -872,11 +879,11 @@ void *UE_thread(void *arg) {
|
|||||||
rxp[i] = (void*)&UE->common_vars.rxdata[i][0];
|
rxp[i] = (void*)&UE->common_vars.rxdata[i][0];
|
||||||
|
|
||||||
if (UE->mode != loop_through_memory)
|
if (UE->mode != loop_through_memory)
|
||||||
AssertFatal( UE->frame_parms.samples_per_subframe*10 ==
|
AssertFatal( UE->frame_parms.samples_per_subframe*nb_sf_init ==
|
||||||
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||||
×tamp,
|
×tamp,
|
||||||
rxp,
|
rxp,
|
||||||
UE->frame_parms.samples_per_subframe*10,
|
UE->frame_parms.samples_per_subframe*nb_sf_init,
|
||||||
UE->frame_parms.nb_antennas_rx), "error reading samples");
|
UE->frame_parms.nb_antennas_rx), "error reading samples");
|
||||||
|
|
||||||
AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
|
AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
|
||||||
|
|||||||
@@ -782,7 +782,9 @@ void init_openair0() {
|
|||||||
openair0_cfg[card].rx_freq[i]);
|
openair0_cfg[card].rx_freq[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef OAI_ADRV9371_ZC706
|
||||||
if (usrp_args) openair0_cfg[card].sdr_addrs = usrp_args;
|
if (usrp_args) openair0_cfg[card].sdr_addrs = usrp_args;
|
||||||
|
#endif
|
||||||
if (usrp_clksrc) {
|
if (usrp_clksrc) {
|
||||||
if (strcmp(usrp_clksrc, "internal") == 0) {
|
if (strcmp(usrp_clksrc, "internal") == 0) {
|
||||||
openair0_cfg[card].clock_source = internal;
|
openair0_cfg[card].clock_source = internal;
|
||||||
|
|||||||
Reference in New Issue
Block a user