diff options
Diffstat (limited to 'gr-analog/lib/fastnoise_source_impl.cc')
-rw-r--r-- | gr-analog/lib/fastnoise_source_impl.cc | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/gr-analog/lib/fastnoise_source_impl.cc b/gr-analog/lib/fastnoise_source_impl.cc index ef85586b98..9cdea4e50d 100644 --- a/gr-analog/lib/fastnoise_source_impl.cc +++ b/gr-analog/lib/fastnoise_source_impl.cc @@ -26,6 +26,7 @@ #endif #include "fastnoise_source_impl.h" +#include <gnuradio/xoroshiro128p.h> #include <gnuradio/io_signature.h> #include <stdexcept> @@ -64,8 +65,9 @@ fastnoise_source_impl<T>::fastnoise_source_impl(noise_type_t type, long samples) : sync_block( "fastnoise_source", io_signature::make(0, 0, 0), io_signature::make(1, 1, sizeof(T))), - d_type(type), d_ampl(ampl), d_rng(seed) { + d_type(type), d_ampl(ampl) { d_samples.resize(samples); + xoroshiro128p_seed(d_state, (uint64_t) seed); generate(); } @@ -78,8 +80,9 @@ fastnoise_source_impl<gr_complex>::fastnoise_source_impl(noise_type_t type, : sync_block("fastnoise_source", io_signature::make(0, 0, 0), io_signature::make(1, 1, sizeof(gr_complex))), - d_type(type), d_ampl(ampl / sqrtf(2.0f)), d_rng(seed) { + d_type(type), d_ampl(ampl / sqrtf(2.0f)) { d_samples.resize(samples); + xoroshiro128p_seed(d_state, (uint64_t) seed); generate(); } @@ -155,31 +158,28 @@ int fastnoise_source_impl<T>::work(int noutput_items, template <class T> T fastnoise_source_impl<T>::sample() { -#ifdef HAVE_RAND48 - size_t idx = lrand48() % d_samples.size(); -#else - size_t idx = rand() % d_samples.size(); -#endif + size_t idx = xoroshiro128p_next(d_state) % d_samples.size(); return d_samples[idx]; } -#ifndef FASTNOISE_RANDOM_SIGN -#ifndef HAVE_RAND48 -#define FASTNOISE_RANDOM_SIGN ((rand() % 2 == 0) ? 1 : -1) -#else -#define FASTNOISE_RANDOM_SIGN ((lrand48() % 2 == 0) ? 1 : -1) -#endif -#endif - template <class T> T fastnoise_source_impl<T>::sample_unbiased() { - return FASTNOISE_RANDOM_SIGN * sample(); + uint64_t random_int = xoroshiro128p_next(d_state); + float s = sample(); + return (random_int & (1<<23)) ? (-s) : s; } template <> gr_complex fastnoise_source_impl<gr_complex>::sample_unbiased() { - gr_complex s(sample()); - return gr_complex(FASTNOISE_RANDOM_SIGN * s.real(), FASTNOISE_RANDOM_SIGN * s.imag()); + uint64_t random_int = xoroshiro128p_next(d_state); + float re = (random_int & (UINT64_C(1)<<23)) ? (- s.real()) : (s.real()); + float im = (random_int & (UINT64_C(1)<<42)) ? (- s.real()) : (s.real()); + return gr_complex(re, im); +} + +template <class T> +const std::vector<T>& fast_noise_source_impl<T>::samples() const { + return d_samples; } |