configurable max nb of rounds in ulsim
This commit is contained in:
@@ -1057,20 +1057,21 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
uint32_t errors_scrambling[4][100];
|
|
||||||
int n_errors[4][100];
|
|
||||||
int round_trials[4][100];
|
|
||||||
double blerStats[4][100];
|
|
||||||
double berStats[4][100];
|
|
||||||
double snrStats[100];
|
|
||||||
memset(errors_scrambling, 0, sizeof(uint32_t)*4*100);
|
|
||||||
memset(n_errors, 0, sizeof(int)*4*100);
|
|
||||||
memset(round_trials, 0, sizeof(int)*4*100);
|
|
||||||
memset(blerStats, 0, sizeof(double)*4*100);
|
|
||||||
memset(berStats, 0, sizeof(double)*4*100);
|
|
||||||
memset(snrStats, 0, sizeof(double) * 100);
|
|
||||||
|
|
||||||
for (SNR = snr0; SNR <= snr1; SNR += snr_step) {
|
AssertFatal(max_rounds > 0, "Invalind value for max number of rounds %d\n",max_rounds);
|
||||||
|
uint32_t errors_scrambling[max_rounds][100];
|
||||||
|
int n_errors[max_rounds][100];
|
||||||
|
int round_trials[max_rounds][100];
|
||||||
|
double blerStats[max_rounds][100];
|
||||||
|
double berStats[max_rounds][100];
|
||||||
|
double snrStats[100];
|
||||||
|
memset(errors_scrambling, 0, sizeof(uint32_t)*max_rounds*100);
|
||||||
|
memset(n_errors, 0, sizeof(int)*max_rounds*100);
|
||||||
|
memset(round_trials, 0, sizeof(int)*max_rounds*100);
|
||||||
|
memset(blerStats, 0, sizeof(double)*max_rounds*100);
|
||||||
|
memset(berStats, 0, sizeof(double)*max_rounds*100);
|
||||||
|
memset(snrStats, 0, sizeof(double)*100);
|
||||||
|
for (SNR = snr0; SNR < snr1; SNR += snr_step) {
|
||||||
varArray_t *table_rx=initVarArray(1000,sizeof(double));
|
varArray_t *table_rx=initVarArray(1000,sizeof(double));
|
||||||
int error_flag = 0;
|
int error_flag = 0;
|
||||||
n_false_positive = 0;
|
n_false_positive = 0;
|
||||||
@@ -1103,7 +1104,7 @@ int main(int argc, char **argv)
|
|||||||
round_trials[round][snrRun]++;
|
round_trials[round][snrRun]++;
|
||||||
ulsch_ue->harq_processes[harq_pid]->round = round;
|
ulsch_ue->harq_processes[harq_pid]->round = round;
|
||||||
gNB->ulsch[0]->harq_processes[harq_pid]->round = round;
|
gNB->ulsch[0]->harq_processes[harq_pid]->round = round;
|
||||||
rv_index = nr_rv_round_map[round];
|
rv_index = nr_rv_round_map[round%4];
|
||||||
|
|
||||||
UE_proc.nr_slot_tx = slot;
|
UE_proc.nr_slot_tx = slot;
|
||||||
UE_proc.frame_tx = frame;
|
UE_proc.frame_tx = frame;
|
||||||
@@ -1539,28 +1540,28 @@ int main(int argc, char **argv)
|
|||||||
effRate[snrRun] /= (double)n_trials;
|
effRate[snrRun] /= (double)n_trials;
|
||||||
|
|
||||||
printf("*****************************************\n");
|
printf("*****************************************\n");
|
||||||
printf("SNR %f: n_errors (%d/%d,%d/%d,%d/%d,%d/%d) (negative CRC), false_positive %d/%d, errors_scrambling (%u/%u,%u/%u,%u/%u,%u/%u\n", SNR, n_errors[0][snrRun], round_trials[0][snrRun],n_errors[1][snrRun], round_trials[1][snrRun],n_errors[2][snrRun], round_trials[2][snrRun],n_errors[3][snrRun], round_trials[3][snrRun], n_false_positive, n_trials, errors_scrambling[0][snrRun],available_bits*n_trials,errors_scrambling[1][snrRun],available_bits*n_trials,errors_scrambling[2][snrRun],available_bits*n_trials,errors_scrambling[3][snrRun],available_bits*n_trials);
|
printf("SNR %f: n_errors (%d/%d", SNR, n_errors[0][snrRun], round_trials[0][snrRun]);
|
||||||
|
for (int r = 1; r < max_rounds; r++)
|
||||||
|
printf(",%d/%d", n_errors[r][snrRun], round_trials[r][snrRun]);
|
||||||
|
printf(") (negative CRC), false_positive %d/%d, errors_scrambling (%u/%u",
|
||||||
|
n_false_positive, n_trials, errors_scrambling[0][snrRun], available_bits*n_trials);
|
||||||
|
for (int r = 1; r < max_rounds; r++)
|
||||||
|
printf(",%u/%u", errors_scrambling[r][snrRun], available_bits*n_trials);
|
||||||
|
printf(")\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
blerStats[0][snrRun] = (double)n_errors[0][snrRun]/round_trials[0][snrRun];
|
|
||||||
blerStats[1][snrRun] = (double)n_errors[1][snrRun]/round_trials[1][snrRun];
|
|
||||||
blerStats[2][snrRun] = (double)n_errors[2][snrRun]/round_trials[2][snrRun];
|
|
||||||
blerStats[3][snrRun] = (double)n_errors[3][snrRun]/round_trials[3][snrRun];
|
|
||||||
|
|
||||||
berStats[0][snrRun] = (double)errors_scrambling[0][snrRun]/available_bits/round_trials[0][snrRun];
|
for (int r = 0; r < max_rounds; r++) {
|
||||||
berStats[1][snrRun] = (double)errors_scrambling[1][snrRun]/available_bits/round_trials[1][snrRun];
|
blerStats[r][snrRun] = (double)n_errors[r][snrRun]/round_trials[r][snrRun];
|
||||||
berStats[2][snrRun] = (double)errors_scrambling[2][snrRun]/available_bits/round_trials[2][snrRun];
|
berStats[r][snrRun] = (double)errors_scrambling[r][snrRun]/available_bits/round_trials[r][snrRun];
|
||||||
berStats[3][snrRun] = (double)errors_scrambling[3][snrRun]/available_bits/round_trials[3][snrRun];
|
}
|
||||||
effTP[snrRun] = effRate[snrRun]/(double)TBS*(double)100;
|
effTP[snrRun] = effRate[snrRun]/(double)TBS*(double)100;
|
||||||
printf("SNR %f: Channel BLER (%e,%e,%e,%e), Channel BER (%e,%e,%e,%e) Avg round %.2f, Eff Rate %.4f bits/slot, Eff Throughput %.2f, TBS %u bits/slot\n",
|
printf("SNR %f: Channel BLER (%e", SNR, blerStats[0][snrRun]);
|
||||||
SNR,
|
for (int r = 1; r < max_rounds; r++)
|
||||||
blerStats[0][snrRun],
|
printf(",%e", blerStats[r][snrRun]);
|
||||||
blerStats[1][snrRun],
|
printf(" Channel BER (%e", berStats[0][snrRun]);
|
||||||
blerStats[2][snrRun],
|
for (int r = 1; r < max_rounds; r++)
|
||||||
blerStats[3][snrRun],
|
printf(",%e", berStats[r][snrRun]);
|
||||||
berStats[0][snrRun],
|
printf(") Avg round %.2f, Eff Rate %.4f bits/slot, Eff Throughput %.2f, TBS %u bits/slot\n",
|
||||||
berStats[1][snrRun],
|
|
||||||
berStats[2][snrRun],
|
|
||||||
berStats[3][snrRun],
|
|
||||||
roundStats[snrRun],effRate[snrRun],effTP[snrRun],TBS);
|
roundStats[snrRun],effRate[snrRun],effTP[snrRun],TBS);
|
||||||
|
|
||||||
FILE *fd=fopen("nr_ulsim.log","w");
|
FILE *fd=fopen("nr_ulsim.log","w");
|
||||||
@@ -1632,14 +1633,13 @@ int main(int argc, char **argv)
|
|||||||
char opStatsFile[50];
|
char opStatsFile[50];
|
||||||
sprintf(opStatsFile, "ulsimStats_z%d.m", n_rx);
|
sprintf(opStatsFile, "ulsimStats_z%d.m", n_rx);
|
||||||
LOG_M(opStatsFile,"SNR",snrStats,snrRun,1,7);
|
LOG_M(opStatsFile,"SNR",snrStats,snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"BLER_round0",blerStats[0],snrRun,1,7);
|
for (uint8_t r = 0; r < max_rounds; r++) {
|
||||||
LOG_MM(opStatsFile,"BLER_round1",blerStats[1],snrRun,1,7);
|
char bler[15], ber[15];
|
||||||
LOG_MM(opStatsFile,"BLER_round2",blerStats[2],snrRun,1,7);
|
sprintf(bler, "BLER_round%d", r);
|
||||||
LOG_MM(opStatsFile,"BLER_round3",blerStats[3],snrRun,1,7);
|
sprintf(bler, "BER_round%d", r);
|
||||||
LOG_MM(opStatsFile,"BER_round0",berStats[0],snrRun,1,7);
|
LOG_MM(opStatsFile,bler,blerStats[r],snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"BER_round1",berStats[1],snrRun,1,7);
|
LOG_MM(opStatsFile,ber,berStats[r],snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"BER_round2",berStats[2],snrRun,1,7);
|
}
|
||||||
LOG_MM(opStatsFile,"BER_round3",berStats[3],snrRun,1,7);
|
|
||||||
LOG_MM(opStatsFile,"EffRate",effRate,snrRun,1,7);
|
LOG_MM(opStatsFile,"EffRate",effRate,snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"EffTP",effTP,snrRun,1,7);
|
LOG_MM(opStatsFile,"EffTP",effTP,snrRun,1,7);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user