slot_fep for ssb done once before sss and pbch channel estimation moved out of slot_fep
This commit is contained in:
@@ -363,7 +363,7 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,
|
||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||
nfapi_nr_config_request_t *gNB_config = &gNB->gNB_config;
|
||||
//overwrite for new NR parameters
|
||||
gNB_config->nfapi_config.rf_bands.rf_band[0] = 78;
|
||||
gNB_config->nfapi_config.rf_bands.rf_band[0] = 5;
|
||||
gNB_config->nfapi_config.nrarfcn.value = 620000;
|
||||
gNB_config->subframe_config.numerology_index_mu.value = mu;
|
||||
gNB_config->subframe_config.duplex_mode.value = TDD;
|
||||
|
||||
@@ -53,8 +53,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *phy_vars_ue,
|
||||
unsigned char Ns,
|
||||
int sample_offset,
|
||||
int no_prefix,
|
||||
int reset_freq_est,
|
||||
NR_CHANNEL_EST_t channel);
|
||||
NR_CHANNEL_EST_t channel);
|
||||
|
||||
int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned char l,
|
||||
|
||||
@@ -39,12 +39,10 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
||||
unsigned char Ns,
|
||||
int sample_offset,
|
||||
int no_prefix,
|
||||
int reset_freq_est,
|
||||
NR_CHANNEL_EST_t channel)
|
||||
{
|
||||
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
NR_UE_COMMON *common_vars = &ue->common_vars;
|
||||
uint8_t eNB_id = 0;//ue_common_vars->eNb_id;
|
||||
unsigned char aa;
|
||||
unsigned char symbol = l;//+((7-frame_parms->Ncp)*(Ns&1)); ///symbol within sub-frame
|
||||
unsigned int nb_prefix_samples = (no_prefix ? 0 : frame_parms->nb_prefix_samples);
|
||||
@@ -204,56 +202,17 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
||||
|
||||
switch(channel){
|
||||
case NR_PBCH_EST:
|
||||
|
||||
#ifdef DEBUG_FEP
|
||||
printf("Channel estimation eNB %d, slot %d, symbol %d\n",eNB_id,Ns,l);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
nr_pbch_channel_estimation(ue,eNB_id,0,
|
||||
Ns,
|
||||
l,
|
||||
symbol);
|
||||
//}
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
|
||||
// do frequency offset estimation here!
|
||||
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
|
||||
#ifdef DEBUG_FEP
|
||||
printf("Frequency offset estimation\n");
|
||||
#endif
|
||||
|
||||
if (l==(4-frame_parms->Ncp)) {
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||
#endif
|
||||
|
||||
/*lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[0],
|
||||
frame_parms,
|
||||
l,
|
||||
&common_vars->freq_offset,
|
||||
reset_freq_est);*/
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case NR_PDCCH_EST:
|
||||
|
||||
#ifdef DEBUG_FEP
|
||||
printf("PDCCH Channel estimation eNB %d, aatx %d, slot %d, symbol %d start_sc %d\n",eNB_id,aa,Ns,l,coreset_start_subcarrier);
|
||||
printf("PDCCH Channel estimation aatx %d, slot %d, symbol %d start_sc %d\n",aa,Ns,l,coreset_start_subcarrier);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
nr_pdcch_channel_estimation(ue,eNB_id,0,
|
||||
nr_pdcch_channel_estimation(ue,0,
|
||||
Ns,
|
||||
l,
|
||||
symbol,
|
||||
@@ -267,7 +226,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
||||
|
||||
case NR_PDSCH_EST:
|
||||
#ifdef DEBUG_FEP
|
||||
printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
|
||||
printf("Channel estimation aatx %d, slot %d, symbol %d\n",aa,Ns,l);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
@@ -276,7 +235,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
||||
ue->frame_parms.nushift = (p>>1)&1;;
|
||||
|
||||
if (symbol ==l0)
|
||||
nr_pdsch_channel_estimation(ue,eNB_id,0,
|
||||
nr_pdsch_channel_estimation(ue,0,
|
||||
Ns,
|
||||
p,
|
||||
l,
|
||||
|
||||
@@ -33,10 +33,8 @@
|
||||
|
||||
|
||||
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned char l,
|
||||
unsigned char symbol)
|
||||
{
|
||||
int pilot[200] __attribute__((aligned(16)));
|
||||
@@ -78,8 +76,8 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
k = nushift;
|
||||
|
||||
#ifdef DEBUG_CH
|
||||
printf("PBCH Channel Estimation : ThreadId %d, eNB_offset %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,ch_offset,ue->frame_parms.ofdm_symbol_size,
|
||||
ue->frame_parms.Ncp,l,Ns,k, symbol);
|
||||
printf("PBCH Channel Estimation : ThreadId %d, eNB_offset %d ch_offset %d, OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n",ue->current_thread_id[Ns>>1], eNB_offset,ch_offset,ue->frame_parms.ofdm_symbol_size,
|
||||
ue->frame_parms.Ncp,Ns,k, symbol);
|
||||
#endif
|
||||
|
||||
switch (k) {
|
||||
@@ -254,7 +252,6 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
}
|
||||
|
||||
int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned char l,
|
||||
@@ -478,7 +475,6 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
}
|
||||
|
||||
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned short p,
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
\param symbol symbol within frame
|
||||
*/
|
||||
int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned char l,
|
||||
@@ -52,14 +51,11 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
unsigned short nb_rb_coreset);
|
||||
|
||||
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned char l,
|
||||
unsigned char symbol);
|
||||
|
||||
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
uint8_t eNB_id,
|
||||
uint8_t eNB_offset,
|
||||
unsigned char Ns,
|
||||
unsigned short p,
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "PHY/INIT/phy_init.h"
|
||||
#include "PHY/MODULATION/modulation_UE.h"
|
||||
#include "nr_transport_proto_ue.h"
|
||||
#include "PHY/NR_UE_ESTIMATION/nr_estimation.h"
|
||||
//#include "SCHED/defs.h"
|
||||
//#include "SCHED/extern.h"
|
||||
|
||||
@@ -68,32 +69,18 @@ int nr_pbch_detection(PHY_VARS_NR_UE *ue, runmode_t mode)
|
||||
frame_parms->nb_prefix_samples0 = frame_parms->nb_prefix_samples;
|
||||
|
||||
|
||||
//symbol 1
|
||||
nr_slot_fep(ue,
|
||||
1,
|
||||
0,
|
||||
ue->ssb_offset,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
//symbol 2
|
||||
nr_slot_fep(ue,
|
||||
2,
|
||||
0,
|
||||
ue->ssb_offset,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
//symbol 3
|
||||
nr_slot_fep(ue,
|
||||
3,
|
||||
0,
|
||||
ue->ssb_offset,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
for(int i=1; i<4;i++) {
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
nr_pbch_channel_estimation(ue,0,
|
||||
0,
|
||||
i);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
}
|
||||
|
||||
//put back nb_prefix_samples0
|
||||
frame_parms->nb_prefix_samples0 = nb_prefix_samples0;
|
||||
@@ -224,6 +211,15 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
|
||||
/* check that SSS/PBCH block is continuous inside the received buffer */
|
||||
if (sync_pos < (NR_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_subframe - (NB_SYMBOLS_PBCH * fp->ofdm_symbol_size))) {
|
||||
|
||||
|
||||
for(int i=0; i<4;i++)
|
||||
nr_slot_fep(ue,
|
||||
i,
|
||||
0,
|
||||
ue->ssb_offset,
|
||||
0,
|
||||
NR_PBCH_EST);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"Calling sss detection (normal CP)\n");
|
||||
#endif
|
||||
@@ -241,8 +237,8 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
|
||||
int nb_prefix_samples0 = fp->nb_prefix_samples0;
|
||||
fp->nb_prefix_samples0 = fp->nb_prefix_samples;
|
||||
|
||||
nr_slot_fep(ue,0, 0, ue->ssb_offset, 0, 1, NR_PDCCH_EST);
|
||||
nr_slot_fep(ue,1, 0, ue->ssb_offset, 0, 1, NR_PDCCH_EST);
|
||||
nr_slot_fep(ue,0, 0, ue->ssb_offset, 0, NR_PDCCH_EST);
|
||||
nr_slot_fep(ue,1, 0, ue->ssb_offset, 0, NR_PDCCH_EST);
|
||||
fp->nb_prefix_samples0 = nb_prefix_samples0;
|
||||
|
||||
LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n",
|
||||
|
||||
@@ -898,6 +898,7 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
}
|
||||
|
||||
if (fo_flag){
|
||||
|
||||
// fractional frequency offser computation according to Cross-correlation Synchronization Algorithm Using PSS
|
||||
// Shoujun Huang, Yongtao Su, Ying He and Shan Tang, "Joint time and frequency offset estimation in LTE downlink," 7th International Conference on Communications and Networking in China, 2012.
|
||||
|
||||
@@ -922,7 +923,7 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
|
||||
// estimation of fractional frequency offset: angle[(result1)'*(result2)]/pi
|
||||
ffo_est=atan2(re1*im2-re2*im1,re1*re2+im1*im2)/M_PI;
|
||||
|
||||
|
||||
#ifdef DBG_PSS_NR
|
||||
printf("ffo %lf\n",ffo_est);
|
||||
#endif
|
||||
|
||||
@@ -443,24 +443,6 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
|
||||
// For now, symbol 0 = PSS/PBCH and it is never in symbol 0 or 7*2^mu (i.e. always shorter prefix)
|
||||
frame_parms->nb_prefix_samples0 = frame_parms->nb_prefix_samples;
|
||||
|
||||
// Do FFTs for SSS/PSS
|
||||
// SSS
|
||||
nr_slot_fep(ue,
|
||||
SSS_SYMBOL_NB-PSS_SYMBOL_NB, // symbol number w.r.t. PSS
|
||||
0, // Ns slot number
|
||||
ue->ssb_offset, // sample_offset of int16_t
|
||||
0, // no_prefix
|
||||
1, // reset frequency estimation
|
||||
NR_SSS_EST);
|
||||
|
||||
// PSS
|
||||
nr_slot_fep(ue,
|
||||
0,
|
||||
0,
|
||||
ue->ssb_offset,
|
||||
0,
|
||||
1,
|
||||
NR_SSS_EST);
|
||||
|
||||
frame_parms->nb_prefix_samples0 = nb_prefix_samples0;
|
||||
|
||||
|
||||
@@ -4991,7 +4991,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
||||
nr_tti_rx,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PDCCH_EST);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
@@ -5022,7 +5021,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
||||
nr_tti_rx,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PDSCH_EST);
|
||||
|
||||
//printf("phy procedure pdsch start measurement\n");
|
||||
@@ -5106,7 +5104,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
|
||||
nr_tti_rx,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
nr_ue_pbch_procedures(eNB_id,ue,proc,0);
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "PHY/INIT/phy_init.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_transport.h"
|
||||
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
|
||||
#include "PHY/NR_UE_ESTIMATION/nr_estimation.h"
|
||||
|
||||
#include "SCHED_NR/sched_nr.h"
|
||||
|
||||
@@ -371,6 +372,7 @@ int main(int argc, char **argv)
|
||||
frame_parms->N_RB_DL = N_RB_DL;
|
||||
frame_parms->N_RB_UL = N_RB_DL;
|
||||
frame_parms->Nid_cell = Nid_cell;
|
||||
frame_parms->ssb_type = nr_ssb_type_B;
|
||||
|
||||
nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions);
|
||||
phy_init_nr_gNB(gNB,0,0);
|
||||
@@ -545,7 +547,6 @@ int main(int argc, char **argv)
|
||||
n_errors_payload = 0;
|
||||
|
||||
for (trial=0; trial<n_trials; trial++) {
|
||||
|
||||
// multipath channel
|
||||
//multipath_channel(gNB2UE,s_re,s_im,r_re,r_im,frame_length_complex_samples,0);
|
||||
|
||||
@@ -596,32 +597,17 @@ int main(int argc, char **argv)
|
||||
}
|
||||
else {
|
||||
UE->rx_offset=0;
|
||||
//symbol 1
|
||||
nr_slot_fep(UE,
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
//symbol 2
|
||||
nr_slot_fep(UE,
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
//symbol 3
|
||||
nr_slot_fep(UE,
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
NR_PBCH_EST);
|
||||
|
||||
for (int i=5; i<8; i++) {
|
||||
nr_slot_fep(UE,
|
||||
i,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
NR_PBCH_EST);
|
||||
|
||||
nr_pbch_channel_estimation(UE,0,0,i);
|
||||
}
|
||||
|
||||
ret = nr_rx_pbch(UE,
|
||||
&UE->proc.proc_rxtx[0],
|
||||
|
||||
@@ -965,7 +965,7 @@ void *UE_thread(void *arg) {
|
||||
UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0,
|
||||
UE->frame_parms.nb_antennas_rx),"");
|
||||
//write_output("txdata_sym.m", "txdata_sym", UE->common_vars.rxdata[0], (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0), 1, 1);
|
||||
//nr_slot_fep(UE,0, 0, 0, 1, 1, NR_PDCCH_EST);
|
||||
//nr_slot_fep(UE,0, 0, 0, 1, NR_PDCCH_EST);
|
||||
} //UE->mode != loop_through_memory
|
||||
else
|
||||
rt_sleep_ns(1000*1000);
|
||||
|
||||
Reference in New Issue
Block a user