writing L1/L2 stats to files rather than screen

This commit is contained in:
Raymond Knopp
2021-01-12 13:51:04 +01:00
parent 672ae1e3a2
commit 50c70bc316
9 changed files with 89 additions and 43 deletions
+11 -6
View File
@@ -65,21 +65,24 @@ int16_t cfo_pucch_ep[24*6] = {24278,-22005,29621,-14010,32412,-4808,32412,4807,2
void dump_uci_stats(PHY_VARS_eNB *eNB,int frame) {
void dump_uci_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame) {
for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++)
int strpos=0;
char output[16384];
for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++){
if (eNB->uci_stats[i].rnti>0) {
eNB_UCI_STATS_t *uci_stats = &eNB->uci_stats[i];
LOG_I(PHY,"UCI RNTI %x: pucch1_trials %d, pucch1_thres %d dB, current pucch1_stat %d dB,positive SR count %d\n",
strpos+=sprintf(output+strpos,"UCI RNTI %x: pucch1_trials %d, pucch1_thres %d dB, current pucch1_stat %d dB,positive SR count %d\n",
uci_stats->rnti,uci_stats->pucch1_trials,uci_stats->pucch1_thres,dB_fixed(uci_stats->current_pucch1_stat),uci_stats->pucch1_positive_SR);
LOG_I(PHY,"UCI RNTI %x: pucch1_low (%d,%d)dB pucch1_high (%d,%d)dB\n",
strpos+=sprintf(output+strpos,"UCI RNTI %x: pucch1_low (%d,%d)dB pucch1_high (%d,%d)dB\n",
uci_stats->rnti,
dB_fixed(uci_stats->pucch1_low_stat[0]),
dB_fixed(uci_stats->pucch1_low_stat[1]),
dB_fixed(uci_stats->pucch1_high_stat[0]),
dB_fixed(uci_stats->pucch1_high_stat[1]));
LOG_I(PHY,"UCI RNTI %x: pucch1a_trials %d, pucch1a_stat (%d,%d), pucch1b_trials %d, pucch1b_stat (%d,%d) pucch1ab_DTX %d\n",
strpos+=sprintf(output+strpos,"UCI RNTI %x: pucch1a_trials %d, pucch1a_stat (%d,%d), pucch1b_trials %d, pucch1b_stat (%d,%d) pucch1ab_DTX %d\n",
uci_stats->rnti,
uci_stats->pucch1a_trials,
uci_stats->current_pucch1a_stat_re,
@@ -89,7 +92,9 @@ void dump_uci_stats(PHY_VARS_eNB *eNB,int frame) {
uci_stats->current_pucch1b_stat_im,
uci_stats->pucch1ab_DTX);
}
}
if (fd) fprintf(fd,"%s",output);
else printf("%s",output);
}
/* PUCCH format3 >> */
/* SubCarrier Demap */
+2 -2
View File
@@ -520,8 +520,8 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB,
void dump_ulsch(PHY_VARS_eNB *phy_vars_eNB,int frame, int subframe, uint8_t UE_id,int round);
void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame);
void dump_uci_stats(PHY_VARS_eNB *eNB,int frame);
void dump_ulsch_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame);
void dump_uci_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame);
+11 -8
View File
@@ -1116,16 +1116,18 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,
return(ret);
}
#define STATSTRLEN 16384
void dump_ulsch_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame) {
void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame) {
char output[16384];
int stroff=0;
for (int i=0;i<NUMBER_OF_ULSCH_MAX;i++)
if (eNB->ulsch_stats[i].rnti>0) {
for (int aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++)
LOG_I(PHY,"ULSCH RNTI %x: ulsch_power[%d] %d, ulsch_noise_power[%d] %d\n",
for (int aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++)
stroff+=sprintf(output+stroff,"ULSCH RNTI %x: ulsch_power[%d] %d, ulsch_noise_power[%d] %d\n",
eNB->ulsch_stats[i].rnti, aa,eNB->ulsch_stats[i].ulsch_power[aa],aa,eNB->ulsch_stats[i].ulsch_noise_power[aa]);
LOG_I(PHY,"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d\n",
AssertFatal(stroff<(STATSTRLEN-1000),"Increase STATSTRLEN\n");
stroff+=sprintf(output+stroff,"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d\n",
eNB->ulsch_stats[i].rnti,
eNB->ulsch_stats[i].round_trials[0],
(double)eNB->ulsch_stats[i].round_trials[1]/eNB->ulsch_stats[i].round_trials[0],
@@ -1134,7 +1136,7 @@ void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame) {
eNB->ulsch_stats[i].round_trials[2],
(double)eNB->ulsch_stats[i].round_trials[3]/eNB->ulsch_stats[i].round_trials[0],
eNB->ulsch_stats[i].round_trials[3]);
LOG_I(PHY,"ULSCH RNTI %x: current_Qm %d, current_G %d, current_TBS %d, current_rate %f,current_RI %d, timing_offset %d, total_bytes RX/SCHED %d/%d\n",
stroff+=sprintf(output+stroff,"ULSCH RNTI %x: current_Qm %d, current_G %d, current_TBS %d, current_rate %f,current_RI %d, timing_offset %d, total_bytes RX/SCHED %d/%d\n",
eNB->ulsch_stats[i].rnti,
eNB->ulsch_stats[i].current_Qm,
eNB->ulsch_stats[i].current_G,
@@ -1145,7 +1147,8 @@ void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame) {
eNB->ulsch_stats[i].total_bytes_rx,
eNB->ulsch_stats[i].total_bytes_tx);
}
if (fd) fprintf(fd,"%s",output);
else printf("%s",output);
}
void clear_ulsch_stats(PHY_VARS_eNB *eNB) {
+2
View File
@@ -362,6 +362,8 @@ typedef struct L1_proc_t_s {
L1_rxtx_proc_t L1_proc,L1_proc_tx;
/// stats thread pthread descriptor
pthread_t process_stats_thread;
/// L1 stats pthread descriptor
pthread_t L1_stats_thread;
/// for waking up tx procedure
RU_proc_t *ru_proc;
struct PHY_VARS_eNB_s *eNB;
-6
View File
@@ -2182,12 +2182,6 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
LOG_I (PHY, "max_I0 %d (rb %d), min_I0 %d (rb %d), avg I0 %d\n", max_I0, amax, min_I0, amin, eNB->measurements.n0_subband_power_avg_dB);
}
// figure out a better way to choose slot_rx, 19 is ok for a particular TDD configuration with 30kHz SCS
if ((frame&127) == 0 && subframe==3) {
dump_ulsch_stats(eNB,frame);
dump_uci_stats(eNB,frame);
}
// clear unused statistics after 2 seconds
for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++) {
if (eNB->ulsch_stats[i].frame <= frame) {