16#ifndef _NETSIM_PROPAGATION_MODEL_H_
17#define _NETSIM_PROPAGATION_MODEL_H_
22#define NEGATIVE_DBM -1000.0
23#define ZERO_MW 1.0e-100
24#define MW_TO_DBM(mw) ((mw) <= ZERO_MW?NEGATIVE_DBM:10.0*log10(mw))
25#define DBM_TO_MW(dbm) ((dbm) == NEGATIVE_DBM? 0.0: pow(10.0,(dbm)/10.0))
28#define KHZ (1000.0*HZ)
29#define MHZ (1000.0*KHZ)
30#define GHZ (1000.0*MHZ)
31#define RANDOM_01 (double)rand()/(double)RAND_MAX;
33#ifndef MAC_LAYER_PROTOCOL
34#define MAC_LAYER_PROTOCOL int
40#define PROPAGATION_PROPAGATION_MEDIUM_DEFAULT _strdup("AIR")
41#define PROPAGATION_CHANNEL_CHARACTERISTICS_DEFAULT _strdup("NO_PATHLOSS")
42#define PROPAGATION_PATHLOSS_MODEL_DEFAULT _strdup("Friis_Free_Space_propagation")
43#define PROPAGATION_FADING_MODEL_DEFAULT _strdup("NONE")
44#define PROPAGATION_SHADOWING_MODEL_DEFAULT _strdup("NONE")
45#define PROPAGATION_STANDARD_DEVIATION_DEFAULT 5.0
46#define PROPAGATION_PATHLOSS_EXPONENT_DEFAULT 2.0
47#define PROPAGATION_FADING_FIGURE_DEFAULT 1.0
48#define PROPAGATION_SHAPE_PARAMETER_DEFAULT 2.0
49#define PROPAGATION_OMEGA_DEFAULT 2.0
50#define PROPAGATION_THORP_SPREAD_COEFF_DEFAULT 2.0
51#define PROPAGATION_TEMPERATUREZONE_COUNT_DEFAULT 0
52#define PROPAGATION_Z_DEFAULT 0.0
53#define PROPAGATION_TEMPERATURE_DEFAULT 25.0
54#define PROPAGATION_SALINITY_DEFAULT 35
55#define PROPAGATION_WINDSPEED_DEFAULT 0
56#define PROPAGATION_SHIPPING_DEFAULT 0.5
62 typedef bool (*fnCheckInterface)(NETSIM_ID nTxId,
63 NETSIM_ID nTxInterface,
65 NETSIM_ID nRxInterface);
66 typedef void(*fnUserPathlossModel)(PPROPAGATION_INFO pinfo,
71 PROPAGATIONMODEL_NO_PATHLOSS,
72 PROPAGATIONMODEL_PATHLOSS_ONLY,
73 PROPAGATIONMODEL_PATHLOSS_AND_SHADOWING,
74 PROPAGATIONMODEL_PATHLOSS_AND_FADING_AND_SHADOWING,
80 PATHLOSSMODEL_Log_Distance,
81 PATHLOSSMODEL_Friis_Free_Space,
82 PATHLOSSMODEL_Cost_231_Hata_Urban,
83 PATHLOSSMODEL_Cost_231_Hata_SubUrban,
84 PATHLOSSMODEL_Hata_Urban,
85 PATHLOSSMODEL_Hata_SubUrban,
86 PATHLOSSMODEL_Indoor_Office,
87 PATHLOSSMODEL_Indoor_Home,
88 PATHLOSSMODEL_Indoor_Factory,
90 PATHLOSSMODEL_TWO_RAY,
91 PATHLOSSMODEL_RANGE_BASED,
92 PATHLOSSMODEL_MATRIX_MODEL,
100 FADINGMODEL_NAKAGAMI,
101 FADINGMODEL_MARKOV_LOO,
107 SHADOWMODEL_CONSTANT,
108 SHADOWMODEL_LOGNORMAL,
114 PROPMEDIUM_ACOUSTICS,
119 OMNIDIRECTIONAL_ANTENNA,
126 double pathLossExponent;
137 }PATHLOSS_VAR, * PPATHLOSS_VAR;
147 } OSCILLATOR, * ptrOSCILLATOR;
156 }_COMPLEX, * _ptrCOMPLEX;
166 }COMPLEXOSCILLATOR, * ptrCOMPLEXOSCILLATOR;
172 double directSignalMean_dB;
173 double directSignalStdDeviation_dB;
174 double rmsMultiPathPower_dB;
175 UINT numMultipathOscillators;
176 UINT numDirectSignalOscillators;
177 UINT directSignalDopper_Hz;
178 UINT multipathDoppler_Hz;
180 double initialProbability;
182 ptrOSCILLATOR directSignalOscillators;
183 ptrCOMPLEXOSCILLATOR multipathOscillators;
185 }LOOPARAMS, * ptrLOOPARAMS;
191 ptrLOOPARAMS* looParams;
193 double** stateTransitionProbability;
196 }ELEVATION, * ptrELEVATION;
201 ptrELEVATION* elevationPrams;
203 UINT activeElevationId;
204 }MARKOVLOO_VAR, * ptrMARLOVLOO_VAR;
208 double coolOffPeriod;
211 double shape_parameter;
215 ptrMARLOVLOO_VAR markovLooVar;
216 }FADING_VAR, * PFADING_VAR;
220 double standardDeviation;
223 }SHADOW_VAR, * PSHADOW_VAR;
232 }TEMPERATUREZONE, * ptrTEMPERATUREZONE;
239 UINT temperatureZoneCount;
240 ptrTEMPERATUREZONE tempratureZone;
241 }ACOUTICSPROPVAR, * ptrACOUTICSPROPVAR;
245 PROP_MEDIUM propMedium;
247 PROPAGATION_MODEL model;
249 PATHLOSS_MODEL pathloss_model;
250 PATHLOSS_VAR pathlossVar;
252 FADING_MODEL fading_model;
253 FADING_VAR fadingVar;
255 SHADOW_MODEL shadow_model;
256 SHADOW_VAR shadowVar;
258 ptrACOUTICSPROPVAR acouticsPropVar;
259 }PROPAGATION, * PPROPAGATION;
268 double dShadowLoss_db;
269 double dFadingLoss_db;
278 } External_Antenna_Gain, * ptrExternal_Antenna_Gain;
282 double dCentralFrequency;
283 double dChannelBandwidth;
289 double dTx_Rx_Distance;
290 double dTxAntennaHeight;
291 double dRxAntennaHeight;
295 bool isExternalGainTableRead;
297 ANTENNA_TYPE Tx_AntennaType;
298 double dTx_BoresightAngle;
299 double dTx_FrontToBackRatio;
300 double dTx_ElementGain;
301 double dTx_Beamwidth;
302 char Tx_AntennaPatternFileName[BUFSIZ];
303 ptrExternal_Antenna_Gain Tx_AntennaGainTable;
304 UINT Tx_AntennaGainTableSize;
307 ANTENNA_TYPE Rx_AntennaType;
308 double dRx_BoresightAngle;
309 double dRx_FrontToBackRatio;
310 double dRx_ElementGain;
311 double dRx_Beamwidth;
312 char Rx_AntennaPatternFileName[BUFSIZ];
313 ptrExternal_Antenna_Gain Rx_AntennaGainTable;
314 UINT Rx_AntennaGainTableSize;
324 }TX_INFO, * PTX_INFO;
329 NETSIM_ID nTxInterface;
331 NETSIM_ID nRxInterface;
336 PRECV_POWER recvPower;
338 PROPAGATION propagation;
340 fnCheckInterface fnpCheckInterface;
345 typedef void* PROPAGATION_HANDLE;
347 typedef void(*fnGetTxInfo)(NETSIM_ID nTxId,
348 NETSIM_ID nTxInterface,
350 NETSIM_ID nRxInterface,
352 typedef bool(*check_protocol_configure)(NETSIM_ID d,
356 _declspec(deprecated(
"This function is deprecated. Use propagation_create_propagation_info."))
357 _declspec(dllexport) PROPAGATION_HANDLE propagation_init(MAC_LAYER_PROTOCOL protocol,
358 __CALLBACK__ check_protocol_configure check,
359 __CALLBACK__ fnGetTxInfo fnpGetTxInfo,
360 __CALLBACK__ fnCheckInterface checkInterference);
363 _declspec(dllexport) PPROPAGATION_INFO propagation_create_propagation_info(NETSIM_ID txId, NETSIM_ID txIf,
364 NETSIM_ID rxId, NETSIM_ID rxIf,
365 char* uniqueId, PTX_INFO txInfo,
366 PPROPAGATION propagation);
369 _declspec(dllexport)
void propagation_finish(PROPAGATION_HANDLE handle);
372 _declspec(dllexport)
double propagation_get_Pathloss(PPROPAGATION_INFO info,
double time);
373 _declspec(dllexport)
double propagation_get_Shadowloss(PPROPAGATION_INFO info,
double time);
374 _declspec(dllexport)
double propagation_get_Fadingloss(PPROPAGATION_INFO info,
double time);
375 _declspec(dllexport)
double propagation_get_Totalloss(PPROPAGATION_INFO info,
double time);
378 _declspec(dllexport)
void _propagation_calculate_received_power(PPROPAGATION_INFO info,
double time);
379#define propagation_calculate_received_power(h,t,ti,r,ri,time) __pragma(message(__LOC__"propagation_calculate_received_power function is deprcated. Use _propagation_calculate_received_power")) _propagation_calculate_received_power(get_propagation_info(h,t,ti,r,ri),time)
382 _declspec(dllexport)
void propagation_calculate_lognormalshadow(PPROPAGATION_INFO pinfo,
385 _declspec(dllexport)
double _propagation_calculate_lognormalshadow(
double standardDeviation,
386 double* Gset,
bool* iSet);
389 _declspec(dllexport)
void propagation_calculate_logdistancepathloss(PPROPAGATION_INFO pinfo,
392 _declspec(dllexport)
double _propagation_calculate_logdistancepathloss(
double pathLossExponent,
393 double dTx_Rx_Distance,
double dCentralFrequency,
double d0);
396 _declspec(dllexport)
void propagation_calculate_cost231hata(PPROPAGATION_INFO pinfo,
401 _declspec(dllexport)
void propagation_calculate_hata_Suburban(PPROPAGATION_INFO pinfo,
404 _declspec(dllexport)
void propagation_calculate_Two_Ray(PPROPAGATION_INFO pinfo,
407 _declspec(dllexport)
void propagation_calculate_Range_Based(PPROPAGATION_INFO pinfo,
410 _declspec(dllexport)
void propagation_calculate_Matrix_Model(PPROPAGATION_INFO pinfo);
412 void add_new_recv_power(PPROPAGATION_INFO info,
double time,
double loss);
415 _declspec(dllexport)
void propagation_calculate_hata_urban(PPROPAGATION_INFO pinfo,
418 _declspec(dllexport)
void propagation_calculate_deterministicshadow(PPROPAGATION_INFO pinfo,
422 _declspec(dllexport)
void propagation_calculate_thorpPathLoss(PPROPAGATION_INFO pinfo,
425 _declspec(deprecated(
"get_propagation_info is deprected."))
426 _declspec(dllexport) PPROPAGATION_INFO get_propagation_info(PROPAGATION_HANDLE handle,
433 _declspec(dllexport) PTX_INFO _get_tx_info(PPROPAGATION_INFO info);
434#define get_tx_info(h,t,ti,r,ri) __pragma(message(__LOC__"get_tx_info function is deprcated. Use _get_tx_info")) _get_tx_info(get_propagation_info(h,t,ti,r,ri))
437 _declspec(dllexport)
double _propagation_get_received_power_dbm(PPROPAGATION_INFO info,
double time);
438#define propagation_get_received_power_dbm(h,t,ti,r,ri,time) __pragma(message(__LOC__"propagation_get_received_power_dbm function is deprcated. Use _propagation_get_received_power_dbm")) _propagation_get_received_power_dbm(get_propagation_info(h,t,ti,r,ri),time)
441 _declspec(dllexport)
double _propagation_calculate_fadingloss(PPROPAGATION_INFO info);
442#define propagation_calculate_fadingloss(h,t,ti,r,ri) __pragma(message(__LOC__"propagation_calculate_fadingloss function is deprcated. Use _propagation_calculate_fadingloss")) _propagation_calculate_fadingloss(get_propagation_info(h,t,ti,r,ri))
445 _declspec(dllexport)
double propagation_air_calculate_propagationDelay(NETSIM_ID tx,
447 PPROPAGATION propagation);
449 _declspec(dllexport)
double propagation_acoutics_calculate_propagationDelay(NETSIM_ID tx,
451 PPROPAGATION propagation);
454 _declspec(dllexport)
double propagation_acoutics_calculate_noise(
double frequency_kHz,
459 void initLoo(ptrMARLOVLOO_VAR markovLooVar);
460 double calculateLooFadingDB(PPROPAGATION_INFO info);
463 _declspec(dllexport)
int fn_NetSim_xmlConfigureWirelessMedium(
void* xmlNetSimNode,
466 typedef void(*fnConfigureWirelessMedium)(
void* xmlNetSimNode,
469 static void _propagation_update_antenna_gain(PPROPAGATION_INFO info);
472 void read_antenna_pattern_file(PPROPAGATION_INFO info);
473 void read_external_antenna_pattern_file(
474 const char* filename,
475 ptrExternal_Antenna_Gain* gainTable,
476 UINT* gainTableSize);
478#ifndef _PROPAGATIONMODEL_
479#pragma deprecated(PROPAGATION_HANDLE)