30static FILE* fpRMlog = NULL;
32UINT UE_ID_LIST[] = { 0 };
35static bool validate_log(NETSIM_ID UE_ID)
37 int count =
sizeof(UE_ID_LIST) /
sizeof(
int);
38 if (count == 1 && UE_ID_LIST[0] == 0)
return true;
41 for (
int i = 0; i < count; i++)
43 if (UE_ID_LIST[i] == DEVICE_CONFIGID(UE_ID))
50static void init_radio_measurements_log()
52 if (get_protocol_log_status(
"LTENR_Radio_Measurements_Log"))
55 sprintf(s,
"%s\\%s", pszIOLogPath,
"LTENR_Radio_Measurements_Log.csv");
56 fpRMlog = fopen(s,
"w");
59 fnSystemError(
"Unable to open %s file", s);
64 fprintf(fpRMlog,
"%s,%s,%s,%s,",
65 "Time(ms)",
"gNB or eNB Name",
"UE Name",
"Distance(m)");
67 fprintf(fpRMlog,
"%s,%s,%s,%s,%s,%s,%s,",
68 "isAssociated",
"CC_ID",
"Band",
"Channel",
"Rank",
"Layer ID",
"Tx_Power(dBm)");
70 fprintf(fpRMlog,
"%s,%s,%s,%s,",
71 "LoS State",
"TotalLoss(dB)",
"PathLoss(dB)",
"ShadowFadingLoss(dB)");
73 fprintf(fpRMlog,
"%s,%s,%s,%s,%s,",
74 "O2I_Loss(dBm)",
"Additional_Loss(dB)",
"Antenna Gain(dB)",
"Rx_Power(dBm)",
"SNR(dB)");
76 fprintf(fpRMlog,
"%s,%s,%s,",
77 "SINR(dB)",
"ThermalNoise(dBm)",
"InterferencePower(dBm)");
79 fprintf(fpRMlog,
"%s,",
80 "BeamFormingGain(dB)");
82 fprintf(fpRMlog,
"%s,%s,",
83 "CQI Index",
"MCS Index");
85 fprintf(fpRMlog,
"\n");
86 if (nDbgFlag) fflush(fpRMlog);
91static void close_radio_measurements_log()
97void LTENR_RadioMeasurements_Init()
99 init_radio_measurements_log();
102void LTENR_RadioMeasurements_Finish()
104 close_radio_measurements_log();
107void LTENR_RadioMeasurements_PDSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
108 ptrLTENR_ASSOCIATEDUEPHYINFO info)
110 if (fpRMlog == NULL || !validate_log(info->ueId))
return;
113 ptrLTENR_PROPAGATIONCONFIG propagation = phy->propagationConfig;
114 ptrLTENR_PROPAGATIONINFO pinfo = info->propagationInfo[CA_ID];
115 string pszassoc_status = info->isAssociated ?
"true" :
"false";
116 ptrLTENR_CA ca = phy->spectrumConfig->CA[CA_ID];
117 LTENR_LOS_NLOS_STATE los_state = pinfo->propagationConfig->state;
119 if (!info->isAssociated || (ca->configSlotType == SLOT_UPLINK))
return;
120 layerCount = pinfo->downlink.layerCount;
121 for (UINT i = 0; i < layerCount; i++)
123 fprintf(fpRMlog,
"%.2lf,%s,%s,%lf,",
124 ldEventTime / MILLISECOND, DEVICE_NAME(phy->gnbId),
125 DEVICE_NAME(info->ueId),
126 DEVICE_DISTANCE(phy->gnbId, info->ueId));
128 fprintf(fpRMlog,
"%s,%d,%s,%s,%d,%d,%lf,",
129 pszassoc_status, CA_ID + 1, ca->operatingBand,
"PDSCH", pinfo->downlink.layerCount,
130 i + 1, pinfo->downlink.txPower_dbm);
132 if (propagation->pathLossModel == LTENR_PATHLOSS_MODEL_LOG_DISTANCE)
133 fprintf(fpRMlog,
"%s,%lf,%lf,",
134 "N/A", pinfo->dTotalLoss, pinfo->dPathLoss);
136 fprintf(fpRMlog,
"%s,%lf,%lf,",
137 strLTENR_STATE[los_state], pinfo->dTotalLoss, pinfo->dPathLoss);
139 if (pinfo->propagationConfig->isShadowFadingEnabled)
140 fprintf(fpRMlog,
"%lf,",
141 pinfo->dShadowFadingLoss);
143 fprintf(fpRMlog,
"%s,",
146 fprintf(fpRMlog,
"%lf,%lf,%lf,%lf,%lf,",
147 pinfo->dO2ILoss, pinfo->dAdditionalLoss, pinfo->downlink.antennaGain, pinfo->downlink.rxPower_dbm[i], pinfo->downlink.SNR_db[i]);
149 fprintf(fpRMlog,
"%lf,%lf,%lf,",
150 pinfo->downlink.SINR_db[i],pinfo->downlink.thermalNoise, pinfo->downlink.InterferencePower_dbm[i]);
152 if (propagation->fastFadingModel == LTENR_FASTFADING_MODEL_AWGN_WITH_RAYLEIGH_FADING ||
153 propagation->fastFadingModel == LTENR_FASTFADING_MODEL_AWGN_WITH_RICIAN_FADING)
154 fprintf(fpRMlog,
"%lf,",
155 pinfo->downlink.beamFormingGain[i]);
156 else if (propagation->fastFadingModel == LTENR_FASTFADING_MODEL_NO_FADING_MIMO_ARRAY_GAIN)
157 fprintf(fpRMlog,
"%lf,",
158 pinfo->downlink.ArrayGain);
160 fprintf(fpRMlog,
"%s,",
163 fprintf(fpRMlog,
"%d,%d,",
164 info->downlinkAMCInfo[CA_ID][i]->cqiTable.CQIIndex,
165 info->downlinkAMCInfo[CA_ID][i]->mcsTable.mcsIndex);
167 fprintf(fpRMlog,
"\n");
168 if (nDbgFlag) fflush(fpRMlog);
172void LTENR_RadioMeasurements_PUSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
173 ptrLTENR_ASSOCIATEDUEPHYINFO info)
175 if (fpRMlog == NULL || !validate_log(info->ueId))
return;
178 ptrLTENR_PROPAGATIONCONFIG propagation = phy->propagationConfig;
179 ptrLTENR_PROPAGATIONINFO pinfo = info->propagationInfo[CA_ID];
180 string pszassoc_status = info->isAssociated ?
"true" :
"false";
181 ptrLTENR_CA ca = phy->spectrumConfig->CA[CA_ID];
182 LTENR_LOS_NLOS_STATE los_state = pinfo->propagationConfig->state;
184 if (!info->isAssociated || (ca->configSlotType == SLOT_DOWNLINK))
return;
185 layerCount = pinfo->uplink.layerCount;
186 for (UINT i = 0; i < layerCount; i++)
188 fprintf(fpRMlog,
"%.2lf,%s,%s,%lf,",
189 ldEventTime / MILLISECOND, DEVICE_NAME(phy->gnbId),
190 DEVICE_NAME(info->ueId),
191 DEVICE_DISTANCE(phy->gnbId, info->ueId));
193 fprintf(fpRMlog,
"%s,%d,%s,%s,%d,%d,%lf,",
194 pszassoc_status, CA_ID + 1, ca->operatingBand,
"PUSCH", pinfo->uplink.layerCount,
195 i + 1, pinfo->uplink.txPower_dbm);
196 if (propagation->pathLossModel == LTENR_PATHLOSS_MODEL_LOG_DISTANCE)
197 fprintf(fpRMlog,
"%s,%lf,%lf,",
198 "N/A", pinfo->dTotalLoss, pinfo->dPathLoss);
200 fprintf(fpRMlog,
"%s,%lf,%lf,",
201 strLTENR_STATE[los_state], pinfo->dTotalLoss, pinfo->dPathLoss);
203 if (pinfo->propagationConfig->isShadowFadingEnabled)
204 fprintf(fpRMlog,
"%lf,",
205 pinfo->dShadowFadingLoss);
207 fprintf(fpRMlog,
"%s,",
210 fprintf(fpRMlog,
"%lf,%lf,%lf,%lf,%lf,",
211 pinfo->dO2ILoss, pinfo->dAdditionalLoss, pinfo->uplink.antennaGain, pinfo->uplink.rxPower_dbm[i], pinfo->uplink.SNR_db[i]);
213 fprintf(fpRMlog,
"%lf,%lf,%lf,",
214 pinfo->uplink.SINR_db[i],pinfo->uplink.thermalNoise, pinfo->uplink.InterferencePower_dbm[i]);
216 if (propagation->fastFadingModel == LTENR_FASTFADING_MODEL_AWGN_WITH_RAYLEIGH_FADING||
217 propagation->fastFadingModel == LTENR_FASTFADING_MODEL_AWGN_WITH_RICIAN_FADING)
218 fprintf(fpRMlog,
"%lf,",
219 pinfo->uplink.beamFormingGain[i]);
220 else if (propagation->fastFadingModel == LTENR_FASTFADING_MODEL_NO_FADING_MIMO_ARRAY_GAIN)
221 fprintf(fpRMlog,
"%lf,",
222 pinfo->uplink.ArrayGain);
224 fprintf(fpRMlog,
"%s,",
227 fprintf(fpRMlog,
"%d,%d,",
228 info->uplinkAMCInfo[CA_ID][i]->cqiTable.CQIIndex,
229 info->uplinkAMCInfo[CA_ID][i]->mcsTable.mcsIndex);
231 fprintf(fpRMlog,
"\n");
232 if (nDbgFlag) fflush(fpRMlog);
236void LTENR_RadioMeasurements_PBSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
237 ptrLTENR_ASSOCIATEDUEPHYINFO info)
239 if (fpRMlog == NULL || !validate_log(info->ueId))
return;
241 ptrLTENR_PROPAGATIONCONFIG propagation = phy->propagationConfig;
242 ptrLTENR_PROPAGATIONINFO pinfo = info->propagationInfo[CA_ID];
243 string pszassoc_status = info->isAssociated ?
"true" :
"false";
244 ptrLTENR_CA ca = phy->spectrumConfig->CA[CA_ID];
245 LTENR_LOS_NLOS_STATE los_state = pinfo->propagationConfig->state;
247 if ((ca->configSlotType == SLOT_UPLINK))
return;
249 fprintf(fpRMlog,
"%.2lf,%s,%s,%lf,",
250 ldEventTime / MILLISECOND, DEVICE_NAME(phy->gnbId),
251 DEVICE_NAME(info->ueId),
252 DEVICE_DISTANCE(phy->gnbId, info->ueId));
254 fprintf(fpRMlog,
"%s,%d,%s,%s,%s,%s,%lf,",
255 pszassoc_status, CA_ID + 1, ca->operatingBand,
"SSB",
"N/A",
256 "N/A", pinfo->downlink.totaltxpower_dbm);
258 if (propagation->pathLossModel == LTENR_PATHLOSS_MODEL_LOG_DISTANCE)
259 fprintf(fpRMlog,
"%s,%lf,%lf,",
260 "N/A", pinfo->dTotalLoss, pinfo->dPathLoss);
262 fprintf(fpRMlog,
"%s,%lf,%lf,",
263 strLTENR_STATE[los_state], pinfo->dTotalLoss, pinfo->dPathLoss);
265 if (pinfo->propagationConfig->isShadowFadingEnabled)
266 fprintf(fpRMlog,
"%lf,",
267 pinfo->dShadowFadingLoss);
269 fprintf(fpRMlog,
"%s,",
272 fprintf(fpRMlog,
"%lf,%lf,%lf,%lf,%lf,",
273 pinfo->dO2ILoss, pinfo->dAdditionalLoss, pinfo->downlink.antennaGain, pinfo->downlink.SSB_rxPower_dBm, pinfo->downlink.SSB_SNR_dB);
275 fprintf(fpRMlog,
"%s,%s,%s,",
278 fprintf(fpRMlog,
"%lf,",
279 pinfo->downlink.SSB_AnalogBeamformingGain_dB);
281 fprintf(fpRMlog,
"%s,%s,",
284 fprintf(fpRMlog,
"\n");
285 if (nDbgFlag) fflush(fpRMlog);