25#ifndef _NETSIM_LTENR_PHY_H_
26#define _NETSIM_LTENR_PHY_H_
31#pragma region HEADER_FILES
32#include "LTENR_Spectrum.h"
33#include "LTENR_PropagationModel.h"
34#include "LTENR_AntennaModel.h"
35#include "LTENR_Multiplexing.h"
36#include "LTENR_HARQ.h"
42#pragma region PROPAGATION_INFO
45 __IN__ NETSIM_ID gnbId;
46 __IN__ NETSIM_ID gnbIf;
47 __IN__ NETSIM_ID ueId;
48 __IN__ NETSIM_ID ueIf;
49 __IN__ NetSim_COORDINATES gnbPos;
50 __IN__ NetSim_COORDINATES uePos;
51 __IN__
double centralFrequency_MHz;
52 __IN__
double centralFrequency_GHz;
53 __IN__
double bandwidth_MHz;
54 __IN__ ptrLTENR_PROPAGATIONCONFIG propagationConfig;
56 __OUT__
double dTotalLoss;
57 __OUT__
double dPathLoss;
58 __OUT__
double dShadowFadingLoss;
59 __OUT__
double dClutterLoss;
60 __OUT__
double dO2ILoss;
61 __OUT__
double dAdditionalLoss;
66 double netAntennaGain_dB;
67 double angularAntennaGain_dB;
73 double elevationAngle_rad;
78 __IN__ UINT layerCount;
79 __IN__ UINT txAntennaCount;
80 __IN__ UINT rxAntennaCount;
81 __IN__
double txPower_dbm;
82 __IN__
double totaltxpower_dbm;
90 double* InterferencePower_dbm;
91 double* spectralEfficiency;
93 __OUT__
double antennaGain;
96 double SSB_rxPower_dBm;
98 __OUT__
double SSB_SNR_dB;
99 __OUT__
double SSB_AnalogBeamformingGain_dB;
101 __OUT__
double* beamFormingGain;
102 __OUT__
double ArrayGain;
103 void* beamformingHandle;
104 UINT* beamFormingIndex;
109 bool isConstructiveShadow;
114 LTENR_LOCATION uePosition;
115 LTENR_LOCATION gnbPosition;
117 double frequency_gHz;
119 LTENR_SCENARIO currentScenario;
123 double dist2Doutdoor;
125 }LTENR_PROPAGATIONINFO, * ptrLTENR_PROPAGATIONINFO;
136 ptrLTENR_PROPAGATIONCONFIG propagationConfig;
137 ptrLTENR_ANTENNA antenna;
138 double ueRxAntennaGain;
140 __IN__ UINT default_bwp_id;
141 __IN__ UINT first_active_bwp_id;
142 }LTENR_UEPHY, * ptrLTENR_UEPHY;
143 ptrLTENR_UEPHY LTENR_UEPHY_NEW(NETSIM_ID ueId, NETSIM_ID ueIf);
146#pragma region ASSOC_UE_PHY_INFO
154 ptrLTENR_AMCINFO* uplinkAMCInfo[MAX_CA_COUNT];
155 ptrLTENR_AMCINFO* downlinkAMCInfo[MAX_CA_COUNT];
157 ptrLTENR_PROPAGATIONINFO propagationInfo[MAX_CA_COUNT];
159 ptrLTENR_HARQ_VAR harq;
165#define LTENR_ASSOCIATEDUEPHYINFO_ALLOC() (list_alloc(sizeof(LTENR_ASSOCIATEDUEPHYINFO),offsetof(LTENR_ASSOCIATEDUEPHYINFO,ele)))
166#define LTENR_ASSOCIATEDUEPHYINFO_ADD(phy,info) (LIST_ADD_LAST(&(phy)->associatedUEPhyInfo,(info)))
167#define LTENR_ASSOCIATEDUEPHYINFO_NEXT(info) ((info) = LIST_NEXT((info)))
168#define LTENR_ASSOCIATEDUEPHYINFO_REMOVE(phy,info) (LIST_FREE(&(phy)->associatedUEPhyInfo,(info)))
171#pragma region FRAME_INFO
175 double frameStartTime;
179 double subFrameStartTime;
180 double subFrameEndTime;
183 double slotStartTime;
186 LTENR_SLOTTYPE slotType;
187 LTENR_SLOTTYPE prevSlotType;
190 }LTENR_FRAMEINFO, * ptrLTENR_FRAMEINFO;
193#pragma region GNB_PHY
199 ptrLTENR_SPECTRUMCONFIG spectrumConfig;
212 bool isTransformPrecoding;
224 ptrLTENR_PROPAGATIONCONFIG propagationConfig;
226 ptrLTENR_PRB prbList;
228 ptrLTENR_FRAMEINFO frameInfo[MAX_CA_COUNT];
230 ptrLTENR_FRAMEINFO currentFrameInfo;
232 UINT associatedUECount;
233 ptrLTENR_ASSOCIATEDUEPHYINFO associatedUEPhyInfo;
241 char* ca_configuration;
243 ptrLTENR_ANTENNA antenna;
245#define LTENR_GNBPHY_GETCURRENTCAID(d,in) ((ptrLTENR_GNBPHY)LTENR_GNBPHY_GET(d, in))->currentFrameInfo->Current_CA_ID
248#pragma region FUN_DEF
250 void LTENR_Calculate_Interference(ptrLTENR_PROPAGATIONINFO info,
double rxPower_dbm,
double* Interference,
int layerId,
int CA_ID,
bool isDownlink);
251 ptrLTENR_ASSOCIATEDUEPHYINFO LTENR_ASSOCIATEDUEPHYINFO_GET(NETSIM_ID gnbId, NETSIM_ID gnbIf,NETSIM_ID ueId, NETSIM_ID ueIf);
252 ptrLTENR_GNBPHY LTENR_GNBPHY_NEW(NETSIM_ID gnbId, NETSIM_ID gnbIf);
255 void LTENR_SetCQITable(ptrLTENR_GNBPHY phy,
char* table);
256 void LTENR_SetPDSCHMCSIndexTable(ptrLTENR_GNBPHY phy,
char* table);
257 void LTENR_SetPUSCHMCSIndexTable(ptrLTENR_GNBPHY phy,
char* table);
260#define LTENR_PHY_GET_SPECTRUMCONFIG(d,in) (((ptrLTENR_GNBPHY)LTENR_GNBPHY_GET((d),(in)))->spectrumConfig)
261 void LTENR_PHY_GET_OH(ptrLTENR_SPECTRUMCONFIG sc,
266 _declspec(dllexport)
void LTENR_Propagation_TotalLoss(ptrLTENR_PROPAGATIONINFO info);
267 double LTENR_PHY_Send_SINR_to_RRC(ptrLTENR_GNBPHY phy);
268 double LTENR_PHY_Send_RSRP_to_RRC(ptrLTENR_GNBPHY phy);
269 void LTENR_PHY_ASSOCIATION(NETSIM_ID gnbId, NETSIM_ID gnbIf,
270 NETSIM_ID ueId, NETSIM_ID ueIf,
272 double LTENR_PHY_RRC_RSRP_SINR(NETSIM_ID gnbId, NETSIM_ID gnbIf,
273 NETSIM_ID ueId, NETSIM_ID ueIf);
274 double LTENR_PHY_GetDownlinkSpectralEfficiency(ptrLTENR_PROPAGATIONINFO info,
int layerId,
int CA_ID);
275 double LTENR_PHY_GetUplinkSpectralEfficiency(ptrLTENR_PROPAGATIONINFO info,
int layerId,
int CA_ID);
278 void netsim_matlab_configure_loss_model(ptrLTENR_PROPAGATIONCONFIG config,
void* xmlNetSimNode);
279 double netsim_matlab_calculate_loss(ptrLTENR_PROPAGATIONINFO info);
282 void LTENR_BeamForming_InitCoherenceTimer(ptrLTENR_GNBPHY phy);
283 void LTENR_BeamForming_Init(ptrLTENR_PROPAGATIONINFO propagation);
284#define LTENR_BeamForming_Uplink_GetValue(info,layerId) (info->uplink.beamFormingGain? info->uplink.beamFormingGain[layerId]:0)
285#define LTENR_BeamForming_Downlink_GetValue(info,layerId) (info->downlink.beamFormingGain? info->downlink.beamFormingGain[layerId]:0)
287 _declspec(dllexport)
double LTENR_PHY_GetAntennaGain(ptrLTENR_PROPAGATIONINFO info, ptrLTENR_ANTENNA antenna);
290 void SendToNTNReceiver(NETSIM_ID gnbId, NETSIM_ID gnbIf, ptrLTENR_ASSOCIATEDUEPHYINFO info,
bool isUplink, NetSim_PACKET* packet);
291 ptrBeamNode addBeamCenters(UINT beamCount);
292 void setNTNpropagationInfo(ptrNTN_PROPAGATIONCONFIG propagation);
293 ptrNTN_PROPAGATIONCONFIG getNTN_PropInfo();
294 void NTN_BestBeamSelectionAlgorithm(ptrLTENR_PROPAGATIONINFO propInfo,
int CA_ID, UINT layerId);
295 double NTN_GetUplinkSpectralEfficiency(ptrLTENR_PROPAGATIONINFO info,
int layerId,
int CA_ID);
296 double NTN_GetDownlinkSpectralEfficiency(ptrLTENR_PROPAGATIONINFO info,
int layerId,
int CA_ID);
297 void NTNRadioMeasurementLog(ptrLTENR_GNBPHY phy,
int CA_ID, ptrLTENR_ASSOCIATEDUEPHYINFO info);