处理大量精确的Ricean Fading PDF python

时间:2017-04-07 08:49:18

标签: python floating-point biginteger exp bessel-functions

我正在尝试使用以下等式计算Ricean Fading PDF。 RIcean Fading PDF。其中'y'是标准化包络,'gamma'是SNR

如果K值很大,那么

math.exp(-((1.+_gamma)*pow(_y,2.) + _gamma))

exp导致大浮点(e.q。1.01e-5088)。在python中,它将'0.0'显示为值

mpmath.besseli(0,2. * _y * np.sqrt(_gamma * (1. + _gamma)))

贝塞尔函数的值显示大的int值(e.q.7.78e + 5092)。在python中它将显示'** inf **'值

如何在python中存储大整数和浮点值并计算pdf?

def rice_pdf(self, _y, _gamma):
   return 2. * _y * (1. + _gamma) * math.exp(-((1.+_gamma)*pow(_y,2.) + _gamma)) * special.i0(2. * _y * np.sqrt(_gamma * (1. + _gamma))) 

感谢。

1 个答案:

答案 0 :(得分:0)

如果你有办法计算bessel函数的对数,你可以通过转换成后续取词的求和来避免非常大和非常小的数的乘法,这应该解决数值问题(利用{{ {1}})。

ng build --prod --base-href "https://USERNAME.github.io/REPOSITORY/"
ngh [OPTIONS]

此函数假定存在计算exp(a) * exp(b) == exp(a + b)的{​​{1}}实现。但是,我知道没有现有的这种功能的实现。您可以使用def rice_pdf(_y, _gamma): a = np.log(2. * _y * (1. + _gamma)) b = -((1.+_gamma)*pow(_y,2.) + _gamma) c = lni(2. * _y * np.sqrt(_gamma * (1. + _gamma))) return np.exp(a + b + c) 作为中间结果来解决此问题:

lni