pdfrice: Probability Density Function of the Rice Distribution

pdfriceR Documentation

Probability Density Function of the Rice Distribution

Description

This function computes the probability density of the Rice distribution given parameters (\nu and \mathrm{SNR}) computed by parrice. The probability density function is

f(x) = \frac{x}{\alpha^2}\,\exp\!\left(\frac{-(x^2+\nu^2)}{2\alpha^2}\right)\,I_0(x\nu/\alpha^2)\mbox{,}

where f(x) is the nonexceedance probability for quantile x, \nu is a parameter, and \nu/\alpha is a form of signal-to-noise ratio \mathrm{SNR}, and I_k(x) is the modified Bessel function of the first kind, which for integer k=0 is seen under LaguerreHalf. If \nu=0, then the Rayleigh distribution results and pdfray is used. If 24 < \mathrm{SNR} < 52 is used, then the Normal distribution functions are used with appropriate parameter estimation for \mu and \sigma that include the Laguerre polynomial LaguerreHalf. If \mathrm{SNR} > 52, then the Normal distribution functions continue to be used with \mu=\alpha\times\mathrm{SNR} and \sigma = A.

Usage

pdfrice(x, para)

Arguments

x

A real value vector.

para

The parameters from parrice or vec2par.

Value

Probability density (f) for x.

Note

The VGAM package provides a pdf of the Rice for reference:

"drice" <- function(x, vee, sigma, log = FALSE) { # From the VGAM package
    if(!is.logical(log.arg <- log)) stop("bad input for argument 'log'")
    rm(log)
    N = max(length(x), length(vee), length(sigma))
    x = rep(x, len=N); vee = rep(vee, len=N); sigma = rep(sigma, len=N)
    logdensity = rep(log(0), len=N)
    xok = (x > 0)
    x.abs = abs(x[xok]*vee[xok]/sigma[xok]^2)
    logdensity[xok] = log(x[xok]) - 2 * log(sigma[xok]) +
                      (-(x[xok]^2+vee[xok]^2)/(2*sigma[xok]^2)) +
                      log(besselI(x.abs, nu=0, expon.scaled = TRUE)) + x.abs
    logdensity[sigma <= 0] <- NaN; logdensity[vee < 0] <- NaN
    if(log.arg) logdensity else exp(logdensity)
}

Author(s)

W.H. Asquith

References

Asquith, W.H., 2011, Distributional analysis with L-moment statistics using the R environment for statistical computing: Createspace Independent Publishing Platform, ISBN 978–146350841–8.

See Also

cdfrice, quarice, lmomrice, parrice

Examples

lmr <- lmoms(c(10, 43, 27, 26, 49, 26, 62, 39, 51, 14))
rice <- parrice(lmr)
x <- quarice(nonexceeds(),rice)
plot(x,pdfrice(x,rice), type="b")


# For SNR=v/a > 24 or 240.001/10 > 24, the Normal distribution is
# used by the Rice as implemented here.
rice1 <- vec2par(c(239.9999,10), type="rice")
rice2 <- vec2par(c(240.0001,10), type="rice")
x <- 200:280
plot( x, pdfrice(x, rice1), type="l", lwd=5, lty=3) # still RICIAN code
lines(x, dnorm(  x, mean=240.0001, sd=10), lwd=3, col=2) # NORMAL obviously
lines(x, pdfrice(x, rice2), lwd=1, col=3) # NORMAL distribution code is triggered

# For SNR=v/a > 52 or 521/10 > 52, the Normal distribution
# used by the Rice as implemented here with simple parameter estimation
# because this high of SNR is beyond limits of Bessel function in Laguerre
# polynomial
rice1 <- vec2par(c(520,10), type="rice")
rice2 <- vec2par(c(521,10), type="rice")
x <- 10^(log10(520) - 0.05):10^(log10(520) + 0.05)
plot( x, pdfrice(x, rice1), type="l", lwd=5, lty=3)
lines(x, pdfrice(x, rice2), lwd=1, col=3) # NORMAL code triggered

wasquith/lmomco documentation built on April 20, 2024, 7:20 p.m.