mySSH.command('for pod in $(oc get pods | tail -n +2 | awk \'{print $1}\'); do oc describe pod $pod >> cmake_targets/log/physim_pods_summary.txt; done','\$',10)
ifisRunning==False:
ifisRunning==False:
logging.error('\u001B[1m Some PODS Running FAILED \u001B[0m')
logging.error('\u001B[1m Some PODS Running FAILED \u001B[0m')
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim 2>&1 | tee -a cmake_targets/log/physim_pods_summary.txt','\$',6)
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim 2>&1 | tee -a cmake_targets/log/physim_pods_summary.txt','\$',6)
mySSH.command('for pod in $(oc get pods | tail -n +2 | awk \'{print $1}\'); do oc describe pod $pod >> cmake_targets/log/physim_pods_summary.txt; done','\$',10)
mySSH.command('for pod in $(oc get pods | tail -n +2 | awk \'{print $1}\'); do oc describe pod $pod >> cmake_targets/log/physim_pods_summary.txt; done','\$',10)
}else{// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 4 DMRS REs and use a common value for the whole PRB
}else{// this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 4 DMRS REs and use a common value for the whole PRB
LOG_D(PHY,"PUSCH estimation DMRS type 2, no Freq-domain interpolation");
LOG_D(PHY,"PUSCH estimation DMRS type 2, no Freq-domain interpolation");
...
@@ -514,7 +505,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -514,7 +505,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
for(c16_t*end=ul_ch+12;ul_ch<end;ul_ch++)
for(c16_t*end=ul_ch+12;ul_ch<end;ul_ch++)
*ul_ch=ch;
*ul_ch=ch;
#else
#else
ul_ch[3]=c16maddShift(ch,(c16_t){1365,1365},15);// 1365 = 1/12*16384 (full range is +/- 32768)
ul_ch[3]=c16maddShift(ch,(c16_t){1365,1365},(c16_t){0,0},15);// 1365 = 1/12*16384 (full range is +/- 32768)
@@ -291,6 +291,7 @@ int main(int argc, char **argv)
...
@@ -291,6 +291,7 @@ int main(int argc, char **argv)
//int8_t interf1 = -21, interf2 = -21;
//int8_t interf1 = -21, interf2 = -21;
FILE*input_fd=NULL;
FILE*input_fd=NULL;
SCM_tchannel_model=AWGN;//Rayleigh1_anticorr;
SCM_tchannel_model=AWGN;//Rayleigh1_anticorr;
corr_level_tcorr_level=CORR_LEVEL_LOW;
uint16_tN_RB_DL=106,N_RB_UL=106,mu=1;
uint16_tN_RB_DL=106,N_RB_UL=106,mu=1;
NB_UE_INST=1;
NB_UE_INST=1;
...
@@ -304,7 +305,6 @@ int main(int argc, char **argv)
...
@@ -304,7 +305,6 @@ int main(int argc, char **argv)
intImcs=9;
intImcs=9;
uint8_tprecod_nbr_layers=1;
uint8_tprecod_nbr_layers=1;
intgNB_id=0;
intgNB_id=0;
intap;
inttx_offset;
inttx_offset;
int32_ttxlev_sum=0,atxlev[4];
int32_ttxlev_sum=0,atxlev[4];
intstart_rb=0;
intstart_rb=0;
...
@@ -398,61 +398,52 @@ int main(int argc, char **argv)
...
@@ -398,61 +398,52 @@ int main(int argc, char **argv)
break;
break;
case'g':
case'g':
switch((char)*optarg){
case'A':
channel_model=SCM_A;
break;
case'B':
channel_model=SCM_B;
break;
case'C':
channel_model=SCM_C;
break;
case'D':
channel_model=SCM_D;
break;
case'E':
channel_model=EPA;
break;
case'F':
channel_model=EVA;
break;
case'G':
channel_model=ETU;
break;
case'H':
switch((char)*optarg){
channel_model=TDL_C;
case'A':
DS_TDL=.030;// 30 ns
channel_model=TDL_A;
break;
DS_TDL=0.030;// 30 ns
printf("Channel model: TDLA30\n");
case'I':
break;
channel_model=TDL_C;
case'B':
DS_TDL=.3;// 300ns
channel_model=TDL_B;
break;
DS_TDL=0.100;// 100ns
printf("Channel model: TDLB100\n");
case'J':
break;
channel_model=TDL_D;
case'C':
DS_TDL=.03;
channel_model=TDL_C;
break;
DS_TDL=0.300;// 300 ns
printf("Channel model: TDLC300\n");
break;
default:
printf("Unsupported channel model!\n");
exit(-1);
}
default:
if(optarg[1]==','){
printf("Unsupported channel model!\n");
switch(optarg[2]){
exit(-1);
case'l':
corr_level=CORR_LEVEL_LOW;
break;
case'm':
corr_level=CORR_LEVEL_MEDIUM;
break;
case'h':
corr_level=CORR_LEVEL_HIGH;
break;
default:
printf("Invalid correlation level!\n");
}
}
}
break;
break;
case'i':
case'i':
for(i=0;i<atoi(optarg);i++){
i=0;
chest_type[i]=atoi(argv[optind++]);
do{
}
chest_type[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
break;
case'k':
case'k':
...
@@ -514,7 +505,7 @@ int main(int argc, char **argv)
...
@@ -514,7 +505,7 @@ int main(int argc, char **argv)
break;
break;
case't':
case't':
eff_tp_check=(float)atoi(optarg);
eff_tp_check=atof(optarg);
break;
break;
/*
/*
...
@@ -597,16 +588,20 @@ int main(int argc, char **argv)
...
@@ -597,16 +588,20 @@ int main(int argc, char **argv)
case'T':
case'T':
enable_ptrs=1;
enable_ptrs=1;
for(i=0;i<atoi(optarg);i++){
i=0;
ptrs_arg[i]=atoi(argv[optind++]);
do{
}
ptrs_arg[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
break;
case'U':
case'U':
modify_dmrs=1;
modify_dmrs=1;
for(i=0;i<atoi(optarg);i++){
i=0;
dmrs_arg[i]=atoi(argv[optind++]);
do{
}
dmrs_arg[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
break;
case'Q':
case'Q':
...
@@ -626,11 +621,12 @@ int main(int argc, char **argv)
...
@@ -626,11 +621,12 @@ int main(int argc, char **argv)
//printf("-d Use TDD\n");
//printf("-d Use TDD\n");
printf("-d Introduce delay in terms of number of samples\n");
printf("-d Introduce delay in terms of number of samples\n");
printf("-f Number of frames to simulate\n");
printf("-f Number of frames to simulate\n");
printf("-g [A,B,C,D,E,F,G] Use 3GPP SCM (A,B,C,D) or 36-101 (E-EPA,F-EVA,G-ETU) models (ignores delay spread and Ricean factor)\n");
printf("-g Channel model configuration. Arguments list: Number of arguments = 2, {Channel model: [A] TDLA30, [B] TDLB100, [C] TDLC300}, {Correlation: [l] Low, [m] Medium, [h] High}, e.g. -g A,l\n");
printf("-h This message\n");
printf("-h This message\n");
printf("-i Change channel estimation technique. Arguments list: Number of arguments=2, Frequency domain {0:Linear interpolation, 1:PRB based averaging}, Time domain {0:Estimates of last DMRS symbol, 1:Average of DMRS symbols}. e.g. -i 2 1 0\n");
printf("-i Change channel estimation technique. Arguments list: Number of arguments=2, Frequency domain {0:Linear interpolation, 1:PRB based averaging}, Time domain {0:Estimates of last DMRS symbol, 1:Average of DMRS symbols}. e.g. -i 1,0\n");
//printf("-j Relative strength of second intefering eNB (in dB) - cell_id mod 3 = 2\n");
//printf("-j Relative strength of second intefering eNB (in dB) - cell_id mod 3 = 2\n");
printf("-s Starting SNR, runs from SNR0 to SNR0 + 10 dB if ending SNR isn't given\n");
printf("-s Starting SNR, runs from SNR0 to SNR0 + 10 dB if ending SNR isn't given\n");
printf("-S Ending SNR, runs from SNR0 to SNR1\n");
printf("-m MCS value\n");
printf("-m MCS value\n");
printf("-n Number of trials to simulate\n");
printf("-n Number of trials to simulate\n");
printf("-o ldpc offload flag\n");
printf("-o ldpc offload flag\n");
...
@@ -654,10 +650,9 @@ int main(int argc, char **argv)
...
@@ -654,10 +650,9 @@ int main(int argc, char **argv)
printf("-O oversampling factor (1,2,4,8,16)\n");
printf("-O oversampling factor (1,2,4,8,16)\n");
printf("-R Maximum number of available resorce blocks (N_RB_DL)\n");
printf("-R Maximum number of available resorce blocks (N_RB_DL)\n");
printf("-t Acceptable effective throughput (in percentage)\n");
printf("-t Acceptable effective throughput (in percentage)\n");
printf("-S Ending SNR, runs from SNR0 to SNR1\n");
printf("-P Print ULSCH performances\n");
printf("-P Print ULSCH performances\n");
printf("-T Enable PTRS, arguments list: Number of arguments=2 L_PTRS{0,1,2} K_PTRS{2,4}, e.g. -T 2 0 2 \n");
printf("-T Enable PTRS, arguments list: Number of arguments=2 L_PTRS{0,1,2} K_PTRS{2,4}, e.g. -T 0,2 \n");
printf("-U Change DMRS Config, arguments list: Number of arguments=4, DMRS Mapping Type{0=A,1=B}, DMRS AddPos{0:3}, DMRS Config Type{1,2}, Number of CDM groups without data{1,2,3} e.g. -U 4 0 2 0 1 \n");
printf("-U Change DMRS Config, arguments list: Number of arguments=4, DMRS Mapping Type{0=A,1=B}, DMRS AddPos{0:3}, DMRS Config Type{1,2}, Number of CDM groups without data{1,2,3} e.g. -U 0,2,0,1 \n");
printf("-Q If -F used, read parameters from file\n");
printf("-Q If -F used, read parameters from file\n");
printf("-Z If -Z is used, SC-FDMA or transform precoding is enabled in Uplink \n");
printf("-Z If -Z is used, SC-FDMA or transform precoding is enabled in Uplink \n");
printf("-W Num of layer for PUSCH\n");
printf("-W Num of layer for PUSCH\n");
...
@@ -690,12 +685,16 @@ int main(int argc, char **argv)
...
@@ -690,12 +685,16 @@ int main(int argc, char **argv)
AssertFatal((channeldesc_p!=NULL),"Could not allocate channel %s type %s \n",*(channel_list.paramarray[i][pindex_NAME].strptr),*(channel_list.paramarray[i][pindex_TYPE].strptr));
AssertFatal((channeldesc_p!=NULL),"Could not allocate channel %s type %s \n",*(channel_list.paramarray[i][pindex_NAME].strptr),*(channel_list.paramarray[i][pindex_TYPE].strptr));
///Delays of the taps in mus. length(delays)=nb_taps. Has to be between 0 and Td.
///Delays of the taps in mus. length(delays)=nb_taps. Has to be between 0 and Td.
double*delays;
double*delays;
///length of impulse response. should be set to 11+2*bw*t_max
///length of impulse response. should be set to 11+2*bw*t_max
...
@@ -75,8 +84,10 @@ typedef struct {
...
@@ -75,8 +84,10 @@ typedef struct {
doublechannel_bandwidth;
doublechannel_bandwidth;
///System sampling rate in Msps.
///System sampling rate in Msps.
doublesampling_rate;
doublesampling_rate;
///Ricean factor of first tap wrt other taps (0..1, where 0 means AWGN and 1 means Rayleigh channel).
///Ricean factor, sqrt(1/(K+1)), of first tap wrt other taps (0..1, where 0 means AWGN and 1 means Rayleigh channel).
doublericean_factor;
doublericean_factor;
///Correlation level of correlation channel matrix
corr_level_tcorr_level;
///Angle of arrival of wavefront (in radians). For Ricean channel only. This assumes that both RX and TX have linear antenna arrays with lambda/2 antenna spacing. Furhter it is assumed that the arrays are parallel to each other and that they are far enough apart so that we can safely assume plane wave propagation.
///Angle of arrival of wavefront (in radians). For Ricean channel only. This assumes that both RX and TX have linear antenna arrays with lambda/2 antenna spacing. Furhter it is assumed that the arrays are parallel to each other and that they are far enough apart so that we can safely assume plane wave propagation.
doubleaoa;
doubleaoa;
///If set to 1, aoa is randomized according to a uniform random distribution
///If set to 1, aoa is randomized according to a uniform random distribution
// to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed.
// to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed.