133 fnNetSimError(
"Propagation handle is passed as NULL in function %s\n",
182 return power - noise;
209 double EbNo = pow(10.0, snr / 10.0);
215 BER = 0.5 * erfc(sqrt(EbNo));
218 BER = 0.5 * erfc(sqrt(0.5 * EbNo));
229 EbNo *= (dataRate * 1000) / (bandwidth * 1000);
234 int log2sqrtM = (int)log2(sqrt(M));
236 double log2M = log2(M);
240 fnNetSimError(
"constellation %d is not supported for QAM.", (
int)M);
244 double sqrtM = sqrt(M);
249 for (
int k = 0; k < log2sqrtM; k++)
251 int sum_items = (int)((1.0 - pow(2.0, (-1.0) * (
double)k)) * sqrt(M) - 1.0);
252 double pow2k = pow(2.0, (
double)k - 1.0);
257 for (
int j = 0; j < sum_items; ++j)
259 PbK += pow(-1.0, floor((
double)j * pow2k / sqrtM))
260 * (pow2k - floor((
double)(j * pow2k / sqrtM) - 0.5))
261 * erfc((2.0 * (
double)j + 1.0) * sqrt(3.0 * (log2M * EbNo) / (2.0 * (M - 1.0))));
269 BER *= 1.0 / (double)log2sqrtM;
273 BER = 0.5 * erfc(sqrt(0.5 * EbNo));
double calculate_BER(PHY_MODULATION modulation, double dReceivedPower_dBm, double dInterferencePower_dBm, double dBandwidth_MHz)
#define _declspec(dllexport)
This function is used to trigger the update.
#define fnNetSimError(x,...)
double propagation_acoutics_calculate_noise(double frequency_kHz, double shipping, double windSpeed)
double propagation_acoutics_calculate_propagationDelay(NETSIM_ID tx, NETSIM_ID rx, PPROPAGATION propagation)
double propagation_air_calculate_propagationDelay(NETSIM_ID tx, NETSIM_ID rx, PPROPAGATION propagation)
#define DEVICE_PHYLAYER(DeviceId, InterfaceId)
int fn_NetSim_UWAN_Init()
int fn_NetSim_UWAN_CopyPacket(NetSim_PACKET *pstruDestPacket, NetSim_PACKET *pstruSrcPacket)
int fn_NetSim_UWAN_Finish()
double UWAN_Calculate_ber(NETSIM_ID tx, NETSIM_ID rx, PPROPAGATION_INFO info, double rxPower, PHY_MODULATION modulation, double dataRate, double bandwidth)
static double UWAN_CalculateSNR(double power, double noise)
double UWAN_calculate_propagation_delay(NETSIM_ID tx, NETSIM_ID txi, NETSIM_ID rx, NETSIM_ID rxi, PPROPAGATION_INFO info)
static double UWAN_getConstellationSize(PHY_MODULATION modulation)
int fn_NetSim_UWAN_Configure(void **var)
static double UWAN_CalculateNoise(PPROPAGATION_INFO info, NETSIM_ID tx, NETSIM_ID rx)
int fn_NetSim_UWAN_FreePacket(NetSim_PACKET *pstruPacket)
int fn_NetSim_UWAN_Metrics(PMETRICSWRITER metricsWriter)
char * fn_NetSim_UWAN_ConfigPacketTrace()
char * fn_NetSim_UWAN_Trace(NETSIM_ID nSubEvent)
char * fn_NetSim_UWAN_WritePacketTrace(NetSim_PACKET *pstruPacket, char **ppszTrace)
static const char * strPHY_MODULATION[]
enum enum_Modulation PHY_MODULATION
union stru_NetSim_Links::uni_NetSim_MediumProp puniMedProp
ptrACOUTICSPROPVAR acouticsPropVar
struct stru_NetSim_Links::uni_NetSim_MediumProp::stru_NetSim_wirelessLink pstruWirelessLink