Merge branch 'nr-polar-encoder-optimizations' of https://gitlab.eurecom.fr/oai/openairinterface5g into nr-polar-encoder-optimizations
This commit is contained in:
@@ -90,6 +90,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t dlsch,
|
|||||||
@param nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs */
|
@param nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs */
|
||||||
uint32_t nr_get_G(uint16_t nb_rb, uint16_t nb_symb_sch,uint8_t nb_re_dmrs,uint16_t length_dmrs,uint8_t Qm, uint8_t Nl);
|
uint32_t nr_get_G(uint16_t nb_rb, uint16_t nb_symb_sch,uint8_t nb_re_dmrs,uint16_t length_dmrs,uint8_t Qm, uint8_t Nl);
|
||||||
|
|
||||||
|
void free_gNB_dlsch(NR_gNB_DLSCH_t *dlsch);
|
||||||
|
|
||||||
|
void clean_gNB_dlsch(NR_gNB_DLSCH_t *dlsch);
|
||||||
|
|
||||||
int nr_dlsch_encoding(unsigned char *a,
|
int nr_dlsch_encoding(unsigned char *a,
|
||||||
uint8_t subframe,
|
uint8_t subframe,
|
||||||
NR_gNB_DLSCH_t *dlsch,
|
NR_gNB_DLSCH_t *dlsch,
|
||||||
|
|||||||
@@ -1131,7 +1131,7 @@ void nr_dci_decoding_procedure0(int s,
|
|||||||
//Table 10.1-2: Maximum number of PDCCH candidates per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
//Table 10.1-2: Maximum number of PDCCH candidates per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
||||||
uint8_t m_max_slot_pdcch_Table10_1_2 [4] = {44,36,22,20};
|
uint8_t m_max_slot_pdcch_Table10_1_2 [4] = {44,36,22,20};
|
||||||
//Table 10.1-3: Maximum number of non-overlapped CCEs per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
//Table 10.1-3: Maximum number of non-overlapped CCEs per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
||||||
uint8_t cce_max_slot_pdcch_Table10_1_3 [4] = {56,56,48,32};
|
//uint8_t cce_max_slot_pdcch_Table10_1_3 [4] = {56,56,48,32};
|
||||||
|
|
||||||
int coreset_nbr_cce_per_symbol=0;
|
int coreset_nbr_cce_per_symbol=0;
|
||||||
|
|
||||||
@@ -1264,9 +1264,10 @@ void nr_dci_decoding_procedure0(int s,
|
|||||||
for (m = 0; m < nb_candidates; m++) {
|
for (m = 0; m < nb_candidates; m++) {
|
||||||
int n_ci = 0;
|
int n_ci = 0;
|
||||||
if (nCCE[p] < L2) return;
|
if (nCCE[p] < L2) return;
|
||||||
|
|
||||||
|
#ifdef NR_PDCCH_DCI_DEBUG
|
||||||
int debug1 = nCCE[p] / L2;
|
int debug1 = nCCE[p] / L2;
|
||||||
int debug2 = L2*m_p_s_L_max;
|
int debug2 = L2*m_p_s_L_max;
|
||||||
#ifdef NR_PDCCH_DCI_DEBUG
|
|
||||||
printf("\t\t<-NR_PDCCH_DCI_DEBUG (nr_dci_decoding_procedure0)-> debug1(%d)=nCCE[p]/L2 | nCCE[%d](%d) | L2(%d)\n",debug1,p,nCCE[p],L2);
|
printf("\t\t<-NR_PDCCH_DCI_DEBUG (nr_dci_decoding_procedure0)-> debug1(%d)=nCCE[p]/L2 | nCCE[%d](%d) | L2(%d)\n",debug1,p,nCCE[p],L2);
|
||||||
printf("\t\t<-NR_PDCCH_DCI_DEBUG (nr_dci_decoding_procedure0)-> debug2(%d)=L2*m_p_s_L_max | L2(%d) | m_p_s_L_max(%d)\n",debug2,L2,m_p_s_L_max);
|
printf("\t\t<-NR_PDCCH_DCI_DEBUG (nr_dci_decoding_procedure0)-> debug2(%d)=L2*m_p_s_L_max | L2(%d) | m_p_s_L_max(%d)\n",debug2,L2,m_p_s_L_max);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -131,10 +131,10 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
unsigned short nb_rb_pdsch = 50;
|
unsigned short nb_rb_pdsch = 50;
|
||||||
int16_t *pllr_symbol_cw0;
|
int16_t *pllr_symbol_cw0;
|
||||||
int16_t *pllr_symbol_cw1;
|
int16_t *pllr_symbol_cw1;
|
||||||
int16_t *pllr_symbol_cw0_deint;
|
//int16_t *pllr_symbol_cw0_deint;
|
||||||
int16_t *pllr_symbol_cw1_deint;
|
//int16_t *pllr_symbol_cw1_deint;
|
||||||
uint32_t llr_offset_symbol;
|
uint32_t llr_offset_symbol;
|
||||||
uint16_t bundle_L = 2;
|
//uint16_t bundle_L = 2;
|
||||||
uint8_t l0 =2;
|
uint8_t l0 =2;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -2001,7 +2001,7 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
|
|||||||
|
|
||||||
|
|
||||||
unsigned short k,rb;
|
unsigned short k,rb;
|
||||||
unsigned char i,aarx,l; //,nsymb,sss_symb,pss_symb=0;
|
unsigned char i,aarx; //,nsymb,sss_symb,pss_symb=0,l;
|
||||||
int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext;
|
int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext;
|
||||||
|
|
||||||
|
|
||||||
@@ -2010,7 +2010,7 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
|
|||||||
|
|
||||||
//symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
//symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||||
pilots = (symbol==2) ? 1 : 0; //to updated from config
|
pilots = (symbol==2) ? 1 : 0; //to updated from config
|
||||||
l=symbol;
|
//l=symbol;
|
||||||
//nsymb = (frame_parms->Ncp==NORMAL) ? 14:12;
|
//nsymb = (frame_parms->Ncp==NORMAL) ? 14:12;
|
||||||
k = frame_parms->first_carrier_offset + 516; //0
|
k = frame_parms->first_carrier_offset + 516; //0
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ char prefix_string[2][9] = {"NORMAL","EXTENDED"};
|
|||||||
int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
|
int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
|
||||||
{
|
{
|
||||||
|
|
||||||
int32_t sync_pos, sync_pos2, sync_pos_slot; // k_ssb, N_ssb_crb,
|
int32_t sync_pos, sync_pos_slot; // k_ssb, N_ssb_crb, sync_pos2,
|
||||||
int32_t metric_tdd_ncp=0;
|
int32_t metric_tdd_ncp=0;
|
||||||
uint8_t phase_tdd_ncp;
|
uint8_t phase_tdd_ncp;
|
||||||
|
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
|
|||||||
uint8_t restricted_set = ue->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
|
uint8_t restricted_set = ue->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
|
||||||
//uint8_t n_ra_prboffset = ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
|
//uint8_t n_ra_prboffset = ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
|
||||||
uint8_t preamble_index = ue->prach_resources[eNB_id]->ra_PreambleIndex;
|
uint8_t preamble_index = ue->prach_resources[eNB_id]->ra_PreambleIndex;
|
||||||
uint8_t tdd_mapindex = ue->prach_resources[eNB_id]->ra_TDD_map_index;
|
//uint8_t tdd_mapindex = ue->prach_resources[eNB_id]->ra_TDD_map_index;
|
||||||
int16_t *prachF = ue->prach_vars[eNB_id]->prachF;
|
int16_t *prachF = ue->prach_vars[eNB_id]->prachF;
|
||||||
static int16_t prach_tmp[45600*2] __attribute__((aligned(32)));
|
static int16_t prach_tmp[45600*2] __attribute__((aligned(32)));
|
||||||
int16_t *prach = prach_tmp;
|
int16_t *prach = prach_tmp;
|
||||||
|
|||||||
@@ -181,9 +181,9 @@ void nr_generate_pucch0(PHY_VARS_NR_UE *ue,
|
|||||||
// alpha is cyclic shift
|
// alpha is cyclic shift
|
||||||
double alpha;
|
double alpha;
|
||||||
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
||||||
uint8_t lnormal;
|
//uint8_t lnormal;
|
||||||
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
||||||
uint8_t lprime;
|
//uint8_t lprime;
|
||||||
// mcs is provided by TC 38.213 subclauses 9.2.3, 9.2.4, 9.2.5 FIXME!
|
// mcs is provided by TC 38.213 subclauses 9.2.3, 9.2.4, 9.2.5 FIXME!
|
||||||
//uint8_t mcs;
|
//uint8_t mcs;
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@ void nr_generate_pucch0(PHY_VARS_NR_UE *ue,
|
|||||||
* x(l*12+n) = r_u_v_alpha_delta(n)
|
* x(l*12+n) = r_u_v_alpha_delta(n)
|
||||||
*/
|
*/
|
||||||
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
||||||
uint8_t u=0,v=0,delta=0;
|
uint8_t u=0,v=0;//,delta=0;
|
||||||
// if frequency hopping is disabled by the higher-layer parameter PUCCH-frequency-hopping
|
// if frequency hopping is disabled by the higher-layer parameter PUCCH-frequency-hopping
|
||||||
// n_hop = 0
|
// n_hop = 0
|
||||||
// if frequency hopping is enabled by the higher-layer parameter PUCCH-frequency-hopping
|
// if frequency hopping is enabled by the higher-layer parameter PUCCH-frequency-hopping
|
||||||
@@ -332,7 +332,7 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
|
|||||||
// alpha is cyclic shift
|
// alpha is cyclic shift
|
||||||
double alpha;
|
double alpha;
|
||||||
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
||||||
uint8_t lnormal = 0 ;
|
//uint8_t lnormal = 0 ;
|
||||||
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
||||||
uint8_t lprime = startingSymbolIndex;
|
uint8_t lprime = startingSymbolIndex;
|
||||||
// mcs = 0 except for PUCCH format 0
|
// mcs = 0 except for PUCCH format 0
|
||||||
@@ -350,7 +350,7 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
|
|||||||
* the complex-valued symbol d_0 shall be multiplied with a sequence r_u_v_alpha_delta(n): y(n) = d_0 * r_u_v_alpha_delta(n)
|
* the complex-valued symbol d_0 shall be multiplied with a sequence r_u_v_alpha_delta(n): y(n) = d_0 * r_u_v_alpha_delta(n)
|
||||||
*/
|
*/
|
||||||
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
||||||
uint8_t u=0,v=0,delta=0;
|
uint8_t u=0,v=0;//,delta=0;
|
||||||
// if frequency hopping is disabled, intraSlotFrequencyHopping is not provided
|
// if frequency hopping is disabled, intraSlotFrequencyHopping is not provided
|
||||||
// n_hop = 0
|
// n_hop = 0
|
||||||
// if frequency hopping is enabled, intraSlotFrequencyHopping is provided
|
// if frequency hopping is enabled, intraSlotFrequencyHopping is provided
|
||||||
@@ -1286,7 +1286,7 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
|
|||||||
{0, 0, 0,-1,-1,-1, 0, 0, 0, 1, 1, 1},
|
{0, 0, 0,-1,-1,-1, 0, 0, 0, 1, 1, 1},
|
||||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
{0, 0, 0, 1, 1, 1, 0, 0, 0,-1,-1,-1}};
|
{0, 0, 0, 1, 1, 1, 0, 0, 0,-1,-1,-1}};
|
||||||
uint8_t occ_Length = occ_length_format4; // higher layer parameter occ-Length
|
//uint8_t occ_Length = occ_length_format4; // higher layer parameter occ-Length
|
||||||
uint8_t occ_Index = occ_index_format4; // higher layer parameter occ-Index
|
uint8_t occ_Index = occ_index_format4; // higher layer parameter occ-Index
|
||||||
//occ_Index = 1; //only for testing purposes; to be removed FIXME!!!
|
//occ_Index = 1; //only for testing purposes; to be removed FIXME!!!
|
||||||
if (fmt == pucch_format3_nr){ // no block-wise spreading for format 3
|
if (fmt == pucch_format3_nr){ // no block-wise spreading for format 3
|
||||||
@@ -1377,7 +1377,7 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
|
|||||||
* Implementing TS 38.211 Subclauses 6.3.2.5.3 and 6.3.2.6.5 Mapping to physical resources
|
* Implementing TS 38.211 Subclauses 6.3.2.5.3 and 6.3.2.6.5 Mapping to physical resources
|
||||||
*/
|
*/
|
||||||
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
// the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1
|
||||||
uint8_t u=0,v=0,delta=0;
|
uint8_t u=0,v=0;//,delta=0;
|
||||||
// if frequency hopping is disabled, intraSlotFrequencyHopping is not provided
|
// if frequency hopping is disabled, intraSlotFrequencyHopping is not provided
|
||||||
// n_hop = 0
|
// n_hop = 0
|
||||||
// if frequency hopping is enabled, intraSlotFrequencyHopping is provided
|
// if frequency hopping is enabled, intraSlotFrequencyHopping is provided
|
||||||
@@ -1385,9 +1385,9 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
|
|||||||
// n_hop = 1 for second hop
|
// n_hop = 1 for second hop
|
||||||
uint8_t n_hop = 0;
|
uint8_t n_hop = 0;
|
||||||
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
||||||
uint8_t lnormal = 0 ;
|
//uint8_t lnormal = 0 ;
|
||||||
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
||||||
uint8_t lprime = startingSymbolIndex;
|
//uint8_t lprime = startingSymbolIndex;
|
||||||
// m0 is the cyclic shift index calculated depending on the Orthogonal sequence index n, according to table 6.4.1.3.3.1-1 from TS 38.211 subclause 6.4.1.3.3.1
|
// m0 is the cyclic shift index calculated depending on the Orthogonal sequence index n, according to table 6.4.1.3.3.1-1 from TS 38.211 subclause 6.4.1.3.3.1
|
||||||
uint8_t m0;
|
uint8_t m0;
|
||||||
uint8_t mcs=0;
|
uint8_t mcs=0;
|
||||||
@@ -1404,13 +1404,13 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
|
|||||||
uint8_t N_ZC = 12*nrofPRB;
|
uint8_t N_ZC = 12*nrofPRB;
|
||||||
int16_t *r_u_v_base_re = malloc(sizeof(int16_t)*12*nrofPRB);
|
int16_t *r_u_v_base_re = malloc(sizeof(int16_t)*12*nrofPRB);
|
||||||
int16_t *r_u_v_base_im = malloc(sizeof(int16_t)*12*nrofPRB);
|
int16_t *r_u_v_base_im = malloc(sizeof(int16_t)*12*nrofPRB);
|
||||||
int16_t *r_u_v_alpha_delta_re = malloc(sizeof(int16_t)*12*nrofPRB);
|
//int16_t *r_u_v_alpha_delta_re = malloc(sizeof(int16_t)*12*nrofPRB);
|
||||||
int16_t *r_u_v_alpha_delta_im = malloc(sizeof(int16_t)*12*nrofPRB);
|
//int16_t *r_u_v_alpha_delta_im = malloc(sizeof(int16_t)*12*nrofPRB);
|
||||||
|
|
||||||
// Next we proceed to mapping to physical resources according to TS 38.211, subclause 6.3.2.6.5 dor PUCCH formats 3 and 4 and subclause 6.4.1.3.3.2 for DM-RS
|
// Next we proceed to mapping to physical resources according to TS 38.211, subclause 6.3.2.6.5 dor PUCCH formats 3 and 4 and subclause 6.4.1.3.3.2 for DM-RS
|
||||||
int32_t *txptr;
|
int32_t *txptr;
|
||||||
uint32_t re_offset;
|
uint32_t re_offset;
|
||||||
uint32_t x1, x2, s=0;
|
//uint32_t x1, x2, s=0;
|
||||||
// intraSlotFrequencyHopping
|
// intraSlotFrequencyHopping
|
||||||
// uint8_t intraSlotFrequencyHopping = 0;
|
// uint8_t intraSlotFrequencyHopping = 0;
|
||||||
uint8_t table_6_4_1_3_3_2_1_dmrs_positions[11][14] ={
|
uint8_t table_6_4_1_3_3_2_1_dmrs_positions[11][14] ={
|
||||||
|
|||||||
@@ -32,15 +32,8 @@
|
|||||||
|
|
||||||
#include "sched_nr.h"
|
#include "sched_nr.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nr_subframe_t nr_slot_select(nfapi_nr_config_request_t *cfg,unsigned char slot)
|
nr_subframe_t nr_slot_select(nfapi_nr_config_request_t *cfg,unsigned char slot)
|
||||||
{
|
{
|
||||||
if (cfg->subframe_config.duplex_mode.value == FDD)
|
if (cfg->subframe_config.duplex_mode.value == FDD)
|
||||||
return(SF_DL);
|
return(SF_DL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ int main(int argc, char **argv) {
|
|||||||
uint8_t extended_prefix_flag=0;
|
uint8_t extended_prefix_flag=0;
|
||||||
int8_t interf1=-21,interf2=-21;
|
int8_t interf1=-21,interf2=-21;
|
||||||
FILE *input_fd=NULL,*pbch_file_fd=NULL;
|
FILE *input_fd=NULL,*pbch_file_fd=NULL;
|
||||||
char input_val_str[50],input_val_str2[50];
|
//char input_val_str[50],input_val_str2[50];
|
||||||
//uint16_t NB_RB=25;
|
//uint16_t NB_RB=25;
|
||||||
SCM_t channel_model=AWGN;//Rayleigh1_anticorr;
|
SCM_t channel_model=AWGN;//Rayleigh1_anticorr;
|
||||||
uint8_t N_RB_DL=106,mu=1;
|
uint8_t N_RB_DL=106,mu=1;
|
||||||
@@ -149,12 +149,12 @@ int main(int argc, char **argv) {
|
|||||||
//int frame_length_complex_samples_no_prefix;
|
//int frame_length_complex_samples_no_prefix;
|
||||||
NR_DL_FRAME_PARMS *frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms;
|
||||||
//nfapi_nr_config_request_t *gNB_config;
|
//nfapi_nr_config_request_t *gNB_config;
|
||||||
uint8_t Kmimo;
|
uint8_t Kmimo=0;
|
||||||
uint32_t Nsoft;
|
uint32_t Nsoft=0;
|
||||||
double sigma;
|
double sigma;
|
||||||
unsigned char qbits=8;
|
unsigned char qbits=8;
|
||||||
int ret;
|
int ret;
|
||||||
int run_initial_sync=0;
|
//int run_initial_sync=0;
|
||||||
int loglvl=OAILOG_WARNING;
|
int loglvl=OAILOG_WARNING;
|
||||||
float target_error_rate = 0.01;
|
float target_error_rate = 0.01;
|
||||||
|
|
||||||
@@ -308,17 +308,21 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'm':
|
case 'm':
|
||||||
Imcs = atoi(optarg);
|
Imcs = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'l':
|
case 'l':
|
||||||
nb_symb_sch = atoi(optarg);
|
nb_symb_sch = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'r':
|
case 'r':
|
||||||
nb_rb = atoi(optarg);
|
nb_rb = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
transmission_mode = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case 'h':
|
case 'h':
|
||||||
@@ -451,11 +455,8 @@ int main(int argc, char **argv) {
|
|||||||
unsigned char harq_pid = 0; //dlsch->harq_ids[subframe];
|
unsigned char harq_pid = 0; //dlsch->harq_ids[subframe];
|
||||||
NR_gNB_DLSCH_t *dlsch = gNB->dlsch[0][0];
|
NR_gNB_DLSCH_t *dlsch = gNB->dlsch[0][0];
|
||||||
nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &dlsch->harq_processes[harq_pid]->dlsch_pdu.dlsch_pdu_rel15;
|
nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &dlsch->harq_processes[harq_pid]->dlsch_pdu.dlsch_pdu_rel15;
|
||||||
time_stats_t *rm_stats;
|
//time_stats_t *rm_stats, *te_stats, *i_stats;
|
||||||
time_stats_t *te_stats;
|
uint8_t is_crnti=0, llr8_flag=0;
|
||||||
time_stats_t *i_stats;
|
|
||||||
uint8_t is_crnti;
|
|
||||||
uint8_t llr8_flag;
|
|
||||||
unsigned int TBS = 8424;
|
unsigned int TBS = 8424;
|
||||||
unsigned int available_bits;
|
unsigned int available_bits;
|
||||||
uint8_t nb_re_dmrs = 6;
|
uint8_t nb_re_dmrs = 6;
|
||||||
|
|||||||
@@ -85,39 +85,41 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
int i,l,aa;
|
int i,aa;//,l;
|
||||||
double sigma2, sigma2_dB=10,SNR,snr0=-2.0,snr1=2.0;
|
double sigma2, sigma2_dB=10,SNR,snr0=-2.0,snr1=2.0;
|
||||||
uint8_t snr1set=0;
|
uint8_t snr1set=0;
|
||||||
int **txdata;
|
int **txdata;
|
||||||
double **s_re,**s_im,**r_re,**r_im;
|
double **s_re,**s_im,**r_re,**r_im;
|
||||||
double iqim = 0.0;
|
//double iqim = 0.0;
|
||||||
unsigned char pbch_pdu[6];
|
//unsigned char pbch_pdu[6];
|
||||||
// int sync_pos, sync_pos_slot;
|
// int sync_pos, sync_pos_slot;
|
||||||
// FILE *rx_frame_file;
|
// FILE *rx_frame_file;
|
||||||
FILE *output_fd = NULL;
|
FILE *output_fd = NULL;
|
||||||
uint8_t write_output_file=0;
|
uint8_t write_output_file=0;
|
||||||
//int result;
|
//int result;
|
||||||
int freq_offset;
|
//int freq_offset;
|
||||||
// int subframe_offset;
|
// int subframe_offset;
|
||||||
// char fname[40], vname[40];
|
// char fname[40], vname[40];
|
||||||
int trial,n_trials=1,n_errors,n_errors_payload;
|
int trial,n_trials=1,n_errors=0,n_errors_payload=0;
|
||||||
uint8_t transmission_mode = 1,n_tx=1,n_rx=1;
|
uint8_t transmission_mode = 1,n_tx=1,n_rx=1;
|
||||||
uint16_t Nid_cell=0;
|
uint16_t Nid_cell=0;
|
||||||
|
|
||||||
channel_desc_t *gNB2UE;
|
channel_desc_t *gNB2UE;
|
||||||
uint32_t nsymb,tx_lev,tx_lev1 = 0,tx_lev2 = 0;
|
|
||||||
uint8_t extended_prefix_flag=0;
|
uint8_t extended_prefix_flag=0;
|
||||||
int8_t interf1=-21,interf2=-21;
|
int8_t interf1=-21,interf2=-21;
|
||||||
|
|
||||||
FILE *input_fd=NULL,*pbch_file_fd=NULL;
|
FILE *input_fd=NULL,*pbch_file_fd=NULL;
|
||||||
char input_val_str[50],input_val_str2[50];
|
|
||||||
|
|
||||||
uint8_t frame_mod4,num_pdcch_symbols = 0;
|
//uint32_t nsymb,tx_lev,tx_lev1 = 0,tx_lev2 = 0;
|
||||||
|
//char input_val_str[50],input_val_str2[50];
|
||||||
|
//uint8_t frame_mod4,num_pdcch_symbols = 0;
|
||||||
|
//double pbch_sinr;
|
||||||
|
//int pbch_tx_ant;
|
||||||
|
|
||||||
SCM_t channel_model=AWGN;//Rayleigh1_anticorr;
|
SCM_t channel_model=AWGN;//Rayleigh1_anticorr;
|
||||||
|
|
||||||
double pbch_sinr;
|
|
||||||
int pbch_tx_ant;
|
|
||||||
int N_RB_DL=273,mu=1;
|
int N_RB_DL=273,mu=1;
|
||||||
|
|
||||||
unsigned char frame_type = 0;
|
unsigned char frame_type = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user