Commit 2e29a27c authored by lfarizav's avatar lfarizav

some updates

parent 75cf5870
...@@ -3537,7 +3537,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars, ...@@ -3537,7 +3537,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
dci_decoded_output[current_thread_id][4],dci_decoded_output[current_thread_id][5],dci_decoded_output[current_thread_id][6],dci_decoded_output[current_thread_id][7]); dci_decoded_output[current_thread_id][4],dci_decoded_output[current_thread_id][5],dci_decoded_output[current_thread_id][6],dci_decoded_output[current_thread_id][7]);
#endif #endif
} }
printf("[dci] crc %x\n",crc);
if (crc==si_rnti) { if (crc==si_rnti) {
dci_alloc[*dci_cnt].format = format_si; dci_alloc[*dci_cnt].format = format_si;
*dci_cnt = *dci_cnt+1; *dci_cnt = *dci_cnt+1;
...@@ -4011,9 +4011,10 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4011,9 +4011,10 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
printf("[DCI search] doing common search/format0 aggregation 4\n"); printf("[DCI search] doing common search/format0 aggregation 4\n");
#endif #endif
if (ue->prach_resources[eNB_id]) if (ue->prach_resources[eNB_id]){
ra_rnti = ue->prach_resources[eNB_id]->ra_RNTI; ra_rnti = ue->prach_resources[eNB_id]->ra_RNTI;
printf("[dci] ra_RNTI %d, ue->decode_SIB? %d\n",ra_rnti,ue->decode_SIB);
}
// First check common search spaces at aggregation 4 (SI_RNTI, P_RNTI and RA_RNTI format 0/1A), // First check common search spaces at aggregation 4 (SI_RNTI, P_RNTI and RA_RNTI format 0/1A),
// and UE_SPEC format0 (PUSCH) too while we're at it // and UE_SPEC format0 (PUSCH) too while we're at it
dci_decoding_procedure0(pdcch_vars,1,mode,subframe, dci_decoding_procedure0(pdcch_vars,1,mode,subframe,
...@@ -4038,7 +4039,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4038,7 +4039,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]1 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff) || if ((CCEmap0==0xffff) ||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4067,7 +4068,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4067,7 +4068,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]2 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff) || if ((CCEmap0==0xffff) ||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4100,7 +4101,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4100,7 +4101,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]3 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4130,7 +4131,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4130,7 +4131,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
//#endif //#endif
printf("[dci]4 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
} }
if (ue->UE_mode[eNB_id] <= PRACH) if (ue->UE_mode[eNB_id] <= PRACH)
...@@ -4164,7 +4165,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4164,7 +4165,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]5 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4197,7 +4198,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4197,7 +4198,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]6 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4232,7 +4233,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4232,7 +4233,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]7 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4266,7 +4267,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4266,7 +4267,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]8 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4301,7 +4302,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4301,7 +4302,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
//printf("[DCI search] Format 1 aggregation 1 dci_cnt %d\n",dci_cnt); //printf("[DCI search] Format 1 aggregation 1 dci_cnt %d\n",dci_cnt);
printf("[dci]9 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff) || if ((CCEmap0==0xffff) ||
(format_c_found==1)) (format_c_found==1))
return(dci_cnt); return(dci_cnt);
...@@ -4334,7 +4335,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4334,7 +4335,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
//printf("[DCI search] Format 1 aggregation 2 dci_cnt %d\n",dci_cnt); //printf("[DCI search] Format 1 aggregation 2 dci_cnt %d\n",dci_cnt);
printf("[dci]10 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
(format_c_found==1)) (format_c_found==1))
return(dci_cnt); return(dci_cnt);
...@@ -4367,7 +4368,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4367,7 +4368,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
//printf("[DCI search] Format 1 aggregation 4 dci_cnt %d\n",dci_cnt); //printf("[DCI search] Format 1 aggregation 4 dci_cnt %d\n",dci_cnt);
printf("[dci]11 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4401,7 +4402,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4401,7 +4402,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
//printf("[DCI search] Format 1 aggregation 8 dci_cnt %d\n",dci_cnt); //printf("[DCI search] Format 1 aggregation 8 dci_cnt %d\n",dci_cnt);
printf("[dci]12 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4439,7 +4440,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4439,7 +4440,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]13 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
LOG_D(PHY," format 2A_2A search CCEmap0 %x, format0_found %d, format_c_found %d \n", CCEmap0, format0_found, format_c_found); LOG_D(PHY," format 2A_2A search CCEmap0 %x, format0_found %d, format_c_found %d \n", CCEmap0, format0_found, format_c_found);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
...@@ -4475,7 +4476,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4475,7 +4476,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]14 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4510,7 +4511,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4510,7 +4511,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]15 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4546,6 +4547,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4546,6 +4547,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]16 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
//#endif //#endif
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
...@@ -4581,7 +4583,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4581,7 +4583,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]17 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4614,7 +4616,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4614,7 +4616,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]18 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4647,7 +4649,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4647,7 +4649,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]19 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4681,6 +4683,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4681,6 +4683,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]20 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
//#endif //#endif
} else if ((tmode==5) || (tmode==6)) { // This is MU-MIMO } else if ((tmode==5) || (tmode==6)) { // This is MU-MIMO
...@@ -4712,7 +4715,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4712,7 +4715,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]21 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
...@@ -4746,7 +4749,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4746,7 +4749,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]22 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4779,7 +4782,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4779,7 +4782,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]23 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
...@@ -4814,7 +4817,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue, ...@@ -4814,7 +4817,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&CCEmap0, &CCEmap0,
&CCEmap1, &CCEmap1,
&CCEmap2); &CCEmap2);
printf("[dci]24 dci_cnt %d, CCEmap0 %x\n",dci_cnt,CCEmap0);
if ((CCEmap0==0xffff)|| if ((CCEmap0==0xffff)||
((format0_found==1)&&(format_c_found==1))) ((format0_found==1)&&(format_c_found==1)))
return(dci_cnt); return(dci_cnt);
......
...@@ -2058,7 +2058,6 @@ void rx_prach(PHY_VARS_eNB *eNB, ...@@ -2058,7 +2058,6 @@ void rx_prach(PHY_VARS_eNB *eNB,
if (k==(12*2*eNB->frame_parms.ofdm_symbol_size)) if (k==(12*2*eNB->frame_parms.ofdm_symbol_size))
k=0; k=0;
} }
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139) // Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
if (N_ZC == 839) { if (N_ZC == 839) {
log2_ifft_size = 10; log2_ifft_size = 10;
...@@ -2070,7 +2069,7 @@ void rx_prach(PHY_VARS_eNB *eNB, ...@@ -2070,7 +2069,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
#ifdef PRACH_DEBUG #ifdef PRACH_DEBUG
if (aa==0) write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); if (aa==0) write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
#endif #endif
// if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
}// antennas_rx }// antennas_rx
#ifdef PRACH_DEBUG #ifdef PRACH_DEBUG
...@@ -2118,47 +2117,11 @@ void rx_prach(PHY_VARS_eNB *eNB, ...@@ -2118,47 +2117,11 @@ void rx_prach(PHY_VARS_eNB *eNB,
#endif #endif
}// preamble_index }// preamble_index
stop_meas(&eNB->rx_prach); stop_meas(&eNB->rx_prach);
} }
void init_prach_tables(int N_ZC)
{
int i,m;
// Compute the modular multiplicative inverse 'iu' of u s.t. iu*u = 1 mod N_ZC
ZC_inv[0] = 0;
ZC_inv[1] = 1;
for (i=2; i<N_ZC; i++) {
for (m=2; m<N_ZC; m++)
if (((i*m)%N_ZC) == 1) {
ZC_inv[i] = m;
break;
}
#ifdef PRACH_DEBUG
if (i<16)
printf("i %d : inv %d\n",i,ZC_inv[i]);
#endif
}
// Compute quantized roots of unity
for (i=0; i<N_ZC; i++) {
ru[i<<1] = (int16_t)(floor(32767.0*cos(2*M_PI*(double)i/N_ZC)));
ru[1+(i<<1)] = (int16_t)(floor(32767.0*sin(2*M_PI*(double)i/N_ZC)));
#ifdef PRACH_DEBUG
if (i<16)
printf("i %d : runity %d,%d\n",i,ru[i<<1],ru[1+(i<<1)]);
#endif
}
}
void rx_prach_freq(PHY_VARS_eNB *eNB, void rx_prach_freq(PHY_VARS_eNB *eNB,
uint16_t *preamble_energy_list, uint16_t *preamble_energy_list,
uint16_t *preamble_delay_list, uint16_t *preamble_delay_list,
...@@ -2204,7 +2167,6 @@ void rx_prach_freq(PHY_VARS_eNB *eNB, ...@@ -2204,7 +2167,6 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
int fft_size,log2_ifft_size; int fft_size,log2_ifft_size;
uint8_t nb_ant_rx = 1; //eNB->frame_parms.nb_antennas_rx; uint8_t nb_ant_rx = 1; //eNB->frame_parms.nb_antennas_rx;
/*for (aa=0; aa<nb_ant_rx; aa++) { /*for (aa=0; aa<nb_ant_rx; aa++) {
prach[aa] = (int16_t*)&eNB->common_vars.rxdata[0][aa][subframe*eNB->frame_parms.samples_per_tti-eNB->N_TA_offset]; prach[aa] = (int16_t*)&eNB->common_vars.rxdata[0][aa][subframe*eNB->frame_parms.samples_per_tti-eNB->N_TA_offset];
}*/ }*/
...@@ -2233,340 +2195,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB, ...@@ -2233,340 +2195,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
n_ra_prb = get_prach_prb_offset(&(eNB->frame_parms),tdd_mapindex,Nf); n_ra_prb = get_prach_prb_offset(&(eNB->frame_parms),tdd_mapindex,Nf);
prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4; prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
// PDP is oversampled, e.g. 1024 sample instead of 839 k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
// Adapt the NCS (zero-correlation zones) with oversampling factor e.g. 1024/839
NCS2 = (N_ZC==839) ? ((NCS<<10)/839) : ((NCS<<8)/139);
if (NCS2==0)
NCS2 = N_ZC;
/*switch (prach_fmt) {
case 0:
Ncp = 3168;
break;
case 1:
case 3:
Ncp = 21024;
break;
case 2:
Ncp = 6240;
break;
case 4:
Ncp = 448;
break;
default:
Ncp = 3168;
break;
}
// Adjust CP length based on UL bandwidth
switch (eNB->frame_parms.N_RB_UL) {
case 6:
Ncp>>=4;
break;
case 15:
Ncp>>=3;
break;
case 25:
Ncp>>=2;
break;
case 50:
Ncp>>=1;
break;
case 75:
Ncp=(Ncp*3)>>2;
break;
case 100:
if (eNB->frame_parms.threequarter_fs == 1)
Ncp=(Ncp*3)>>2;
break;
}*/
/*if ((eNB->node_function == eNodeB_3GPP) ||
(eNB->node_function == eNodeB_3GPP_BBU) ||
(eNB->node_function == NGFI_RRU_IF4p5)) { // compute the DFTs of the PRACH temporal resources
// Do forward transform
for (aa=0; aa<nb_ant_rx; aa++) {
prach2 = prach[aa] + (Ncp<<1);
// do DFT
switch (eNB->frame_parms.N_RB_UL) {
case 6:
if (prach_fmt == 4) {
dft256(prach2,rxsigF[aa],1);
} else {
dft1536(prach2,rxsigF[aa],1);
if (prach_fmt>1)
dft1536(prach2+3072,rxsigF[aa]+3072,1);
}
break;
case 15:
if (prach_fmt == 4) {
dft256(prach2,rxsigF[aa],1);
} else {
dft3072(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft3072(prach2+6144,rxsigF[aa]+6144);
}
break;
case 25:
default:
if (prach_fmt == 4) {
dft1024(prach2,rxsigF[aa],1);
fft_size = 1024;
} else {
dft6144(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft6144(prach2+12288,rxsigF[aa]+12288);
fft_size = 6144;
}
break;
case 50:
if (prach_fmt == 4) {
dft2048(prach2,rxsigF[aa],1);
} else {
dft12288(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft12288(prach2+24576,rxsigF[aa]+24576);
}
break;
case 75:
if (prach_fmt == 4) {
dft3072(prach2,rxsigF[aa]);
} else {
dft18432(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft18432(prach2+36864,rxsigF[aa]+36864);
}
break;
case 100:
if (eNB->frame_parms.threequarter_fs==0) {
if (prach_fmt == 4) {
dft4096(prach2,rxsigF[aa],1);
} else {
dft24576(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft24576(prach2+49152,rxsigF[aa]+49152);
}
} else {
if (prach_fmt == 4) {
dft3072(prach2,rxsigF[aa]);
} else {
dft18432(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft18432(prach2+36864,rxsigF[aa]+36864);
}
}
break;
}
}
}*/
if (eNB->node_function == NGFI_RRU_IF4p5) {
k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
if (k<0) {
k+=(eNB->frame_parms.ofdm_symbol_size);
}
k*=12;
k+=13;
k*=2;
/// **** send_IF4 of rxsigF to RCC **** ///
send_IF4p5(eNB, eNB->proc.frame_prach, eNB->proc.subframe_prach, IF4p5_PRACH, k);
#if 0
/* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
<<<<<<< HEAD
/*
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
printf("Sending PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (en>60) {
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1);
exit(-1);
}
*/
=======
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
>>>>>>> origin/fix-if4p5
#endif
return;
} else if (eNB->node_function == NGFI_RCC_IF4p5) {
k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
if (k<0) {
k+=(eNB->frame_parms.ofdm_symbol_size);
}
k*=12;
k+=13;
k*=2;
// Adjust received rxsigF offset
memmove((&rxsigF[0][k]),
(&rxsigF[0][0]),
839*2*sizeof(int16_t));
#if 0
/* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
<<<<<<< HEAD
/*
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
printf("Receiving PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (en>60) {
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1);
exit(-1);
}
*/
=======
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
/*if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);*/
>>>>>>> origin/fix-if4p5
#endif
}
// in case of RCC and prach received rx_thread wakes up prach
// here onwards is for eNodeB_3GPP or NGFI_RCC_IF4p5
preamble_offset_old = 99;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
if (restricted_set == 0) {
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
if (preamble_offset != preamble_offset_old) {
preamble_offset_old = preamble_offset;
new_dft = 1;
// This is the \nu corresponding to the preamble index
preamble_shift = 0;
}
else {
preamble_shift -= NCS;
if (preamble_shift < 0)
preamble_shift+=N_ZC;
}
} else { // This is the high-speed case
new_dft = 0;
// set preamble_offset to initial rootSequenceIndex and look if we need more root sequences for this
// preamble index and find the corresponding cyclic shift
// Check if all shifts for that root have been processed
if (preamble_index0 == numshift) {
not_found = 1;
new_dft = 1;
preamble_index0 -= numshift;
(preamble_offset==0 && numshift==0) ? (preamble_offset) : (preamble_offset++);
while (not_found == 1) {
// current root depending on rootSequenceIndex
int index = (rootSequenceIndex + preamble_offset) % N_ZC;
if (prach_fmt<4) {
// prach_root_sequence_map points to prach_root_sequence_map0_3
DevAssert( index < sizeof(prach_root_sequence_map0_3) / sizeof(prach_root_sequence_map0_3[0]) );
} else {
// prach_root_sequence_map points to prach_root_sequence_map4
DevAssert( index < sizeof(prach_root_sequence_map4) / sizeof(prach_root_sequence_map4[0]) );
}
u = prach_root_sequence_map[index];
uint16_t n_group_ra = 0;
if ( (du[u]<(N_ZC/3)) && (du[u]>=NCS) ) {
n_shift_ra = du[u]/NCS;
d_start = (du[u]<<1) + (n_shift_ra * NCS);
n_group_ra = N_ZC/d_start;
n_shift_ra_bar = max(0,(N_ZC-(du[u]<<1)-(n_group_ra*d_start))/N_ZC);
} else if ( (du[u]>=(N_ZC/3)) && (du[u]<=((N_ZC - NCS)>>1)) ) {
n_shift_ra = (N_ZC - (du[u]<<1))/NCS;
d_start = N_ZC - (du[u]<<1) + (n_shift_ra * NCS);
n_group_ra = du[u]/d_start;
n_shift_ra_bar = min(n_shift_ra,max(0,(du[u]- (n_group_ra*d_start))/NCS));
} else {
n_shift_ra = 0;
n_shift_ra_bar = 0;
}
// This is the number of cyclic shifts for the current root u
numshift = (n_shift_ra*n_group_ra) + n_shift_ra_bar;
// skip to next root and recompute parameters if numshift==0
(numshift>0) ? (not_found = 0) : (preamble_offset++);
}
}
if (n_shift_ra>0)
preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
else
preamble_shift = 0;
if (preamble_shift < 0)
preamble_shift+=N_ZC;
preamble_index0++;
if (preamble_index == 0)
first_nonzero_root_idx = preamble_offset;
}
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
#ifdef PRACH_DEBUG
LOG_I(PHY,"preamble index %d: offset %d, preamble shift %d\n",preamble_index,preamble_offset,preamble_shift);
#endif
log2_ifft_size = 10;
fft_size = 6144;
if (new_dft == 1) {
new_dft = 0;
Xu=(int16_t*)eNB->X_u[preamble_offset-first_nonzero_root_idx];
k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
if (k<0) if (k<0)
k+=(eNB->frame_parms.ofdm_symbol_size); k+=(eNB->frame_parms.ofdm_symbol_size);
...@@ -2584,7 +2213,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB, ...@@ -2584,7 +2213,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
memset( prachF, 0, sizeof(int16_t)*2*1024 ); memset( prachF, 0, sizeof(int16_t)*2*1024 );
#ifdef PRACH_DEBUG #ifdef PRACH_DEBUG
write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); //write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
#endif #endif
// write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); // write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
// write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); // write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
...@@ -2594,8 +2223,8 @@ void rx_prach_freq(PHY_VARS_eNB *eNB, ...@@ -2594,8 +2223,8 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
// Do componentwise product with Xu* // Do componentwise product with Xu*
for (offset=0; offset<(N_ZC<<1); offset+=2) { for (offset=0; offset<(N_ZC<<1); offset+=2) {
prachF[offset] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k] + (int32_t)Xu[offset+1]*rxsigF[aa][k+1])>>15); prachF[offset] = 1;//((short *)eNB->prach_vars.prachF)[((offset)<<1)];
prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k+1] - (int32_t)Xu[offset+1]*rxsigF[aa][k])>>15); prachF[offset+1] = 2;//((short *)eNB->prach_vars.prachF)[1+((offset)<<1)];
/* /*
if (offset<16) if (offset<16)
printf("Xu[%d] %d %d, rxsigF[%d][%d] %d %d\n",offset,Xu[offset],Xu[offset+1],aa,k,rxsigF[aa][k],rxsigF[aa][k+1]); printf("Xu[%d] %d %d, rxsigF[%d][%d] %d %d\n",offset,Xu[offset],Xu[offset+1],aa,k,rxsigF[aa][k],rxsigF[aa][k+1]);
...@@ -2619,69 +2248,95 @@ void rx_prach_freq(PHY_VARS_eNB *eNB, ...@@ -2619,69 +2248,95 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
} }
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139) // Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
if (N_ZC == 839) { /*if (N_ZC == 839) {
log2_ifft_size = 10; log2_ifft_size = 10;
idft1024(prachF,prach_ifft[aa],1); idft1024(prachF,prach_ifft[aa],1);
} else { } else {
idft256(prachF,prach_ifft[aa],1); idft256(prachF,prach_ifft[aa],1);
log2_ifft_size = 8; log2_ifft_size = 8;
} }*/
#ifdef PRACH_DEBUG #ifdef PRACH_DEBUG
if (aa==0) write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); //write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
#endif #endif
// if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1); write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
}// antennas_rx }// antennas_rx
#ifdef PRACH_DEBUG if (eNB->node_function == NGFI_RRU_IF4p5) {
k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
if (en>40) {
k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
if (k<0)
k+=(eNB->frame_parms.ofdm_symbol_size);
k*=12;
k+=13;
k*=2;
printf("Dumping prach, k = %d (n_ra_prb %d)\n",k,n_ra_prb);
write_output("rxsigF.m","prach_rxF",&rxsigF[0][k],840,1,1);
write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
write_output("prach_ifft0.m","prach_t0",prach_ifft[0],1024,1,1);
exit(-1);
}
#endif
} // new dft
// check energy in nth time shift if (k<0) {
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC)); k+=(eNB->frame_parms.ofdm_symbol_size);
preamble_energy_list[preamble_index] = 0; }
k*=12;
k+=13;
k*=2;
for (i=0; i<NCS2; i++) { /// **** send_IF4 of rxsigF to RCC **** ///
lev = 0; send_IF4p5(eNB, eNB->proc.frame_prach, eNB->proc.subframe_prach, IF4p5_PRACH, k);
for (aa=0; aa<nb_ant_rx; aa++) { #if 0
lev += (int32_t)prach_ifft[aa][(preamble_shift2+i)<<1]*prach_ifft[aa][(preamble_shift2+i)<<1] + (int32_t)prach_ifft[aa][1+((preamble_shift2+i)<<1)]*prach_ifft[aa][1+((preamble_shift2+i)<<1)]; /* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
} <<<<<<< HEAD
/*
levdB = dB_fixed_times10(lev); en = dB_fixed(signal_energy(&rxsigF[0][k],840));
printf("Sending PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (levdB>preamble_energy_list[preamble_index] ) { if (en>60) {
preamble_energy_list[preamble_index] = levdB; printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
preamble_delay_list[preamble_index] = (i*fft_size)>>log2_ifft_size; write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1);
} exit(-1);
} }
#ifdef PRACH_DEBUG */
LOG_D(PHY,"[RAPROC] Preamble %d => %d dB, %d (shift %d (%d), NCS2 %d(%d), Ncp %d)\n",preamble_index,preamble_energy_list[preamble_index],preamble_delay_list[preamble_index],preamble_shift2,
preamble_shift, NCS2,NCS,Ncp); =======
// exit(-1); en = dB_fixed(signal_energy(&rxsigF[0][k],840));
if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
>>>>>>> origin/fix-if4p5
#endif #endif
}// preamble_index return;
}
stop_meas(&eNB->rx_prach); stop_meas(&eNB->rx_prach);
} }
void init_prach_tables(int N_ZC)
{
int i,m;
// Compute the modular multiplicative inverse 'iu' of u s.t. iu*u = 1 mod N_ZC
ZC_inv[0] = 0;
ZC_inv[1] = 1;
for (i=2; i<N_ZC; i++) {
for (m=2; m<N_ZC; m++)
if (((i*m)%N_ZC) == 1) {
ZC_inv[i] = m;
break;
}
#ifdef PRACH_DEBUG
if (i<16)
printf("i %d : inv %d\n",i,ZC_inv[i]);
#endif
}
// Compute quantized roots of unity
for (i=0; i<N_ZC; i++) {
ru[i<<1] = (int16_t)(floor(32767.0*cos(2*M_PI*(double)i/N_ZC)));
ru[1+(i<<1)] = (int16_t)(floor(32767.0*sin(2*M_PI*(double)i/N_ZC)));
#ifdef PRACH_DEBUG
if (i<16)
printf("i %d : runity %d,%d\n",i,ru[i<<1],ru[1+(i<<1)]);
#endif
}
}
void compute_prach_seq(PRACH_CONFIG_COMMON *prach_config_common, void compute_prach_seq(PRACH_CONFIG_COMMON *prach_config_common,
lte_frame_type_t frame_type, lte_frame_type_t frame_type,
uint32_t X_u[64][839]) uint32_t X_u[64][839])
......
...@@ -125,7 +125,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length) ...@@ -125,7 +125,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm0 = _mm_setzero_si64();//pxor(mm0,mm0); mm0 = _mm_setzero_si64();//pxor(mm0,mm0);
mm3 = _mm_setzero_si64();//pxor(mm3,mm3); mm3 = _mm_setzero_si64();//pxor(mm3,mm3);
for (i=0; i<length; i+=2) { for (i=0; i<2*length; i+=2) {
mm1 = in[i]; mm1 = in[i];
mm2 = mm1; mm2 = mm1;
...@@ -140,7 +140,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length) ...@@ -140,7 +140,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm0 = _m_psrlqi(mm0,32); mm0 = _m_psrlqi(mm0,32);
mm0 = _m_paddd(mm0,mm1); mm0 = _m_paddd(mm0,mm1);
temp = _m_to_int(mm0); temp = _m_to_int(mm0);
temp/=(length/2); temp/=(length);
temp<<=shift; // this is the average of x^2 temp<<=shift; // this is the average of x^2
// now remove the DC component // now remove the DC component
...@@ -150,7 +150,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length) ...@@ -150,7 +150,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm2 = _m_paddw(mm2,mm3); mm2 = _m_paddw(mm2,mm3);
mm2 = _m_pmaddwd(mm2,mm2); mm2 = _m_pmaddwd(mm2,mm2);
temp2 = _m_to_int(mm2); temp2 = _m_to_int(mm2);
temp2/=(length*length/4); temp2/=(length*length);
// temp2<<=(2*shift_DC); // temp2<<=(2*shift_DC);
temp -= temp2; temp -= temp2;
......
...@@ -2023,6 +2023,8 @@ void prach_procedures(PHY_VARS_eNB *eNB) { ...@@ -2023,6 +2023,8 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
preamble_delay_list, preamble_delay_list,
frame, frame,
0); 0);
printf("[prach] ook\n");
write_output("prach_rxF_comp1.m","prach_rxF_comp1",eNB->prach_vars.prachF,1024,1,1);
} }
} else { } else {
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
......
...@@ -3108,6 +3108,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3108,6 +3108,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if (abstraction_flag == 0) { if (abstraction_flag == 0) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN);
printf("[phy_procedures_lte_ue]before is %s\n","ok");
rx_pdcch(ue, rx_pdcch(ue,
proc->frame_rx, proc->frame_rx,
subframe_rx, subframe_rx,
...@@ -3115,7 +3116,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3115,7 +3116,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
(ue->frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI, (ue->frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
ue->high_speed_flag, ue->high_speed_flag,
ue->is_secondary_ue); ue->is_secondary_ue);
printf("[phy_procedures_lte_ue]after is %s\n","ok");
printf("[phy_procedures_lte_ue] ue->prach_resources[%d] %d\n",eNB_id,ue->prach_resources[eNB_id]);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN);
...@@ -3225,9 +3227,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3225,9 +3227,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
#endif #endif
for (i=0; i<dci_cnt; i++) { for (i=0; i<dci_cnt; i++) {
printf("[phy_procedures_lte_ue] rnti[%d] %x, crnti %x\n",i,dci_alloc_rx[i].rnti,ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti);
if ((ue->UE_mode[eNB_id]>PRACH) && if ((ue->UE_mode[eNB_id]>PRACH) &&
(dci_alloc_rx[i].rnti == ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti) && (dci_alloc_rx[i].rnti == ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti) &&
(dci_alloc_rx[i].format != format0)) { (dci_alloc_rx[i].format != format0)) {
...@@ -3241,7 +3241,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3241,7 +3241,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0))); get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0)));
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) && if ((ue->UE_mode[eNB_id] > PRACH) &&
(generate_ue_dlsch_params_from_dci(frame_rx, (generate_ue_dlsch_params_from_dci(frame_rx,
subframe_rx, subframe_rx,
...@@ -3367,14 +3366,13 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3367,14 +3366,13 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
} }
} }
else if ((ue->prach_resources[eNB_id]) && else if ((ue->prach_resources[eNB_id]) &&
(dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) && (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) &&
(dci_alloc_rx[i].format == format1A)) { (dci_alloc_rx[i].format == format1A)) {
#ifdef DEBUG_PHY_PROC #ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
printf("[UE %d][RAPROC] ue->prach_resources[eNB_id] %d, ue->prach_resources[eNB_id]->ra_RNTI %d\n",ue->Mod_id,ue->prach_resources[eNB_id],ue->prach_resources[eNB_id]->ra_RNTI);
//if (((frame_rx%100) == 0) || (frame_rx < 20)) //if (((frame_rx%100) == 0) || (frame_rx < 20))
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
//mac_xface->macphy_exit("so far so good...\n"); //mac_xface->macphy_exit("so far so good...\n");
...@@ -3413,6 +3411,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3413,6 +3411,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
#endif #endif
ue->ulsch_no_allocation_counter[eNB_id] = 0; ue->ulsch_no_allocation_counter[eNB_id] = 0;
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]); //dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) && if ((ue->UE_mode[eNB_id] > PRACH) &&
...@@ -3496,6 +3496,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint ...@@ -3496,6 +3496,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
} }
} }
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->dlsch_rx_pdcch_stats); stop_meas(&ue->dlsch_rx_pdcch_stats);
#endif #endif
......
...@@ -119,7 +119,7 @@ void adc_prach(double *r_re[2], ...@@ -119,7 +119,7 @@ void adc_prach(double *r_re[2],
for (aa=0; aa<nb_rx_antennas; aa++) { for (aa=0; aa<nb_rx_antennas; aa++) {
((short *)output)[((i+output_offset)<<1)] = (short)(r_re[aa][i+input_offset]*gain); ((short *)output)[((i+output_offset)<<1)] = (short)(r_re[aa][i+input_offset]*gain);
((short *)output)[1+((i+output_offset)<<1)] = (short)(r_im[aa][i+input_offset]*gain); ((short *)output)[1+((i+output_offset)<<1)] = (short)(r_im[aa][i+input_offset]*gain);
printf("[adc_prach]i %d output (%d,%d)\n",i,((short *)output)[((i+output_offset)<<1)],((short *)output)[1+((i+output_offset)<<1)]);
if ((r_re[aa][i+input_offset]*gain) > 30000) { if ((r_re[aa][i+input_offset]*gain) > 30000) {
//("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) ); //("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
} }
......
...@@ -148,7 +148,7 @@ double dac_fixed_gain_prach(double *s_re[2], ...@@ -148,7 +148,7 @@ double dac_fixed_gain_prach(double *s_re[2],
amp1 = 0; amp1 = 0;
for (aa=0; aa<nb_tx_antennas; aa++) { for (aa=0; aa<nb_tx_antennas; aa++) {
amp1 += sqrt((double)signal_energy_prach((int32_t*)&input[input_offset_meas],length_meas*2)/NB_RE); amp1 += sqrt((double)signal_energy_prach((int32_t*)&input[input_offset_meas],length_meas)/NB_RE);
} }
amp1/=nb_tx_antennas; amp1/=nb_tx_antennas;
......
...@@ -377,37 +377,27 @@ void multipath_channel_prach(channel_desc_t *desc, ...@@ -377,37 +377,27 @@ void multipath_channel_prach(channel_desc_t *desc,
printf("[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,desc->channel_length); printf("[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,desc->channel_length);
#endif #endif
printf("[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d , symbols tti %d\n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,desc->channel_length,symbols_per_tti); printf("[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d , symbols tti %d\n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,desc->channel_length,symbols_per_tti);
if (keep_channel) { if (keep_channel) {
// do nothing - keep channel // do nothing - keep channel
} else { } else {
random_channel(desc,0);//Find a(l) random_channel(desc,0);//Find a(l)
freq_channel_prach(desc,nb_rb,n_samples,prach_fmt,n_ra_prb);//Find desc->chF_prach freq_channel_prach(desc,nb_rb,n_samples,prach_fmt,n_ra_prb);//Find desc->chF_prach
} }
for (l=0;l<symbols_per_tti;l++){//0-13 normal cyclic prefix
k = (12*n_ra_prb) - 6*fp->N_RB_UL;
if (k<0)
k+=fp->ofdm_symbol_size;
k*=12;
k+=13;
k*=2;
for (f=0;f<prach_samples; f++) { for (f=0;f<prach_samples; f++) {
if (k>=((prach_fmt<4)?12:2)*ofdm_symbol_size)
k=0;
rx_tmp.x = 0; rx_tmp.x = 0;
rx_tmp.y = 0; rx_tmp.y = 0;
for (ii=0; ii<desc->nb_rx; ii++) { for (ii=0; ii<desc->nb_rx; ii++) {
for (j=0; j<desc->nb_tx; j++) { for (j=0; j<desc->nb_tx; j++) {
//RX_RE(k) = TX_RE(k).chF(k).x - TX_IM(k).chF(k).y //RX_RE(k) = TX_RE(k).chF(k).x - TX_IM(k).chF(k).y
rx_tmp.x += ((tx_sig_re[ii][k+l*ofdm_symbol_size*12] * desc->chF_prach[ii+(j*desc->nb_rx)][f].x)-(tx_sig_im[ii][k+l*ofdm_symbol_size*12] * desc->chF_prach[ii+(j*desc->nb_rx)][f].y)); rx_tmp.x += (tx_sig_re[ii][f] * desc->chF_prach[ii+(j*desc->nb_rx)][f+(prach_fmt<4)?13:3].x)-(tx_sig_im[ii][f] * desc->chF_prach[ii+(j*desc->nb_rx)][f+(prach_fmt<4)?13:3].y);
//RX_IM(k) = TX_IM(k).chF(k).x + TX_RE(k).chF(k).y //RX_IM(k) = TX_IM(k).chF(k).x + TX_RE(k).chF(k).y
rx_tmp.y += ((tx_sig_im[ii][k+l*ofdm_symbol_size*12] * desc->chF_prach[ii+(j*desc->nb_rx)][f].x)+(tx_sig_re[ii][k+l*ofdm_symbol_size*12] * desc->chF_prach[ii+(j*desc->nb_rx)][f].y)); rx_tmp.y += (tx_sig_im[ii][f] * desc->chF_prach[ii+(j*desc->nb_rx)][f+(prach_fmt<4)?13:3].x)+(tx_sig_re[ii][f] * desc->chF_prach[ii+(j*desc->nb_rx)][f+(prach_fmt<4)?13:3].y);
} // j } // j
//printf("[multipath prach] k: %d\n",k/2); //printf("[multipath prach] k: %d\n",k/2);
rx_sig_re[ii][(k++)+l*ofdm_symbol_size*12] = rx_tmp.x*path_loss; rx_sig_re[ii][f] = rx_tmp.x*path_loss;
rx_sig_im[ii][(k++)+l*ofdm_symbol_size*12] = rx_tmp.y*path_loss; rx_sig_im[ii][f] = rx_tmp.y*path_loss;
} // ii } // ii
} // f } // f
}//l
} }
...@@ -1106,7 +1106,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX ...@@ -1106,7 +1106,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
tx_prachF = PHY_vars_UE_g[UE_id][CC_id]->prach_vars[eNB_id]->prachF; tx_prachF = PHY_vars_UE_g[UE_id][CC_id]->prach_vars[eNB_id]->prachF;
//write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,1,1); //write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,1,1);
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12; //sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12;
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d: txdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]); //for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d: txdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
pointer_firstvalue_PRACH=((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL<0)?(((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL+PHY_vars_UE_g[UE_id][CC_id]->frame_parms.ofdm_symbol_size)*12+13)*2:(((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL)*12+13)*2; pointer_firstvalue_PRACH=((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL<0)?(((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL+PHY_vars_UE_g[UE_id][CC_id]->frame_parms.ofdm_symbol_size)*12+13)*2:(((12*n_ra_prb) - 6*PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_UL)*12+13)*2;
...@@ -1143,10 +1143,14 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX ...@@ -1143,10 +1143,14 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe], PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe],
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe], PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
subframe,sf_offset); subframe,sf_offset);
for (int idx=0;idx<10;idx++) printf("dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)\n", subframe, idx, s_re_f_prach[0][idx],s_im_f_prach[0][idx]);
// write_output("s_re_f_prach.m","s_re_f_prach_txF", s_re_f_prach,frame_parms->ofdm_symbol_size*12,1,1); // write_output("s_re_f_prach.m","s_re_f_prach_txF", s_re_f_prach,frame_parms->ofdm_symbol_size*12,1,1);
multipath_channel_prach(UE2eNB[UE_id][eNB_id][CC_id],s_re_f_prach,s_im_f_prach,r_re0_f_prach,r_im0_f_prach, multipath_channel_prach(UE2eNB[UE_id][eNB_id][CC_id],s_re_f_prach,s_im_f_prach,r_re0_f_prach,r_im0_f_prach,
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,hold_channel,eNB_id,UE_id,CC_id,subframe&0x1,subframe); frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,hold_channel,eNB_id,UE_id,CC_id,subframe&0x1,subframe);
for (int idx=0;idx<10;idx++) printf("dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)\n", subframe, idx, s_re_f_prach[0][idx],s_im_f_prach[0][idx]);
for (int idx=829;idx<839;idx++) printf("dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)\n", subframe, idx, s_re_f_prach[0][idx],s_im_f_prach[0][idx]);
for (int idx=0;idx<10;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_f[%d] = (%f,%f)\n", subframe, idx, r_re0_f_prach[0][idx],r_im0_f_prach[0][idx]);
for (int idx=829;idx<839;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_f[%d] = (%f,%f)\n", subframe, idx, r_re0_f_prach[0][idx],r_im0_f_prach[0][idx]);
//write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,1); //write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,1);
rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->chF[0],(12*frame_parms->N_RB_DL+1))*(12*frame_parms->N_RB_DL+1); rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->chF[0],(12*frame_parms->N_RB_DL+1))*(12*frame_parms->N_RB_DL+1);
LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,eNB_id,10*log10(rx_pwr), LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,eNB_id,10*log10(rx_pwr),
...@@ -1190,6 +1194,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX ...@@ -1190,6 +1194,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
1e3/UE2eNB[0][eNB_id][CC_id]->sampling_rate, // sampling time (ns) 1e3/UE2eNB[0][eNB_id][CC_id]->sampling_rate, // sampling time (ns)
(double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) (double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr = signal_energy_fp(r_re_p_f_prach,r_im_p_f_prach,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL); rx_pwr = signal_energy_fp(r_re_p_f_prach,r_im_p_f_prach,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
...@@ -1197,16 +1202,16 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX ...@@ -1197,16 +1202,16 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
#endif #endif
rx_prachF = PHY_vars_eNB_g[eNB_id][CC_id]->prach_vars.prachF; rx_prachF = PHY_vars_eNB_g[eNB_id][CC_id]->prach_vars.prachF;
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12; //sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12;
adc_prach(r_re_p_f_prach, adc_prach(r_re_p_f_prach,
r_im_p_f_prach, r_im_p_f_prach,
0, 0,
sf_offset, 0,
(unsigned int*)rx_prachF, (unsigned int*)rx_prachF,
nb_antennas_rx, nb_antennas_rx,
subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12, (prach_fmt<4)?839:139,
12); 12);
write_output("rxprachF.m","prach_rxF", PHY_vars_eNB_g[eNB_id][CC_id]->prach_vars.prachF,12*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16); write_output("rxprachF.m","prach_rxF", PHY_vars_eNB_g[eNB_id][CC_id]->prach_vars.prachF,4*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16);
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
//rx_pwr2 = signal_energy(rxdataF[0]+sf_offset,subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL); //rx_pwr2 = signal_energy(rxdataF[0]+sf_offset,subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
......
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