GNU Radio 3.7.1 C++ API
random.h
Go to the documentation of this file.
00001 /* -*- c++ -*- */
00002 /*
00003  * Copyright 2002 Free Software Foundation, Inc.
00004  *
00005  * This file is part of GNU Radio
00006  *
00007  * GNU Radio is free software; you can redistribute it and/or modify
00008  * it under the terms of the GNU General Public License as published by
00009  * the Free Software Foundation; either version 3, or (at your option)
00010  * any later version.
00011  *
00012  * GNU Radio is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with GNU Radio; see the file COPYING.  If not, write to
00019  * the Free Software Foundation, Inc., 51 Franklin Street,
00020  * Boston, MA 02110-1301, USA.
00021  */
00022 
00023 #ifndef INCLUDED_GR_RANDOM_H
00024 #define INCLUDED_GR_RANDOM_H
00025 
00026 #include <gnuradio/api.h>
00027 #include <gnuradio/gr_complex.h>
00028 
00029 // While rand(3) specifies RAND_MAX, random(3) says that the output
00030 // ranges from 0 to 2^31-1 but does not specify a macro to denote
00031 // this.  We define RANDOM_MAX for cleanliness.  We must omit the
00032 // definition for systems that have made the same choice.  (Note that
00033 // random(3) is from 4.2BSD, and not specified by POSIX.)
00034 
00035 #ifndef RANDOM_MAX
00036 static const int RANDOM_MAX = 2147483647; // 2^31-1
00037 #endif /* RANDOM_MAX */
00038 
00039 #include <stdlib.h>
00040 
00041 namespace gr {
00042 
00043   /*!
00044    * \brief pseudo random number generator
00045    * \ingroup math_blk
00046    */
00047   class GR_RUNTIME_API random
00048   {
00049   protected:
00050     static const int NTAB = 32;
00051     long d_seed;
00052     long d_iy;
00053     long d_iv[NTAB];
00054     int d_iset;
00055     float d_gset;
00056 
00057   public:
00058     random(long seed=3021);
00059 
00060     void reseed(long seed);
00061 
00062     /*!
00063      * \brief uniform random deviate in the range [0.0, 1.0)
00064      */
00065     float ran1();
00066 
00067     /*!
00068      * \brief normally distributed deviate with zero mean and variance 1
00069      */
00070     float gasdev();
00071 
00072     float laplacian();
00073     float impulse(float factor);
00074     float rayleigh();
00075     gr_complex rayleigh_complex();
00076   };
00077 
00078 } /* namespace gr */
00079 
00080 #endif /* INCLUDED_GR_RANDOM_H */
00081