diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c index b11e4b7f67..39c5e5f564 100644 --- a/openair1/SIMULATION/TOOLS/random_channel.c +++ b/openair1/SIMULATION/TOOLS/random_channel.c @@ -530,12 +530,9 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx, float noise_power_dB) { // To create tables for normal distribution - uint64_t rand; - FILE *h = fopen("/dev/random", "r"); - if (fread(&rand, sizeof(rand), 1, h) != 1) { - LOG_W(HW, "Simulator can't read /dev/random\n"); - } - tableNor(rand); + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + tableNor((long)(t.tv_nsec%INT_MAX)); channel_desc_t *chan_desc = (channel_desc_t *)calloc(1,sizeof(channel_desc_t)); diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index 8f6f1bdfd9..863012f69a 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -110,6 +110,7 @@ double __attribute__ ((no_sanitize_address)) gaussdouble(double mean, double var } // Ziggurat +static bool tableNordDone=false; static double wn[128], fn[128]; static uint32_t iz, jz, jsr = 123456789, kn[128]; static int32_t hz; @@ -171,12 +172,18 @@ void tableNor(unsigned long seed) fn[i] = (exp(-0.5 * dn * dn)); wn[i] = (dn / m1); } - + tableNordDone=true; return; } double __attribute__ ((no_sanitize_address)) gaussZiggurat(double mean, double variance) { + if (!tableNordDone) { + // let's make reasonnable constant tables + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + tableNor((long)(t.tv_nsec%INT_MAX)); + } hz = SHR3; iz = hz & 127; return abs(hz) < kn[iz] ? hz * wn[iz] : nfix();