Loading...
Searching...
No Matches
random.h
Go to the documentation of this file.
/* -*- c++ -*- */
/*
* Copyright 2002, 2015 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef INCLUDED_GR_RANDOM_H
#define INCLUDED_GR_RANDOM_H
#include <gnuradio/api.h>
#include <gnuradio/gr_complex.h>
#include <gnuradio/xoroshiro128p.h>
#include <limits>
#include <random>
namespace gr {
/*!
* \brief wrapper for XOROSHIRO128+ PRNG for use in std::distributions
* Fulfills C++ named requirements for UniformRandomBitGenerator
* \ingroup math_blk
*/
class GR_RUNTIME_API xoroshiro128p_prng
{
public:
using result_type = uint64_t; //! \brief value type is uint64
private:
result_type state[2];
public:
/*!
* \brief minimum value
*/
static constexpr result_type min() { return std::numeric_limits<result_type>::min(); }
/*!
* \brief maximum value
*/
static constexpr result_type max() { return std::numeric_limits<result_type>::max(); }
/*!
* \brief constructor. Expects a seed.
*/
xoroshiro128p_prng(uint64_t init) { seed(init); }
/*!
* \brief yield a random value and advance state
*/
result_type operator()() { return xoroshiro128p_next(state); }
/*!
* \brief set new seed
*/
void seed(uint64_t seed) { xoroshiro128p_seed(state, seed); }
};
/*!
* \brief pseudo random number generator
* \ingroup math_blk
*/
class GR_RUNTIME_API random
{
protected:
long d_seed;
bool d_gauss_stored;
float d_gauss_value;
xoroshiro128p_prng d_rng; // mersenne twister as random number generator
std::uniform_real_distribution<float>
d_uniform; // choose uniform distribution, default is [0,1)
std::uniform_int_distribution<int64_t> d_integer_dis;
public:
random(uint64_t seed = 0, int64_t min_integer = 0, int64_t max_integer = 2);
~random();
/*!
* \brief Change the seed for the initialized number generator. seed = 0 initializes
* the random number generator with the system time.
*/
void reseed(uint64_t seed);
/*!
* set minimum and maximum for integer random number generator.
* Limits are [minimum, maximum)
* Default: [0, std::numeric_limits< IntType >::max)]
*/
void set_integer_limits(int64_t minimum, int64_t maximum);
/*!
* Uniform random integers in the range set by 'set_integer_limits' [min, max).
*/
int64_t ran_int();
/*!
* \brief Uniform random numbers in the range [0.0, 1.0)
*/
float ran1();
/*!
* \brief Normally distributed random numbers (Gaussian distribution with zero mean
* and variance 1)
*/
float gasdev();
/*!
* \brief Laplacian distributed random numbers with zero mean and variance 1
*/
float laplacian();
/*!
* \brief Rayleigh distributed random numbers (zero mean and variance 1 for the
* underlying Gaussian distributions)
*/
float rayleigh();
/*!
* \brief Exponentially distributed random numbers with values less than or equal
* to factor replaced with zero. The underlying exponential distribution has
* mean sqrt(2) and variance 2.
*/
float impulse(float factor);
/*!
* \brief Normally distributed random numbers with zero mean and variance 1 on real
* and imaginary part. This results in a Rayleigh distribution for the amplitude and
* an uniform distribution for the phase.
*/
gr_complex rayleigh_complex();
};
} /* namespace gr */
#endif /* INCLUDED_GR_RANDOM_H */
gr::random::rayleigh
float rayleigh()
Rayleigh distributed random numbers (zero mean and variance 1 for the underlying Gaussian distributio...
gr::random::impulse
float impulse(float factor)
Exponentially distributed random numbers with values less than or equal to factor replaced with zero....
gr::random::ran1
float ran1()
Uniform random numbers in the range [0.0, 1.0).
gr::random::set_integer_limits
void set_integer_limits(int64_t minimum, int64_t maximum)
gr::random::~random
~random()
gr::random::rayleigh_complex
gr_complex rayleigh_complex()
Normally distributed random numbers with zero mean and variance 1 on real and imaginary part....
gr::random::laplacian
float laplacian()
Laplacian distributed random numbers with zero mean and variance 1.
gr::random::ran_int
int64_t ran_int()
gr::random::d_seed
long d_seed
Definition random.h:69
gr::random::d_uniform
std::uniform_real_distribution< float > d_uniform
Definition random.h:75
gr::random::reseed
void reseed(uint64_t seed)
Change the seed for the initialized number generator. seed = 0 initializes the random number generato...
gr::random::d_rng
xoroshiro128p_prng d_rng
Definition random.h:73
gr::random::d_gauss_value
float d_gauss_value
Definition random.h:71
gr::random::d_gauss_stored
bool d_gauss_stored
Definition random.h:70
gr::random::random
random(uint64_t seed=0, int64_t min_integer=0, int64_t max_integer=2)
gr::random::d_integer_dis
std::uniform_int_distribution< int64_t > d_integer_dis
Definition random.h:76
gr::random::gasdev
float gasdev()
Normally distributed random numbers (Gaussian distribution with zero mean and variance 1).
gr::xoroshiro128p_prng
wrapper for XOROSHIRO128+ PRNG for use in std::distributions Fulfills C++ named requirements for Unif...
Definition random.h:29
gr::xoroshiro128p_prng::seed
void seed(uint64_t seed)
set new seed
Definition random.h:60
gr::xoroshiro128p_prng::xoroshiro128p_prng
xoroshiro128p_prng(uint64_t init)
constructor. Expects a seed.
Definition random.h:49
gr::xoroshiro128p_prng::min
static constexpr result_type min()
minimum value
Definition random.h:40
gr::xoroshiro128p_prng::max
static constexpr result_type max()
maximum value
Definition random.h:44
gr::xoroshiro128p_prng::result_type
uint64_t result_type
Definition random.h:31
gr::xoroshiro128p_prng::operator()
result_type operator()()
yield a random value and advance state
Definition random.h:55
api.h
GR_RUNTIME_API
#define GR_RUNTIME_API
Definition gnuradio-runtime/include/gnuradio/api.h:18
gr_complex.h
gr_complex
std::complex< float > gr_complex
Definition gr_complex.h:15
gr
GNU Radio logging wrapper.
Definition basic_block.h:29
xoroshiro128p.h
xoroshiro128p_seed
static void xoroshiro128p_seed(uint64_t *state, const uint64_t seed)
Seed the 128 bit state from a 64 bit seed.
Definition xoroshiro128p.h:91
xoroshiro128p_next
static uint64_t xoroshiro128p_next(uint64_t *state)
generate the next random number and update the state. This is the workhorse, here!
Definition xoroshiro128p.h:39