GNU Radio Manual and C++ API Reference  3.10.2.0
The Free & Open Software Radio Ecosystem
fastnoise_source.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2013,2018 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 
12 #ifndef FASTNOISE_SOURCE_H
13 #define FASTNOISE_SOURCE_H
14 
15 #include <gnuradio/analog/api.h>
17 #include <gnuradio/sync_block.h>
18 #include <cstdint>
19 #include <vector>
20 
21 namespace gr {
22 namespace analog {
23 
24 /*!
25  * \brief Random number source
26  * \ingroup source_blk
27  *
28  * \details
29  * Generate random values from different distributions.
30  * Currently, only Gaussian and uniform are enabled.
31  */
32 template <class T>
33 class ANALOG_API fastnoise_source : virtual public sync_block
34 {
35 public:
36  // gr::analog::fastnoise_source::sptr
37  typedef std::shared_ptr<fastnoise_source<T>> sptr;
38 
39  /*! \brief Make a fast noise source
40  * \param type the random distribution to use (see
41  * gnuradio/analog/noise_type.h)
42  * \param ampl the standard deviation of a 1-d noise process. If
43  * this is the complex source, this parameter is split
44  * among the real and imaginary parts:
45  * <pre>(ampl/sqrt(2))x + j(ampl/sqrt(2))y</pre>
46  * \param seed seed for random generators. Note that for uniform
47  * and Gaussian distributions, this should be a negative
48  * number.
49  * \param samples Number of samples to pre-generate. For performance
50  * reasons, prefer a power of 2.
51  */
52  static sptr
53  make(noise_type_t type, float ampl, uint64_t seed = 0, size_t samples = 1024 * 16);
54  virtual T sample() = 0;
55  virtual T sample_unbiased() = 0;
56  virtual const std::vector<T>& samples() const = 0;
57 
58  /*!
59  * Set the noise type. Nominally from the
60  * gr::analog::noise_type_t selections, but only GR_GAUSSIAN and
61  * GR_UNIFORM are currently available.
62  */
63  virtual void set_type(noise_type_t type) = 0;
64 
65  /*!
66  * Set the standard deviation (amplitude) of the 1-d noise
67  * process.
68  */
69  virtual void set_amplitude(float ampl) = 0;
70 
71  virtual noise_type_t type() const = 0;
72  virtual float amplitude() const = 0;
73 };
74 
79 } /* namespace analog */
80 } /* namespace gr */
81 
82 
83 #endif /* FASTNOISE_SOURCE_H */
Random number source.
Definition: fastnoise_source.h:34
virtual const std::vector< T > & samples() const =0
virtual void set_amplitude(float ampl)=0
static sptr make(noise_type_t type, float ampl, uint64_t seed=0, size_t samples=1024 *16)
Make a fast noise source.
virtual float amplitude() const =0
virtual noise_type_t type() const =0
virtual void set_type(noise_type_t type)=0
std::shared_ptr< fastnoise_source< T > > sptr
Definition: fastnoise_source.h:37
synchronous 1:1 input to output with history
Definition: sync_block.h:26
#define ANALOG_API
Definition: gr-analog/include/gnuradio/analog/api.h:18
fastnoise_source< float > fastnoise_source_f
Definition: fastnoise_source.h:75
noise_type_t
Definition: noise_type.h:17
fastnoise_source< gr_complex > fastnoise_source_c
Definition: fastnoise_source.h:78
fastnoise_source< std::int32_t > fastnoise_source_i
Definition: fastnoise_source.h:76
fastnoise_source< std::int16_t > fastnoise_source_s
Definition: fastnoise_source.h:77
GNU Radio logging wrapper.
Definition: basic_block.h:29