How to create a Rician random variable?

前端 未结 2 369
[愿得一人]
[愿得一人] 2021-01-07 05:33

I\'m trying to model a signal detection problem using Sympy, and need two random variables. One with a Rayleigh distribution to model noise, and one with a Rician distribut

相关标签:
2条回答
  • 2021-01-07 06:25

    If you know the pdf function, it's easy to create a new distribution with sympy.stats. Take a look at the existing distributions in the sympy source. You just need to subclass SingleContinuousDistribution and define some methods. For example, here is the normal distribution (with the docstrings removed):

    class NormalDistribution(SingleContinuousDistribution):
        _argnames = ('mean', 'std')
    
        @staticmethod
        def check(mean, std):
            _value_check(std > 0, "Standard deviation must be positive")
    
        def pdf(self, x):
            return exp(-(x - self.mean)**2 / (2*self.std**2)) / (sqrt(2*pi)*self.std)
    
        def sample(self):
            return random.normalvariate(self.mean, self.std)
    
    
    def Normal(name, mean, std):
        return rv(name, NormalDistribution, (mean, std))
    
    0 讨论(0)
  • 2021-01-07 06:40

    Yes, you can generate the Rice from chi-squared and Poisson. See any thorough Rice discussion, such as https://en.wikipedia.org/wiki/Rice_distribution:

    Another case where Rice(nu,sigma) comes from the following steps:

    1. Generate P having a Poisson distribution with parameter (also mean, for a Poisson) lambda = nu^2 / (2*sigma^2).
    2. Generate X having a chi-squared distribution with 2P + 2 degrees of freedom.
    3. Set R = sigma * sqrt(X).
    0 讨论(0)
提交回复
热议问题