Merge remote-tracking branch 'origin/develop' into nr-dl-mimo-2layer
This commit is contained in:
@@ -60,7 +60,7 @@
|
||||
#include "dummy_functions.c"
|
||||
#include "executables/thread-common.h"
|
||||
#include "executables/split_headers.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
void feptx_ofdm(RU_t *ru, int frame, int subframe);
|
||||
void feptx_prec(RU_t *ru, int frame, int subframe);
|
||||
|
||||
@@ -85,6 +85,7 @@ double DS_TDL = .03;
|
||||
static int cmpdouble(const void *p1, const void *p2) {
|
||||
return *(double *)p1 > *(double *)p2;
|
||||
}
|
||||
RAN_CONTEXT_t RC;
|
||||
|
||||
int emulate_rf = 0;
|
||||
int split73=0;
|
||||
@@ -936,9 +937,10 @@ int main(int argc, char **argv) {
|
||||
|
||||
NB_RB = conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL);
|
||||
} else {
|
||||
if (rballocset==0) NB_RB = 8;
|
||||
if (rballocset==0) NB_RB = 2+TPC;
|
||||
else NB_RB = DLSCH_RB_ALLOC;
|
||||
|
||||
printf("Common PDSCH: NB_RB = %d\n",NB_RB);
|
||||
AssertFatal(NB_RB <= N_RB_DL,"illegal NB_RB %d\n",NB_RB);
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@
|
||||
#include "executables/thread-common.h"
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "executables/split_headers.h"
|
||||
#include "common/ran_context.h"
|
||||
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
||||
|
||||
double cpuf;
|
||||
#define inMicroS(a) (((double)(a))/(get_cpu_freq_GHz()*1000.0))
|
||||
@@ -87,7 +89,7 @@ static int cmpdouble(const void *p1, const void *p2) {
|
||||
return *(double *)p1 > *(double *)p2;
|
||||
}
|
||||
|
||||
|
||||
RAN_CONTEXT_t RC;
|
||||
int split73=0;
|
||||
void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_t *data, int dataLen, int r_offset) {
|
||||
AssertFatal(false, "Must not be called in this context\n");
|
||||
@@ -345,7 +347,6 @@ int main(int argc, char **argv) {
|
||||
int UE_id = 0;
|
||||
static int nb_rb=25,first_rb=0,mcs=0,round=0;
|
||||
//unsigned char l;
|
||||
static int awgn_flag = 0 ;
|
||||
SCM_t channel_model=Rice1;
|
||||
unsigned char *input_buffer=0,harq_pid;
|
||||
unsigned short input_buffer_length;
|
||||
@@ -407,7 +408,7 @@ int main(int argc, char **argv) {
|
||||
printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
|
||||
AssertFatal(load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) != NULL, "Cannot load configuration module, exiting\n");
|
||||
logInit();
|
||||
set_glog(OAILOG_WARNING);
|
||||
set_glog(OAILOG_INFO);
|
||||
T_stdout = 1;
|
||||
// enable these lines if you need debug info
|
||||
// however itti will catch all signals, so ctrl-c won't work anymore
|
||||
@@ -1089,14 +1090,12 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
}
|
||||
|
||||
if (awgn_flag == 0) {
|
||||
if (UE2eNB->max_Doppler == 0) {
|
||||
multipath_channel(UE2eNB,s_re,s_im,r_re,r_im,
|
||||
eNB->frame_parms.samples_per_tti,hold_channel,0);
|
||||
} else {
|
||||
multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im,
|
||||
2*eNB->frame_parms.samples_per_tti,hold_channel);
|
||||
}
|
||||
if (UE2eNB->max_Doppler == 0) {
|
||||
multipath_channel(UE2eNB,s_re,s_im,r_re,r_im,
|
||||
eNB->frame_parms.samples_per_tti,hold_channel,0);
|
||||
} else {
|
||||
multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im,
|
||||
2*eNB->frame_parms.samples_per_tti,hold_channel);
|
||||
}
|
||||
|
||||
if(abstx) {
|
||||
@@ -1139,6 +1138,15 @@ int main(int argc, char **argv) {
|
||||
sqrt(sigma2/2)*gaussdouble(0.0,1.0));
|
||||
}
|
||||
}
|
||||
if (n_frames==1)
|
||||
for (i=0; i<eNB->frame_parms.samples_per_tti; i++) {
|
||||
for (aa=0; aa<eNB->frame_parms.nb_antennas_rx; aa++) {
|
||||
((short *) &ru->common.rxdata[aa][eNB->frame_parms.samples_per_tti*(subframe+1)%10])[2*i] =
|
||||
(short) (sqrt(sigma2/2)*gaussdouble(0.0,1.0));
|
||||
((short *) &ru->common.rxdata[aa][eNB->frame_parms.samples_per_tti*(subframe+1)%10])[2*i+1] =
|
||||
(short) (sqrt(sigma2/2)*gaussdouble(0.0,1.0));
|
||||
}
|
||||
}
|
||||
|
||||
if (n_frames<=10) {
|
||||
printf("rx_level Null symbol %f\n",10*log10((double)signal_energy((int *)
|
||||
@@ -1164,9 +1172,10 @@ int main(int argc, char **argv) {
|
||||
start_meas(&eNB->phy_proc_rx);
|
||||
ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? ru_fep_full_2thread : fep_full;
|
||||
ru->feprx(ru,subframe);
|
||||
if (n_frames==1) lte_eNB_I0_measurements(eNB,(subframe+1)%10,0,1);
|
||||
|
||||
phy_procedures_eNB_uespec_RX(eNB,proc_rxtx);
|
||||
stop_meas(&eNB->phy_proc_rx);
|
||||
|
||||
if (cqi_flag > 0) {
|
||||
cqi_error = 0;
|
||||
|
||||
@@ -1206,6 +1215,9 @@ int main(int argc, char **argv) {
|
||||
eNB->ulsch[0]->harq_processes[harq_pid]->uci_format,0,eNB->frame_parms.N_RB_DL);
|
||||
|
||||
dump_ulsch(eNB,eNB->proc.frame_rx,subframe,0,round);
|
||||
dump_I0_stats(stdout,eNB);
|
||||
dump_ulsch_stats(stdout,eNB,0);
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -1266,14 +1278,16 @@ int main(int argc, char **argv) {
|
||||
if (t_rx > 2000 )
|
||||
n_rx_dropped++;
|
||||
|
||||
appendVarArray(table_tx, &t_tx);
|
||||
appendVarArray(table_tx_ifft, &t_tx_ifft);
|
||||
appendVarArray(table_tx_mod, &t_tx_mod );
|
||||
appendVarArray(table_tx_enc, &t_tx_enc );
|
||||
appendVarArray(table_rx, &t_rx );
|
||||
appendVarArray(table_rx_fft, &t_rx_fft );
|
||||
appendVarArray(table_rx_demod, &t_rx_demod );
|
||||
appendVarArray(table_rx_dec, &t_rx_dec );
|
||||
if (trials < 1000) {
|
||||
appendVarArray(table_tx, &t_tx);
|
||||
appendVarArray(table_tx_ifft, &t_tx_ifft);
|
||||
appendVarArray(table_tx_mod, &t_tx_mod );
|
||||
appendVarArray(table_tx_enc, &t_tx_enc );
|
||||
appendVarArray(table_rx, &t_rx );
|
||||
appendVarArray(table_rx_fft, &t_rx_fft );
|
||||
appendVarArray(table_rx_demod, &t_rx_demod );
|
||||
appendVarArray(table_rx_dec, &t_rx_dec );
|
||||
}
|
||||
} //trials
|
||||
|
||||
// sort table
|
||||
@@ -1292,6 +1306,7 @@ int main(int argc, char **argv) {
|
||||
LOG_UDUMPMSG(SIM,dataArray(table_rx),table_rx->size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
|
||||
}
|
||||
|
||||
dump_ulsch_stats(stdout,eNB,0);
|
||||
printf("\n**********rb: %d ***mcs : %d *********SNR = %f dB (%f): TX %u dB (gain %f dB), N0W %f dB, I0 %u dB, delta_IF %d [ (%d,%d) dB / (%u,%u) dB ]**************************\n",
|
||||
nb_rb,mcs,SNR,SNR2,
|
||||
tx_lev_dB,
|
||||
|
||||
@@ -357,7 +357,7 @@ int main(int argc, char **argv)
|
||||
frame_parms->Ncp = extended_prefix_flag ? EXTENDED : NORMAL;
|
||||
crcTableInit();
|
||||
nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_DL, mu, Nid_cell,SSB_positions);
|
||||
phy_init_nr_gNB(gNB, 0, 0);
|
||||
phy_init_nr_gNB(gNB, 0, 1); //lowmem
|
||||
//init_eNB_afterRU();
|
||||
frame_length_complex_samples = frame_parms->samples_per_subframe;
|
||||
//frame_length_complex_samples_no_prefix = frame_parms->samples_per_subframe_wCP;
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
#include <openair2/LAYER2/MAC/mac_vars.h>
|
||||
#include <openair2/RRC/LTE/rrc_vars.h>
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
|
||||
rlc_info_t Rlc_info_um,Rlc_info_am_config;
|
||||
|
||||
@@ -761,7 +763,7 @@ int main(int argc, char **argv)
|
||||
// reset preprocessor to the one of DLSIM after it has been set during
|
||||
// rrc_mac_config_req_gNB
|
||||
gNB_mac->pre_processor_dl = nr_dlsim_preprocessor;
|
||||
phy_init_nr_gNB(gNB,0,0);
|
||||
phy_init_nr_gNB(gNB,0,1);
|
||||
N_RB_DL = gNB->frame_parms.N_RB_DL;
|
||||
NR_UE_info_t *UE_info = &RC.nrmac[0]->UE_info;
|
||||
UE_info->num_UEs=1;
|
||||
@@ -1410,32 +1412,81 @@ void update_dmrs_config(NR_CellGroupConfig_t *scg, int8_t* dmrs_arg)
|
||||
}
|
||||
else if (dmrs_arg[0] == 1) {
|
||||
mapping_type = typeB;
|
||||
} else {
|
||||
AssertFatal(1==0,"Incorrect Mappingtype, valid options 0-typeA, 1-typeB\n");
|
||||
}
|
||||
/* Additional DMRS positions 0 ,1 and 2 */
|
||||
if(dmrs_arg[1] >= 0 && dmrs_arg[1] <3 ) {
|
||||
|
||||
/* Additional DMRS positions 0 ,1 ,2 and 3 */
|
||||
if(dmrs_arg[1] >= 0 && dmrs_arg[1] <4 ) {
|
||||
add_pos = dmrs_arg[1];
|
||||
} else {
|
||||
AssertFatal(1==0,"Incorrect Additional Position, valid options 0-pos1, 1-pos1, 2-pos2, 3-pos3\n");
|
||||
}
|
||||
|
||||
/* DMRS Conf Type 1 or 2 */
|
||||
if(dmrs_arg[2] == 1) {
|
||||
dmrs_config_type = NFAPI_NR_DMRS_TYPE1;
|
||||
} else if(dmrs_arg[2] == 2) {
|
||||
dmrs_config_type = NFAPI_NR_DMRS_TYPE2;
|
||||
} else {
|
||||
AssertFatal(1==0,"Incorrect DMRS Configuration Type, valid options 1-type1, 2-type2\n");
|
||||
}
|
||||
|
||||
NR_BWP_Downlink_t *bwp = scg->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[0];
|
||||
NR_DMRS_DownlinkConfig_t *dmrs_config;
|
||||
if(mapping_type == typeA)
|
||||
dmrs_config = (NR_DMRS_DownlinkConfig_t *)bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
else
|
||||
dmrs_config = (NR_DMRS_DownlinkConfig_t *)bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
*dmrs_config->dmrs_AdditionalPosition = add_pos;
|
||||
if (dmrs_config_type == NFAPI_NR_DMRS_TYPE2)
|
||||
dmrs_config->dmrs_Type = calloc(1,sizeof(*dmrs_config->dmrs_Type));
|
||||
else
|
||||
dmrs_config->dmrs_Type = NULL;
|
||||
for (int i=0;i<bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count;i++) {
|
||||
bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->mappingType = mapping_type;
|
||||
|
||||
AssertFatal((bwp->bwp_Dedicated->pdsch_Config != NULL && bwp->bwp_Dedicated->pdsch_Config->choice.setup != NULL), "Base RRC reconfig structures are not allocated.\n");
|
||||
|
||||
if(mapping_type == typeA) {
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA));
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->present= NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
|
||||
if (dmrs_config_type == NFAPI_NR_DMRS_TYPE2)
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type));
|
||||
else
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type = NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->maxLength=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->scramblingID0=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->scramblingID1=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL;
|
||||
printf("DLSIM: Allocated Mapping TypeA in RRC reconfig message\n");
|
||||
}
|
||||
|
||||
printf("[DLSIM] DMRS Config is modified with Mapping Type %d, Additional Positions %d Config. Type %d \n", dmrs_arg[0], add_pos, dmrs_arg[2] );
|
||||
if(mapping_type == typeB) {
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB));
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->present= NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup));
|
||||
if (dmrs_config_type == NFAPI_NR_DMRS_TYPE2)
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type));
|
||||
else
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type = NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->maxLength=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->scramblingID0=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->scramblingID1=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->phaseTrackingRS=NULL;
|
||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_AdditionalPosition = NULL;
|
||||
printf("DLSIM: Allocated Mapping TypeB in RRC reconfig message\n");
|
||||
}
|
||||
|
||||
struct NR_SetupRelease_DMRS_DownlinkConfig *dmrs_MappingtypeA = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA;
|
||||
struct NR_SetupRelease_DMRS_DownlinkConfig *dmrs_MappingtypeB = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB;
|
||||
|
||||
|
||||
NR_DMRS_DownlinkConfig_t *dmrs_config = (mapping_type == typeA) ? dmrs_MappingtypeA->choice.setup : dmrs_MappingtypeB->choice.setup;
|
||||
|
||||
if (add_pos != 2) { // pos0,pos1,pos3
|
||||
if (dmrs_config->dmrs_AdditionalPosition == NULL) {
|
||||
dmrs_config->dmrs_AdditionalPosition = calloc(1,sizeof(*dmrs_MappingtypeA->choice.setup->dmrs_AdditionalPosition));
|
||||
}
|
||||
*dmrs_config->dmrs_AdditionalPosition = add_pos;
|
||||
} else { // if NULL, Value pos2
|
||||
free(dmrs_config->dmrs_AdditionalPosition);
|
||||
dmrs_config->dmrs_AdditionalPosition = NULL;
|
||||
}
|
||||
|
||||
for (int i=0;i<bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count;i++) {
|
||||
bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->mappingType = mapping_type;
|
||||
}
|
||||
|
||||
printf("[DLSIM] DMRS Config is modified with Mapping Type %d, Additional Positions %d Config. Type %d \n", mapping_type, add_pos, dmrs_config_type);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
|
||||
int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req) { return(0); }
|
||||
int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req) { return(0); }
|
||||
int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) { return(0); }
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
||||
#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
|
||||
#include "openair1/PHY/MODULATION/nr_modulation.h"
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
//#define DEBUG_NR_PBCHSIM
|
||||
|
||||
PHY_VARS_gNB *gNB;
|
||||
@@ -415,7 +415,7 @@ int main(int argc, char **argv)
|
||||
frame_parms->ssb_type = nr_ssb_type_C;
|
||||
|
||||
nr_phy_config_request_sim_pbchsim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions);
|
||||
phy_init_nr_gNB(gNB,0,0);
|
||||
phy_init_nr_gNB(gNB,0,1);
|
||||
nr_set_ssb_first_subcarrier(&gNB->gNB_config,frame_parms);
|
||||
|
||||
uint8_t n_hf = 0;
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
#include "OCG_vars.h"
|
||||
#include <openair2/LAYER2/MAC/mac_vars.h>
|
||||
#include <openair2/RRC/LTE/rrc_vars.h>
|
||||
#include <executables/softmodem-common.h>
|
||||
#include <openair2/RRC/NR_UE/rrc_defs.h>
|
||||
//#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
|
||||
|
||||
|
||||
#define NR_PRACH_DEBUG 1
|
||||
#define PRACH_WRITE_OUTPUT_DEBUG 1
|
||||
|
||||
@@ -522,7 +522,8 @@ int main(int argc, char **argv){
|
||||
ru->if_south = LOCAL_RF;
|
||||
ru->nb_tx = n_tx;
|
||||
ru->nb_rx = n_rx;
|
||||
|
||||
ru->num_gNB = 1;
|
||||
ru->gNB_list[0] = gNB;
|
||||
gNB->gNB_config.carrier_config.num_tx_ant.value = 1;
|
||||
gNB->gNB_config.carrier_config.num_rx_ant.value = 1;
|
||||
if (mu==1)
|
||||
@@ -623,7 +624,7 @@ int main(int argc, char **argv){
|
||||
|
||||
memcpy((void*)&ru->config,(void*)&RC.gNB[0]->gNB_config,sizeof(ru->config));
|
||||
RC.nb_nr_L1_inst=1;
|
||||
phy_init_nr_gNB(gNB,0,0);
|
||||
phy_init_nr_gNB(gNB,0,1); //lowmem
|
||||
nr_phy_init_RU(ru);
|
||||
gNB->common_vars.rxdata = ru->common.rxdata;
|
||||
set_tdd_config_nr(&gNB->gNB_config, mu, 7, 6, 2, 4);
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
||||
#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
|
||||
|
||||
|
||||
PHY_VARS_gNB *gNB;
|
||||
PHY_VARS_NR_UE *UE;
|
||||
RAN_CONTEXT_t RC;
|
||||
|
||||
@@ -394,7 +394,7 @@ int main(int argc, char **argv)
|
||||
|
||||
nr_phy_config_request_sim(gNB, N_RB_UL, N_RB_UL, mu, Nid_cell, SSB_positions);
|
||||
|
||||
phy_init_nr_gNB(gNB, 0, 0);
|
||||
phy_init_nr_gNB(gNB, 0, 1); //lowmem
|
||||
|
||||
//configure UE
|
||||
UE = malloc(sizeof(PHY_VARS_NR_UE));
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
#include <openair2/LAYER2/MAC/mac_vars.h>
|
||||
#include <openair2/RRC/LTE/rrc_vars.h>
|
||||
|
||||
#include <executables/softmodem-common.h>
|
||||
#include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
|
||||
|
||||
//#define DEBUG_ULSIM
|
||||
|
||||
LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
|
||||
@@ -222,6 +222,7 @@ double s_re1[122880],s_im1[122880],r_re1[122880],r_im1[122880];
|
||||
double r_re2[122880],r_im2[122880];
|
||||
double r_re3[122880],r_im3[122880];
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char c;
|
||||
@@ -690,7 +691,7 @@ int main(int argc, char **argv)
|
||||
rrc_mac_config_req_gNB(0,0,n_tx,n_rx,pusch_tgt_snrx10,pucch_tgt_snrx10,scc,0,0,NULL);
|
||||
// UE dedicated configuration
|
||||
rrc_mac_config_req_gNB(0,0,1,1,pusch_tgt_snrx10,pucch_tgt_snrx10,NULL,1,secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
|
||||
phy_init_nr_gNB(gNB,0,0);
|
||||
phy_init_nr_gNB(gNB,0,1);
|
||||
N_RB_DL = gNB->frame_parms.N_RB_DL;
|
||||
|
||||
|
||||
@@ -815,7 +816,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
uint8_t length_dmrs = pusch_len1;
|
||||
uint16_t l_prime_mask = get_l_prime(nb_symb_sch, mapping_type, add_pos, length_dmrs);
|
||||
uint16_t l_prime_mask = get_l_prime(nb_symb_sch, mapping_type, add_pos, length_dmrs, start_symbol, NR_MIB__dmrs_TypeA_Position_pos2);
|
||||
uint16_t number_dmrs_symbols = get_dmrs_symbols_in_slot(l_prime_mask, nb_symb_sch);
|
||||
uint8_t nb_re_dmrs = (dmrs_config_type == pusch_dmrs_type1) ? 6 : 4;
|
||||
|
||||
@@ -1001,7 +1002,7 @@ int main(int argc, char **argv)
|
||||
pusch_pdu->transform_precoding = transform_precoding;
|
||||
pusch_pdu->data_scrambling_id = *scc->physCellId;
|
||||
pusch_pdu->nrOfLayers = 1;
|
||||
pusch_pdu->ul_dmrs_symb_pos = l_prime_mask << start_symbol;
|
||||
pusch_pdu->ul_dmrs_symb_pos = l_prime_mask;
|
||||
pusch_pdu->dmrs_config_type = dmrs_config_type;
|
||||
pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId;
|
||||
pusch_pdu->scid = 0;
|
||||
@@ -1064,7 +1065,7 @@ int main(int argc, char **argv)
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.rb_start = start_rb;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.nr_of_symbols = nb_symb_sch;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.start_symbol_index = start_symbol;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask << start_symbol;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.dmrs_config_type = dmrs_config_type;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.mcs_index = Imcs;
|
||||
ul_config.ul_config_list[0].pusch_config_pdu.mcs_table = mcs_table;
|
||||
|
||||
@@ -39,13 +39,13 @@ uint8_t multipath_channel_nosigconv(channel_desc_t *desc)
|
||||
//#define CHANNEL_SSE
|
||||
#ifdef CHANNEL_SSE
|
||||
void multipath_channel(channel_desc_t *desc,
|
||||
double tx_sig_re[2][30720*2],
|
||||
double tx_sig_im[2][30720*2],
|
||||
double rx_sig_re[2][30720*2],
|
||||
double rx_sig_im[2][30720*2],
|
||||
double tx_sig_re[NB_ANTENNAS_TX][30720*2],
|
||||
double tx_sig_im[NB_ANTENANS_TX][30720*2],
|
||||
double rx_sig_re[NB_ANTENNAS_RX][30720*2],
|
||||
double rx_sig_im[NB_ANTENNAS_RX][30720*2],
|
||||
uint32_t length,
|
||||
uint8_t keep_channel,
|
||||
int log_channel)
|
||||
int log_channel)
|
||||
{
|
||||
|
||||
int i,ii,j,l;
|
||||
@@ -146,13 +146,13 @@ void multipath_channel(channel_desc_t *desc,
|
||||
|
||||
#else
|
||||
void multipath_channel(channel_desc_t *desc,
|
||||
double *tx_sig_re[2],
|
||||
double *tx_sig_im[2],
|
||||
double *rx_sig_re[2],
|
||||
double *rx_sig_im[2],
|
||||
double *tx_sig_re[NB_ANTENNAS_TX],
|
||||
double *tx_sig_im[NB_ANTENNAS_TX],
|
||||
double *rx_sig_re[NB_ANTENNAS_RX],
|
||||
double *rx_sig_im[NB_ANTENNAS_RX],
|
||||
uint32_t length,
|
||||
uint8_t keep_channel,
|
||||
int log_channel)
|
||||
int log_channel)
|
||||
{
|
||||
|
||||
int i,ii,j,l;
|
||||
@@ -198,21 +198,22 @@ void multipath_channel(channel_desc_t *desc,
|
||||
|
||||
rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y);
|
||||
rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y);
|
||||
if (i==0 && log_channel == 1) {
|
||||
printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)),
|
||||
desc->ch[ii+(j*desc->nb_rx)][l].x,
|
||||
desc->ch[ii+(j*desc->nb_rx)][l].y);
|
||||
}
|
||||
|
||||
if (i==0 && log_channel == 1) {
|
||||
printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)),
|
||||
desc->ch[ii+(j*desc->nb_rx)][l].x,
|
||||
desc->ch[ii+(j*desc->nb_rx)][l].y);
|
||||
}
|
||||
} //l
|
||||
} // j
|
||||
|
||||
rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss;
|
||||
rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss;
|
||||
|
||||
/* if ((ii==0)&&((i%32)==0)) {
|
||||
printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]);
|
||||
}*/
|
||||
|
||||
#ifdef DEBUG_CHANNEL
|
||||
if ((i%32)==0) {
|
||||
printf("rx aa %d: %p %p %f,%f => %e,%e\n",ii,rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]);
|
||||
}
|
||||
#endif
|
||||
//rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]);
|
||||
//rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]);
|
||||
|
||||
|
||||
@@ -2034,7 +2034,6 @@ static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt)
|
||||
prnt("ERROR: %s, unknown channel parameter\n",param);
|
||||
return CMDSTATUS_FOUND;
|
||||
}
|
||||
|
||||
display_channelmodel(defined_channels[cd_id],debug,prnt);
|
||||
free(param);
|
||||
free(value);
|
||||
|
||||
@@ -339,10 +339,10 @@ void set_channeldesc_name(channel_desc_t *cdesc,char *modelname);
|
||||
int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
|
||||
|
||||
/**\fn void multipath_channel(channel_desc_t *desc,
|
||||
double tx_sig_re[2],
|
||||
double tx_sig_im[2],
|
||||
double rx_sig_re[2],
|
||||
double rx_sig_im[2],
|
||||
double tx_sig_re[NB_ANTENNAS_TX],
|
||||
double tx_sig_im[NB_ANTENANS_TX],
|
||||
double rx_sig_re[NB_ANTENNAS_RX],
|
||||
double rx_sig_im[NB_ANTENNAS_RX],
|
||||
uint32_t length,
|
||||
uint8_t keep_channel,
|
||||
int log_channel)
|
||||
@@ -359,10 +359,10 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
|
||||
*/
|
||||
|
||||
void multipath_channel(channel_desc_t *desc,
|
||||
double *tx_sig_re[2],
|
||||
double *tx_sig_im[2],
|
||||
double *rx_sig_re[2],
|
||||
double *rx_sig_im[2],
|
||||
double *tx_sig_re[NB_ANTENNAS_TX],
|
||||
double *tx_sig_im[NB_ANTENNAS_TX],
|
||||
double *rx_sig_re[NB_ANTENNAS_RX],
|
||||
double *rx_sig_im[NB_ANTENNAS_RX],
|
||||
uint32_t length,
|
||||
uint8_t keep_channel,
|
||||
int log_channel);
|
||||
@@ -510,7 +510,6 @@ double N_RB2channel_bandwidth(uint16_t N_RB);
|
||||
void InitSinLUT( void );
|
||||
void phase_noise(double ts, int16_t * InRe, int16_t * InIm);
|
||||
|
||||
#include "targets/RT/USER/rfsim.h"
|
||||
|
||||
void do_DL_sig(sim_t *sim,
|
||||
uint16_t subframe,
|
||||
|
||||
Reference in New Issue
Block a user