static double integralExpFunction(double k, double xmin, double xmax, double ymin, double ymax, double umin, double umax, double vmin, double vmax) { double e=2.7182818284590451; double j=xmin; double l=xmax; double m=ymin; double n=ymax; double p=umin; double q=umax; double r=vmin; double s=vmax; double pi=3.1415926535897931; double sqrtloge=1; double loge=1; return (1./(4*k*log(e))) *pi*( ( j - p)*myerf(sqrt(k)*(j - p)*sqrtloge) + (-l + p)*myerf(sqrt(k)*(l - p)*sqrtloge) + (-j + q)*myerf(sqrt(k)*(j - q)*sqrtloge) + ( l - q)*myerf(sqrt(k)*(l - q)*sqrtloge) + (exp(-k*square(j - p)) - exp(-k*square(j - q)))/(sqrt(k)*sqrt(pi)*sqrtloge) + (-exp(-k*square(l - p)) + exp(-k*square(l - q)))/(sqrt(k)*sqrt(pi)*sqrtloge)) *( ( m - r)*myerf(sqrt(k)*(m - r)*sqrtloge) + (-n + r)*myerf(sqrt(k)*(n - r)*sqrtloge) + (-m + s)*myerf(sqrt(k)*(m - s)*sqrtloge) + ( n - s)*myerf(sqrt(k)*(n - s)*sqrtloge) + (exp(-k*square(m - r)) - exp(-k*square(m - s)))/(sqrt(k)*sqrt(pi)*sqrtloge) + (-exp(-k*square(n - r)) + exp(-k*square(n - s)))/(sqrt(k)*sqrt(pi)*sqrtloge)); }
//! The input is Eb/N0 (dB). This should be converted to std in AWGN or crossover probability in BSC void mTranslateEbN0() { mSTD = (double)sqrt(1.0 / pow(10.0, EbN0/10) / 2.0 / mRateOfCode); double temp = sqrt(2 * mRateOfCode * pow(10.0 , EbN0/10)); mCrossOverProb = 0.5 - 0.5 * myerf(temp/sqrt(2.0)); if(mChannelName == "AWGN") mChannelParameter = mSTD; else mChannelParameter = mCrossOverProb; }