Nakagami-:math:`m` ================== .. author jgaeddert Joseph D. Gaeddert .. date January 1, 1975 .. location Boston, MA .. header /doc/random/banner.png .. keywords random number generator, RNG, randn, randnf, randf The Nakagami-:math:`m` distribution is a versatile stochastic model for modeling radio links :cite:`Braun:1991` and has often been regarded as the best distribution to model land mobile propagation due to its ability to describe fading situations worse than Rayleigh, including one-sided Gaussian :cite:`Simon:1998`. Empirical evidence regarding the efficacy the Nakagami-:math:`m` distribution has on fading profiles been presented in :cite:`Turin:1980,Suzuki:1977`. Thus statistical inference of the Nakagami-:math:`m` fading parameters are of interest in the design of adaptive radios such as optimized transmit diversity modes :cite:`Cavers:1999,Ko:2003` and adaptive modulation schemes :cite:`Catreux:2002`. The Nakagami-:math:`m` probability density function is given by :cite:`Papoulis:2002` .. math:: :name: eqn-random-nakagamim-pdf f_X(x;m,\Omega) = \begin{cases} \frac{2}{\Gamma(m)} \left( \frac{m}{\Omega} \right)^m x^{2m-1} e^{ -(m/\Omega)x^2} & x \ge 0 \\ 0 & \text{else}. \end{cases} where :math:`m \ge 1/2` is the shape parameter and :math:`\Omega \gt 0` is the spread parameter. Nakagami-:math:`m` random numbers are generated from the gamma distribution. Specifically if :math:`R` follows a gamma distribution defined by :eq:`eqn-random-gamma-pdf` with parameters :math:`\alpha` and :math:`\beta`, then :math:`X=\sqrt{R}` has a Nakagami-:math:`m` distribution with :math:`m=\alpha` and :math:`\Omega=\beta/\alpha`. .. qplot:: random random/random.c :args: -d nak -m 0.75 -o 4 :width: 80% :name: fig-nakagami-m :caption: Nakagami-:math:`m` distribution with :math:`m=0.75` and :math:`\Omega=4` Interface ~~~~~~~~~ Nakagami random number generator interface: .. code-block:: c // generate a Nakagami-m random variable float randnakmf(float _m, float _omega); // compute a Nakagami-m probability density float randnakmf_pdf(float _x, float _m, float _omega); // compute a Nakagami-m cumulative distribution float randnakmf_cdf(float _x, float _m, float _omega);