diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 88a8ff84c8..4c5a480386 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -726,7 +726,6 @@ void *UE_thread(void *arg) PHY_VARS_NR_UE *UE = (PHY_VARS_NR_UE *)arg; const NR_DL_FRAME_PARMS *fp = &UE->frame_parms; // int tx_enabled = 0; - c16_t *rxp[fp->nb_antennas_rx]; enum stream_status_e stream_status = STREAM_STATUS_UNSYNC; fapi_nr_config_request_t *cfg = &UE->nrUE_config; sl_nr_phy_config_request_t *sl_cfg = NULL; @@ -780,6 +779,7 @@ void *UE_thread(void *arg) readFrame(UE, &tmp, duration_rx_to_tx, true); } + c16_t *rxp[fp->nb_antennas_rx]; while (!oai_exit) { if (syncRunning) { notifiedFIFO_elt_t *res = pollNotifiedFIFO(&nf); diff --git a/openair1/PHY/CODING/nr_segmentation.c b/openair1/PHY/CODING/nr_segmentation.c index 57c21a5980..8312471b34 100644 --- a/openair1/PHY/CODING/nr_segmentation.c +++ b/openair1/PHY/CODING/nr_segmentation.c @@ -24,9 +24,9 @@ author: Hongzhi WANG (TCL) date: 12.09.2017 */ -#include "PHY/defs_nr_UE.h" -//#include "SCHED/extern.h" +#include "common/utils/LOG/log.h" +#include "openair1/PHY/CODING/coding_defs.h" //#define DEBUG_SEGMENTATION int32_t nr_segmentation(unsigned char *input_buffer, @@ -174,8 +174,6 @@ else return Kb; } - - #ifdef MAIN main() { diff --git a/openair1/PHY/MODULATION/slot_fep_nr.c b/openair1/PHY/MODULATION/slot_fep_nr.c index c534ed7eea..99cbf1c652 100644 --- a/openair1/PHY/MODULATION/slot_fep_nr.c +++ b/openair1/PHY/MODULATION/slot_fep_nr.c @@ -19,12 +19,10 @@ * contact@openairinterface.org */ -#include "PHY/defs_nr_UE.h" #include "PHY/defs_gNB.h" #include "PHY/defs_nr_common.h" #include "modulation_UE.h" #include "nr_modulation.h" -#include "PHY/LTE_ESTIMATION/lte_estimation.h" #include "PHY/NR_UE_ESTIMATION/nr_estimation.h" #include "PHY/nr_phy_common/inc/nr_phy_common.h" #include diff --git a/openair1/PHY/NR_REFSIG/dmrs_nr.h b/openair1/PHY/NR_REFSIG/dmrs_nr.h index 5f17478874..8e275568e3 100644 --- a/openair1/PHY/NR_REFSIG/dmrs_nr.h +++ b/openair1/PHY/NR_REFSIG/dmrs_nr.h @@ -33,24 +33,11 @@ #ifndef DMRS_NR_H #define DMRS_NR_H -#include "PHY/defs_nr_UE.h" #include "PHY/types.h" #include "PHY/NR_REFSIG/ss_pbch_nr.h" #include "PHY/NR_REFSIG/pss_nr.h" #include "PHY/NR_REFSIG/sss_nr.h" -/************** CODE GENERATION ***********************************/ - -/************** DEFINE ********************************************/ - - -/************* STRUCTURES *****************************************/ - - -/************** VARIABLES *****************************************/ - -/************** FUNCTION ******************************************/ - int pseudo_random_sequence(int M_PN, uint32_t *c, uint32_t cinit); void lte_gold_new(LTE_DL_FRAME_PARMS *frame_parms, uint32_t lte_gold_table[20][2][14], uint16_t Nid_cell); uint16_t get_dmrs_freq_idx_ul(uint16_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type); diff --git a/openair1/PHY/NR_REFSIG/pss_nr.h b/openair1/PHY/NR_REFSIG/pss_nr.h index 07ab520e90..15ae316d74 100644 --- a/openair1/PHY/NR_REFSIG/pss_nr.h +++ b/openair1/PHY/NR_REFSIG/pss_nr.h @@ -32,9 +32,8 @@ #ifndef PSS_NR_H #define PSS_NR_H -#include "PHY/defs_nr_UE.h" +#include "PHY/defs_nr_common.h" #include "PHY/types.h" - #include "PHY/NR_REFSIG/ss_pbch_nr.h" /************** CODE GENERATION ***********************************/ diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.h b/openair1/PHY/NR_REFSIG/ptrs_nr.h index 75f526dad5..dad093f712 100644 --- a/openair1/PHY/NR_REFSIG/ptrs_nr.h +++ b/openair1/PHY/NR_REFSIG/ptrs_nr.h @@ -33,20 +33,6 @@ #ifndef PTRS_NR_H #define PTRS_NR_H -#include "PHY/defs_nr_UE.h" - -/************** CODE GENERATION ***********************************/ - -/************** DEFINE ********************************************/ - - -/************* STRUCTURES *****************************************/ - - -/************** VARIABLES *****************************************/ - -/************** FUNCTION ******************************************/ - void set_ptrs_symb_idx(uint16_t *ptrs_symbols, uint8_t duration_in_symbols, uint8_t start_symbol, @@ -86,8 +72,8 @@ int8_t nr_ptrs_process_slot(uint16_t dmrsSymbPos, uint16_t ptrsSymbPos, int16_t *estPerSymb, uint16_t startSymbIdx, - uint16_t noSymb - ); + uint16_t noSymb); + /* general function to estimate common phase error based upon PTRS */ void nr_ptrs_cpe_estimation(uint8_t K_ptrs, uint8_t ptrsReOffset, diff --git a/openair1/PHY/NR_REFSIG/sss_nr.h b/openair1/PHY/NR_REFSIG/sss_nr.h index 8175869205..5bb55ebe2f 100644 --- a/openair1/PHY/NR_REFSIG/sss_nr.h +++ b/openair1/PHY/NR_REFSIG/sss_nr.h @@ -33,9 +33,7 @@ #define SSS_NR_H #include "limits.h" -#include "PHY/defs_nr_UE.h" #include "PHY/types.h" - #include "pss_nr.h" /************** DEFINE ********************************************/ diff --git a/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h b/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h index 9ed101f247..845a2cd830 100644 --- a/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h +++ b/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h @@ -33,11 +33,8 @@ #ifndef LOWPAPR_SEQUENCES_NR_H #define LOWPAPR_SEQUENCES_NR_H -#include "PHY/defs_nr_UE.h" #include "PHY/types.h" - #include "PHY/NR_REFSIG/ss_pbch_nr.h" - #include "PHY/defs_nr_common.h" #include "PHY/defs_gNB.h" diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index 9018aabfde..94531448a9 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -37,6 +37,7 @@ #include "PHY/NR_REFSIG/dmrs_nr.h" #include "PHY/NR_REFSIG/ptrs_nr.h" #include "common/utils/nr/nr_common.h" +#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h" #include "executables/softmodem-common.h" #include "SCHED_NR/sched_nr.h" diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index 4a67f2956e..3f7bd0d63e 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -122,7 +122,7 @@ void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue, typedef struct { UE_nr_rxtx_proc_t proc; PHY_VARS_NR_UE *ue; - c16_t *rxdata[NB_ANTENNAS_RX]; + c16_t **rxdata; uint32_t rxdata_size; c16_t rxdata_ant[]; } nr_meas_task_args_t; diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c index 8a59470cbf..6cb24dd426 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c @@ -81,32 +81,21 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, false); // signal measurements - for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++){ - + for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) { ue->measurements.rx_power_tot[gNB_id] = 0; - - for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++){ - - ue->measurements.rx_power[gNB_id][aarx] = 0; - - for (aatx = 0; aatx < frame_parms->nb_antenna_ports_gNB; aatx++){ + for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { + int rx_power = 0; + for (aatx = 0; aatx < frame_parms->nb_antenna_ports_gNB; aatx++) { const int z = signal_energy_nodc((c16_t*)&dl_ch_estimates[gNB_id][ch_offset], number_rbs * NR_NB_SC_PER_RB); rx_spatial_power[gNB_id][aatx][aarx] = z; - if (rx_spatial_power[gNB_id][aatx][aarx] < 0) rx_spatial_power[gNB_id][aatx][aarx] = 0; - rx_spatial_power_dB[gNB_id][aatx][aarx] = (unsigned short)dB_fixed(rx_spatial_power[gNB_id][aatx][aarx]); - ue->measurements.rx_power[gNB_id][aarx] += rx_spatial_power[gNB_id][aatx][aarx]; + rx_power += rx_spatial_power[gNB_id][aatx][aarx]; } - - ue->measurements.rx_power_dB[gNB_id][aarx] = (unsigned short) dB_fixed(ue->measurements.rx_power[gNB_id][aarx]); - ue->measurements.rx_power_tot[gNB_id] += ue->measurements.rx_power[gNB_id][aarx]; - + ue->measurements.rx_power_tot[gNB_id] += rx_power; } - ue->measurements.rx_power_tot_dB[gNB_id] = (unsigned short) dB_fixed(ue->measurements.rx_power_tot[gNB_id]); - } // filter to remove jitter @@ -533,9 +522,9 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, LOG_D(PHY, "In %s doing measurements for ssb_offset %d l_sss %d \n", __FUNCTION__, ssb_offset, l_sss); - for (aarx = 0; aarxframe_parms.nb_antennas_rx; aarx++) { + for (aarx = 0; aarx < ue->frame_parms.nb_antennas_rx; aarx++) { - ue->measurements.n0_power[aarx] = 0; + uint32_t n0_power = 0; rxF_sss = (int16_t *)&rxdataF[aarx][l_sss*ue->frame_parms.ofdm_symbol_size]; //-ve spectrum from SSS @@ -547,8 +536,7 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, LOG_I(PHY, "In %s -rxF_sss %d %d\n", __FUNCTION__, rxF_sss[re*2], rxF_sss[re*2 + 1]); #endif - ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[re*2]*rxF_sss[re*2]) + ((int32_t)rxF_sss[re*2 + 1]*rxF_sss[re*2 + 1])); - + n0_power += (((int32_t)rxF_sss[re * 2] * rxF_sss[re * 2]) + ((int32_t)rxF_sss[re * 2 + 1] * rxF_sss[re * 2 + 1])); } //+ve spectrum from SSS @@ -560,14 +548,11 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, LOG_I(PHY, "In %s +rxF_sss %d %d\n", __FUNCTION__, rxF_sss[re*2], rxF_sss[re*2 + 1]); #endif - ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[re*2]*rxF_sss[re*2]) + ((int32_t)rxF_sss[re*2 + 1]*rxF_sss[re*2 + 1])); - + n0_power += (((int32_t)rxF_sss[re * 2]*rxF_sss[re * 2]) + ((int32_t)rxF_sss[re * 2 + 1] * rxF_sss[re * 2 + 1])); } - ue->measurements.n0_power[aarx] /= 2*k_length; - ue->measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(ue->measurements.n0_power[aarx]); - ue->measurements.n0_power_tot += ue->measurements.n0_power[aarx]; - + n0_power /= 2 * k_length; + ue->measurements.n0_power_tot += n0_power; } ue->measurements.n0_power_tot_dB = (unsigned short) dB_fixed(ue->measurements.n0_power_tot); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 73bcbfab46..2ce37b6dcd 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -141,7 +141,6 @@ static void nr_dlsch_channel_level_median(uint32_t rx_size_symbol, @param rho Cross-correlation between two spatial channels on each RX antenna @param frame_parms Pointer to frame descriptor @param symbol Symbol on which to operate - @param first_symbol_flag set to 1 on first DLSCH symbol @param mod_order Modulation order of allocation @param nb_rb Number of RBs in allocation @param output_shift Rescaling for compensated output (should be energy-normalizing) @@ -161,7 +160,6 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol, uint8_t n_layers, unsigned char symbol, int length, - bool first_symbol_flag, unsigned char mod_order, unsigned short nb_rb, unsigned char output_shift, @@ -555,7 +553,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, nl, symbol, nb_re_pdsch, - first_symbol_flag, dlsch_config->qamModOrder, nb_rb_pdsch, *log2_maxh, @@ -769,7 +766,6 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol, uint8_t n_layers, unsigned char symbol, int length, - bool first_symbol_flag, unsigned char mod_order, unsigned short nb_rb, unsigned char output_shift, @@ -868,24 +864,11 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol, for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { for (int l = 0; l < n_layers; l++) { for (int atx = 0; atx < n_layers; atx++) { - rho128 = (simde__m128i *)&rho[aarx][l * n_layers + atx][symbol * nb_rb * 12]; - dl_ch128 = (simde__m128i *)dl_ch_estimates_ext[l * frame_parms->nb_antennas_rx + aarx]; - dl_ch128_2 = (simde__m128i *)dl_ch_estimates_ext[atx * frame_parms->nb_antennas_rx + aarx]; - - // multiply by conjugated channel - mult_cpx_conj_vector((c16_t *)dl_ch128, (c16_t *)dl_ch128_2, (c16_t *)rho128, 12 * nb_rb_0, output_shift); - - if (first_symbol_flag) { - // rho_nm = H_arx_n.conj(H_arx_m) - // rho_rx_corr[arx][nm] = |H_arx_n|^2.|H_arx_m|^2 &rho[aarx][l*n_layers+atx][symbol*nb_rb*12] - measurements->rx_correlation[0][aarx][l * n_layers + atx] = - signal_energy(&rho[aarx][l * n_layers + atx][symbol * nb_rb * 12], length); - // avg_rho_re[aarx][l*n_layers+atx] = 16*avg_rho_re[aarx][l*n_layers+atx]/length; - // avg_rho_im[aarx][l*n_layers+atx] = 16*avg_rho_im[aarx][l*n_layers+atx]/length; - // printf("rho[rx]%d tx%d tx%d = Re: %d Im: %d\n",aarx, l,atx, avg_rho_re[aarx][l*n_layers+atx], - // avg_rho_im[aarx][l*n_layers+atx]); printf("rho_corr[rx]%d tx%d tx%d = %d ...\n",aarx, l,atx, - // measurements->rx_correlation[0][aarx][l*n_layers+atx]); - } + rho128 = (simde__m128i *)&rho[aarx][l * n_layers + atx][symbol * nb_rb * 12]; + dl_ch128 = (simde__m128i *)dl_ch_estimates_ext[l * frame_parms->nb_antennas_rx + aarx]; + dl_ch128_2 = (simde__m128i *)dl_ch_estimates_ext[atx * frame_parms->nb_antennas_rx + aarx]; + // multiply by conjugated channel + mult_cpx_conj_vector((c16_t *)dl_ch128, (c16_t *)dl_ch128_2, (c16_t *)rho128, 12 * nb_rb_0, output_shift); } } } diff --git a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c index da27ca8603..0c0173b64d 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c @@ -189,8 +189,8 @@ void insert_sss_nr(int16_t *sss_time, static int pss_ch_est_nr(const NR_DL_FRAME_PARMS *frame_parms, int nid2, - c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR], - c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR]) + c16_t pss_ext[frame_parms->nb_antennas_rx][LENGTH_PSS_NR], + c16_t sss_ext[frame_parms->nb_antennas_rx][LENGTH_SSS_NR]) { int16_t *pss = get_primary_synchro_nr2(nid2); @@ -250,15 +250,14 @@ static int pss_ch_est_nr(const NR_DL_FRAME_PARMS *frame_parms, * *********************************************************************/ -static int do_pss_sss_extract_nr( - const NR_DL_FRAME_PARMS *frame_parms, - c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR], - c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR], - uint8_t doPss, - uint8_t doSss, - uint8_t subframe, - int ssb_start_subcarrier, - c16_t rxdataF[][frame_parms->samples_per_slot_wCP]) // add flag to indicate extracting only PSS, only SSS, or both +static int do_pss_sss_extract_nr(const NR_DL_FRAME_PARMS *frame_parms, + c16_t pss_ext[frame_parms->nb_antennas_rx][LENGTH_PSS_NR], + c16_t sss_ext[frame_parms->nb_antennas_rx][LENGTH_SSS_NR], + uint8_t doPss, + uint8_t doSss, + uint8_t subframe, + int ssb_start_subcarrier, + c16_t rxdataF[][frame_parms->samples_per_slot_wCP]) // add flag to indicate extracting only PSS, only SSS, or both { AssertFatal(frame_parms->nb_antennas_rx > 0, "UB as sss_ext is not set to any value\n"); @@ -331,8 +330,8 @@ static int do_pss_sss_extract_nr( *********************************************************************/ static int pss_sss_extract_nr(const NR_DL_FRAME_PARMS *frame_parms, - c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR], - c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR], + c16_t pss_ext[frame_parms->nb_antennas_rx][LENGTH_PSS_NR], + c16_t sss_ext[frame_parms->nb_antennas_rx][LENGTH_SSS_NR], uint8_t subframe, int ssb_start_subcarrier, c16_t rxdataF[][frame_parms->samples_per_slot_wCP]) @@ -371,8 +370,8 @@ bool rx_sss_nr(const NR_DL_FRAME_PARMS *frame_parms, c16_t rxdataF[][frame_parms->samples_per_slot_wCP]) { uint8_t i; - c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR] = {0}; - c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR] = {0}; + c16_t pss_ext[frame_parms->nb_antennas_rx][LENGTH_PSS_NR]; + c16_t sss_ext[frame_parms->nb_antennas_rx][LENGTH_SSS_NR]; uint8_t Nid2 = GET_NID2(nid2); uint16_t Nid1; uint8_t phase; diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index c14751a050..daae2fec36 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -104,18 +104,11 @@ /// Context data structure for gNB subframe processing typedef struct { /// Component Carrier index - uint8_t CC_id; + uint8_t CC_id; /// Last RX timestamp openair0_timestamp_t timestamp_rx; } UE_nr_proc_t; -typedef enum { - NR_PBCH_EST=0, - NR_PDCCH_EST, - NR_PDSCH_EST, - NR_SSS_EST, -} NR_CHANNEL_EST_t; - #define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg #define NEIGHBOR_CELL_MAX_CONSECUTIVE_FAILURES 10 @@ -144,10 +137,6 @@ typedef struct { int ssb_rsrp_dBm[64]; float ssb_sinr_dB[64]; // common measurements - //! estimated noise power (linear) - unsigned int n0_power[NB_ANTENNAS_RX]; - //! estimated noise power (dB) - unsigned short n0_power_dB[NB_ANTENNAS_RX]; //! total estimated noise power (linear) unsigned int n0_power_tot; //! total estimated noise power (dB) @@ -165,59 +154,27 @@ typedef struct { //! estimated received spatial signal power (dB) fourDimArray_t *rx_spatial_power_dB; - /// estimated received signal power (sum over all TX antennas) - int rx_power[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX]; - /// estimated received signal power (sum over all TX antennas) - unsigned short rx_power_dB[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX]; - /// estimated received signal power (sum over all TX/RX antennas) - int rx_power_tot[NUMBER_OF_CONNECTED_gNB_MAX]; //NEW + int rx_power_tot[NUMBER_OF_CONNECTED_gNB_MAX]; //NEW /// estimated received signal power (sum over all TX/RX antennas) unsigned short rx_power_tot_dB[NUMBER_OF_CONNECTED_gNB_MAX]; //NEW //! estimated received signal power (sum of all TX/RX antennas, time average) - int rx_power_avg[NUMBER_OF_CONNECTED_gNB_MAX]; + int rx_power_avg[NUMBER_OF_CONNECTED_gNB_MAX]; //! estimated received signal power (sum of all TX/RX antennas, time average, in dB) unsigned short rx_power_avg_dB[NUMBER_OF_CONNECTED_gNB_MAX]; /// SINR (sum of all TX/RX antennas, in dB) - int wideband_cqi_tot[NUMBER_OF_CONNECTED_gNB_MAX]; + int wideband_cqi_tot[NUMBER_OF_CONNECTED_gNB_MAX]; /// SINR (sum of all TX/RX antennas, time average, in dB) - int wideband_cqi_avg[NUMBER_OF_CONNECTED_gNB_MAX]; + int wideband_cqi_avg[NUMBER_OF_CONNECTED_gNB_MAX]; //! estimated rssi (dBm) - short rx_rssi_dBm[NUMBER_OF_CONNECTED_gNB_MAX]; - //! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation) - int rx_correlation[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX][NR_MAX_NB_LAYERS*NR_MAX_NB_LAYERS];// - //! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation) - int rx_correlation_dB[NUMBER_OF_CONNECTED_gNB_MAX][2]; + short rx_rssi_dBm[NUMBER_OF_CONNECTED_gNB_MAX]; - /// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (3,4,5,6), up to 4 spatial streams) - int precoded_cqi_dB[NUMBER_OF_CONNECTED_gNB_MAX+1][4]; - /// Subband CQI per RX antenna (= SINR) - int subband_cqi[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX]; - /// Total Subband CQI (= SINR) - int subband_cqi_tot[NUMBER_OF_CONNECTED_gNB_MAX][NUMBER_OF_SUBBANDS_MAX]; - /// Subband CQI in dB (= SINR dB) - int subband_cqi_dB[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX]; - /// Total Subband CQI - int subband_cqi_tot_dB[NUMBER_OF_CONNECTED_gNB_MAX][NUMBER_OF_SUBBANDS_MAX]; - /// Wideband PMI for each RX antenna - int wideband_pmi_re[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX]; - /// Wideband PMI for each RX antenna - int wideband_pmi_im[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX]; - ///Subband PMI for each RX antenna - int subband_pmi_re[NUMBER_OF_CONNECTED_gNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX]; - ///Subband PMI for each RX antenna - int subband_pmi_im[NUMBER_OF_CONNECTED_gNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX]; - /// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas) - unsigned char selected_rx_antennas[NUMBER_OF_CONNECTED_gNB_MAX][NUMBER_OF_SUBBANDS_MAX]; - /// Wideband Rank indication - unsigned char rank[NUMBER_OF_CONNECTED_gNB_MAX]; /// Number of RX Antennas unsigned char nb_antennas_rx; - /// DLSCH error counter - // short dlsch_errors; + /// Info about neighboring cells to perform the measurements neighboring_cell_info_t neighboring_cell_info[NUMBER_OF_NEIGHBORING_CELLS_MAX]; bool meas_request_pending; @@ -263,17 +220,6 @@ typedef struct { #define MAX_NR_DCI_DECODED_SLOT 10 // This value is not specified -typedef enum { - _format_0_0_found = 0, - _format_0_1_found = 1, - _format_1_0_found = 2, - _format_1_1_found = 3, - _format_2_0_found = 4, - _format_2_1_found = 5, - _format_2_2_found = 6, - _format_2_3_found = 7 -} format_found_t; - #endif typedef struct { int nb_search_space; @@ -282,18 +228,6 @@ typedef struct { #define NR_PSBCH_DMRS_LENGTH 297 // in mod symbols #define NR_PSBCH_DMRS_LENGTH_DWORD 20 // ceil(2(QPSK)*NR_PBCH_DMRS_LENGTH/32) - -/* NR Sidelink PSBCH payload fields - TODO: This will be removed in the future and - filled in by the upper layers once developed. */ -typedef struct { - uint32_t coverageIndicator : 1; - uint32_t tddConfig : 12; - uint32_t DFN : 10; - uint32_t slotIndex : 7; - uint32_t reserved : 2; -} PSBCH_payload; - #define PBCH_A 24 typedef struct { @@ -426,15 +360,11 @@ typedef struct PHY_VARS_NR_UE_s { fapi_nr_config_request_t nrUE_config; nr_synch_request_t synch_request; - NR_UE_PRACH *prach_vars[NUMBER_OF_CONNECTED_gNB_MAX]; - NR_UE_PRS *prs_vars[NR_MAX_PRS_COMB_SIZE]; - uint8_t prs_active_gNBs; + NR_UE_PRACH *prach_vars[NUMBER_OF_CONNECTED_gNB_MAX]; + NR_UE_PRS *prs_vars[NR_MAX_PRS_COMB_SIZE]; + uint8_t prs_active_gNBs; NR_DL_UE_HARQ_t dl_harq_processes[2][NR_MAX_DLSCH_HARQ_PROCESSES]; NR_UL_UE_HARQ_t ul_harq_processes[NR_MAX_ULSCH_HARQ_PROCESSES]; - //Paging parameters - uint32_t IMSImod1024; - uint32_t PF; - uint32_t PO; // Scrambling IDs used in PUSCH DMRS c16_t X_u[64][839]; @@ -463,21 +393,6 @@ typedef struct PHY_VARS_NR_UE_s { int dlsch_received[NUMBER_OF_CONNECTED_gNB_MAX]; int dlsch_received_last[NUMBER_OF_CONNECTED_gNB_MAX]; int dlsch_fer[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_SI_received[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_SI_errors[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_ra_received[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_ra_errors[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_p_received[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_p_errors[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mch_received[NUMBER_OF_CONNECTED_gNB_MAX]; - int current_dlsch_cqi[NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mch_received_sf[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mcch_received[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mtch_received[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mcch_errors[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mtch_errors[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mcch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; - int dlsch_mtch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_gNB_MAX]; uint8_t init_sync_frame; /// temporary offset during cell search prior to MIB decoding int ssb_offset;