Research Article

Capacity of κ-μ Shadowed Fading Channels

Algorithm 1

Implementation of the bivariate Meijer -function in Mathematica software (*modification of the EGBMGF [18] to conform the - shadowed model*).
Clear All;
S[{a1st_, b1st_}, {a2s_, b2s_}, {a3t_, b3t_}, S_, mS_, {zs_, zt_}]:= Module[ ,
(*Function (s + t)*)
Past = Function[u, Product[Gamma[1 − a1st[[1, n]] − u], {n, 1, Length[a1st[ 1 ]]}]];
Qast = Function[u, Product[Gamma[a1st[[2, n]] + u], {n, 1, Length[a1st[ 2 ]]}]];
Pbst = Function[u, Product[Gamma[b1st[[1, n]] + u], {n, 1, Length[b1st[ 1 ]]}]];
Qbst = Function[u, Product[Gamma[1 − b1st[[2, n]] − u], {n, 1, Length[b1st[ 2 ]]}]];
Mst = Function[u, Past[u] * Pbst[u]/(Qast[u] Qbst[u])];
(*Function (s)*)
Pas = Function[u, Product[Gamma[1 − a2s[[1, n]] − u], {n, 1, Length[a2s[ 1 ]]}]];
Qas = Function[u, Product[Gamma[a2s[[2, n]] + u], {n, 1, Length[a2s[ 2 ]]}]];
Pbs = Function[u, Product[Gamma[b2s[[1, n]] + u], {n, 1, Length[b2s[ 1 ]]}]];
Qbs = Function[u, Product[Gamma[1 − b2s[[2, n]] − u], {n, 1, Length[b2s[ 2 ]]}]];
Ms = Function[u, Pas[u] * Pbs[u]/(Qas[u] Qbs[u])];
(*Function (t)*)
Pat = Function[u, Product[Gamma[1 − a3t[[1, n]] − u], {n, 1, Length[a3t[ 1 ]]}]];
Qat = Function[u, Product[Gamma[a3t[[2, n]] + u], {n, 1, Length[a3t[ 2 ]]}]];
Pbt = Function[u, Product[Gamma[b3t[[1, n]] + u], {n, 1, Length[b3t[ 1 ]]}]];
Qbt = Function[u, Product[Gamma[1 − b3t[[2, n]] − u], {n, 1, Length[b3t[ 2 ]]}]];
Mt = Function[u, Pat[u] * Pbt[u]/(Qat[u] Qbt[u])];
MT = Function[u, v, Mst[u + v] * Ms[u] * Mt[v]];
(*Countour limiters*)
Zs = zs; (*x*)
Zt = zt; (*y*)
W = 50;
Wp = 10; (*When it is necessary to apply integration by parts. Only for t variable*)
Rs = −1/4;
If[( S − mS) 0,
 Rt = ( S − mS)/2;
 (*Final Evaluation*)
 Print[“Numerical Integration:”];
 value = 1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, Rt – I * W, Rt + I * W}],
 PosPoleT = Ceiling[Abs[ S − mS]] + ( S − mS);
 NegPoleT = Floor[Abs[ S − mS]] + ( S − mS);
 Rt1 = PosPoleT/2;
 Rt2 = NegPoleT/2;
  (*Final Evaluation*)
 Print[“Numerical Integration by parts:”];
 valIni = 1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, Rt1 – I * W, Rt1 – I * Wp}];
 nIter = Abs[Floor[ S − mS]];
 val1T = Sum[1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, (Rt1 − n + 1) – I * Wp,
   (Rt1 − n + 1) + I * Wp}], {n, 1, nIter}];
 val2T = Sum[1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, (Rt1 − n + 1) + I * Wp,
   (Rt2 − n + 1) + I * Wp}], {n, 1, nIter}];
 val3T = Sum[1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, (Rt2 − n + 1) + I * Wp,
   (Rt2 − n + 1) – I * Wp}], {n, 1, nIter}];
 val4T = Sum[1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, (Rt2 − n + 1) – I * Wp,
   (Rt1 − n) – I * Wp}], {n, 1, nIter}];
 valFin = 1/(2 I)2 NIntegrate[MT[s, t] Zs Zt , {s, Rs – I * W, Rs + I * W}, {t, (Rt1 − nIter) – I * Wp,
   (Rt1 − nIter) + I * W}];
 value = valIni + valFin + val1T + val2T + val3T + val4T];
 (*Returning back the value*)
 Return[value];
];
(*End of MEGBMGF*)