GNU Radio 3.7.1 C++ API
|
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