summaryrefslogtreecommitdiff
path: root/gr-analog/lib/fastnoise_source_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-analog/lib/fastnoise_source_impl.cc')
-rw-r--r--gr-analog/lib/fastnoise_source_impl.cc36
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;
}