27#include "LTENR_PropagationModel.h"
28#include "MobilityInterface.h"
29#include "NetSim_utility.h"
31#define LTENR_MATLAB_MODEL_DEFAULT _strdup("NONE")
34#define MATLAB_LOSS_RAIN_RAINRATE_DEFAULT 16
35#define MATLAB_LOSS_RAIN_TILTANGLE_DEFAULT 0
36#define MATLAB_LOSS_RAIN_ELEVATIONANGLE_DEFAULT 0
37#define MATLAB_LOSS_RAIN_EXCEEDANCEPERCENTAGEOFRAINFALL_DEFAULT 0
40#define MATLAB_LOSS_FOG_TEMPERATURE_DEFAULT 15
41#define MATLAB_LOSS_FOG_WATERDENSITY_DEFAULT 7.5
44#define MATLAB_LOSS_GAS_TEMPERATURE_DEFAULT 15
45#define MATLAB_LOSS_GAS_WATERDENSITY_DEFAULT 7.5
46#define MATLAB_LOSS_GAS_AIRPRESSURE_DEFAULT 10300
48void netsim_matlab_configure_loss_model(ptrLTENR_PROPAGATIONCONFIG config,
void* xmlNetSimNode)
51 getXmlVar(&szVal, MATLAB_MODEL, xmlNetSimNode, 1, _STRING, LTENR);
52 config->
matlabLossModel = LTENR_ConvertStrToEnum(MATLAB_LOSSMODEL, szVal);
57 case MATLAB_LOSSMODEL_NONE:
60 case MATLAB_LOSSMODEL_RAIN:
61 getXmlVar(&config->rainRate, RAINRATE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_RAIN);
62 getXmlVar(&config->tiltAngle, TILTANGLE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_RAIN);
63 getXmlVar(&config->elevationAngle, ELEVATIONANGLE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_RAIN);
64 getXmlVar(&config->exceedancePercentageOfRainfall, EXCEEDANCEPERCENTAGEOFRAINFALL, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_RAIN);
66 case MATLAB_LOSSMODEL_FOG:
67 getXmlVar(&config->temperature, TEMPERATURE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_FOG);
68 getXmlVar(&config->waterDensity, WATERDENSITY, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_FOG);
70 case MATLAB_LOSSMODEL_GAS:
71 getXmlVar(&config->temperature, TEMPERATURE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_GAS);
72 getXmlVar(&config->airPressure, AIRPRESSURE, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_GAS);
73 getXmlVar(&config->waterDensity, WATERDENSITY, xmlNetSimNode, 1, _DOUBLE, MATLAB_LOSS_GAS);
76 fnNetSimError(
"Unknown MATLAB loss model - %s\n", strMATLAB_LOSSMODEL[config->
matlabLossModel]);
81static double netsim_matlab_get_fspl(ptrLTENR_PROPAGATIONINFO info)
83 netsim_matlab_send_ascii_command(
"pathloss=netsim_matlab_free_space_pathloss(%lf,%lf,%lf,%lf,%lf,%lf,%lf)",
84 info->centralFrequency_MHz * MHZ,
85 info->gnbPos.X, info->gnbPos.Y, info->gnbPos.Z,
86 info->uePos.X, info->uePos.Y, info->uePos.Z);
88 netsim_matlab_get_value(s, BUFSIZ,
"pathloss",
"double");
92static double netsim_matlab_get_rainLoss(ptrLTENR_PROPAGATIONINFO info)
94 netsim_matlab_send_ascii_command(
"loss=rainpl(%lf,%lf,%lf,%lf,%lf,%lf)",
96 info->centralFrequency_MHz * MHZ,
97 info->propagationConfig->rainRate,
98 info->propagationConfig->elevationAngle,
99 info->propagationConfig->tiltAngle,
100 info->propagationConfig->exceedancePercentageOfRainfall);
102 netsim_matlab_get_value(s, BUFSIZ,
"loss",
"double");
106static double netsim_matlab_get_gasLoss(ptrLTENR_PROPAGATIONINFO info)
108 if (info->centralFrequency_MHz * MHZ < 1 * GHZ)
110 fnNetSimError(
"MATLAB GAS loss model is only avaiable for frequency above than 1GHz\n");
114 netsim_matlab_send_ascii_command(
"loss=gaspl(%lf,%lf,%lf,%lf,%lf)",
116 info->centralFrequency_MHz * MHZ,
117 info->propagationConfig->temperature,
118 info->propagationConfig->airPressure,
119 info->propagationConfig->waterDensity);
121 netsim_matlab_get_value(s, BUFSIZ,
"loss",
"double");
125static double netsim_matlab_get_fogLoss(ptrLTENR_PROPAGATIONINFO info)
127 if (info->centralFrequency_MHz * MHZ < 10 * GHZ)
129 fnNetSimError(
"MATLAB Fog loss model is only avaiable for frequency above than 10GHz\n");
133 netsim_matlab_send_ascii_command(
"loss=fogpl(%lf,%lf,%lf,%lf)",
135 info->centralFrequency_MHz * MHZ,
136 info->propagationConfig->temperature,
137 info->propagationConfig->waterDensity);
139 netsim_matlab_get_value(s, BUFSIZ,
"loss",
"double");
143double netsim_matlab_calculate_loss(ptrLTENR_PROPAGATIONINFO info)
145 switch (info->propagationConfig->matlabLossModel)
147 case MATLAB_LOSSMODEL_NONE:
149 case MATLAB_LOSSMODEL_RAIN:
150 return netsim_matlab_get_rainLoss(info);
151 case MATLAB_LOSSMODEL_FOG:
152 return netsim_matlab_get_fogLoss(info);
153 case MATLAB_LOSSMODEL_GAS:
154 return netsim_matlab_get_gasLoss(info);
156 fnNetSimError(
"Unknown MATLAB loss model - %s\n", strMATLAB_LOSSMODEL[info->propagationConfig->matlabLossModel]);
MATLAB_LOSSMODEL matlabLossModel
In Case of Matlab model.