2017-04-07 5 views
0

J'essaye de calculer le PDF de Fading de Ricean en utilisant l'équation suivante. RIcean Fading PDF. où 'y' est l'enveloppe normalisée et 'gamma' est SNRManipulation de grands nombres et de la précision de Ricean Fading PDF python

si la valeur K est grand, alors

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

résultats exp en gros virgule flottante (e.q. 1.01e-5088). en python, il vous affichera '0.0' en tant que valeur

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

la valeur de Bessel Fonction montre grande valeur int (e.q. de 7.78e + 5092). en python, il affichera la valeur '** inf **'

Comment puis-je stocker de grands nombres entiers et à virgule flottante dans python et calculer le 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)))

Merci.

Répondre

0

Si vous avez un moyen de calculer le logarithme de la fonction bessel, vous pouvez éviter la multiplication de très grands et très petits nombres en transformant en sommation avec exonentiation ultérieure, ce qui devrait résoudre les problèmes numériques (exploiter le fait que exp(a) * exp(b) == exp(a + b)).

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) 

Cette fonction suppose qu'il existe une implémentation de lni qui calcule log(i0(z)). Cependant, je n'ai connaissance d'aucune implémentation existante d'une telle fonction. Vous pouvez contourner ce problème en utilisant mpmath pour les résultats intermédiaires:

def lni(z): 
    i0 = mpmath.besseli(0, z) # may become a big number 
    logi0 = mpmath.log(i0) # logarithm brings big number into sensible range 
    return float(logi0) # convert back to normal floating point 
+0

Wow. exactement, il ne vient pas à l'esprit d'utiliser une solution exponentielle. Merci beaucoup. C'était une aide précieuse. –