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:
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('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
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,
for(c16_t*end=ul_ch+12;ul_ch<end;ul_ch++)
*ul_ch=ch;
#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)
//int8_t interf1 = -21, interf2 = -21;
FILE*input_fd=NULL;
SCM_tchannel_model=AWGN;//Rayleigh1_anticorr;
corr_level_tcorr_level=CORR_LEVEL_LOW;
uint16_tN_RB_DL=106,N_RB_UL=106,mu=1;
NB_UE_INST=1;
...
...
@@ -304,7 +305,6 @@ int main(int argc, char **argv)
intImcs=9;
uint8_tprecod_nbr_layers=1;
intgNB_id=0;
intap;
inttx_offset;
int32_ttxlev_sum=0,atxlev[4];
intstart_rb=0;
...
...
@@ -398,61 +398,52 @@ int main(int argc, char **argv)
break;
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':
channel_model=TDL_C;
DS_TDL=.030;// 30 ns
break;
case'I':
channel_model=TDL_C;
DS_TDL=.3;// 300ns
break;
case'J':
channel_model=TDL_D;
DS_TDL=.03;
break;
switch((char)*optarg){
case'A':
channel_model=TDL_A;
DS_TDL=0.030;// 30 ns
printf("Channel model: TDLA30\n");
break;
case'B':
channel_model=TDL_B;
DS_TDL=0.100;// 100ns
printf("Channel model: TDLB100\n");
break;
case'C':
channel_model=TDL_C;
DS_TDL=0.300;// 300 ns
printf("Channel model: TDLC300\n");
break;
default:
printf("Unsupported channel model!\n");
exit(-1);
}
default:
printf("Unsupported channel model!\n");
exit(-1);
if(optarg[1]==','){
switch(optarg[2]){
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;
case'i':
for(i=0;i<atoi(optarg);i++){
chest_type[i]=atoi(argv[optind++]);
}
i=0;
do{
chest_type[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
case'k':
...
...
@@ -514,7 +505,7 @@ int main(int argc, char **argv)
break;
case't':
eff_tp_check=(float)atoi(optarg);
eff_tp_check=atof(optarg);
break;
/*
...
...
@@ -597,16 +588,20 @@ int main(int argc, char **argv)
case'T':
enable_ptrs=1;
for(i=0;i<atoi(optarg);i++){
ptrs_arg[i]=atoi(argv[optind++]);
}
i=0;
do{
ptrs_arg[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
case'U':
modify_dmrs=1;
for(i=0;i<atoi(optarg);i++){
dmrs_arg[i]=atoi(argv[optind++]);
}
i=0;
do{
dmrs_arg[i>>1]=atoi(&optarg[i]);
i+=2;
}while(optarg[i-1]==',');
break;
case'Q':
...
...
@@ -626,11 +621,12 @@ int main(int argc, char **argv)
//printf("-d Use TDD\n");
printf("-d Introduce delay in terms of number of samples\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("-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("-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("-n Number of trials to simulate\n");
printf("-o ldpc offload flag\n");
...
...
@@ -654,10 +650,9 @@ int main(int argc, char **argv)
printf("-O oversampling factor (1,2,4,8,16)\n");
printf("-R Maximum number of available resorce blocks (N_RB_DL)\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("-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("-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("-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 0,2,0,1 \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("-W Num of layer for PUSCH\n");
...
...
@@ -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));
///Delays of the taps in mus. length(delays)=nb_taps. Has to be between 0 and Td.
double*delays;
///length of impulse response. should be set to 11+2*bw*t_max
...
...
@@ -75,8 +84,10 @@ typedef struct {
doublechannel_bandwidth;
///System sampling rate in Msps.
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;
///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.
doubleaoa;
///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.